| | |
| | | > |
| | | <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">{{ message.createTime }}</view> |
| | | </view> |
| | | </view> |
| | | |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { getMyMessages, markAsRead } from '@/api/message' |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | // 消息列表 |
| | | messages: [] |
| | | messages: [], |
| | | loading: false |
| | | } |
| | | }, |
| | | computed: { |
| | | // 按未读/已读排序,未读的在前面 |
| | | sortedMessages() { |
| | | return [...this.messages].sort((a, b) => { |
| | | if (a.read === b.read) { |
| | | if (a.isRead === b.isRead) { |
| | | // 相同状态按时间倒序 |
| | | return new Date(b.time) - new Date(a.time); |
| | | return new Date(b.createTime) - new Date(a.createTime); |
| | | } |
| | | // 未读的排在前面 |
| | | return a.read ? 1 : -1; |
| | | return a.isRead === '0' ? -1 : 1; |
| | | }); |
| | | } |
| | | }, |
| | | onLoad() { |
| | | this.loadMessages() |
| | | }, |
| | | onShow() { |
| | | // 每次显示页面时刷新消息 |
| | | this.loadMessages() |
| | | }, |
| | | 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.isRead === '0') { |
| | | await markAsRead(message.messageId) |
| | | message.isRead = '1' |
| | | } |
| | | |
| | | // 跳转到任务详情页面 |
| | | if (message.taskId) { |
| | | this.$tab.navigateTo(`/pages/task/detail?id=${message.taskId}`) |
| | | } else { |
| | | this.$modal.showToast('无法找到关联任务') |
| | | } |
| | | } catch (error) { |
| | | console.error('标记消息已读失败:', error) |
| | | // 即使标记失败,也允许跳转 |
| | | if (message.taskId) { |
| | | this.$tab.navigateTo(`/pages/task/detail?id=${message.taskId}`) |
| | | } |
| | | } |
| | | } |
| | | } |