huminmin
2 天以前 6e44e8e00d2fb1c59c1014c75b4c03238abba8ac
src/views/salesManagement/salesLedger/index.vue
@@ -284,10 +284,15 @@
          <el-col :span="12">
            <el-form-item label="销售合同号:"
                          prop="salesContractNo">
              <el-input v-model="form.salesContractNo"
                        placeholder="自动生成"
                        clearable
                        disabled />
              <div style="display: flex; align-items: center; gap: 12px;width: 100%;">
                <el-checkbox v-model="form.autoGenerateContractNo" v-if="operationType === 'add'">自动生成
                </el-checkbox>
                <el-input v-model="form.salesContractNo"
                          :placeholder="form.autoGenerateContractNo ? '自动生成' : '请输入'"
                          clearable
                          :disabled="form.autoGenerateContractNo" />
              </div>
            </el-form-item>
          </el-col>
          <el-col :span="12">
@@ -898,7 +903,8 @@
                          prop="type">
              <el-select v-model="deliveryForm.type"
                         placeholder="请选择发货类型"
                         style="width: 100%">
                         style="width: 100%"
                         @change="handleDeliveryTypeChange">
                <el-option label="货车"
                           value="货车" />
                <el-option label="快递"
@@ -910,6 +916,41 @@
            <el-form-item label="待发货数量:">
              <el-input :model-value="currentDeliveryRow?.noQuantity"
                        disabled />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24" v-if="deliveryForm.type === '货车'">
            <el-form-item label="发货车牌号:"
                          prop="shippingCarNumber">
              <el-input v-model="deliveryForm.shippingCarNumber"
                        placeholder="请输入发货车牌号"
                        clearable />
            </el-form-item>
          </el-col>
          <el-col :span="24" v-else>
            <el-form-item label="快递公司:"
                          prop="expressCompany">
              <el-input v-model="deliveryForm.expressCompany"
                        placeholder="请输入快递公司"
                        clearable />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30" v-if="deliveryForm.type === '快递'">
          <el-col :span="24">
            <el-form-item label="快递单号:"
                          prop="expressNumber">
              <el-input v-model="deliveryForm.expressNumber"
                        placeholder="请输入快递单号"
                        clearable />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="发货图片:">
              <ImageUpload v-model:file-list="deliveryFileList" :limit="9" />
            </el-form-item>
          </el-col>
        </el-row>
@@ -990,6 +1031,7 @@
  import useFormData from "@/hooks/useFormData.js";
  import dayjs from "dayjs";
  import FileUpload from "@/components/AttachmentUpload/file/index.vue";
  import ImageUpload from "@/components/AttachmentUpload/image/index.vue";
  import { getCurrentDate } from "@/utils/index.js";
  import { listCustomer } from "@/api/basicData/customer.js";
@@ -1017,6 +1059,7 @@
  });
  const total = ref(0);
  const fileList = ref([]);
  const deliveryFileList = ref([]);
  // 用户信息表单弹框数据
  const operationType = ref("");
@@ -1031,6 +1074,7 @@
    },
    form: {
      salesContractNo: "",
      autoGenerateContractNo: true,
      salesman: "",
      customerId: "",
      entryPerson: "",
@@ -1195,11 +1239,30 @@
        deliveryQuantity: 0,
      }));
  };
  const validateDeliveryShippingCarNumber = (_rule, value, callback) => {
    if (deliveryForm.value.type === "货车" && !value) {
      return callback(new Error("请输入发货车牌号"));
    }
    callback();
  };
  const validateDeliveryExpressCompany = (_rule, value, callback) => {
    if (deliveryForm.value.type === "快递" && !value) {
      return callback(new Error("请输入快递公司"));
    }
    callback();
  };
  const deliveryFormData = reactive({
    deliveryForm: {
      shippingCarNumber: "",
      expressCompany: "",
      expressNumber: "",
      type: "货车", // 货车, 快递
    },
    deliveryRules: {
      shippingCarNumber: [
        { validator: validateDeliveryShippingCarNumber, trigger: "blur" },
      ],
      expressCompany: [{ validator: validateDeliveryExpressCompany, trigger: "blur" }],
      type: [{ required: true, message: "请选择发货类型", trigger: "change" }],
    },
  });
