perf: add static router

This commit is contained in:
kailong321200875 2022-07-30 10:05:53 +08:00
parent 55d4ce7e35
commit 55522b0661
7 changed files with 48 additions and 7 deletions

View File

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { ElSwitch } from 'element-plus' import { ElSwitch, ElMessage } from 'element-plus'
import { useI18n } from '@/hooks/web/useI18n' import { useI18n } from '@/hooks/web/useI18n'
import { useAppStore } from '@/store/modules/app' import { useAppStore } from '@/store/modules/app'
import { computed, ref, watch } from 'vue' import { computed, ref, watch } from 'vue'
@ -107,6 +107,14 @@ const greyModeChange = (show: boolean) => {
appStore.setGreyMode(show) appStore.setGreyMode(show)
} }
//
const dynamicRouter = ref(appStore.getDynamicRouter)
const dynamicRouterChange = (show: boolean) => {
ElMessage.info(t('setting.reExperienced'))
appStore.setDynamicRouter(show)
}
const layout = computed(() => appStore.getLayout) const layout = computed(() => appStore.getLayout)
watch( watch(
@ -185,5 +193,10 @@ watch(
<span class="text-14px">{{ t('setting.greyMode') }}</span> <span class="text-14px">{{ t('setting.greyMode') }}</span>
<ElSwitch v-model="greyMode" @change="greyModeChange" /> <ElSwitch v-model="greyMode" @change="greyModeChange" />
</div> </div>
<div class="flex justify-between items-center">
<span class="text-14px">{{ t('setting.dynamicRouter') }}</span>
<ElSwitch v-model="dynamicRouter" @change="dynamicRouterChange" />
</div>
</div> </div>
</template> </template>

View File

@ -34,6 +34,7 @@ export interface AppState {
logo: boolean logo: boolean
fixedHeader: boolean fixedHeader: boolean
greyMode: boolean greyMode: boolean
dynamicRouter: boolean
pageLoading: boolean pageLoading: boolean
layout: LayoutType layout: LayoutType
title: string title: string
@ -67,6 +68,7 @@ export const appModules: AppState = {
fixedHeader: true, // 固定toolheader fixedHeader: true, // 固定toolheader
footer: true, // 显示页脚 footer: true, // 显示页脚
greyMode: false, // 是否开始灰色模式,用于特殊悼念日 greyMode: false, // 是否开始灰色模式,用于特殊悼念日
dynamicRouter: wsCache.get('dynamicRouter') || false, // 是否动态路由
layout: wsCache.get('layout') || 'classic', // layout布局 layout: wsCache.get('layout') || 'classic', // layout布局
isDark: wsCache.get('isDark') || false, // 是否是暗黑模式 isDark: wsCache.get('isDark') || false, // 是否是暗黑模式

View File

@ -74,7 +74,9 @@ export default {
copyFailed: 'Copy failed', copyFailed: 'Copy failed',
footer: 'Footer', footer: 'Footer',
uniqueOpened: 'Unique opened', uniqueOpened: 'Unique opened',
tagsViewIcon: 'Tags view icon' tagsViewIcon: 'Tags view icon',
dynamicRouter: 'Dynamic router',
reExperienced: 'Please exit the login experience again'
}, },
size: { size: {
default: 'Default', default: 'Default',

View File

@ -74,7 +74,9 @@ export default {
copyFailed: '拷贝失败', copyFailed: '拷贝失败',
footer: '页脚', footer: '页脚',
uniqueOpened: '菜单手风琴', uniqueOpened: '菜单手风琴',
tagsViewIcon: '标签页图标' tagsViewIcon: '标签页图标',
dynamicRouter: '动态路由',
reExperienced: '请重新退出登录体验'
}, },
size: { size: {
default: '默认', default: '默认',

View File

@ -48,9 +48,14 @@ router.beforeEach(async (to, from, next) => {
const roleRouters = wsCache.get('roleRouters') || [] const roleRouters = wsCache.get('roleRouters') || []
const userInfo = wsCache.get(appStore.getUserInfo) const userInfo = wsCache.get(appStore.getUserInfo)
userInfo.role === 'admin' // 是否使用动态路由
? await permissionStore.generateRoutes('admin', roleRouters as AppCustomRouteRecordRaw[]) if (appStore.getDynamicRouter) {
: await permissionStore.generateRoutes('test', roleRouters as string[]) userInfo.role === 'admin'
? await permissionStore.generateRoutes('admin', roleRouters as AppCustomRouteRecordRaw[])
: await permissionStore.generateRoutes('test', roleRouters as string[])
} else {
await permissionStore.generateRoutes('none')
}
permissionStore.getAddRouters.forEach((route) => { permissionStore.getAddRouters.forEach((route) => {
router.addRoute(route as unknown as RouteRecordRaw) // 动态添加可访问路由表 router.addRoute(route as unknown as RouteRecordRaw) // 动态添加可访问路由表

View File

@ -54,6 +54,9 @@ export const useAppStore = defineStore({
getGreyMode(): boolean { getGreyMode(): boolean {
return this.greyMode return this.greyMode
}, },
getDynamicRouter(): boolean {
return this.dynamicRouter
},
getPageLoading(): boolean { getPageLoading(): boolean {
return this.pageLoading return this.pageLoading
}, },
@ -125,6 +128,10 @@ export const useAppStore = defineStore({
setGreyMode(greyMode: boolean) { setGreyMode(greyMode: boolean) {
this.greyMode = greyMode this.greyMode = greyMode
}, },
setDynamicRouter(dynamicRouter: boolean) {
wsCache.set('dynamicRouter', dynamicRouter)
this.dynamicRouter = dynamicRouter
},
setPageLoading(pageLoading: boolean) { setPageLoading(pageLoading: boolean) {
this.pageLoading = pageLoading this.pageLoading = pageLoading
}, },

View File

@ -130,7 +130,17 @@ const signIn = async () => {
if (res) { if (res) {
wsCache.set(appStore.getUserInfo, res.data) wsCache.set(appStore.getUserInfo, res.data)
getRole() // 使
if (appStore.getDynamicRouter) {
getRole()
} else {
await permissionStore.generateRoutes('none').catch(() => {})
permissionStore.getAddRouters.forEach((route) => {
addRoute(route as RouteRecordRaw) // 访
})
permissionStore.setIsAddRouters(true)
push({ path: redirect.value || permissionStore.addRouters[0].path })
}
} }
} finally { } finally {
loading.value = false loading.value = false