| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import { reactive, toRefs, computed } from 'vue'
- import { timerTask } from '@/utils/timer'
- import { queryNotice, postNoticeReaded } from '@/services/api/common'
- import { Language } from '@/constants/language'
- import { i18n } from './language'
- import { defineStore } from '../store'
- import eventBus from '@/services/bus'
- /**
- * 系统通知存储对象
- */
- export const useNoticeStore = defineStore(() => {
- const state = reactive({
- loading: false,
- noticeList: <Model.NoticeRsp[]>[], // 通知列表
- isInitialized: false // 是否已初始化
- })
- // 本地化通知列表
- const localizedNoticeList = computed<Model.NoticeRsp[]>(() => state.noticeList.map((e) => {
- const localizedProperties: { [K in Language]: { [P in 'title' | 'content']: string } } = {
- 'zh-CN': { title: e.title, content: e.content, },
- 'en-US': { title: e.titleen, content: e.contenten, },
- 'th': { title: e.titleth, content: e.contentth, },
- 'zh-TW': { title: e.titletw, content: e.contenttw, },
- 'vi': { title: e.titlevi, content: e.contentvi, },
- }
- const localizedValues = localizedProperties[i18n.global.locale] // 本地化语言
- return {
- ...e,
- ...localizedValues
- }
- }))
- // 未读消息数
- const unreadCount = computed(() => {
- return state.noticeList.reduce((count, e) => e.readed ? count : count + 1, 0)
- })
- // 获取通知列表
- const getNoticeList = async () => {
- try {
- state.loading = true
- timerTask.clearTimeout('systemNotice')
- const res = await queryNotice()
- state.noticeList = res.data
- } finally {
- state.loading = false
- state.isInitialized = true
- // 轮询查询系统通知
- timerTask.setTimeout(() => {
- getNoticeList()
- }, 60 * 1000, 'systemNotice')
- }
- }
- // 更新已读
- const updateNoticeReaded = (id: number) => {
- const item = state.noticeList.find((e) => e.autoid === id)
- if (item && !item.readed) {
- postNoticeReaded({
- data: {
- noticeID: id,
- }
- }).then(() => {
- item.readed = true
- })
- }
- }
- // 接收登入请求数据
- eventBus.$on('LoginNotify', () => {
- getNoticeList()
- })
- // 接收登出通知清空数据
- eventBus.$on('LogoutNotify', () => {
- timerTask.clearTimeout('systemNotice')
- state.noticeList = []
- state.isInitialized = false
- })
- return {
- ...toRefs(state),
- localizedNoticeList,
- unreadCount,
- getNoticeList,
- updateNoticeReaded,
- }
- })
|