From 2576c71ce6a7d0465fcbc5ebc7507da9472c41a3 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期三, 05 十一月 2025 23:41:12 +0800
Subject: [PATCH] feat: 创建转运任务

---
 app/pages/message/index.vue |  128 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 105 insertions(+), 23 deletions(-)

diff --git a/app/pages/message/index.vue b/app/pages/message/index.vue
index 113b7f9..a35c92c 100644
--- a/app/pages/message/index.vue
+++ b/app/pages/message/index.vue
@@ -10,16 +10,16 @@
         <view 
           class="message-item" 
           v-for="message in sortedMessages" 
-          :key="message.id"
+          :key="message.messageId"
           @click="viewMessageDetail(message)"
         >
           <view class="message-main">
             <view class="message-title">
-              <text class="title-text">{{ getMessageTypeText(message.type) }}</text>
-              <view class="unread-dot" v-if="!message.read"></view>
+              <text class="title-text">{{ getMessageTypeText(message.messageType) }}</text>
+              <view class="unread-dot" v-if="message.isRead === '0'"></view>
             </view>
-            <view class="message-content">{{ message.content }}</view>
-            <view class="message-time">{{ message.time }}</view>
+            <view class="message-content">{{ message.messageContent }}</view>
+            <view class="message-time">{{ formatMessageTime(message.createTime) }}</view>
           </view>
         </view>
         
@@ -33,48 +33,130 @@
 </template>
 
 <script>
+  import { getMyMessages, markAsRead } from '@/api/message'
+  import { formatDateTime } from '@/utils/common'
+  
   export default {
     data() {
       return {
         // 娑堟伅鍒楄〃
-        messages: []
+        messages: [],
+        loading: false
       }
     },
     computed: {
       // 鎸夋湭璇�/宸茶鎺掑簭锛屾湭璇荤殑鍦ㄥ墠闈�
       sortedMessages() {
         return [...this.messages].sort((a, b) => {
-          if (a.read === b.read) {
-            // 鐩稿悓鐘舵�佹寜鏃堕棿鍊掑簭
-            return new Date(b.time) - new Date(a.time);
+          if (a.isRead === b.isRead) {
+            // 鐩稿悓鐘舵�佹寜鏃堕棿鍊掑簭 - 浣跨敤鍏煎iOS鐨勬棩鏈熸牸寮�
+            const timeA = a.createTime ? new Date(a.createTime.replace(/-/g, '/')) : new Date(0)
+            const timeB = b.createTime ? new Date(b.createTime.replace(/-/g, '/')) : new Date(0)
+            return timeB - timeA
           }
           // 鏈鐨勬帓鍦ㄥ墠闈�
-          return a.read ? 1 : -1;
-        });
+          return a.isRead === '0' ? -1 : 1
+        })
       }
     },
+    onLoad() {
+      this.loadMessages()
+    },
+    onShow() {
+      // 姣忔鏄剧ず椤甸潰鏃跺埛鏂版秷鎭�
+      this.loadMessages()
+      // 鏇存柊TabBar寰芥爣
+      this.updateTabBarBadge()
+    },
+    onPullDownRefresh() {
+      this.loadMessages().then(() => {
+        uni.stopPullDownRefresh()
+      })
+    },
     methods: {
+      // 鍔犺浇娑堟伅鍒楄〃
+      async loadMessages() {
+        try {
+          this.loading = true
+          const response = await getMyMessages()
+          if (response.code === 200) {
+            this.messages = response.data || []
+          } else {
+            this.$modal.showToast(response.msg || '鍔犺浇娑堟伅澶辫触')
+          }
+        } catch (error) {
+          console.error('鍔犺浇娑堟伅澶辫触锛�', error)
+          this.$modal.showToast('鍔犺浇娑堟伅澶辫触')
+        } finally {
+          this.loading = false
+        }
+      },
+      
       // 鑾峰彇娑堟伅绫诲瀷鏂囨湰
       getMessageTypeText(type) {
         const typeMap = {
-          'create': '鍒涘缓鎴愬姛',
-          'push': '浠诲姟鎺ㄩ��',
-          'status': '浠诲姟鐘舵��'
+          'CREATE': '鍒涘缓鎴愬姛',
+          'PUSH': '浠诲姟鎺ㄩ��',
+          'STATUS': '鐘舵�佸彉鏇�',
+          'ASSIGN': '浠诲姟鍒嗛厤'
         }
         return typeMap[type] || '绯荤粺娑堟伅';
       },
       
       // 鏌ョ湅娑堟伅璇︽儏锛堣烦杞埌浠诲姟璇︽儏锛�
-      viewMessageDetail(message) {
-        // 鏍囪涓哄凡璇�
-        message.read = true;
-        
-        // 璺宠浆鍒颁换鍔¤鎯呴〉闈�
-        if (message.taskId) {
-          this.$tab.navigateTo(`/pages/task/detail?id=${message.taskId}`);
-        } else {
-          this.$modal.showToast('鏃犳硶鎵惧埌鍏宠仈浠诲姟');
+      async viewMessageDetail(message) {
+        try {
+          // 鏍¢獙娑堟伅瀵硅薄
+          if (!message || !message.messageId) {
+            console.error('娑堟伅鏁版嵁寮傚父锛�', message)
+            this.$modal.showToast('娑堟伅鏁版嵁寮傚父')
+            return
+          }
+          
+          // 鏍囪涓哄凡璇�
+          if (message.isRead === '0') {
+            await markAsRead(message.messageId)
+            message.isRead = '1'
+            // 鏇存柊寰芥爣
+            this.updateTabBarBadge()
+          }
+          
+          // 璺宠浆鍒颁换鍔¤鎯呴〉闈�
+          if (message.taskId) {
+            this.$tab.navigateTo(`/pages/task/detail?id=${message.taskId}`)
+          } else {
+            this.$modal.showToast('鏃犳硶鎵惧埌鍏宠仈浠诲姟')
+          }
+        } catch (error) {
+          console.error('鏍囪娑堟伅宸茶澶辫触锛�', error)
+          // 鍗充娇鏍囪澶辫触锛屼篃鍏佽璺宠浆
+          if (message && message.taskId) {
+            this.$tab.navigateTo(`/pages/task/detail?id=${message.taskId}`)
+          }
         }
+      },
+      
+      // 鏇存柊TabBar寰芥爣
+      updateTabBarBadge() {
+        const unreadCount = this.messages.filter(msg => msg.isRead === '0').length
+        console.log('鏈娑堟伅鏁伴噺:', unreadCount)
+        
+        if (unreadCount > 0) {
+          uni.setTabBarBadge({
+            index: 3, // 娑堟伅椤甸潰鍦╰abBar涓殑绱㈠紩
+            text: unreadCount > 99 ? '99+' : unreadCount.toString()
+          })
+        } else {
+          uni.removeTabBarBadge({
+            index: 3
+          })
+        }
+      },
+      
+      // 鏍煎紡鍖栨秷鎭椂闂存樉绀�
+      formatMessageTime(dateTime) {
+        if (!dateTime) return ''
+        return formatDateTime(dateTime, 'MM-DD HH:mm')
       }
     }
   }

--
Gitblit v1.9.1