[文档] 文档更新

This commit is contained in:
ryan
2026-03-15 17:11:17 +08:00
parent 5858e30af6
commit b2eb4befba
11 changed files with 769 additions and 2232 deletions
+56 -162
View File
@@ -1,56 +1,36 @@
# OpenFlare 前端开发规范
## 1. 适用范围
本文档约束 `openflare_server/web` 的正式前端工程。它描述的是 `1.0.0` 之后仍然有效的结构、请求层、组件、样式、状态管理与测试基线。
本文档约束 `openflare_server/web` 新版前端的工程结构、请求层、组件设计、样式体系、状态管理与测试方式。
## 1. 技术基线
当前状态:
默认技术栈:
* 前端改造已完成
* 本文档描述的是现行正式基线,不再维护迁移期约束
---
## 2. 技术基线
前端默认技术栈:
* Next.js 15(App Router)
* Next.js 15 App Router
* React 19
* TypeScript 5
* Tailwind CSS 4
* TanStack Query
* React Hook Form + Zod
* Zustand(仅限轻量客户端状态)
* 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 体系
* 默认使用 TypeScript
* 默认使用函数组件
* 默认使用 App Router
* 前端必须支持 `light`、`dark`、`system` 三种主题模式
禁止:
* 新增 Semantic UI 依赖
* 新增大型 UI 框架,破坏当前组件基线
* 在新模块中继续使用 jQuery 风格 DOM 操作
* 将页面逻辑堆积为单个超大组件
* 引入 Semantic UI
* 新增大型 UI 框架破坏现有组件基线
* 使用 jQuery 风格 DOM 操作
---
## 3. 目录与分层
## 2. 目录与分层
推荐目录:
@@ -68,28 +48,14 @@ tests/
职责约束:
* `app/`:定义路由、组织布局、组装页面
* `app/`:路由、布局、页面组装
* `features/`:按业务域组织模块
* `components/`:跨 feature 复用组件
* `lib/`:请求客户端、环境变量、工具函数、常量
* `store/`:少量跨页面 UI 状态
* `types/`:共享类型定义
禁止:
* 在 `app/` 页面文件里堆积复杂请求逻辑
* 把服务端主数据放进 Zustand
* 将同一业务拆出多套平行结构
---
## 4. 路由与页面
路由命名要求:
* 使用英文小写
* 资源页保持现有单数命名
* 保持与当前路径结构一致
## 3. 路由与页面
页面文件只负责:
@@ -103,26 +69,16 @@ tests/
* 编写复杂表单校验逻辑
* 维护大量彼此耦合的局部状态
后台页面优先采用统一结构:
## 4. 数据请求与类型
1. 标题区
2. 操作区
3. 筛选区
4. 内容区
5. 详情区或弹层
---
## 5. 数据请求与类型
### 5.1 请求层
### 4.1 请求层
所有 API 请求必须统一经过 `lib/api/`。
要求:
* 统一处理 `success/message/data` 响应结构
* 统一处理鉴权失效、网络异常、通用错误消息
* 统一处理鉴权失效、网络异常和通用错误消息
* 统一维护资源接口与请求路径
禁止:
@@ -130,101 +86,7 @@ tests/
* 在页面组件中直接调用 `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 内,确认跨域复用后再上移
状态分类:
### 4.2 状态分层
* 服务端状态:TanStack Query
* 页面临时状态:组件内部 `useState`
@@ -232,13 +94,45 @@ tests/
不推荐:
* 用 Zustand 保存服务端列表数据
* 用 Zustand 保存服务端主数据
* 用 Context 代替完整数据层方案
* 页面里堆叠过多耦合本地状态
---
### 4.3 类型
## 9. 反馈、测试与交付
要求:
* 开启 TypeScript 严格模式
* 禁止滥用 `any`
* API 响应、表单输入、业务实体必须有明确类型
## 5. 表单与交互
统一使用:
* React Hook Form
* Zod
高风险操作必须:
* 二次确认
* 展示操作对象名称
* 明确成功与失败反馈
## 6. 样式与主题
样式原则:
* 统一使用 Tailwind CSS 与现有 token 体系
* 优先复用已有基础组件与布局组件
* 保持视觉层级、留白与语义颜色一致
主题要求:
* 同时支持 `light`、`dark`、`system`
* 用户选择必须持久化
* 首屏尽量避免主题闪烁
## 7. 测试与交付
每个页面至少具备:
@@ -256,5 +150,5 @@ tests/
交付要求:
* 构建产物保持可静态导出
* 构建结果保持可被 Go Server 托管
* 新页面与新组件默认同时通过亮色与暗色模式验收
* 构建结果可被 Go Server 托管
* 新页面默认通过亮色与暗色模式验收