cache routes and user info data locally
This commit is contained in:
@ -25,6 +25,7 @@
|
|||||||
"fuse.js": "6.6.2",
|
"fuse.js": "6.6.2",
|
||||||
"js-cookie": "3.0.1",
|
"js-cookie": "3.0.1",
|
||||||
"jsencrypt": "3.3.1",
|
"jsencrypt": "3.3.1",
|
||||||
|
"lodash-es": "^4.17.21",
|
||||||
"nprogress": "0.2.0",
|
"nprogress": "0.2.0",
|
||||||
"pinia": "2.0.22",
|
"pinia": "2.0.22",
|
||||||
"pinia-plugin-persistedstate": "^3.1.0",
|
"pinia-plugin-persistedstate": "^3.1.0",
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
import usePermissionStore from "@/store/modules/permission";
|
||||||
|
import useUserStore from "@/store/modules/user";
|
||||||
|
|
||||||
// 登录方法
|
// 登录方法
|
||||||
export function login(username, password, code, uuid) {
|
export function login(username, password, code, uuid) {
|
||||||
@ -32,6 +34,11 @@ export function register(data) {
|
|||||||
|
|
||||||
// 获取用户详细信息
|
// 获取用户详细信息
|
||||||
export function getInfo() {
|
export function getInfo() {
|
||||||
|
if (useUserStore().userInfoRes) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
resolve(useUserStore().userInfoRes)
|
||||||
|
})
|
||||||
|
}
|
||||||
return request({
|
return request({
|
||||||
url: '/getInfo',
|
url: '/getInfo',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
@ -60,6 +67,11 @@ export function getCodeImg() {
|
|||||||
|
|
||||||
// 获取路由
|
// 获取路由
|
||||||
export const getRouters = () => {
|
export const getRouters = () => {
|
||||||
|
if (usePermissionStore().routesRes) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
resolve(usePermissionStore().routesRes)
|
||||||
|
})
|
||||||
|
}
|
||||||
return request({
|
return request({
|
||||||
url: '/getRouters',
|
url: '/getRouters',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
|
@ -4,6 +4,7 @@ import Layout from '@/layout/index'
|
|||||||
import ParentView from '@/components/ParentView'
|
import ParentView from '@/components/ParentView'
|
||||||
import InnerLink from '@/layout/components/InnerLink'
|
import InnerLink from '@/layout/components/InnerLink'
|
||||||
import {getRouters} from "@/api/login";
|
import {getRouters} from "@/api/login";
|
||||||
|
import {cloneDeep} from 'lodash-es'
|
||||||
|
|
||||||
// 匹配views里面所有的.vue文件
|
// 匹配views里面所有的.vue文件
|
||||||
const modules = import.meta.glob('./../../views/**/*.vue')
|
const modules = import.meta.glob('./../../views/**/*.vue')
|
||||||
@ -12,6 +13,7 @@ const usePermissionStore = defineStore(
|
|||||||
'permission',
|
'permission',
|
||||||
{
|
{
|
||||||
state: () => ({
|
state: () => ({
|
||||||
|
routesRes: null,
|
||||||
routes: [],
|
routes: [],
|
||||||
addRoutes: [],
|
addRoutes: [],
|
||||||
defaultRoutes: [],
|
defaultRoutes: [],
|
||||||
@ -19,6 +21,9 @@ const usePermissionStore = defineStore(
|
|||||||
sidebarRouters: []
|
sidebarRouters: []
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
|
setRoutesRes(res) {
|
||||||
|
this.routesRes = cloneDeep(res)
|
||||||
|
},
|
||||||
setRoutes(routes) {
|
setRoutes(routes) {
|
||||||
this.addRoutes = routes
|
this.addRoutes = routes
|
||||||
this.routes = constantRoutes.concat(routes)
|
this.routes = constantRoutes.concat(routes)
|
||||||
@ -36,6 +41,9 @@ const usePermissionStore = defineStore(
|
|||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
// 向后端请求路由数据
|
// 向后端请求路由数据
|
||||||
getRouters().then(res => {
|
getRouters().then(res => {
|
||||||
|
if (!this.routesRes) {
|
||||||
|
this.setRoutesRes(res)
|
||||||
|
}
|
||||||
const sdata = JSON.parse(JSON.stringify(res.data))
|
const sdata = JSON.parse(JSON.stringify(res.data))
|
||||||
const rdata = JSON.parse(JSON.stringify(res.data))
|
const rdata = JSON.parse(JSON.stringify(res.data))
|
||||||
const defaultData = JSON.parse(JSON.stringify(res.data))
|
const defaultData = JSON.parse(JSON.stringify(res.data))
|
||||||
@ -43,7 +51,9 @@ const usePermissionStore = defineStore(
|
|||||||
const rewriteRoutes = filterAsyncRouter(rdata, false, true)
|
const rewriteRoutes = filterAsyncRouter(rdata, false, true)
|
||||||
const defaultRoutes = filterAsyncRouter(defaultData)
|
const defaultRoutes = filterAsyncRouter(defaultData)
|
||||||
const asyncRoutes = filterDynamicRoutes(dynamicRoutes)
|
const asyncRoutes = filterDynamicRoutes(dynamicRoutes)
|
||||||
asyncRoutes.forEach(route => { router.addRoute(route) })
|
asyncRoutes.forEach(route => {
|
||||||
|
router.addRoute(route)
|
||||||
|
})
|
||||||
this.setRoutes(rewriteRoutes)
|
this.setRoutes(rewriteRoutes)
|
||||||
this.setSidebarRouters(constantRoutes.concat(sidebarRoutes))
|
this.setSidebarRouters(constantRoutes.concat(sidebarRoutes))
|
||||||
this.setDefaultRoutes(sidebarRoutes)
|
this.setDefaultRoutes(sidebarRoutes)
|
||||||
@ -52,7 +62,9 @@ const usePermissionStore = defineStore(
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}, persist: [
|
||||||
|
{paths: ['routesRes'], storage: localStorage}
|
||||||
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
// 遍历后台传来的路由字符串,转换为组件对象
|
// 遍历后台传来的路由字符串,转换为组件对象
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import {getInfo, login, logout} from '@/api/login'
|
import {getInfo, login, logout} from '@/api/login'
|
||||||
import {getToken, removeToken, setToken} from '@/utils/auth'
|
import {getToken, removeToken, setToken} from '@/utils/auth'
|
||||||
import defAva from '@/assets/images/profile.jpg'
|
import defAva from '@/assets/images/profile.jpg'
|
||||||
|
import {cloneDeep} from "lodash-es";
|
||||||
|
|
||||||
const useUserStore = defineStore(
|
const useUserStore = defineStore(
|
||||||
'user',
|
'user',
|
||||||
@ -11,9 +12,13 @@ const useUserStore = defineStore(
|
|||||||
avatar: '',
|
avatar: '',
|
||||||
roles: [],
|
roles: [],
|
||||||
tenant: '',
|
tenant: '',
|
||||||
permissions: []
|
permissions: [],
|
||||||
|
userInfoRes: null
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
|
setUserInfoRes(res) {
|
||||||
|
this.userInfoRes = cloneDeep(res)
|
||||||
|
},
|
||||||
// 登录
|
// 登录
|
||||||
login(userInfo) {
|
login(userInfo) {
|
||||||
const username = userInfo.username.trim()
|
const username = userInfo.username.trim()
|
||||||
@ -36,6 +41,9 @@ const useUserStore = defineStore(
|
|||||||
getInfo() {
|
getInfo() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
getInfo().then(res => {
|
getInfo().then(res => {
|
||||||
|
if (!this.userInfoRes) {
|
||||||
|
this.setUserInfoRes(res)
|
||||||
|
}
|
||||||
const user = res.user
|
const user = res.user
|
||||||
const avatar = (user.avatar == "" || user.avatar == null) ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar;
|
const avatar = (user.avatar == "" || user.avatar == null) ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar;
|
||||||
|
|
||||||
@ -60,6 +68,7 @@ const useUserStore = defineStore(
|
|||||||
this.token = ''
|
this.token = ''
|
||||||
this.roles = []
|
this.roles = []
|
||||||
this.permissions = []
|
this.permissions = []
|
||||||
|
this.userInfoRes = null
|
||||||
removeToken()
|
removeToken()
|
||||||
resolve()
|
resolve()
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
@ -69,7 +78,7 @@ const useUserStore = defineStore(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
persist: [
|
persist: [
|
||||||
{paths: ['tenant'],storage:localStorage}
|
{paths: ['tenant', 'userInfoRes'], storage: localStorage}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user