From cd0ca5e12922699cb2be51e99f8a7fc88eff5032 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期一, 20 四月 2026 14:30:34 +0800
Subject: [PATCH] feat: 添加销售台账入库状态校验功能,确保未入库明细无法发货
---
src/views/salesManagement/salesLedger/index.vue | 101 +++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 94 insertions(+), 7 deletions(-)
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 61251e2..6a71d8a 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -1815,7 +1815,11 @@
const buildLedgerQrCompositeDataUrl = row =>
new Promise((resolve, reject) => {
- const payload = JSON.stringify({ id: row.id });
+ const payload = JSON.stringify({
+ id: row.id,
+ salesContractNo: (row.salesContractNo ?? "").trim(),
+ type: "XS",
+ });
QRCode.toDataURL(payload, { width: 220, margin: 2 })
.then(qrDataUrl => {
const contract = (row.salesContractNo ?? "").trim() || "鈥�";
@@ -1885,7 +1889,7 @@
if (!ledgerQrCompositeUrl.value) return;
const a = document.createElement("a");
a.href = ledgerQrCompositeUrl.value;
- a.download = `閿�鍞攢鍞鍗曚簩缁寸爜-${ledgerQrDownloadBaseName.value}.png`;
+ a.download = `閿�鍞彴璐︿簩缁寸爜-${ledgerQrDownloadBaseName.value}.png`;
a.click();
};
@@ -2837,7 +2841,7 @@
const res = await productList({ salesLedgerId: id, type: 1 });
stockProductList.value = [];
stockProductList.value =
- res.data.filter(item => item.productStockStatus == 0) || [];
+ res.data.filter(item => item.productStockStatus == 0 || item.productStockStatus == 1) || [];
} catch (e) {
proxy?.$modal?.msgError?.("鑾峰彇浜у搧鍒楄〃澶辫触");
} finally {
@@ -3776,6 +3780,13 @@
} else {
const res = await getProcessCard(selectedId);
const processCardData = res?.data ?? {};
+ // 琛ラ綈浜岀淮鐮佹墍闇�鐨勫彴璐︽爣璇嗭紙鍚庣鏁版嵁鏈夋椂涓嶅甫 id锛�
+ if (processCardData && typeof processCardData === "object") {
+ processCardData.salesLedgerId = processCardData.salesLedgerId ?? selectedId;
+ processCardData.salesContractNo =
+ (processCardData.salesContractNo ?? "").trim() ||
+ String(selectedRow?.salesContractNo ?? "").trim();
+ }
const routeNodes = processCardData?.routeNodes;
const isProcessRouteEmpty =
!Array.isArray(routeNodes) || routeNodes.length === 0;
@@ -3794,9 +3805,9 @@
} catch {
return;
}
- printFinishedProcessCard(processCardData);
+ await printFinishedProcessCard(processCardData);
} else {
- printFinishedProcessCard(processCardData);
+ await printFinishedProcessCard(processCardData);
}
}
} catch (error) {
@@ -4213,6 +4224,40 @@
return statusStr === "寰呭彂璐�" || statusStr === "瀹℃牳鎷掔粷";
};
+ const getLedgerDisplayName = ledger =>
+ String(ledger?.salesContractNo || "").trim() ||
+ String(ledger?.projectName || "").trim() ||
+ `ID:${ledger?.id ?? "-"}`;
+
+ const validateLedgersStockedBeforeDelivery = async ledgers => {
+ const invalidLedgers = [];
+ for (const ledger of ledgers || []) {
+ const ledgerId = ledger?.id;
+ const ledgerName = getLedgerDisplayName(ledger);
+ if (!ledgerId) {
+ invalidLedgers.push(`${ledgerName}(缂哄皯鍙拌处ID)`);
+ continue;
+ }
+ let products = [];
+ try {
+ const res = await productList({ salesLedgerId: ledgerId, type: 1 });
+ products = Array.isArray(res?.data) ? res.data : [];
+ } catch (e) {
+ invalidLedgers.push(`${ledgerName}(鏄庣粏鍔犺浇澶辫触)`);
+ continue;
+ }
+ const unstockedProducts = products.filter(
+ item => Number(item?.productStockStatus) !== 2
+ );
+ if (unstockedProducts.length > 0) {
+ invalidLedgers.push(
+ `${ledgerName}(鏈叏閮ㄥ叆搴�${unstockedProducts.length}鏉�)`
+ );
+ }
+ }
+ return invalidLedgers;
+ };
+
const handleBulkDelivery = async () => {
if (selectedRows.value.length === 0) {
proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
@@ -4221,7 +4266,7 @@
// 鍙厑璁搞�愭湭鍙戣揣/瀹℃壒澶辫触銆戣繘鍏ュ彂璐ф祦绋�
const statusItem = selectedRows.value[0].deliveryStatus;
- const isTrue = true;
+ let isTrue = true;
selectedRows.value.forEach(row => {
if (row.deliveryStatus != 1 && row.deliveryStatus != 3) {
proxy.$modal.msgWarning("浠呮湭鍙戣揣鎴栧鎵瑰け璐ョ殑鍙拌处鍙互鍙戣揣");
@@ -4235,6 +4280,29 @@
}
});
if (!isTrue) {
+ return;
+ }
+
+ proxy.$modal.loading("姝e湪鏍¢獙鏄庣粏鍏ュ簱鐘舵�侊紝璇风◢鍊�...");
+ const invalidLedgers = await validateLedgersStockedBeforeDelivery(
+ selectedRows.value
+ );
+ proxy.$modal.closeLoading();
+ if (invalidLedgers.length > 0) {
+ try {
+ await ElMessageBox.alert(
+ `浠ヤ笅閿�鍞彴璐﹀瓨鍦ㄦ湭鍏ㄩ儴鍏ュ簱鐨勬槑缁嗭紝鏆備笉鍙彂璐э細\n${invalidLedgers.join(
+ "\n"
+ )}`,
+ "鎻愮ず",
+ {
+ type: "warning",
+ confirmButtonText: "鐭ラ亾浜�",
+ }
+ );
+ } catch {
+ /* 鍏抽棴寮圭獥 */
+ }
return;
}
@@ -4354,7 +4422,7 @@
};
// 鎵撳紑鍙戣揣寮规锛堝崟鏉★級
- const openDeliveryForm = row => {
+ const openDeliveryForm = async row => {
// 鍙厑璁搞�愭湭鍙戣揣/瀹℃壒澶辫触銆戝彂璐э紱宸插彂璐�/瀹℃壒涓笉鍏佽
const status = Number(row.deliveryStatus);
if (status !== 1 && status !== 3) {
@@ -4362,6 +4430,25 @@
return;
}
+ proxy.$modal.loading("姝e湪鏍¢獙鏄庣粏鍏ュ簱鐘舵�侊紝璇风◢鍊�...");
+ const invalidLedgers = await validateLedgersStockedBeforeDelivery([row]);
+ proxy.$modal.closeLoading();
+ if (invalidLedgers.length > 0) {
+ try {
+ await ElMessageBox.alert(
+ `褰撳墠閿�鍞彴璐﹀瓨鍦ㄦ湭鍏ㄩ儴鍏ュ簱鐨勬槑缁嗭紝鏆備笉鍙彂璐э細\n${invalidLedgers[0]}`,
+ "鎻愮ず",
+ {
+ type: "warning",
+ confirmButtonText: "鐭ラ亾浜�",
+ }
+ );
+ } catch {
+ /* 鍏抽棴寮圭獥 */
+ }
+ return;
+ }
+
currentDeliveryRows.value = [row];
deliveryForm.value = {
type: "璐ц溅",
--
Gitblit v1.9.3