|
@ -14,7 +14,6 @@ |
|
|
<view class="reminder-list"> |
|
|
<view class="reminder-list"> |
|
|
<!-- 空状态 --> |
|
|
<!-- 空状态 --> |
|
|
<view v-if="reminderList.length === 0 && !loading" class="empty-state"> |
|
|
<view v-if="reminderList.length === 0 && !loading" class="empty-state"> |
|
|
<text class="empty-icon">📭</text> |
|
|
|
|
|
<text class="empty-text">暂无消息提醒</text> |
|
|
<text class="empty-text">暂无消息提醒</text> |
|
|
</view> |
|
|
</view> |
|
|
|
|
|
|
|
@ -33,7 +32,7 @@ |
|
|
size="20" |
|
|
size="20" |
|
|
color="#08B3B3" |
|
|
color="#08B3B3" |
|
|
></u-icon> |
|
|
></u-icon> |
|
|
<view v-if="item.hasUnread" class="unread-dot"></view> |
|
|
<view v-if="item.redDot==1" class="unread-dot"></view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
|
|
|
|
|
@ -61,8 +60,7 @@ |
|
|
</template> |
|
|
</template> |
|
|
|
|
|
|
|
|
<script> |
|
|
<script> |
|
|
import { messageList } from "@/pages/api"; |
|
|
import { messageList, getMessageReminder } from "@/pages/api"; |
|
|
import { getReminderList, markReminderRead } from "@/common/api.js"; |
|
|
|
|
|
|
|
|
|
|
|
export default { |
|
|
export default { |
|
|
data() { |
|
|
data() { |
|
@ -73,7 +71,6 @@ export default { |
|
|
noMore: false, |
|
|
noMore: false, |
|
|
pageNum: 1, |
|
|
pageNum: 1, |
|
|
pageSize: 10, |
|
|
pageSize: 10, |
|
|
unreadCount: 0, |
|
|
|
|
|
reminderList: [], |
|
|
reminderList: [], |
|
|
}; |
|
|
}; |
|
|
}, |
|
|
}, |
|
@ -81,14 +78,9 @@ export default { |
|
|
this.loadReminderList(); |
|
|
this.loadReminderList(); |
|
|
}, |
|
|
}, |
|
|
onShow() { |
|
|
onShow() { |
|
|
// 页面显示时刷新数据 |
|
|
// 页面显示时刷新数据并更新底部TabBar小红点 |
|
|
this.refreshData(); |
|
|
this.refreshData(); |
|
|
}, |
|
|
this.updateTabBarDot(); |
|
|
computed: { |
|
|
|
|
|
// 计算未读消息数量 |
|
|
|
|
|
unreadCount() { |
|
|
|
|
|
return this.reminderList.filter((item) => item.hasUnread).length; |
|
|
|
|
|
}, |
|
|
|
|
|
}, |
|
|
}, |
|
|
methods: { |
|
|
methods: { |
|
|
onChange(name) { |
|
|
onChange(name) { |
|
@ -97,13 +89,28 @@ export default { |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
// 刷新数据 |
|
|
// 刷新数据 |
|
|
refreshData() { |
|
|
async refreshData() { |
|
|
this.pageNum = 1; |
|
|
this.pageNum = 1; |
|
|
this.noMore = false; |
|
|
this.noMore = false; |
|
|
this.loadReminderList(true); |
|
|
await this.loadReminderList(true); |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 获取并控制底部TabBar小红点(消息Tab索引为0) |
|
|
|
|
|
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) { |
|
|
async loadReminderList(isRefresh = false) { |
|
|
if (this.loading) return; |
|
|
if (this.loading) return; |
|
|
|
|
|
|
|
@ -118,7 +125,6 @@ export default { |
|
|
|
|
|
|
|
|
if (res.code === 200) { |
|
|
if (res.code === 200) { |
|
|
const data = res.data.records || []; |
|
|
const data = res.data.records || []; |
|
|
|
|
|
|
|
|
if (isRefresh) { |
|
|
if (isRefresh) { |
|
|
this.reminderList = data; |
|
|
this.reminderList = data; |
|
|
this.pageNum = 1; |
|
|
this.pageNum = 1; |
|
@ -136,6 +142,8 @@ export default { |
|
|
} finally { |
|
|
} finally { |
|
|
this.loading = false; |
|
|
this.loading = false; |
|
|
this.refreshing = false; |
|
|
this.refreshing = false; |
|
|
|
|
|
// 刷新底部TabBar红点显示 |
|
|
|
|
|
this.updateTabBarDot(); |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
@ -155,55 +163,12 @@ export default { |
|
|
await this.loadReminderList(); |
|
|
await this.loadReminderList(); |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
// 处理项目点击 |
|
|
// 处理项目点击(此处仅保留行为占位,消息不可跳转时不做操作) |
|
|
async handleItemClick(item) { |
|
|
async handleItemClick(item) { |
|
|
console.log("点击提醒项目:", 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) { |
|
|
formatTime(time) { |
|
|
const now = new Date(); |
|
|
const now = new Date(); |
|
|
const targetTime = new Date(time); |
|
|
const targetTime = new Date(time); |
|
|