zhangwencui
2026-04-24 664bba7725ee0dcdcb29bb218a81f78f3f7aefc4
src/views/productionManagement/processRoute/processRouteItem/index.vue
@@ -108,6 +108,13 @@
          {{scope.row.isQuality ? "是" : "否"}}
        </template>
      </el-table-column>
      <el-table-column label="是否生产"
                       prop="isProduction"
                       width="100">
        <template #default="scope">
          {{scope.row.isProduction ? "是" : "否"}}
        </template>
      </el-table-column>
      <el-table-column label="操作"
                       align="center"
                       fixed="right"
@@ -166,6 +173,10 @@
                <el-tag type="primary"
                        class="product-tag"
                        v-if="item.isQuality">质检</el-tag>
                <el-tag type="primary"
                        class="product-tag"
                        :style="item.isQuality?'margin-left:8px':''"
                        v-if="item.isProduction">生产</el-tag>
              </div>
              <div v-else
                   class="product-info empty">暂无产品信息</div>
@@ -220,8 +231,8 @@
              :default-expand-all="true"
              style="width: 100%">
      <el-table-column type="expand">
        <template #default="props">
          <el-form ref="form"
        <template #default>
          <el-form ref="bomFormRef"
                   :model="bomDataValue">
            <el-table :data="bomDataValue.dataList"
                      row-key="tempId"
@@ -345,7 +356,7 @@
                       prop="model" />
    </el-table>
    <ProductSelectDialog v-if="bomDataValue.showProductDialog"
                         v-model:model-value="bomDataValue.showProductDialog"
                         v-model="bomDataValue.showProductDialog"
                         :single="true"
                         @confirm="handleBomProduct" />
    <!-- 新增/编辑弹窗 -->
@@ -362,6 +373,7 @@
          <el-select v-model="form.technologyOperationId"
                     placeholder="请选择工序"
                     clearable
                     @change="processChange"
                     style="width: 100%">
            <el-option v-for="process in processOptions"
                       :key="process.id"
@@ -373,8 +385,8 @@
                      prop="productModelId">
          <el-button type="primary"
                     @click="showProductSelectDialog = true">
            {{ form.productName && form.model
              ? `${form.productName} - ${form.model}`
            {{ form.productName
              ? (form.model ? `${form.productName} - ${form.model}` : form.productName)
              : '选择产品' }}
          </el-button>
        </el-form-item>
@@ -389,7 +401,13 @@
                      prop="isQuality">
          <el-switch v-model="form.isQuality"
                     :active-value="true"
                     inactive-value="false" />
                     :inactive-value="false" />
        </el-form-item>
        <el-form-item label="是否生产"
                      prop="isProduction">
          <el-switch v-model="form.isProduction"
                     :active-value="true"
                     :inactive-value="false" />
        </el-form-item>
      </el-form>
      <template #footer>
@@ -436,7 +454,10 @@
    batchDeleteProcessRouteItem,
    getProcessParamList,
  } from "@/api/productionManagement/processRouteItem.js";
  import { syncProcessParamItem } from "@/api/productionManagement/processRouteItem.js";
  import {
    syncProcessParamItem,
    syncProcessParamItemOrder,
  } from "@/api/productionManagement/processRouteItem.js";
  import {
    findProductProcessRouteItemList,
    deleteRouteItem,
@@ -451,6 +472,7 @@
    queryList,
    addBomDetail,
  } from "@/api/productionManagement/productStructure.js";
  import { useRoute } from "vue-router";
  import { ElMessageBox, ElMessage } from "element-plus";
  import Sortable from "sortablejs";
@@ -467,6 +489,7 @@
  const dialogVisible = ref(false);
  const operationType = ref("add"); // add | edit
  const formRef = ref(null);
  const bomFormRef = ref(null);
  const submitLoading = ref(false);
  const cardsContainer = ref(null);
  const tableRef = ref(null);
@@ -505,6 +528,7 @@
    model: "",
    unit: "",
    isQuality: false,
    isProduction: false,
  });
  const rules = {
@@ -523,17 +547,31 @@
      type: "warning",
    })
      .then(() => {
        syncProcessParamItem({
          replaceExisting: true,
          technologyRoutingOperationId: currentProcess.value.id,
        }).then(res => {
          if (res.code === 200) {
            ElMessage.success("同步成功");
            refreshParamList();
          } else {
            ElMessage.error(res.msg || "同步失败");
          }
        });
        if (pageType.value === "order") {
          syncProcessParamItemOrder({
            replaceExisting: true,
            technologyRoutingOperationId: currentProcess.value.id,
          }).then(res => {
            if (res.code === 200) {
              ElMessage.success("同步成功");
              refreshParamList();
            } else {
              ElMessage.error(res.msg || "同步失败");
            }
          });
        } else {
          syncProcessParamItem({
            replaceExisting: true,
            technologyRoutingOperationId: currentProcess.value.id,
          }).then(res => {
            if (res.code === 200) {
              ElMessage.success("同步成功");
              refreshParamList();
            } else {
              ElMessage.error(res.msg || "同步失败");
            }
          });
        }
      })
      .catch(() => {});
  };
