Browse Source

未读提醒

815
wangyx 4 days ago
parent
commit
c39c1fe6fe
  1. 15
      App.vue
  2. 7
      pages/api.js
  3. 87
      pages/tabBar/msg/index.vue

15
App.vue

@ -1,4 +1,5 @@
<script>
import { getMessageReminder } from '@/pages/api'
export default {
onLaunch: function() {
console.log('App Launch');
@ -6,6 +7,20 @@
},
onShow: function() {
console.log('App Show')
// TabBar0
// tabBar
setTimeout(async () => {
try {
const res = await getMessageReminder()
if (res && res.code === 200 && Number(res.data) > 0) {
uni.showTabBarRedDot({ index: 0 })
} else {
uni.hideTabBarRedDot({ index: 0 })
}
} catch (e) {
console.warn('App onShow 获取消息提醒失败', e)
}
}, 0)
},
onHide: function() {
console.log('App Hide')

7
pages/api.js

@ -279,3 +279,10 @@ export function messageList(query) {
params: query,
});
}
// 获取消息提醒小红点
export function getMessageReminder() {
return request({
url: "/message/getRemindQuota",
method: "get",
});
}

87
pages/tabBar/msg/index.vue

@ -14,7 +14,6 @@
<view class="reminder-list">
<!-- 空状态 -->
<view v-if="reminderList.length === 0 && !loading" class="empty-state">
<text class="empty-icon">📭</text>
<text class="empty-text">暂无消息提醒</text>
</view>
@ -33,7 +32,7 @@
size="20"
color="#08B3B3"
></u-icon>
<view v-if="item.hasUnread" class="unread-dot"></view>
<view v-if="item.redDot==1" class="unread-dot"></view>
</view>
</view>
@ -61,8 +60,7 @@
</template>
<script>
import { messageList } from "@/pages/api";
import { getReminderList, markReminderRead } from "@/common/api.js";
import { messageList, getMessageReminder } from "@/pages/api";
export default {
data() {
@ -73,7 +71,6 @@ export default {
noMore: false,
pageNum: 1,
pageSize: 10,
unreadCount: 0,
reminderList: [],
};
},
@ -81,14 +78,9 @@ export default {
this.loadReminderList();
},
onShow() {
//
// TabBar
this.refreshData();
},
computed: {
//
unreadCount() {
return this.reminderList.filter((item) => item.hasUnread).length;
},
this.updateTabBarDot();
},
methods: {
onChange(name) {
@ -97,13 +89,28 @@ export default {
},
//
refreshData() {
async refreshData() {
this.pageNum = 1;
this.noMore = false;
this.loadReminderList(true);
await this.loadReminderList(true);
},
// TabBarTab0
async updateTabBarDot() {
try {
const res = await getMessageReminder();
if (res && res.code === 200 && Number(res.data) > 0) {
uni.showTabBarRedDot({ index: 0 });
} else {
uni.hideTabBarRedDot({ index: 0 });
}
} catch (e) {
//
console.warn("获取消息提醒失败", e);
}
},
//
//
async loadReminderList(isRefresh = false) {
if (this.loading) return;
@ -118,7 +125,6 @@ export default {
if (res.code === 200) {
const data = res.data.records || [];
if (isRefresh) {
this.reminderList = data;
this.pageNum = 1;
@ -136,6 +142,8 @@ export default {
} finally {
this.loading = false;
this.refreshing = false;
// TabBar
this.updateTabBarDot();
}
},
@ -155,55 +163,12 @@ export default {
await this.loadReminderList();
},
//
//
async handleItemClick(item) {
console.log("点击提醒项目:", item);
try {
// API
if (item.hasUnread) {
await markReminderRead(item.id);
item.hasUnread = false;
}
} catch (error) {
console.error("标记已读失败:", error);
// 使API
item.hasUnread = false;
}
//
switch (item.type) {
case "appointment":
uni.navigateTo({
url: "/pagesA/bsPage/bsHandle",
});
break;
case "feedback":
uni.navigateTo({
url: "/pagesA/bxPage/bxHandle",
});
break;
case "checkout":
uni.navigateTo({
url: "/pagesA/checkout/list",
});
break;
case "release":
uni.navigateTo({
url: "/pagesA/release/list",
});
break;
case "water":
uni.navigateTo({
url: "/pagesA/sdPage/sfReport",
});
break;
default:
break;
}
},
//
//
formatTime(time) {
const now = new Date();
const targetTime = new Date(time);

Loading…
Cancel
Save