From 88a73f5b527b66eab9ec8a6d6440b411b2242f97 Mon Sep 17 00:00:00 2001 From: lbw_9527443 <780139497@qq.com> Date: Fri, 15 Aug 2025 14:05:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6=E5=92=8C=E9=AB=98=E7=BA=A7?= =?UTF-8?q?=E7=BB=8F=E7=90=86=E6=95=B0=E6=8D=AE=E5=8A=A8=E6=80=81=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor(router): 实现基于用户等级的路由守卫 feat(secondTop): 动态加载高级经理列表数据 fix(SalesTimelineWithTaskList): 修正默认职业和教育显示 perf(CustomerType): 优化图表数据绑定和交互 chore: 更新API基础路径配置 --- my-vue-app/src/router/index.js | 59 ++++++++-- my-vue-app/src/utils/https.js | 2 +- .../components/SalesTimelineWithTaskList.vue | 4 +- .../secondTop/components/CustomerType.vue | 110 +++++++++++++++--- .../secondTop/components/GroupComparison.vue | 26 +++-- my-vue-app/src/views/secondTop/secondTop.vue | 79 ++++++------- 6 files changed, 202 insertions(+), 78 deletions(-) diff --git a/my-vue-app/src/router/index.js b/my-vue-app/src/router/index.js index 5cd1de9..d1fb27b 100644 --- a/my-vue-app/src/router/index.js +++ b/my-vue-app/src/router/index.js @@ -5,6 +5,7 @@ import SeniorManager from '@/views/senorManger/seniorManager.vue' import TopOne from '@/views/topOne/topone.vue' import Login from '@/views/login/login.vue' import SecondTop from '@/views/secondTop/secondTop.vue' +import { useUserStore } from '@/stores/user.js' const routes = [ { @@ -15,32 +16,38 @@ const routes = [ { path: '/login', name: 'Login', - component: Login + component: Login, + meta: { requiresAuth: false } }, { path: '/sale', name: 'Sale', - component: Sale + component: Sale, + meta: { requiresAuth: true, minLevel: 1 } }, { path: '/manager', name: 'Manager', - component: Manager + component: Manager, + meta: { requiresAuth: true, minLevel: 2 } }, { path: '/senior-manager', name: 'SeniorManager', - component: SeniorManager + component: SeniorManager, + meta: { requiresAuth: true, minLevel: 3 } }, - { + { path: '/second-top', name: 'SecondTop', - component: SecondTop + component: SecondTop, + meta: { requiresAuth: true, minLevel: 4 } }, - { + { path: '/top', name: 'Top', - component: TopOne + component: TopOne, + meta: { requiresAuth: true, minLevel: 5 } } ] @@ -49,4 +56,40 @@ const router = createRouter({ routes }) +// 路由守卫 +router.beforeEach((to, from, next) => { + const userStore = useUserStore() + + // 如果路由不需要认证,直接通过 + if (!to.meta.requiresAuth) { + next() + return + } + + // 检查是否已登录 + if (!userStore.isLoggedIn || !userStore.userInfo) { + next('/login') + return + } + + // 检查用户等级权限 + const userLevel = userStore.userInfo.user_level + const requiredLevel = to.meta.minLevel + + // 用户等级必须大于等于所需等级(等级高的可以访问等级低的页面) + if (userLevel >= requiredLevel) { + next() + } else { + // 权限不足,重定向到对应等级的默认页面 + const defaultRoutes = { + 1: '/sale', + 2: '/manager', + 3: '/senior-manager', + 4: '/second-top', + 5: '/top' + } + next(defaultRoutes[userLevel] || '/sale') + } +}) + export default router \ No newline at end of file diff --git a/my-vue-app/src/utils/https.js b/my-vue-app/src/utils/https.js index a674690..aef5199 100644 --- a/my-vue-app/src/utils/https.js +++ b/my-vue-app/src/utils/https.js @@ -5,7 +5,7 @@ import { useUserStore } from '@/stores/user' // 创建axios实例 const service = axios.create({ - baseURL: 'http://192.168.15.51:8890' || '', // API基础路径,支持完整URL + baseURL: 'http://192.168.15.53:8890' || '', // API基础路径,支持完整URL timeout: 100000, // 请求超时时间 headers: { 'Content-Type': 'application/json;charset=UTF-8' diff --git a/my-vue-app/src/views/person/components/SalesTimelineWithTaskList.vue b/my-vue-app/src/views/person/components/SalesTimelineWithTaskList.vue index 50b47f2..e74f809 100644 --- a/my-vue-app/src/views/person/components/SalesTimelineWithTaskList.vue +++ b/my-vue-app/src/views/person/components/SalesTimelineWithTaskList.vue @@ -56,8 +56,8 @@