mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-02 00:46:38 +08:00
223 lines
9.7 KiB
Markdown
223 lines
9.7 KiB
Markdown
# 前端彻底重构计划(进行中)
|
||
|
||
- 分支:`frontend/refactor-audit-20260218`
|
||
- 范围:`vite-frontend/src`
|
||
- 更新时间:2026-02-19
|
||
- 当前总体进度:`99.5%`
|
||
|
||
## 1) 问题审计(已完成)
|
||
|
||
### P0(高风险,优先修复)
|
||
|
||
- [x] `src/api/network.ts` 存在 token 过期后 Promise 不 resolve 的路径(`then/catch` 里仅 `return`,调用方可能挂起)
|
||
- [x] 登录态读写逻辑分散在多个页面/布局,存在重复和不一致风险(`src/pages/index.tsx`、`src/layouts/admin.tsx`、`src/layouts/h5.tsx`、`src/pages/profile.tsx`、`src/pages/group.tsx`)
|
||
- [x] 核心页面超大文件导致可维护性差:`forward.tsx`(3263 行)、`tunnel.tsx`(2595 行)、`node.tsx`(2194 行)、`user.tsx`(1761 行)、`dashboard.tsx`(1363 行)
|
||
- [x] `any` 使用过多,类型边界不清(`src/api/index.ts`、`src/api/network.ts`、`src/pages/*`)
|
||
|
||
### P1(中风险,本次并行推进)
|
||
|
||
- [x] 多处空 `catch {}` 吞错,定位问题困难(如 `src/App.tsx`、`src/components/navbar.tsx`、`src/pages/config.tsx` 等)
|
||
- [x] 移动端/H5/WebView 判定逻辑重复(`src/App.tsx`、`src/pages/index.tsx`、`src/components/navbar.tsx`)
|
||
- [x] 菜单与权限控制在多处重复定义,布局和页面耦合偏高(`src/layouts/admin.tsx`、`src/layouts/h5.tsx`、`src/pages/profile.tsx`)
|
||
- [x] 路由保护与布局选择逻辑集中在 `src/App.tsx`,可测试性和扩展性偏弱
|
||
|
||
### P2(优化项,后续阶段)
|
||
|
||
- [x] `vite.config.ts` 生产构建配置 `minify: false`、`treeshake: false`,性能优化策略待梳理
|
||
- [x] ESLint 中 `react-hooks/exhaustive-deps` 关闭,副作用依赖约束较弱(`eslint.config.mjs`)
|
||
|
||
## 2) 彻底重构任务清单(边做边更新)
|
||
|
||
> 状态说明:`[x] 完成` / `[ ] 未开始` / `[-] 进行中`
|
||
|
||
### Phase A - 会话与权限基建
|
||
|
||
- [x] A1. 新增统一会话工具模块(token/role/name/admin 的读写与兼容逻辑)
|
||
- [x] A2. 登录页改为调用会话工具写入登录态,去重重复代码
|
||
- [x] A3. 布局与页面的管理员判断改为统一工具,移除重复逻辑
|
||
- [x] A4. `Network` 层统一 token 获取与 token 过期处理,避免悬挂 Promise
|
||
|
||
### Phase B - Hook 与状态复用
|
||
|
||
- [x] B1. 提取 `useWebViewMode`,替换 `index/navbar` 重复检测
|
||
- [x] B2. 提取 `useH5Mode`,收敛 `App` 内设备与参数判定逻辑
|
||
- [x] B3. 提取滚动复位逻辑(`H5/H5-simple`)到通用 hook
|
||
|
||
### Phase C - API 与类型边界
|
||
|
||
- [x] C1. 收紧 `src/api/network.ts` 的 `any` 边界(优先 `unknown` + 受控转换)
|
||
- [-] C2. 给高频 API 接口补全请求/响应类型(先用户、节点、隧道、转发)
|
||
- [-] C3. 统一错误消息提取策略,避免散落式字符串拼接
|
||
|
||
### Phase D - 大页面拆分(增量,不大爆炸重写)
|
||
|
||
- [-] D1. `forward.tsx` 抽离:筛选条、列表视图、批量操作、详情弹窗
|
||
- [-] D2. `tunnel.tsx` 抽离:表单区、列表区、排序区、诊断区
|
||
- [-] D3. `node.tsx` 抽离:状态区、安装命令区、排序区、WebSocket 区
|
||
- [ ] D4. `dashboard.tsx` 抽离:统计卡片、图表区、公告区、刷新逻辑
|
||
|
||
### Phase E - 体验与可访问性
|
||
|
||
- [-] E1. 统一关键交互控件的 `aria-label` / 键盘可达性
|
||
- [-] E2. 统一 loading/empty/error 三态展示组件
|
||
- [-] E3. 统一移动端断点与布局响应策略
|
||
|
||
## 15) 当前实施批次(Batch-12)
|
||
|
||
- 目标:推进 **D2/D4/E1/E2/E3** 收尾,完成表单模块接入、仪表盘增量拆分与通用能力落地
|
||
- 本批次进度:`6 / 6`
|
||
|
||
### Batch-12 明细进度
|
||
|
||
- [x] T51. `tunnel.tsx` 接入 `tunnel/form.ts`(默认值、表单校验、类型/流量展示)
|
||
- [x] T52. 修复 `limit.tsx` 构建阻断问题(移除未使用 `Spinner` 导入)
|
||
- [x] T53. `dashboard.tsx` 抽离公告区与指标卡公共组件(`dashboard/components/*`)
|
||
- [x] T54. `dashboard.tsx` 管理员判定切换为 `session` 统一工具(`getAdminFlag`)
|
||
- [x] T55. `admin.tsx` 接入 `useMobileBreakpoint` 收敛断点监听;`settings.tsx` 回填返回按钮 `aria-label`
|
||
- [x] T56. 执行 `npm run build` + `npm run lint` 校验(lint 仅剩既有 `no-console` warning)
|
||
|
||
## 3) 当前实施批次(Batch-1)
|
||
|
||
- 目标:先完成 **A1/A2/A3/A4 + B1/B2 + C1**,优先解决架构一致性和稳定性风险
|
||
- 本批次进度:`7 / 7`
|
||
|
||
### Batch-1 明细进度
|
||
|
||
- [x] T1. 新增 `session` 统一会话工具(A1)
|
||
- [x] T2. 登录页切换到会话工具(A2)
|
||
- [x] T3. `admin/h5/profile/group` 切换管理员判定工具(A3)
|
||
- [x] T4. `network` 统一 token 与过期返回(A4 + C1)
|
||
- [x] T5. 新增 `useWebViewMode` 并接入 `index/navbar`(B1)
|
||
- [x] T6. 新增 `useH5Mode` 并接入 `App`(B2)
|
||
- [x] T7. 执行 `npm run build` 与必要诊断校验
|
||
|
||
## 4) 当前实施批次(Batch-2)
|
||
|
||
- 目标:推进 **D2/D3 的排序逻辑抽离** 与 **会话 token 复用**,降低大型页面重复代码
|
||
- 本批次进度:`7 / 7`
|
||
|
||
### Batch-2 明细进度
|
||
|
||
- [x] T8. 新增通用排序存储工具(node/tunnel 共用)
|
||
- [x] T9. `tunnel.tsx` 接入排序存储工具
|
||
- [x] T10. `node.tsx` 接入排序存储工具
|
||
- [x] T11. `node.tsx` WebSocket token 改用统一会话工具
|
||
- [x] T12. 执行 `npm run build` 与必要诊断校验
|
||
- [x] T13. 新增 `useScrollTopOnPathChange` 通用 hook
|
||
- [x] T14. `h5/h5-simple` 接入滚动复位 hook 并完成构建校验
|
||
|
||
## 5) 当前实施批次(Batch-3)
|
||
|
||
- 目标:推进 **D3(node WebSocket 区域)结构化抽离**,先拆出系统信息解析逻辑
|
||
- 本批次进度:`4 / 4`
|
||
|
||
### Batch-3 明细进度
|
||
|
||
- [x] T15. 新增 `node` 系统信息解析工具模块
|
||
- [x] T16. `node.tsx` WebSocket `info` 消息处理接入解析工具
|
||
- [x] T17. 保持在线/离线状态切换与速度计算逻辑一致
|
||
- [x] T18. 执行 `npm run build` 与必要诊断校验
|
||
|
||
## 6) 外部最佳实践参考(已纳入本计划)
|
||
|
||
- React 官方:重复逻辑应抽为自定义 Hook(`reusing-logic-with-custom-hooks`)
|
||
- React 官方:共享逻辑不共享状态,跨组件共享状态应提升或集中管理
|
||
- Vite 官方:大型项目优先审计插件成本、动态导入与分块策略
|
||
- WAI-ARIA APG:导航与交互组件优先语义化与键盘可达性
|
||
|
||
## 7) 当前实施批次(Batch-4)
|
||
|
||
- 目标:继续推进 **D3(node WebSocket 区域)**,抽离连接生命周期与重连策略
|
||
- 本批次进度:`4 / 4`
|
||
|
||
### Batch-4 明细进度
|
||
|
||
- [x] T19. 新增 `useNodeRealtime` Hook(连接/重连/断开)
|
||
- [x] T20. `node.tsx` 接入 `useNodeRealtime`,移除内联连接管理代码
|
||
- [x] T21. 保留离线延迟逻辑并在页面卸载时清理离线定时器
|
||
- [x] T22. 执行 `npm run build` 与必要诊断校验
|
||
|
||
## 8) 当前实施批次(Batch-5)
|
||
|
||
- 目标:继续推进 **D3(node WebSocket 区域)**,抽离离线延迟定时器生命周期
|
||
- 本批次进度:`4 / 4`
|
||
|
||
### Batch-5 明细进度
|
||
|
||
- [x] T23. 新增 `useNodeOfflineTimers` Hook(离线延迟/清理)
|
||
- [x] T24. `node.tsx` 接入 `useNodeOfflineTimers`,移除内联定时器管理
|
||
- [x] T25. 校验状态/信息消息路径行为一致(在线切换与离线延迟)
|
||
- [x] T26. 执行 `npm run build` 与必要诊断校验
|
||
|
||
## 9) 当前实施批次(Batch-6)
|
||
|
||
- 目标:推进 **D2(tunnel 诊断区)**,抽离诊断兜底与质量评估逻辑
|
||
- 本批次进度:`4 / 4`
|
||
|
||
### Batch-6 明细进度
|
||
|
||
- [x] T27. 新增 `tunnel/diagnosis` 诊断工具模块
|
||
- [x] T28. `tunnel.tsx` 接入诊断兜底与质量评估工具
|
||
- [x] T29. 校验诊断弹窗展示逻辑与质量标签行为一致
|
||
- [x] T30. 执行 `npm run build` 与必要诊断校验
|
||
|
||
## 10) 当前实施批次(Batch-7)
|
||
|
||
- 目标:推进 **C2/C3(API 类型边界与错误消息统一)**,先覆盖高频 node/tunnel/forward 路径
|
||
- 本批次进度:`4 / 4`
|
||
|
||
### Batch-7 明细进度
|
||
|
||
- [x] T31. 新增 `api` 高频领域类型定义(node/tunnel/forward)
|
||
- [x] T32. `api/index.ts` 的高频列表接口接入类型定义
|
||
- [x] T33. 新增网络错误消息提取工具并接入 `network.ts`
|
||
- [x] T34. 执行 `npm run build` 与必要诊断校验
|
||
|
||
## 11) 当前实施批次(Batch-8)
|
||
|
||
- 目标:推进 **D1(forward 排序区)**,抽离直接模式排序初始化逻辑
|
||
- 本批次进度:`4 / 4`
|
||
|
||
### Batch-8 明细进度
|
||
|
||
- [x] T35. 新增 `forward/order` 排序工具模块
|
||
- [x] T36. `forward.tsx` 接入排序工具并复用通用存储
|
||
- [x] T37. 校验直接模式排序初始化与拖拽持久化行为一致
|
||
- [x] T38. 执行 `npm run build` 与必要诊断校验
|
||
|
||
## 12) 当前实施批次(Batch-9)
|
||
|
||
- 目标:推进 **D1(forward 诊断区)**,抽离诊断兜底与质量评估逻辑
|
||
- 本批次进度:`4 / 4`
|
||
|
||
### Batch-9 明细进度
|
||
|
||
- [x] T39. 新增 `forward/diagnosis` 诊断工具模块
|
||
- [x] T40. `forward.tsx` 接入诊断兜底与质量评估工具
|
||
- [x] T41. 校验诊断弹窗展示与质量标签行为一致
|
||
- [x] T42. 执行 `npm run build` 与必要诊断校验
|
||
|
||
## 13) 当前实施批次(Batch-10)
|
||
|
||
- 目标:推进 **D1(forward 批量操作区)**,抽离批量动作执行与反馈逻辑
|
||
- 本批次进度:`4 / 4`
|
||
|
||
### Batch-10 明细进度
|
||
|
||
- [x] T43. 新增 `forward/batch-actions` 批量操作工具模块
|
||
- [x] T44. `forward.tsx` 接入批量操作工具并移除重复处理分支
|
||
- [x] T45. 校验批量删除/启停/重下发/换隧道行为一致
|
||
- [x] T46. 执行 `npm run build` 与必要诊断校验
|
||
|
||
## 14) 当前实施批次(Batch-11)
|
||
|
||
- 目标:推进 **D1(forward 地址展示/复制区)**,抽离地址格式化与弹窗分流逻辑
|
||
- 本批次进度:`4 / 4`
|
||
|
||
### Batch-11 明细进度
|
||
|
||
- [x] T47. 新增 `forward/address` 地址工具模块
|
||
- [x] T48. `forward.tsx` 接入地址工具并移除内联格式化/分流逻辑
|
||
- [x] T49. 校验地址单项复制与多项弹窗行为一致
|
||
- [x] T50. 执行 `npm run build` 与必要诊断校验
|