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...

4.4 KiB

市场机会识别第二步权重设置 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: 运行测试确认失败

RunE:/workspace/dianshang/dianshang-qianduan: node --test tests/market-opportunity-step2.static.test.cjs

Expected: 因新的原型布局和输入反馈契约尚未实现而失败。

  • Step 3: 最小化实现原型布局与即时反馈

让第二步使用分组表格:一级权重输入使用合并单元格,二级权重按指标逐行输入,对应总权重只读显示;在总计不满足 100% 时显示错误提示。

  • Step 4: 运行前端测试确认通过

RunE:/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[].groupprimaryWeights[].weightdimensionWeights[].iddimensionWeights[].weight

  • Step 2: 运行后端定向测试确认失败或暴露缺口

RunE:/workspace/dianshang/dianshang-houduan: mvn -Dtest=MarketOpportunitySelectionStepTwoServiceImplTest test

Expected: 若服务未覆盖该边界则失败;若现有服务已覆盖,记录现有实现满足约束并保持测试通过。

  • Step 3: 只在测试暴露缺口时补充最小校验代码

保持请求字段和答案存储格式不变,确保服务拒绝缺失或未知的二级指标。

  • Step 4: 运行定向测试确认通过

RunE:/workspace/dianshang/dianshang-houduan: mvn -Dtest=MarketOpportunitySelectionStepTwoServiceImplTest test

Expected: PASS。

Task 3: 集成验证

Files:

  • Modify: src/views/product/market-opportunity-selection.vue

  • Step 1: 验证答案保存与回显数据结构

确认 buildStepTwoOutcome 保存 primaryWeightsdimensionWeights 和自动计算的 correspondingWeights;确认 loadSavedAnswer 使用同名字段恢复数据。

  • Step 2: 运行前端生产构建

RunE:/workspace/dianshang/dianshang-qianduan: npm run build:prod

Expected: exit code 0。

  • Step 3: 运行后端完整测试

RunE:/workspace/dianshang/dianshang-houduan: mvn test

Expected: 0 failures0 errors。

  • Step 4: 提交本次功能修改

仅提交本次页面、测试和必要的后端修复,不包含本地日志或无关设计文档。