From c5ac97682e3b4ca748541ace97cb37a2295bd81e Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期四, 19 三月 2026 22:46:29 +0800
Subject: [PATCH] feat: 增加GPS清理后台任务

---
 app/pages/index.vue |  177 ++++++++++++++++++++++++++++++++---------------------------
 1 files changed, 96 insertions(+), 81 deletions(-)

diff --git a/app/pages/index.vue b/app/pages/index.vue
index ce9d0b4..8d6dd2f 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -107,24 +107,30 @@
               <view
                 class="task-status"
                 :class="
-                  task.taskStatus === 'PENDING'
+                  task.taskStatus === TaskStatus.PENDING
                     ? 'status-pending'
-                    : task.taskStatus === 'DEPARTING'
+                    : task.taskStatus === TaskStatus.NOT_CONFIRMED
+                    ? 'status-not-confirmed'
+                    : task.taskStatus === TaskStatus.NOT_DEPARTED
+                    ? 'status-not-departed'
+                    : task.taskStatus === TaskStatus.PARTIALLY_CONFIRMED
+                    ? 'status-partially-confirmed'                    
+                    : task.taskStatus === TaskStatus.DEPARTING
                     ? 'status-departing'
-                    : task.taskStatus === 'ARRIVED'
+                    : task.taskStatus === TaskStatus.ARRIVED
                     ? 'status-arrived'
-                    : task.taskStatus === 'RETURNING'
+                    : task.taskStatus === TaskStatus.RETURNING
                     ? 'status-returning'
-                    : task.taskStatus === 'COMPLETED'
+                    : task.taskStatus === TaskStatus.COMPLETED
                     ? 'status-completed'
-                    : task.taskStatus === 'CANCELLED'
+                    : task.taskStatus === TaskStatus.CANCELLED
                     ? 'status-cancelled'
-                    : task.taskStatus === 'IN_PROGRESS'
+                    : task.taskStatus === TaskStatus.IN_PROGRESS
                     ? 'status-in-progress'
-                    : 'status-default'
+                    : 'status-pending'
                 "
               >
-                {{ getStatusText(task.status) }}
+                {{ getStatusText(task.taskStatus) }}
               </view>
             </view>
 
@@ -161,8 +167,8 @@
 
           <!-- 鎿嶄綔鎸夐挳 -->
           <view class="task-actions">
-            <!-- 寰呭鐞嗙姸鎬�: 鏄剧ず鍑哄彂銆佸彇娑� -->
-            <template v-if="task.taskStatus === 'PENDING'">
+            <!-- 寰呭鐞嗙姸鎬侊細鏄剧ず鍑哄彂銆佸彇娑� -->
+            <template v-if="task.taskStatus === TaskStatus.PENDING || task.taskStatus === TaskStatus.NOT_DEPARTED || task.taskStatus === TaskStatus.NOT_CONFIRMED || task.taskStatus === TaskStatus.PARTIALLY_CONFIRMED">
               <button
                 class="action-btn primary"
                 @click="handleTaskAction(task, 'depart')"
@@ -177,8 +183,8 @@
               </button>
             </template>
 
-            <!-- 鍑哄彂涓姸鎬�: 鏄剧ず宸插埌杈俱�佸己鍒剁粨鏉� -->
-            <template v-else-if="task.taskStatus === 'DEPARTING'">
+            <!-- 鍑哄彂涓姸鎬侊細鏄剧ず宸插埌杈俱�佸己鍒剁粨鏉� -->
+            <template v-else-if="task.taskStatus === TaskStatus.DEPARTING">
               <button
                 class="action-btn primary"
                 @click="handleTaskAction(task, 'arrive')"
@@ -193,8 +199,8 @@
               </button>
             </template>
 
-            <!-- 宸插埌杈剧姸鎬�: 鏄剧ず宸茶繑绋� -->
-            <template v-else-if="task.taskStatus === 'ARRIVED'">
+            <!-- 宸插埌杈剧姸鎬侊細鏄剧ず宸茶繑绋� -->
+            <template v-else-if="task.taskStatus === TaskStatus.ARRIVED">
               <button
                 class="action-btn primary"
                 @click="handleTaskAction(task, 'return')"
@@ -203,8 +209,8 @@
               </button>
             </template>
 
-            <!-- 杩旂▼涓姸鎬�: 鏄剧ず宸插畬鎴� -->
-            <template v-else-if="task.taskStatus === 'RETURNING'">
+            <!-- 杩旂▼涓姸鎬侊細鏄剧ず宸插畬鎴� -->
+            <template v-else-if="task.taskStatus === TaskStatus.RETURNING">
               <button
                 class="action-btn primary"
                 @click="handleTaskAction(task, 'complete')"
@@ -265,10 +271,40 @@
 import { formatDateTime } from "@/utils/common";
 import subscribeManager from "@/utils/subscribe";
 import { checkTaskCanDepart } from "@/utils/taskValidator";
