src/views/qualityManagement/processInspection/components/formDia.vue
@@ -23,6 +23,7 @@
                  @change="getModels"
                  :data="productOptions"
                  :render-after-expand="false"
                  :disabled="operationType === 'edit'"
                  style="width: 100%"
              />
            </el-form-item>
@@ -30,8 +31,11 @@
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="规格型号:" prop="model">
              <el-input v-model="form.model" placeholder="请输入" clearable/>
            <el-form-item label="规格型号:" prop="productModelId">
              <el-select v-model="form.productModelId" placeholder="请选择" clearable :disabled="operationType === 'edit'"
                         filterable readonly @change="handleChangeModel">
                <el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
@@ -56,7 +60,7 @@
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="单位:" prop="unit">
              <el-input v-model="form.unit" placeholder="请输入" clearable/>
              <el-input v-model="form.unit" placeholder="请输入" disabled/>
            </el-form-item>
          </el-col>
          <el-col :span="12">
@@ -128,7 +132,7 @@
<script setup>
import {ref, reactive, toRefs, getCurrentInstance, nextTick} from "vue";
import {getOptions} from "@/api/procurementManagement/procurementLedger.js";
import {productTreeList} from "@/api/basicData/product.js";
import {modelList, productTreeList} from "@/api/basicData/product.js";
import {qualityInspectAdd, qualityInspectUpdate} from "@/api/qualityManagement/rawMaterialInspection.js";
import {qualityInspectDetailByProductId, getQualityTestStandardParamByTestStandardId} from "@/api/qualityManagement/metricMaintenance.js";
import {userListNoPage} from "@/api/system/user.js";
@@ -145,6 +149,7 @@
    checkName: "",
    productName: "",
    productId: "",
    productModelId: "",
    model: "",
    testStandardId: "",
    unit: "",
@@ -157,7 +162,7 @@
    process: [{ required: true, message: "请输入工序", trigger: "blur" }],
    checkName: [{ required: false, message: "请输入", trigger: "blur" }],
    productId: [{ required: true, message: "请输入", trigger: "blur" }],
    model: [{ required: false, message: "请输入", trigger: "blur" }],
    productModelId: [{ required: true, message: "请选择", trigger: "change" }],
    testStandardId: [{required: false, message: "请选择指标", trigger: "change"}],
    unit: [{ required: false, message: "请输入", trigger: "blur" }],
    quantity: [{ required: true, message: "请输入", trigger: "blur" }],
@@ -197,26 +202,55 @@
const tableLoading = ref(false);
const currentProductId = ref(0);
const testStandardOptions = ref([]); // 指标选择下拉框数据
const modelOptions = ref([]);
// 打开弹框
const openDialog = async (type, row) => {
   operationType.value = type;
   dialogFormVisible.value = true;
   getOptions().then((res) => {
      supplierList.value = res.data;
   });
   let userLists = await userListNoPage();
   userList.value = userLists.data;
   form.value = {}
   // 先重置表单数据(保持字段完整,避免弹窗首次渲染时触发必填红框“闪一下”)
   form.value = {
      checkTime: "",
      process: "",
      checkName: "",
      productName: "",
      productId: "",
      productModelId: "",
      model: "",
      testStandardId: "",
      unit: "",
      quantity: "",
      checkCompany: "",
      checkResult: "",
   }
   testStandardOptions.value = [];
   tableData.value = [];
   getProductOptions();
   // 先确保产品树已加载,否则编辑时产品/规格型号无法反显
   await getProductOptions();
   if (operationType.value === 'edit') {
      // 先保存 testStandardId,避免被清空
      const savedTestStandardId = row.testStandardId;
      // 先设置表单数据,但暂时清空 testStandardId,等选项加载完成后再设置
      form.value = {...row, testStandardId: ''}
      currentProductId.value = row.productId || 0
      // 关键:编辑时加载规格型号下拉选项,才能反显 productModelId
      if (currentProductId.value) {
         try {
            const res = await modelList({ id: currentProductId.value });
            modelOptions.value = res || [];
            // 同步回填 model / unit(有些接口返回的 row 里可能没带全)
            if (form.value.productModelId) {
               handleChangeModel(form.value.productModelId);
            }
         } catch (e) {
            console.error("加载规格型号失败", e);
            modelOptions.value = [];
         }
      }
      // 编辑模式下,先加载指标选项,然后加载参数列表
      if (currentProductId.value) {
         // 先加载指标选项
@@ -258,19 +292,37 @@
         getQualityInspectParamList(row.id);
      }
   }
   // 最后再打开弹窗,并清理校验态,避免必填提示闪烁
   dialogFormVisible.value = true;
   nextTick(() => {
      proxy.$refs?.formRef?.clearValidate?.();
   });
}
const getProductOptions = () => {
  productTreeList().then((res) => {
  return productTreeList().then((res) => {
    productOptions.value = convertIdToValue(res);
      return productOptions.value;
  });
};
const getModels = (value) => {
   currentProductId.value = value
  form.value.productModelId = undefined;
  form.value.unit = undefined;
  modelOptions.value = [];
  currentProductId.value = value
  form.value.productName = findNodeById(productOptions.value, value);
   if (currentProductId.value) {
      getList();
   }
  modelList({ id: value }).then((res) => {
    modelOptions.value = res;
  })
  if (currentProductId.value) {
    getList();
  }
};
const handleChangeModel = (value) => {
  form.value.model = modelOptions.value.find(item => item.id == value)?.model || '';
  form.value.unit = modelOptions.value.find(item => item.id == value)?.unit || '';
}
const findNodeById = (nodes, productId) => {
  for (let i = 0; i < nodes.length; i++) {
    if (nodes[i].value === productId) {