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
9.1 KiB

3 months 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: '/',\n component: Layout,\n meta: {\n requiresAuth: true\n },\n children: [{\n path: '',\n redirect: to => {\n // 获取用户角色\n const role = store.state.userInfo.role;\n\n // 根据角色重定向到不同页面\n switch (role) {\n case 'ROLE_ADMIN':\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 path: 'orders/my',\n name: 'MyOrders',\n component: () => import('@/views/order/OrderList.vue'),\n meta: {\n title: '我的订单',\n roles: ['ROLE_USER', 'ROLE_WAREHOUSE_ADMIN'] // 普通用户和仓库管理员都可以看自己的订单\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 path: 'orders/:id',\n name: 'OrderDetail',\n component: () => import('@/views/order/OrderDetail.vue'),\n meta: {\n title: '订单详情',\n requiresAuth: true // 所有已登录用户可访问\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 userRole = store.state.userInfo.role;\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 && !to.meta.roles.includes(userRole)) {\n ElMessage.error('没有权限访问此页面');\n next('/');\n return;\n }\n next();\n});\nexport default router;","map":{"version":3,"names":["createRouter","createWebHistory","store","Layout","ElMessage","routes","path","name","component","meta","requiresAuth","children","redirect","to","role","state","userInfo","title","roles","router","history","beforeEach","from","next","token","userRole","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: '/',\r\n component: Layout,\r\n meta: { requiresAuth: true },\r\n children: [\r\n {\r\n path: '',\r\n redirect: to => {\r\n // \r\n const role = store.state.userInfo.role\r\n \r\n // \r\n switch (role) {\r\n case 'ROLE_ADMIN':\r\n case 'ROLE_LOGISTICS_