From 9c67793fc325ae537d3b22c5a3e72cbc2f9f0a6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E5=BC=BA?= <357099073@qq.com> Date: Wed, 5 Nov 2025 17:50:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=A7=9F=E6=88=B7=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc/src/api/menu.js | 8 ++ pc/src/components/CommonAside.vue | 18 +++- pc/src/components/CommonHeader.vue | 17 +++- pc/src/router/index.js | 19 +++- .../apps/knowledge/components/detail.vue | 5 - pc/src/views/apps/knowledge/index.vue | 2 - pc/src/views/apps/oa/employees/index.vue | 86 +++++++++++++++-- pc/src/views/login/index.vue | 17 +++- pc/src/views/system/users/index.vue | 2 + server/controllers/auth.go | 6 +- server/controllers/employee.go | 92 ++++++++++-------- server/controllers/knowledge.go | 94 +++++++++++++++++-- server/controllers/menu.go | 32 +++++++ server/controllers/user.go | 2 + server/middleware/jwt.go | 8 ++ server/models/employee.go | 18 +++- server/models/knowledge.go | 65 ++++++++++--- server/models/menu.go | 68 ++++++++++++++ server/routers/router.go | 1 + 19 files changed, 473 insertions(+), 87 deletions(-) diff --git a/pc/src/api/menu.js b/pc/src/api/menu.js index 8919d3b..842e6da 100644 --- a/pc/src/api/menu.js +++ b/pc/src/api/menu.js @@ -8,6 +8,14 @@ export function getAllMenus() { }); } +// 获取租户菜单(根据角色权限) +export function getTenantMenus(roleId) { + return request({ + url: `/api/menus/tenant/${roleId}`, + method: "get", + }); +} + // 更新菜单状态 export function updateMenuStatus(menuId, status) { return request({ diff --git a/pc/src/components/CommonAside.vue b/pc/src/components/CommonAside.vue index 5012535..6442b30 100644 --- a/pc/src/components/CommonAside.vue +++ b/pc/src/components/CommonAside.vue @@ -34,7 +34,7 @@ import { ref, computed, onMounted, onUnmounted } from 'vue'; import { useRouter, useRoute } from 'vue-router'; import { useAllDataStore } from '@/stores'; -import { getAllMenus } from '@/api/menu'; +import { getAllMenus, getTenantMenus } from '@/api/menu'; import MenuTreeItem from './MenuTreeItem.vue'; const emit = defineEmits(['menu-click']); @@ -196,8 +196,20 @@ const transformMenuData = (menus) => { const fetchMenus = async () => { loading.value = true; try { - // 直接从接口获取菜单数据,不使用缓存 - const res = await getAllMenus(); + // 获取用户信息,判断登录类型 + const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}'); + const loginType = userInfo.type; // "user" 或 "employee" + const roleId = userInfo.role; // 角色ID + + let res; + if (loginType === "employee" && roleId) { + // 员工登录,使用getTenantMenus接口 + res = await getTenantMenus(roleId); + } else { + // 用户登录,使用getAllMenus接口 + res = await getAllMenus(); + } + if (res && res.success && res.data) { const menuData = res.data; // 转换并排序菜单数据 diff --git a/pc/src/components/CommonHeader.vue b/pc/src/components/CommonHeader.vue index b1c6695..256c442 100644 --- a/pc/src/components/CommonHeader.vue +++ b/pc/src/components/CommonHeader.vue @@ -62,7 +62,7 @@ import { useRouter, useRoute } from "vue-router"; import { useAllDataStore } from "@/stores"; import { useAuthStore } from "@/stores/auth"; import { User, SwitchButton, Sunny, Moon, Refresh } from '@element-plus/icons-vue'; -import { getAllMenus } from '@/api/menu'; +import { getAllMenus, getTenantMenus } from '@/api/menu'; import { ElMessage } from 'element-plus'; const router = useRouter(); @@ -111,7 +111,20 @@ function saveMenuToCache(menus: Menu[]) { // 从API加载菜单 async function loadMenuFromAPI(updateCache = true) { try { - const res = await getAllMenus(); + // 获取用户信息,判断登录类型 + const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}'); + const loginType = userInfo.type; // "user" 或 "employee" + const roleId = userInfo.role; // 角色ID + + let res; + if (loginType === "employee" && roleId) { + // 员工登录,使用getTenantMenus接口 + res = await getTenantMenus(roleId); + } else { + // 用户登录,使用getAllMenus接口 + res = await getAllMenus(); + } + const menus = res.data || []; if (updateCache && menus.length > 0) { saveMenuToCache(menus); diff --git a/pc/src/router/index.js b/pc/src/router/index.js index b5c1ed9..46b32ea 100644 --- a/pc/src/router/index.js +++ b/pc/src/router/index.js @@ -71,9 +71,22 @@ export async function loadAndAddDynamicRoutes() { // 创建加载 Promise routesLoadingPromise = (async () => { try { - // 直接从 API 获取菜单数据 - const { getAllMenus } = await import("@/api/menu"); - const res = await getAllMenus(); + // 获取用户信息,判断登录类型 + const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}'); + const loginType = userInfo.type; // "user" 或 "employee" + const roleId = userInfo.role; // 角色ID + + // 根据登录类型选择不同的菜单接口 + const { getAllMenus, getTenantMenus } = await import("@/api/menu"); + let res; + + if (loginType === "employee" && roleId) { + // 员工登录,使用getTenantMenus接口 + res = await getTenantMenus(roleId); + } else { + // 用户登录,使用getAllMenus接口 + res = await getAllMenus(); + } if (res && res.success && res.data) { // 添加动态路由 diff --git a/pc/src/views/apps/knowledge/components/detail.vue b/pc/src/views/apps/knowledge/components/detail.vue index 5565891..5f1e8b7 100644 --- a/pc/src/views/apps/knowledge/components/detail.vue +++ b/pc/src/views/apps/knowledge/components/detail.vue @@ -27,10 +27,6 @@

基本信息

-
- 标题: - {{ formData.title }} -
分类: {{ formData.category }} @@ -190,7 +186,6 @@ function handleDelete() {