Browse Source

feat: router

main
xingyuv 2 years ago
parent
commit
351171b29a
  1. 2
      package.json
  2. 17
      pnpm-lock.yaml
  3. 2
      src/enums/pageEnum.ts
  4. 2
      src/main.ts
  5. 2
      src/router/guard/index.ts
  6. 42
      src/router/guard/permissionGuard.ts
  7. 1
      src/store/modules/permission.ts
  8. 1
      src/store/modules/user.ts

2
package.json

@ -101,7 +101,7 @@
"esno": "^0.16.3", "esno": "^0.16.3",
"fs-extra": "^11.1.0", "fs-extra": "^11.1.0",
"husky": "^8.0.3", "husky": "^8.0.3",
"inquirer": "^9.1.4", "inquirer": "^9.1.5",
"less": "^4.1.3", "less": "^4.1.3",
"lint-staged": "^13.2.0", "lint-staged": "^13.2.0",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",

17
pnpm-lock.yaml

@ -50,7 +50,7 @@ specifiers:
esno: ^0.16.3 esno: ^0.16.3
fs-extra: ^11.1.0 fs-extra: ^11.1.0
husky: ^8.0.3 husky: ^8.0.3
inquirer: ^9.1.4 inquirer: ^9.1.5
intro.js: ^6.0.0 intro.js: ^6.0.0
less: ^4.1.3 less: ^4.1.3
lint-staged: ^13.2.0 lint-staged: ^13.2.0
@ -171,7 +171,7 @@ devDependencies:
esno: 0.16.3 esno: 0.16.3
fs-extra: 11.1.0 fs-extra: 11.1.0
husky: 8.0.3 husky: 8.0.3
inquirer: 9.1.4 inquirer: 9.1.5
less: 4.1.3 less: 4.1.3
lint-staged: 13.2.0 lint-staged: 13.2.0
picocolors: 1.0.0 picocolors: 1.0.0
@ -5563,9 +5563,9 @@ packages:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
dev: true dev: true
/inquirer/9.1.4: /inquirer/9.1.5:
resolution: {integrity: sha512-9hiJxE5gkK/cM2d1mTEnuurGTAoHebbkX0BYl3h7iEg7FYfuNIom+nDfBCSWtvSnoSrWCeBxqqBZu26xdlJlXA==} resolution: {integrity: sha512-3ygAIh8gcZavV9bj6MTdYddG2zPSYswP808fKS46NOwlF0zZljVpnLCHODDqItWJDbDpLb3aouAxGaJbkxoppA==}
engines: {node: '>=12.0.0'} engines: {node: '>=14.18.0'}
dependencies: dependencies:
ansi-escapes: 6.0.0 ansi-escapes: 6.0.0
chalk: 5.2.0 chalk: 5.2.0
@ -5574,7 +5574,7 @@ packages:
external-editor: 3.1.0 external-editor: 3.1.0
figures: 5.0.0 figures: 5.0.0
lodash: 4.17.21 lodash: 4.17.21
mute-stream: 0.0.8 mute-stream: 1.0.0
ora: 6.1.2 ora: 6.1.2
run-async: 2.4.1 run-async: 2.4.1
rxjs: 7.8.0 rxjs: 7.8.0
@ -6557,8 +6557,9 @@ packages:
resolution: {integrity: sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==} resolution: {integrity: sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==}
dev: true dev: true
/mute-stream/0.0.8: /mute-stream/1.0.0:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
dev: true dev: true
/nanoid/3.3.4: /nanoid/3.3.4:

2
src/enums/pageEnum.ts

