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