You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dianshang-qianduan/docs/superpowers/plans/2026-08-26-market-opportuni...

95 lines
4.4 KiB
Markdown

# 市场机会识别第二步权重设置 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:** 让学生在市场机会识别第二步完成符合原型的指标权重设定、实时计算和可靠保存。
**Architecture:** 前端页面负责按固定分组渲染权重表、输入状态和即时总计;既有第二步接口负责服务器端最终校验。答案继续存放在学生实训答案的 `step2Answer`,不新增数据表或接口字段。
**Tech Stack:** Vue 3、Element Plus、Vite、Spring Boot、JUnit 5。
---
## 文件结构
- 修改:`src/views/product/market-opportunity-selection.vue` — 第二步表格、状态提示、交互和保存回显。
- 修改:`tests/market-opportunity-step2.static.test.cjs` — 前端结构与计算契约。
- 修改:`E:/workspace/dianshang/dianshang-houduan/src/test/java/com/sztzjy/linkCommerce/service/impl/MarketOpportunitySelectionStepTwoServiceImplTest.java` — 后端校验回归测试。
### Task 1: 前端第二步权重表契约
**Files:**
- Create: `tests/market-opportunity-step2.static.test.cjs`
- Modify: `src/views/product/market-opportunity-selection.vue`
- [ ] **Step 1: 编写失败的前端契约测试**
断言页面按以下固定顺序含有一级指标和二级指标:市场规模(搜索次数、成交金额)、市场潜力(成交金额增速、类目成交增速)、竞争强度(需供比、在线商品数、在线商家数)、运营难度(自然流占比、退货率);同时断言 2535、6575、5565、3545、2030、1020 建议区间、一级/对应总权重统计、实时错误状态和公式计算函数存在。
- [ ] **Step 2: 运行测试确认失败**
Run`E:/workspace/dianshang/dianshang-qianduan`: `node --test tests/market-opportunity-step2.static.test.cjs`
Expected: 因新的原型布局和输入反馈契约尚未实现而失败。
- [ ] **Step 3: 最小化实现原型布局与即时反馈**
让第二步使用分组表格:一级权重输入使用合并单元格,二级权重按指标逐行输入,对应总权重只读显示;在总计不满足 100% 时显示错误提示。
- [ ] **Step 4: 运行前端测试确认通过**
Run`E:/workspace/dianshang/dianshang-qianduan`: `node --test tests/market-opportunity-step2.static.test.cjs`
Expected: PASS。
### Task 2: 后端权重规则回归
**Files:**
- Modify: `E:/workspace/dianshang/dianshang-houduan/src/test/java/com/sztzjy/linkCommerce/service/impl/MarketOpportunitySelectionStepTwoServiceImplTest.java`
- [ ] **Step 1: 编写失败的后端测试**
新增一个请求:一级权重合法,但某个维度缺少预期的二级指标(或包含未知二级指标),断言服务拒绝。测试请求严格使用既有数组契约:`primaryWeights[].group`、`primaryWeights[].weight`、`dimensionWeights[].id`、`dimensionWeights[].weight`。
- [ ] **Step 2: 运行后端定向测试确认失败或暴露缺口**
Run`E:/workspace/dianshang/dianshang-houduan`: `mvn -Dtest=MarketOpportunitySelectionStepTwoServiceImplTest test`
Expected: 若服务未覆盖该边界则失败;若现有服务已覆盖,记录现有实现满足约束并保持测试通过。
- [ ] **Step 3: 只在测试暴露缺口时补充最小校验代码**
保持请求字段和答案存储格式不变,确保服务拒绝缺失或未知的二级指标。
- [ ] **Step 4: 运行定向测试确认通过**
Run`E:/workspace/dianshang/dianshang-houduan`: `mvn -Dtest=MarketOpportunitySelectionStepTwoServiceImplTest test`
Expected: PASS。
### Task 3: 集成验证
**Files:**
- Modify: `src/views/product/market-opportunity-selection.vue`
- [ ] **Step 1: 验证答案保存与回显数据结构**
确认 `buildStepTwoOutcome` 保存 `primaryWeights`、`dimensionWeights` 和自动计算的 `correspondingWeights`;确认 `loadSavedAnswer` 使用同名字段恢复数据。
- [ ] **Step 2: 运行前端生产构建**
Run`E:/workspace/dianshang/dianshang-qianduan`: `npm run build:prod`
Expected: exit code 0。
- [ ] **Step 3: 运行后端完整测试**
Run`E:/workspace/dianshang/dianshang-houduan`: `mvn test`
Expected: 0 failures0 errors。
- [ ] **Step 4: 提交本次功能修改**
仅提交本次页面、测试和必要的后端修复,不包含本地日志或无关设计文档。