mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-28 05:46:36 +08:00
5.4 KiB
5.4 KiB
OpenFlare 前端开发规范
1. 适用范围
本文档约束 openflare_server/web 新版前端的工程结构、请求层、组件设计、样式体系、状态管理与测试方式。
当前状态:
- 前端改造已完成
- 本文档描述的是现行正式基线,不再维护迁移期约束
2. 技术基线
前端默认技术栈:
- Next.js 15(App Router)
- React 19
- TypeScript 5
- Tailwind CSS 4
- TanStack Query
- React Hook Form + Zod
- Zustand(仅限轻量客户端状态)
- ESLint + Prettier
- Vitest + Testing Library + Playwright
- pnpm
本地开发模式:
pnpm start:启动独立前端开发服务器,默认监听3001,支持热更新- 开发服务器默认把
/api/*反向代理到http://127.0.0.1:3000 - 如需改后端地址,可设置
NEXT_DEV_BACKEND_URL pnpm build:继续用于静态导出,产物交给 Go Server 托管
要求:
- 默认使用 TypeScript,不新增 JS 页面模块
- 默认使用函数组件,不新增 class 组件
- 默认使用 App Router,不新建 Pages Router 结构
- 默认使用 Tailwind CSS 与现有设计 token 体系
- 前端必须支持
light、dark、system三种主题模式
禁止:
- 新增 Semantic UI 依赖
- 新增大型 UI 框架,破坏当前组件基线
- 在新模块中继续使用 jQuery 风格 DOM 操作
- 将页面逻辑堆积为单个超大组件
3. 目录与分层
推荐目录:
app/
components/
features/
lib/
hooks/
store/
types/
styles/
tests/
职责约束:
app/:定义路由、组织布局、组装页面features/:按业务域组织模块components/:跨 feature 复用组件lib/:请求客户端、环境变量、工具函数、常量store/:少量跨页面 UI 状态types/:共享类型定义
禁止:
- 在
app/页面文件里堆积复杂请求逻辑 - 把服务端主数据放进 Zustand
- 将同一业务拆出多套平行结构
4. 路由与页面
路由命名要求:
- 使用英文小写
- 资源页保持现有单数命名
- 保持与当前路径结构一致
页面文件只负责:
- 获取路由参数
- 组织页面结构
- 调用 feature 组件
页面不应负责:
- 手写复杂 API 细节
- 编写复杂表单校验逻辑
- 维护大量彼此耦合的局部状态
后台页面优先采用统一结构:
- 标题区
- 操作区
- 筛选区
- 内容区
- 详情区或弹层
5. 数据请求与类型
5.1 请求层
所有 API 请求必须统一经过 lib/api/。
要求:
- 统一处理
success/message/data响应结构 - 统一处理鉴权失效、网络异常、通用错误消息
- 统一维护资源接口与请求路径
禁止:
- 在页面组件中直接调用
fetch('/api/...') - 在多个组件中重复拼接同一接口路径
5.2 Query
适用场景:
- 列表查询
- 详情查询
- 配置读取
- 依赖后端的分页、筛选、刷新操作
要求:
- 使用稳定的 query key
- 变更成功后按资源粒度失效缓存
- 列表刷新不要依赖分散的手工
setState
5.3 类型
要求:
- 开启 TypeScript 严格模式
- 禁止滥用
any - API 响应、表单输入、业务实体必须有明确类型
- 枚举、状态、日期字段建立明确类型边界
6. 表单与交互
统一使用:
- React Hook Form
- Zod
交互要求:
- 必填项明确标识
- 提交中不可重复点击
- 保存成功有明确反馈
- 服务端错误映射到表单或全局提示
高风险操作适用场景:
- 发布配置
- 激活版本
- 删除节点
- 删除证书
- 重置 Token
- 触发更新
要求:
- 必须有二次确认
- 必须展示操作对象名称
- 必须明确成功与失败反馈
7. 样式与主题
样式原则:
- 统一使用 Tailwind CSS 与现有 token 体系
- 优先复用已有基础组件与布局组件
- 页面视觉风格统一、层级清晰、留白一致
主题要求:
- 同时支持
light、dark、system - 用户手动选择后必须持久化
- 刷新、重新进入页面、路由切换后保持一致
- 首屏尽量避免主题闪烁
- 布局层、导航层、基础卡片、表单容器必须先满足双主题
禁止:
- 大量硬编码颜色值
- 同一状态在不同页面使用不同颜色语义
- 仅验证单一主题后直接交付
8. 组件与状态管理
组件分层:
- 基础组件:按钮、输入框、表格、对话框、标签、卡片
- 业务组件:节点状态卡、版本激活按钮、证书上传表单
- 页面组合组件:页面头部、筛选面板、详情弹层
复用原则:
- 先抽象稳定结构,再抽象复杂行为
- 业务组件优先放在 feature 内,确认跨域复用后再上移
状态分类:
- 服务端状态:TanStack Query
- 页面临时状态:组件内部
useState - 跨页面 UI 状态:Zustand
不推荐:
- 用 Zustand 保存服务端列表数据
- 用 Context 代替完整数据层方案
- 页面里堆叠过多耦合本地状态
9. 反馈、测试与交付
每个页面至少具备:
- 加载态
- 空态
- 错误态
- 成功反馈
测试要求:
- 公共工具、类型转换、主题逻辑补单元测试
- 关键页面交互补组件测试
- 核心主链路补 Playwright 或等效联调验证
交付要求:
- 构建产物保持可静态导出
- 构建结果保持可被 Go Server 托管
- 新页面与新组件默认同时通过亮色与暗色模式验收