@@ -1521,7 +1584,7 @@
    selectedQuotation.value = null;
    let userLists = await userListNoPage();
    userList.value = userLists.data;
    listCustomer({ current: -1, size: -1 }).then(res => {
    listCustomer({ current: -1, size: -1, type: 0 }).then(res => {
      customerOption.value = res.data.records;
    });
    form.value.entryPerson = userStore.id;
@@ -1530,6 +1593,8 @@
      form.value.entryDate = getCurrentDate();
      // 签订日期默认为当天
      form.value.executionDate = getCurrentDate();
      // 默认自动生成销售合同号
      form.value.autoGenerateContractNo = true;
    } else {
      currentId.value = row.id;
      getSalesLedgerWithProducts({ id: row.id, type: 1 }).then(res => {
@@ -1537,6 +1602,8 @@
        form.value.entryPerson = Number(res.entryPerson);
        productData.value = form.value.productData;
        fileList.value = form.value.storageBlobVOs;
        // 编辑时设置自动生成为false,允许手动修改
        form.value.autoGenerateContractNo = false;
      });
    }
    // let userAll = await userStore.getInfo()
@@ -1648,6 +1715,8 @@
        taxExclusiveTotalPrice: taxExclusiveTotalPrice,
        invoiceType: "增普票",
        isProduction: true,
        productId: p.productId,
        productModelId: p.productModelId
      };
    });
@@ -1671,6 +1740,9 @@
        }
        form.value.storageBlobDTOs = fileList;
        form.value.type = 1;
        if (form.value.autoGenerateContractNo) {
          form.value.salesContractNo = '';
        }
        addOrUpdateSalesLedger(form.value).then(res => {
          proxy.$modal.msgSuccess("提交成功");
          closeDia();
@@ -2537,6 +2609,7 @@
      审核拒绝: "审核拒绝",
      审核通过: "审核通过",
      已发货: "已发货",
      部分发货: "部分发货",
    };
    return statusTextMap[statusStr] || "待发货";
  };
@@ -2568,6 +2641,7 @@
      审核拒绝: "danger",
      审核通过: "success",
      已发货: "success",
      部分发货: "warning",
    };
    return typeTextMap[statusStr] || "info";
  };
@@ -2593,7 +2667,7 @@
    // 发货状态必须是"待发货"或"审核拒绝"
    const statusStr = shippingStatus ? String(shippingStatus).trim() : "";
    return statusStr === "待发货" || statusStr === "审核拒绝";
    return statusStr === "待发货" || statusStr === "审核拒绝" || statusStr === "部分发货";
  };
  // 打开附件弹窗
@@ -2621,10 +2695,14 @@
      row.productModelId || row.modelId
    );
    deliveryForm.value = {
      shippingCarNumber: "",
      expressCompany: "",
      expressNumber: "",
      type: "货车",
      batchNo: [],
      batchNoList,
    };
    deliveryFileList.value = [];
    deliveryFormVisible.value = true;
  };
@@ -2662,6 +2740,19 @@
          salesLedgerId: salesLedgerId,
          salesLedgerProductId: currentDeliveryRow.value.id,
          type: deliveryForm.value.type,
          shippingCarNumber:
            deliveryForm.value.type === "货车"
              ? deliveryForm.value.shippingCarNumber
              : "",
          expressCompany:
            deliveryForm.value.type === "快递"
              ? deliveryForm.value.expressCompany
              : "",
          expressNumber:
            deliveryForm.value.type === "快递"
              ? deliveryForm.value.expressNumber
              : "",
          storageBlobDTOs: deliveryFileList.value || [],
          batchNo: deliveryForm.value.batchNo,
          batchNoDetailList: selectedBatchRows.map(item => ({
            stockInventoryId: item.id,
@@ -2701,8 +2792,18 @@
  };
  // 关闭发货弹框
  const handleDeliveryTypeChange = val => {
    if (val === "货车") {
      deliveryForm.value.expressCompany = "";
      deliveryForm.value.expressNumber = "";
    } else {
      deliveryForm.value.shippingCarNumber = "";
    }
  };
  const closeDeliveryDia = () => {
    proxy.resetForm("deliveryFormRef");
    deliveryFileList.value = [];
    deliveryFormVisible.value = false;
    currentDeliveryRow.value = null;
  };
@@ -2919,4 +3020,4 @@
      page-break-after: avoid;
    }
  }
</style>
</style>