mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-01 22:46:38 +08:00
30 KiB
30 KiB
OpenFlare → Wavelet 前端迁移计划
文档类型:实现计划(Implementation Plan)
创建日期:2026-06-18
状态:✅ 迁移完成(FC-1~20 已实装;验证见docs/plan/verify-frontend-*.md) 前置阅读:Wavelet/AGENTS.md、docs/plan/20260618-openflare-wavelet-backend-migration.md
依赖:后端阶段一(旧路径/api/*兼容)完成后启动;阶段二可与后端阶段五并行
1. 目标与背景
1.1 需求背景
OpenFlare 管理控制台当前位于 openflare-server/web/(Next.js 15 + 静态导出嵌入 Go)。Wavelet 提供现代化全栈前端脚手架 Wavelet/frontend/(Next.js 16 + shadcn/ui + 完整 Admin 基建)。
迁移目标:
- 将 OpenFlare 全部业务 UI 按 Wavelet 设计风格重写,统一视觉与交互。
- 复用 Wavelet 内置页面与组件(布局、认证、设置、用户管理、Admin 基建),不重写平台能力。
- 重叠职能(登录、用户、OAuth、Access Token、系统设置)直接对接 Wavelet
/api/v1/*API,不再使用OpenFlare-Token。 - OpenFlare 业务 API 阶段一切至
/api/*(后端兼容层);阶段二逐步规范化。
1.2 开发范围
| 范围内 | 范围外 |
|---|---|
openflare-server/web 全部页面/功能迁移 |
文档站 docs/ VitePress 改造 |
| Wavelet 布局/导航扩展 | Wavelet 框架核心页面逻辑修改 |
| OpenFlare 业务 Service 层新建 | 旧前端继续长期并存(迁移完成后废弃) |
| 静态导出 / embed 部署方案确认 | Agent/Relay/Flared 节点侧 UI |
| E2E 测试迁移 | 英文界面 |
1.3 迁移总原则
| 原则 | 说明 |
|---|---|
| 框架组件优先 | 使用 Wavelet/frontend/components/ui/*,禁止复制旧 components/ui 11 个自建组件 |
| 服务层规范 | 所有 API 调用经 lib/services/,继承 BaseService |
| 页面规范 | 遵循 AGENTS.md:h1 text-2xl font-semibold tracking-tight,单文件 ≤600 行 |
| 重叠不重写 | 登录/注册/用户管理/认证源/AccessToken 用 Wavelet 现成页面 |
| 业务新建 | OpenFlare 独有功能在 app/(main)/openflare/ 新建 |
| 参考标杆 | 复杂页面参考 /admin/database 拆分模式、/admin/demo 组件用法 |
2. 现状与目标对照
2.1 技术栈对照
| 维度 | 旧前端 openflare-server/web |
目标 Wavelet/frontend |
|---|---|---|
| Next.js | 15 App Router | 16 App Router |
| React | 19 | 19 |
| CSS | Tailwind 4 | Tailwind 4 |
| UI 库 | 自建 11 组件 + HeroUI 混合 | shadcn/Radix 40+ |
| 图表 | ECharts | Recharts(必要时保留 ECharts) |
| 数据请求 | 原生 fetch | Axios + BaseService |
| 状态 | Context + Zustand + React Query | UserContext + React Query |
| 认证 | OpenFlare-Token localStorage |
Session Cookie + AccessToken |
| API 路径 | /api/* |
/api/v1/* + /api/*(业务) |
| 构建 | output: 'export' 嵌入 Go |
build:embed 或 standalone |
| 路由详情 | ?id= 查询参数 |
优先查询参数(保持静态兼容) |
2.2 目录结构对照
旧前端(迁移源):
openflare-server/web/
├── app/(dashboard)/ # 18 个控制台路由
├── app/(public)/ # 7 个公开路由
├── features/ # 15 个业务模块(核心逻辑)
├── components/ # 布局 + 轻量 UI
└── lib/api/ # fetch 客户端
目标前端(迁移目标):
Wavelet/frontend/
├── app/(auth)/ # ✅ 复用:login, register
├── app/(main)/
│ ├── home/ # 改造为 OpenFlare 仪表盘或重定向
│ ├── settings/ # ✅ 复用 + 扩展 OpenFlare 个人设置
│ ├── admin/ # ✅ 复用平台 Admin
│ └── openflare/ # 🆕 OpenFlare 业务路由根
│ ├── page.tsx # 仪表盘 /
│ ├── nodes/ # 节点
│ ├── proxy-routes/ # 代理规则
│ ├── pages/ # Pages 托管
│ ├── websites/ # 网站/证书
│ ├── waf/ # WAF
│ ├── origins/ # 源站
│ ├── config-versions/ # 配置发布
│ ├── access-logs/ # 访问日志
│ ├── performance/ # 性能调优
│ ├── apply-logs/ # 应用日志
│ └── components/ # 跨页面 OpenFlare 子组件
├── components/ # ✅ 复用框架组件
├── lib/services/
│ ├── index.ts # 注册 openflare 服务
│ └── openflare/ # 🆕 业务 API 服务
│ ├── types.ts
│ ├── proxy-route.service.ts
│ ├── node.service.ts
│ └── ...
└── lib/navigation/ # 🆕 侧栏导航配置
3. 功能板块迁移总览
3.1 三类处理方式
| 类别 | 数量 | 策略 |
|---|---|---|
| F-A 直接复用 Wavelet | 10 板块 | 不改页面,仅改导航/文案/配置 |
| F-B 扩展 Wavelet 页面 | 5 板块 | 在现有页面增加 OpenFlare 配置块 |
| F-C 新建 OpenFlare 页面 | 12 板块 | 按 Wavelet 风格完整重写 |
flowchart LR
subgraph Reuse["F-A 复用"]
Login["/login"]
Settings["/settings/*"]
AdminUsers["/admin/users"]
end
subgraph Extend["F-B 扩展"]
AdminSystem["/admin/system"]
AdminSettings["/admin/settings"]
AdminUpdater["升级能力"]
end
subgraph New["F-C 新建"]
Dashboard["/openflare"]
Nodes["/openflare/nodes"]
Routes["/openflare/proxy-routes"]
WAF["/openflare/waf"]
end
Reuse --> WaveletCore["Wavelet /api/v1"]
Extend --> MixedAPI["/api/v1 + /api"]
New --> OpenFlareAPI["/api/* 业务 API"]
4. F-A:直接复用 Wavelet(禁止重写)
| # | 旧路径/模块 | Wavelet 目标 | 迁移动作 | API 切换 |
|---|---|---|---|---|
| FA-1 | /login |
app/(auth)/login |
删除旧登录页;导航指向 Wavelet | /api/v1/user/login |
| FA-2 | /reset, /user/reset |
app/(auth)/ 密码重置流 |
复用 Wavelet 重置流程 | /api/v1/user/* |
| FA-3 | 注册(若开放) | app/(auth)/register |
复用 | /api/v1/user/register |
| FA-4 | Cap PoW | components/auth/cap-widget.tsx |
直接引用 | /api/cap/* 或 /api/v1/cap/* |
| FA-5 | OAuth 回调 | app/(auth)/ + OAuth 组件 |
回调 URL 改 Wavelet 格式 | /api/v1/oauth/* |
| FA-6 | /user 用户管理 |
app/(main)/admin/users |
修复:纳入侧栏导航 | /api/v1/admin/users |
| FA-7 | Access Token | app/(main)/settings/access-token |
复用 | /api/v1/user/access-tokens |
| FA-8 | 个人资料 | app/(main)/settings/profile |
复用 | /api/v1/user/self + profile |
| FA-9 | 修改密码 | app/(main)/settings/security |
复用 | /api/v1/user/change-password |
| FA-10 | 外观主题 | app/(main)/settings/appearance |
复用 Wavelet 40+ 主题 | 本地 |
需删除的旧代码:
openflare-server/web/features/auth/ # 整体废弃(保留类型参考)
openflare-server/web/app/(public)/login/
openflare-server/web/app/(public)/reset/
openflare-server/web/app/(dashboard)/user/ # 改用 /admin/users
openflare-server/web/lib/api/auth-token.ts # 改用 Session
5. F-B:扩展 Wavelet 现有页面
| # | 旧功能 | 旧位置 | Wavelet 扩展位置 | 扩展内容 |
|---|---|---|---|---|
| FB-1 | 运维设置 | /setting 运维 Tab |
app/(main)/admin/settings 或 admin/system |
Agent 心跳阈值、GeoIP Provider、OpenResty 默认参数 |
| FB-2 | 系统设置 | /setting 系统 Tab |
admin/system + new-setting skill |
登录开关、SMTP(若未覆盖)、公告 |
| FB-3 | 认证源 CRUD | /setting 系统 Tab |
admin/ 已有 auth-source 组件 |
确认 API 对齐;移除旧 modal |
| FB-4 | 数据库清理 | /setting 数据库 Tab |
admin/database 或 admin/settings |
观测数据保留天数、手动清理按钮 |
| FB-5 | 服务升级 | 顶栏 version-upgrade-modal |
复用 admin/updater 能力 |
增加 OpenFlare 发版渠道 stable/preview |
实现路径:
| 文件 | 职责 |
|---|---|
app/(main)/admin/settings/components/openflare-ops.tsx |
运维参数表单 |
app/(main)/admin/system/ 新增 KV |
OpenFlare Option 映射为 SystemConfig(可选) |
lib/services/openflare/option.service.ts |
读写 /api/option/* |
components/layout/app-sidebar.tsx |
增加 OpenFlare 设置入口 |
6. F-C:新建 OpenFlare 业务页面(完整重写)
6.1 页面路由映射表
| # | 旧路由 | 新路由 | 页面文件 | 优先级 | 复杂度 |
|---|---|---|---|---|---|
| FC-1 | / |
/openflare 或 /home 改造 |
app/(main)/openflare/page.tsx |
P0 | 高 |
| FC-2 | /node |
/openflare/nodes |
openflare/nodes/page.tsx |
P0 | 很高 |
| FC-3 | /node/detail?id= |
/openflare/nodes/detail |
openflare/nodes/detail/page.tsx |
P0 | 很高 |
| FC-4 | /proxy-route |
/openflare/proxy-routes |
openflare/proxy-routes/page.tsx |
P0 | 很高 |
| FC-5 | /proxy-route/detail?id=§ion= |
/openflare/proxy-routes/detail |
openflare/proxy-routes/detail/page.tsx |
P0 | 极高 |
| FC-6 | /config-version |
/openflare/config-versions |
openflare/config-versions/page.tsx |
P0 | 高 |
| FC-7 | /waf |
/openflare/waf |
openflare/waf/page.tsx |
P1 | 很高 |
| FC-8 | /waf/ip-groups |
/openflare/waf/ip-groups |
openflare/waf/ip-groups/page.tsx |
P1 | 高 |
| FC-9 | /website |
/openflare/websites |
openflare/websites/page.tsx |
P1 | 高 |
| FC-10 | /website/detail?id= |
/openflare/websites/detail |
openflare/websites/detail/page.tsx |
P1 | 高 |
| FC-11 | /website/certificate |
/openflare/websites/certificates |
openflare/websites/certificates/page.tsx |
P1 | 很高 |
| FC-12 | /website/dns-account |
/openflare/websites/dns-accounts |
openflare/websites/dns-accounts/page.tsx |
P1 | 中 |
| FC-13 | /pages |
/openflare/pages |
openflare/pages/page.tsx |
P2 | 中 |
| FC-14 | /pages/detail?id= |
/openflare/pages/detail |
openflare/pages/detail/page.tsx |
P2 | 中 |
| FC-15 | /origin |
/openflare/origins |
openflare/origins/page.tsx |
P2 | 低 |
| FC-16 | /origin/detail?id= |
/openflare/origins/detail |
openflare/origins/detail/page.tsx |
P2 | 低 |
| FC-17 | /access-log |
/openflare/access-logs |
openflare/access-logs/page.tsx |
P2 | 高 |
| FC-18 | /apply-log?node_id= |
/openflare/apply-logs |
openflare/apply-logs/page.tsx |
P2 | 低 |
| FC-19 | /performance |
/openflare/performance |
openflare/performance/page.tsx |
P2 | 中 |
| FC-20 | /about |
/docs 或 /openflare/about |
复用 docs 或新建 | P3 | 低 |
6.2 各板块详细迁移说明
FC-1 总览仪表盘
| 项 | 旧实现 | 新实现 |
|---|---|---|
| 源文件 | features/dashboard/components/dashboard-page.tsx |
openflare/page.tsx + components/dashboard-overview.tsx |
| 服务 | features/dashboard/api.ts |
lib/services/openflare/dashboard.service.ts |
| API | GET /api/dashboard/overview |
同左(阶段一) |
| 图表 | ECharts TrendChart, RankChart |
Recharts 或保留 ECharts(世界地图建议保留 ECharts/geoJSON) |
| 组件 | world-stage 世界地图 |
openflare/components/world-map.tsx |
| 关键指标 | 流量/容量/节点健康/24h 趋势 | 完整保留 |
子组件拆分:
openflare/components/dashboard/
├── overview-stats.tsx # 顶部指标卡片(Stat Card 模式)
├── traffic-trend-chart.tsx # 流量趋势
├── capacity-trend-chart.tsx # 容量趋势
├── node-health-table.tsx # 节点健康列表
├── geo-distribution.tsx # 国家分布
└── world-map.tsx # 世界地图
FC-2/FC-3 节点管理
| 项 | 说明 |
|---|---|
| 源文件 | features/nodes/components/nodes-page.tsx(列表)、node-detail-page.tsx(1800+ 行)、relay-detail-page.tsx、tunnel-detail-page.tsx |
| 新结构 | 列表页 ≤400 行;详情按 node_type 拆三个子组件 |
| API 服务 | node.service.ts |
| 关键功能 | 三类型筛选、Bootstrap Token、Agent 升级、强制同步、OpenResty 重启、安装命令、5s 轮询 |
| 对话框 | 使用 Sheet/Dialog 替代旧 app-modal |
详情页拆分:
openflare/nodes/detail/
├── page.tsx
└── components/
├── edge-node-detail.tsx # edge_node
├── relay-node-detail.tsx # tunnel_relay
├── tunnel-node-detail.tsx # tunnel_client
├── node-observability.tsx # 可观测性 Tab
├── node-actions.tsx # 操作按钮组
└── install-command.tsx # 安装命令生成
API 映射:
| 功能 | API |
|---|---|
| 列表 | GET /api/nodes/ |
| 创建/更新/删除 | POST /api/nodes/ 等 |
| Bootstrap | GET/POST /api/nodes/bootstrap-token/* |
| Agent 升级 | POST /api/nodes/:id/agent-update |
| 可观测 | GET /api/nodes/:id/observability |
| 应用日志 | GET /api/apply-logs/?node_id= |
FC-4/FC-5 代理规则
| 项 | 说明 |
|---|---|
| 源文件 | proxy-routes-page.tsx、proxy-route-config-page.tsx(1400+ 行) |
| 新结构 | 列表 + 详情 6 Section Tab |
| Section | domains、limits、proxy、cache、waf、auth |
详情 Tab 组件:
openflare/proxy-routes/detail/components/
├── domain-section.tsx
├── limits-section.tsx
├── proxy-section.tsx
├── cache-section.tsx
├── waf-section.tsx
├── auth-section.tsx
├── publish-diff-drawer.tsx # 发布前 diff
└── route-header.tsx
API 映射:
| 功能 | API |
|---|---|
| CRUD | /api/proxy-routes/* |
| 关联数据 | /api/managed-domains/、/api/pages/、/api/nodes/、/api/tls-certificates/ |
| WAF 绑定 | /api/waf/sites/:routeId/rule-groups |
| 发布 | GET /api/config-versions/diff、POST /api/config-versions/publish |
FC-6 配置发布
| 项 | 说明 |
|---|---|
| 源文件 | features/config-versions/components/config-versions-page.tsx |
| 功能 | 版本列表、快照查看、预览、diff、发布、激活、清理 |
| UI 模式 | Table + Sheet 预览 + Dialog 确认发布 |
FC-7/FC-8 WAF
| 项 | 说明 |
|---|---|
| 源文件 | waf-page.tsx(规则组)、ip-groups-page.tsx |
| 新路由 | /openflare/waf + /openflare/waf/ip-groups |
| 复杂 UI | 规则条目 Modal、PoW Tab、站点批量绑定 Drawer |
| 参考 | /admin/demo 的 Form/Table 模式 |
子组件:
openflare/waf/components/
├── rule-group-table.tsx
├── rule-group-form.tsx
├── rule-entry-dialog.tsx
├── rule-list-section.tsx
├── pow-config-panel.tsx
├── site-apply-sheet.tsx
├── ip-group-table.tsx
├── ip-group-form.tsx
└── ip-group-sync-button.tsx
FC-9~FC-12 网站与证书
| 页面 | 源文件 | 关键 Modal |
|---|---|---|
| 托管域名列表 | websites-page.tsx |
创建/编辑 Dialog |
| 域名详情 | website-detail-page.tsx |
证书关联、WAF 绑定 |
| 证书管理 | certificate-page.tsx |
ACME 申请、续期、导入、转换 |
| DNS 账号 | dns-account-page.tsx |
多厂商表单 |
API:/api/managed-domains/*、/api/tls-certificates/*、/api/dns-accounts/*、/api/acme-accounts/default
FC-13/FC-14 Pages 静态托管
| 功能 | 说明 |
|---|---|
| 项目 CRUD | Table + Dialog |
| 部署上传 | 使用 Wavelet 上传组件 + XHR 进度 |
| 部署管理 | 版本列表、激活、删除 |
| API | /api/pages/* |
FC-15/FC-16 源站
| 功能 | 说明 |
|---|---|
| 简单 CRUD | 列表 + 详情,低复杂度 |
| API | /api/origins/* |
FC-17 访问日志
| Tab | API |
|---|---|
| 明细 | GET /api/access-logs/ |
| 时间折叠 | GET /api/access-logs/folds |
| IP 汇总 | GET /api/access-logs/ip-summary |
| IP 趋势 | GET /api/access-logs/ip-summary/trend |
| 清理 | POST /api/access-logs/cleanup |
UI:DataTable + 筛选器 + 趋势图(Recharts)
FC-18 应用日志
| 功能 | 说明 |
|---|---|
| 按节点筛选 | ?node_id= 查询参数 |
| 入口 | 节点详情页跳转 |
| API | GET /api/apply-logs/ |
FC-19 性能调优
| 功能 | 说明 |
|---|---|
| 源文件 | features/performance/ + settings-page 运维重叠部分 |
| 内容 | OpenResty 全局参数表单 |
| 预览 | GET /api/config-versions/preview |
| API | GET/POST /api/option/* |
7. Service 层迁移清单
7.1 新建服务文件
| 服务文件 | basePath | 对应旧 features/*/api.ts |
|---|---|---|
dashboard.service.ts |
/api/dashboard |
features/dashboard/api.ts |
node.service.ts |
/api/nodes |
features/nodes/api.ts |
proxy-route.service.ts |
/api/proxy-routes |
features/proxy-routes/api.ts |
config-version.service.ts |
/api/config-versions |
features/config-versions/api.ts |
waf.service.ts |
/api/waf |
features/waf/api.ts |
website.service.ts |
/api/managed-domains |
features/websites/api.ts |
tls-certificate.service.ts |
/api/tls-certificates |
features/tls-certificates/api.ts |
dns-account.service.ts |
/api/dns-accounts |
features/dns-accounts/api.ts |
acme-account.service.ts |
/api/acme-accounts |
features/acme-accounts/api.ts |
pages.service.ts |
/api/pages |
features/pages/api.ts |
origin.service.ts |
/api/origins |
features/origins/api.ts |
access-log.service.ts |
/api/access-logs |
features/access-logs/api.ts |
apply-log.service.ts |
/api/apply-logs |
features/apply-logs/api.ts |
option.service.ts |
/api/option |
features/settings/api.ts |
update.service.ts |
/api/update |
features/update/api.ts |
types.ts |
— | 汇总 TypeScript 类型 |
7.2 服务注册
// lib/services/index.ts 新增
import { openflareDashboardService } from './openflare/dashboard.service';
// ...
const services = {
// ... 现有 Wavelet 服务
openflareDashboard: openflareDashboardService,
openflareNode: openflareNodeService,
// ...
};
7.3 API 客户端适配
| 阶段 | 认证方式 | Base URL |
|---|---|---|
| 阶段一(过渡期) | Session Cookie(Wavelet 登录)+ 业务 API 同域 | /api |
| 阶段二(稳定) | Session + 可选 AccessToken | /api + /api/v1 |
注意:移除 OpenFlare-Token localStorage 逻辑;统一使用 Wavelet proxy.ts 鉴权。
8. 组件复用与替换对照
8.1 旧 → Wavelet 组件映射
| 旧组件 | Wavelet 替代 |
|---|---|
app-card |
Card |
app-modal |
Dialog |
drawer |
Sheet |
input |
Input |
textarea |
Textarea |
switch |
Switch |
status-badge |
Badge |
theme-toggle |
内置 ThemeProvider |
sonner |
sonner(已有) |
empty-state |
components/common/empty.tsx |
loading-state |
Skeleton + loading.tsx |
error-state |
error.tsx |
resource-primitives |
Form + Field + shadcn 表单模式 |
trend-chart / rank-chart |
Recharts 或 ECharts 封装 |
8.2 布局改造
| 项 | 旧实现 | 新实现 |
|---|---|---|
| 侧栏 | dashboard-sidebar.tsx |
components/layout/app-sidebar.tsx 扩展 |
| 顶栏 | dashboard-topbar.tsx |
components/layout/header.tsx 扩展 |
| 导航配置 | lib/constants/navigation.ts |
lib/navigation/openflare-nav.ts |
| 鉴权守卫 | DashboardAuthGuard |
Wavelet proxy.ts + use-auth-redirect |
新侧栏导航结构:
OpenFlare
├── 总览 /openflare
├── 节点 /openflare/nodes
├── 代理规则 /openflare/proxy-routes
├── 配置发布 /openflare/config-versions
├── WAF /openflare/waf
├── 网站 /openflare/websites
├── Pages /openflare/pages
├── 源站 /openflare/origins
├── 访问日志 /openflare/access-logs
├── 性能调优 /openflare/performance
---
平台(Wavelet 原生)
├── 用户管理 /admin/users
├── 系统设置 /admin/settings
├── 任务调度 /admin/tasks
├── 日志分析 /admin/logs
├── ...
9. 分阶段实施计划
阶段 0:基建(1 周)— ✅ 已完成
| 任务 ID | 任务 | 状态 |
|---|---|---|
| F0-1 | 创建 lib/services/openflare/ 骨架 |
✅ legacy-base.service.ts + types |
| F0-2 | 创建 lib/navigation/openflare-nav.ts |
✅ |
| F0-3 | 扩展 app-sidebar.tsx |
✅ OpenFlare 导航组 |
| F0-4 | 确认 embed 构建方案 | ⏳ |
| F0-5 | 移除旧前端入口引用准备 | ⏳ |
阶段 1:认证与布局(1 周)
| 任务 ID | 任务 |
|---|---|
| F1-1 | 确认 Wavelet 登录/register 可用 |
| F1-2 | OAuth 回调路径配置 |
| F1-3 | 侧栏 + 顶栏 OpenFlare 品牌 |
| F1-4 | /home 重定向至 /openflare |
| F1-5 | 用户管理入口暴露至 /admin/users |
验收:Wavelet 登录后可看到 OpenFlare 空导航骨架。
阶段 2:核心链路 UI(2–3 周)— 进行中
| 任务 ID | 页面 | 状态 |
|---|---|---|
| F2-1 | 节点列表 + 详情(edge) | ✅ 列表 + Edge 详情 |
| F2-2 | 代理规则列表 + 详情 | ✅ 列表 + 6 Tab 骨架 |
| F2-3 | 配置发布 | ✅ |
| F2-4 | 应用日志 | ✅ |
| F2-5 | relay/tunnel 详情页 | ⏳ |
| F2-6 | 代理规则详情各 Section 表单实装 | ⏳ |
验收:UI 完成节点→规则→发布闭环操作。
阶段 3:安全与流量(2 周)
| 任务 ID | 页面 |
|---|---|
| F3-1 | WAF 规则组 |
| F3-2 | WAF IP 组 |
| F3-3 | 网站/域名 |
| F3-4 | TLS 证书 + ACME |
| F3-5 | DNS 账号 |
阶段 4:扩展(2 周)
| 任务 ID | 页面 |
|---|---|
| F4-1 | Pages 托管 |
| F4-2 | 源站 |
| F4-3 | 访问日志 |
| F4-4 | 总览仪表盘 |
| F4-5 | 性能调优 |
阶段 5:设置合并与收尾(1–2 周)
| 任务 ID | 任务 |
|---|---|
| F5-1 | OpenFlare 运维/系统设置并入 Admin |
| F5-2 | 服务升级 UI 对接 admin/updater |
| F5-3 | 废弃 openflare-server/web 引用 |
| F5-4 | Playwright E2E 核心路径 |
| F5-5 | 视觉走查与响应式适配 |
| F5-6 | Handover 文档 |
10. 旧前端源文件 → 新文件完整映射
| 旧文件 | 新文件 | 动作 |
|---|---|---|
features/dashboard/components/dashboard-page.tsx |
openflare/page.tsx |
重写 |
features/nodes/components/nodes-page.tsx |
openflare/nodes/page.tsx |
重写 |
features/nodes/components/node-detail-page.tsx |
openflare/nodes/detail/components/edge-node-detail.tsx |
拆分重写 |
features/nodes/components/relay-detail-page.tsx |
openflare/nodes/detail/components/relay-node-detail.tsx |
拆分重写 |
features/nodes/components/tunnel-detail-page.tsx |
openflare/nodes/detail/components/tunnel-node-detail.tsx |
拆分重写 |
features/nodes/components/node-editor-modal.tsx |
openflare/nodes/components/node-form-dialog.tsx |
重写 |
features/proxy-routes/components/proxy-routes-page.tsx |
openflare/proxy-routes/page.tsx |
重写 |
features/proxy-routes/components/proxy-route-config-page.tsx |
openflare/proxy-routes/detail/page.tsx + 6 section |
拆分重写 |
features/proxy-routes/components/proxy-route-create-drawer.tsx |
openflare/proxy-routes/components/create-sheet.tsx |
重写 |
features/config-versions/components/config-versions-page.tsx |
openflare/config-versions/page.tsx |
重写 |
features/waf/components/waf-page.tsx |
openflare/waf/page.tsx |
重写 |
features/waf/components/ip-groups-page.tsx |
openflare/waf/ip-groups/page.tsx |
重写 |
features/waf/components/rule-entry-modal.tsx |
openflare/waf/components/rule-entry-dialog.tsx |
重写 |
features/websites/components/websites-page.tsx |
openflare/websites/page.tsx |
重写 |
features/websites/components/website-detail-page.tsx |
openflare/websites/detail/page.tsx |
重写 |
features/tls-certificates/components/*.tsx |
openflare/websites/certificates/components/*.tsx |
重写 |
features/pages/components/pages-page.tsx |
openflare/pages/page.tsx |
重写 |
features/pages/components/pages-detail-page.tsx |
openflare/pages/detail/page.tsx |
重写 |
features/origins/components/origins-page.tsx |
openflare/origins/page.tsx |
重写 |
features/access-logs/components/access-logs-page.tsx |
openflare/access-logs/page.tsx |
重写 |
features/apply-logs/components/apply-logs-page.tsx |
openflare/apply-logs/page.tsx |
重写 |
features/performance/components/performance-page.tsx |
openflare/performance/page.tsx |
重写 |
features/settings/components/settings-page.tsx |
拆入 admin/settings + settings/* |
拆分废弃 |
features/update/components/version-upgrade-modal.tsx |
并入 header + admin/updater |
适配 |
features/auth/components/*.tsx |
— | 删除,用 Wavelet |
features/users/components/*.tsx |
— | 删除,用 /admin/users |
components/layout/dashboard-shell.tsx |
components/layout/ Wavelet 布局 |
废弃 |
components/ui/*.tsx |
components/ui/*.tsx Wavelet |
废弃 |
lib/api/client.ts |
lib/services/core/base.service.ts |
废弃 |
store/app-shell.ts |
Wavelet 侧栏内置状态 | 废弃 |
11. 页面-API 完整依赖表(迁移后)
认证类 API 在阶段二切换至
/api/v1/*;业务 API 保持/api/*。
| 新页面 | 依赖 API 端点 |
|---|---|
/openflare |
GET /api/dashboard/overview |
/openflare/nodes |
GET/POST /api/nodes/, GET /api/nodes/bootstrap-token |
/openflare/nodes/detail |
GET/POST /api/nodes/:id/*, GET /api/nodes/:id/observability, GET /api/nodes/:id/agent-release |
/openflare/proxy-routes |
GET/POST /api/proxy-routes/* |
/openflare/proxy-routes/detail |
同上 + GET /api/managed-domains/, GET /api/pages/, GET /api/tls-certificates/, GET/POST /api/waf/sites/:id/rule-groups, GET /api/config-versions/diff, POST /api/config-versions/publish |
/openflare/config-versions |
GET/POST /api/config-versions/* |
/openflare/waf |
GET/POST /api/waf/rule-groups/*, GET /api/proxy-routes/ |
/openflare/waf/ip-groups |
GET/POST /api/waf/ip-groups/* |
/openflare/websites |
GET/POST /api/managed-domains/* |
/openflare/websites/detail |
同上 + GET /api/proxy-routes/, WAF 绑定 API |
/openflare/websites/certificates |
GET/POST /api/tls-certificates/*, GET /api/acme-accounts/default |
/openflare/websites/dns-accounts |
GET/POST /api/dns-accounts/* |
/openflare/pages |
GET/POST /api/pages/* |
/openflare/pages/detail |
部署相关 /api/pages/:id/deployments/* |
/openflare/origins |
GET/POST /api/origins/* |
/openflare/access-logs |
GET/POST /api/access-logs/* |
/openflare/apply-logs |
GET/POST /api/apply-logs/* |
/openflare/performance |
GET/POST /api/option/*, GET /api/config-versions/preview |
/login |
POST /api/v1/user/login, Cap API |
/admin/users |
/api/v1/admin/users/* |
/settings/* |
/api/v1/user/* |
/admin/settings |
/api/v1/admin/* + /api/option/*(OpenFlare 扩展) |
| 顶栏升级 | /api/update/* 或 /api/v1/admin/updater/* |
12. 验证计划
12.1 开发验证
cd Wavelet/frontend
pnpm lint
pnpm build
pnpm dev # 联调 Wavelet api 进程
12.2 功能走查清单
| 场景 | 步骤 | 预期 |
|---|---|---|
| 登录 | Wavelet 登录页 | Session 建立,跳转 /openflare |
| 创建节点 | nodes → 创建 → 复制安装命令 | 节点上线 |
| 创建规则 | proxy-routes → 6 section 配置 | 保存成功 |
| 发布配置 | config-versions → diff → publish → activate | Agent 收到配置 |
| WAF 拦截 | waf → 创建规则组 → 绑定站点 | 规则生效 |
| 证书申请 | certificates → ACME | 证书签发 |
| Pages 部署 | pages → 上传 zip → 激活 | 部署成功 |
| 访问日志 | access-logs → 筛选/折叠 | 数据展示 |
| 用户管理 | admin/users | CRUD 正常 |
| 升级 | 顶栏检查更新 | WS 日志 + 升级成功 |
12.3 E2E 测试规划
| 测试文件 | 覆盖路径 |
|---|---|
e2e/openflare-auth.spec.ts |
登录/登出 |
e2e/openflare-node.spec.ts |
节点 CRUD |
e2e/openflare-proxy-route.spec.ts |
规则 + 发布 |
e2e/openflare-waf.spec.ts |
WAF 规则组 |
13. 风险与缓解
| 风险 | 缓解 |
|---|---|
| 大文件拆分工作量大 | 按 section/tab 并行;参考 admin/database |
| ECharts → Recharts 世界地图 | 保留 ECharts 作为可选依赖 |
| 静态导出 vs SSR | 优先确认 build:embed;保留 ?id= 查询参数路由 |
| 设置页 2400 行拆分遗漏 | 逐项对照 5 Tab 功能清单 |
/user 无入口历史问题 |
统一纳入 /admin/users 侧栏 |
| 微信/OAuth 特殊流程 | 与后端 legacy 层同步验证 |
| 上传进度 | Pages 部署保留 XHR 进度;复用 Wavelet upload 基建 |
14. 里程碑
| 里程碑 | 时间 | 标志 |
|---|---|---|
| M1 布局就绪 | 第 1 周 | 导航 + 登录 + 空页面 |
| M2 核心 UI | 第 4 周 | 节点/规则/发布可用 |
| M3 安全流量 | 第 6 周 | WAF/证书/网站 |
| M4 全页面 | 第 8 周 | 全部 FC 页面完成 |
| M5 上线切换 | 第 10 周 | 废弃旧 web,embed 新前端 |
15. 与后端计划协同时间表
gantt
title OpenFlare 迁移协同
dateFormat YYYY-MM-DD
section 后端
基建与认证 :b0, 2026-06-18, 3w
核心链路 :b2, after b0, 3w
安全证书 :b3, after b2, 2w
扩展运维 :b4, after b3, 3w
section 前端
基建布局 :f0, 2026-07-02, 2w
核心UI :f2, after f0, 3w
安全流量UI :f3, after f2, 2w
扩展收尾 :f4, after f3, 3w
| 后端里程碑 | 前端可启动项 |
|---|---|
| M2 认证联调 | F1 认证与布局 |
| M3 核心链路 | F2 节点/规则/发布 |
| M4 安全证书 | F3 WAF/网站/证书 |
| M5 全量功能 | F4 仪表盘/日志/Pages |
16. 参考文档
Wavelet/AGENTS.md— 开发前必读docs/plan/20260618-openflare-wavelet-backend-migration.md- Wavelet 标杆页面:
Wavelet/frontend/app/(main)/admin/database/、admin/demo/ - 旧前端源码:
openflare-server/web/features/