feat(system): 实现RuoYi风格的RBAC管理页面
新增系统资源工具函数库,包含树形结构构建、树过滤和数据范围中文标签转换;重构系统资源编辑器组件,改用树形选择器优化权限配置并新增表单验证;重构系统管理页面布局,统一使用RuoYi风格样式,新增多维度筛选搜索功能,优化各资源表格展示;新增用户密码重置功能,移除过时的useSystemResource钩子并更新测试用例。
This commit is contained in:
1 parent
994d07cfca
commit
f087663b5b
5 files changed
+350
-52
No files matched your search
@@ -1,9 +1,50 @@
|
||||
import { ref, watch, type Ref } from "vue";
|
||||
import { getSystemResource } from "@/api/client";
|
||||
import type { SystemRoleItem } from "@/types";
|
||||
|
||||
export type SystemResourceResponse = { items: unknown[] };
|
||||
export type SystemResourceFetcher = (resource: string) => Promise<SystemResourceResponse>;
|
||||
|
||||
type TreeSource = {
|
||||
id: string;
|
||||
name: string;
|
||||
parentId?: string | null;
|
||||
sortOrder?: number;
|
||||
};
|
||||
|
||||
export type SystemTreeNode<T extends TreeSource> = T & { children: Array<SystemTreeNode<T>> };
|
||||
|
||||
export function buildSystemTree<T extends TreeSource>(items: T[]): Array<SystemTreeNode<T>> {
|
||||
const nodes = new Map(items.map((item) => [item.id, { ...item, children: [] as Array<SystemTreeNode<T>> }]));
|
||||
const roots: Array<SystemTreeNode<T>> = [];
|
||||
const ordered = [...nodes.values()].sort((left, right) => (left.sortOrder ?? 0) - (right.sortOrder ?? 0) || left.name.localeCompare(right.name));
|
||||
for (const node of ordered) {
|
||||
if (node.parentId && nodes.has(node.parentId)) nodes.get(node.parentId)!.children.push(node);
|
||||
else roots.push(node);
|
||||
}
|
||||
return roots;
|
||||
}
|
||||
|
||||
export function filterSystemTree<T extends TreeSource>(nodes: Array<SystemTreeNode<T>>, keyword: string): Array<SystemTreeNode<T>> {
|
||||
const normalized = keyword.trim().toLowerCase();
|
||||
if (!normalized) return nodes;
|
||||
return nodes.reduce<Array<SystemTreeNode<T>>>((result, node) => {
|
||||
const children = filterSystemTree(node.children, normalized);
|
||||
if (node.name.toLowerCase().includes(normalized) || children.length) result.push({ ...node, children });
|
||||
return result;
|
||||
}, []);
|
||||
}
|
||||
|
||||
export function dataScopeLabel(scope: SystemRoleItem["dataScope"] | string): string {
|
||||
return {
|
||||
all: "全部数据",
|
||||
dept: "本部门数据",
|
||||
dept_and_children: "本部门及以下",
|
||||
custom_dept: "自定义数据",
|
||||
self: "本人数据",
|
||||
}[scope] ?? scope;
|
||||
}
|
||||
|
||||
function errorMessage(error: unknown) {
|
||||
return error instanceof Error ? error.message : "系统数据加载失败";
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user