From 0a3eed02e78dfeeb7763a4b62992eefcd1f5a0ca Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期二, 23 十二月 2025 23:33:34 +0800
Subject: [PATCH] feat: 优化状态变更时实时推送

---
 app/pages/index.vue |   99 +++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 91 insertions(+), 8 deletions(-)

diff --git a/app/pages/index.vue b/app/pages/index.vue
index d86d564..46ca76b 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -243,6 +243,7 @@
 import { getUnreadCount } from "@/api/message";
 import { formatDateTime } from "@/utils/common";
 import subscribeManager from "@/utils/subscribe";
+import { checkTaskCanDepart } from "@/utils/taskValidator";
 
 export default {
   data() {
@@ -510,7 +511,9 @@
                 startLocation: task.departureAddress || task.startLocation || "鏈缃�",
                 endLocation: task.destinationAddress || task.endLocation || "鏈缃�",
                 startTime: task.plannedStartTime
-                  ? formatDateTime(task.plannedStartTime, "YYYY-MM-DD HH:mm")
+                  ? (task.plannedStartTime.startsWith('1900') || task.plannedStartTime.startsWith('1970') 
+                    ? '鏈垎閰嶆椂闂�' 
+                    : formatDateTime(task.plannedStartTime, "YYYY-MM-DD HH:mm"))
                   : "鏈缃�",
                 assignee: task.assigneeName || "鏈垎閰�",
                 taskNo: task.taskCode || "鏈煡缂栧彿",
@@ -611,16 +614,96 @@
     },
 
     // 澶勭悊浠诲姟鎿嶄綔
-    handleTaskAction(task, action) {
+    async handleTaskAction(task, action) {
       switch (action) {
         case "depart":
           // 鍑哄彂 -> 鐘舵�佸彉涓哄嚭鍙戜腑
-          this.$modal
-            .confirm("纭畾瑕佸嚭鍙戝悧锛�")
-            .then(() => {
-              this.updateTaskStatus(task.taskId, "DEPARTING", "浠诲姟宸插嚭鍙�");
-            })
-            .catch(() => {});
+          // 鏄剧ず鍔犺浇鎻愮ず
+          uni.showLoading({
+            title: "妫�鏌ヤ换鍔$姸鎬�...",
+          });
+
+          try {
+            // 璋冪敤宸ュ叿绫绘鏌ヤ换鍔℃槸鍚﹀彲浠ュ嚭鍙戯紙鍖呭惈鍩烘湰鏍¢獙鍜屽啿绐佹鏌ワ級
+            const checkResult = await checkTaskCanDepart(task);
+
+            uni.hideLoading();
+
+            console.log("鍑哄彂妫�鏌ョ粨鏋�:", checkResult);
+            console.log("valid:", checkResult.valid);
+            console.log("conflicts:", checkResult.conflicts);
+
+            if (!checkResult.valid) {
+              // 鏍¢獙澶辫触锛屾樉绀烘彁绀轰俊鎭苟鎻愪緵璺宠浆閫夐」
+              const conflicts = checkResult.conflicts || [];
+              const conflictInfo = conflicts.length > 0 ? conflicts[0] : null;
+
+              console.log("鍐茬獊淇℃伅:", conflictInfo);
+
+              // 濡傛灉鏈夊啿绐佷换鍔′俊鎭紝鎻愪緵璺宠浆鎸夐挳
+              if (conflictInfo && conflictInfo.taskId) {
+                console.log(
+                  "鏄剧ず甯﹁烦杞寜閽殑寮圭獥锛屼换鍔D:",
+                  conflictInfo.taskId
+                );
+
+                const conflictTaskId = conflictInfo.taskId;
+                const message =
+                  checkResult.message || conflictInfo.message || "瀛樺湪鍐茬獊浠诲姟";
+
+                uni.showModal({
+                  title: "鎻愮ず",
+                  content: message,
+                  confirmText: "鍘诲鐞�",
+                  cancelText: "鐭ラ亾浜�",
+                  success: function (res) {
+                    console.log("寮圭獥鐐瑰嚮缁撴灉:", res);
+                    if (res.confirm) {
+                      // 鐢ㄦ埛鐐瑰嚮"鐜板湪鍘诲鐞�"锛岃烦杞埌鍐茬獊浠诲姟璇︽儏椤�
+                      console.log("鍑嗗璺宠浆鍒颁换鍔¤鎯呴〉:", conflictTaskId);
+                      uni.navigateTo({
+                        url: `/pagesTask/detail?id=${conflictTaskId}`,
+                      });
+                    }
+                  },
+                  fail: function (err) {
+                    console.error("鏄剧ず寮圭獥澶辫触:", err);
+                  },
+                });
+              } else {
+                // 娌℃湁鍐茬獊浠诲姟ID锛屽彧鏄剧ず鎻愮ず
+                console.log("鏄剧ず鏅�氭彁绀哄脊绐�");
+                uni.showModal({
+                  title: "鎻愮ず",
+                  content: checkResult.message || "浠诲姟鏍¢獙澶辫触",
+                  showCancel: false,
+                  confirmText: "鐭ラ亾浜�",
+                  fail: function (err) {
+                    console.error("鏄剧ず寮圭獥澶辫触:", err);
+                  },
+                });
+              }
+              return;
+            }
+
+            // 鎵�鏈夋鏌ラ�氳繃锛屽彲浠ュ嚭鍙�
+            this.$modal
+              .confirm("纭畾瑕佸嚭鍙戝悧锛�")
+              .then(() => {
+                this.updateTaskStatus(task.taskId, "DEPARTING", "浠诲姟宸插嚭鍙�");
+              })
+              .catch(() => {});
+          } catch (error) {
+            uni.hideLoading();
+            console.error("妫�鏌ヤ换鍔$姸鎬佸け璐�:", error);
+            // 妫�鏌ュけ璐ユ椂锛屼粛鐒跺厑璁稿嚭鍙�
+            this.$modal
+              .confirm("妫�鏌ヤ换鍔$姸鎬佸け璐ワ紝鏄惁缁х画鍑哄彂锛�")
+              .then(() => {
+                this.updateTaskStatus(task.taskId, "DEPARTING", "浠诲姟宸插嚭鍙�");
+              })
+              .catch(() => {});
+          }
           break;
 
         case "cancel":

--
Gitblit v1.9.1