diff --git a/src/router/index.js b/src/router/index.js index d6663a7..eadc85b 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -3,44 +3,8 @@ import Router from 'vue-router' Vue.use(Router) -/* Layout */ -import Layout from '@/layout' - -/** - * Note: 路由配置项 - * - * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1 - * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 - * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面 - * // 若你想不管路由下面的 children 声明的个数都显示你的根路由 - * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由 - * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 - * name:'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题 - * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 - * roles: ['admin', 'common'] // 访问路由的角色权限 - * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 - * meta : { - noCache: true // 如果设置为true,则不会被 缓存(默认 false) - title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 - icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg - breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示 - activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。 - } - */ - // 公共路由 export const constantRoutes = [ - { - path: '/redirect', - component: Layout, - hidden: true, - children: [ - { - path: '/redirect/:path(.*)', - component: () => import('@/views/redirect') - } - ] - }, { path: '/login', component: () => import('@/views/login'), @@ -61,152 +25,47 @@ export const constantRoutes = [ component: () => import('@/views/error/401'), hidden: true }, + // 直接配置产品中心路由,不使用Layout { - path: '', - component: Layout, - redirect: 'index', - children: [ - { - path: 'index', - component: () => import('@/views/psp/productCenter/index'), - name: 'Index', - meta: { title: '公共服务平台', icon: 'dashboard', affix: true } - } - ] - }, - { - path: '/user', - component: Layout, - hidden: true, - redirect: 'noredirect', - children: [ - { - path: 'profile', - component: () => import('@/views/system/user/profile/index'), - name: 'Profile', - meta: { title: '个人中心', icon: 'user' } - } - ] + path: '/product-center', + name: 'ProductCenter', + component: () => import('@/views/psp/productCenter/index'), + meta: { title: '产品中心首页' } }, - // 在路由配置中导航条的路由 + // 直接配置产品中心路由,不使用Layout + { + path: '/product-case', + name: 'ProductCase', + component: () => import('@/views/psp/productCenter/product-case'), + meta: { title: '产品中心-案例' } + }, + + // 直接配置产品中心路由,不使用Layout + { + path: '/product-detail', + name: 'ProductDetail', + component: () => import('@/views/psp/productCenter/product-detail'), + meta: { title: '产品中心-详情' } + }, + + { + path: '/common/index', + name: 'common', + component: () => import('@/views/psp/common/index'), + meta: { title: '产品中心' } + }, + + + // 配置根路径重定向到产品中心 { path: '/', - component: Layout, // 布局组件,包含左侧菜单和顶部导航 - hidden: true, // 隐藏左侧菜单项 - children: [ - { - path: '/productCenter/index', - component: () => import('@/views/psp/productCenter/index.vue') - }, - { - path: '/common/index', - component: () => import('@/views/psp/common/index.vue') - }, - // ... 其他子路由 - ] - }, - - // 在路由配置中添加产品详情页面路由 - { - path: '/psp/productCenter', - component: Layout, - redirect: '/psp/productCenter/index', - name: 'ProductCenter', - meta: { title: '产品中心', icon: 'product', }, - hidden: true, // 隐藏左侧菜单项 - children: [ - { - path: 'detail/:id(\\d+)', - name: 'ProductDetail', - component: () => import('@/views/psp/productCenter/product-detail'), - meta: { title: '产品详情', activeMenu: '/psp/productCenter/index' }, - }, - { - path: 'case/:id(\\d+)', - name: 'ProductCase', - component: () => import('@/views/psp/productCenter/product-case'), - meta: { title: '产品案例', activeMenu: '/psp/productCenter/index' }, - } - - - ] + redirect: '/product-center', + hidden: true } ] -// 动态路由,基于用户权限动态去加载 -export const dynamicRoutes = [ - { - path: '/system/user-auth', - component: Layout, - hidden: true, - permissions: ['system:user:edit'], - children: [ - { - path: 'role/:userId(\\d+)', - component: () => import('@/views/system/user/authRole'), - name: 'AuthRole', - meta: { title: '分配角色', activeMenu: '/system/user' } - } - ] - }, - { - path: '/system/role-auth', - component: Layout, - hidden: true, - permissions: ['system:role:edit'], - children: [ - { - path: 'user/:roleId(\\d+)', - component: () => import('@/views/system/role/authUser'), - name: 'AuthUser', - meta: { title: '分配用户', activeMenu: '/system/role' } - } - ] - }, - { - path: '/system/dict-data', - component: Layout, - hidden: true, - permissions: ['system:dict:list'], - children: [ - { - path: 'index/:dictId(\\d+)', - component: () => import('@/views/system/dict/data'), - name: 'Data', - meta: { title: '字典数据', activeMenu: '/system/dict' } - } - ] - }, - { - path: '/monitor/job-log', - component: Layout, - hidden: true, - permissions: ['monitor:job:list'], - children: [ - { - path: 'index/:jobId(\\d+)', - component: () => import('@/views/monitor/job/log'), - name: 'JobLog', - meta: { title: '调度日志', activeMenu: '/monitor/job' } - } - ] - }, - { - path: '/tool/gen-edit', - component: Layout, - hidden: true, - permissions: ['tool:gen:edit'], - children: [ - { - path: 'index/:tableId(\\d+)', - component: () => import('@/views/tool/gen/editTable'), - name: 'GenEdit', - meta: { title: '修改生成配置', activeMenu: '/tool/gen' } - } - ] - } -] +// 可以移除dynamicRoutes动态路由部分 // 防止连续点击多次路由报错 let routerPush = Router.prototype.push diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js index b549ef0..b8753f2 100644 --- a/src/store/modules/permission.js +++ b/src/store/modules/permission.js @@ -1,6 +1,4 @@ -import auth from '@/plugins/auth' -import router, { constantRoutes, dynamicRoutes } from '@/router' -import { getRouters } from '@/api/menu' +import router, { constantRoutes } from '@/router' import Layout from '@/layout/index' import ParentView from '@/components/ParentView' import InnerLink from '@/layout/components/InnerLink' @@ -29,94 +27,32 @@ const permission = { }, }, actions: { - // 生成路由 + // 生成路由 - 简化版本,不再从后端获取 GenerateRoutes({ commit }) { return new Promise(resolve => { - // 向后端请求路由数据 - getRouters().then(res => { - const sdata = JSON.parse(JSON.stringify(res.data)) - const rdata = JSON.parse(JSON.stringify(res.data)) - const sidebarRoutes = filterAsyncRouter(sdata) - const rewriteRoutes = filterAsyncRouter(rdata, false, true) - const asyncRoutes = filterDynamicRoutes(dynamicRoutes) - rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true }) - router.addRoutes(asyncRoutes) - commit('SET_ROUTES', rewriteRoutes) - commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes)) - commit('SET_DEFAULT_ROUTES', sidebarRoutes) - commit('SET_TOPBAR_ROUTES', sidebarRoutes) - resolve(rewriteRoutes) - }) + // 直接使用静态路由,不再请求后端 + const staticRoutes = [ + { + path: '/product-center', + component: () => import('@/views/psp/productCenter/index'), + meta: { title: '产品中心首页' } + } + ] + + // 添加通配符路由,确保404页面可用 + const rewriteRoutes = [...staticRoutes, { path: '*', redirect: '/404', hidden: true }] + + commit('SET_ROUTES', rewriteRoutes) + commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(staticRoutes)) + commit('SET_DEFAULT_ROUTES', staticRoutes) + commit('SET_TOPBAR_ROUTES', staticRoutes) + resolve(rewriteRoutes) }) } } } -// 遍历后台传来的路由字符串,转换为组件对象 -function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) { - return asyncRouterMap.filter(route => { - if (type && route.children) { - route.children = filterChildren(route.children) - } - if (route.component) { - // Layout ParentView 组件特殊处理 - if (route.component === 'Layout') { - route.component = Layout - } else if (route.component === 'ParentView') { - route.component = ParentView - } else if (route.component === 'InnerLink') { - route.component = InnerLink - } else { - route.component = loadView(route.component) - } - } - if (route.children != null && route.children && route.children.length) { - route.children = filterAsyncRouter(route.children, route, type) - } else { - delete route['children'] - delete route['redirect'] - } - return true - }) -} - -function filterChildren(childrenMap, lastRouter = false) { - var children = [] - childrenMap.forEach(el => { - el.path = lastRouter ? lastRouter.path + '/' + el.path : el.path - if (el.children && el.children.length && el.component === 'ParentView') { - children = children.concat(filterChildren(el.children, el)) - } else { - children.push(el) - } - }) - return children -} - -// 动态路由遍历,验证是否具备权限 -export function filterDynamicRoutes(routes) { - const res = [] - routes.forEach(route => { - if (route.permissions) { - if (auth.hasPermiOr(route.permissions)) { - res.push(route) - } - } else if (route.roles) { - if (auth.hasRoleOr(route.roles)) { - res.push(route) - } - } - }) - return res -} - -export const loadView = (view) => { - if (process.env.NODE_ENV === 'development') { - return (resolve) => require([`@/views/${view}`], resolve) - } else { - // 使用 import 实现生产环境的路由懒加载 - return () => import(`@/views/${view}`) - } -} +// 可以完全移除 filterAsyncRouter, filterChildren, filterDynamicRoutes 和 loadView 函数 +// 因为它们不再需要 export default permission diff --git a/src/views/login.vue b/src/views/login.vue index 5bdda11..02bfa0e 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -142,7 +142,7 @@ export default { Cookies.remove('rememberMe') } this.$store.dispatch("Login", this.loginForm).then(() => { - this.$router.push({ path: this.redirect || "/" }).catch(()=>{}) + this.$router.push({ path: "/product-center" }).catch(()=>{}) }).catch(() => { this.loading = false if (this.captchaEnabled) { diff --git a/src/views/psp/navBar.vue b/src/views/psp/navBar.vue index 2c19ab8..c5d0bd6 100644 --- a/src/views/psp/navBar.vue +++ b/src/views/psp/navBar.vue @@ -57,7 +57,7 @@ export default { navItems: { type: Array, default: () => [ - { key: 'products', label: '产品中心', icon: '/img/psp/productCenter/products.png',route: '/productCenter/index' }, + { key: 'products', label: '产品中心', icon: '/img/psp/productCenter/products.png',route: '/product-center' }, { key: 'components', label: '公共组件', icon: '/img/psp/productCenter/components.png',route: '/common/index' }, { key: 'materials', label: '宣传物料', icon: '/img/psp/productCenter/materials.png',route: '/materials/index'}, { key: 'docs', label: '文档中心', icon: '/img/psp/productCenter/docs.png',route: '/docs/index'} diff --git a/src/views/psp/productCenter/index.vue b/src/views/psp/productCenter/index.vue index 9b43ea9..8451e26 100644 --- a/src/views/psp/productCenter/index.vue +++ b/src/views/psp/productCenter/index.vue @@ -1,48 +1,5 @@