From fa5ea853099e88be253fca4fb2b0c2b7af5f396e Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 09 十一月 2025 15:57:04 +0800
Subject: [PATCH] feat:微信登录

---
 app/pages/index.vue |  505 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 316 insertions(+), 189 deletions(-)

diff --git a/app/pages/index.vue b/app/pages/index.vue
index 0caeb01..72efa8a 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -4,16 +4,27 @@
     <view class="user-info-section">
       <view class="user-info-content">
         <view class="user-details">
-          <view class="user-name">{{ userName || '鏈櫥褰�' }}</view>
-          <view class="vehicle-info" @click="goToBindVehicle">
-            <text v-if="boundVehicle">鍏宠仈杞︾墝鍙凤細{{ boundVehicle }}</text>
-            <text v-else>鏈粦瀹氳溅鐗屽彿</text>
-            <uni-icons 
-              :type="boundVehicle ? 'loop' : 'plus-filled'" 
-              size="18" 
-              :color="boundVehicle ? '#007AFF' : '#999'"
-              style="margin-left: 8rpx;"
-            ></uni-icons>
+          <view class="user-info-row">
+            <text class="user-name">{{ userName || '鏈櫥褰�' }}</text>
+            <text class="separator" v-if="currentUser.branchCompanyName">|</text>
+            <view class="branch-company" v-if="currentUser.branchCompanyName">
+              <uni-icons type="location" size="16" color="#666" style="margin-right: 4rpx;"></uni-icons>
+              <text>{{ currentUser.branchCompanyName }}</text>
+            </view>
+            <text class="separator" v-if="boundVehicle">|</text>
+            <view class="vehicle-info" @click.stop="goToBindVehicle" v-if="boundVehicle">
+              <text>{{ boundVehicle }}</text>
+              <uni-icons 
+                type="loop" 
+                size="16" 
+                color="#007AFF"
+                style="margin-left: 4rpx;"
+              ></uni-icons>
+            </view>
+          </view>
+          <view class="bind-vehicle-btn" v-if="!boundVehicle" @click="goToBindVehicle">
+            <uni-icons type="plus-filled" size="16" color="#007AFF" style="margin-right: 4rpx;"></uni-icons>
+            <text>缁戝畾杞︾墝</text>
           </view>
         </view>
       </view>
@@ -41,18 +52,21 @@
       <view class="task-list">
         <view class="task-item" v-for="task in runningTasks" :key="task.id">
           <view class="task-main" @click="viewTaskDetail(task)">
-            <view class="task-title">{{ getTaskTypeText(task.type) }} - {{ task.vehicle }}</view>
-            <view class="task-info">
-              <view class="info-row">
-                <view class="info-item">
-                  <view class="label">浠诲姟缂栧彿:</view>
-                  <view class="value">{{ task.taskNo }}</view>
-                </view>
-                <view class="info-item">
-                  <view class="label">浠诲姟鐘舵��:</view>
-                  <view class="value">{{ getStatusText(task.status) }}</view>
-                </view>
+            <!-- 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵�佹爣绛� -->
+            <view class="task-header">
+              <view class="task-title">{{ getTaskTypeText(task.type) }} - {{ task.vehicle }}</view>
+              <view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'">
+                {{ getStatusText(task.status) }}
               </view>
+            </view>
+            
+            <!-- 浠诲姟缂栧彿鍗曠嫭涓�琛� -->
+            <view class="task-code-row">
+              <text class="task-code">{{ task.taskNo }}</text>
+            </view>
+            
+            <!-- 浠诲姟璇︾粏淇℃伅 -->
+            <view class="task-info">
               <view class="info-row">
                 <view class="info-item">
                   <view class="label">鍑哄彂鍦�:</view>
@@ -78,46 +92,59 @@
           
           <!-- 鎿嶄綔鎸夐挳 -->
           <view class="task-actions">
