From c02c3f1d6eabd150fdf52c82082e0ca00441f9ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=B8=E7=86=9F=E5=90=B4=E5=BD=A6=E7=A5=96?= Date: Wed, 26 Aug 2026 14:12:16 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E5=B7=A5=E5=8E=82=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/index.js | 25 ++++++++++++++++++++++++- src/store/modules/user.js | 3 ++- src/views/common/login.vue | 2 ++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/router/index.js b/src/router/index.js index 4526735..a87fc4c 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -10,6 +10,7 @@ import http from '@/utils/httpRequest' import { isURL } from '@/utils/validate' import { clearLoginInfo } from '@/utils' import i18n from '@/i18n/i18n' +import store from '@/store' Vue.use(Router) @@ -70,6 +71,20 @@ const router = new Router({ routes: globalRoutes.concat(mainRoutes) }) +/** + * 菜单拉取前统一解析当前工厂,并兜底回写到store.user.site - rqrq + */ +function resolveCurrentMenuSite () { + const storeSiteRaw = store.state.user.site + const storeSite = (storeSiteRaw === null || storeSiteRaw === undefined) ? '' : String(storeSiteRaw).trim() + const cacheSite = (localStorage.getItem('site') || '').trim() + const currentSite = (storeSite && storeSite !== '0') ? storeSite : cacheSite + if (currentSite) { + store.commit('user/updateSite', currentSite) + } + return currentSite +} + router.beforeEach((to, from, next) => { // 检查登录状态(除了登录页和404页) if (to.name !== 'login' && to.name !== '404' && !to.path.startsWith('/dashboard-')) { @@ -87,12 +102,20 @@ router.beforeEach((to, from, next) => { if (router.options.isAddDynamicMenuRoutes || fnCurrentRouteType(to, globalRoutes) === 'global') { next() } else { + const currentSite = resolveCurrentMenuSite() + if (!currentSite) { + console.log('当前登录工厂为空,跳转至登录页') + clearLoginInfo() + next({ name: 'login' }) + return + } http({ url: http.adornUrl('/sys/menu/nav'), method: 'get', params: { 'l': i18n.locale, //i18n.locale - menuType: "pc" + menuType: "pc", + site: currentSite } }).then(({data}) => { if (data && data.code === 0) { diff --git a/src/store/modules/user.js b/src/store/modules/user.js index e71288f..e86e2e3 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -3,7 +3,8 @@ export default { state: { id: 0, name: '', - site: 0, + // 当前登录工厂编码,默认空字符串避免数值0与真实site混淆 - rqrq + site: '', languageDefault: '', userDisplay: '', userDev: false, diff --git a/src/views/common/login.vue b/src/views/common/login.vue index c795d4e..9db5ff1 100644 --- a/src/views/common/login.vue +++ b/src/views/common/login.vue @@ -239,6 +239,8 @@ localStorage.setItem('refresh', "0") localStorage.setItem('userName', this.dataForm.userName) localStorage.setItem('site', this.selectedSite) // 保存选择的工厂 + // 登录后立即回写store.user.site,保证菜单拉取前可读取当前工厂 - rqrq + this.$store.commit('user/updateSite', this.selectedSite) this.getConfigParams() this.cacheUserAuthorizedSubSiteCodes(this.dataForm.userName, this.selectedSite).finally(() => {