Files
yuezi-saas/frontend/src/router/index.js
T
li ee2b1757d0 feat: 员工自助注册+审核流程
- 新增 registration_packages 表:管理员配置注册套餐(名称/角色)
- AuthController 新增 register() 和 registrationPackages() 公开接口
- UserController 新增 approve() / reject() 审核接口
- StoreController 新增 publicList() 公开门店列表
- 前端 /register 注册页:选门店→选岗位套餐→填信息→提交
- 前端 system/registration-packages:套餐 CRUD
- 用户管理页:待审核状态展示 + 通过/拒绝快捷操作
- 登录页底部加「申请注册」跳转链接
- 路由白名单加 /register
2026-03-14 17:39:50 +08:00

70 lines
1.8 KiB
JavaScript

import { createRouter, createWebHistory } from 'vue-router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { constantRoutes } from '@/router/routes.js'
NProgress.configure({ showSpinner: false })
const router = createRouter({
history: createWebHistory(),
routes: constantRoutes,
scrollBehavior(to, from, savedPosition) {
if (savedPosition) {
return savedPosition
}
return { top: 0 }
}
})
// Whitelist paths that don't require authentication
const WHITE_LIST = ['/login', '/register', '/404']
router.beforeEach(async (to, from, next) => {
NProgress.start()
// Lazily import stores to avoid circular dependency at module init time
const { useUserStore } = await import('@/stores/user.js')
const { usePermissionStore } = await import('@/stores/permission.js')
const userStore = useUserStore()
const permissionStore = usePermissionStore()
const token = userStore.token
if (token) {
if (to.path === '/login') {
// Already logged in — redirect to home
next({ path: '/' })
} else {
// Check if user info has been fetched
if (!userStore.userInfo) {
try {
await userStore.getInfo()
const accessRoutes = permissionStore.generateRoutes(userStore.menus)
accessRoutes.forEach((route) => router.addRoute(route))
// Replace so the new routes are active
next({ ...to, replace: true })
} catch (err) {
// Token invalid — clear and redirect
await userStore.logout()
next(`/login?redirect=${to.path}`)
}
} else {
next()
}
}
} else {
// No token
if (WHITE_LIST.includes(to.path)) {
next()
} else {
next(`/login?redirect=${to.path}`)
}
}
})
router.afterEach(() => {
NProgress.done()
})
export default router