-            <button 
-              class="action-btn" 
-              :class="{ disabled: isActionDisabled(task, 'depart') }"
-              @click="handleTaskAction(task, 'depart')"
-              v-if="task.status !== 'completed'"
-            >
-              鍑哄彂
-            </button>
-            <button 
-              class="action-btn" 
-              :class="{ disabled: isActionDisabled(task, 'arrive') }"
-              @click="handleTaskAction(task, 'arrive')"
-              v-if="task.status !== 'completed'"
-            >
-              宸插埌杈�
-            </button>
-            <button 
-              class="action-btn" 
-              :class="{ disabled: isActionDisabled(task, 'return') }"
-              @click="handleTaskAction(task, 'return')"
-              v-if="task.status !== 'completed'"
-            >
-              杩旂▼
-            </button>
-            <button 
-              class="action-btn" 
-              :class="{ disabled: isActionDisabled(task, 'settle') }"
-              @click="handleTaskAction(task, 'settle')"
-              v-if="task.status !== 'completed'"
-            >
-              缁撶畻
-            </button>
-            <button 
-              class="action-btn primary" 
-              :class="{ disabled: isActionDisabled(task, 'complete') }"
-              @click="handleTaskAction(task, 'complete')"
-              v-if="task.status !== 'completed'"
-            >
-              宸插畬鎴�
-            </button>
+            <!-- 寰呭鐞嗙姸鎬�: 鏄剧ず鍑哄彂銆佸彇娑� -->
+            <template v-if="task.taskStatus === 'PENDING'">
+              <button 
+                class="action-btn primary" 
+                @click="handleTaskAction(task, 'depart')"
+              >
+                鍑哄彂
+              </button>
+              <button 
+                class="action-btn cancel" 
+                @click="handleTaskAction(task, 'cancel')"
+              >
+                鍙栨秷
+              </button>
+            </template>
+            
+            <!-- 鍑哄彂涓姸鎬�: 鏄剧ず宸插埌杈俱�佸己鍒剁粨鏉� -->
+            <template v-else-if="task.taskStatus === 'DEPARTING'">
+              <button 
+                class="action-btn primary" 
+                @click="handleTaskAction(task, 'arrive')"
+              >
+                宸插埌杈�
+              </button>
+              <button 
+                class="action-btn cancel" 
+                @click="handleTaskAction(task, 'forceCancel')"
+              >
+                寮哄埗缁撴潫
+              </button>
+            </template>
+            
+            <!-- 宸插埌杈剧姸鎬�: 鏄剧ず宸茶繑绋� -->
+            <template v-else-if="task.taskStatus === 'ARRIVED'">
+              <button 
+                class="action-btn primary" 
+                @click="handleTaskAction(task, 'return')"
+              >
+                宸茶繑绋�
+              </button>
+            </template>
+            
+            <!-- 杩旂▼涓姸鎬�: 鏄剧ず宸插畬鎴� -->
+            <template v-else-if="task.taskStatus === 'RETURNING'">
+              <button 
+                class="action-btn primary" 
+                @click="handleTaskAction(task, 'complete')"
+              >
+                宸插畬鎴�
+              </button>
+            </template>
+            
+            <!-- 宸插畬鎴�/宸插彇娑�: 涓嶆樉绀烘寜閽� -->
           </view>
         </view>
         
@@ -135,6 +162,8 @@
   import { getMyTasks, changeTaskStatus } from '@/api/task'
   import { getUserProfile } from '@/api/system/user'
   import { getUserBoundVehicle } from '@/api/vehicle'
