feat(dashboard): 新增分区 Error Boundary + Suspense 骨架屏(P2)
新增 components/dashboard-section.tsx,包含: - DashboardSectionErrorBoundary:分区级 Error Boundary,单区块崩溃仅替换该区块不波及整页 - DashboardSectionSkeleton:5 种骨架变体(stats/card/chart/table/list),匹配不同数据区块布局 - DashboardSection:组合 Error Boundary + Suspense + 骨架屏的包装器 将 admin/teacher/student 三个仪表盘视图的每个独立数据区块用 DashboardSection 包裹,i18n 补充 sectionLoadFailed/sectionLoadFailedDesc 翻译键,同步更新架构图 004/005 文档
This commit is contained in:
@@ -5822,6 +5822,29 @@
|
||||
"purpose": "根据当前小时返回问候语时段 key"
|
||||
}
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"name": "DashboardSection",
|
||||
"path": "components/dashboard-section.tsx",
|
||||
"purpose": "分区 Error Boundary + Suspense + 骨架屏包装器,包裹每个独立数据区块",
|
||||
"variants": ["stats", "card", "chart", "table", "list"],
|
||||
"usedBy": [
|
||||
"admin-dashboard.tsx",
|
||||
"teacher-dashboard-view.tsx",
|
||||
"student-dashboard-view.tsx"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DashboardSectionErrorBoundary",
|
||||
"path": "components/dashboard-section.tsx",
|
||||
"purpose": "仪表盘分区级 Error Boundary(class component),单区块崩溃仅替换该区块"
|
||||
},
|
||||
{
|
||||
"name": "DashboardSectionSkeleton",
|
||||
"path": "components/dashboard-section.tsx",
|
||||
"purpose": "分区骨架屏,5 种变体匹配不同数据区块布局"
|
||||
}
|
||||
],
|
||||
"dataAccess": [
|
||||
{
|
||||
"name": "getAdminDashboardData",
|
||||
@@ -9830,9 +9853,9 @@
|
||||
"requirePermission",
|
||||
"data-access.getAttendanceRecords"
|
||||
],
|
||||
"usedBy": [
|
||||
"teacher/attendance/page.tsx",
|
||||
"admin/attendance/page.tsx"
|
||||
"usedBy": [],
|
||||
"issues": [
|
||||
"P0: 无调用方——admin/teacher 页面绕过 Action 直接调用 data-access.getAttendanceRecords,违反三层架构"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -9844,9 +9867,9 @@
|
||||
"requirePermission",
|
||||
"data-access-stats.getStudentAttendanceSummary"
|
||||
],
|
||||
"usedBy": [
|
||||
"student/attendance/page.tsx",
|
||||
"parent/attendance/page.tsx"
|
||||
"usedBy": [],
|
||||
"issues": [
|
||||
"P0: 无调用方——student/parent 页面绕过 Action 直接调用 data-access-stats.getStudentAttendanceSummary"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -9858,8 +9881,9 @@
|
||||
"requirePermission",
|
||||
"data-access-stats.getClassAttendanceStats"
|
||||
],
|
||||
"usedBy": [
|
||||
"teacher/attendance/stats/page.tsx"
|
||||
"usedBy": [],
|
||||
"issues": [
|
||||
"P0: 无调用方——teacher/attendance/stats 页面绕过 Action 直接调用 data-access-stats.getClassAttendanceStats"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -9994,6 +10018,9 @@
|
||||
],
|
||||
"usedBy": [
|
||||
"attendance-sheet.tsx"
|
||||
],
|
||||
"issues": [
|
||||
"P0: 跨模块直查 classEnrollments 表,违反模块间只能通过对方 data-access 通信的规则(应改为调用 classes data-access)"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -10061,6 +10088,9 @@
|
||||
],
|
||||
"usedBy": [
|
||||
"admin/attendance/page.tsx"
|
||||
],
|
||||
"issues": [
|
||||
"P0: 统计失真——调用 getAttendanceRecords(默认 pageSize=20)后对 items 聚合,仅基于前 20 条记录计算总览数据,班级/状态/日期筛选后仍只统计前 20 条"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -11643,9 +11673,9 @@
|
||||
"requirePermission(ELECTIVE_READ)",
|
||||
"data-access.getElectiveCourses (scope, currentUserId)"
|
||||
],
|
||||
"usedBy": [
|
||||
"admin/elective/page.tsx",
|
||||
"teacher/elective/page.tsx"
|
||||
"usedBy": [],
|
||||
"issues": [
|
||||
"P0: 无调用方——admin/teacher 页面绕过 Action 直接调用 data-access.getElectiveCourses,违反三层架构"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -11658,8 +11688,9 @@
|
||||
"requirePermission(ELECTIVE_READ)",
|
||||
"data-access-selections.getStudentSelections"
|
||||
],
|
||||
"usedBy": [
|
||||
"待扩展"
|
||||
"usedBy": [],
|
||||
"issues": [
|
||||
"P0: 无调用方——页面绕过 Action 直接调用 data-access-selections.getStudentSelections"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -11672,8 +11703,9 @@
|
||||
"requirePermission(ELECTIVE_SELECT)",
|
||||
"data-access-selections.getAvailableCoursesForStudent"
|
||||
],
|
||||
"usedBy": [
|
||||
"待扩展"
|
||||
"usedBy": [],
|
||||
"issues": [
|
||||
"P0: 无调用方——student/elective 页面绕过 Action 直接调用 data-access-selections.getAvailableCoursesForStudent"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -12763,8 +12795,8 @@
|
||||
}
|
||||
],
|
||||
"messages": [
|
||||
"src/shared/i18n/messages/zh-CN/{common,auth,onboarding,classes,errors}.json",
|
||||
"src/shared/i18n/messages/en/{common,auth,onboarding,classes,errors}.json"
|
||||
"src/shared/i18n/messages/zh-CN/{common,auth,onboarding,classes,errors,dashboard,examHomework,announcements,messages}.json",
|
||||
"src/shared/i18n/messages/en/{common,auth,onboarding,classes,errors,dashboard,examHomework,announcements,messages}.json"
|
||||
]
|
||||
},
|
||||
"routes": {},
|
||||
@@ -13214,7 +13246,8 @@
|
||||
],
|
||||
"attendance": [
|
||||
"data-access-stats.getStudentAttendanceSummary",
|
||||
"components.student-attendance-view"
|
||||
"components.student-attendance-view",
|
||||
"types.StudentAttendanceSummary (⚠️ 跨模块 UI 类型依赖:parent-attendance-warning.tsx / parent-attendance-rate-card.tsx / parent-attendance-calendar.tsx 直接 import)"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user