Files
yidaima/RuoYi-Vue/docs/superpowers/specs/2026-05-28-frontend-function-reorg-design.md

257 lines
7.3 KiB
Markdown
Raw Permalink Normal View History

2026-05-28 22:42:12 +08:00
# EasyCode 前台功能重组设计
## 目标
重组 `easycode-web` 前台页面的信息架构,把当前堆在 `/generate` 的生成、编辑、页面设计入口、预览入口和 AI 状态拆成更清晰的项目内工作区。
本次选择方案 B新增项目详情枢纽功能按阶段分区。
目标体验:
- 用户从首页或项目列表进入项目后,先看到项目当前进度和下一步动作。
- 创建项目、项目内编辑、页面设计、预览运行有明确边界。
- 保留现有后端接口和主要组件能力,优先做前台结构重组,不做后端重构。
## 当前问题
当前前台主链路已经完整:
```text
首页 -> 生成工作台 -> 页面设计器 -> 项目预览/运行预览
```
问题不是功能缺失,而是功能增长后页面职责没有重新分层:
- `/generate` 同时承担创建项目、AI 生成、数据库编辑、业务动作编辑、页面设计入口、预览入口。
- 用户难判断当前处于哪一步,也不容易知道下一步动作。
- 页面设计器已经独立,但工作台仍保留过多页面设计状态和入口说明。
- 预览页已经包含结构预览和运行预览,入口应该从项目交付阶段统一进入。
## 设计决策
### 路由分层
保留平台级页面:
- `/`:首页,只负责产品介绍、关键词输入和引导创建。
- `/projects`:我的项目,负责项目列表、继续编辑、删除等项目级动作。
- `/generate`:创建/继续项目入口,负责新建项目草稿、填写基础需求、恢复最近项目。
- `/source-store``/source-store/:sourceId`:源码库相关页面,保持平台级入口。
- `/profile`:个人中心。
新增项目内工作区:
- `/project/:projectId/workspace`:项目详情枢纽,承载项目内主流程。
继续保留独立工具页面:
- `/project/:projectId/page-designer`:全屏页面设计器。
- `/project/:projectId/preview`:项目结构预览、运行预览和源码下载。
### 页面职责
#### GenerateView
改造成轻量创建页。
保留:
- 项目名称。
- 需求关键词。
- 补充说明。
- 是否生成用户前台。
- 后台功能模块选择。
- 创建项目并进入工作区。
- 打开最近项目。
移出:
- 系统模块设计面板。
- 数据库设计器。
- 业务流程设计面板。
- 页面设计入口卡片。
- 预览项目动作。
- AI 任务详情和历史列表。
#### ProjectWorkspaceView
新增项目工作区,作为项目内中控台。
左侧项目导航:
- 项目概览。
- 需求与 AI。
- 系统蓝图。
- 数据模型。
- 业务动作。
- 页面设计。
- 预览交付。
右侧内容区按当前导航展示功能:
- 项目概览:项目信息、完成度、下一步动作、关键入口。
- 需求与 AI基础需求表单、AI 配额、任务状态、生成历史。
- 系统蓝图系统模块设计摘要、模块图、JSON 调整。
- 数据模型数据库设计器、ER 图、保存表结构。
- 业务动作业务流程设计摘要、JSON 调整、保存。
- 页面设计:前台/后台页面设计统计、初始化页面、进入设计器。
- 预览交付:生成项目预览、进入结构预览、进入运行预览、下载提示。
#### PageDesignerView
保持独立页面,减少工作区干扰。
工作区只提供入口和状态,真正的页面树、画布、属性面板、业务块配置继续在页面设计器内完成。
#### PreviewView
保持独立页面,继续负责:
- 后端、前台前端、后台前端项目结构。
- 文件代码预览。
- 运行预览启动、停止、日志、iframe 预览。
- 源码下载。
工作区的预览交付页只负责进入这里,并在需要时先触发生成项目。
## 前端结构
新增:
- `easycode-web/src/views/ProjectWorkspaceView.vue`
调整:
- `easycode-web/src/router/index.js`
- 增加 `/project/:projectId/workspace`
- 创建成功、项目列表继续编辑入口指向工作区。
- `easycode-web/src/views/GenerateView.vue`
- 收敛为创建页。
- 创建或更新项目后跳转工作区。
- `easycode-web/src/views/ProjectListView.vue`
- 继续编辑进入工作区。
- `easycode-web/src/components/AppHeader.vue`
- 保持平台级导航,避免把项目内阶段塞进全局导航。
优先复用现有组件:
- `AiTaskStatusPanel.vue`
- `AppBlueprintPanel.vue`
- `DatabaseDesigner.vue`
- `ErDiagramView.vue`
- `BusinessBlueprintPanel.vue`
这些组件在 `ProjectWorkspaceView` 内按阶段组合。
## 数据流
项目创建:
```text
HomeView / GenerateView
-> createProject / updateProject
-> /project/:projectId/workspace
```
项目工作区加载:
```text
ProjectWorkspaceView
-> getProject
-> getDatabase
-> listPageDesigns(frontend/admin)
-> listBusinessBlocks
-> getAiQuota
-> listGenerations
```
AI 生成:
```text
ProjectWorkspaceView
-> createAiTask(app_blueprint/database/business_blueprint)
-> polling getAiTask
-> apply result to local state
-> saveDatabase when needed
```
页面设计:
```text
ProjectWorkspaceView
-> initPageDesigns
-> /project/:projectId/page-designer?scope=frontend|admin
```
预览交付:
```text
ProjectWorkspaceView
-> saveDatabase
-> generateProject
-> /project/:projectId/preview
```
## 状态与错误处理
项目工作区统一显示:
- 项目加载失败。
- AI 任务失败,可重试。
- 数据库为空时,引导先生成或手动添加表。
- 页面设计未初始化时,引导初始化。
- 预览生成失败时,显示错误并停留在工作区。
页面级原则:
- 创建页只校验创建项目所需字段。
- 工作区按阶段给出下一步动作。
- 页面设计器离开前继续保留未保存确认。
- 预览页继续自行处理结构、文件、运行预览错误。
## 测试
前端测试重点:
- 路由包含 `/project/:projectId/workspace` 并要求登录。
- `GenerateView` 创建项目后跳转工作区。
- `ProjectListView` 继续编辑指向工作区。
- `ProjectWorkspaceView` 能加载项目、数据库、页面设计和业务块。
- 工作区能触发系统蓝图、数据库、业务动作生成。
- 工作区能进入前台/后台页面设计器。
- 工作区能生成并进入预览页。
手工验收:
1. 首页输入关键词进入创建页。
2. 创建项目后进入项目工作区。
3. 在工作区能看到项目概览和阶段导航。
4. 生成系统蓝图、数据库、业务动作。
5. 初始化前台和后台页面设计。
6. 从工作区进入页面设计器并返回。
7. 从工作区进入预览页,查看结构和运行预览。
8. 从我的项目继续编辑时进入工作区。
## 分期实施
第一阶段:
- 新增 `ProjectWorkspaceView`
- 调整路由和项目入口。
-`GenerateView` 收敛为创建页。
- 在工作区复用现有生成、数据库、业务动作、页面设计入口和预览逻辑。
第二阶段:
- 根据工作区使用情况,继续拆出更小的阶段组件。
- 优化项目概览完成度和下一步规则。
- 清理 `GenerateView` 中迁移后不再需要的状态和样式。
## 自检
- 无未定义占位项。
- 范围聚焦在前台信息架构和页面职责重组。
- 不要求后端 API 改造。
- 页面设计器和预览页继续保持独立,避免一次改动过大。
- 设计和已确认的 B 方案一致。