+  import { getUnreadCount } from '@/api/message'
+  import { formatDateTime } from '@/utils/common'
   
   export default {
     data() {
@@ -144,48 +173,8 @@
         boundVehicleId: null,
         
         // 娑堟伅鏁版嵁
-        messages: [
-          {
-            id: 1,
-            type: 'create', // 鍒涘缓鎴愬姛
-            content: 'TD 1011 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20 浠诲姟鍒涘缓鎴愬姛',
-            time: '2023-05-15 13:20',
-            read: false,
-            taskId: 1
-          },
-          {
-            id: 2,
-            type: 'push', // 浠诲姟鎺ㄩ��
-            content: 'TD1021 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20 鍑哄彂锛岃鍙婃椂澶勭悊',
-            time: '2023-05-15 13:25',
-            read: false,
-            taskId: 2
-          },
-          {
-            id: 3,
-            type: 'status', // 浠诲姟鐘舵�佸彉鏇�
-            content: 'TD1021 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20锛屼换鍔℃鍦ㄨ浆杩愪腑',
-            time: '2023-05-15 14:30',
-            read: true,
-            taskId: 2
-          },
-          {
-            id: 4,
-            type: 'create', // 鍒涘缓鎴愬姛
-            content: 'TD 1022 娣卞湷鍗楀北->娣卞湷绂忕敯锛屾椂闂达細15锛�10 浠诲姟鍒涘缓鎴愬姛',
-            time: '2023-05-15 15:10',
-            read: false,
-            taskId: 3
-          },
-          {
-            id: 5,
-            type: 'push', // 浠诲姟鎺ㄩ��
-            content: 'TD1023 娣卞湷鍗楀北->娣卞湷绂忕敯锛屾椂闂达細16锛�00 鍑哄彂锛岃鍙婃椂澶勭悊',
-            time: '2023-05-15 16:00',
-            read: true,
-            taskId: 4
-          }
-        ],
+        messages: [],
+        unreadMessageCount: 0,
         
         // 姝e湪杩愯鐨勪换鍔″垪琛�
         taskList: [],
@@ -194,7 +183,7 @@
     },
     computed: {
       ...mapState({
-        userName: state => state.user.name,
+        userName: state => state.user.nickName,
         currentUser: state => state.user
       }),
       
@@ -204,23 +193,35 @@
           // 鍖呭惈寰呭鐞嗐�佸嚭鍙戜腑銆佸凡鍒拌揪銆佽繑绋嬩腑绛夋墍鏈夋湭瀹屾垚鐨勭姸鎬�
           return ['PENDING', 'DEPARTING', 'ARRIVED', 'RETURNING', 'IN_PROGRESS'].includes(task.taskStatus)
         });
-      },
-      
-      // 鏈娑堟伅鏁伴噺
-      unreadMessageCount() {
-        return this.messages.filter(message => !message.read).length;
       }
     },
     onLoad() {
+      // 妫�鏌ョ敤鎴锋槸鍚﹀凡鐧诲綍
+      const userId = this.currentUser.userId
+      if (!userId) {
+        console.log('鐢ㄦ埛鏈櫥褰曪紝璺宠繃鍔犺浇鏁版嵁')
+        return
+      }
+      
       // 鍔犺浇鐢ㄦ埛缁戝畾杞﹁締淇℃伅
       this.loadUserVehicle()
       // 鍔犺浇姝e湪杩愯鐨勪换鍔�
       this.loadRunningTasks()
+      // 鍔犺浇鏈娑堟伅鏁伴噺
+      this.loadUnreadMessageCount()
     },
     onShow() {
-      // 姣忔鏄剧ず椤甸潰鏃跺埛鏂颁换鍔″垪琛ㄥ拰缁戝畾杞﹁締
+      // 妫�鏌ョ敤鎴锋槸鍚﹀凡鐧诲綍
+      const userId = this.currentUser.userId
+      if (!userId) {
+        console.log('鐢ㄦ埛鏈櫥褰曪紝璺宠繃鍔犺浇鏁版嵁')
+        return
+      }
+      
+      // 姣忔鏄剧ず椤甸潰鏃跺埛鏂颁换鍔″垪琛ㄣ�佺粦瀹氳溅杈嗗拰娑堟伅鏁伴噺
       this.loadUserVehicle()
       this.loadRunningTasks()
+      this.loadUnreadMessageCount()
     },
     onPullDownRefresh() {
       // 涓嬫媺鍒锋柊
@@ -255,6 +256,40 @@
           this.boundVehicle = ''
           this.boundVehicleId = null
         })
