From 6ed28fe4e3536519ed5c59dcdb06264eb5c9866e Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 13 四月 2026 14:10:59 +0800
Subject: [PATCH] fix: 销售订单状态修改、发货审批修改
---
src/views/salesManagement/salesLedger/index.vue | 122 +++++++++++++++++++++++++++++++++-------
1 files changed, 99 insertions(+), 23 deletions(-)
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index dae908a..3790894 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/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>
@@ -116,13 +124,13 @@
<el-tag v-else type="danger">涓嶈冻</el-tag>
</template>
</el-table-column>
- <el-table-column label="鍙戣揣鐘舵��" width="140" align="center">
+ <!-- <el-table-column label="鍙戣揣鐘舵��" width="140" align="center">
<template #default="scope">
<el-tag :type="getShippingStatusType(scope.row)" size="small">
{{ getShippingStatusText(scope.row) }}
</el-tag>
</template>
- </el-table-column>
+ </el-table-column> -->
<el-table-column label="蹇�掑叕鍙�" prop="expressCompany" show-overflow-tooltip />
<el-table-column label="蹇�掑崟鍙�" prop="expressNumber" show-overflow-tooltip />
<el-table-column label="鍙戣揣杞︾墝" minWidth="100px" align="center">
@@ -172,6 +180,16 @@
<el-table-column label="浠樻鏂瑰紡" prop="paymentMethod" show-overflow-tooltip />
<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="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 />
<el-table-column label="绛捐鏃ユ湡" prop="executionDate" width="120" show-overflow-tooltip />
@@ -987,6 +1005,7 @@
entryDate: null, // 褰曞叆鏃ユ湡
entryDateStart: undefined,
entryDateEnd: undefined,
+ deliveryStatus: undefined, // 鍙戣揣鐘舵�侊細1鏈彂璐� 2瀹℃壒涓� 3瀹℃壒澶辫触 4宸插彂璐�
},
form: {
salesContractNo: "",
@@ -2516,11 +2535,23 @@
* @param row 琛屾暟鎹�
*/
const canShip = (row) => {
+
// 浜у搧鐘舵�佸繀椤绘槸鍏呰冻锛坅pproveStatus === 1锛�
if (row.approveStatus !== 1) {
return false;
}
+ // 濡傛灉鍚庣杩斿洖浜嗗彴璐︾骇鍙戣揣鐘舵�侊紙deliveryStatus锛�
+ // 1=宸插彂璐э紝鍒欑姝㈠啀娆″彂璐�
+ const deliveryStatus = row.deliveryStatus;
+ if (
+ deliveryStatus !== null &&
+ deliveryStatus !== undefined &&
+ String(deliveryStatus).trim() !== ""
+ ) {
+ if (Number(deliveryStatus) === 1) return false;
+ }
+
// 鑾峰彇鍙戣揣鐘舵��
const shippingStatus = row.shippingStatus;
@@ -2538,6 +2569,44 @@
if (selectedRows.value.length === 0) {
proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
return;
+ }
+
+ // 鍙厑璁搞�愭湭鍙戣揣/瀹℃壒澶辫触銆戣繘鍏ュ彂璐ф祦绋�
+ 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("鎵�閫夐攢鍞彴璐﹀潎宸插彂璐э紝涓嶈兘鍐嶆鍙戣揣銆�", "鎻愮ず", {
+ type: "warning",
+ confirmButtonText: "鐭ラ亾浜�",
+ });
+ } catch {
+ /* 鍏抽棴寮圭獥 */
+ }
+ return;
+ }
+ if (shippedLedgers.length > 0) {
+ try {
+ await ElMessageBox.alert(
+ "閫変腑鐨勯攢鍞彴璐︿腑鍖呭惈宸插彂璐ц褰曪紝宸插彂璐х殑涓嶈兘鍐嶆鍙戣揣锛岀郴缁熷皢浠呬负鏈彂璐у彴璐﹀鐞嗐��",
+ "鎻愮ず",
+ {
+ type: "warning",
+ confirmButtonText: "鐭ラ亾浜�",
+ }
+ );
+ } catch {
+ return;
+ }
}
const customerNames = selectedRows.value.map((r) => String(r.customerName || "").trim());
@@ -2567,14 +2636,22 @@
try {
const targets = [];
for (const ledger of selectedRows.value) {
+
+ //濡傛灉宸茬粡鏄�滃鎵逛腑(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;
targets.push({
@@ -2583,7 +2660,6 @@
});
}
}
-
if (targets.length === 0) {
proxy.$modal.msgWarning("娌℃湁鍙彂璐х殑鏁版嵁");
return;
@@ -2615,14 +2691,15 @@
});
}
-// 鎵撳紑鍙戣揣寮规
+// 鎵撳紑鍙戣揣寮规锛堝崟鏉★級
const openDeliveryForm = (row) => {
- // 妫�鏌ユ槸鍚﹀彲浠ュ彂璐�
- if (!canShip(row)) {
- proxy.$modal.msgWarning("鍙湁鍦ㄤ骇鍝佺姸鎬佹槸鍏呰冻锛屽彂璐х姸鎬佹槸寰呭彂璐ф垨瀹℃牳鎷掔粷鐨勬椂鍊欐墠鍙互鍙戣揣");
+ // 鍙厑璁搞�愭湭鍙戣揣/瀹℃壒澶辫触銆戝彂璐э紱宸插彂璐�/瀹℃壒涓笉鍏佽
+ const status = Number(row.deliveryStatus);
+ if (status !== 1 && status !== 3) {
+ proxy.$modal.msgWarning("鍙湁鍙戣揣鐘舵�佷负鏈彂璐ф垨瀹℃壒澶辫触鐨勮褰曟墠鍙互鍙戣揣");
return;
}
-
+
currentDeliveryRows.value = [row];
deliveryForm.value = {
type: "璐ц溅",
@@ -2653,19 +2730,18 @@
return;
}
- // 渚濇鍙戣揣锛堥伩鍏嶅苟鍙戜笅搴撳瓨鎵e噺/鐘舵�佹洿鏂颁簰鐩稿奖鍝嶏級
- 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(() => {
--
Gitblit v1.9.3