|
@@ -12,8 +12,9 @@ const list = ref<any[]>([]) // 消息列表
|
|
|
// 获得消息列表
|
|
|
const getList = async () => {
|
|
|
list.value = await NotifyMessageApi.getUnreadNotifyMessageList()
|
|
|
+
|
|
|
// 强制设置 unreadCount 为 0,避免小红点因为轮询太慢,不消除
|
|
|
- unreadCount.value = 0
|
|
|
+ // unreadCount.value = 0
|
|
|
}
|
|
|
|
|
|
// 获得未读消息数
|
|
@@ -23,6 +24,14 @@ const getUnreadCount = async () => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+// 标记为已读
|
|
|
+const handleRead = async (item) => {
|
|
|
+ if (item.readStatus) return
|
|
|
+ await NotifyMessageApi.updateNotifyMessageRead(item.id)
|
|
|
+ await getUnreadCount()
|
|
|
+ await getList()
|
|
|
+}
|
|
|
+
|
|
|
// 跳转我的站内信
|
|
|
const goMyList = () => {
|
|
|
push({
|
|
@@ -39,7 +48,7 @@ onMounted(() => {
|
|
|
() => {
|
|
|
getUnreadCount()
|
|
|
},
|
|
|
- 1000 * 60 * 2
|
|
|
+ 1000 * 60 * 2 // 2 分钟
|
|
|
)
|
|
|
})
|
|
|
</script>
|
|
@@ -47,36 +56,39 @@ onMounted(() => {
|
|
|
<div class="message">
|
|
|
<ElPopover :width="400" placement="bottom" trigger="click">
|
|
|
<template #reference>
|
|
|
- <ElBadge :is-dot="unreadCount > 0" class="item">
|
|
|
+ <ElBadge :value="unreadCount" :show-zero="false" :max="99" class="item">
|
|
|
<Icon :size="18" class="cursor-pointer" icon="ep:bell" @click="getList" />
|
|
|
</ElBadge>
|
|
|
</template>
|
|
|
<ElTabs v-model="activeName">
|
|
|
- <ElTabPane label="我的站内信" name="notice">
|
|
|
- <el-scrollbar class="message-list">
|
|
|
+ <ElTabPane label="通知" name="notice">
|
|
|
+ <el-scrollbar v-if="list.length > 0" class="message-list">
|
|
|
<template v-for="item in list" :key="item.id">
|
|
|
<div class="message-item">
|
|
|
- <img alt="" class="message-icon" src="@/assets/imgs/avatar.gif" />
|
|
|
+ <img alt="" class="message-icon" src="https://minio.menduner.com/dev/1e6893918ef378ca280360078dfe74ade10b27101c89865261824b46de7d34a6.png" />
|
|
|
<div class="message-content">
|
|
|
- <span class="message-title">
|
|
|
+ <div class="message-title">
|
|
|
{{ item.templateNickname }}:{{ item.templateContent }}
|
|
|
- </span>
|
|
|
- <span class="message-date">
|
|
|
- {{ formatDate(item.createTime) }}
|
|
|
- </span>
|
|
|
+ </div>
|
|
|
+ <div class="flex justify-between items-center">
|
|
|
+ <span class="message-date">{{ formatDate(item.createTime) }}</span>
|
|
|
+ <el-button link type="primary" @click="handleRead(item)"><Icon icon="ep:check" class="mr-5px" /> 标记为已读</el-button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-scrollbar>
|
|
|
+ <el-empty v-else description="暂无消息" />
|
|
|
</ElTabPane>
|
|
|
</ElTabs>
|
|
|
<!-- 更多 -->
|
|
|
- <div style="margin-top: 10px; text-align: right">
|
|
|
+ <div class="text-right m-t-10px">
|
|
|
<XButton preIcon="ep:view" title="查看全部" type="primary" @click="goMyList" />
|
|
|
</div>
|
|
|
</ElPopover>
|
|
|
</div>
|
|
|
</template>
|
|
|
+
|
|
|
<style lang="scss" scoped>
|
|
|
.message-empty {
|
|
|
display: flex;
|
|
@@ -95,7 +107,7 @@ onMounted(() => {
|
|
|
.message-item {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- padding: 20px 0;
|
|
|
+ padding: 15px 0;
|
|
|
border-bottom: 1px solid var(--el-border-color-light);
|
|
|
|
|
|
&:last-child {
|
|
@@ -103,14 +115,14 @@ onMounted(() => {
|
|
|
}
|
|
|
|
|
|
.message-icon {
|
|
|
- width: 40px;
|
|
|
- height: 40px;
|
|
|
+ width: 50px;
|
|
|
+ height: 50px;
|
|
|
margin: 0 20px 0 5px;
|
|
|
}
|
|
|
|
|
|
.message-content {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
+ // display: flex;
|
|
|
+ // flex-direction: column;
|
|
|
|
|
|
.message-title {
|
|
|
margin-bottom: 5px;
|