+import { getStatusText as getTaskStatusText, TaskStatus } from "@/utils/TaskUtil";
+
+// 浠诲姟绫诲瀷鏄犲皠锛堜复鏃跺畾涔夛紝閬垮厤瀵煎叆闂锛�
+const TASK_TYPE_MAP = {
+  MAINTENANCE: "缁翠慨淇濆吇",
+  FUEL: "鍔犳补",
+  OTHER: "鍏朵粬",
+  EMERGENCY_TRANSFER: "杞繍浠诲姟",
+  WELFARE: "绂忕杞�",
+  maintenance: "缁翠慨淇濆吇",
+  refuel: "鍔犳补",
+  inspection: "宸℃",
+  emergency: "杞繍浠诲姟",
+  welfare: "绂忕杞�"
+};
+
+// 浠诲姟鐘舵�佹槧灏勶紙涓存椂瀹氫箟锛岄伩鍏嶅鍏ラ棶棰橈級
+const TASK_STATUS_MAP = {
+  PENDING: "寰呭鐞�",
+  NOT_CONFIRMED: "瀹屽叏鏈‘璁�",
+  NOT_DEPARTED: "寰呭嚭鍙�",
+  PARTIALLY_CONFIRMED: "閮ㄥ垎纭",
+  DEPARTING: "鍑哄彂涓�",
+  ARRIVED: "宸插埌杈�",
+  RETURNING: "杩旂▼涓�",
+  COMPLETED: "宸插畬鎴�",
+  CANCELLED: "宸插彇娑�",
+  IN_PROGRESS: "浠诲姟涓�"
+};
 
 export default {
   data() {
     return {
+      TaskStatus, // 鏆撮湶 TaskStatus 缁欐ā鏉夸娇鐢�
       // 鐢ㄦ埛缁戝畾鐨勮溅杈嗕俊鎭�
       boundVehicle: "",
       boundVehicleId: null,
@@ -307,13 +343,17 @@
     runningTasks() {
       return this.displayedTaskList.filter((task) => {
         // 鍖呭惈寰呭鐞嗐�佸嚭鍙戜腑銆佸凡鍒拌揪銆佽繑绋嬩腑绛夋墍鏈夋湭瀹屾垚鐨勭姸鎬�
-        return [
-          "PENDING",
-          "DEPARTING",
-          "ARRIVED",
-          "RETURNING",
-          "IN_PROGRESS",
-        ].includes(task.taskStatus);
+        const activeStatuses = [
+          TaskStatus.NOT_CONFIRMED,
+          TaskStatus.NOT_DEPARTED,
+          TaskStatus.PARTIALLY_CONFIRMED,
+          TaskStatus.PENDING,
+          TaskStatus.DEPARTING,
+          TaskStatus.ARRIVED,
+          TaskStatus.RETURNING,
+          TaskStatus.IN_PROGRESS,
+        ];
+        return activeStatuses.includes(task.taskStatus);
       });
     },
     
@@ -651,6 +691,10 @@
     convertStatus(dbStatus) {
       const statusMap = {
         PENDING: "pending",
+        NOT_CONFIRMED: "pending",
+        NOT_DEPARTED: "pending",
+        PARTIALLY_CONFIRMED: "pending",
+        
         DEPARTING: "processing",
         ARRIVED: "processing",
         RETURNING: "processing",
@@ -754,7 +798,7 @@
             this.$modal
               .confirm("纭畾瑕佸嚭鍙戝悧锛�")
               .then(() => {
-                this.updateTaskStatus(task.taskId, "DEPARTING", "浠诲姟宸插嚭鍙�");
+                this.updateTaskStatus(task.taskId, TaskStatus.DEPARTING, "浠诲姟宸插嚭鍙�");
               })
               .catch(() => {});
           } catch (error) {
@@ -764,7 +808,7 @@
             this.$modal
               .confirm("妫�鏌ヤ换鍔$姸鎬佸け璐ワ紝鏄惁缁х画鍑哄彂锛�")
               .then(() => {
-                this.updateTaskStatus(task.taskId, "DEPARTING", "浠诲姟宸插嚭鍙�");
+                this.updateTaskStatus(task.taskId, TaskStatus.DEPARTING, "浠诲姟宸插嚭鍙�");
               })
               .catch(() => {});
           }
@@ -781,7 +825,7 @@
           this.$modal
             .confirm("纭宸插埌杈剧洰鐨勫湴锛�")
             .then(() => {
-              this.updateTaskStatus(task.taskId, "ARRIVED", "宸插埌杈剧洰鐨勫湴");
+              this.updateTaskStatus(task.taskId, TaskStatus.ARRIVED, "宸插埌杈剧洰鐨勫湴");
             })
             .catch(() => {});
           break;
@@ -791,7 +835,7 @@
           this.$modal
             .confirm("纭畾瑕佸己鍒剁粨鏉熸浠诲姟鍚楋紵")
             .then(() => {
-              this.updateTaskStatus(task.taskId, "CANCELLED", "浠诲姟宸插己鍒剁粨鏉�");
+              this.updateTaskStatus(task.taskId, TaskStatus.CANCELLED, "浠诲姟宸插己鍒剁粨鏉�");
             })
             .catch(() => {});
           break;
@@ -801,7 +845,7 @@
           this.$modal
             .confirm("纭寮�濮嬭繑绋嬶紵")
             .then(() => {
-              this.updateTaskStatus(task.taskId, "RETURNING", "宸插紑濮嬭繑绋�");
+              this.updateTaskStatus(task.taskId, TaskStatus.RETURNING, "宸插紑濮嬭繑绋�");
             })
             .catch(() => {});
           break;
@@ -809,7 +853,7 @@
         case "complete":
           // 宸插畬鎴� -> 鐘舵�佸彉涓哄凡瀹屾垚
           // 闇�瑕佹鏌ユ槸鍚︿笂浼犱簡鐭ユ儏鍚屾剰涔�
-          this.checkConsentAttachmentAndThen(task.taskId, "COMPLETED", "浠诲姟宸插畬鎴�");
+          this.checkConsentAttachmentAndThen(task.taskId, TaskStatus.COMPLETED, "浠诲姟宸插畬鎴�");
           break;
       }
     },
@@ -919,14 +963,14 @@
     getLocationAndUpdateStatus(taskId, status, remark, cancelReason) {
       const that = this;
 
-      // 浣跨敤uni.getLocation鑾峰彇GPS浣嶇疆
+      // 浣跨敤 uni.getLocation 鑾峰彇 GPS 浣嶇疆
       uni.getLocation({
         type: "gcj02",
         geocode: true,
         altitude: true,
         success: function (res) {
-          console.log("GPS瀹氫綅鎴愬姛:", res);
-
+          console.log("GPS 瀹氫綅鎴愬姛:", res);
+      
           const statusData = {
             taskStatus: status,
             remark: remark,
@@ -990,55 +1034,14 @@
       });
     },
 
-    // 鑾峰彇鐘舵�佹牱寮忕被
-    getStatusClass(status) {
-      const statusClassMap = {
-        PENDING: "status-pending",
-        DEPARTING: "status-departing",
-        ARRIVED: "status-arrived",
-        RETURNING: "status-returning",
-        COMPLETED: "status-completed",
-        CANCELLED: "status-cancelled",
-        IN_PROGRESS: "status-in-progress",
-      };
-      return statusClassMap[status] || "status-default";
-    },
-
-    getStatusText(status) {
-      // 鏀寔鏂版棫涓ょ鐘舵�佹牸寮�
-      const statusMap = {
-        // 鏂版牸寮忥紙鏁版嵁搴撶姸鎬侊級
-        PENDING: "寰呭鐞�",
-        DEPARTING: "鍑哄彂涓�",
-        ARRIVED: "宸插埌杈�",
-        RETURNING: "杩旂▼涓�",
-        COMPLETED: "宸插畬鎴�",
-        CANCELLED: "宸插彇娑�",
-        IN_PROGRESS: "澶勭悊涓�",
-        // 鏃ф牸寮忥紙UI鐘舵�侊級
-        pending: "寰呭鐞�",
-        processing: "澶勭悊涓�",
-        completed: "宸插畬鎴�",
-      };
-      return statusMap[status] || "鏈煡";
-    },
-
+    // 鑾峰彇浠诲姟绫诲瀷鏂囨湰
     getTaskTypeText(type) {
-      const typeMap = {
-        // 鏂版牸寮忥紙鏁版嵁搴撶被鍨嬶級
-        MAINTENANCE: "缁翠慨淇濆吇",
-        FUEL: "鍔犳补",
-        OTHER: "鍏朵粬",
-        EMERGENCY_TRANSFER: "杞繍浠诲姟",
-        WELFARE: "绂忕杞�",
-        // 鏃ф牸寮忥紙UI绫诲瀷锛�
-        maintenance: "缁翠慨淇濆吇",
-        refuel: "鍔犳补",
-        inspection: "宸℃",
-        emergency: "杞繍浠诲姟",
-        welfare: "绂忕杞�",
-      };
-      return typeMap[type] || "鏈煡绫诲瀷";
+      return TASK_TYPE_MAP[type] || "鏈煡绫诲瀷";
+    },
+
+    // 鑾峰彇浠诲姟鐘舵�佹枃鏈�
+    getStatusText(status) {
+      return TASK_STATUS_MAP[status] || "鏈煡";
     },
 
     clickConfirmsubscribeTaskNotify() {
@@ -1328,6 +1331,18 @@
               background-color: #fff3e0;
               color: #ff9500;
             }
+            &.status-not-confirmed {
+              background-color: #fff3e0;
+              color: #ff9500;
+            }
+            &.status-not-departed {
+              background-color: #fff3e0;
+              color: #ff9500;
+            }
+            &.status-partially-confirmed {
+              background-color: #fff3e0;
+              color: #ff9500;
+            }
 
             // 鍑哄彂涓� - 钃濊壊
             &.status-departing {

--
Gitblit v1.9.1