feat(dashboard): 实现所有长期问题修复(P2-1/P2-5/P2-7/P2-9)
P2-9: TeacherSchedule 重复渲染优化 - 将移动端(lg:hidden)和桌面端(hidden lg:block)的双实例渲染改为单实例 - 使用 CSS flex order + grid col-start/row-start 实现响应式布局重排序 - 消除服务端 HTML 负载翻倍问题 P2-5: StudentTodayScheduleCard 时间过时修复 - 新增 useCurrentTime hook(src/shared/hooks/use-current-time.ts) - 每分钟自动更新当前时间,useMemo 依赖 [items, now] 确保徽章不过时 - SSR 安全:初始渲染用 new Date(),挂载后 setInterval 更新 P2-1: 流式/Suspense 架构改造 - 新增 getAdminDashboardStreams(streams.ts):返回各独立数据源的未解析 Promise - Admin dashboard:7 个分区组件用 React use() 独立消费 Promise,各 Suspense 边界独立流式渲染 - Teacher/Student/Parent dashboard:传入未解析 Promise,视图用 use() 消费,启用 Suspense 流式 - 页面外壳(标题 + 快捷操作)立即渲染,数据到达后各分区按各自速度填充 P2-7: 组件测试 + 路由测试修复 - 修复 dashboard-routing.test.ts:移除误导性的 permissions 字段(实际用 resolvePermissions(roles)) - 新增 fallback 路由测试(未知角色 → teacher dashboard) - 新增 DashboardSection 组件测试(6 个测试:骨架屏变体 + 错误边界 + 正常渲染) - 新增 useCurrentTime hook 测试(3 个测试:初始值 + 间隔更新 + 清理) 同步更新: - docs/architecture/005_architecture_data.json 新增 7 个流式组件 + useCurrentTime hook + getAdminDashboardStreams 条目
This commit is contained in:
@@ -1096,6 +1096,12 @@
|
||||
"signature": "useLocalStorage<T>(key: string, initialValue: T): [T, (value: T | ((prev: T) => T)) => void]",
|
||||
"purpose": "localStorage持久化Hook"
|
||||
},
|
||||
{
|
||||
"name": "useCurrentTime",
|
||||
"file": "hooks/use-current-time.ts",
|
||||
"signature": "useCurrentTime(intervalMs?: number): Date",
|
||||
"purpose": "V4(P2-5)新增:返回当前时间并按指定间隔自动更新的 Hook,用于需要随时间刷新的 UI(如课表'进行中'徽章),避免 useMemo 依赖 [items] 导致过时"
|
||||
},
|
||||
{
|
||||
"name": "usePermission",
|
||||
"file": "hooks/use-permission.ts",
|
||||
@@ -6650,6 +6656,23 @@
|
||||
"usedBy": [
|
||||
"dashboard/actions.getAdminDashboardAction"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "getAdminDashboardStreams",
|
||||
"signature": "() => Promise<AdminDashboardStreams>",
|
||||
"deps": [
|
||||
"auth-guard.requirePermission",
|
||||
"users/data-access.getUsersDashboardStats",
|
||||
"classes/data-access.getClassesDashboardStats",
|
||||
"textbooks/data-access.getTextbooksDashboardStats",
|
||||
"questions/data-access.getQuestionsDashboardStats",
|
||||
"exams/data-access.getExamsDashboardStats",
|
||||
"homework/stats-service.getHomeworkDashboardStats"
|
||||
],
|
||||
"purpose": "V4(P2-1)新增:管理员仪表盘流式数据源,返回各独立数据源的未解析 Promise,供各分区组件用 React use() 独立消费实现流式渲染",
|
||||
"usedBy": [
|
||||
"app/(dashboard)/admin/dashboard/page.tsx"
|
||||
]
|
||||
}
|
||||
],
|
||||
"types": [
|
||||
@@ -6814,6 +6837,41 @@
|
||||
"name": "DashboardErrorFallback",
|
||||
"file": "dashboard-error-fallback",
|
||||
"purpose": "V3 新增:仪表盘共享错误边界组件,含 i18n + reset() 重试,消除 5 个 error.tsx 路由文件的重复代码"
|
||||
},
|
||||
{
|
||||
"name": "AdminStatsBar",
|
||||
"file": "admin-dashboard/admin-sections",
|
||||
"purpose": "V4(P2-1)新增:管理员顶部统计栏流式组件,用 React use() 独立消费 usersStats/classesStats/homeworkStats Promise"
|
||||
},
|
||||
{
|
||||
"name": "AdminContentCard",
|
||||
"file": "admin-dashboard/admin-sections",
|
||||
"purpose": "V4(P2-1)新增:管理员内容统计卡片流式组件,用 React use() 消费 textbooksStats/questionsStats/examsStats Promise"
|
||||
},
|
||||
{
|
||||
"name": "AdminHomeworkActivityCard",
|
||||
"file": "admin-dashboard/admin-sections",
|
||||
"purpose": "V4(P2-1)新增:管理员作业活跃度卡片流式组件,用 React use() 消费 homeworkStats Promise"
|
||||
},
|
||||
{
|
||||
"name": "AdminUserRolesCard",
|
||||
"file": "admin-dashboard/admin-sections",
|
||||
"purpose": "V4(P2-1)新增:管理员用户角色分布卡片流式组件,用 React use() 消费 usersStats Promise"
|
||||
},
|
||||
{
|
||||
"name": "AdminRecentUsersTable",
|
||||
"file": "admin-dashboard/admin-sections",
|
||||
"purpose": "V4(P2-1)新增:管理员最近注册用户表流式组件,用 React use() 消费 usersStats Promise + getLocale"
|
||||
},
|
||||
{
|
||||
"name": "AdminTrendCharts",
|
||||
"file": "admin-dashboard/admin-sections",
|
||||
"purpose": "V4(P2-1)新增:管理员趋势图表组件(静态,趋势数据待接入)"
|
||||
},
|
||||
{
|
||||
"name": "AdminHeaderBadges",
|
||||
"file": "admin-dashboard/admin-sections",
|
||||
"purpose": "V4(P2-1)新增:管理员页头徽章流式组件,用 React use() 消费 usersStats Promise"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -7425,10 +7483,13 @@
|
||||
{
|
||||
"name": "SecurityCenterCard",
|
||||
"file": "components/security-center-card.tsx",
|
||||
"purpose": "安全中心卡片(P2-9 新增;v2 已增强:2FA 开关改为禁用状态显示'即将推出'、新增'登出所有其他会话'按钮、通过 currentDeviceLabel 标记当前会话、纯函数抽取到 lib/security-utils.ts;2FA 状态存储在 system_settings 表;登录历史来自 login_logs 表;i18n:settings.security.center)",
|
||||
"purpose": "安全中心卡片(P2-9 新增;v2 增强:会话远程登出、currentDeviceLabel、纯函数抽取;v3 增强:完整 TOTP 2FA 流程 — 启用(QR码+验证码+备份码)/关闭/重新生成备份码,三个 Dialog;2FA 状态存储在 system_settings 表;登录历史来自 login_logs 表;i18n:settings.security.center)",
|
||||
"deps": [
|
||||
"getSecurityCenterAction",
|
||||
"toggleTwoFactorAction",
|
||||
"setupTwoFactorAction",
|
||||
"verifyTwoFactorAction",
|
||||
"disableTwoFactorAction",
|
||||
"regenerateBackupCodesAction",
|
||||
"revokeAllOtherSessionsAction",
|
||||
"lib/security-utils.parseUserAgent",
|
||||
"lib/security-utils.formatRelativeTime"
|
||||
|
||||
Reference in New Issue
Block a user