Message.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <script lang="ts" setup>
  2. import { formatDate } from '@/utils/formatTime'
  3. import * as NotifyMessageApi from '@/api/system/notify/message'
  4. defineOptions({ name: 'Message' })
  5. const { push } = useRouter()
  6. const activeName = ref('notice')
  7. const unreadCount = ref(0) // 未读消息数量
  8. const list = ref<any[]>([]) // 消息列表
  9. // 获得消息列表
  10. const getList = async () => {
  11. list.value = await NotifyMessageApi.getUnreadNotifyMessageList()
  12. // 强制设置 unreadCount 为 0,避免小红点因为轮询太慢,不消除
  13. unreadCount.value = 0
  14. }
  15. // 获得未读消息数
  16. const getUnreadCount = async () => {
  17. NotifyMessageApi.getUnreadNotifyMessageCount().then((data) => {
  18. unreadCount.value = data
  19. })
  20. }
  21. // 跳转我的站内信
  22. const goMyList = () => {
  23. push({
  24. name: 'MyNotifyMessage'
  25. })
  26. }
  27. // ========== 初始化 =========
  28. onMounted(() => {
  29. // 首次加载小红点
  30. getUnreadCount()
  31. // 轮询刷新小红点
  32. setInterval(
  33. () => {
  34. getUnreadCount()
  35. },
  36. 1000 * 60 * 2
  37. )
  38. })
  39. </script>
  40. <template>
  41. <div class="message">
  42. <!-- <ElPopover :width="400" placement="bottom" trigger="click">-->
  43. <!-- <template #reference>-->
  44. <!-- <ElBadge :is-dot="unreadCount > 0" class="item">-->
  45. <!-- <Icon :size="18" class="cursor-pointer" icon="ep:bell" @click="getList" />-->
  46. <!-- </ElBadge>-->
  47. <!-- </template>-->
  48. <!-- <ElTabs v-model="activeName">-->
  49. <!-- <ElTabPane label="我的站内信" name="notice">-->
  50. <!-- <el-scrollbar class="message-list">-->
  51. <!-- <template v-for="item in list" :key="item.id">-->
  52. <!-- <div class="message-item">-->
  53. <!-- <img alt="" class="message-icon" src="@/assets/imgs/avatar.gif" />-->
  54. <!-- <div class="message-content">-->
  55. <!-- <span class="message-title">-->
  56. <!-- {{ item.templateNickname }}:{{ item.templateContent }}-->
  57. <!-- </span>-->
  58. <!-- <span class="message-date">-->
  59. <!-- {{ formatDate(item.createTime) }}-->
  60. <!-- </span>-->
  61. <!-- </div>-->
  62. <!-- </div>-->
  63. <!-- </template>-->
  64. <!-- </el-scrollbar>-->
  65. <!-- </ElTabPane>-->
  66. <!-- </ElTabs>-->
  67. <!-- &lt;!&ndash; 更多 &ndash;&gt;-->
  68. <!-- <div style="margin-top: 10px; text-align: right">-->
  69. <!-- <XButton preIcon="ep:view" title="查看全部" type="primary" @click="goMyList" />-->
  70. <!-- </div>-->
  71. <!-- </ElPopover>-->
  72. </div>
  73. </template>
  74. <style lang="scss" scoped>
  75. .message-empty {
  76. display: flex;
  77. flex-direction: column;
  78. align-items: center;
  79. justify-content: center;
  80. height: 260px;
  81. line-height: 45px;
  82. }
  83. .message-list {
  84. display: flex;
  85. height: 400px;
  86. flex-direction: column;
  87. .message-item {
  88. display: flex;
  89. align-items: center;
  90. padding: 20px 0;
  91. border-bottom: 1px solid var(--el-border-color-light);
  92. &:last-child {
  93. border: none;
  94. }
  95. .message-icon {
  96. width: 40px;
  97. height: 40px;
  98. margin: 0 20px 0 5px;
  99. }
  100. .message-content {
  101. display: flex;
  102. flex-direction: column;
  103. .message-title {
  104. margin-bottom: 5px;
  105. }
  106. .message-date {
  107. font-size: 12px;
  108. color: var(--el-text-color-secondary);
  109. }
  110. }
  111. }
  112. }
  113. </style>