+      },
+      
+      // 鍔犺浇鏈娑堟伅鏁伴噺
+      loadUnreadMessageCount() {
+        // 妫�鏌ョ敤鎴锋槸鍚﹀凡鐧诲綍
+        const userId = this.currentUser.userId
+        if (!userId) {
+          console.log('鐢ㄦ埛鏈櫥褰曪紝璺宠繃鑾峰彇鏈娑堟伅鏁伴噺')
+          return
+        }
+        
+        getUnreadCount().then(response => {
+          if (response.code === 200) {
+            this.unreadMessageCount = response.data || 0
+            // 鏇存柊TabBar寰芥爣
+            this.updateTabBarBadge(this.unreadMessageCount)
+          }
+        }).catch(error => {
+          console.error('鑾峰彇鏈娑堟伅鏁伴噺澶辫触:', error)
+        })
+      },
+      
+      // 鏇存柊TabBar寰芥爣
+      updateTabBarBadge(count) {
+        if (count > 0) {
+          uni.setTabBarBadge({
+            index: 3, // 娑堟伅椤甸潰鍦╰abBar涓殑绱㈠紩
+            text: count > 99 ? '99+' : count.toString()
+          })
+        } else {
+          uni.removeTabBarBadge({
+            index: 3
+          })
+        }
       },
       
       // 鍔犺浇鐢ㄦ埛淇℃伅锛堜繚鐣欎互鍏煎涔嬪墠鐨勪唬鐮侊級
@@ -318,7 +353,7 @@
                 vehicleList: task.assignedVehicles || [],
                 startLocation: this.formatAddress(task.departureAddress || task.startLocation || '鏈缃�'),
                 endLocation: this.formatAddress(task.destinationAddress || task.endLocation || '鏈缃�'),
-                startTime: task.plannedStartTime ? this.formatDateTime(task.plannedStartTime) : '鏈缃�',
+                startTime: task.plannedStartTime ? formatDateTime(task.plannedStartTime, 'YYYY-MM-DD HH:mm') : '鏈缃�',
                 assignee: task.assigneeName || '鏈垎閰�',
                 taskNo: task.taskCode || '鏈煡缂栧彿',
                 status: this.convertStatus(task.taskStatus) // 杞崲鐘舵�佹牸寮忎互鍏煎鏃I
@@ -327,19 +362,6 @@
         }).catch(error => {
           this.loading = false
           console.error('鍔犺浇浠诲姟鍒楄〃澶辫触:', error)
-        })
-      },
-      
-      // 鏍煎紡鍖栨棩鏈熸椂闂�
-      formatDateTime(dateTime) {
-        if (!dateTime) return ''
-        const date = new Date(dateTime)
-        return date.toLocaleString('zh-CN', {
-          year: 'numeric',
-          month: '2-digit',
-          day: '2-digit',
-          hour: '2-digit',
-          minute: '2-digit'
         })
       },
       
@@ -383,69 +405,50 @@
         this.$tab.navigateTo(`/pages/task/detail?id=${task.taskId || task.id}`);
       },
       
