From 2c86a8bd60deed0dd0e044bad6fb83f75d19a332 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 26 十月 2025 15:05:50 +0800
Subject: [PATCH] Merge branch 'feature-task'
---
app/pages/message/index.vue | 271 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 271 insertions(+), 0 deletions(-)
diff --git a/app/pages/message/index.vue b/app/pages/message/index.vue
new file mode 100644
index 0000000..58bca52
--- /dev/null
+++ b/app/pages/message/index.vue
@@ -0,0 +1,271 @@
+<template>
+ <view class="message-container">
+ <view class="message-header">
+ <view class="header-title">娑堟伅涓績</view>
+ </view>
+
+ <scroll-view class="message-list-scroll" scroll-y="true">
+ <view class="message-list">
+ <!-- 鏈娑堟伅鍦ㄥ墠 -->
+ <view
+ class="message-item"
+ v-for="message in sortedMessages"
+ :key="message.messageId"
+ @click="viewMessageDetail(message)"
+ >
+ <view class="message-main">
+ <view class="message-title">
+ <text class="title-text">{{ getMessageTypeText(message.messageType) }}</text>
+ <view class="unread-dot" v-if="message.isRead === '0'"></view>
+ </view>
+ <view class="message-content">{{ message.messageContent }}</view>
+ <view class="message-time">{{ message.createTime }}</view>
+ </view>
+ </view>
+
+ <view class="no-data" v-if="sortedMessages.length === 0">
+ <uni-icons type="info" size="40" color="#ccc"></uni-icons>
+ <text>鏆傛棤娑堟伅</text>
+ </view>
+ </view>
+ </scroll-view>
+ </view>
+</template>
+
+<script>
+ import { getMyMessages, markAsRead } from '@/api/message'
+
+ export default {
+ data() {
+ return {
+ // 娑堟伅鍒楄〃
+ messages: [],
+ loading: false
+ }
+ },
+ computed: {
+ // 鎸夋湭璇�/宸茶鎺掑簭锛屾湭璇荤殑鍦ㄥ墠闈�
+ sortedMessages() {
+ return [...this.messages].sort((a, b) => {
+ if (a.isRead === b.isRead) {
+ // 鐩稿悓鐘舵�佹寜鏃堕棿鍊掑簭
+ return new Date(b.createTime) - new Date(a.createTime);
+ }
+ // 鏈鐨勬帓鍦ㄥ墠闈�
+ 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': '鐘舵�佸彉鏇�',
+ 'ASSIGN': '浠诲姟鍒嗛厤'
+ }
+ return typeMap[type] || '绯荤粺娑堟伅';
+ },
+
+ // 鏌ョ湅娑堟伅璇︽儏锛堣烦杞埌浠诲姟璇︽儏锛�
+ 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
+ })
+ }
+ }
+ }
+ }
+</script>
+
+<style lang="scss">
+ .message-container {
+ padding: 20rpx;
+ background-color: #f5f5f5;
+ height: 100vh;
+ display: flex;
+ flex-direction: column;
+ // 闅愯棌婊氬姩鏉′絾淇濇寔婊氬姩鍔熻兘
+ ::-webkit-scrollbar {
+ display: none;
+ width: 0 !important;
+ height: 0 !important;
+ background: transparent;
+ }
+
+ // Firefox婊氬姩鏉¢殣钘�
+ * {
+ scrollbar-width: none; /* Firefox */
+ }
+
+ // IE/Edge婊氬姩鏉¢殣钘�
+ * {
+ -ms-overflow-style: none; /* IE 10+ */
+ }
+ }
+
+ .message-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 20rpx 0;
+ flex-shrink: 0; // 闃叉鏀剁缉
+
+ .header-title {
+ font-size: 36rpx;
+ font-weight: bold;
+ }
+ }
+
+ .message-list-scroll {
+ flex: 1;
+ // 闅愯棌婊氬姩鏉′絾淇濇寔婊氬姩鍔熻兘
+ ::-webkit-scrollbar {
+ display: none;
+ width: 0 !important;
+ height: 0 !important;
+ background: transparent;
+ }
+
+ // Firefox婊氬姩鏉¢殣钘�
+ * {
+ scrollbar-width: none; /* Firefox */
+ }
+
+ // IE/Edge婊氬姩鏉¢殣钘�
+ * {
+ -ms-overflow-style: none; /* IE 10+ */
+ }
+ }
+
+ .message-list {
+ .message-item {
+ background-color: white;
+ border-radius: 15rpx;
+ margin-bottom: 20rpx;
+ padding: 30rpx;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
+
+ .message-main {
+ .message-title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 20rpx;
+
+ .title-text {
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #333;
+ }
+
+ .unread-dot {
+ width: 16rpx;
+ height: 16rpx;
+ border-radius: 50%;
+ background-color: #ff4d4f;
+ }
+ }
+
+ .message-content {
+ font-size: 28rpx;
+ color: #666;
+ margin-bottom: 20rpx;
+ line-height: 1.5;
+ }
+
+ .message-time {
+ font-size: 24rpx;
+ color: #999;
+ text-align: right;
+ }
+ }
+ }
+
+ .no-data {
+ text-align: center;
+ padding: 100rpx 0;
+ color: #999;
+
+ text {
+ display: block;
+ margin-top: 20rpx;
+ }
+ }
+ }
+</style>
\ No newline at end of file
--
Gitblit v1.9.1