gongchunyi
3 天以前 6ed28fe4e3536519ed5c59dcdb06264eb5c9866e
src/views/salesManagement/salesLedger/index.vue
@@ -181,13 +181,14 @@
        <el-table-column label="合同金额(元)" prop="contractAmount" width="220" show-overflow-tooltip
          :formatter="formattedNumber" />
        <el-table-column label="发货状态" width="140" align="center">
         <template #default="scope">
            <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>
            <template #default="scope">
                  <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="primary">审批通过</el-tag>
                  <el-tag v-else-if="Number(scope.row.deliveryStatus) === 5" 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 />
        <el-table-column label="录入日期" prop="entryDate" width="120" show-overflow-tooltip />
@@ -2635,14 +2636,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;
@@ -2652,7 +2660,6 @@
            });
         }
      }
      if (targets.length === 0) {
         proxy.$modal.msgWarning("没有可发货的数据");
         return;
@@ -2723,19 +2730,18 @@
        return;
      }
      // 依次发货(避免并发下库存扣减/状态更新互相影响)
      const run = async () => {
        for (const item of targets) {
          const salesLedgerId = item.salesLedgerId;
          if (!salesLedgerId) continue;
          await addShippingInfo({
            salesLedgerId,
            salesLedgerProductId: item.id,
            type: deliveryForm.value.type,
            approveUserIds,
          });
        }
      };
      // 按台账维度去重,每个 salesLedgerId 只调用一次发货接口
      const uniqueLedgerIds = [...new Set(targets.map((item) => item.salesLedgerId).filter(Boolean))];
      const run = async () => {
         for (const salesLedgerId of uniqueLedgerIds) {
            await addShippingInfo({
               salesLedgerId,
               type: deliveryForm.value.type,
               approveUserIds,
            });
         }
      };
      run()
        .then(() => {