feat: 1. 本地化思源黑体的字体包并优先使用。

2. 添加权限映射表和全局查看权限的hook,便于路由控制不同权限按钮显示/隐藏。
3. 删除评查点分组的部分旧api方法。
4. 对接评查点分组接口,文档类型接口, 提示词管理接口, 入口模块管理的接口。
5. 优化角色权限管理的接口,完善不用地区的访问权限认证。
6. 优化主页交叉评查和设置的入口样式和布局。
7. 优化评查点分组,评查规则的功能权限校验。
This commit is contained in:
2025-11-29 10:37:35 +08:00
parent 61facf5d71
commit 30e100ef3e
29 changed files with 2527 additions and 2126 deletions
+42 -10
View File
@@ -100,7 +100,8 @@ export interface UserInfo {
nick_name: string;
phone_number?: string;
email?: string;
ou_name: string;
area: string; // v3.3: 地区字段,用于权限隔离(省/市级别)
ou_name: string; // 部门名称,用于组织显示(部门级别)
status: number;
is_leader: boolean;
}
@@ -277,6 +278,8 @@ export async function getRoutes(): Promise<RouteInfo[]> {
children: route.children ? route.children.map(mapRouteData) : undefined
});
console.log('获取当前用户的路由', routes.map(mapRouteData) )
return routes.map(mapRouteData);
} catch (error) {
console.error('❌ [getRoutes] 获取路由数据失败:', error);
@@ -316,6 +319,8 @@ export async function getRoleRoutePermissions(roleId: number): Promise<RoleRoute
created_at: new Date().toISOString()
}));
console.log("路由权限数据", permissions)
return permissions;
} catch (error) {
console.error('❌ [getRoleRoutePermissions] 获取角色路由权限失败:', error);
@@ -352,7 +357,7 @@ export async function getRoleRoutesWithPermissions(roleId: number): Promise<{
}
// 递归转换路由数据格式
const mapRouteData = (route: any): RouteInfo => ({
const mapRouteData = (route: any): any => ({
id: route.id,
route_path: route.route_path,
route_name: route.route_name,
@@ -364,6 +369,8 @@ export async function getRoleRoutesWithPermissions(roleId: number): Promise<{
status: route.status || 1,
parent_id: route.parent_id || null,
component: route.component,
// v3.2: 添加 enabled 字段
enabled: route.enabled !== undefined ? route.enabled : true,
// v3.0: 转换permissions数组
permissions: Array.isArray(route.permissions) ? route.permissions.map((p: any) => ({
id: p.id,
@@ -377,11 +384,14 @@ export async function getRoleRoutesWithPermissions(roleId: number): Promise<{
const mappedRoutes = routes.map(mapRouteData);
// 收集所有已选中的路由ID
const collectRouteIds = (routes: RouteInfo[]): number[] => {
// v3.2: 收集已启用的路由IDenabled=true
const collectRouteIds = (routes: any[]): number[] => {
let ids: number[] = [];
routes.forEach(route => {
ids.push(route.id);
// v3.2: 只收集 enabled=true 的路由
if (route.enabled) {
ids.push(route.id);
}
if (route.children) {
ids = ids.concat(collectRouteIds(route.children));
}
@@ -468,14 +478,14 @@ export async function saveRoleApiPermissions(
}
/**
* 更新角色的路由权限
* 更新角色的路由权限 - v3.2更新
* @param roleId 角色ID
* @param routeIds 路由ID数组
*/
export async function updateRoleRoutePermissions(
roleId: number,
routeIds: number[]
): Promise<{ success: boolean; message: string }> {
): Promise<{ success: boolean; message: string; code?: number }> {
try {
// 导入 axios-client 的 put 函数
const { put } = await import('~/api/axios-client');
@@ -491,13 +501,33 @@ export async function updateRoleRoutePermissions(
throw new Error(response.error);
}
// 后端响应格式: { code: 200, msg: "success", data: { role_id, assigned_count, removed_count, route_ids } }
// v3.3: 处理权限不足错误
if (response.data && response.data.code === 4003) {
return {
success: false,
message: response.data.msg || '权限不足:仅省级管理员可以修改角色路由权限',
code: 4003
};
}
// v3.2: 新响应格式: { code: 200, msg: "success", data: { role_id, enabled_count, disabled_count, inserted_count, route_ids } }
let message = '角色权限更新成功';
if (response.data && response.data.msg) {
message = response.data.msg;
} else if (response.data && response.data.data) {
const { assigned_count, removed_count } = response.data.data;
message = `成功分配 ${assigned_count} 个路由,移除了 ${removed_count} 个旧路由`;
const { enabled_count, disabled_count, inserted_count } = response.data.data;
if (enabled_count !== undefined && disabled_count !== undefined) {
message = `成功启用 ${enabled_count} 个路由,禁用 ${disabled_count} 个路由`;
if (inserted_count && inserted_count > 0) {
message += `,新增 ${inserted_count} 个路由关联`;
}
} else {
// 兼容旧版本响应格式
const { assigned_count, removed_count } = response.data.data;
if (assigned_count !== undefined && removed_count !== undefined) {
message = `成功分配 ${assigned_count} 个路由,移除了 ${removed_count} 个旧路由`;
}
}
}
return { success: true, message };
@@ -558,6 +588,7 @@ export async function getRoleUsers(
nick_name: user.nick_name,
phone_number: user.phone_number || '',
email: user.email || '',
area: user.area || '', // v3.3: 地区字段,用于权限隔离
ou_name: user.ou_name,
status: user.status || 1,
is_leader: user.is_leader || false
@@ -619,6 +650,7 @@ export async function getAllUsers(params?: {
nick_name: user.nick_name,
phone_number: user.phone_number || '',
email: user.email || '',
area: user.area || '', // v3.3: 地区字段,用于权限隔离
ou_name: user.ou_name,
status: user.status || 1,
is_leader: user.is_leader || false