修复了枢机协律相关页面被误删的问题
This commit is contained in:
1 parent
917d4d1d28
commit
41b982c7b5
3 files changed
+51
-44
No files matched your search
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
# GERP 前端部署脚本:全量编译并同步产物到生产目录(TempLate/GERP)
|
# GERP 前端部署脚本:全量编译并同步产物到生产目录(TempLate/GERP)
|
||||||
#
|
#
|
||||||
# 用途:
|
# 用途:
|
||||||
# 1. 清理旧构建产物(dist 与 TempLate/GERP/assets),保证无 hash 残留
|
# 1. 清理旧构建产物(dist 与 TempLate/GERP/assets),保证无 hash 残留
|
||||||
|
|||||||
+49
-42
@@ -1,5 +1,6 @@
|
|||||||
import { nextTick } from 'vue'
|
import { nextTick } from 'vue'
|
||||||
import { createRouter, createWebHashHistory, type RouteRecordRaw } from 'vue-router'
|
import { createRouter, createWebHashHistory, type RouteRecordRaw } from 'vue-router'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
import { useUserStore } from '@/stores/user'
|
import { useUserStore } from '@/stores/user'
|
||||||
import { useProgressStore } from '@/stores/progress'
|
import { useProgressStore } from '@/stores/progress'
|
||||||
import { useTabsStore } from '@/stores/tabs'
|
import { useTabsStore } from '@/stores/tabs'
|
||||||
@@ -228,37 +229,37 @@ export const staticRoutes: RouteRecordRaw[] = [
|
|||||||
component: () => import('@/views/system/DbTable.vue'),
|
component: () => import('@/views/system/DbTable.vue'),
|
||||||
meta: { title: '表结构管理', requiresAuth: true },
|
meta: { title: '表结构管理', requiresAuth: true },
|
||||||
},
|
},
|
||||||
// === 枢机协律(CreateE):旧页面 iframe 直载(LegacyPage) ===
|
// === 枢机协律(CreateE):旧页面 iframe 直载(LegacyPage) ===
|
||||||
{
|
{
|
||||||
path: 'private/CreateE/shop',
|
path: 'private/CreateE/shop',
|
||||||
name: 'PrivateCreateEShop',
|
name: 'PrivateCreateEShop',
|
||||||
component: () => import('@/views/LegacyPage.vue'),
|
component: () => import('@/views/LegacyPage.vue'),
|
||||||
meta: { title: '商店', requiresAuth: true, menuGuarded: true, legacySrc: '/pages/private/CreateE/shop.html' },
|
meta: { title: '商店', requiresAuth: true, menuGuarded: true, legacySrc: '/pages/private/CreateE/shop.html' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'private/CreateE/Recharge',
|
path: 'private/CreateE/Recharge',
|
||||||
name: 'PrivateCreateERecharge',
|
name: 'PrivateCreateERecharge',
|
||||||
component: () => import('@/views/LegacyPage.vue'),
|
component: () => import('@/views/LegacyPage.vue'),
|
||||||
meta: { title: '储值充值', requiresAuth: true, menuGuarded: true, legacySrc: '/pages/private/CreateE/Recharge.html' },
|
meta: { title: '储值充值', requiresAuth: true, menuGuarded: true, legacySrc: '/pages/private/CreateE/Recharge.html' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'private/CreateE/wallet',
|
path: 'private/CreateE/wallet',
|
||||||
name: 'PrivateCreateEWallet',
|
name: 'PrivateCreateEWallet',
|
||||||
component: () => import('@/views/LegacyPage.vue'),
|
component: () => import('@/views/LegacyPage.vue'),
|
||||||
meta: { title: '钱包', requiresAuth: true, menuGuarded: true, legacySrc: '/pages/private/CreateE/wallet.html' },
|
meta: { title: '钱包', requiresAuth: true, menuGuarded: true, legacySrc: '/pages/private/CreateE/wallet.html' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'private/CreateE/enterprise',
|
path: 'private/CreateE/enterprise',
|
||||||
name: 'PrivateCreateEEnterprise',
|
name: 'PrivateCreateEEnterprise',
|
||||||
component: () => import('@/views/LegacyPage.vue'),
|
component: () => import('@/views/LegacyPage.vue'),
|
||||||
meta: { title: '企业管理', requiresAuth: true, legacySrc: '/pages/private/CreateE/enterprise.html' },
|
meta: { title: '企业管理', requiresAuth: true, legacySrc: '/pages/private/CreateE/enterprise.html' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'private/CreateE/StoreValue',
|
path: 'private/CreateE/StoreValue',
|
||||||
name: 'PrivateCreateEStoreValue',
|
name: 'PrivateCreateEStoreValue',
|
||||||
component: () => import('@/views/LegacyPage.vue'),
|
component: () => import('@/views/LegacyPage.vue'),
|
||||||
meta: { title: '储值查看', requiresAuth: true, menuGuarded: true, legacySrc: '/pages/private/CreateE/StoreValue.html' },
|
meta: { title: '储值查看', requiresAuth: true, menuGuarded: true, legacySrc: '/pages/private/CreateE/StoreValue.html' },
|
||||||
},
|
},
|
||||||
// === 阶段 8:SKU(移动端 C 端,待决策是否拆分独立工程) ===
|
// === 阶段 8:SKU(移动端 C 端,待决策是否拆分独立工程) ===
|
||||||
{
|
{
|
||||||
path: 'sku',
|
path: 'sku',
|
||||||
@@ -298,6 +299,23 @@ let justOpenedNewTab = false
|
|||||||
router.beforeEach(async (to, _from, next) => {
|
router.beforeEach(async (to, _from, next) => {
|
||||||
const tabsStore = useTabsStore()
|
const tabsStore = useTabsStore()
|
||||||
justOpenedNewTab = false
|
justOpenedNewTab = false
|
||||||
|
|
||||||
|
// === 菜单守卫(先于 addTab,避免受限页 tab 误入标签栏)===
|
||||||
|
// menuGuarded 路由(后端菜单驱动的业务页)必须出现在当前用户可见菜单树中。
|
||||||
|
// 用途:URL 直达私有页(如 #/private/CreateE/wallet)时,若菜单树不含该路径
|
||||||
|
// (当前角色公司无权),直接跳回 dashboard,阻止访问公司私有业务。
|
||||||
|
// 注意:不能 next({name:'NotFound'})——catch-all 保留原路径会再次触发守卫,
|
||||||
|
// 造成导航无限循环 + tab 反复增删(栈溢出)。直接 next('/dashboard') 使
|
||||||
|
// URL/tabs/路由三方一致,Dashboard 只挂载一次,无循环。
|
||||||
|
// menus 未加载(首次进入/未登录)时放行,交由下方 restoreSession 处理登录与菜单。
|
||||||
|
const userStore = useUserStore()
|
||||||
|
if (to.meta.requiresAuth === true && to.meta.menuGuarded && userStore.menus.length > 0 && !userStore.hasMenuPath(to.path)) {
|
||||||
|
useProgressStore().done()
|
||||||
|
ElMessage.warning('无权访问该页面')
|
||||||
|
next('/dashboard')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 立即添加 tab:与 loading 同步出现,不等登录检查或组件加载
|
// 立即添加 tab:与 loading 同步出现,不等登录检查或组件加载
|
||||||
// addTab 返回 true=新 tab(首次打开,需 loading),false=已存在(已缓存,瞬时切换)
|
// addTab 返回 true=新 tab(首次打开,需 loading),false=已存在(已缓存,瞬时切换)
|
||||||
if (to.meta.requiresAuth === true && to.meta.title) {
|
if (to.meta.requiresAuth === true && to.meta.title) {
|
||||||
@@ -316,8 +334,6 @@ router.beforeEach(async (to, _from, next) => {
|
|||||||
useProgressStore().done()
|
useProgressStore().done()
|
||||||
}
|
}
|
||||||
|
|
||||||
const userStore = useUserStore()
|
|
||||||
|
|
||||||
// 登录页:若已处于登录状态(内存态或 Cookie 会话可恢复),跳转面板
|
// 登录页:若已处于登录状态(内存态或 Cookie 会话可恢复),跳转面板
|
||||||
if (to.name === 'Login') {
|
if (to.name === 'Login') {
|
||||||
if (userStore.isLoggedIn) {
|
if (userStore.isLoggedIn) {
|
||||||
@@ -353,15 +369,6 @@ router.beforeEach(async (to, _from, next) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 菜单守卫:menuGuarded 路由(后端菜单驱动的业务页)必须出现在当前用户可见菜单树中
|
|
||||||
// 用途:URL 直达私有页(如 #/private/CreateE/wallet)时,若菜单树不含该路径(当前角色
|
|
||||||
// 公司无权),则拦截到 404,避免绕过菜单过滤直接访问公司私有业务
|
|
||||||
if (to.meta.menuGuarded && !userStore.hasMenuPath(to.path)) {
|
|
||||||
tabsStore.removeTab(to.path)
|
|
||||||
next({ name: 'NotFound', replace: true })
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
next()
|
next()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -221,4 +221,4 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
restoreSession,
|
restoreSession,
|
||||||
reset,
|
reset,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
Reference in new issue
Block a user