From 4243f6581d8d6839a8c9944b9773d9f1cae95970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E7=A0=81-=E6=96=B9=E6=99=93=E8=BE=89?= Date: Tue, 3 Feb 2026 17:23:27 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E7=99=BB=E5=BD=95=E5=90=8E=E9=A2=84?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE=EF=BC=8C?= =?UTF-8?q?=E5=8C=BA=E5=9F=9F=E7=AE=A1=E7=90=86=E4=BD=BF=E7=94=A8=20Store?= =?UTF-8?q?=20=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - permission.js: 登录后并行预加载年级/学科/区域/班级数据 - region/index.vue: 使用 Store 缓存,避免每次请求 1MB 数据 - 第二次进入页面秒开,无需重复请求 --- frontend/ruoyi-ui/src/permission.js | 13 ++++++++++++- .../src/views/business/base/region/index.vue | 15 ++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/frontend/ruoyi-ui/src/permission.js b/frontend/ruoyi-ui/src/permission.js index 7e3b5bf..8c8d5b0 100644 --- a/frontend/ruoyi-ui/src/permission.js +++ b/frontend/ruoyi-ui/src/permission.js @@ -8,6 +8,7 @@ import { isRelogin } from '@/utils/request' import useUserStore from '@/store/modules/user' import useSettingsStore from '@/store/modules/settings' import usePermissionStore from '@/store/modules/permission' +import useBaseDataStore from '@/store/modules/baseData' NProgress.configure({ showSpinner: false }) @@ -33,7 +34,17 @@ router.beforeEach((to, from, next) => { // 判断当前用户是否已拉取完user_info信息 useUserStore().getInfo().then(() => { isRelogin.show = false - usePermissionStore().generateRoutes().then(accessRoutes => { + + // 并行加载:路由 + 基础数据 + const baseDataStore = useBaseDataStore() + Promise.all([ + usePermissionStore().generateRoutes(), + // 预加载基础数据(后台静默加载,不阻塞页面跳转) + baseDataStore.fetchRegionTree(), + baseDataStore.fetchGrades(), + baseDataStore.fetchSubjects(), + baseDataStore.fetchClasses() + ]).then(([accessRoutes]) => { // 根据roles权限生成可访问的路由表 accessRoutes.forEach(route => { if (!isHttp(route.path)) { diff --git a/frontend/ruoyi-ui/src/views/business/base/region/index.vue b/frontend/ruoyi-ui/src/views/business/base/region/index.vue index c3067d8..f3ebd12 100644 --- a/frontend/ruoyi-ui/src/views/business/base/region/index.vue +++ b/frontend/ruoyi-ui/src/views/business/base/region/index.vue @@ -141,14 +141,13 @@ const rules = { regionName: [{ required: true, message: '请输入区域名称', trigger: 'blur' }] } -// 获取区域列表(树形)- 使用后端已构建好的树接口 +// 获取区域列表(树形)- 使用 Store 缓存 const getList = async () => { loading.value = true try { - const res = await request.get('/business/region/tree') - if (res.code === 200) { - tableData.value = res.data || [] - } + // 使用 Store,自动缓存 + const data = await baseDataStore.fetchRegionTree() + tableData.value = data || [] } finally { loading.value = false } @@ -156,10 +155,8 @@ const getList = async () => { // 获取区域树选项(用于下拉选择) const getRegionOptions = async () => { - const res = await request.get('/business/region/tree') - if (res.code === 200) { - regionOptions.value = [{ regionId: 0, regionName: '顶级区域', children: res.data || [] }] - } + const data = await baseDataStore.fetchRegionTree() + regionOptions.value = [{ regionId: 0, regionName: '顶级区域', children: data || [] }] } // 展开/折叠