import { createRouter, createWebHistory } from 'vue-router' import AppLayout from '@/layouts/AppLayout.vue' import { decideRouteAccess } from '@/router/accessDecision' import { useAccessPreviewStore } from '@/stores/accessPreview' import { useAuthStore } from '@/stores/auth' const router = createRouter({ history: createWebHistory(), routes: [ { path: '/login', name: 'login', component: () => import('@/views/LoginView.vue'), meta: { title: '登录' }, }, { path: '/', component: AppLayout, meta: { requiresAuth: true }, children: [ { path: '', name: 'home', component: () => import('@/views/ModuleView.vue'), meta: { title: '进入管理后台', description: '正在进入当前角色可访问的业务页面' }, }, { path: 'customers', name: 'customers', component: () => import('@/views/IntegrationUnavailableView.vue'), props: { moduleName: '客户管理', description: '后端尚未提供平台客户档案列表及维护接口。企业注册审核请使用“企业审核”页面。' }, meta: { title: '客户管理', description: '维护客户企业资料、合作状态和注册审核', permission: 'platform:customer:list' }, }, { path: 'customers/reviews', name: 'enterprise-reviews', component: () => import('@/views/EnterpriseReviewsView.vue'), meta: { title: '企业审核', description: '核验企业资质并维护客户下单资格', permission: 'platform:customer:review' }, }, { path: 'warehouses', name: 'warehouses', component: () => import('@/views/WarehousesView.vue'), meta: { title: '仓库管理', description: '维护客户头程下单可选择的平台收货仓', permission: 'platform:warehouse:list' }, }, { path: 'orders/first-leg', name: 'first-leg-orders', component: () => import('@/views/FirstLegOrdersView.vue'), meta: { title: '头程订单', description: '创建、受理和跟进客户提交的头程运输订单', permission: 'platform:order:list' }, }, { path: 'master-data/express-companies', name: 'express-companies', component: () => import('@/views/IntegrationUnavailableView.vue'), props: { moduleName: '快递公司', description: '后端尚未提供平台快递公司主数据的正式查询和维护接口。' }, meta: { title: '快递公司', description: '查询平台可用的快递公司档案与公开联系信息', permission: 'platform:express:list' }, }, { path: 'master-data/counterparties', name: 'counterparties', component: () => import('@/views/IntegrationUnavailableView.vue'), props: { moduleName: '往来单位', description: '现有往来单位接口仅面向企业端,后端尚未提供平台侧正式维护接口。' }, meta: { title: '往来单位', description: '维护供应商、客户、承运商、报关行及收发货单位档案', permission: 'platform:counterparty:list' }, }, { path: 'system/users', name: 'users', component: () => import('@/views/InternalUsersView.vue'), meta: { title: '内部用户', description: '管理平台内部员工账号、状态和角色', permission: 'platform:user:list' }, }, { path: 'system/roles', name: 'roles', component: () => import('@/views/RolesView.vue'), meta: { title: '角色管理', description: '维护平台角色并配置菜单及操作权限', permission: 'platform:role:list' }, }, { path: 'system/permissions', name: 'permissions', component: () => import('@/views/PermissionsView.vue'), meta: { title: '菜单权限', description: '维护菜单、页面、按钮和接口权限编码', permission: 'platform:permission:list' }, }, { path: '403', name: 'forbidden', component: () => import('@/views/ForbiddenView.vue'), meta: { title: '权限不足', description: '当前登录账号没有访问此页面的权限' }, }, ], }, { path: '/:pathMatch(.*)*', redirect: '/' }, ], }) router.beforeEach((to) => { document.title = to.meta.title ? `${to.meta.title} - 柏悦物流管理后台` : '柏悦物流管理后台' const auth = useAuthStore() if (to.name === 'login' && auth.isAuthenticated) { return { name: 'home' } } if (!auth.isAuthenticated && !to.meta.requiresAuth) return true const access = useAccessPreviewStore() if (auth.isAuthenticated) access.initializeAfterLogin() const decision = decideRouteAccess({ requiresAuth: to.meta.requiresAuth, isAuthenticated: auth.isAuthenticated, fullPath: to.fullPath, permission: to.meta.permission, hasPermission: to.meta.permission ? access.can(to.meta.permission) : true, }) if (decision.type === 'login') { return { name: 'login', query: { redirect: decision.redirect } } } if (decision.type === 'forbidden') { return { name: 'forbidden', query: { from: decision.from }, replace: true } } if (to.name === 'home') { return access.firstAccessiblePath ? { path: access.firstAccessiblePath, replace: true } : { name: 'forbidden', replace: true } } return true }) export default router