From 98a69d51981ee6a49136024c8b005f134d3313cd Mon Sep 17 00:00:00 2001
From: liulijun <liulijun@hnkhzn.com>
Date: 星期四, 05 三月 2026 17:29:34 +0800
Subject: [PATCH] 增加任务异常提示和空托数量预警
---
项目代码/WMS/WMSClient/src/main.js | 18 +
项目代码/WMS/WMSClient/src/views/Home.vue | 6
项目代码/WMS/WMSClient/src/views/Index.vue | 86 +++++++
项目代码/WMS/WMSClient/src/views/index/Message.vue | 197 +++++++++++++----
项目代码/WMS/WMSClient/src/extension/stock/ProStockView.js | 123 +++++++++++
项目代码/WMS/WMSClient/src/extension/taskinfo/task.js | 181 ++++++++++++++++
项目代码/WMS/WMSClient/src/store/index.js | 16 +
7 files changed, 560 insertions(+), 67 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 92ad623..7fecdb4 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,6 +19,13 @@
methods: {
//涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
onInit() {
+ // 鍒濆鍖栫┖鎵樻鏌ュ畾鏃跺櫒
+ // 璁剧疆瀹氭椂鍣紝姣�60绉掓鏌ヤ竴娆�
+ this.checkEmptyPalletTimer = setInterval(() => {
+ this.checkEmptyPalletWarning();
+ }, 10000); // 姣�10绉掓鏌ヤ竴娆�
+
+ // 鍘熸湁浠g爜...
// let InOrder = this.buttons.find(x => x.value == 'StockOutbound');
// if (InOrder) {
// InOrder.onClick = function () {
@@ -73,7 +80,14 @@
const daysSinceClosest = Math.ceil(Math.abs((today - closestDate) / (1000 * 60 * 60 * 24)));
return '<span style="color: #F56C6C">' + daysSinceClosest + "澶�" + '</span>';
} else {
- return '<span style="color: #F56C6C">' + "鏃犱繚璐ㄦ湡" + '</span>';
+ // 绌烘墭璁板綍浼氳繘鍏ヨ繖涓垎鏀紝杩斿洖"1涓�"鎴�"10涓�"杩欐牱鐨勫瓧绗︿覆
+ // 鍦ㄨ繖閲岃褰曠┖鎵樻暟閲�
+ const emptyPalletCount = 1; // 姣忔潯绌烘墭璁板綍浠h〃1涓┖鎵�
+
+ // 淇濆瓨鍒皉ow瀵硅薄锛屾柟渚垮悗缁璫heckEmptyPalletWarning鏂规硶浣跨敤
+ row.emptyPalletCount = emptyPalletCount;
+
+ return '<span style="color: #F56C6C">' + emptyPalletCount + "涓�" + '</span>';
}
}
@@ -88,7 +102,14 @@
})
return '<span style="color: #F56C6C">' + sum + row.details[0].unit + '</span>';
} else {
- return '<span style="color: #F56C6C">' + "1涓�" + '</span>';
+ // 绌烘墭璁板綍浼氳繘鍏ヨ繖涓垎鏀紝杩斿洖"1涓�"鎴�"10涓�"杩欐牱鐨勫瓧绗︿覆
+ // 鍦ㄨ繖閲岃褰曠┖鎵樻暟閲�
+ const emptyPalletCount = 1; // 姣忔潯绌烘墭璁板綍浠h〃1涓┖鎵�
+
+ // 淇濆瓨鍒皉ow瀵硅薄锛屾柟渚垮悗缁璫heckEmptyPalletWarning鏂规硶浣跨敤
+ row.emptyPalletCount = emptyPalletCount;
+
+ return '<span style="color: #F56C6C">' + emptyPalletCount + "涓�" + '</span>';
}
}
@@ -128,6 +149,104 @@
//(3)this.editFormFields.瀛楁='xxx';
//濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
//鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝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) {
+ return true;
}
}
};
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 dc4970b..495f876 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"
@@ -94,6 +94,185 @@
this.$refs.gridHeader.open();
}
}
+
+ // 鍒濆鍖栦换鍔$姸鎬佹鏌ュ畾鏃跺櫒
+ this.taskStatusMap = {}; // 瀛樺偍浠诲姟鐘舵�佸紑濮嬫椂闂�
+ this.taskTimeoutMinutes = 1; // 浠诲姟瓒呮椂鏃堕棿锛屽崟浣嶄负鍒嗛挓
+ 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;
+ // 妫�鏌ヨ浠诲姟鏄惁浠嶇劧澶勪簬鍫嗗灈鏈烘墽琛屼腑鐘舵��
+ 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) {
+ // 蹇界暐鎵�鏈夐敊璇�
+ }
+ }
},
onInited() {
//妗嗘灦鍒濆鍖栭厤缃悗
@@ -106,7 +285,7 @@
return true;
},
searchAfter(result) {
- //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+ // 鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
return true;
},
addBefore(formData) {
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 40c4c4f..8330f07 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"
@@ -1,4 +1,4 @@
-import { createApp } from 'vue'
+import { createApp, reactive } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
@@ -24,7 +24,9 @@
app.config.globalProperties.http = http;
app.config.globalProperties.$tabs = {};
app.config.globalProperties.permission = permission;
-app.config.globalProperties.$global = {
+app.config.globalProperties.$store = store;
+// 鍒涘缓鍝嶅簲寮忕殑鍏ㄥ眬瀵硅薄
+const globalState = reactive({
signalR: false, //鏄惁寮�鍚痵ignalR
table: {
//vol-table甯︽暟鎹簮鐨勫崟鍏冩牸鏄惁鍚敤tag鏍囩(涓嬫媺妗嗙瓑鍗曞厓鏍间互tag鏍囩鏄剧ず)
@@ -42,8 +44,16 @@
// 瀹℃牳涓� = 2,
// 瀹℃牳鏈�氳繃 = 3,
// 椹冲洖 = 4
- }
-}
+ },
+ messageList: [], //鍏ㄥ眬娑堟伅鍒楄〃
+ messageDeleted: [] //瀛樺偍琚垹闄ょ殑娑堟伅ID锛岀敤浜庨�氱煡缁勪欢閲嶇疆瀹氭椂鍣�
+});
+
+app.config.globalProperties.$global = globalState;
+
+// 灏唖tore鎸傝浇鍒皐indow瀵硅薄涓婏紝鏂逛究鍦ㄦ墿灞曠粍浠朵腑璁块棶
+window.$store = store;
+window.$global = app.config.globalProperties.$global;
//2023.03.13锛�
//淇敼瑙侊細volupload.vue锛屽悗鍙癆liOSSController.cs锛岄樋閲屼簯OSS閰嶇疆.doc
window.oss = {
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 5e02795..a87385b 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"
@@ -15,6 +15,7 @@
isLoading: false,//2020.06.03澧炲姞璺敱鍒囨崲鏃跺姞杞芥彁绀�
userInfo: null,
websocke: null,//websocket
+ messageList: [],//娑堟伅鍒楄〃
// wcsState: true//wcs鏈嶅姟鐘舵��
},
mutations: {
@@ -42,6 +43,15 @@
},
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')
@@ -80,6 +90,9 @@
getData: (state) => () => {
return state.data;
},
+ getMessageList: (state) => () => {
+ return state.messageList;
+ }
}, actions: {
setPermission(context, data) {
context.commit('setPermission', data); //璋冪敤鏂瑰紡 store.dispatch('push')
@@ -89,6 +102,9 @@
},
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 c00bb5d..ce24a69 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"
@@ -139,6 +139,8 @@
{ bgcolor: "lightgreen", msg: "绌洪棽", state: 0 },
{ bgcolor: "orange", msg: "鏈夎揣", state: 100 },
{ bgcolor: "#2BB3D5", msg: "閿佸畾", state: 1 },
+ { bgcolor: "yellow", msg: "绌洪棽閿佸畾", state: 20 },
+ { bgcolor: "purple", msg: "鏈夎揣閿佸畾", state: 10 },
],
locationData: [],
showTooltipFlag: false,
@@ -285,6 +287,8 @@
if (location.location_lock === 0) return "绌洪棽";
if (location.location_lock === 1) return "閿佸畾";
if (location.location_lock === 100) return "鏈夎揣";
+ if (location.location_lock === 20) return "绌洪棽閿佸畾";
+ if (location.location_lock === 10) return "鏈夎揣閿佸畾";
// if (location.location_state > 0 && location.location_state < 100)
// return "閿佸畾";
return "鍏朵粬";
@@ -407,7 +411,7 @@
}
.location-cell {
- width: 80px;
+ width: 85px;
height: 38px;
margin: 3px;
text-align: center;
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 a882a94..1050623 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"
@@ -191,12 +191,29 @@
destroy-on-close
size="40%"
>
- <Message :list="messageList"></Message>
+ <div style="margin-bottom: 20px;">
+ <el-button type="danger" @click="clearAllMessages">鍏ㄩ儴娓呴櫎</el-button>
+ </div>
+ <Message :list="messageList" @delete-message="handleDeleteMessage"></Message>
</el-drawer>
</div>
</template>
<style lang="less" scoped>
@import "./index/index.less";
+
+/* 涓烘秷鎭垪琛ㄧ殑drawer娣诲姞鍦嗚 */
+:deep(.el-drawer__header) {
+ padding: 20px;
+}
+
+:deep(.el-drawer__body) {
+ padding: 0 20px 20px 20px;
+}
+
+:deep(.el-drawer) {
+ border-radius: 12px 0 0 12px !important;
+ overflow: hidden;
+}
</style>
<script>
import loading from "@/components/basic/RouterLoading";
@@ -297,7 +314,6 @@
const theme = ref("blue2");
const menuOptions = ref([]);
const permissionInited = ref(false);
- const messageList = reactive([]);
let _config = getCurrentInstance().appContext.config.globalProperties;
let router = useRouter();
const toggleLeft = () => {
@@ -316,7 +332,8 @@
const handleMessage = (e) => {
let data = JSON.parse(e.data);
- messageList.push(data);
+ // 浣跨敤store鐨刟ddMessage mutation娣诲姞娑堟伅
+ store.commit('addMessage', data);
ElNotification({
title: data.title,
message: h("i", { style: "color: teal" }, data.message),
@@ -626,7 +643,8 @@
//寮�鍚秷鎭帹閫侊紙main.js涓缃槸鍚﹀紑鍚痵ignalR锛�2022.05.05
if (_config.$global.signalR) {
MessageConfig(http, (result) => {
- messageList.unshift(result);
+ // 浣跨敤store鐨刟ddMessage mutation娣诲姞娑堟伅
+ store.commit('addMessage', result);
// console.log(result)
});
}
@@ -654,6 +672,59 @@
});
};
created();
+ // 澶勭悊鍒犻櫎鍗曟潯娑堟伅
+ const handleDeleteMessage = ({ item, index }) => {
+ // 浠庡叏灞�娑堟伅鍒楄〃涓垹闄よ娑堟伅
+ if (_config.$global.messageList && Array.isArray(_config.$global.messageList)) {
+ _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);
+ }
+
+ // 鏄剧ず鎴愬姛鎻愮ず
+ _config.$message.success('娑堟伅宸插垹闄�');
+
+ // 寮哄埗缁勪欢鏇存柊锛岀‘淇濇秷鎭垪琛ㄧ珛鍗冲埛鏂�
+ proxy.$nextTick(() => {
+ // 瑙﹀彂閲嶆覆鏌�
+ _config.$forceUpdate && _config.$forceUpdate();
+ });
+ };
+
+ // 娓呯悊鍏ㄩ儴娑堟伅
+ const clearAllMessages = () => {
+ // 鑾峰彇鎵�鏈夊綋鍓嶆秷鎭殑ID锛岀敤浜庨噸缃畾鏃跺櫒
+ const messageIds = _config.$global.messageList.map(msg => msg.id);
+
+ // 鍏堟竻绌簊tore涓殑娑堟伅鍒楄〃
+ store.commit('clearMessages');
+ // 鐒跺悗娓呯┖鍏ㄥ眬娑堟伅鍒楄〃锛屼娇鐢ㄩ噸鏂拌祴鍊肩殑鏂瑰紡纭繚鍝嶅簲寮忔洿鏂�
+ _config.$global.messageList = [];
+
+ // 灏嗘墍鏈夊垹闄ょ殑娑堟伅ID娣诲姞鍒癿essageDeleted鏁扮粍锛岀敤浜庨�氱煡缁勪欢閲嶇疆瀹氭椂鍣�
+ if (_config.$global.messageDeleted && Array.isArray(_config.$global.messageDeleted)) {
+ _config.$global.messageDeleted.push(...messageIds);
+ }
+
+ // 鏄剧ず鎴愬姛鎻愮ず
+ _config.$message.success('娑堟伅宸插叏閮ㄦ竻闄�');
+
+ // 寮哄埗缁勪欢鏇存柊锛岀‘淇濇秷鎭垪琛ㄧ珛鍗冲埛鏂�
+ proxy.$nextTick(() => {
+ // 瑙﹀彂閲嶆覆鏌�
+ _config.$forceUpdate && _config.$forceUpdate();
+ });
+ };
+
return {
menuWidth,
isCollapse,
@@ -681,12 +752,17 @@
to,
toggleLeft,
messageModel,
- messageList,
+ // 浠庡叏灞�瀵硅薄涓幏鍙栨秷鎭垪琛�
+ get messageList() {
+ return _config.$global.messageList;
+ },
contextMenuVisible,
visibleItem,
closeTabsMenu,
closeTabs,
currentMenuId,
+ clearAllMessages,
+ handleDeleteMessage,
};
},
/**
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/index/Message.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/index/Message.vue"
index e051ab6..4809a27 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/index/Message.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/index/Message.vue"
@@ -1,57 +1,80 @@
<template>
<div class="message-container">
- <div class="item" v-for="(item, index) in list" :key="index">
- <div class="title">{{ item.title }}({{ item.date }})</div>
+ <div class="item" v-for="(item, index) in list" :key="item.id || index">
+ <div class="title-container">
+ <div class="title">{{ item.title }}({{ item.createTime || item.date }})</div>
+ <el-button
+ type="text"
+ class="delete-btn"
+ @click="handleDeleteMessage(item, index)"
+ size="small"
+ >
+ <i class="el-icon-close"></i>
+ </el-button>
+ </div>
<div class="content">
- <el-row>
- <el-col :span="8">
- <label>鏀惰揣鍗曞彿锛歿{ item.formData.receiveOrderNo }}</label>
- </el-col>
- <el-col :span="8">
- <label>璐ㄦ鍗曞彿锛歿{ item.formData.checkOrderNo }}</label>
- </el-col>
- <el-col :span="8">
- <label>鏀惰揣鏄庣粏琛屽彿锛歿{ item.formData.receiveDetailRowNo }}</label>
- </el-col>
- </el-row>
+ <!-- 濡傛灉鏈塮ormData锛屾樉绀鸿川妫�瀹℃壒鐩稿叧鍐呭 -->
+ <template v-if="item.formData">
+ <el-row>
+ <el-col :span="8">
+ <label>鏀惰揣鍗曞彿锛歿{ item.formData.receiveOrderNo }}</label>
+ </el-col>
+ <el-col :span="8">
+ <label>璐ㄦ鍗曞彿锛歿{ item.formData.checkOrderNo }}</label>
+ </el-col>
+ <el-col :span="8">
+ <label>鏀惰揣鏄庣粏琛屽彿锛歿{ item.formData.receiveDetailRowNo }}</label>
+ </el-col>
+ </el-row>
- <el-row>
- <el-col :span="8">
- <label>鐗╂枡缂栧彿锛歿{ item.formData.materielCode }}</label>
- </el-col>
- <el-col :span="8">
- <label>鍚堟牸鏁伴噺锛歿{ item.formData.qualifiedQuantity }}</label>
- </el-col>
- <el-col :span="8">
- <label>鐗归噰鏁伴噺锛歿{ item.formData.defectedQuantity }}</label>
- </el-col>
- </el-row>
+ <el-row>
+ <el-col :span="8">
+ <label>鐗╂枡缂栧彿锛歿{ item.formData.materielCode }}</label>
+ </el-col>
+ <el-col :span="8">
+ <label>鍚堟牸鏁伴噺锛歿{ item.formData.qualifiedQuantity }}</label>
+ </el-col>
+ <el-col :span="8">
+ <label>鐗归噰鏁伴噺锛歿{ item.formData.defectedQuantity }}</label>
+ </el-col>
+ </el-row>
- <el-row>
- <el-col :span="8">
- <label>閫�璐ф暟閲忥細{{ item.formData.returnQuantity }}</label>
- </el-col>
- <el-col :span="8">
- <label>鎶ュ簾鏁伴噺锛歿{ item.formData.scrappedQuantity }}</label>
- </el-col>
- <el-col :span="8">
- <label>璐ㄦ鎬绘暟锛歿{ item.formData.receivedQuantity }}</label>
- </el-col>
- </el-row>
-
- <el-row>
- <el-col :span="16">
- <label>鐗归噰璇存槑锛歿{ item.formData.defectedNote }}</label>
- </el-col>
- <el-col :span="8">
- <label>妫�楠屼汉锛歿{ item.formData.checkUserName }}</label>
- </el-col>
- </el-row>
+ <el-row>
+ <el-col :span="8">
+ <label>閫�璐ф暟閲忥細{{ item.formData.returnQuantity }}</label>
+ </el-col>
+ <el-col :span="8">
+ <label>鎶ュ簾鏁伴噺锛歿{ item.formData.scrappedQuantity }}</label>
+ </el-col>
+ <el-col :span="8">
+ <label>璐ㄦ鎬绘暟锛歿{ item.formData.receivedQuantity }}</label>
+ </el-col>
+ </el-row>
+
+ <el-row>
+ <el-col :span="16">
+ <label>鐗归噰璇存槑锛歿{ item.formData.defectedNote }}</label>
+ </el-col>
+ <el-col :span="8">
+ <label>妫�楠屼汉锛歿{ item.formData.checkUserName }}</label>
+ </el-col>
+ </el-row>
+ <div style="margin-top: 20px">
+ <el-button type="primary">鍚屾剰</el-button
+ ><el-button type="danger">椹冲洖</el-button>
+ </div>
+ </template>
+ <!-- 鍚﹀垯鏄剧ず鏅�氭秷鎭唴瀹� -->
+ <template v-else>
+ <div class="simple-message">
+ {{ item.message || '鏃犳秷鎭唴瀹�' }}
+ </div>
+ </template>
</div>
- <div style="margin-top: 20px">
- <el-button type="primary">鍚屾剰</el-button
- ><el-button type="danger">椹冲洖</el-button>
- </div>
+ </div>
+ <!-- 濡傛灉娌℃湁娑堟伅锛屾樉绀烘彁绀� -->
+ <div v-if="list.length === 0" class="no-message">
+ 鏆傛棤娑堟伅
</div>
</div>
</template>
@@ -88,21 +111,87 @@
// });
// }
},
+ methods: {
+ // 澶勭悊纭鎸夐挳鐐瑰嚮浜嬩欢
+ handleConfirm(item) {
+ console.log('纭娑堟伅:', item);
+ // 杩欓噷鍙互娣诲姞纭鍚庣殑閫昏緫锛屾瘮濡備粠娑堟伅鍒楄〃涓Щ闄よ娑堟伅
+ // 鐢变簬props鏄崟鍚戞暟鎹祦锛岄渶瑕侀�氳繃浜嬩欢閫氱煡鐖剁粍浠跺鐞�
+ this.$emit('confirm', item);
+ },
+ // 澶勭悊鍒犻櫎鍗曟潯娑堟伅
+ handleDeleteMessage(item, index) {
+ // 閫氳繃浜嬩欢閫氱煡鐖剁粍浠跺垹闄よ娑堟伅
+ this.$emit('delete-message', { item, index });
+ }
+ }
};
</script>
<style scoped lang="less">
.message-container {
- .title {
- padding-bottom: 10px;
- font-weight: bold;
- }
+ padding: 10px;
+ background-color: #fafafa;
+ border-radius: 12px;
+
.item {
- border-bottom: 1px solid #eee;
- padding: 10px 20px;
+ background-color: white;
+ border: 1px solid #e4e7ed;
+ border-radius: 12px;
+ padding: 15px 20px;
+ margin-bottom: 15px;
+ position: relative;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+ transition: all 0.3s ease;
+
+ &:hover {
+ box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.15);
+ transform: translateY(-2px);
+ }
+
+ &:last-child {
+ margin-bottom: 0;
+ }
}
+
+ .title-container {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 10px;
+ }
+
+ .title {
+ font-weight: bold;
+ flex: 1;
+ color: #303133;
+ font-size: 16px;
+ }
+
+ .delete-btn {
+ margin-left: 10px;
+ color: #909399;
+ &:hover {
+ color: #f56c6c;
+ }
+ }
+
.content {
color: #1b1b1b;
font-size: 14px;
}
+
+ .simple-message {
+ line-height: 1.7;
+ color: #606266;
+ }
+
+ .no-message {
+ text-align: center;
+ padding: 50px 0;
+ color: #909399;
+ background-color: white;
+ border-radius: 12px;
+ border: 1px solid #e4e7ed;
+ }
}
</style>
--
Gitblit v1.9.3