Files
yidaima/RuoYi-Vue/docs/superpowers/specs/2026-05-28-frontend-function-reorg-design.md
2026-05-28 22:42:12 +08:00

257 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 方案一致。