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