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/extension/taskinfo/task.js |  181 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 180 insertions(+), 1 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..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) {

--
Gitblit v1.9.3