|  | @@ -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;
 |