src/views/inventoryManagement/stockManagement/New.vue
@@ -2,81 +2,110 @@
  <div>
    <el-dialog v-model="isShow"
               title="新增库存"
               width="800"
               width="60%"
               @close="closeModal">
      <el-form label-width="140px"
               :model="formState"
               label-position="top"
               ref="formRef">
        <el-form-item label="产品名称"
                      prop="productModelId"
                      :rules="[
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="产品名称"
                          prop="productModelId"
                          :rules="[
                {
                required: true,
                message: '请选择产品',
                trigger: 'change',
              }
            ]">
          <el-button type="primary"
                     @click="showProductSelectDialog = true">
            {{ formState.productName ? formState.productName : '选择产品' }}
          </el-button>
        </el-form-item>
        <el-form-item label="规格"
                      prop="productModelName">
          <el-input v-model="formState.productModelName"
                    disabled />
        </el-form-item>
        <el-form-item label="单位"
                      prop="unit">
          <el-input v-model="formState.unit"
                    disabled />
        </el-form-item>
        <el-form-item label="库存类型"
                      prop="type"
                      :rules="[
              <el-button type="primary"
                         @click="showProductSelectDialog = true">
                {{ formState.productName ? formState.productName : '选择产品' }}
              </el-button>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="规格"
                          prop="productModelName">
              <el-input v-model="formState.productModelName"
                        disabled />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="单位"
                          prop="unit">
              <el-input v-model="formState.unit"
                        disabled />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="库存类型"
                          prop="type"
                          :rules="[
                {
                required: true,
                message: '请选择库存类型',
                trigger: 'change',
              }
            ]">
          <el-select v-model="formState.type"
                     placeholder="请选择库存类型">
            <el-option label="合格库存"
                       value="qualified" />
            <el-option label="不合格库存"
                       value="unqualified" />
          </el-select>
        </el-form-item>
        <el-form-item label="库存数量"
                      prop="qualitity">
          <el-input-number v-model="formState.qualitity"
                           :step="0.01"
                           :min="0.01"
                           :precision="2"
                           style="width: 100%" />
        </el-form-item>
        <el-form-item label="批号"
                      prop="batchNo">
          <el-input v-model="formState.batchNo"
                    placeholder="请输入批号" />
        </el-form-item>
        <el-form-item v-if="formState.type === 'qualified'"
                      label="库存预警数量"
                      prop="warnNum">
          <el-input-number v-model="formState.warnNum"
                           :step="0.01"
                           :min="0"
                           :max="formState.qualitity"
                           :precision="2"
                           style="width: 100%" />
        </el-form-item>
        <el-form-item label="备注"
                      prop="remark">
          <el-input v-model="formState.remark"
                    type="textarea" />
        </el-form-item>
              <el-select v-model="formState.type"
                         placeholder="请选择库存类型"
                         style="width: 100%">
                <el-option label="合格库存"
                           value="qualified" />
                <el-option label="不合格库存"
                           value="unqualified" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="库存数量"
                          prop="qualitity">
              <el-input-number v-model="formState.qualitity"
                               :step="0.01"
                               :min="0.01"
                               :precision="2"
                               style="width: 100%" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col v-if="formState.type === 'qualified'"
                  :span="12">
            <el-form-item label="库存预警数量"
                          prop="warnNum">
              <el-input-number v-model="formState.warnNum"
                               :step="0.01"
                               :min="0"
                               :max="formState.qualitity"
                               :precision="2"
                               style="width: 100%" />
            </el-form-item>
          </el-col>
          <el-col :span="formState.type === 'qualified' ? 12 : 24">
            <el-form-item label="批号"
                          prop="batchNo">
              <el-input v-model="formState.batchNo"
                        placeholder="请输入批号"
                        style="width: 100%" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="备注"
                          prop="remark">
              <el-input v-model="formState.remark"
                        type="textarea"
                        style="width: 100%" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <!-- 产品选择弹窗 -->
      <ProductSelectDialog v-model="showProductSelectDialog"
@@ -114,8 +143,7 @@
  const emit = defineEmits(["update:visible", "completed"]);
  // 响应式数据(替代选项式的 data)
  const formState = ref({
  const buildEmptyForm = () => ({
    productId: undefined,
    productModelId: undefined,
    productName: "",
@@ -127,6 +155,8 @@
    warnNum: 0,
    remark: "",
  });
  const formState = ref(buildEmptyForm());
  const isShow = computed({
    get() {
@@ -152,19 +182,8 @@
  let { proxy } = getCurrentInstance();
  const closeModal = () => {
    // 重置表单数据
    formState.value = {
      productId: undefined,
      productModelId: undefined,
      productName: "",
      productModelName: "",
      unit: "",
      type: undefined,
      qualitity: 0,
      batchNo: null,
      warnNum: 0,
      remark: "",
    };
    proxy.resetForm("formRef");
    formState.value = buildEmptyForm();
    isShow.value = false;
  };
@@ -186,29 +205,21 @@
  const handleSubmit = () => {
    proxy.$refs["formRef"].validate(valid => {
      if (valid) {
        // 验证是否选择了产品和规格
        // 验证是否选择了产品
        if (!formState.value.productModelId) {
          proxy.$modal.msgError("请选择产品");
          return;
        }
        if (!formState.value.productModelId) {
          proxy.$modal.msgError("请选择规格");
          return;
        }
        if (formState.value.type === "qualified") {
          addStockInRecordOnly(formState.value).then(res => {
            // 关闭模态框
            isShow.value = false;
            // 告知父组件已完成
            emit("completed");
            proxy.$modal.msgSuccess("提交成功");
          });
        } else {
          formState.value.warnNum = 0;
          createStockUnInventory(formState.value).then(res => {
            // 关闭模态框
            isShow.value = false;
            // 告知父组件已完成
            emit("completed");
            proxy.$modal.msgSuccess("提交成功");
          });