chore(frontend): purge dead code per guide red line

- delete 4 dead pages (~2300 lines): Home, ConfigPlatformPage,
  DataDictionaryPage, NotificationsPage (kept the live NotificationPage)
- delete 52 unused shadcn ui components (keep button/card/dialog in use;
  re-generate via shadcn CLI when needed)
- delete App.css, SkeletonCard, empty shared/ and features engine dirs
- remove dead theme blocks (midnight-purple / orange-vitality) from index.css
- uninstall ~40 dead deps (echarts, sonner, next-themes, zod,
  react-hook-form, unused radix packages, cmdk, vaul, ...)
- fix DEVELOPMENT.md drift: mock layer section rewritten to real API layer,
  permission docs now point to menu.ts single source
This commit is contained in:
Logan.Li committed 2026-10-26 17:23:24 +08:00
1 parent 16f1f7d65f
commit a213d08e31
62 files changed
+19 -9220

No files matched your search

+16 -27
View File
@@ -55,13 +55,14 @@ src/
│ ├── WorkflowPage.tsx # 审批流程配置
│ ├── AutoTaskPage.tsx # 自动任务
│ ├── AnnouncementPage.tsx # 公告管理
│ ├── ConfigPlatformPage.tsx # 配置平台
│ └── LoginPage.tsx # 登录
├── hooks/ # 自定义 Hooks
│ └── useAuth.tsx # 权限上下文 + useAuth + useActionPermission
├── lib/ # 工具库
│ ├── mock.ts # 全量 Mock 数据
│ └── utils.ts # 工具函数
│ ├── utils.ts # 工具函数
│ ├── constants.ts # 常量
│ ├── queryTemplates.ts# 查询模板
│ └── storage.ts # localStorage 命名空间与迁移
├── types/ # TypeScript 类型定义
│ └── index.ts # 全局类型
├── App.tsx # 根组件(路由 + 路由守卫)
@@ -89,7 +90,7 @@ src/
**关键代码**:
```tsx
// pages/Dashboard.tsx
// 使用 recharts 绘制图表,工单表格复用 tickets mock 数据
// 使用 recharts 绘制图表,数据来自 /dashboard/stats 接口
```
---
@@ -347,9 +348,8 @@ const canApprove = useActionPermission('ticket.approve'); // true/false
### 4.3 权限配置表
路由权限:`useAuth.tsx` 中 `routePermissionMap`
操作权限:`useAuth.tsx` 中 `actionPermissionMap`
菜单权限:`lib/mock.ts` 中 `menuItems[*].roles`
菜单/路由权限(唯一源):`constants/menu.ts` 中 `menuItems[*].roles`
操作权限:`hooks/useAuth.tsx` 中 `actionPermissionMap`
### 4.4 角色切换演示
@@ -360,35 +360,24 @@ const canApprove = useActionPermission('ticket.approve'); // true/false
---
## 五、Mock 数据层
## 五、数据层
所有数据存储在 `src/lib/mock.ts`,后端接口就绪后替换为 API 调用即可。
后端 API 已全面就绪,无 Mock 层。所有请求走 `src/api/request.ts` 统一实例:
**主要数据集合**:
| 数据 | 变量名 | 用途 |
|------|--------|------|
| 数据库实例 | `dbInstances` | 实例管理 |
| 工单 | `tickets` | 工单管理 |
| 查询审计 | `queryAudits` | 查询审计 |
| 审核规则 | `auditRules` | 审核规则 |
| 用户 | `users` | 用户管理 |
| 角色 | `roles` | 角色管理 |
| 审批流程 | `workflows` | 流程配置 |
| 菜单 | `menuItems` | 侧边栏菜单 |
| 当前用户 | `currentUser` | 登录用户 |
- 响应拦截器已解包一层(拿到的是响应体本身),API 函数用 `request.get<unknown, T>()` 标注返回类型
- 401 自动走 refresh token 单飞刷新(并发只刷一次),失败才跳登录并携带 redirect 回跳
- 单请求逃生口:`{ skipErrorHandler: true }` 关闭全局错误提示
- 列表数据获取用 `hooks/useFetchList.ts`(取消 + 版本号防错序 + error 三态)
---
## 六、开发规范
### 6.1 新增页面步骤
1. 在 `src/pages/` 创建页面组件
2. 在 `src/App.tsx` 添加路由(配置 `routePermissionMap` 权限)
3. 在 `src/hooks/useAuth.tsx` 的 `routePermissionMap` 中添加路由权限
4. 在 `src/lib/mock.ts` 的 `menuItems` 中添加菜单项
5. (如需要)在 `actionPermissionMap` 中添加页面操作权限
2. 在 `src/App.tsx` 添加路由
3. 在 `src/constants/menu.ts` 的 `menuItems` 中添加菜单项(roles 即路由权限,单源维护)
4. (如需要)在 `actionPermissionMap` 中添加页面操作权限
### 6.2 新增操作权限