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