diff --git a/continew-admin-ui/src/api/common/dashboard.ts b/continew-admin-ui/src/api/common/dashboard.ts index 9a87b070..22cfae44 100644 --- a/continew-admin-ui/src/api/common/dashboard.ts +++ b/continew-admin-ui/src/api/common/dashboard.ts @@ -32,6 +32,12 @@ export interface DashboardAnnouncementRecord { type: number; } +export interface DashboardRecentlyVisitedRecord { + title?: string; + path: string; + icon?: string; +} + export function getTotal() { return axios.get(`${BASE_URL}/total`); } diff --git a/continew-admin-ui/src/router/index.ts b/continew-admin-ui/src/router/index.ts index b417382c..4347a956 100644 --- a/continew-admin-ui/src/router/index.ts +++ b/continew-admin-ui/src/router/index.ts @@ -1,7 +1,13 @@ -import { createRouter, createWebHistory } from 'vue-router'; +import { + createRouter, + createWebHistory, + RouteRecordNormalized, +} from 'vue-router'; +import { useAppStore } from '@/store'; import NProgress from 'nprogress'; // progress bar import 'nprogress/nprogress.css'; +import { DashboardRecentlyVisitedRecord } from '@/api/common/dashboard'; import { appRoutes, fixedRoutes, demoRoutes } from './routes'; import { REDIRECT_MAIN, NOT_FOUND_ROUTE } from './routes/base'; import createRouteGuard from './guard'; @@ -36,4 +42,47 @@ const router = createRouter({ createRouteGuard(router); +router.afterEach((to) => { + const allMenuList = useAppStore().appAsyncMenusAll as RouteRecordNormalized[]; + const toMenu = allMenuList.find((m) => to.path === m.path) || undefined; + if (toMenu === undefined) { + return; + } + + const recentlyVisitedList = window.localStorage.getItem('recently-visited'); + let copyRecentlyVisitedList: DashboardRecentlyVisitedRecord[]; + if (recentlyVisitedList === null) { + copyRecentlyVisitedList = []; + } else { + copyRecentlyVisitedList = JSON.parse(recentlyVisitedList); + } + + // 是否有重复点击的菜单 + copyRecentlyVisitedList.forEach( + (item: DashboardRecentlyVisitedRecord, index: number) => { + if (item.path === to.path) { + copyRecentlyVisitedList.splice(index, 1); + } + } + ); + + // 最多存储 3 个 + const menuMeta = toMenu?.meta; + const recentlyVisited: DashboardRecentlyVisitedRecord = { + title: menuMeta?.locale, + path: to.path, + icon: menuMeta?.icon, + }; + copyRecentlyVisitedList.reverse(); + copyRecentlyVisitedList.push(recentlyVisited); + copyRecentlyVisitedList.reverse(); + if (copyRecentlyVisitedList.length >= 4) { + copyRecentlyVisitedList = copyRecentlyVisitedList.splice(0, 3); + } + window.localStorage.setItem( + 'recently-visited', + JSON.stringify(copyRecentlyVisitedList) + ); +}); + export default router; diff --git a/continew-admin-ui/src/store/modules/app/index.ts b/continew-admin-ui/src/store/modules/app/index.ts index 38182ce6..ec53db15 100644 --- a/continew-admin-ui/src/store/modules/app/index.ts +++ b/continew-admin-ui/src/store/modules/app/index.ts @@ -6,6 +6,19 @@ import defaultSettings from '@/config/settings.json'; import { listRoute } from '@/api/auth/login'; import { AppState } from './types'; +const recursionMenu = ( + appMenu: RouteRecordNormalized[], + list: Array +) => { + appMenu.forEach((item) => { + const childrenAppMenu = item.children as RouteRecordNormalized[]; + if (childrenAppMenu != null && childrenAppMenu.length > 0) { + recursionMenu(childrenAppMenu, list); + } else { + list.push(item); + } + }); +}; const useAppStore = defineStore('app', { state: (): AppState => ({ ...defaultSettings }), @@ -19,6 +32,14 @@ const useAppStore = defineStore('app', { appAsyncMenus(state: AppState): RouteRecordNormalized[] { return state.serverMenu as unknown as RouteRecordNormalized[]; }, + appAsyncMenusAll(state: AppState): RouteRecordNormalized[] { + const menuList: RouteRecordNormalized[] = []; + recursionMenu( + state.serverMenu as unknown as RouteRecordNormalized[], + menuList + ); + return menuList; + }, }, actions: { diff --git a/continew-admin-ui/src/views/dashboard/workplace/components/geo-distribution.vue b/continew-admin-ui/src/views/dashboard/workplace/components/geo-distribution.vue index 04444ecb..dd3a2b6c 100644 --- a/continew-admin-ui/src/views/dashboard/workplace/components/geo-distribution.vue +++ b/continew-admin-ui/src/views/dashboard/workplace/components/geo-distribution.vue @@ -88,6 +88,6 @@ diff --git a/continew-admin-ui/src/views/dashboard/workplace/components/recently-visited.vue b/continew-admin-ui/src/views/dashboard/workplace/components/recently-visited.vue index c792fd38..049dc796 100644 --- a/continew-admin-ui/src/views/dashboard/workplace/components/recently-visited.vue +++ b/continew-admin-ui/src/views/dashboard/workplace/components/recently-visited.vue @@ -7,13 +7,18 @@ >
- +
- {{ link.text }} + {{ link.title }}
@@ -23,14 +28,24 @@