@ -2,7 +2,7 @@ export enum PageEnum {
// basic login path // basic login path
BASE_LOGIN = '/login', BASE_LOGIN = '/login',
// basic home path // basic home path
BASE_HOME = '/dashboard', BASE_HOME = '/dashboard/analysis',
// error page path // error page path
ERROR_PAGE = '/exception', ERROR_PAGE = '/exception',
// error log page path // error log page path

2
src/main.ts

@ -57,6 +57,8 @@ async function bootstrap() {
// Configure global error handling // Configure global error handling
// 配置全局错误处理 // 配置全局错误处理
setupErrorHandle(app) setupErrorHandle(app)
// https://next.router.vuejs.org/api/#isready
await router.isReady()
// https://next.router.vuejs.org/api/#isready // https://next.router.vuejs.org/api/#isready
// await router.isReady(); // await router.isReady();

2
src/router/guard/index.ts

@ -52,7 +52,7 @@ function createPageLoadingGuard(router: Router) {
const appStore = useAppStoreWithOut() const appStore = useAppStoreWithOut()
const { getOpenPageLoading } = useTransitionSetting() const { getOpenPageLoading } = useTransitionSetting()
router.beforeEach(async (to) => { router.beforeEach(async (to) => {
if (!userStore.getToken) { if (!userStore.getAccessToken) {
return true return true
} }
if (to.meta.loaded) { if (to.meta.loaded) {

42
src/router/guard/permissionGuard.ts

@ -3,33 +3,35 @@ import type { Router, RouteRecordRaw } from 'vue-router'
import { usePermissionStoreWithOut } from '@/store/modules/permission' import { usePermissionStoreWithOut } from '@/store/modules/permission'
import { PageEnum } from '@/enums/pageEnum' import { PageEnum } from '@/enums/pageEnum'
import { useDictStoreWithOut } from '@/store/modules/dict'
import { useUserStoreWithOut } from '@/store/modules/user' import { useUserStoreWithOut } from '@/store/modules/user'
import { PAGE_NOT_FOUND_ROUTE } from '@/router/routes/basic' import { PAGE_NOT_FOUND_ROUTE } from '@/router/routes/basic'
import { RootRoute } from '@/router/routes' // import { RootRoute } from '@/router/routes'
const LOGIN_PATH = PageEnum.BASE_LOGIN const LOGIN_PATH = PageEnum.BASE_LOGIN
const ROOT_PATH = RootRoute.path // const ROOT_PATH = RootRoute.path
const whitePathList: PageEnum[] = [LOGIN_PATH] const whitePathList: PageEnum[] = [LOGIN_PATH]
export function createPermissionGuard(router: Router) { export function createPermissionGuard(router: Router) {
const dictStore = useDictStoreWithOut()
const userStore = useUserStoreWithOut() const userStore = useUserStoreWithOut()
const permissionStore = usePermissionStoreWithOut() const permissionStore = usePermissionStoreWithOut()
router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from, next) => {
if ( // if (
from.path === ROOT_PATH && // from.path === ROOT_PATH &&
to.path === PageEnum.BASE_HOME && // to.path === PageEnum.BASE_HOME &&
userStore.getUserInfo.homePath && // userStore.getUserInfo.homePath &&
userStore.getUserInfo.homePath !== PageEnum.BASE_HOME // userStore.getUserInfo.homePath !== PageEnum.BASE_HOME
) { // ) {
next(userStore.getUserInfo.homePath) // next(userStore.getUserInfo.homePath)
return // return
} // }
const token = userStore.getToken const token = userStore.getAccessToken
// Whitelist can be directly entered // Whitelist can be directly entered
if (whitePathList.includes(to.path as PageEnum)) { if (whitePathList.includes(to.path as PageEnum)) {
@ -46,7 +48,8 @@ export function createPermissionGuard(router: Router) {
next() next()
return return
} }
// token or user does not exist
// token does not exist
if (!token) { if (!token) {
// You can access without permission. You need to set the routing meta.ignoreAuth to true // You can access without permission. You need to set the routing meta.ignoreAuth to true
if (to.meta.ignoreAuth) { if (to.meta.ignoreAuth) {
@ -70,15 +73,14 @@ export function createPermissionGuard(router: Router) {
} }
// Jump to the 404 page after processing the login // Jump to the 404 page after processing the login
if ( if (from.path === LOGIN_PATH && to.name === PAGE_NOT_FOUND_ROUTE.name && to.fullPath !== PageEnum.BASE_HOME) {
from.path === LOGIN_PATH && next(PageEnum.BASE_HOME)
to.name === PAGE_NOT_FOUND_ROUTE.name &&
to.fullPath !== (userStore.getUserInfo.homePath || PageEnum.BASE_HOME)
) {
next(userStore.getUserInfo.homePath || PageEnum.BASE_HOME)
return return
} }
if (!dictStore.getIsSetDict) {
await dictStore.setDictMap()
}
// get userinfo while last fetch time is empty // get userinfo while last fetch time is empty
if (userStore.getLastUpdateTime === 0) { if (userStore.getLastUpdateTime === 0) {
try { try {

1
src/store/modules/permission.ts

@ -226,6 +226,7 @@ export const usePermissionStore = defineStore('app-permission', {
// Background routing to menu structure // Background routing to menu structure
// 后台路由到菜单结构 // 后台路由到菜单结构
const backMenuList = transformRouteToMenu([dashboard, ...routeList]) const backMenuList = transformRouteToMenu([dashboard, ...routeList])
console.info(backMenuList)
this.setBackMenuList(backMenuList) this.setBackMenuList(backMenuList)
// remove meta.ignoreRoute item // remove meta.ignoreRoute item

1
src/store/modules/user.ts

@ -128,6 +128,7 @@ export const useUserStore = defineStore('app-user', {
router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw) router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw)
permissionStore.setDynamicAddedRoute(true) permissionStore.setDynamicAddedRoute(true)
} }
console.info(router.replace(PageEnum.BASE_HOME))
goHome && (await router.replace(PageEnum.BASE_HOME)) goHome && (await router.replace(PageEnum.BASE_HOME))
} }
return userInfo return userInfo