gongchunyi
9 天以前 ac42eaba695bbef82cdfc4166c7fddf2b45f9b0e
src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
@@ -102,17 +102,30 @@
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="是否抽检:" prop="isSampling">
              <el-radio-group v-model="form.isSampling" class="sampling-radio-group" :disabled="isViewMode" @change="handleSamplingChange">
                <el-radio-button :label="1">是</el-radio-button>
                <el-radio-button :label="0">否</el-radio-button>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="12" v-if="form.isSampling === 1">
            <el-form-item label="抽检数量:" prop="samplingQuantity">
              <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.samplingQuantity"
                               placeholder="请输入" clearable :precision="2" :disabled="isViewMode"/>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="检测单位:" prop="checkCompany">
              <el-input v-model="form.checkCompany" placeholder="请输入" clearable :disabled="isViewMode"/>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="检测结果:" prop="checkResult">
              <el-select v-model="form.checkResult" :disabled="isViewMode">
                <el-option label="合格" value="合格"/>
                <el-option label="不合格" value="不合格"/>
                <el-option label="部分合格" value="部分合格"/>
              </el-select>
            <el-form-item label="合格率:">
              <el-tag :type="passRateTagType">{{ passRateDisplayText }}</el-tag>
            </el-form-item>
          </el-col>
        </el-row>
@@ -194,7 +207,8 @@
    unit: "",
    quantity: "",
    checkCompany: "",
    checkResult: "",
    isSampling: 0,
    samplingQuantity: "",
  },
  rules: {
    checkTime: [{required: true, message: "请输入", trigger: "blur"},],
@@ -208,7 +222,8 @@
    qualifiedQuantity: [{required: true, message: "请输入", trigger: "blur"}],
    unqualifiedQuantity: [{required: true, message: "请输入", trigger: "blur"}],
    checkCompany: [{required: false, message: "请输入", trigger: "blur"}],
    checkResult: [{required: true, message: "请选择检测结果", trigger: "change"}],
    isSampling: [{required: true, message: "请选择是否抽检", trigger: "change"}],
    samplingQuantity: [{required: true, message: "请输入抽检数量", trigger: "blur"}],
  },
});
const tableColumn = ref([
@@ -249,6 +264,37 @@
// 是否为查看模式
const isViewMode = computed(() => operationType.value === 'view');
const passRateValue = computed(() => {
  const fromApi = form.value.passRate;
  if (fromApi != null && fromApi !== '') {
    const n = Number(fromApi);
    if (!Number.isNaN(n)) return n;
  }
  const qualified = Number(form.value.qualifiedQuantity) || 0;
  const unqualified = Number(form.value.unqualifiedQuantity) || 0;
  const total = qualified + unqualified;
  if (!total || total === 0) return null;
  return (qualified / total) * 100;
});
const passRateDisplayText = computed(() => {
  const params = passRateValue.value;
  if (params == null || params === '') return '—';
  const n = Number(params);
  if (Number.isNaN(n)) return '—';
  return `${n.toFixed(2)}%`;
});
const passRateTagType = computed(() => {
  const params = passRateValue.value;
  if (params == null || params === '') return 'info';
  const n = Number(params);
  if (Number.isNaN(n)) return 'info';
  if (n >= 100) return 'success';
  if (n >= 90) return 'warning';
  return 'danger';
});
// 编辑时:productMainId 或 purchaseLedgerId 任一有值则供应商、数量置灰
const supplierQuantityDisabled = computed(() => {
  const v = form.value || {};
@@ -282,7 +328,8 @@
    unit: "",
    quantity: "",
    checkCompany: "",
    checkResult: "",
    isSampling: 0,
    samplingQuantity: "",
  }
  testStandardOptions.value = [];
  tableData.value = [];
@@ -291,7 +338,8 @@
  if (operationType.value === 'edit' || operationType.value === 'view') {
    // 先保存 testStandardId,避免被清空
    const savedTestStandardId = row.testStandardId;
    form.value = {...row}
    const { passRate, ...rowWithoutPassRate } = row;
    form.value = { ...rowWithoutPassRate, testStandardId: "" };
    currentProductId.value = row.productId || 0
    // 关键:编辑时加载规格型号下拉选项,才能反显 productModelId
    if (currentProductId.value) {
@@ -506,6 +554,16 @@
  }
};
// 是否抽检切换
const handleSamplingChange = (value) => {
  if (value !== 1) {
    form.value.samplingQuantity = "";
    nextTick(() => {
      proxy.$refs?.formRef?.clearValidate?.("samplingQuantity");
    });
  }
};
// 关闭弹框
const closeDia = () => {
  proxy.resetForm("formRef");
@@ -521,5 +579,7 @@
</script>
<style scoped>
.sampling-radio-group {
  height: 32px;
}
</style>