@@ -618,6 +656,7 @@
      model: row.model || "",
      unit: row.unit || "",
      isQuality: row.isQuality,
      isProduction: row.isProduction,
    };
    dialogVisible.value = true;
  };
@@ -650,15 +689,20 @@
  // 产品选择
  const handleProductSelect = products => {
    console.log(products, "===products===");
    if (products && products.length > 0) {
      const product = products[0];
      form.value.productModelId = product.id;
      form.value.productName = product.productName;
      form.value.model = product.model;
      form.value.unit = product.unit || "";
      console.log(product, "product");
      form.value = {
        ...form.value,
        productModelId: product.id,
        productName: product.productName,
        model: product.model,
        unit: product.unit || "",
      };
      showProductSelectDialog.value = false;
      // 触发表单验证
      formRef.value?.validateField("productModelId");
      // formRef.value?.validateField("productModelId");
    }
  };
@@ -681,6 +725,7 @@
                technologyOperationId: form.value.technologyOperationId,
                productModelId: form.value.productModelId,
                isQuality: form.value.isQuality,
                isProduction: form.value.isProduction,
                dragSort,
              })
            : addOrUpdateProcessRouteItem({
@@ -688,6 +733,7 @@
                technologyOperationId: form.value.technologyOperationId,
                productModelId: form.value.productModelId,
                isQuality: form.value.isQuality,
                isProduction: form.value.isProduction,
                dragSort,
              });
@@ -713,6 +759,7 @@
                technologyOperationId: form.value.technologyOperationId,
                productModelId: form.value.productModelId,
                isQuality: form.value.isQuality,
                isProduction: form.value.isProduction,
              })
            : addOrUpdateProcessRouteItem1({
                technologyRoutingId: Number(routeId.value),
@@ -720,6 +767,7 @@
                productModelId: form.value.productModelId,
                id: form.value.id,
                isQuality: form.value.isQuality,
                isProduction: form.value.isProduction,
              });
          updatePromise
@@ -749,6 +797,8 @@
      productName: "",
      model: "",
      unit: "",
      isQuality: false,
      isProduction: false,
    };
    formRef.value?.resetFields();
  };
@@ -764,7 +814,7 @@
    currentProcess.value = row;
    const query = {
      technologyRoutingOperationId: row.id,
      orderId: orderId.value,
      productionOrderId: orderId.value,
    };
    const apiPromise =
@@ -970,6 +1020,14 @@
      }
    });
  };
  const processChange = value => {
    processOptions.value.forEach(item => {
      if (item.id == value) {
        form.value.isQuality = item.isQuality;
        form.value.isProduction = item.isProduction;
      }
    });
  };
  const handleBomProcessChange = (row, value) => {
    row.processId = value || "";