feat: 轮询查询未读消息

This commit is contained in:
rd
2025-07-18 17:10:12 +08:00
parent 5063cd50f8
commit 4ef74174ca
6 changed files with 81 additions and 26 deletions

View File

@ -7,18 +7,22 @@ import router from '@/router';
import type { RouteLocationNormalized } from 'vue-router';
import { MENU_LIST } from './constants';
import { useEnterpriseStore } from '@/stores/modules/enterprise';
import { getTaskUnread, patchTaskRead } from '@/api/all/common';
interface sidebarState {
activeMenuId: number | null;
menuList: any[];
allowAccessRoutes: any[];
unreadInfo: number[];
}
let unreadInfoTimer: number | null = null;
export const useSidebarStore = defineStore('sidebar', {
state: (): sidebarState => ({
activeMenuId: null,
menuList: [],
activeMenuId: null, //
menuList: [], // 菜单信息
unreadInfo: [], // 未读消息
allowAccessRoutes: [], // 允许访问的路由列表
}),
actions: {
@ -42,17 +46,13 @@ export const useSidebarStore = defineStore('sidebar', {
setActiveMenuIdByRoute(route: RouteLocationNormalized) {
const appRoutes = router.options?.routes ?? [];
// 查找当前路由所属的菜单组
const findMenuGroup = (routes: any[]): number | null => {
for (const routeItem of routes) {
// 检查子路由
if (routeItem.children?.length > 0) {
// 检查当前路由是否是这个父路由的子路由
const isChildRoute = routeItem.children.some((child: any) => child.name === route.name);
if (isChildRoute) {
return routeItem.meta?.id || null;
}
// 递归检查更深层的子路由
const childResult = findMenuGroup(routeItem.children);
if (childResult !== null) {
return routeItem.meta?.id || childResult;
@ -71,5 +71,32 @@ export const useSidebarStore = defineStore('sidebar', {
this.activeMenuId = menuId;
}
},
async getTaskUnreadInfo() {
const { code, data } = await getTaskUnread();
if (code === 200) {
this.unreadInfo = data;
}
},
// 查询未读信息
startUnreadInfoPolling() {
if (unreadInfoTimer) return;
this.getTaskUnreadInfo();
unreadInfoTimer = window.setInterval(() => {
this.getTaskUnreadInfo();
}, 30000);
},
stopUnreadInfoPolling() {
this.unreadInfo = [];
if (unreadInfoTimer) {
clearInterval(unreadInfoTimer);
unreadInfoTimer = null;
}
},
async removeTaskUnreadInfo() {
console.log('removeTaskUnreadInfo');
patchTaskRead({ ids: this.unreadInfo });
this.unreadInfo = [];
},
},
});