1
yyb
4 天以前 0878762ff3d0796e5fcb22fc38103a3079d6ca24
src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
@@ -5,53 +5,92 @@
               width="70%"
               @close="closeDia">
      <el-form :model="form"
               label-width="140px"
               label-position="top"
               label-width="100px"
               label-position="left"
               :rules="rules"
               ref="formRef">
        <el-row :gutter="30">
          <el-col :span="12">
               ref="formRef"
               class="inspection-form">
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="供应商:"
                          prop="supplier">
              <el-select v-model="form.supplier"
                         placeholder="请选择"
                         clearable
                         :disabled="supplierQuantityDisabled">
                <el-option v-for="item in supplierList"
                           :key="item.id"
                           :label="item.supplierName"
                           :value="item.supplierName" />
              </el-select>
              <el-input v-model="form.supplier"
                        placeholder="请输入"
                        clearable />
            </el-form-item>
          </el-col>
          <el-col :span="12">
          <el-col :span="8">
            <el-form-item label="产品:"
                          prop="productId">
              <el-button type="primary"
                         @click="openProductSelectDialog"
                         :disabled="operationType === 'edit'">选择产品</el-button>
              <div class="selected-product mt-2"
                   v-if="form.productName">
                <el-tag closable
                        @close="clearProductSelection"
                        class="mr-2">
                  {{ form.productName }} - {{ form.model }}
                </el-tag>
              </div>
              <div v-else
                   class="text-gray-400">请选择产品</div>
                         :disabled="operationType === 'edit'"
                         class="product-select-btn">{{form.productName || "选择产品"}}{{form.model?(" - "+form.model):""}}</el-button>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
          <el-col :span="8">
            <el-form-item label="试样编号:"
                          prop="sampleCode">
              <el-input v-model="form.sampleCode"
                        placeholder="请输入"
                        clearable />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="车牌号:"
                          prop="licensePlateNumber">
              <el-input v-model="form.licensePlateNumber"
                        placeholder="请输入"
                        clearable />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="检测性质:"
                          prop="inspectNature">
              <el-select v-model="form.inspectNature"
                         style="width: 100%">
                <el-option label="日常检测"
                           value="日常检测" />
                <el-option label="入场验收"
                           value="入场验收" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="试样状态:"
                          prop="sampleState">
              <el-select v-model="form.sampleState"
                         style="width: 100%">
                <el-option label="固体"
                           value="固体" />
                <el-option label="颗粒"
                           value="颗粒" />
                <el-option label="膏体"
                           value="膏体" />
                <el-option label="粉末"
                           value="粉末" />
                <el-option label="液体"
                           value="液体" />
                <el-option label="气体"
                           value="气体" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="数量:"
                          prop="quantity">
              <el-input type="number"
                        v-model="form.quantity" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="单位:"
                          prop="unit">
              <el-input v-model="form.unit"
                        disabled />
            </el-form-item>
          </el-col>
          <el-col :span="12">
          <el-col :span="8">
            <el-form-item label="指标选择:"
                          prop="testStandardId">
              <el-select v-model="form.testStandardId"
@@ -66,9 +105,7 @@
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
          <el-col :span="8">
            <el-form-item label="检测单位:"
                          prop="checkCompany">
              <el-input v-model="form.checkCompany"
@@ -76,10 +113,11 @@
                        clearable />
            </el-form-item>
          </el-col>
          <el-col :span="12">
          <el-col :span="8">
            <el-form-item label="检测结果:"
                          prop="checkResult">
              <el-select v-model="form.checkResult">
              <el-select v-model="form.checkResult"
                         style="width: 100%">
                <el-option label="合格"
                           value="合格" />
                <el-option label="不合格"
@@ -87,9 +125,7 @@
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
          <el-col :span="8">
            <el-form-item label="检验员:"
                          prop="checkName">
              <el-select v-model="form.checkName"
@@ -103,10 +139,22 @@
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
          <el-col :span="8">
            <el-form-item label="检测日期:"
                          prop="checkTime">
              <el-date-picker v-model="form.checkTime"
                              type="date"
                              placeholder="请选择日期"
                              value-format="YYYY-MM-DD"
                              format="YYYY-MM-DD"
                              clearable
                              style="width: 100%" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="取样日期:"
                          prop="sampleTime">
              <el-date-picker v-model="form.sampleTime"
                              type="date"
                              placeholder="请选择日期"
                              value-format="YYYY-MM-DD"