-      // 鍒ゆ柇鎿嶄綔鎸夐挳鏄惁绂佺敤
-      isActionDisabled(task, action) {
-        // 鏍规嵁浠诲姟鐨勫疄闄呯姸鎬佸垽鏂�
-        const taskStatus = task.taskStatus
-        switch (action) {
-          case 'depart':
-            return taskStatus !== 'PENDING'
-          case 'arrive':
-            return taskStatus !== 'DEPARTING'
-          case 'return':
-            return taskStatus !== 'ARRIVED'
-          case 'settle':
-            return !['ARRIVED', 'RETURNING'].includes(taskStatus)
-          case 'complete':
-            return taskStatus !== 'RETURNING'
-          default:
-            return false
-        }
-      },
-      
       // 澶勭悊浠诲姟鎿嶄綔
       handleTaskAction(task, action) {
-        if (this.isActionDisabled(task, action)) {
-          return
-        }
-        
         switch (action) {
           case 'depart':
-            // 鍑哄彂鎿嶄綔 -> 鐘舵�佸彉涓哄嚭鍙戜腑
-            let departMessage = '纭畾瑕佸嚭鍙戝悧锛�'
-            if (task.taskType !== 'MAINTENANCE' && task.taskType !== 'FUEL') {
-              departMessage = '鍑哄彂鍘荤洰鐨勫湴锛岀‘璁わ紵'
-            }
-            this.$modal.confirm(departMessage).then(() => {
+            // 鍑哄彂 -> 鐘舵�佸彉涓哄嚭鍙戜腑
+            this.$modal.confirm('纭畾瑕佸嚭鍙戝悧锛�').then(() => {
               this.updateTaskStatus(task.taskId, 'DEPARTING', '浠诲姟宸插嚭鍙�')
-            }).catch(() => {})
-            break
+            }).catch(() => {});
+            break;
+            
+          case 'cancel':
+            // 鍙栨秷 -> 浜屾纭鍚庣姸鎬佸彉涓哄凡鍙栨秷
+            this.$modal.confirm('纭畾瑕佸彇娑堟浠诲姟鍚楋紵').then(() => {
+              this.updateTaskStatus(task.taskId, 'CANCELLED', '浠诲姟宸插彇娑�')
+            }).catch(() => {});
+            break;
             
           case 'arrive':
-            // 宸插埌杈炬搷浣� -> 鐘舵�佸彉涓哄凡鍒拌揪
-            this.$modal.confirm('宸茬粡鍒拌揪鐩殑鍦帮紝纭锛�').then(() => {
+            // 宸插埌杈� -> 鐘舵�佸彉涓哄凡鍒拌揪
+            this.$modal.confirm('纭宸插埌杈剧洰鐨勫湴锛�').then(() => {
               this.updateTaskStatus(task.taskId, 'ARRIVED', '宸插埌杈剧洰鐨勫湴')
-            }).catch(() => {})
-            break
+            }).catch(() => {});
+            break;
+            
+          case 'forceCancel':
+            // 寮哄埗缁撴潫 -> 鐘舵�佸彉涓哄凡鍙栨秷
+            this.$modal.confirm('纭畾瑕佸己鍒剁粨鏉熸浠诲姟鍚楋紵').then(() => {
+              this.updateTaskStatus(task.taskId, 'CANCELLED', '浠诲姟宸插己鍒剁粨鏉�')
+            }).catch(() => {});
+            break;
             
           case 'return':
-            // 杩旂▼鎿嶄綔 -> 鐘舵�佸彉涓鸿繑绋嬩腑
+            // 宸茶繑绋� -> 鐘舵�佸彉涓鸿繑绋嬩腑
             this.$modal.confirm('纭寮�濮嬭繑绋嬶紵').then(() => {
               this.updateTaskStatus(task.taskId, 'RETURNING', '宸插紑濮嬭繑绋�')
-            }).catch(() => {})
-            break
-            
-          case 'settle':
-            // 缁撶畻鎿嶄綔锛岃烦杞埌缁撶畻椤甸潰
-            this.$tab.navigateTo(`/pages/task/settlement?id=${task.taskId}`)
-            break
+            }).catch(() => {});
+            break;
             
           case 'complete':
-            // 宸插畬鎴愭搷浣� -> 鐘舵�佸彉涓哄凡瀹屾垚
-            this.$modal.confirm('浠诲姟鏄惁宸茬粡鍏ㄩ儴瀹屾垚锛岀‘璁わ紵').then(() => {
+            // 宸插畬鎴� -> 鐘舵�佸彉涓哄凡瀹屾垚
+            this.$modal.confirm('纭浠诲姟宸插畬鎴愶紵').then(() => {
               this.updateTaskStatus(task.taskId, 'COMPLETED', '浠诲姟宸插畬鎴�')
-            }).catch(() => {})
-            break
+            }).catch(() => {});
+            break;
         }
       },
       
@@ -511,6 +514,20 @@
         })
       },
       
+      // 鑾峰彇鐘舵�佹牱寮忕被
+      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 = {
@@ -536,13 +553,13 @@
           'MAINTENANCE': '缁翠慨淇濆吇',
           'FUEL': '鍔犳补',
           'OTHER': '鍏朵粬',
-          'EMERGENCY_TRANSFER': '鎬ユ晳杞繍',
+          'EMERGENCY_TRANSFER': '杞繍浠诲姟',
           'WELFARE': '绂忕杞�',
           // 鏃ф牸寮忥紙UI绫诲瀷锛�
           'maintenance': '缁翠慨淇濆吇',
           'refuel': '鍔犳补',
           'inspection': '宸℃',
-          'emergency': '鎬ユ晳杞繍',
+          'emergency': '杞繍浠诲姟',
           'welfare': '绂忕杞�'
         }
         return typeMap[type] || '鏈煡绫诲瀷'
