From 5f2ee03958a1a16dc27195c76ea7cffb422c95d1 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期五, 19 十二月 2025 22:40:34 +0800
Subject: [PATCH] feat: 任务修改接口,删除一些不要的字段同步

---
 app/pages/message/index.vue |  227 ++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 163 insertions(+), 64 deletions(-)

diff --git a/app/pages/message/index.vue b/app/pages/message/index.vue
index 2aaa9e5..95e613f 100644
--- a/app/pages/message/index.vue
+++ b/app/pages/message/index.vue
@@ -2,6 +2,10 @@
   <view class="message-container">
     <view class="message-header">
       <view class="header-title">娑堟伅涓績</view>
+      <view class="subscribe-btn" v-if="!subscribed" @click="subscribeMessage">
+        <uni-icons type="bell" size="20" color="#007AFF"></uni-icons>
+        <text>璁㈤槄閫氱煡</text>
+      </view>
     </view>
     
     <scroll-view class="message-list-scroll" scroll-y="true">
@@ -10,16 +14,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,89 +37,166 @@
 </template>
 
 <script>
+  import { getMyMessages, markAsRead } from '@/api/message'
+  import { formatDateTime } from '@/utils/common'
+  import subscribeManager from '@/utils/subscribe'
+  
   export default {
     data() {
       return {
         // 娑堟伅鍒楄〃
-        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: [],
+        loading: false,
+        subscribed: 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()
+      // 鑷姩璁㈤槄锛堝鏋滄湭璁㈤槄鍒欐樉绀虹‘璁ゅ脊绐楋級
+      this.autoSubscribeOnLaunch()
+    },
+    onShow() {
+      // 姣忔鏄剧ず椤甸潰鏃跺埛鏂版秷鎭�
+      this.loadMessages()
+      // 鏇存柊TabBar寰芥爣
+      this.updateTabBarBadge()
+    },
+    onPullDownRefresh() {
+      this.loadMessages().then(() => {
+        uni.stopPullDownRefresh()
+      })
+    },
     methods: {
+      // 鑷姩璁㈤槄锛堥〉闈㈠姞杞芥椂璋冪敤锛�
+      autoSubscribeOnLaunch() {
+        subscribeManager.autoSubscribe()
+          .then((result) => {
+            if (result.skipped) {
+              console.log('鐢ㄦ埛宸茶闃咃紝鏃犻渶閲嶅璁㈤槄')
+            } else if (result.success) {
+              console.log('鑷姩璁㈤槄鎴愬姛')
+            }
+          })
+          .catch((error) => {
+            console.log('鑷姩璁㈤槄鍙栨秷鎴栧け璐ワ細', error)
+          })
+      },
+
+      // 鍔犺浇娑堟伅鍒楄〃
+      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(`/pagesTask/detail?id=${message.taskId}`)
+          } else {
+            this.$modal.showToast('鏃犳硶鎵惧埌鍏宠仈浠诲姟')
+          }
+        } catch (error) {
+          console.error('鏍囪娑堟伅宸茶澶辫触锛�', error)
+          // 鍗充娇鏍囪澶辫触锛屼篃鍏佽璺宠浆
+          if (message && message.taskId) {
+            this.$tab.navigateTo(`/pagesTask/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')
+      },
+      
+      // 璁㈤槄浠诲姟閫氱煡
+      subscribeMessage() {
+        subscribeManager.subscribeWithConfirm()
+          .then((result) => {
+            if (result.success) {
+              uni.showToast({
+                title: '璁㈤槄鎴愬姛锛屾偍灏嗘敹鍒颁换鍔¢�氱煡',
+                icon: 'success',
+                duration: 2000
+              })
+            }
+          })
+          .catch((error) => {
+            console.log('璁㈤槄澶辫触锛�', error)
+          })
       }
     }
   }
@@ -158,6 +239,24 @@
       font-size: 36rpx;
       font-weight: bold;
     }
+    
+    .subscribe-btn {
+      display: flex;
+      align-items: center;
+      padding: 10rpx 20rpx;
+      background-color: #f0f9ff;
+      border-radius: 30rpx;
+      
+      text {
+        margin-left: 8rpx;
+        font-size: 26rpx;
+        color: #007AFF;
+      }
+      
+      &:active {
+        opacity: 0.7;
+      }
+    }
   }
   
   .message-list-scroll {

--
Gitblit v1.9.1