From 2403e0b0a127278d40e2fc780311d93262bef52c Mon Sep 17 00:00:00 2001
From: liulijun <liulijun@hnkhzn.com>
Date: 星期三, 25 三月 2026 16:47:03 +0800
Subject: [PATCH] 修复库位平面图三四五巷道部分货位没有按列显示的问题
---
项目代码/WMS/WMSClient/src/main.js | 13
项目代码/WMS/WMSClient/src/services/taskTimeout.js | 259 ++++++++++++++++
项目代码/WMS/WMSClient/src/views/Home.vue | 143 ++++++--
项目代码/WMS/WMSClient/src/views/stock/ProStockView.vue | 1
项目代码/WMS/WMSClient/src/services/emptyPalletWarning.js | 144 +++++++++
项目代码/WMS/WMSClient/src/views/Index.vue | 27 +
项目代码/WMS/WMSClient/src/extension/stock/ProStockView.js | 99 ------
项目代码/WMS/WMSClient/src/extension/taskinfo/task.js | 204 ------------
项目代码/WMS/WMSClient/src/store/index.js | 18 -
项目代码/WMS/WMSClient/src/views/outbound/outSGOrder.vue | 1
10 files changed, 550 insertions(+), 359 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/stock/ProStockView.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/stock/ProStockView.js"
index 7fecdb4..ca4c8fe 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/stock/ProStockView.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/stock/ProStockView.js"
@@ -19,12 +19,6 @@
methods: {
//涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
onInit() {
- // 鍒濆鍖栫┖鎵樻鏌ュ畾鏃跺櫒
- // 璁剧疆瀹氭椂鍣紝姣�60绉掓鏌ヤ竴娆�
- this.checkEmptyPalletTimer = setInterval(() => {
- this.checkEmptyPalletWarning();
- }, 10000); // 姣�10绉掓鏌ヤ竴娆�
-
// 鍘熸湁浠g爜...
// let InOrder = this.buttons.find(x => x.value == 'StockOutbound');
// if (InOrder) {
@@ -151,98 +145,7 @@
//鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
},
- // 妫�鏌ョ┖鎵樻暟閲�
- checkEmptyPalletWarning() {
- // 鑾峰彇鍏ㄥ眬瀵硅薄鍜宻tore锛屾鏌ユ槸鍚﹀瓨鍦ㄧ浉鍚岀殑璀﹀憡娑堟伅
- const globalObj = this.$global || window.$global || {};
- const store = this.$store || window.$store;
- const globalMessageList = globalObj.messageList || [];
- const storeMessageList = store?.state?.messageList || [];
-
- // 妫�鏌ユ槸鍚﹀凡缁忓瓨鍦ㄦ湭娓呴櫎鐨勭┖鎵橀璀︽秷鎭�
- const hasExistingWarning = [...globalMessageList, ...storeMessageList].some(msg =>
- msg.businessType === 'pallet_warning' && msg.type === 'warning'
- );
-
- if (hasExistingWarning) return;
-
- // 鑾峰彇褰撳墠鎵�鏈夊簱瀛樻暟鎹�
- const stockData = this.$refs.table?.rowData || this.$refs.table?.tableData || [];
-
- // 璁$畻绌烘墭鎬绘暟閲忥細鍙绠梡roStockAttribute涓�5鐨勮褰�
- let totalEmptyPalletCount = 0;
-
- // 閬嶅巻鎵�鏈夊簱瀛樿褰曪紝绱姞绌烘墭鏁伴噺
- stockData.forEach(stock => {
- const proStockAttribute = stock.proStockAttribute || stock.ProStockAttribute || 0;
- if (proStockAttribute === 5) {
- // 瑙f瀽sumStock鐨勫�硷紝鎻愬彇鏁板瓧閮ㄥ垎
- const sumStocks = stock.sumStocks || stock.sumStock || 0;
- const stockQuantity = typeof sumStocks === 'string'
- ? parseInt(sumStocks.match(/\d+/)?.[0] || 0)
- : parseInt(sumStocks || 0);
- totalEmptyPalletCount += stockQuantity;
- }
- });
-
- // 绌烘墭棰勮闃堝�间负50涓�
- const warningThreshold = 50;
-
- // 濡傛灉绌烘墭鎬绘暟閲忓皬浜庨槇鍊硷紝鍙戦�佽鍛婃秷鎭�
- if (totalEmptyPalletCount < warningThreshold) {
- this.sendPalletWarningMessage(totalEmptyPalletCount, warningThreshold);
- }
- },
-
- // 鍙戦�佺┖鎵樿鍛婃秷鎭�
- sendPalletWarningMessage(emptyPalletCount, warningThreshold) {
- // 鍒涘缓璀﹀憡娑堟伅
- const warningMessage = {
- id: Date.now(),
- title: '绌烘墭鏁伴噺棰勮',
- message: `鎴愬搧搴撶┖鎵樻暟閲忎笉瓒筹紝褰撳墠鎬绘暟閲忥細${emptyPalletCount}锛屼綆浜庨璀﹂槇鍊硷細${warningThreshold}锛屽缓璁強鏃惰ˉ鍏咃紒`,
- type: 'warning',
- businessType: 'pallet_warning',
- createTime: new Date().toLocaleString(),
- relatedData: {
- EmptyPalletCount: emptyPalletCount,
- Threshold: warningThreshold
- }
- };
-
- // 鑾峰彇鍏ㄥ眬瀵硅薄鍜宻tore
- const globalObj = this.$global || window.$global || {};
- const store = this.$store || window.$store;
-
- // 娣诲姞娑堟伅鍒皊tore
- if (store) {
- store.commit('addMessage', warningMessage);
- }
-
- // 娣诲姞娑堟伅鍒板叏灞�娑堟伅鍒楄〃锛岀‘淇濆垪琛ㄥ瓨鍦�
- if (!globalObj.messageList) {
- globalObj.messageList = [];
- }
- globalObj.messageList.push(warningMessage);
-
- // 鏄剧ず鎻愮ず妗�
- // const $alert = this.$alert;
- // const $message = this.$message;
-
- // if ($alert) {
- // $alert(warningMessage.message, warningMessage.title, {
- // confirmButtonText: '纭畾',
- // type: warningMessage.type,
- // closeOnClickModal: false,
- // closeOnPressEscape: false,
- // showCancelButton: false
- // });
- // } else if ($message) {
- // $message.warning(warningMessage.message);
- // } else {
- // alert(`${warningMessage.title}: ${warningMessage.message}`);
- // }
- },
+
// 鍦ㄦ煡璇㈠悗澶勭悊鏁版嵁
searchAfter(result) {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/taskinfo/task.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/taskinfo/task.js"
index 8a6c791..a14069a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/taskinfo/task.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/taskinfo/task.js"
@@ -95,186 +95,7 @@
}
}
- // 鍒濆鍖栦换鍔$姸鎬佹鏌ュ畾鏃跺櫒
- this.taskStatusMap = {}; // 瀛樺偍浠诲姟鐘舵�佸紑濮嬫椂闂�
- this.taskTimeoutMinutes = 10; // 浠诲姟瓒呮椂鏃堕棿锛屽崟浣嶄负鍒嗛挓
- this.checkTaskStatusTimer = setInterval(() => {
- this.checkTaskStatus();
- }, 1000); // 姣�1绉掓鏌ヤ竴娆★紝鎻愰珮妫�鏌ョ簿搴︼紝鍑忓皯寤惰繜
- },
-
- // 妫�鏌ヤ换鍔$姸鎬�
- checkTaskStatus() {
- // 鑾峰彇褰撳墠鎵�鏈変换鍔℃暟鎹�
- const taskData = this.$refs.table?.rowData || this.$refs.table?.tableData || [];
- const now = new Date();
-
- // 鑾峰彇鍏ㄥ眬瀵硅薄鍜宻tore
- const globalObj = this.$global || window.$global || {};
- const store = this.$store || window.$store;
-
- // 澶勭悊娑堟伅鍒犻櫎閫昏緫锛岄噸缃搴斾换鍔$殑瀹氭椂鍣�
- const deletedMessages = globalObj.messageDeleted || [];
-
- if (deletedMessages.length > 0) {
- const storeMessageList = store?.state?.messageList || [];
-
- // 閬嶅巻琚垹闄ょ殑娑堟伅ID锛岄噸缃搴斾换鍔$殑瀹氭椂鍣�
- deletedMessages.forEach(deletedId => {
- const deletedMessage = storeMessageList.find(msg => msg.id === deletedId);
- if (deletedMessage?.businessType === 'task_timeout' && deletedMessage.taskNum && this.taskStatusMap[deletedMessage.taskNum]) {
- this.taskStatusMap[deletedMessage.taskNum] = now;
- }
- });
-
- // 娓呯┖宸插鐞嗙殑鍒犻櫎娑堟伅鍒楄〃
- globalObj.messageDeleted = [];
- }
-
- // 鑾峰彇褰撳墠鎵�鏈変换鍔″彿鍜岀姸鎬�
- const currentTaskStatuses = {};
- taskData.forEach(task => {
- currentTaskStatuses[task.taskNum] = task.taskStatus;
- });
-
- // 妫�鏌ヤ换鍔$姸鎬�
- taskData.forEach(task => {
- if (task.taskStatus === 210) {
- // 鍫嗗灈鏈烘墽琛屼腑鐘舵��
- if (!this.taskStatusMap[task.taskNum]) {
- this.taskStatusMap[task.taskNum] = now;
- } else {
- // 璁$畻鎸佺画鏃堕棿锛堝垎閽燂級
- const duration = (now - this.taskStatusMap[task.taskNum]) / 60000;
- if (duration >= this.taskTimeoutMinutes) {
- this.sendTaskWarningMessage(task, duration);
- delete this.taskStatusMap[task.taskNum];
- }
- }
- } else {
- // 浠诲姟鐘舵�佸凡鏀瑰彉锛屾竻闄よ褰�
- delete this.taskStatusMap[task.taskNum];
- }
- });
-
- // 娓呴櫎宸茶В鍐崇殑浠诲姟瓒呮椂娑堟伅
- this.clearResolvedTaskMessages(currentTaskStatuses);
- },
-
- // 娓呴櫎宸茶В鍐崇殑浠诲姟瓒呮椂娑堟伅
- clearResolvedTaskMessages(currentTaskStatuses) {
- // 鑾峰彇鍏ㄥ眬瀵硅薄鍜宻tore
- const globalObj = this.$global || window.$global || {};
- const store = this.$store || window.$store;
-
- // 鑾峰彇鎵�鏈夋秷鎭垪琛�
- const globalMessageList = globalObj.messageList || [];
- const storeMessageList = store?.state?.messageList || [];
-
- // 鍚堝苟鎵�鏈夋秷鎭紝鎵惧嚭闇�瑕佹竻闄ょ殑浠诲姟瓒呮椂娑堟伅
- const allMessages = [...globalMessageList, ...storeMessageList];
- const taskTimeoutMessages = allMessages.filter(msg => msg.businessType === 'task_timeout');
-
- // 閬嶅巻鎵�鏈変换鍔¤秴鏃舵秷鎭�
- taskTimeoutMessages.forEach(msg => {
- const taskNum = msg.taskNum;
- // 妫�鏌ユ潯浠讹細
- // 1. 浠诲姟涓嶅湪褰撳墠浠诲姟鍒楄〃涓紙宸插畬鎴愭垨琚Щ闄わ級
- // 2. 浠诲姟鍦ㄥ綋鍓嶄换鍔″垪琛ㄤ腑锛屼絾鐘舵�佸凡涓嶅啀鏄爢鍨涙満鎵ц涓�
- if (!currentTaskStatuses[taskNum] || currentTaskStatuses[taskNum] !== 210) {
- // 浠诲姟宸插畬鎴愭垨鐘舵�佸凡鏀瑰彉锛屾竻闄よ娑堟伅
- this.handleDeleteTaskMessage(msg);
- }
- });
- },
-
- // 澶勭悊鍒犻櫎鍗曚釜浠诲姟娑堟伅
- handleDeleteTaskMessage(message) {
- // 鑾峰彇鍏ㄥ眬瀵硅薄鍜宻tore
- const globalObj = this.$global || window.$global || {};
- const store = this.$store || window.$store;
-
- // 浠庡叏灞�娑堟伅鍒楄〃涓垹闄よ娑堟伅
- if (globalObj.messageList) {
- const index = globalObj.messageList.findIndex(msg => msg.id === message.id);
- if (index !== -1) {
- globalObj.messageList.splice(index, 1);
- }
- }
-
- // 浠巗tore涓垹闄よ娑堟伅
- if (store) {
- store.commit('removeMessage', message.id);
- }
- },
-
- // 鍙戦�佷换鍔¤鍛婃秷鎭�
- sendTaskWarningMessage(task, duration) {
- // 鍒涘缓璀﹀憡娑堟伅
- const warningMessage = {
- id: Date.now(),
- title: '浠诲姟寮傚父璀﹀憡',
- message: `浠诲姟鍙� ${task.taskNum} 宸插湪鍫嗗灈鏈烘墽琛屼腑鐘舵�佽秴杩�${Math.round(duration)}鍒嗛挓锛岃鍙婃椂澶勭悊锛乣,
- type: 'warning',
- businessType: 'task_timeout',
- taskNum: task.taskNum,
- createTime: new Date().toLocaleString()
- };
-
- // 鑾峰彇鍏ㄥ眬瀵硅薄鍜宻tore锛屾鏌ユ槸鍚﹀瓨鍦ㄧ浉鍚岀殑璀﹀憡娑堟伅
- const globalObj = this.$global || window.$global || {};
- const store = this.$store || window.$store;
- const globalMessageList = globalObj.messageList || [];
- const storeMessageList = store?.state?.messageList || [];
-
- // 妫�鏌ユ槸鍚﹀凡缁忓瓨鍦ㄧ浉鍚岀殑浠诲姟瓒呮椂璀﹀憡
- const hasExistingWarning = [...globalMessageList, ...storeMessageList].some(msg =>
- msg.businessType === 'task_timeout' && msg.taskNum === task.taskNum
- );
-
- if (hasExistingWarning) return;
-
- // 鍙戦�佹秷鎭埌娑堟伅鍒楄〃
- try {
- // 娣诲姞娑堟伅鍒皊tore
- const $store = this.$store || window.$store;
- if ($store) {
- $store.commit('addMessage', warningMessage);
- }
-
- // 娣诲姞娑堟伅鍒板叏灞�娑堟伅鍒楄〃
- if (globalObj.messageList) {
- globalObj.messageList.push(warningMessage);
- }
-
- // 鏄剧ず璀﹀憡瀵硅瘽妗嗭紝浼樺厛浣跨敤$alert
- // const $global = this.$global || window.$global;
- // const alertOptions = {
- // confirmButtonText: '纭畾',
- // type: warningMessage.type,
- // closeOnClickModal: false,
- // closeOnPressEscape: false,
- // showCancelButton: false
- // };
-
- // if (this.$alert || window.$alert) {
- // const $alert = this.$alert || window.$alert;
- // $alert(warningMessage.message, warningMessage.title, alertOptions);
- // } else if (this.$confirm || window.$confirm) {
- // const $confirm = this.$confirm || window.$confirm;
- // $confirm(warningMessage.message, warningMessage.title, alertOptions);
- // } else {
- // // 浣跨敤娴忚鍣ㄥ師鐢焌lert浣滀负澶囬��
- // alert(`${warningMessage.title}: ${warningMessage.message}`);
- // }
- } catch (error) {
- // 鍑洪敊鏃朵娇鐢ㄦ祻瑙堝櫒鍘熺敓alert浣滀负鏈�缁堝閫�
- try {
- alert(`浠诲姟寮傚父璀﹀憡: 浠诲姟鍙� ${task.taskNum} 宸插湪鍫嗗灈鏈烘墽琛屼腑鐘舵�佽秴杩�${Math.round(duration)}鍒嗛挓锛岃鍙婃椂澶勭悊锛乣);
- } catch (e) {
- // 蹇界暐鎵�鏈夐敊璇�
- }
- }
+ // 涓嶅啀闇�瑕佹敞鍐屼换鍔℃暟鎹簮锛屽叏灞�浠诲姟瓒呮椂鏈嶅姟宸叉敼涓虹洿鎺ヤ粠API鑾峰彇鏁版嵁
},
onInited() {
//妗嗘灦鍒濆鍖栭厤缃悗
@@ -288,24 +109,6 @@
},
searchAfter(result) {
// 鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
-
- // 澶勭悊浠诲姟鍒楄〃鍒锋柊鍚庣殑浠诲姟瓒呮椂娑堟伅娓呯悊
- // 鎻愬彇褰撳墠浠诲姟鐘舵��
- const currentTaskStatuses = {};
- if (result && Array.isArray(result)) {
- result.forEach(task => {
- currentTaskStatuses[task.taskNum] = task.taskStatus;
- });
- } else if (result && result.result && Array.isArray(result.result)) {
- // 澶勭悊鍒嗛〉杩斿洖鐨勬暟鎹牸寮�
- result.result.forEach(task => {
- currentTaskStatuses[task.taskNum] = task.taskStatus;
- });
- }
-
- // 娓呴櫎宸茶В鍐崇殑浠诲姟瓒呮椂娑堟伅
- this.clearResolvedTaskMessages(currentTaskStatuses);
-
return true;
},
addBefore(formData) {
@@ -327,6 +130,11 @@
//(3)this.editFormFields.瀛楁='xxx';
//濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
//鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+ },
+
+ // 缁勪欢閿�姣佹椂娓呯悊璧勬簮
+ onDestroyed() {
+ // 涓嶅啀闇�瑕佹竻鐞嗕换鍔℃暟鎹簮锛屽叏灞�浠诲姟瓒呮椂鏈嶅姟宸叉敼涓虹洿鎺ヤ粠API鑾峰彇鏁版嵁
}
}
};
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/main.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/main.js"
index 8330f07..c47c658 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/main.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/main.js"
@@ -11,6 +11,10 @@
// import 'dayjs/locale/zh-cn'
// import locale from 'element-plus/lib/locale/lang/zh-cn'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
+// 寮曞叆绌烘墭棰勮鏈嶅姟
+import emptyPalletWarning from './services/emptyPalletWarning'
+// 寮曞叆鍏ㄥ眬浠诲姟瓒呮椂鏈嶅姟
+import taskTimeoutService from './services/taskTimeout'
@@ -71,3 +75,12 @@
.mount('#app');
app.config.globalProperties.$Message = app.config.globalProperties.$message;
+// 鍒濆鍖栫┖鎵橀璀︽湇鍔�
+emptyPalletWarning.init(app);
+// 鍒濆鍖栧叏灞�浠诲姟瓒呮椂鏈嶅姟
+taskTimeoutService.init(app);
+// 灏嗕换鍔¤秴鏃舵湇鍔℃寕杞藉埌鍏ㄥ眬灞炴�т笂
+app.config.globalProperties.$taskTimeoutService = taskTimeoutService;
+// 灏嗕换鍔¤秴鏃舵湇鍔℃寕杞藉埌window瀵硅薄涓婏紝鏂逛究鍦ㄦ墿灞曠粍浠朵腑璁块棶
+window.$taskTimeoutService = taskTimeoutService;
+
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/services/emptyPalletWarning.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/services/emptyPalletWarning.js"
new file mode 100644
index 0000000..b4a839e
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/services/emptyPalletWarning.js"
@@ -0,0 +1,144 @@
+// 绌烘墭棰勮鏈嶅姟
+import http from '../api/http';
+
+// 绌烘墭棰勮闃堝��
+const WARNING_THRESHOLD = 50;
+
+// 妫�鏌ョ┖鎵樻暟閲忕殑鏈嶅姟
+const checkEmptyPalletWarning = async (globalState, store) => {
+ try {
+ // 妫�鏌ユ槸鍚﹀凡缁忓瓨鍦ㄦ湭娓呴櫎鐨勭┖鎵橀璀︽秷鎭�
+ const globalMessageList = globalState.messageList || [];
+
+ const hasExistingWarning = globalMessageList.some(msg =>
+ msg.businessType === 'pallet_warning' && msg.type === 'warning'
+ );
+
+ if (hasExistingWarning) {
+ return;
+ }
+
+ // 璋冪敤API鑾峰彇鎴愬搧搴撶┖鎵樻暟閲忥紝娣诲姞proStockAttribute绛変簬5鐨勮繃婊ゆ潯浠�
+ const requestData = {
+ Page: 1,
+ Rows: 9999,
+ Filter: [
+ {
+ Name: 'proStockAttribute',
+ Value: 5,
+ Operator: 'eq'
+ }
+ ],
+ Wheres: '',
+ Sort: '',
+ Order: 'desc'
+ };
+
+ let apiData = null;
+ let apiSuccess = false;
+
+ try {
+ // 璋冪敤API鑾峰彇鎴愬搧搴撶┖鎵樻暟閲�
+ apiData = await http.post('/api/ProStockView/GetPageData', requestData);
+ apiSuccess = true;
+ } catch (error) {
+ console.error('API璇锋眰澶辫触:', error);
+ }
+
+ // 濡傛灉API澶辫触锛屼笉浣跨敤妯℃嫙鏁版嵁锛岀洿鎺ヨ繑鍥�
+ if (!apiSuccess || !apiData) {
+ return;
+ }
+
+ let totalEmptyPalletCount = 0;
+
+ if (apiData && apiData.rows) {
+ const stockData = apiData.rows;
+
+ // 閬嶅巻鎵�鏈夎繑鍥炶褰曪紝鐩存帴绱姞搴撳瓨鏁伴噺锛圓PI宸茶繃婊ょ┖鎵橈級
+ for (const stock of stockData) {
+ // 鑾峰彇搴撳瓨鏁伴噺锛屽皾璇曟墍鏈夊彲鑳界殑瀛楁
+ let stockQuantity = 0;
+
+ // 灏濊瘯浠庢墍鏈夊彲鑳界殑瀛楁鑾峰彇搴撳瓨鏁伴噺
+ const quantityFields = ['sumStocks', '搴撳瓨鏁伴噺', 'quantity', 'stockCount', 'sumStock', '搴撳瓨鏁�', 'count'];
+ for (const field of quantityFields) {
+ if (stock[field] !== undefined && stock[field] !== null) {
+ // 灏濊瘯瑙f瀽涓烘暟瀛�
+ const parsedQuantity = typeof stock[field] === 'number' ? stock[field] : parseInt(stock[field]);
+ if (!isNaN(parsedQuantity)) {
+ stockQuantity = parsedQuantity;
+ break;
+ }
+ }
+ }
+
+ // 绱姞绌烘墭鏁伴噺
+ totalEmptyPalletCount += stockQuantity;
+ }
+
+ // 鍙湁褰撶┖鎵樻暟閲忓皯浜�50鏃舵墠鍙戦�侀璀�
+ if (totalEmptyPalletCount < WARNING_THRESHOLD) {
+ sendPalletWarningMessage(globalState, store, totalEmptyPalletCount, WARNING_THRESHOLD);
+ }
+ }
+ } catch (error) {
+ console.error('妫�鏌ョ┖鎵樻暟閲忓け璐�:', error);
+ console.error('閿欒鍫嗘爤:', error.stack);
+ }
+};
+
+// 鍙戦�佺┖鎵樿鍛婃秷鎭�
+const sendPalletWarningMessage = (globalState, store, emptyPalletCount, warningThreshold) => {
+ // 鍒涘缓璀﹀憡娑堟伅
+ const warningMessage = {
+ id: Date.now(),
+ title: '绌烘墭鏁伴噺棰勮',
+ message: `鎴愬搧搴撶┖鎵樻暟閲忎笉瓒筹紝褰撳墠鎬绘暟閲忥細${emptyPalletCount}锛屼綆浜庨璀﹂槇鍊硷細${warningThreshold}锛屽缓璁強鏃惰ˉ鍏咃紒`,
+ type: 'warning',
+ businessType: 'pallet_warning',
+ createTime: new Date().toLocaleString(),
+ relatedData: {
+ EmptyPalletCount: emptyPalletCount,
+ Threshold: warningThreshold
+ }
+ };
+
+ // 鐩存帴娣诲姞娑堟伅鍒板叏灞�娑堟伅鍒楄〃
+ if (globalState && globalState.messageList) {
+ // 妫�鏌ユ秷鎭槸鍚﹀凡瀛樺湪
+ const isNewMessage = !globalState.messageList.some(m => m.id === warningMessage.id);
+ globalState.messageList.push(warningMessage);
+
+
+ }
+};
+
+// 鍒濆鍖栫┖鎵橀璀︽湇鍔�
+const initEmptyPalletWarning = (app) => {
+ const globalState = app.config.globalProperties.$global;
+ const store = app.config.globalProperties.$store;
+
+ // 璁剧疆瀹氭椂鍣紝姣�60绉掓鏌ヤ竴娆�
+ const checkEmptyPalletTimer = setInterval(() => {
+ checkEmptyPalletWarning(globalState, store);
+ }, 30000); // 姣�30绉掓鏌ヤ竴娆�
+
+ // 20绉掑悗鎵ц鍒濆妫�鏌�
+ setTimeout(() => {
+ checkEmptyPalletWarning(globalState, store);
+ }, 10000); // 10绉掑悗鎵ц鍒濆妫�鏌�
+
+ // 淇濆瓨瀹氭椂鍣ㄥ紩鐢紝鏂逛究鍚庣画娓呯悊
+ app.config.globalProperties.$global.checkEmptyPalletTimer = checkEmptyPalletTimer;
+
+ // 鏂逛究鎵嬪姩娴嬭瘯锛屽皢check鏂规硶鎸傝浇鍒皐indow瀵硅薄
+ window.testEmptyPalletWarning = () => {
+ checkEmptyPalletWarning(globalState, store);
+ };
+};
+
+export default {
+ init: initEmptyPalletWarning,
+ check: checkEmptyPalletWarning
+};
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/services/taskTimeout.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/services/taskTimeout.js"
new file mode 100644
index 0000000..a56394b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/services/taskTimeout.js"
@@ -0,0 +1,259 @@
+// 鍏ㄥ眬浠诲姟瓒呮椂鏈嶅姟
+import http from '../api/http';
+
+// 浠诲姟瓒呮椂鏈嶅姟绫�
+class TaskTimeoutService {
+ constructor() {
+ this.taskStatusMap = {}; // 瀛樺偍浠诲姟鐘舵�佸紑濮嬫椂闂�
+ this.taskTimeoutMinutes = 10; // 浠诲姟瓒呮椂鏃堕棿锛屽崟浣嶄负鍒嗛挓锛岃皟鏁翠负10鍒嗛挓渚夸簬娴嬭瘯
+ this.checkTaskStatusTimer = null;
+ this.apiTaskData = []; // 瀛樺偍閫氳繃API鑾峰彇鐨勪换鍔℃暟鎹�
+ this.apiRefreshTimer = null; // API鏁版嵁鍒锋柊瀹氭椂鍣�
+ this.apiRefreshInterval = 10000; // API鏁版嵁鍒锋柊闂撮殧锛岃皟鏁翠负10绉掍究浜庢祴璇�
+ }
+
+ // 鍒濆鍖栦换鍔¤秴鏃舵湇鍔�
+ init(app) {
+ // 璁剧疆瀹氭椂鍣紝姣�10绉掓鏌ヤ竴娆★紝璋冩暣涓轰究浜庢祴璇曠殑棰戠巼
+ this.checkTaskStatusTimer = setInterval(() => {
+ this.checkTaskStatus();
+ }, 10000);
+
+ // 璁剧疆API鏁版嵁鍒锋柊瀹氭椂鍣紝姣�10绉掑埛鏂颁竴娆′换鍔℃暟鎹�
+ this.apiRefreshTimer = setInterval(() => {
+ this.refreshTaskDataFromApi();
+ }, this.apiRefreshInterval);
+
+ // 鍒濆鍒锋柊涓�娆′换鍔℃暟鎹�
+ this.refreshTaskDataFromApi();
+
+ // 淇濆瓨瀹氭椂鍣ㄥ紩鐢紝鏂逛究鍚庣画娓呯悊
+ if (app && app.config) {
+ app.config.globalProperties.$global.taskTimeoutTimer = this.checkTaskStatusTimer;
+ app.config.globalProperties.$global.taskTimeoutApiTimer = this.apiRefreshTimer;
+ }
+
+ // 鏂逛究鎵嬪姩娴嬭瘯锛屽皢check鏂规硶鎸傝浇鍒皐indow瀵硅薄
+ window.testTaskTimeout = () => {
+ this.checkTaskStatus();
+ };
+ }
+
+ // 浠嶢PI鍒锋柊浠诲姟鏁版嵁
+ async refreshTaskDataFromApi() {
+ try {
+ // 鏋勫缓鏌ヨ鍙傛暟锛岃幏鍙栨墍鏈変换鍔★紝涓嶉檺鍒剁姸鎬侊紝鍦ㄥ悗缁鐞嗕腑杩囨护
+ const requestData = {
+ Page: 1,
+ Rows: 9999,
+ Filter: [],
+ Wheres: '',
+ Sort: 'CreateDate',
+ Order: 'desc'
+ };
+
+ // 璋冪敤API鑾峰彇浠诲姟鏁版嵁
+ const apiData = await http.post('/api/Task/GetPageData', requestData);
+
+ if (apiData && apiData.rows) {
+ this.apiTaskData = apiData.rows;
+ } else {
+ this.apiTaskData = [];
+ }
+ } catch (error) {
+ console.error('浠嶢PI鑾峰彇浠诲姟鏁版嵁澶辫触:', error);
+ this.apiTaskData = [];
+ }
+ }
+
+ // 妫�鏌ヤ换鍔$姸鎬�
+ checkTaskStatus() {
+ // 鐩存帴浣跨敤浠嶢PI鑾峰彇鐨勬暟鎹�
+ const allTaskData = this.apiTaskData || [];
+
+ // 鍘婚噸锛岀‘淇濇瘡涓换鍔″彧澶勭悊涓�娆�
+ const uniqueTaskData = [];
+ const taskNumSet = new Set();
+
+ allTaskData.forEach(task => {
+ if (task && task.taskNum && !taskNumSet.has(task.taskNum)) {
+ uniqueTaskData.push(task);
+ taskNumSet.add(task.taskNum);
+ }
+ });
+
+ if (uniqueTaskData.length === 0) {
+ return;
+ }
+
+ const now = new Date();
+
+ // 鑾峰彇鍏ㄥ眬瀵硅薄
+ const globalObj = window.$global || {};
+
+ // 澶勭悊娑堟伅鍒犻櫎閫昏緫锛岄噸缃搴斾换鍔$殑瀹氭椂鍣�
+ const deletedMessages = globalObj.messageDeleted || [];
+
+ if (deletedMessages.length > 0) {
+ const globalMessageList = globalObj.messageList || [];
+
+ // 閬嶅巻琚垹闄ょ殑娑堟伅ID锛岄噸缃搴斾换鍔$殑瀹氭椂鍣�
+ deletedMessages.forEach(deletedId => {
+ const deletedMessage = globalMessageList.find(msg => msg.id === deletedId);
+ if (deletedMessage?.businessType === 'task_timeout' && deletedMessage.taskNum && this.taskStatusMap[deletedMessage.taskNum]) {
+ this.taskStatusMap[deletedMessage.taskNum] = now;
+ }
+ });
+
+ // 娓呯┖宸插鐞嗙殑鍒犻櫎娑堟伅鍒楄〃
+ globalObj.messageDeleted = [];
+ }
+
+ // 鑾峰彇褰撳墠鎵�鏈変换鍔″彿鍜岀姸鎬�
+ const currentTaskStatuses = {};
+ uniqueTaskData.forEach(task => {
+ currentTaskStatuses[task.taskNum] = task.taskStatus;
+ });
+
+ // 妫�鏌ヤ换鍔$姸鎬�
+ uniqueTaskData.forEach(task => {
+ if (task.taskStatus === 210) {
+ // 鍫嗗灈鏈烘墽琛屼腑鐘舵��
+ if (!this.taskStatusMap[task.taskNum]) {
+ this.taskStatusMap[task.taskNum] = now;
+ } else {
+ // 璁$畻鎸佺画鏃堕棿锛堝垎閽燂級
+ const duration = (now - this.taskStatusMap[task.taskNum]) / 60000;
+ if (duration >= this.taskTimeoutMinutes) {
+ this.sendTaskWarningMessage(task, duration);
+ delete this.taskStatusMap[task.taskNum];
+ }
+ }
+ } else {
+ // 浠诲姟鐘舵�佸凡鏀瑰彉锛屾竻闄よ褰�
+ delete this.taskStatusMap[task.taskNum];
+ }
+ });
+
+ // 娓呴櫎宸茶В鍐崇殑浠诲姟瓒呮椂娑堟伅
+ this.clearResolvedTaskMessages(currentTaskStatuses);
+ }
+
+ // 娓呴櫎宸茶В鍐崇殑浠诲姟瓒呮椂娑堟伅
+ clearResolvedTaskMessages(currentTaskStatuses) {
+ // 鑾峰彇鍏ㄥ眬瀵硅薄
+ const globalObj = window.$global || {};
+
+ // 鑾峰彇鍏ㄥ眬娑堟伅鍒楄〃
+ const globalMessageList = globalObj.messageList || [];
+
+ // 鎵惧嚭闇�瑕佹竻闄ょ殑浠诲姟瓒呮椂娑堟伅
+ const taskTimeoutMessages = globalMessageList.filter(msg => msg.businessType === 'task_timeout');
+
+ // 閬嶅巻鎵�鏈変换鍔¤秴鏃舵秷鎭�
+ taskTimeoutMessages.forEach(msg => {
+ const taskNum = msg.taskNum;
+ // 妫�鏌ユ潯浠讹細
+ // 1. 浠诲姟涓嶅湪褰撳墠浠诲姟鍒楄〃涓紙宸插畬鎴愭垨琚Щ闄わ級
+ // 2. 浠诲姟鍦ㄥ綋鍓嶄换鍔″垪琛ㄤ腑锛屼絾鐘舵�佸凡涓嶅啀鏄爢鍨涙満鎵ц涓�
+ if (!currentTaskStatuses[taskNum] || currentTaskStatuses[taskNum] !== 210) {
+ // 浠诲姟宸插畬鎴愭垨鐘舵�佸凡鏀瑰彉锛屾竻闄よ娑堟伅
+ this.handleDeleteTaskMessage(msg);
+ }
+ });
+ }
+
+ // 澶勭悊鍒犻櫎鍗曚釜浠诲姟娑堟伅
+ handleDeleteTaskMessage(message) {
+ // 鑾峰彇鍏ㄥ眬瀵硅薄
+ const globalObj = window.$global || {};
+
+ // 鐩存帴浠庡叏灞�娑堟伅鍒楄〃涓垹闄よ娑堟伅
+ if (globalObj.messageList) {
+ const index = globalObj.messageList.findIndex(msg => msg.id === message.id);
+ if (index !== -1) {
+ globalObj.messageList.splice(index, 1);
+ }
+ }
+ }
+
+ // 鍙戦�佷换鍔¤鍛婃秷鎭�
+ sendTaskWarningMessage(task, duration) {
+ // 鍒涘缓璀﹀憡娑堟伅
+ const warningMessage = {
+ id: Date.now(),
+ title: '浠诲姟寮傚父璀﹀憡',
+ message: `浠诲姟鍙� ${task.taskNum} 宸插湪鍫嗗灈鏈烘墽琛屼腑鐘舵�佽秴杩�${Math.round(duration)}鍒嗛挓锛岃鍙婃椂澶勭悊锛乣,
+ type: 'warning',
+ businessType: 'task_timeout',
+ taskNum: task.taskNum,
+ createTime: new Date().toLocaleString()
+ };
+
+ // 鑾峰彇鍏ㄥ眬瀵硅薄
+ const globalObj = window.$global || {};
+
+ // 妫�鏌ユ槸鍚﹀凡缁忓瓨鍦ㄧ浉鍚岀殑浠诲姟瓒呮椂璀﹀憡
+ const globalMessageList = globalObj.messageList || [];
+
+ const hasExistingWarning = globalMessageList.some(msg =>
+ msg.businessType === 'task_timeout' && msg.taskNum === task.taskNum
+ );
+
+ if (hasExistingWarning) return;
+
+ // 鍙戦�佹秷鎭埌鍏ㄥ眬娑堟伅鍒楄〃
+ try {
+ if (globalObj.messageList) {
+ globalObj.messageList.push(warningMessage);
+
+ }
+ } catch (error) {
+ // 鍑洪敊鏃朵娇鐢ㄦ祻瑙堝櫒鍘熺敓alert浣滀负鏈�缁堝閫�
+ try {
+ alert(`浠诲姟寮傚父璀﹀憡: 浠诲姟鍙� ${task.taskNum} 宸插湪鍫嗗灈鏈烘墽琛屼腑鐘舵�佽秴杩�${Math.round(duration)}鍒嗛挓锛岃鍙婃椂澶勭悊锛乣);
+ } catch (e) {
+ // 蹇界暐鎵�鏈夐敊璇�
+ }
+ }
+ }
+
+ // 鎵嬪姩妫�鏌ヤ换鍔$姸鎬侊紙鐢ㄤ簬澶栭儴璋冪敤锛�
+ manualCheckTaskStatus() {
+ this.checkTaskStatus();
+ }
+
+ // 璁剧疆浠诲姟瓒呮椂鏃堕棿
+ setTaskTimeoutMinutes(minutes) {
+ if (typeof minutes === 'number' && minutes > 0) {
+ this.taskTimeoutMinutes = minutes;
+ }
+ }
+
+ // 鑾峰彇褰撳墠浠诲姟瓒呮椂鏃堕棿
+ getTaskTimeoutMinutes() {
+ return this.taskTimeoutMinutes;
+ }
+
+ // 娓呯悊璧勬簮
+ cleanup() {
+ if (this.checkTaskStatusTimer) {
+ clearInterval(this.checkTaskStatusTimer);
+ this.checkTaskStatusTimer = null;
+ }
+
+ if (this.apiRefreshTimer) {
+ clearInterval(this.apiRefreshTimer);
+ this.apiRefreshTimer = null;
+ }
+
+ this.taskStatusMap = {};
+ this.apiTaskData = [];
+ delete window.testTaskTimeout;
+ }
+}
+
+// 鍒涘缓鍗曚緥瀹炰緥
+const taskTimeoutService = new TaskTimeoutService();
+
+export default taskTimeoutService;
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/store/index.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/store/index.js"
index a87385b..dcf13e4 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/store/index.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/store/index.js"
@@ -14,8 +14,7 @@
permission: [],
isLoading: false,//2020.06.03澧炲姞璺敱鍒囨崲鏃跺姞杞芥彁绀�
userInfo: null,
- websocke: null,//websocket
- messageList: [],//娑堟伅鍒楄〃
+ websocke: null//websocket
// wcsState: true//wcs鏈嶅姟鐘舵��
},
mutations: {
@@ -43,15 +42,6 @@
},
setWebsocket(state, data) {
state.websocke = data;
- },
- addMessage(state, message) {
- state.messageList.push(message);
- },
- removeMessage(state, messageId) {
- state.messageList = state.messageList.filter(message => message.id !== messageId);
- },
- clearMessages(state) {
- state.messageList = [];
}
}, getters: {
getPermission: (state) => (path) => { //璋冪敤鏂瑰紡 store.getters.getPermission('sys_User')
@@ -89,9 +79,6 @@
},
getData: (state) => () => {
return state.data;
- },
- getMessageList: (state) => () => {
- return state.messageList;
}
}, actions: {
setPermission(context, data) {
@@ -102,9 +89,6 @@
},
onLoading(context, flag) {
context.commit("updateLoadingState", flag);
- },
- addMessage(context, message) {
- context.commit('addMessage', message);
}
}
})
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/Home.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/Home.vue"
index daeffe0..dc15e1f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/Home.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/Home.vue"
@@ -65,10 +65,15 @@
<div class="roadway-section">
<h2 class="roadway-title">{{ Area.roadwayNo }} 绗�1宸烽亾绗�1鎺�(涓滈潰:鍖�>鍗�)</h2>
<div class="row" v-for="(item, index) in locationData.row1" :key="'row1-' + index">
- <div class="location-cell" :style="{ 'background-color': GetBgColor(column) }"
- v-for="(column, colIndex) in item.locationObj" :key="'row1-' + item.layer + '-' + colIndex"
- @mouseenter="showTooltip(column, $event)" @mouseleave="hideTooltip">
- {{ getRoadwayNo(column) }}-{{ column.column }}-{{ column.layer }}
+ <div
+ class="location-cell"
+ :class="{ 'empty-cell': column.location_lock === -1 }"
+ :style="{ 'background-color': column.location_lock === -1 ? 'transparent' : GetBgColor(column) }"
+ v-for="(column, colIndex) in item.locationObj"
+ :key="'row1-' + item.layer + '-' + colIndex"
+ @mouseenter="column.location_lock !== -1 && showTooltip(column, $event)"
+ @mouseleave="hideTooltip">
+ <span v-if="column.location_lock !== -1">{{ getRoadwayNo(column) }}-{{ column.column }}-{{ column.layer }}</span>
</div>
</div>
</div>
@@ -77,10 +82,15 @@
<div class="roadway-section">
<h2 class="roadway-title">{{ Area.roadwayNo }} 绗�1宸烽亾绗�2鎺�(瑗块潰:鍖�>鍗�)</h2>
<div class="row" v-for="(item, index) in locationData.row2" :key="'row2-' + index">
- <div class="location-cell" :style="{ 'background-color': GetBgColor(column) }"
- v-for="(column, colIndex) in item.locationObj" :key="'row2-' + item.layer + '-' + colIndex"
- @mouseenter="showTooltip(column, $event)" @mouseleave="hideTooltip">
- {{ getRoadwayNo(column) }}-{{ column.column }}-{{ column.layer }}
+ <div
+ class="location-cell"
+ :class="{ 'empty-cell': column.location_lock === -1 }"
+ :style="{ 'background-color': column.location_lock === -1 ? 'transparent' : GetBgColor(column) }"
+ v-for="(column, colIndex) in item.locationObj"
+ :key="'row2-' + item.layer + '-' + colIndex"
+ @mouseenter="column.location_lock !== -1 && showTooltip(column, $event)"
+ @mouseleave="hideTooltip">
+ <span v-if="column.location_lock !== -1">{{ getRoadwayNo(column) }}-{{ column.column }}-{{ column.layer }}</span>
</div>
</div>
</div>
@@ -97,7 +107,7 @@
<!-- 鍘熸枡搴撴樉绀哄唴瀹� -->
<div v-if="Area.warehouse === '鍘熸枡搴�'">
<p><strong>绾稿嵎:</strong><span>{{ currentLocation.paperRoll || "鏃�" }}</span></p>
- <p><strong>闂ㄥ箙:</strong><span>{{ currentLocation.width ? currentLocation.width + "m" : "鏃�" }}</span></p>
+ <p><strong>闂ㄥ箙:</strong><span>{{ currentLocation.width ? currentLocation.width : "鏃�" }}</span></p>
<p><strong>鏉$爜:</strong><span>{{ currentLocation.barcode || "鏃�" }}</span></p>
<p><strong>RFID:</strong><span>{{ currentLocation.rfid || "鏃�" }}</span></p>
</div>
@@ -317,37 +327,71 @@
if (x.data) {
this.locationData = x.data;
- // 瀵圭1鎺掓暟鎹繘琛屾帓搴�
- if (this.locationData.row1) {
+ // 纭繚璐т綅鎸夊垪鍙锋帓搴忓苟璁$畻鏈�澶у垪鏁帮紝鐢ㄤ簬瀵归綈
+ const ensureColumnsAlignment = (rowData) => {
+ if (!rowData || rowData.length === 0) return;
+
// 鎸夊眰鍙蜂粠楂樺埌浣庢帓搴�
- this.locationData.row1.sort((a, b) => parseInt(b.layer) - parseInt(a.layer));
-
- // 瀵规瘡灞傚唴鐨勮揣浣嶆寜鍒楀彿浠庡寳鍒板崡鎺掑簭锛�01-64锛�
- this.locationData.row1.forEach(layer => {
+ rowData.sort((a, b) => parseInt(b.layer) - parseInt(a.layer));
+
+ // 纭畾鏈�澶у垪鏁帮紙鍋囪鏄�64鍒楋紝浠�01-64锛�
+ const maxColumns = 64;
+
+ // 澶勭悊姣忓眰鏁版嵁
+ rowData.forEach(layer => {
+ // 瀵规瘡灞傚唴鐨勮揣浣嶆寜鍒楀彿浠庡寳鍒板崡鎺掑簭锛�01-64锛�
layer.locationObj.sort((a, b) => {
// 纭繚鍒楀彿鎸夋暟瀛楅『搴忔帓鍒�
const colA = parseInt(a.column);
const colB = parseInt(b.column);
return colA - colB;
});
- });
- }
-
- // 瀵圭2鎺掓暟鎹繘琛屽悓鏍风殑鎺掑簭
- if (this.locationData.row2) {
- // 鎸夊眰鍙蜂粠楂樺埌浣庢帓搴�
- this.locationData.row2.sort((a, b) => parseInt(b.layer) - parseInt(a.layer));
-
- // 瀵规瘡灞傚唴鐨勮揣浣嶆寜鍒楀彿浠庡寳鍒板崡鎺掑簭锛�01-64锛�
- this.locationData.row2.forEach(layer => {
- layer.locationObj.sort((a, b) => {
- // 纭繚鍒楀彿鎸夋暟瀛楅『搴忔帓鍒�
- const colA = parseInt(a.column);
- const colB = parseInt(b.column);
- return colA - colB;
+
+ // 鍒涘缓瀹屾暣鐨勫垪鏁扮粍
+ const completeColumns = [];
+
+ // 褰撳墠宸叉湁鐨勮揣浣嶏紝鎸夊垪鍙锋槧灏�
+ const existingLocations = {};
+ layer.locationObj.forEach(loc => {
+ existingLocations[parseInt(loc.column)] = loc;
});
+
+ // 閬嶅巻鎵�鏈夊彲鑳界殑鍒楀彿锛�1-64锛�
+ for (let col = 1; col <= maxColumns; col++) {
+ if (existingLocations[col]) {
+ // 濡傛灉璇ュ垪鏈夎揣浣嶆暟鎹紝鐩存帴浣跨敤
+ completeColumns.push(existingLocations[col]);
+ } else {
+ // 濡傛灉璇ュ垪娌℃湁璐т綅鏁版嵁锛屾坊鍔犵┖鍗犱綅绗�
+ completeColumns.push({
+ locationCode: `empty-${layer.row}-${String(col).padStart(2, '0')}-${layer.layer}`,
+ row: layer.row,
+ column: String(col).padStart(2, '0'),
+ layer: layer.layer,
+ location_lock: -1, // 鐗规畩鏍囪锛岀敤浜庤〃绀虹┖鍗犱綅绗�
+ paperRoll: '',
+ productName: '',
+ width: 0,
+ quantity: 0,
+ barcode: '',
+ rfid: '',
+ rfidCode: '',
+ inDate: null,
+ warehouseId: layer.warehouseId || 0
+ });
+ }
+ }
+
+ // 鏇存柊璇ュ眰鐨勮揣浣嶆暟鎹负瀹屾暣鍒�
+ layer.locationObj = completeColumns;
});
- }
+ };
+
+ // 澶勭悊绗�1鎺掓暟鎹�
+ ensureColumnsAlignment(this.locationData.row1);
+
+ // 澶勭悊绗�2鎺掓暟鎹�
+ ensureColumnsAlignment(this.locationData.row2);
}
// 鎻愬彇鎵�鏈夎揣浣嶇紪鍙�
@@ -654,8 +698,8 @@
.location-view {
flex: 1;
- width: 470%;
- max-width: 470%;
+ width: 360%;
+ max-width: 360%;
overflow: auto;
padding: 20px;
background-color: #f5f7fa;
@@ -667,12 +711,13 @@
margin-bottom: 8px;
cursor: pointer;
flex-wrap: nowrap;
+ width: 100%;
+ min-width: max-content;
}
.location-cell {
- width: 120px;
+ flex: 0 0 120px;
height: 50px;
- margin: 5px;
text-align: center;
font-size: 16px;
border-radius: 4px;
@@ -680,6 +725,34 @@
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
border: 1px solid #ccc;
background-color: #f9f9f9;
+ margin: 0 5px;
+}
+
+/* 绌哄崰浣嶇鏍峰紡 */
+.location-cell.empty-cell {
+ background-color: transparent;
+ border: none;
+ box-shadow: none;
+ cursor: default;
+}
+
+/* 娣诲姞璐т綅缃戞牸瀹瑰櫒鏍峰紡锛岀‘淇濇墍鏈夎瀵归綈 */
+.roadway-section {
+ overflow-x: auto;
+ overflow-y: hidden;
+}
+
+.location-cell {
+ width: 120px;
+ height: 50px;
+ text-align: center;
+ font-size: 16px;
+ border-radius: 4px;
+ line-height: 50px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
+ border: 1px solid #ccc;
+ background-color: #f9f9f9;
+ margin: 0;
}
/* 宸烽亾鍖哄煙鏍峰紡 */
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/Index.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/Index.vue"
index 1050623..030d029 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/Index.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/Index.vue"
@@ -332,8 +332,21 @@
const handleMessage = (e) => {
let data = JSON.parse(e.data);
- // 浣跨敤store鐨刟ddMessage mutation娣诲姞娑堟伅
- store.commit('addMessage', data);
+ // 鐩存帴娣诲姞鍒板叏灞�娑堟伅鍒楄〃
+ if (_config.$global.messageList) {
+ // 纭繚娑堟伅鏈夊敮涓�ID
+ const messageWithId = {
+ ...data,
+ id: data.id || Date.now() + Math.random().toString(36).substr(2, 9)
+ };
+
+ // 妫�鏌ユ秷鎭槸鍚﹀凡瀛樺湪
+ const isNewMessage = !_config.$global.messageList.some(m => m.id === messageWithId.id);
+ _config.$global.messageList.push(messageWithId);
+
+
+ }
+
ElNotification({
title: data.title,
message: h("i", { style: "color: teal" }, data.message),
@@ -679,12 +692,6 @@
_config.$global.messageList = _config.$global.messageList.filter(msg => msg.id !== item.id);
}
- // 浠巗tore涓垹闄よ娑堟伅
- if (store) {
- // 浣跨敤mutation鍒犻櫎鍗曚釜娑堟伅
- store.commit('removeMessage', item.id);
- }
-
// 灏嗗垹闄ょ殑娑堟伅ID娣诲姞鍒癿essageDeleted鏁扮粍锛岀敤浜庨�氱煡缁勪欢閲嶇疆瀹氭椂鍣�
if (_config.$global.messageDeleted && Array.isArray(_config.$global.messageDeleted)) {
_config.$global.messageDeleted.push(item.id);
@@ -705,9 +712,7 @@
// 鑾峰彇鎵�鏈夊綋鍓嶆秷鎭殑ID锛岀敤浜庨噸缃畾鏃跺櫒
const messageIds = _config.$global.messageList.map(msg => msg.id);
- // 鍏堟竻绌簊tore涓殑娑堟伅鍒楄〃
- store.commit('clearMessages');
- // 鐒跺悗娓呯┖鍏ㄥ眬娑堟伅鍒楄〃锛屼娇鐢ㄩ噸鏂拌祴鍊肩殑鏂瑰紡纭繚鍝嶅簲寮忔洿鏂�
+ // 娓呯┖鍏ㄥ眬娑堟伅鍒楄〃锛屼娇鐢ㄩ噸鏂拌祴鍊肩殑鏂瑰紡纭繚鍝嶅簲寮忔洿鏂�
_config.$global.messageList = [];
// 灏嗘墍鏈夊垹闄ょ殑娑堟伅ID娣诲姞鍒癿essageDeleted鏁扮粍锛岀敤浜庨�氱煡缁勪欢閲嶇疆瀹氭椂鍣�
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/outbound/outSGOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/outbound/outSGOrder.vue"
index b43a08a..3097896 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/outbound/outSGOrder.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/outbound/outSGOrder.vue"
@@ -54,6 +54,7 @@
[
{ title: "浠撳簱", field: "warehouseId", type: "selectList", dataKey: "warehouses", data: [], },
{ title: "瀹㈡埛绠�绉�", field: "shortName", type: "like" },
+ { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime", },
],
]);
const columns = ref([
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/stock/ProStockView.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/stock/ProStockView.vue"
index 250cbcd..69c3a65 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/stock/ProStockView.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/stock/ProStockView.vue"
@@ -50,6 +50,7 @@
[
{ title: "鎵�灞炰粨搴�", field: "warehouseId",type: "select",dataKey: "warehouses",data: []},
{ title: "搴撳瓨灞炴��", field: "proStockAttribute" ,type: "selectList",dataKey: "proStockAttributeEnum",data: [],},
+ { title: "鍒涘缓鏃堕棿", field: "createDate",type: "datetime",},
],
]);
const columns = ref([
--
Gitblit v1.9.3