120 lines
3.2 KiB
JavaScript
120 lines
3.2 KiB
JavaScript
// pages/message/index.js
|
|
import { fetchMessageList, messageSetRead } from '../../../services/message/fetchMessage';
|
|
|
|
// 消息类型 tab:与后端 message_type 对齐(''=全部)
|
|
const TYPE_TABS = [
|
|
{ key: '', label: '全部' },
|
|
{ key: '0', label: '系统消息' },
|
|
{ key: '1', label: '公告消息' },
|
|
{ key: '2', label: '需求消息' },
|
|
];
|
|
|
|
Page({
|
|
data: {
|
|
tabs: TYPE_TABS,
|
|
currentType: '', //当前筛选的消息类型:''=全部
|
|
currentTabIndex: 0,
|
|
unreadMap: { '0': 0, '1': 0, '2': 0 }, //分类未读数
|
|
totalUnread: 0, //总未读数
|
|
list: [],
|
|
page: 1,
|
|
pageSize: 10,
|
|
unreadCount: 0,
|
|
hasMore: true,
|
|
loading: false
|
|
},
|
|
|
|
onLoad() {
|
|
this.loadList(true);
|
|
},
|
|
|
|
loadList(refresh = false) {
|
|
let { pageSize, list, currentType } = this.data;
|
|
const page = refresh ? 1 : this.data.page;
|
|
|
|
let params = {
|
|
page: page,
|
|
pageSize: pageSize,
|
|
};
|
|
//全部时不传 message_type,由后端返回全类型
|
|
if (currentType !== '') {
|
|
params.message_type = currentType;
|
|
}
|
|
|
|
fetchMessageList(params).then((res) => {
|
|
let newList = res.data.data;
|
|
let hasMore = res.data.current_page < res.data.last_page;
|
|
let unreadMap = res.data.unread_map || { '0': 0, '1': 0, '2': 0 };
|
|
//直接用后端统计的全量未读总数(含所有类型),
|
|
//不再由前端累加 0/1/2,避免 message_type 超出这三个值时漏算
|
|
let totalUnread = res.data.unread_total !== undefined && res.data.unread_total !== null
|
|
? Number(res.data.unread_total) || 0
|
|
: Number(unreadMap['0'] || 0) + Number(unreadMap['1'] || 0) + Number(unreadMap['2'] || 0);
|
|
this.setData({
|
|
list: refresh ? newList : list.concat(newList),
|
|
page: page + 1,
|
|
unreadCount: res.data.unread_count,
|
|
unreadMap: unreadMap,
|
|
totalUnread: totalUnread,
|
|
hasMore: hasMore,
|
|
loading: false
|
|
});
|
|
//同步底部tabbar红点
|
|
this.syncTabBarUnread(totalUnread);
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 同步底部tabbar消息红点
|
|
* @param {number} count 总未读数
|
|
*/
|
|
syncTabBarUnread(count) {
|
|
const tabBar = typeof this.getTabBar === 'function' && this.getTabBar();
|
|
if (tabBar && typeof tabBar.setUnread === 'function') {
|
|
tabBar.setUnread(count);
|
|
}
|
|
},
|
|
|
|
//切换消息类型tab
|
|
onTabsChange(e) {
|
|
const index = Number(e.detail.value);
|
|
const tab = this.data.tabs[index] || this.data.tabs[0];
|
|
this.setData({
|
|
currentTabIndex: index,
|
|
currentType: tab.key
|
|
});
|
|
this.loadList(true);
|
|
},
|
|
|
|
// 点击消息进入详情页(关闭交给小程序的返回:左上角/右滑手势/物理返回键)
|
|
onMessageTap(e) {
|
|
const id = e.currentTarget.dataset.id;
|
|
wx.navigateTo({
|
|
url: `/pages/message/detail/index?id=${id}`
|
|
});
|
|
},
|
|
|
|
onPullDownRefresh() {
|
|
this.loadList(true);
|
|
},
|
|
|
|
onReachBottom() {
|
|
if (this.data.hasMore) {
|
|
this.loadList();
|
|
}
|
|
},
|
|
|
|
onClearUnreadTap() {
|
|
messageSetRead({ isAll: 1 }).then(() => {
|
|
wx.showToast({ title: '全部已读', icon: 'success' });
|
|
this.loadList(true);
|
|
});
|
|
},
|
|
|
|
onShow() {
|
|
this.loadList(true);
|
|
},
|
|
|
|
onShareAppMessage() { }
|
|
});
|