# 项目一键生成任务总览与跨会话恢复 Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** 让用户从“我的项目”看到一键生成进度,并通过服务器任务 ID 跨页面、跨缓存恢复同一个生成任务。 **Architecture:** 服务端增加按当前用户查询“每项目最新一键任务”的轻量只读接口;项目列表把任务总览与项目数据合并展示;生成工作台使用路由 `taskId` 恢复任务,并保留本地缓存作为兼容回退。 **Tech Stack:** Java 8、Spring MVC、MyBatis、JUnit 4、Vue 3、Vue Router、Element Plus、Node test runner、Vite。 ## Global Constraints - 不新增数据库表或数据库迁移。 - 总览 DTO 不得包含 `requestPayload` 或 `resultPayload`。 - 所有任务查询必须按当前登录 `userId` 隔离。 - 现有 `localStorage` 恢复逻辑保留为兼容兜底。 - 明文开发凭据和 TLS 跳过配置保持不变。 - 工作区包含其他未提交改造,本轮不自动创建 Git 提交。 --- ### Task 1: 最新一键生成任务总览接口 **Files:** - Create: `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/dto/AiGenerationTaskOverview.java` - Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/front/AiGenerationTaskMapper.java` - Modify: `ruoyi-generator/src/main/resources/mapper/front/AiGenerationTaskMapper.xml` - Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/IAiGenerationTaskService.java` - Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/AiGenerationTaskServiceImpl.java` - Modify: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/front/FrontProjectController.java` - Test: `ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/AiGenerationTaskServiceImplTest.java` - Test: `ruoyi-admin/src/test/java/com/ruoyi/web/controller/front/FrontProjectControllerRunPreviewTest.java` **Interfaces:** - Produces: `List listOneClickTaskOverview(Long userId)` - Produces: `GET /front/project/ai-tasks/one-click-overview` - [x] 添加轻量 DTO 测试,确认不存在请求和结果 Payload 字段。 - [x] 添加 Mapper 查询,一次返回当前用户每个项目最新的 `one_click_project` 任务。 - [x] 添加服务映射和空用户校验。 - [x] 添加当前登录用户控制器入口。 - [x] 运行 `mvn -pl ruoyi-generator -am "-Dtest=AiGenerationTaskServiceImplTest" "-Dsurefire.failIfNoSpecifiedTests=false" test`,期望聚焦测试通过。 - [x] 运行 `mvn -pl ruoyi-admin -am "-Dtest=FrontProjectControllerRunPreviewTest" "-Dsurefire.failIfNoSpecifiedTests=false" test`,期望聚焦测试通过。 ### Task 2: 项目列表生成状态与继续入口 **Files:** - Modify: `easycode-web/src/api/project.js` - Modify: `easycode-web/src/views/ProjectListView.vue` - Test: `easycode-web/src/views/projectListView.test.mjs` **Interfaces:** - Consumes: `listOneClickTaskOverview(): Promise` - Produces: `openOneClickTask(project)`,路由查询包含 `projectId`、`mode=one-click` 和可选 `taskId` - [x] 添加总览 API 客户端。 - [x] 在项目列表增加稳定宽度的状态、进度和当前步骤视图。 - [x] 使用图标按钮进入对应一键生成任务。 - [x] 对进度接口失败做降级,保留项目列表主体。 - [x] 运行 `node --test src/views/projectListView.test.mjs`,期望全部通过。 ### Task 3: 生成页服务器任务恢复 **Files:** - Modify: `easycode-web/src/views/GenerateView.vue` - Test: `easycode-web/src/views/generateView.test.mjs` **Interfaces:** - Produces: `restoreTaskById(id, taskId, expectedGenerateType)` - Produces: `syncOneClickTaskRoute(id, taskId)` - [x] 先添加路由任务恢复和新任务路由同步的失败测试。 - [x] 从 `route.query.taskId` 加载并校验服务器任务。 - [x] 没有路由任务时回退到现有本地缓存恢复。 - [x] 监听同项目内的 `taskId` 变化,同时避免项目加载期和同任务重复轮询。 - [x] 切换任务前使旧通道轮询失效,并防止旧轮询的收尾逻辑覆盖新任务状态。 - [x] 新任务创建后立即同步地址栏;同步失败不终止任务轮询。 - [x] 运行 `node --test src/views/generateView.test.mjs`,期望全部通过。 ### Task 4: 文档与完整验证 **Files:** - Create: `docs/superpowers/specs/2026-07-11-one-click-task-overview-resume-design.md` - Create: `docs/superpowers/plans/2026-07-11-one-click-task-overview-resume.md` - Modify: `docs/superpowers/specs/2026-07-10-ai-software-factory-roadmap.md` - [x] 记录本轮主线校正、设计边界和实施步骤。 - [x] 解析 MyBatis XML,确认 Mapper 文件有效。 - [x] 运行 EasyCode 页面契约测试和生产构建。 - [x] 运行 `ruoyi-admin` 全量测试。 - [x] 核对本轮 diff,确认没有数据库迁移、开发凭据或无关模块改动。 ## Verification Record - EasyCode 主流程页面契约:47 项通过,0 失败。 - `AiGenerationTaskServiceImplTest`:16 项通过,0 失败。 - `FrontProjectControllerRunPreviewTest`:12 项通过,0 失败。 - `ruoyi-admin` 全量:39 项通过,0 失败。 - `easycode-web` 生产构建:通过,保留既有大 Chunk 与第三方 PURE 注解警告。 - MyBatis XML:成功解析并找到 `selectLatestTasksForUserByType`。 - EasyCode 开发服务:`http://localhost:5174` 返回 HTTP 200。 - 单独运行管理端测试前发现本地 Maven 仓库仍是旧 `ruoyi-generator` 包;安装当前模块产物后,同一全量命令通过。该问题未通过业务代码绕过。