src/views/qualityManagement/processInspection/components/formDia.vue
@@ -66,8 +66,52 @@
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="数量:" prop="quantity">
            <el-form-item label="总数量:" prop="quantity">
              <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.quantity" placeholder="请输入" clearable :precision="2" :disabled="processQuantityDisabled"/>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="检品数量:" prop="inspectedQuantity">
              <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.inspectedQuantity" placeholder="请输入,不大于总数量" clearable :precision="2" :disabled="processQuantityDisabled"/>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="检验用粉剂/液情况:" prop="inspectMaterialCondition">
              <el-radio-group v-model="form.inspectMaterialCondition">
                <el-radio label="粉剂">粉剂</el-radio>
                <el-radio label="液体">液体</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="生产日期:" prop="productionDate">
              <el-date-picker
                  v-model="form.productionDate"
                  type="date"
                  placeholder="请选择日期"
                  value-format="YYYY-MM-DD"
                  format="YYYY-MM-DD"
                  clearable
                  style="width: 100%"
                  @change="calculateValidityDate"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="有效期:" prop="validityDate">
              <el-date-picker
                  v-model="form.validityDate"
                  type="date"
                  placeholder="自动计算或手动选择"
                  value-format="YYYY-MM-DD"
                  format="YYYY-MM-DD"
                  clearable
                  style="width: 100%"
              />
            </el-form-item>
          </el-col>
        </el-row>
@@ -155,10 +199,19 @@
          </el-select>
        </template>
        <template #deviceStatus="{ row }">
          <el-tag v-if="row.deviceStatus" :type="getDeviceStatusType(row.deviceStatus)">
            {{ row.deviceStatus }}
          </el-tag>
          <span v-else style="color: #999">-</span>
          <el-select
              v-model="row.deviceStatus"
              placeholder="请选择"
              default-first-option
              clearable
              style="width: 100%"
          >
            <el-option label="正常" value="正常" />
            <el-option label="停机" value="停机" />
            <el-option label="运行" value="运行" />
            <el-option label="维修" value="维修" />
            <el-option label="/" value="/" />
          </el-select>
        </template>
        <template #result="{ row }">
          <el-input v-model="row.result" placeholder="请输入" clearable />
@@ -221,6 +274,10 @@
    testStandardId: "",
    unit: "",
    quantity: "",
    inspectedQuantity: "",
    inspectMaterialCondition: "",
    productionDate: "",
    validityDate: "",
    checkCompany: "",
    checkResult: "",
  },
@@ -233,6 +290,25 @@
    testStandardId: [{required: false, message: "请选择指标", trigger: "change"}],
    unit: [{ required: false, message: "请输入", trigger: "blur" }],
    quantity: [{ required: true, message: "请输入", trigger: "blur" }],
    inspectedQuantity: [
      { required: true, message: "请输入检品数量", trigger: "blur" },
      {
        validator: (rule, value, callback) => {
          if (value !== '' && value !== null && value !== undefined) {
            const qty = Number(form.value.quantity);
            const inspectedQty = Number(value);
            if (!isNaN(qty) && !isNaN(inspectedQty) && inspectedQty > qty) {
              callback(new Error("检品数量不能大于总数量"));
            } else {
              callback();
            }
          } else {
            callback();
          }
        },
        trigger: "blur"
      }
    ],
    checkCompany: [{ required: false, message: "请输入", trigger: "blur" }],
    batchNo: [{ required: true, validator: validateBatchNo, trigger: "blur" }],
    checkResult: [{ required: true, message: "请输入", trigger: "change" }],
@@ -262,7 +338,7 @@
   {
      label: "单位",
      prop: "unit",
      width: 80
      width: 70
   },
   {
      label: "检测器具",
@@ -283,7 +359,7 @@
      prop: "result",
      dataType: 'slot',
      slot: 'result',
      minWidth: 150
    width: 150
   },
   {
      label: "结果判断",
@@ -332,6 +408,10 @@
      uidNo: "",
      batchNo: "",
      quantity: "",
      inspectedQuantity: "",
      inspectMaterialCondition: "",
      productionDate: "",
      validityDate: "",
      checkCompany: "",
      checkResult: "",
   }
@@ -432,6 +512,10 @@
  form.value.model = modelOptions.value.find(item => item.id == value)?.model || '';
  form.value.unit = modelOptions.value.find(item => item.id == value)?.unit || '';
  form.value.uidNo = modelOptions.value.find(item => item.id == value)?.uidNo || '';
  // 选择规格型号后,如果已有生产日期则重新计算有效期
  if (form.value.productionDate) {
    calculateValidityDate();
  }
}
const findNodeById = (nodes, productId) => {
@@ -575,6 +659,24 @@
   }
};
// 计算有效期(生产日期 + 规格型号中的有效期)
const calculateValidityDate = async () => {
  if (!form.value.productionDate) {
    form.value.validityDate = '';
    return;
  }
  // 获取规格型号的有效期
  const selectedModel = modelOptions.value.find(item => item.id == form.value.productModelId);
  if (selectedModel && selectedModel.validityPeriod) {
    const productionDate = new Date(form.value.productionDate);
    const validityPeriod = parseFloat(selectedModel.validityPeriod);
    const validityDate = new Date(productionDate);
    validityDate.setFullYear(validityDate.getFullYear() + Math.floor(validityPeriod));
    validityDate.setMonth(validityDate.getMonth() + Math.round((validityPeriod % 1) * 12));
    form.value.validityDate = validityDate.toISOString().split('T')[0];
  }
};
// 关闭弹框
const closeDia = () => {
  proxy.resetForm("formRef");