mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-03 07:06:36 +08:00
5.2 KiB
5.2 KiB
OpenFlare 前端迁移 — 任务拆分与 AI 委派
状态:进行中(阶段 0 基建 + 阶段 2 核心链路并行)
目标前端:Wavelet/frontend/(Next.js 16 + shadcn/ui + Session 鉴权)
业务 API:阶段一仍调用/api/*legacy 兼容层(响应{success,message,data})
平台 API:认证/用户/Admin 使用/api/v1/*(响应{error_msg,data})
任务隔离规则
| 规则 | 说明 |
|---|---|
| 文件所有权 | 每个任务 仅修改 自己的 app/(main)/openflare/<module>/、lib/services/openflare/<module>.service.ts |
| 共享文件 | F0 独占:lib/navigation/、lib/services/openflare/legacy-base.service.ts、lib/services/openflare/index.ts(注册入口)、components/layout/sidebar.tsx(仅新增 OpenFlare 导航组)、app/(main)/openflare/layout.tsx |
| 禁止修改 | Wavelet 框架核心:app/(auth)/* 逻辑、lib/services/core/*、components/ui/* 源码 |
| UI 规范 | 标题 h1 text-2xl font-semibold tracking-tight;单文件 ≤600 行;参考 /admin/demo、/admin/database 拆分模式 |
| 组件 | 仅用 @/components/ui/*(shadcn),禁止复制旧 openflare-server/web/components/ui |
| 服务层 | 业务 API 继承 LegacyOpenFlareBaseService;平台 API 继续用 BaseService |
| 鉴权 | Session Cookie(withCredentials),禁止 OpenFlare-Token localStorage |
| 质量门禁 | cd Wavelet/frontend && pnpm typecheck && pnpm lint |
任务队列
| ID | 板块 | 状态 | 负责目录/文件 |
|---|---|---|---|
| F0 | 基建:Legacy 服务基类 + 导航 + 侧栏 + 路由骨架 | ✅ 完成 | legacy-base.service.ts、openflare-nav.ts、sidebar.tsx、/home → /openflare |
| F-NODE | 节点列表 + Edge 详情 | ✅ 完成(Relay/Tunnel 详情待补) | node.service.ts、openflare/nodes/ |
| F-PROXY | 代理规则列表 + 详情骨架 | ✅ 骨架完成(6 Tab 待实装) | proxy-route.service.ts、openflare/proxy-routes/ |
| F-CFG | 配置发布 + 应用日志 | ✅ 完成 | config-version.service.ts、apply-log.service.ts |
| F-DASH | 总览仪表盘 | ⏳ | dashboard.service.ts、openflare/page.tsx |
| F-WAF | WAF 规则组 + IP 组 | ⏳ | waf.service.ts、openflare/waf/ |
| F-WEB | 网站/证书/DNS | ⏳ | website.service.ts、tls-certificate.service.ts、openflare/websites/ |
| F-PAGES | Pages 托管 | ⏳ | pages.service.ts、openflare/pages/ |
| F-ORIGIN | 源站 | ⏳ | origin.service.ts、openflare/origins/ |
| F-LOGS | 访问日志 | ⏳ | access-log.service.ts、openflare/access-logs/ |
| F-ADMIN | 运维设置扩展 Admin | ⏳ | option.service.ts、admin/settings 扩展块 |
| F-AUTH | 认证复用验证(Wavelet 原生) | ⏳ | 仅导航/回调 URL,不改登录页 |
Legacy API 适配要点
旧 OpenFlare 业务 API 响应:
{ "success": true, "message": "", "data": { ... } }
Wavelet BaseService 期望 { "error_msg": "", "data": ... }。业务服务必须使用 LegacyOpenFlareBaseService:
// lib/services/openflare/legacy-base.service.ts
protected static async legacyGet<T>(path: string, params?: Record<string, unknown>): Promise<T>
protected static async legacyPost<T>(path: string, data?: unknown): Promise<T>
// 解析 success/message/data;success=false 时 throw ApiErrorBase(message)
阶段一 basePath 示例:/api/nodes、/api/proxy-routes(无 /v1 前缀)。
页面规范速查
// 标准页面外壳(参考 admin/demo)
<div className="py-6 px-1 space-y-6">
<div className="flex items-center gap-2">
<Icon className="size-5 text-primary" />
<h1 className="text-2xl font-semibold tracking-tight">页面标题</h1>
</div>
{/* 内容 */}
</div>
| 旧组件 | Wavelet 替代 |
|---|---|
app-modal |
Dialog / Sheet |
app-table |
Table + @tanstack/react-table 或简易 Table |
status-badge |
Badge variant |
primary-button |
Button |
| ECharts 趋势图 | Recharts(世界地图可暂保留 ECharts) |
源代码参考
| 类型 | 路径 |
|---|---|
| 旧前端业务 | openflare-server/web/features/<module>/ |
| 新前端标杆 | Wavelet/frontend/app/(main)/admin/database/、admin/demo/ |
| 服务层范例 | Wavelet/frontend/lib/services/admin/user.service.ts |
| 迁移计划 | docs/plan/20260618-openflare-wavelet-frontend-migration.md |
| 后端 API | docs/plan/20260618-openflare-wavelet-backend-migration.md §12 |
验收命令
cd Wavelet/frontend
pnpm typecheck
pnpm lint
pnpm dev # 联调 wavelet api :3000
阶段验收标准
| 阶段 | 验收 |
|---|---|
| F0 完成 | 登录后侧栏可见 OpenFlare 导航;/home → /openflare;各路由有占位或骨架页 |
| F-NODE + F-PROXY + F-CFG | 节点 CRUD、规则 CRUD、配置发布/激活、应用日志列表可联调 |
| 全量 | 旧前端 18 个控制台路由功能对等;E2E 核心路径通过 |
下一步(F0 完成后)
- 启动 F-DASH(仪表盘,依赖 dashboard API)
- 启动 F-WAF + F-WEB(阶段 3 并行)
- F-ADMIN 合并运维设置到
admin/settings - 更新
docs/changelog/index.md(代码变更时)