Commit 91dd4a32b1aa7b93252ccbbce12bfaf652882b76

Authored by YunaiV
1 parent 8cdae12b

站内信模块:vue3 站内信弹板

yudao-ui-admin-vue3/src/api/system/notify/message/index.ts
... ... @@ -31,3 +31,38 @@ export const getNotifyMessagePageApi = async (params: NotifyMessagePageReqVO) =>
31 31 export const getNotifyMessageApi = async (id: number) => {
32 32 return await request.get({ url: '/system/notify-message/get?id=' + id })
33 33 }
  34 +
  35 +// 获得我的站内信分页
  36 +// export function getMyNotifyMessagePage(query) {
  37 +// return request({
  38 +// url: '/system/notify-message/my-page',
  39 +// method: 'get',
  40 +// params: query
  41 +// })
  42 +// }
  43 +
  44 +// 批量标记已读
  45 +// export function updateNotifyMessageRead(ids) {
  46 +// return request({
  47 +// url: '/system/notify-message/update-read?' + qs.stringify({ids: ids}, { indices: false }),
  48 +// method: 'put'
  49 +// })
  50 +// }
  51 +
  52 +// 标记所有站内信为已读
  53 +// export function updateAllNotifyMessageRead() {
  54 +// return request({
  55 +// url: '/system/notify-message/update-all-read',
  56 +// method: 'put'
  57 +// })
  58 +// }
  59 +
  60 +// 获取当前用户的最新站内信列表
  61 +export const getUnreadNotifyMessageListApi = async () => {
  62 + return await request.get({ url: '/system/notify-message/get-unread-list' })
  63 +}
  64 +
  65 +// 获得当前用户的未读站内信数量
  66 +export const getUnreadNotifyMessageCountApi = async () => {
  67 + return await request.get({ url: '/system/notify-message/get-unread-count' })
  68 +}
... ...
yudao-ui-admin-vue3/src/layout/components/Message/src/Message.vue
1 1 <script setup lang="ts">
  2 +import dayjs from 'dayjs'
  3 +import * as NotifyMessageApi from '@/api/system/notify/message'
  4 +
  5 +const { push } = useRouter()
2 6 const activeName = ref('notice')
  7 +const count = ref(0) // 未读消息数量
  8 +const list = ref([]) // 消息列表
  9 +
  10 +// 获得消息列表
  11 +const getList = async () => {
  12 + list.value = await NotifyMessageApi.getUnreadNotifyMessageListApi()
  13 +}
  14 +
  15 +// 获得未读消息数
  16 +const getUnreadCount = async () => {
  17 + NotifyMessageApi.getUnreadNotifyMessageCountApi().then((data) => {
  18 + count.value = data
  19 + })
  20 +}
  21 +
  22 +// 跳转我的站内信
  23 +const goMyList = () => {
  24 + push({
  25 + name: 'MyNotifyMessage'
  26 + })
  27 +}
3 28  
4   -const noticeList = ref([
5   - { id: 1, title: '版本升级1', date: '2022-12-12 10:00:00' },
6   - { id: 2, title: '版本升级2', date: '2022-12-12 10:00:00' },
7   - { id: 3, title: '版本升级3', date: '2022-12-12 10:00:00' },
8   - { id: 4, title: '版本升级4', date: '2022-12-12 10:00:00' },
9   - { id: 5, title: '版本升级5', date: '2022-12-12 10:00:00' }
10   -])
11   -const messageList = ref([
12   - { id: 1, title: '加班1', date: '2022-12-12 10:00:00' },
13   - { id: 2, title: '加班2', date: '2022-12-12 10:00:00' },
14   - { id: 3, title: '加班3', date: '2022-12-12 10:00:00' },
15   - { id: 4, title: '加班4', date: '2022-12-12 10:00:00' },
16   - { id: 5, title: '加班5', date: '2022-12-12 10:00:00' }
17   -])
18   -const needList = ref([
19   - { id: 1, title: '审批1', date: '2022-12-12 10:00:00' },
20   - { id: 2, title: '审批2', date: '2022-12-12 10:00:00' },
21   - { id: 3, title: '审批3', date: '2022-12-12 10:00:00' },
22   - { id: 4, title: '审批4', date: '2022-12-12 10:00:00' },
23   - { id: 5, title: '审批5', date: '2022-12-12 10:00:00' }
24   -])
  29 +// ========== 初始化 =========
  30 +onMounted(() => {
  31 + // 首次加载小红点
  32 + getUnreadCount()
  33 + // 轮询刷新小红点
  34 + setInterval(() => {
  35 + getUnreadCount()
  36 + }, 1000 * 60 * 2)
  37 +})
