From 1c631b345aae30bb6aa7e9dc8d856a0f40d5f1e3 Mon Sep 17 00:00:00 2001
From: liulijun <liulijun@hnkhzn.com>
Date: 星期五, 20 三月 2026 10:49:08 +0800
Subject: [PATCH] 修复货位平面图锁定状态的显示
---
项目代码/WMS/WMSClient/src/extension/taskinfo/task.js | 386 +++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 292 insertions(+), 94 deletions(-)
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..8a6c791 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"
@@ -2,22 +2,22 @@
//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
import gridHeader from './extend/relocationTask.vue'
let extension = {
- components: {
- //鏌ヨ鐣岄潰鎵╁睍缁勪欢
- gridHeader: gridHeader,
- gridBody: '',
- gridFooter: '',
- //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
- modelHeader: '',
- modelBody: '',
- modelFooter: ''
- },
- tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
- buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
- methods: {
- //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
- onInit() {
- let TaskHandCancelBtn = this.buttons.find(x => x.value == 'TaskHandCancel');
+ components: {
+ //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+ gridHeader: gridHeader,
+ gridBody: '',
+ gridFooter: '',
+ //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+ modelHeader: '',
+ modelBody: '',
+ modelFooter: ''
+ },
+ tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+ buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+ methods: {
+ //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+ onInit() {
+ let TaskHandCancelBtn = this.buttons.find(x => x.value == 'TaskHandCancel');
if (TaskHandCancelBtn) {
TaskHandCancelBtn.onClick = function () {
let rows = this.$refs.table.getSelected();
@@ -25,7 +25,7 @@
if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
var param = rows[0].taskNum;
this.http
- .post("api/Task/TaskCancel?taskNum="+param, "鏁版嵁澶勭悊涓�...")
+ .post("api/Task/TaskCancel?taskNum=" + param, "鏁版嵁澶勭悊涓�...")
.then((x) => {
if (x.status) {
this.$Message.success('浠诲姟鍙栨秷鎴愬姛.');
@@ -39,53 +39,53 @@
let TaskHandCompletedBtn = this.buttons.find(x => x.value == 'TaskHandCompleted');
if (TaskHandCompletedBtn) {
TaskHandCompletedBtn.onClick = function () {
- this.$confirm("鏄惁纭瀹屾垚浠诲姟","鎵嬪姩浠诲姟瀹屾垚璀﹀憡",{
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- center: true,
- }).then(() => {
- let rows = this.$refs.table.getSelected();
- if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
- if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
- var param = rows[0].taskNum;
- this.http
- .post("api/Task/TaskCompleted?taskNum="+param, "")
- .then((x) => {
- if (x.status) {
- this.$Message.success('浠诲姟鎵嬪姩瀹屾垚');
- this.refresh();
- } else {
- return this.$error(x.message);
- }
- });
+ this.$confirm("鏄惁纭瀹屾垚浠诲姟", "鎵嬪姩浠诲姟瀹屾垚璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ center: true,
+ }).then(() => {
+ let rows = this.$refs.table.getSelected();
+ if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
+ if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
+ var param = rows[0].taskNum;
+ this.http
+ .post("api/Task/TaskCompleted?taskNum=" + param, "")
+ .then((x) => {
+ if (x.status) {
+ this.$Message.success('浠诲姟鎵嬪姩瀹屾垚');
+ this.refresh();
+ } else {
+ return this.$error(x.message);
+ }
});
+ });
}
}
let ResendTaskBtn = this.buttons.find(x => x.value == 'ResendTask');
if (ResendTaskBtn) {
ResendTaskBtn.onClick = function () {
- this.$confirm("鏄惁纭閲嶆柊涓嬪彂浠诲姟","閲嶆柊涓嬪彂浠诲姟璀﹀憡",{
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- center: true,
- }).then(() => {
- let rows = this.$refs.table.getSelected();
- if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
- if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
- var param = rows[0].taskNum;
- this.http
- .post("api/Task/ResendTask?taskNum="+param, "")
- .then((x) => {
- if (x.status) {
- this.$Message.success('浠诲姟閲嶆柊涓嬪彂');
- this.refresh();
- } else {
- return this.$error(x.message);
- }
- });
+ this.$confirm("鏄惁纭閲嶆柊涓嬪彂浠诲姟", "閲嶆柊涓嬪彂浠诲姟璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ center: true,
+ }).then(() => {
+ let rows = this.$refs.table.getSelected();
+ if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
+ if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
+ var param = rows[0].taskNum;
+ this.http
+ .post("api/Task/ResendTask?taskNum=" + param, "")
+ .then((x) => {
+ if (x.status) {
+ this.$Message.success('浠诲姟閲嶆柊涓嬪彂');
+ this.refresh();
+ } else {
+ return this.$error(x.message);
+ }
});
+ });
}
}
let relocationBtn = this.buttons.find(x => x.value == 'Relocation');
@@ -94,42 +94,240 @@
this.$refs.gridHeader.open();
}
}
- },
- onInited() {
- //妗嗘灦鍒濆鍖栭厤缃悗
- //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
- //this.detailOptions.columns.forEach(column=>{ });
- },
- searchBefore(param) {
- //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
- //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
- return true;
- },
- searchAfter(result) {
- //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
- return true;
- },
- addBefore(formData) {
- //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
- return true;
- },
- updateBefore(formData) {
- //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
- return true;
- },
- rowClick({ row, column, event }) {
- //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
- this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
- },
- modelOpenAfter(row) {
- //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
- //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
- //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
- //(3)this.editFormFields.瀛楁='xxx';
- //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
- //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+
+ // 鍒濆鍖栦换鍔$姸鎬佹鏌ュ畾鏃跺櫒
+ 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) {
+ // 蹇界暐鎵�鏈夐敊璇�
+ }
+ }
+ },
+ onInited() {
+ //妗嗘灦鍒濆鍖栭厤缃悗
+ //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+ //this.detailOptions.columns.forEach(column=>{ });
+ },
+ searchBefore(param) {
+ //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+ //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+ return true;
+ },
+ 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) {
+ //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+ return true;
+ },
+ updateBefore(formData) {
+ //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+ return true;
+ },
+ rowClick({ row, column, event }) {
+ //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+ this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+ },
+ modelOpenAfter(row) {
+ //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+ //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+ //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+ //(3)this.editFormFields.瀛楁='xxx';
+ //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+ //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
}
- };
- export default extension;
-
\ No newline at end of file
+ }
+};
+export default extension;
--
Gitblit v1.9.3