You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

0 lines
10 KiB

1 month ago
  1. {"ast":null,"code":"import { createRouter, createWebHistory } from 'vue-router';\nimport store from '@/store';\nimport Layout from '@/components/layout/index.vue';\nimport { ElMessage } from 'element-plus';\nconst routes = [{\n path: '/login',\n name: 'Login',\n component: () => import('@/views/login/index.vue'),\n meta: {\n requiresAuth: false\n }\n}, {\n path: '/register',\n name: 'Register',\n component: () => import('@/views/register/index.vue'),\n meta: {\n requiresAuth: false\n }\n}, {\n path: '/',\n component: Layout,\n meta: {\n requiresAuth: true\n },\n children: [{\n path: '',\n name: 'Home',\n redirect: () => {\n const userInfo = store.state.userInfo;\n if (!userInfo || !userInfo.role) return '/login';\n switch (userInfo.role) {\n case 'ROLE_ADMIN':\n return '/admin/orders';\n case 'ROLE_LOGISTICS_ADMIN':\n return '/admin/orders';\n case 'ROLE_WAREHOUSE_ADMIN':\n return '/orders/create';\n case 'ROLE_USER':\n default:\n return '/orders/my';\n }\n }\n },\n // 普通用户路由\n {\n path: 'orders/my',\n name: 'MyOrders',\n component: () => import('@/views/order/OrderList.vue'),\n meta: {\n title: '我的订单',\n roles: ['ROLE_USER']\n }\n },\n // 仓库管理员路由\n {\n path: 'orders/create',\n name: 'CreateOrder',\n component: () => import('@/views/order/OrderCreate.vue'),\n meta: {\n title: '创建订单',\n roles: ['ROLE_WAREHOUSE_ADMIN']\n }\n },\n // 所有用户可访问\n {\n path: 'orders/detail/:id',\n name: 'OrderDetail',\n component: () => import('@/views/order/OrderDetail.vue'),\n meta: {\n title: '订单详情',\n requiresAuth: true\n }\n }]\n},\n// 管理员路由组\n{\n path: '/admin',\n component: Layout,\n meta: {\n requiresAuth: true\n },\n children: [{\n path: 'orders',\n name: 'OrderManagement',\n component: () => import('@/views/admin/OrderManagement.vue'),\n meta: {\n title: '订单管理',\n roles: ['ROLE_ADMIN', 'ROLE_LOGISTICS_ADMIN']\n }\n }, {\n path: 'users',\n name: 'UserManagement',\n component: () => import('@/views/admin/UserManagement.vue'),\n meta: {\n title: '用户管理',\n roles: ['ROLE_ADMIN']\n }\n }]\n}];\nconst router = createRouter({\n history: createWebHistory(),\n routes\n});\nrouter.beforeEach((to, from, next) => {\n const token = store.state.token;\n const userInfo = store.state.userInfo;\n\n // 不需要登录的页面直接通过\n if (to.meta.requiresAuth === false) {\n next();\n return;\n }\n\n // 没有token跳转登录\n if (!token) {\n next('/login');\n return;\n }\n\n // 已登录要去登录页,跳转首页\n if (to.path === '/login') {\n next('/');\n return;\n }\n\n // 检查路由是否需要特定角色\n if (to.meta.roles) {\n const hasPermission = to.meta.roles.includes(userInfo.role);\n if (!hasPermission) {\n ElMessage.error('没有权限访问此页面');\n next(from.path || '/');\n return;\n }\n }\n next();\n});\nexport default router;","map":{"version":3,"names":["createRouter","createWebHistory","store","Layout","ElMessage","routes","path","name","component","meta","requiresAuth","children","redirect","userInfo","state","role","title","roles","router","history","beforeEach","to","from","next","token","hasPermission","includes","error"],"sources":["D:/language/VScode/Front-end logistics/src/router/index.js"],"sourcesContent":["import { createRouter, createWebHistory } from 'vue-router'\r\nimport store from '@/store'\r\nimport Layout from '@/components/layout/index.vue'\r\nimport { ElMessage } from 'element-plus'\r\n\r\nconst routes = [\r\n {\r\n path: '/login',\r\n name: 'Login',\r\n component: () => import('@/views/login/index.vue'),\r\n meta: { requiresAuth: false }\r\n },\r\n {\r\n path: '/register',\r\n name: 'Register',\r\n component: () => import('@/views/register/index.vue'),\r\n