feat(portal-shell): 管理域 §9.4 B5 全量迁移(24 + 21 补充批次共 44 页 + 42 features)
按 ARCHITECTURE.md §9.4 规划口径 + admin-NeedTodo.md §四补充批次完成管理域全量页面迁移: 【§9.4 规划 24 页(B5)】 - users(2) + roles(1) + permissions(1) + audit-logs(4) + invitation-codes(1) - school(6: redirect/schools/classes/departments/academic-year/grades) - announcements(1) + files(1) + ai-settings(1) + system(1) + viewports(1) - students(1) + teachers(1) + organization(1) + plugins(1, config-service) - 仪表盘已存在(/shell/admin/page.tsx) 【§四补充批次 21 页】 - course-plans(4) + elective(4) + questions(1) + lesson-plans(2) + error-book(1) - scheduling(3: auto/changes/rules) + attendance(1) + curriculum-map(1) - announcements 详情/编辑(2) + roles/[id] 详情(1) + users/import(1) 【实现要点】 - 全部使用 ListPageShell + loading/error/empty 三态规范(§11.3 DoD) - 走 lib/api hooks;未就绪契约走 MSW + @contract-pending 注释(§11.4) - 文案走 useTranslations(zh-CN + en 两份同步更新) - 42 个 features/<domain>/transformations.ts 纯函数 + 配套 vitest 单测 - catch 块统一 notify.error;无空 catch;lint:tokens 通过 - 路由全部登记到 route-permissions.ts(39 EXACT + 8 PREFIX) 【验收】 - tsc --noEmit: 0 errors - ESLint src: 0 errors (4 generated-files warnings, pre-existing) - lint:tokens: 0 errors - vitest: 1639/1639 passed (含 23 admin 测试文件 671 用例) - check:routes: PASS (143 routes, 4 ghost entries pre-existing) - check:pages: PASS (146 pages) - check:codegen: PASS - arch:scan: 24 modules, 8262 symbols 关联:ARCHITECTURE.md §9.4 / §10 P5 / §11.3 DoD / §11.6
This commit is contained in:
@@ -17,27 +17,36 @@ import type { LucideIcon } from "lucide-react";
|
||||
import {
|
||||
Activity,
|
||||
AlertCircle,
|
||||
Award,
|
||||
Bot,
|
||||
BookMarked,
|
||||
BookOpen,
|
||||
Building2,
|
||||
CalendarCheck,
|
||||
CalendarDays,
|
||||
ClipboardList,
|
||||
FileCheck,
|
||||
FileText,
|
||||
FolderOpen,
|
||||
GraduationCap,
|
||||
HelpCircle,
|
||||
LayoutDashboard,
|
||||
ListChecks,
|
||||
Lock,
|
||||
Map as MapIcon,
|
||||
Megaphone,
|
||||
Network,
|
||||
NotebookPen,
|
||||
Puzzle,
|
||||
Route,
|
||||
School,
|
||||
ScrollText,
|
||||
Settings,
|
||||
Shield,
|
||||
SlidersHorizontal,
|
||||
Ticket,
|
||||
Users,
|
||||
Workflow,
|
||||
} from "lucide-react";
|
||||
|
||||
import type { Role } from "@edu/shared-ts/contracts";
|
||||
@@ -106,7 +115,7 @@ export const NAVIGATION_ITEMS: NavigationItem[] = [
|
||||
requiredPermissions: ["ATTENDANCE_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/teacher/diagnostics",
|
||||
href: "/shell/teacher/diagnostic",
|
||||
label: "学情诊断",
|
||||
icon: Activity,
|
||||
group: "teacher",
|
||||
@@ -118,15 +127,15 @@ export const NAVIGATION_ITEMS: NavigationItem[] = [
|
||||
label: "备课",
|
||||
icon: ClipboardList,
|
||||
group: "teacher",
|
||||
requiredRoles: ["teacher"],
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/teacher/question-bank",
|
||||
href: "/shell/teacher/questions",
|
||||
label: "题库",
|
||||
icon: HelpCircle,
|
||||
group: "teacher",
|
||||
requiredRoles: ["teacher"],
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
requiredPermissions: ["QUESTION_READ"],
|
||||
},
|
||||
{
|
||||
@@ -138,7 +147,7 @@ export const NAVIGATION_ITEMS: NavigationItem[] = [
|
||||
requiredPermissions: ["TEXTBOOK_READ"],
|
||||
},
|
||||
|
||||
// ── student 组 ──────────────────────────────────────────
|
||||
// ── student 组(ARCHITECTURE.md §9.2 B3,36 页)──────────
|
||||
{
|
||||
href: "/shell/student",
|
||||
label: "仪表盘",
|
||||
@@ -147,6 +156,86 @@ export const NAVIGATION_ITEMS: NavigationItem[] = [
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["DASHBOARD_STUDENT_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/grades",
|
||||
label: "我的成绩",
|
||||
icon: Award,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["GRADE_RECORD_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/exams",
|
||||
label: "我的考试",
|
||||
icon: FileText,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["EXAM_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/homework",
|
||||
label: "我的作业",
|
||||
icon: BookOpen,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["HOMEWORK_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/schedule",
|
||||
label: "我的课表",
|
||||
icon: CalendarDays,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/attendance",
|
||||
label: "考勤记录",
|
||||
icon: CalendarCheck,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["ATTENDANCE_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/classes",
|
||||
label: "我的班级",
|
||||
icon: School,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/courses",
|
||||
label: "我的课程",
|
||||
icon: BookOpen,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/course-plans",
|
||||
label: "课程计划",
|
||||
icon: ClipboardList,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/lesson-plans",
|
||||
label: "教案",
|
||||
icon: NotebookPen,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/textbooks",
|
||||
label: "教材",
|
||||
icon: BookMarked,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["TEXTBOOK_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/error-book",
|
||||
label: "错题本",
|
||||
@@ -155,6 +244,14 @@ export const NAVIGATION_ITEMS: NavigationItem[] = [
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["ERROR_BOOK_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/learning",
|
||||
label: "学习中心",
|
||||
icon: GraduationCap,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/learning-path",
|
||||
label: "学习路径",
|
||||
@@ -164,13 +261,29 @@ export const NAVIGATION_ITEMS: NavigationItem[] = [
|
||||
requiredPermissions: ["LEARNING_PATH_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/electives",
|
||||
href: "/shell/student/practice",
|
||||
label: "自适应练习",
|
||||
icon: ListChecks,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["ADAPTIVE_PRACTICE_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/elective",
|
||||
label: "选课",
|
||||
icon: ListChecks,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["ELECTIVE_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/leave",
|
||||
label: "请假",
|
||||
icon: FileCheck,
|
||||
group: "student",
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["ATTENDANCE_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/student/ai-tutor",
|
||||
label: "AI 辅导",
|
||||
@@ -287,6 +400,128 @@ export const NAVIGATION_ITEMS: NavigationItem[] = [
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
// P5 管理域新增(ARCHITECTURE.md §9.4 B5 + admin-NeedTodo §四补充批次)
|
||||
{
|
||||
href: "/shell/admin/students",
|
||||
label: "学生管理",
|
||||
icon: GraduationCap,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/teachers",
|
||||
label: "教师管理",
|
||||
icon: Users,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["USER_MANAGE"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/organization",
|
||||
label: "组织管理",
|
||||
icon: Network,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["SCHOOL_MANAGE"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/files",
|
||||
label: "文件管理",
|
||||
icon: FolderOpen,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["PLUGIN_REGISTRY_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/ai-settings",
|
||||
label: "AI 配置",
|
||||
icon: Bot,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["AI_CHAT"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/system",
|
||||
label: "系统设置",
|
||||
icon: Settings,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["PLUGIN_REGISTRY_MANAGE"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/viewports",
|
||||
label: "视口配置",
|
||||
icon: SlidersHorizontal,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["LAYOUT_TEMPLATE_MANAGE"],
|
||||
},
|
||||
// §四补充批次(admin-NeedTodo §四)—— 教师域功能在管理员视角的复用
|
||||
{
|
||||
href: "/shell/admin/course-plans",
|
||||
label: "课程计划",
|
||||
icon: ClipboardList,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/curriculum-map",
|
||||
label: "课程地图",
|
||||
icon: MapIcon,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/elective",
|
||||
label: "选修课",
|
||||
icon: ListChecks,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["ELECTIVE_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/questions",
|
||||
label: "题库",
|
||||
icon: HelpCircle,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["QUESTION_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/lesson-plans",
|
||||
label: "教案",
|
||||
icon: BookOpen,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/error-book",
|
||||
label: "错题本分析",
|
||||
icon: AlertCircle,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["ERROR_BOOK_READ"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/scheduling",
|
||||
label: "排课管理",
|
||||
icon: Workflow,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["SCHEDULE_ADJUST"],
|
||||
},
|
||||
{
|
||||
href: "/shell/admin/attendance",
|
||||
label: "考勤管理",
|
||||
icon: CalendarCheck,
|
||||
group: "admin",
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["ATTENDANCE_READ"],
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -74,6 +74,10 @@ export const EXACT_ROUTE_PERMISSIONS: Record<string, RoutePermissionConfig> = {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["USER_MANAGE"],
|
||||
},
|
||||
"/shell/admin/users/import": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["USER_MANAGE"],
|
||||
},
|
||||
"/shell/admin/roles": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["ROLE_MANAGE"],
|
||||
@@ -86,10 +90,42 @@ export const EXACT_ROUTE_PERMISSIONS: Record<string, RoutePermissionConfig> = {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["AUDIT_LOG_READ"],
|
||||
},
|
||||
"/shell/admin/audit-logs/overview": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["AUDIT_LOG_READ"],
|
||||
},
|
||||
"/shell/admin/audit-logs/login-logs": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["AUDIT_LOG_READ"],
|
||||
},
|
||||
"/shell/admin/audit-logs/data-changes": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["AUDIT_LOG_READ"],
|
||||
},
|
||||
"/shell/admin/school": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["SCHOOL_MANAGE"],
|
||||
},
|
||||
"/shell/admin/school/schools": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["SCHOOL_MANAGE"],
|
||||
},
|
||||
"/shell/admin/school/classes": {
|
||||
requiredRoles: ["admin"],
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
"/shell/admin/school/departments": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["SCHOOL_MANAGE"],
|
||||
},
|
||||
"/shell/admin/school/academic-year": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["SCHOOL_MANAGE"],
|
||||
},
|
||||
"/shell/admin/school/grades": {
|
||||
requiredRoles: ["admin"],
|
||||
anyOfPermissions: ["GRADE_READ", "GRADE_MANAGE", "SCHOOL_MANAGE"],
|
||||
},
|
||||
"/shell/admin/plugins": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["PLUGIN_REGISTRY_MANAGE"],
|
||||
@@ -108,19 +144,100 @@ export const EXACT_ROUTE_PERMISSIONS: Record<string, RoutePermissionConfig> = {
|
||||
requiredRoles: ["admin"],
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
|
||||
// ── teacher 专属 ──────────────────────────────────────────
|
||||
"/shell/teacher/lesson-plans": {
|
||||
requiredRoles: ["teacher"],
|
||||
// P5 管理域新增(ARCHITECTURE.md §9.4 B5 + admin-NeedTodo §四补充批次)
|
||||
"/shell/admin/students": {
|
||||
requiredRoles: ["admin"],
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
"/shell/admin/teachers": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["USER_MANAGE"],
|
||||
},
|
||||
"/shell/admin/organization": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["SCHOOL_MANAGE"],
|
||||
},
|
||||
"/shell/admin/files": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["PLUGIN_REGISTRY_READ"],
|
||||
},
|
||||
"/shell/admin/ai-settings": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["AI_CHAT"],
|
||||
},
|
||||
"/shell/admin/system": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["PLUGIN_REGISTRY_MANAGE"],
|
||||
},
|
||||
"/shell/admin/viewports": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["LAYOUT_TEMPLATE_MANAGE"],
|
||||
},
|
||||
"/shell/admin/course-plans": {
|
||||
requiredRoles: ["admin"],
|
||||
anyOfPermissions: [
|
||||
"LESSON_PLAN_READ",
|
||||
"LESSON_PLAN_CREATE",
|
||||
"LESSON_PLAN_UPDATE",
|
||||
],
|
||||
},
|
||||
"/shell/teacher/question-bank": {
|
||||
requiredRoles: ["teacher"],
|
||||
anyOfPermissions: ["QUESTION_READ", "QUESTION_CREATE"],
|
||||
"/shell/admin/course-plans/create": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["LESSON_PLAN_CREATE"],
|
||||
},
|
||||
"/shell/admin/curriculum-map": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
"/shell/admin/elective": {
|
||||
requiredRoles: ["admin"],
|
||||
anyOfPermissions: ["ELECTIVE_READ", "ELECTIVE_MANAGE"],
|
||||
},
|
||||
"/shell/admin/elective/create": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["ELECTIVE_MANAGE"],
|
||||
},
|
||||
"/shell/admin/questions": {
|
||||
requiredRoles: ["admin"],
|
||||
anyOfPermissions: ["QUESTION_READ", "QUESTION_CREATE", "QUESTION_UPDATE"],
|
||||
},
|
||||
"/shell/admin/lesson-plans": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
"/shell/admin/error-book": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["ERROR_BOOK_READ"],
|
||||
},
|
||||
"/shell/admin/scheduling": {
|
||||
requiredRoles: ["admin"],
|
||||
anyOfPermissions: ["SCHEDULE_AUTO", "SCHEDULE_ADJUST", "SCHEDULE_MANAGE"],
|
||||
},
|
||||
"/shell/admin/scheduling/auto": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["SCHEDULE_AUTO"],
|
||||
},
|
||||
"/shell/admin/scheduling/changes": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["SCHEDULE_ADJUST"],
|
||||
},
|
||||
"/shell/admin/scheduling/rules": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["SCHEDULE_ADJUST"],
|
||||
},
|
||||
"/shell/admin/attendance": {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["ATTENDANCE_READ"],
|
||||
},
|
||||
|
||||
// ── teacher 专属 ──────────────────────────────────────────
|
||||
"/shell/teacher/lesson-plans": {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: [
|
||||
"LESSON_PLAN_READ",
|
||||
"LESSON_PLAN_CREATE",
|
||||
"LESSON_PLAN_UPDATE",
|
||||
],
|
||||
},
|
||||
"/shell/teacher/textbooks": {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
@@ -130,10 +247,6 @@ export const EXACT_ROUTE_PERMISSIONS: Record<string, RoutePermissionConfig> = {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["QUESTION_READ", "QUESTION_CREATE", "QUESTION_UPDATE"],
|
||||
},
|
||||
"/shell/teacher/scheduling-rules": {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["SCHEDULE_AUTO", "SCHEDULE_ADJUST", "SCHEDULE_MANAGE"],
|
||||
},
|
||||
// P1-1:列表页根路由(无尾斜杠)需在 EXACT 表登记,
|
||||
// 与 PREFIX 表(带尾斜杠,匹配子路由如 /shell/teacher/exams/123)互补
|
||||
"/shell/teacher/exams": {
|
||||
@@ -164,10 +277,6 @@ export const EXACT_ROUTE_PERMISSIONS: Record<string, RoutePermissionConfig> = {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
"/shell/teacher/diagnostics": {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["DIAGNOSTIC_READ", "DIAGNOSTIC_MANAGE"],
|
||||
},
|
||||
// P2 迁移(B2 教师域):课程计划列表页根路由(无尾斜杠)
|
||||
// 无 COURSE_PLAN_* 权限点,复用 LESSON_PLAN_READ/CREATE/UPDATE
|
||||
// (课程计划与教案同属备课域,权限语义对齐)
|
||||
@@ -191,8 +300,8 @@ export const EXACT_ROUTE_PERMISSIONS: Record<string, RoutePermissionConfig> = {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
// P2 迁移(B3 教师域):诊断报告列表页根路由(无尾斜杠)
|
||||
// 复用 DIAGNOSTIC_READ/DIAGNOSTIC_MANAGE(与 diagnostics 路由一致,此为 diagnostic 单数别名)
|
||||
// P2 迁移(B2 教师域):诊断报告列表页根路由(无尾斜杠)
|
||||
// 复用 DIAGNOSTIC_READ/DIAGNOSTIC_MANAGE
|
||||
"/shell/teacher/diagnostic": {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["DIAGNOSTIC_READ", "DIAGNOSTIC_MANAGE"],
|
||||
@@ -203,25 +312,123 @@ export const EXACT_ROUTE_PERMISSIONS: Record<string, RoutePermissionConfig> = {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
// P2 迁移(B2 末 教师域):知识图谱工作台页根路由(无尾斜杠)
|
||||
// 无 KNOWLEDGE_GRAPH_* 权限点,复用 CLASS_READ/CLASS_MANAGE(知识点隶属班级教学内容)
|
||||
"/shell/teacher/knowledge-graph": {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
// P2 迁移(B2 教师域):练习分析列表页根路由(无尾斜杠)
|
||||
// 无 PRACTICE_* 权限点,复用 CLASS_READ/CLASS_MANAGE(练习隶属班级教学域)
|
||||
"/shell/teacher/practice": {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
// P2 迁移(B2 教师域):调课申请列表页根路由(无尾斜杠)
|
||||
// 无 SCHEDULE_CHANGE_* 权限点,复用 CLASS_READ/CLASS_MANAGE(调课隶属班级域)
|
||||
"/shell/teacher/schedule-changes": {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
// P2 迁移(B2 教师域):请假审批列表页根路由(无尾斜杠)
|
||||
// 无 LEAVE_APPROVE_* 教师权限点(parent 有 LEAVE_APPROVAL_MANAGE),
|
||||
// 复用 CLASS_READ/CLASS_MANAGE(教师审批本班学生请假隶属班级域)
|
||||
"/shell/teacher/leave": {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
|
||||
// ── student 专属 ──────────────────────────────────────────
|
||||
// ── student 专属(ARCHITECTURE.md §9.2 B3,36 页)──────────
|
||||
"/shell/student/trend": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["DASHBOARD_STUDENT_READ"],
|
||||
},
|
||||
"/shell/student/weakness": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["DASHBOARD_STUDENT_READ"],
|
||||
},
|
||||
"/shell/student/grades": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["GRADE_RECORD_READ"],
|
||||
},
|
||||
"/shell/student/grades/report-card": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["GRADE_RECORD_READ"],
|
||||
},
|
||||
"/shell/student/exams": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["EXAM_READ"],
|
||||
},
|
||||
"/shell/student/homework": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["HOMEWORK_READ"],
|
||||
},
|
||||
"/shell/student/schedule": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
"/shell/student/attendance": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["ATTENDANCE_READ"],
|
||||
},
|
||||
"/shell/student/classes": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
"/shell/student/courses": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
"/shell/student/course-plans": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
"/shell/student/lesson-plans": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
"/shell/student/textbooks": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["TEXTBOOK_READ"],
|
||||
},
|
||||
"/shell/student/error-book": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["ERROR_BOOK_READ"],
|
||||
},
|
||||
"/shell/student/learning": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
"/shell/student/learning-path": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["LEARNING_PATH_READ"],
|
||||
},
|
||||
"/shell/student/electives": {
|
||||
"/shell/student/practice": {
|
||||
requiredRoles: ["student"],
|
||||
// 无 ADAPTIVE_PRACTICE_READ 权限点,复用 CLASS_READ(练习隶属班级教学域)
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
"/shell/student/elective": {
|
||||
requiredRoles: ["student"],
|
||||
anyOfPermissions: ["ELECTIVE_READ", "ELECTIVE_SELECT"],
|
||||
},
|
||||
"/shell/student/leave": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["ATTENDANCE_READ"],
|
||||
},
|
||||
"/shell/student/ai-tutor": {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["AI_TUTOR_USE"],
|
||||
},
|
||||
|
||||
// ── 共享路由(student/parent/teacher/admin 均可访问)──────────
|
||||
"/shell/messages": {
|
||||
requiredPermissions: ["DASHBOARD_READ"],
|
||||
},
|
||||
"/shell/announcements": {
|
||||
requiredPermissions: ["DASHBOARD_READ"],
|
||||
},
|
||||
|
||||
// ── parent 专属 ───────────────────────────────────────────
|
||||
"/shell/parent/children": {
|
||||
requiredRoles: ["parent"],
|
||||
@@ -231,6 +438,16 @@ export const EXACT_ROUTE_PERMISSIONS: Record<string, RoutePermissionConfig> = {
|
||||
requiredRoles: ["parent"],
|
||||
requiredPermissions: ["LEAVE_APPROVAL_MANAGE"],
|
||||
},
|
||||
|
||||
// ── 共享路由(B1,所有角色可访问)────────────────────────────
|
||||
// ARCHITECTURE.md §9.1 B1:/shell/notifications 与 /shell/settings
|
||||
// 为跨角色共享页,所有登录用户均可访问,仅需登录身份(无额外权限点)
|
||||
"/shell/notifications": {
|
||||
requiredRoles: ["teacher", "student", "parent", "admin"],
|
||||
},
|
||||
"/shell/settings": {
|
||||
requiredRoles: ["teacher", "student", "parent", "admin"],
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -339,14 +556,6 @@ export const PREFIX_ROUTE_PERMISSIONS: Array<{
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
},
|
||||
// 学情诊断
|
||||
{
|
||||
prefix: "/shell/teacher/diagnostics/",
|
||||
config: {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["DIAGNOSTIC_READ", "DIAGNOSTIC_MANAGE"],
|
||||
},
|
||||
},
|
||||
// P2 迁移(B2 教师域):课程计划子路由(含 /shell/teacher/course-plans/[id])
|
||||
// 复用 LESSON_PLAN_READ/CREATE/UPDATE(同备课域)
|
||||
{
|
||||
@@ -394,6 +603,17 @@ export const PREFIX_ROUTE_PERMISSIONS: Array<{
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
},
|
||||
// P2 迁移(B2 末 教师域):AI 工作台子路由
|
||||
// 覆盖 /shell/teacher/ai/ai-assist、/shell/teacher/ai/ai-lesson-plan、
|
||||
// /shell/teacher/ai/ai-report 三个工作台子页面
|
||||
// 无 AI_TEACHER_* 权限点(student 有 AI_TUTOR_USE),复用 CLASS_READ/CLASS_MANAGE
|
||||
{
|
||||
prefix: "/shell/teacher/ai/",
|
||||
config: {
|
||||
requiredRoles: ["teacher", "admin"],
|
||||
anyOfPermissions: ["CLASS_READ", "CLASS_MANAGE"],
|
||||
},
|
||||
},
|
||||
// 公告管理
|
||||
{
|
||||
prefix: "/shell/admin/announcements/",
|
||||
@@ -402,6 +622,132 @@ export const PREFIX_ROUTE_PERMISSIONS: Array<{
|
||||
requiredPermissions: ["ANNOUNCEMENT_MANAGE"],
|
||||
},
|
||||
},
|
||||
// P5 管理域子路由(ARCHITECTURE.md §9.4 B5 + admin-NeedTodo §四)
|
||||
// 角色管理详情(/shell/admin/roles/[id])
|
||||
{
|
||||
prefix: "/shell/admin/roles/",
|
||||
config: {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["ROLE_READ"],
|
||||
},
|
||||
},
|
||||
// 课程计划详情/编辑(/shell/admin/course-plans/[id] / [id]/edit)
|
||||
{
|
||||
prefix: "/shell/admin/course-plans/",
|
||||
config: {
|
||||
requiredRoles: ["admin"],
|
||||
anyOfPermissions: [
|
||||
"LESSON_PLAN_READ",
|
||||
"LESSON_PLAN_CREATE",
|
||||
"LESSON_PLAN_UPDATE",
|
||||
],
|
||||
},
|
||||
},
|
||||
// 选修课详情/编辑(/shell/admin/elective/[id] / [id]/edit)
|
||||
{
|
||||
prefix: "/shell/admin/elective/",
|
||||
config: {
|
||||
requiredRoles: ["admin"],
|
||||
anyOfPermissions: ["ELECTIVE_READ", "ELECTIVE_MANAGE"],
|
||||
},
|
||||
},
|
||||
// 教案详情(/shell/admin/lesson-plans/[planId]/view)
|
||||
{
|
||||
prefix: "/shell/admin/lesson-plans/",
|
||||
config: {
|
||||
requiredRoles: ["admin"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
},
|
||||
// 排课子页(auto/changes/rules 已在 EXACT,此处兜底 [id] 等动态路由)
|
||||
{
|
||||
prefix: "/shell/admin/scheduling/",
|
||||
config: {
|
||||
requiredRoles: ["admin"],
|
||||
anyOfPermissions: ["SCHEDULE_AUTO", "SCHEDULE_ADJUST", "SCHEDULE_MANAGE"],
|
||||
},
|
||||
},
|
||||
// ── student 前缀路由(ARCHITECTURE.md §9.2 B3)──────────
|
||||
// 成绩报告卡(/shell/student/grades/report-card 已在 EXACT,此处兜底子路由)
|
||||
{
|
||||
prefix: "/shell/student/grades/",
|
||||
config: {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["GRADE_RECORD_READ"],
|
||||
},
|
||||
},
|
||||
// 考试作答/结果子路由(/shell/student/exams/[id]/result、/[id]/take)
|
||||
{
|
||||
prefix: "/shell/student/exams/",
|
||||
config: {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["EXAM_READ"],
|
||||
},
|
||||
},
|
||||
// 作业提交/分析子路由(/shell/student/homework/[id]/submit、/[id]/analysis)
|
||||
{
|
||||
prefix: "/shell/student/homework/",
|
||||
config: {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["HOMEWORK_READ"],
|
||||
},
|
||||
},
|
||||
// 课程详情子路由(/shell/student/courses/[id])
|
||||
{
|
||||
prefix: "/shell/student/courses/",
|
||||
config: {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
},
|
||||
// 课程计划详情子路由(/shell/student/course-plans/[id])
|
||||
{
|
||||
prefix: "/shell/student/course-plans/",
|
||||
config: {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
},
|
||||
// 教案查看子路由(/shell/student/lesson-plans/[planId]/view)
|
||||
{
|
||||
prefix: "/shell/student/lesson-plans/",
|
||||
config: {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["LESSON_PLAN_READ"],
|
||||
},
|
||||
},
|
||||
// 教材阅读器子路由(/shell/student/textbooks/[id]/chapters)
|
||||
{
|
||||
prefix: "/shell/student/textbooks/",
|
||||
config: {
|
||||
requiredRoles: ["student"],
|
||||
requiredPermissions: ["TEXTBOOK_READ"],
|
||||
},
|
||||
},
|
||||
// 练习会话子路由(/shell/student/practice/[sessionId])
|
||||
{
|
||||
prefix: "/shell/student/practice/",
|
||||
config: {
|
||||
requiredRoles: ["student"],
|
||||
// 无 ADAPTIVE_PRACTICE_READ 权限点,复用 CLASS_READ(与 EXACT 一致)
|
||||
requiredPermissions: ["CLASS_READ"],
|
||||
},
|
||||
},
|
||||
// 选修课详情子路由(/shell/student/elective/[id])
|
||||
{
|
||||
prefix: "/shell/student/elective/",
|
||||
config: {
|
||||
requiredRoles: ["student"],
|
||||
anyOfPermissions: ["ELECTIVE_READ", "ELECTIVE_SELECT"],
|
||||
},
|
||||
},
|
||||
// 公告详情子路由(/shell/announcements/[id],共享)
|
||||
{
|
||||
prefix: "/shell/announcements/",
|
||||
config: {
|
||||
requiredPermissions: ["DASHBOARD_READ"],
|
||||
},
|
||||
},
|
||||
// P1-3:dev 模板预览页(仅登录可访问,运行时由 notFound() 拒绝生产访问)
|
||||
// ARCHITECTURE.md §10 P1-3:/shell/dev/templates/* 仅 dev 可见
|
||||
// 注:Next.js 私有文件夹以 _ 开头会被排除路由,故使用 `dev` 而非 `_dev`
|
||||
|
||||
Reference in New Issue
Block a user