@@ -594,19 +611,44 @@
       .user-details {
         flex: 1;
         
-        .user-name {
-          font-size: 36rpx;
-          font-weight: bold;
-          margin-bottom: 10rpx;
-          color: #333;
-        }
-        
-        .vehicle-info {
-          font-size: 28rpx;
-          color: #666;
+        .user-info-row {
           display: flex;
           align-items: center;
-          cursor: pointer;
+          flex-wrap: wrap;
+          margin-bottom: 12rpx;
+          
+          .user-name {
+            font-size: 32rpx;
+            font-weight: bold;
+            color: #333;
+          }
+          
+          .separator {
+            margin: 0 12rpx;
+            color: #ddd;
+            font-size: 28rpx;
+          }
+          
+          .branch-company {
+            font-size: 26rpx;
+            color: #666;
+            display: flex;
+            align-items: center;
+          }
+          
+          .vehicle-info {
+            font-size: 26rpx;
+            color: #007AFF;
+            display: flex;
+            align-items: center;
+          }
+        }
+        
+        .bind-vehicle-btn {
+          font-size: 26rpx;
+          color: #007AFF;
+          display: flex;
+          align-items: center;
           
           &:active {
             opacity: 0.7;
@@ -705,10 +747,90 @@
           padding: 30rpx;
           border-bottom: 1rpx solid #f0f0f0;
           
-          .task-title {
-            font-size: 32rpx;
-            font-weight: bold;
-            margin-bottom: 20rpx;
+          // 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵��
+          .task-header {
+            display: flex;
+            justify-content: space-between;
+            align-items: flex-start;
+            margin-bottom: 15rpx;
+            
+            .task-title {
+              flex: 1;
+              font-size: 32rpx;
+              font-weight: bold;
+              padding-right: 20rpx;
+              line-height: 1.4;
+            }
+            
+            .task-status {
+              padding: 8rpx 20rpx;
+              border-radius: 30rpx;
+              font-size: 24rpx;
+              white-space: nowrap;
+              flex-shrink: 0;
+              
+              // 寰呭鐞� - 姗欒壊
+              &.status-pending {
+                background-color: #fff3e0;
+                color: #ff9500;
+              }
+              
+              // 鍑哄彂涓� - 钃濊壊
+              &.status-departing {
+                background-color: #e3f2fd;
+                color: #007AFF;
+              }
+              
+              // 宸插埌杈� - 绱壊
+              &.status-arrived {
+                background-color: #f3e5f5;
+                color: #9c27b0;
+              }
+              
+              // 杩旂▼涓� - 闈掕壊
+              &.status-returning {
+                background-color: #e0f2f1;
+                color: #009688;
+              }
+              
+              // 宸插畬鎴� - 缁胯壊
+              &.status-completed {
+                background-color: #e8f5e9;
+                color: #34C759;
+              }
+              
+              // 宸插彇娑� - 鐏拌壊
+              &.status-cancelled {
+                background-color: #f5f5f5;
+                color: #999;
+              }
+              
+              // 澶勭悊涓� (鍏煎鏃ф暟鎹�) - 钃濊壊
+              &.status-in-progress {
+                background-color: #e3f2fd;
+                color: #007AFF;
+              }
+              
+              // 榛樿鏍峰紡
+              &.status-default {
+                background-color: #f5f5f5;
+                color: #666;
+              }
+            }
+          }
+          
+          // 浠诲姟缂栧彿鍗曠嫭涓�琛�
+          .task-code-row {
+            margin-bottom: 15rpx;
+            padding: 10rpx 0;
+            border-bottom: 1rpx dashed #e0e0e0;
+            
+            .task-code {
+              font-size: 28rpx;
+              color: #333;
+              font-weight: 500;
+              font-family: monospace;
+            }
           }
           
           .task-info {
@@ -759,6 +881,11 @@
               color: white;
             }
             
+            &.cancel {
+              background-color: #ff3b30;
+              color: white;
+            }
+            
             &.disabled {
               opacity: 0.5;
             }

--
Gitblit v1.9.1