gongchunyi
2 天以前 06e376d130d0fc87adbf0e0addbcb4c8db52e0f4
src/views/salesManagement/salesLedger/index.vue
@@ -18,6 +18,14 @@
          <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
            placeholder="请选择" clearable @change="changeDaterange" />
        </el-form-item>
        <el-form-item label="发货状态:">
          <el-select v-model="searchForm.deliveryStatus" placeholder="请选择" clearable style="width: 140px">
            <el-option label="未发货" :value="1" />
            <el-option label="审批中" :value="2" />
            <el-option label="审批失败" :value="3" />
            <el-option label="已发货" :value="4" />
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="handleQuery"> 搜索 </el-button>
        </el-form-item>
@@ -174,8 +182,11 @@
          :formatter="formattedNumber" />
        <el-table-column label="发货状态" width="140" align="center">
         <template #default="scope">
            <el-tag v-if="Number(scope.row.deliveryStatus) === 1" type="success">已发货</el-tag>
            <el-tag v-else type="info">未发货</el-tag>
            <el-tag v-if="Number(scope.row.deliveryStatus) === 1" type="info">未发货</el-tag>
            <el-tag v-else-if="Number(scope.row.deliveryStatus) === 2" type="warning">审批中</el-tag>
            <el-tag v-else-if="Number(scope.row.deliveryStatus) === 3" type="danger">审批失败</el-tag>
            <el-tag v-else-if="Number(scope.row.deliveryStatus) === 4" type="success">已发货</el-tag>
            <el-tag v-else type="info">-</el-tag>
         </template>
        </el-table-column>
        <el-table-column label="录入人" prop="entryPersonName" width="100" show-overflow-tooltip />
@@ -993,6 +1004,7 @@
      entryDate: null, // 录入日期
      entryDateStart: undefined,
      entryDateEnd: undefined,
      deliveryStatus: undefined, // 发货状态:1未发货 2审批中 3审批失败 4已发货
   },
   form: {
      salesContractNo: "",
@@ -2524,9 +2536,9 @@
const canShip = (row) => {
   // 产品状态必须是充足(approveStatus === 1)
   // if (row.approveStatus !== 1) {
   //    return false;
   // }
   if (row.approveStatus !== 1) {
      return false;
   }
   
   // 如果后端返回了台账级发货状态(deliveryStatus)
   // 1=已发货,则禁止再次发货
@@ -2558,8 +2570,18 @@
      return;
   }
   // 已发货台账:弹窗提醒,不能再次发货
   const shippedLedgers = selectedRows.value.filter((r) => Number(r.deliveryStatus) === 1);
   // 只允许【未发货/审批失败】进入发货流程
   const canDeliveryLedgers = selectedRows.value.filter((r) => {
      const status = Number(r.deliveryStatus);
      return status === 1 || status === 3;
   });
   if (canDeliveryLedgers.length === 0) {
      proxy.$modal.msgWarning("仅未发货或审批失败的台账可以发货");
      return;
   }
   // 已发货台账:弹窗提醒,不能再次发货(4 视为已发货)
   const shippedLedgers = selectedRows.value.filter((r) => Number(r.deliveryStatus) === 4);
   if (shippedLedgers.length === selectedRows.value.length) {
      try {
         await ElMessageBox.alert("所选销售台账均已发货,不能再次发货。", "提示", {
@@ -2613,14 +2635,21 @@
   try {
      const targets = [];
      for (const ledger of selectedRows.value) {
         // 台账已发货:不允许再次发货
         if (Number(ledger.deliveryStatus) === 1) continue;
         //如果已经是“审批中(2)”或“已发货(4)”,则跳过,不允许重复操作
         const status = Number(ledger.deliveryStatus);
         if (status === 2 || status === 4) {
            console.warn(`台账编号 ${ledger.salesContractNo} 状态为 ${status},跳过发货`);
            continue;
         }
         let products = [];
         try {
            const res = await productList({ salesLedgerId: ledger.id, type: 1 });
            products = res?.data || [];
         } catch {
         } catch (error) {
            products = [];
            console.error('请求发生异常', error);
         }
         for (const product of products) {
            if (!canShip(product)) continue;
@@ -2630,7 +2659,6 @@
            });
         }
      }
      if (targets.length === 0) {
         proxy.$modal.msgWarning("没有可发货的数据");
         return;
@@ -2662,23 +2690,15 @@
   });
}
// 打开发货弹框
// 打开发货弹框(单条)
const openDeliveryForm = (row) => {
   // 如果该行已经发货(deliveryStatus=1),禁止再次发货
   if (Number(row.deliveryStatus) === 1) {
      ElMessageBox.alert("该记录已发货,不能再次发货。", "提示", {
         type: "warning",
         confirmButtonText: "知道了",
      });
   // 只允许【未发货/审批失败】发货;已发货/审批中不允许
   const status = Number(row.deliveryStatus);
   if (status !== 1 && status !== 3) {
      proxy.$modal.msgWarning("只有发货状态为未发货或审批失败的记录才可以发货");
      return;
   }
   // 检查是否可以发货
   if (!canShip(row)) {
      proxy.$modal.msgWarning("只有在产品状态是充足,发货状态是待发货或审核拒绝的时候才可以发货");
      return;
   }
   currentDeliveryRows.value = [row];
  deliveryForm.value = {
    type: "货车",