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
13 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.roles) return '/login';\n\n // \n if (userInfo.roles.includes('ROLE_ADMIN')) {\n return '/admin/orders';\n } else if (userInfo.roles.includes('ROLE_LOGISTICS_ADMIN')) {\n return '/admin/orders';\n } else if (userInfo.roles.includes('ROLE_WAREHOUSE_ADMIN')) {\n return '/orders/create';\n } else {\n return '/orders/my';\n }\n }\n },\n // \n {\n path: 'orders/my',\n name: 'MyOrders',\n component: () => import('@/views/order/MyOrders.vue'),\n meta: {\n title: '',\n roles: ['ROLE_USER', 'ROLE_ADMIN'] // 访\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', 'ROLE_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', 'ROLE_WAREHOUSE_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 path: 'locations',\n name: 'LocationManagement',\n component: () => import('@/views/admin/LocationManagement.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 userRoles = store.state.userInfo?.roles || [];\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 if (!userRoles.length) {\n ElMessage.error('');\n store.dispatch('logout');\n next('/login');\n return;\n }\n\n // \n const hasPermission = to.meta.roles.some(role => userRoles.includes(role));\n if (!hasPermission) {\n ElMessage.error('访');\n // \n if (userRoles.includes('ROLE_ADMIN') || userRoles.includes('ROLE_LOGISTICS_ADMIN')) {\n next('/admin/orders');\n } else if (userRoles.includes('ROLE_WAREHOUSE_ADMIN')) {\n next('/orders/create');\n } else if (userRoles.includes('ROLE_USER')) {