@@ -190,9 +238,14 @@
      quantity: "",
      checkCompany: "",
      checkResult: "",
      inspectNature: "",
      sampleCode: "",
      sampleState: "",
      licensePlateNumber: "",
      sampleTime: "",
    },
    rules: {
      checkTime: [{ required: true, message: "请输入", trigger: "blur" }],
      checkTime: [{ required: false, message: "请输入", trigger: "blur" }],
      supplier: [{ required: true, message: "请输入", trigger: "blur" }],
      checkName: [{ required: false, message: "请输入", trigger: "blur" }],
      productId: [{ required: true, message: "请输入", trigger: "blur" }],
@@ -203,11 +256,22 @@
        { required: false, message: "请选择指标", trigger: "change" },
      ],
      unit: [{ required: false, message: "请输入", trigger: "blur" }],
      quantity: [{ required: true, message: "请输入", trigger: "blur" }],
      // quantity: [{ required: true, message: "请输入", trigger: "blur" }],
      checkCompany: [{ required: false, message: "请输入", trigger: "blur" }],
      checkResult: [
        { required: true, message: "请选择检测结果", trigger: "change" },
        { required: false, message: "请选择检测结果", trigger: "change" },
      ],
      inspectNature: [
        { required: false, message: "请选择检测性质", trigger: "change" },
      ],
      sampleState: [
        { required: false, message: "请选择试样状态", trigger: "change" },
      ],
      sampleCode: [{ required: false, message: "请输入", trigger: "blur" }],
      licensePlateNumber: [
        { required: false, message: "请输入", trigger: "blur" },
      ],
      sampleTime: [{ required: false, message: "请输入", trigger: "blur" }],
    },
  });
  const tableColumn = ref([
@@ -270,7 +334,6 @@
    form.value = {
      checkTime: "",
      supplier: "",
      checkName: "",
      productName: "",
      productId: "",
      productModelId: "",
@@ -297,7 +360,7 @@
          modelOptions.value = res || [];
          // 同步回填 model / unit(有些接口返回的 row 里可能没带全)
          if (form.value.productModelId) {
            handleChangeModel(form.value.productModelId);
            // handleChangeModel(form.value.productModelId);
          }
        } catch (e) {
          console.error("加载规格型号失败", e);
@@ -533,4 +596,163 @@
</script>
<style scoped>
</style>
  .inspection-form {
    background-color: #f9f9f9;
    border-radius: 8px;
    padding: 20px;
    margin-bottom: 20px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  }
  .product-select-btn {
    width: 100%;
    text-align: left;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    transition: all 0.3s ease;
  }
  .product-select-btn:hover {
    box-shadow: 0 2px 8px rgba(0, 122, 255, 0.3);
  }
  /* 增加表单项间距 */
  .el-form-item {
    margin-bottom: 15px;
  }
  /* 输入框和选择器的悬停效果 */
  :deep(.el-input__wrapper) {
    transition: all 0.3s ease;
  }
  :deep(.el-input__wrapper:hover) {
    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
  }
  :deep(.el-select) {
    transition: all 0.3s ease;
  }
  :deep(.el-select:hover .el-input__wrapper) {
    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
  }
  /* 日期选择器的悬停效果 */
  :deep(.el-date-picker) {
    transition: all 0.3s ease;
  }
  :deep(.el-date-picker:hover .el-input__wrapper) {
    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
  }
  /* 优化表格样式 */
  :deep(.el-table) {
    border-radius: 8px;
    overflow: hidden;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
    transition: all 0.3s ease;
  }
  :deep(.el-table:hover) {
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  }
  :deep(.el-table th) {
    background-color: #f5f7fa;
    font-weight: 600;
  }
  :deep(.el-table tr:hover) {
    background-color: #f0f9ff;
  }
  /* 表格输入框样式 */
  :deep(.el-table .el-input__wrapper) {
    box-shadow: none !important;
  }
  :deep(.el-table .el-input__wrapper:hover) {
    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
  }
  /* 优化对话框底部按钮 */
  .dialog-footer {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    margin-top: 20px;
  }
  .dialog-footer .el-button {
    transition: all 0.3s ease;
    padding: 8px 20px;
    border-radius: 4px;
  }
  .dialog-footer .el-button:hover {
    transform: translateY(-1px);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
  }
  .dialog-footer .el-button--primary:hover {
    box-shadow: 0 2px 8px rgba(0, 122, 255, 0.4);
  }
  /* 表单验证状态样式 */
  :deep(.el-form-item__error) {
    font-size: 12px;
    color: #f56c6c;
    margin-top: 4px;
  }
  :deep(.el-form-item.is-error .el-input__wrapper) {
    box-shadow: 0 0 0 2px rgba(245, 108, 108, 0.2) !important;
  }
  :deep(.el-form-item.is-success .el-input__wrapper) {
    box-shadow: 0 0 0 2px rgba(103, 194, 58, 0.2) !important;
  }
  /* 响应式设计 */
  @media screen and (max-width: 1200px) {
    .el-col {
      :deep(.el-col) {
        &[class*="el-col-8"] {
          flex: 0 0 50%;
          max-width: 50%;
        }
      }
    }
  }
  @media screen and (max-width: 768px) {
    .el-col {
      :deep(.el-col) {
        &[class*="el-col-8"] {
          flex: 0 0 100%;
          max-width: 100%;
        }
      }
    }
    .inspection-form {
      padding: 15px;
    }
    .el-form {
      label-width: 80px !important;
    }
    .dialog-footer {
      flex-direction: column;
      align-items: stretch;
    }
    .dialog-footer .el-button {
      width: 100%;
    }
  }
</style>