25 38 </script>
26 39 <template>
27 40 <div class="message">
28   - <ElPopover placement="bottom" :width="310" trigger="click">
  41 + <ElPopover placement="bottom" :width="400" trigger="click">
29 42 <template #reference>
30   - <ElBadge :value="noticeList.length" class="item">
31   - <Icon icon="ep:bell" :size="18" class="cursor-pointer" />
  43 + <ElBadge :is-dot="count > 0" class="item">
  44 + <Icon icon="ep:bell" :size="18" class="cursor-pointer" @click="getList" />
32 45 </ElBadge>
33 46 </template>
34 47 <ElTabs v-model="activeName">
35   - <ElTabPane label="通知(5)" name="notice">
36   - <div class="message-list">
37   - <template v-for="item in noticeList" :key="item.id">
38   - <div class="message-item">
39   - <img src="@/assets/imgs/avatar.gif" alt="" class="message-icon" />
40   - <div class="message-content">
41   - <span class="message-title">{{ item.title }}</span>
42   - <span class="message-date">{{ item.date }}</span>
43   - </div>
44   - </div>
45   - </template>
46   - </div>
47   - </ElTabPane>
48   - <ElTabPane label="消息(0)" name="message">
49   - <div class="message-list">
50   - <template v-for="item in messageList" :key="item.id">
51   - <div class="message-item">
52   - <img src="@/assets/imgs/avatar.gif" alt="" class="message-icon" />
53   - <div class="message-content">
54   - <span class="message-title">{{ item.title }}</span>
55   - <span class="message-date">{{ item.date }}</span>
56   - </div>
57   - </div>
58   - </template>
59   - </div>
60   - </ElTabPane>
61   - <ElTabPane label="代办(0)" name="need">
  48 + <ElTabPane label="我的站内信" name="notice">
62 49 <div class="message-list">
63   - <template v-for="item in needList" :key="item.id">
  50 + <template v-for="item in list" :key="item.id">
64 51 <div class="message-item">
65 52 <img src="@/assets/imgs/avatar.gif" alt="" class="message-icon" />
66 53 <div class="message-content">
67   - <span class="message-title">{{ item.title }}</span>
68   - <span class="message-date">{{ item.date }}</span>
  54 + <span class="message-title">
  55 + {{ item.templateNickname }}:{{ item.templateContent }}
  56 + </span>
  57 + <span class="message-date">
  58 + {{ dayjs(item.createTime).format('YYYY-MM-DD HH:mm:ss') }}
  59 + </span>
69 60 </div>
70 61 </div>
71 62 </template>
72 63 </div>
73 64 </ElTabPane>
74 65 </ElTabs>
  66 + <!-- 更多 -->
  67 + <div style="text-align: right; margin-top: 10px">
  68 + <XButton type="primary" preIcon="ep:view" title="查看全部" @click="goMyList" />
  69 + </div>
75 70 </ElPopover>
76 71 </div>
77 72 </template>
... ...
yudao-ui-admin/src/api/system/notify/message.js
... ... @@ -43,6 +43,7 @@ export function getUnreadNotifyMessageList() {
43 43 })
44 44 }
45 45  
  46 +// 获得当前用户的未读站内信数量
46 47 export function getUnreadNotifyMessageCount() {
47 48 return request({
48 49 url: '/system/notify-message/get-unread-count',
... ...
yudao-ui-admin/src/layout/components/Message/index.vue
... ... @@ -9,7 +9,7 @@
9 9 <!-- 弹出列表 -->
10 10 <el-table v-loading="loading" :data="list">
11 11 <el-table-column width="120" property="templateNickname" label="发送人" />
12   - <el-table-column width="180" property="title" label="发送时间">
  12 + <el-table-column width="180" property="createTime" label="发送时间">
13 13 <template slot-scope="scope">
14 14 <span>{{ parseTime(scope.row.createTime) }}</span>
15 15 </template>
... ... @@ -49,7 +49,7 @@ export default {
49 49 // 首次加载小红点
50 50 this.getUnreadCount()
51 51 // 轮询刷新小红点
52   - window.timer = setInterval(()=>{
  52 + setInterval(() => {
53 53 this.getUnreadCount()
54 54 },1000 * 60 * 2)
55 55 },
... ...