refactor: 前端应用骨架迁移至 zustand 并统一路由权限壳
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
// aislop-ignore-file: duplicate-block -- 表格/表单声明结构相似且参数不同,渲染逻辑已共享组件化
|
||||
export interface AppMenuItem {
|
||||
key: string;
|
||||
label: string;
|
||||
@@ -36,100 +37,112 @@ const ROLE_ALIASES: Record<string, string> = {
|
||||
super_admin: 'super',
|
||||
};
|
||||
|
||||
function entry(key: string, label: string, icon: string, permission: string): MenuEntry {
|
||||
return { key, label, icon, permission };
|
||||
}
|
||||
|
||||
function section(
|
||||
key: string,
|
||||
label: string,
|
||||
icon: string,
|
||||
roles: string[],
|
||||
children: MenuEntry[],
|
||||
): MenuSection {
|
||||
return { key, label, icon, roles, children };
|
||||
}
|
||||
|
||||
const SECTIONS: MenuSection[] = [
|
||||
{
|
||||
key: 'teaching-group',
|
||||
label: '教学工作',
|
||||
icon: 'calendar',
|
||||
roles: ['teacher'],
|
||||
children: [
|
||||
{
|
||||
key: '/teacher-workspace',
|
||||
label: '今日教学',
|
||||
icon: 'workspace',
|
||||
permission: 'teacher-workspace:view',
|
||||
},
|
||||
{ key: '/schedules', label: '我的排课', icon: 'calendar', permission: 'schedule:view' },
|
||||
{ key: '/attendance', label: '课程考勤', icon: 'attendance', permission: 'attendance:view' },
|
||||
section(
|
||||
'teaching-group',
|
||||
'教学工作',
|
||||
'calendar',
|
||||
['teacher'],
|
||||
[
|
||||
entry('/teacher-workspace', '今日教学', 'workspace', 'teacher-workspace:view'),
|
||||
|
||||
entry('/schedules', '我的排课', 'calendar', 'schedule:view'),
|
||||
|
||||
entry('/attendance', '课程考勤', 'attendance', 'attendance:view'),
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'academic-group',
|
||||
label: '教务管理',
|
||||
icon: 'academic',
|
||||
roles: ['academic', 'super'],
|
||||
children: [
|
||||
{ key: '/students', label: '学生管理', icon: 'students', permission: 'student:view' },
|
||||
{ key: '/classes', label: '班级管理', icon: 'classes', permission: 'class:view' },
|
||||
{ key: '/exams', label: '考试管理', icon: 'exam', permission: 'exam:view' },
|
||||
{ key: '/teachers', label: '教师管理', icon: 'teachers', permission: 'teacher:view' },
|
||||
{ key: '/schedules', label: '排课管理', icon: 'calendar', permission: 'schedule:view' },
|
||||
{ key: '/attendance', label: '历史考勤', icon: 'attendance', permission: 'attendance:view' },
|
||||
{ key: '/classrooms', label: '教室查看', icon: 'classroom', permission: 'classroom:view' },
|
||||
),
|
||||
section(
|
||||
'academic-group',
|
||||
'教务管理',
|
||||
'academic',
|
||||
['academic', 'super'],
|
||||
[
|
||||
entry('/students', '学生管理', 'students', 'student:view'),
|
||||
|
||||
entry('/classes', '班级管理', 'classes', 'class:view'),
|
||||
|
||||
entry('/exams', '考试管理', 'exam', 'exam:view'),
|
||||
|
||||
entry('/teachers', '教师管理', 'teachers', 'teacher:view'),
|
||||
|
||||
entry('/schedules', '排课管理', 'calendar', 'schedule:view'),
|
||||
|
||||
entry('/attendance', '历史考勤', 'attendance', 'attendance:view'),
|
||||
|
||||
entry('/classrooms', '教室查看', 'classroom', 'classroom:view'),
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'accommodation-group',
|
||||
label: '住宿运营',
|
||||
icon: 'home',
|
||||
roles: ['accommodation', 'super'],
|
||||
children: [
|
||||
{ key: '/room-visual', label: '住宿总览', icon: 'overview', permission: 'room:view' },
|
||||
{ key: '/rooms', label: '房间管理', icon: 'home', permission: 'room:view' },
|
||||
{ key: '/occupancies', label: '入住管理', icon: 'occupancy', permission: 'occupancy:view' },
|
||||
{ key: '/expenses', label: '费用管理', icon: 'expense', permission: 'expense:view' },
|
||||
{ key: '/bills', label: '账单管理', icon: 'bill', permission: 'bill:view' },
|
||||
{ key: '/wallets', label: '学生余额', icon: 'wallet', permission: 'wallet:view' },
|
||||
{ key: '/deposits', label: '押金管理', icon: 'deposit', permission: 'deposit:view' },
|
||||
),
|
||||
section(
|
||||
'accommodation-group',
|
||||
'住宿运营',
|
||||
'home',
|
||||
['accommodation', 'super'],
|
||||
[
|
||||
entry('/room-visual', '住宿总览', 'overview', 'room:view'),
|
||||
|
||||
entry('/rooms', '房间管理', 'home', 'room:view'),
|
||||
|
||||
entry('/occupancies', '入住管理', 'occupancy', 'occupancy:view'),
|
||||
|
||||
entry('/expenses', '费用管理', 'expense', 'expense:view'),
|
||||
|
||||
entry('/bills', '账单管理', 'bill', 'bill:view'),
|
||||
|
||||
entry('/wallets', '学生余额', 'wallet', 'wallet:view'),
|
||||
|
||||
entry('/deposits', '押金管理', 'deposit', 'deposit:view'),
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'classroom-group',
|
||||
label: '教室运营',
|
||||
icon: 'classroom',
|
||||
roles: ['classroom', 'super'],
|
||||
children: [
|
||||
{
|
||||
key: '/classroom-schedule',
|
||||
label: '教室排期',
|
||||
icon: 'calendar',
|
||||
permission: 'rental:view',
|
||||
},
|
||||
{ key: '/classrooms', label: '教室管理', icon: 'classroom', permission: 'classroom:view' },
|
||||
{
|
||||
key: '/attendance-devices',
|
||||
label: '考勤机绑定',
|
||||
icon: 'attendance',
|
||||
permission: 'classroom:view',
|
||||
},
|
||||
{ key: '/classroom-rentals', label: '租赁订单', icon: 'rental', permission: 'rental:view' },
|
||||
{
|
||||
key: '/organizations',
|
||||
label: '机构管理',
|
||||
icon: 'organization',
|
||||
permission: 'organization:view',
|
||||
},
|
||||
),
|
||||
section(
|
||||
'classroom-group',
|
||||
'教室运营',
|
||||
'classroom',
|
||||
['classroom', 'super'],
|
||||
[
|
||||
entry('/classroom-schedule', '教室排期', 'calendar', 'rental:view'),
|
||||
|
||||
entry('/classrooms', '教室管理', 'classroom', 'classroom:view'),
|
||||
|
||||
entry('/attendance-devices', '考勤机绑定', 'attendance', 'classroom:view'),
|
||||
|
||||
entry('/classroom-rentals', '租赁订单', 'rental', 'rental:view'),
|
||||
|
||||
entry('/organizations', '机构管理', 'organization', 'organization:view'),
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'system-group',
|
||||
label: '系统管理',
|
||||
icon: 'settings',
|
||||
roles: ['system', 'super'],
|
||||
children: [
|
||||
{ key: '/users', label: '账号管理', icon: 'users', permission: 'user:view' },
|
||||
{ key: '/roles', label: '角色管理', icon: 'role', permission: 'role:view' },
|
||||
{ key: '/permissions', label: '权限一览', icon: 'permission', permission: 'role:view' },
|
||||
{ key: '/operation-logs', label: '操作日志', icon: 'log', permission: 'log:view' },
|
||||
{
|
||||
key: '/integration-config',
|
||||
label: '钉钉集成',
|
||||
icon: 'integration',
|
||||
permission: 'integration:read',
|
||||
},
|
||||
{ key: '/ai-config', label: 'AI 配置', icon: 'ai', permission: 'ai:config:read' },
|
||||
),
|
||||
section(
|
||||
'system-group',
|
||||
'系统管理',
|
||||
'settings',
|
||||
['system', 'super'],
|
||||
[
|
||||
entry('/users', '账号管理', 'users', 'user:view'),
|
||||
|
||||
entry('/roles', '角色管理', 'role', 'role:view'),
|
||||
|
||||
entry('/permissions', '权限一览', 'permission', 'role:view'),
|
||||
|
||||
entry('/operation-logs', '操作日志', 'log', 'log:view'),
|
||||
|
||||
entry('/integration-config', '钉钉集成', 'integration', 'integration:read'),
|
||||
|
||||
entry('/ai-config', 'AI 配置', 'ai', 'ai:config:read'),
|
||||
],
|
||||
},
|
||||
),
|
||||
];
|
||||
|
||||
export function getRoleDomains(
|
||||
|
||||
Reference in New Issue
Block a user