feat: 仪表盘角色自适应重构 — 4角色视图 + 后端个人工作量API
后端: - 新增 GET /health/admin/statistics/personal-stats 接口 - PersonalStatsResp: 13个个人维度统计字段 - 按医生/护士/管理员/运营角色聚合工作量数据 前端: - useDashboardRole hook: 按优先级 doctor>nurse>admin>operator 匹配角色 - DoctorDashboard: 今日工作台(日程/审核/消息/统计卡) - NurseDashboard: 随访监控台(异常提醒/队列/上报率) - AdminDashboard: 管理中心(5KPI + 健康数据Tab) - OperatorDashboard: 运营中心(积分/文章/活动) - StatisticsDashboard.tsx 重写为角色路由组件 - 删除旧区块:快捷入口/积分排行Top10/最近活动
This commit is contained in:
19
apps/web/src/hooks/useDashboardRole.ts
Normal file
19
apps/web/src/hooks/useDashboardRole.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { useAuthStore } from '../stores/auth';
|
||||
|
||||
type DashboardRole = 'doctor' | 'nurse' | 'admin' | 'operator';
|
||||
|
||||
const ROLE_PRIORITY: DashboardRole[] = ['doctor', 'nurse', 'admin', 'operator'];
|
||||
|
||||
export function useDashboardRole(): DashboardRole {
|
||||
const user = useAuthStore(s => s.user);
|
||||
|
||||
if (!user?.roles?.length) return 'admin';
|
||||
|
||||
const codes = user.roles.map(r => r.code);
|
||||
for (const role of ROLE_PRIORITY) {
|
||||
if (codes.some(c => c === role || c.startsWith(role))) return role;
|
||||
}
|
||||
return 'admin';
|
||||
}
|
||||
|
||||
export type { DashboardRole };
|
||||
Reference in New Issue
Block a user