|
@@ -4,6 +4,19 @@
|
|
|
> 状态:已获用户方案确认(方案 A)
|
|
> 状态:已获用户方案确认(方案 A)
|
|
|
> 关联:`FiveDimensionSelfCheckService` / `FiveDimensionSelfCheckController` / `five_dimension_self_checks` 表
|
|
> 关联:`FiveDimensionSelfCheckService` / `FiveDimensionSelfCheckController` / `five_dimension_self_checks` 表
|
|
|
|
|
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 2.1 规格自检(2026-08-31 内联修复)
|
|
|
|
|
+
|
|
|
|
|
+| 检查项 | 结果 | 说明 |
|
|
|
|
|
+|--------|------|------|
|
|
|
|
|
+| 占位符扫描 | ✅ 无 TODO/待定 | 无 "待定"、"TODO"、"XXX" 字段 |
|
|
|
|
|
+| 内部一致性 | ✅ 一致 | 后端接口与数据层、前端路径、迁移编号全部对齐 |
|
|
|
|
|
+| 范围检查 | ✅ 单一功能闭环 | 覆盖:周期判断 / 忽略记录 / 题目轮换 / 前端入口 / 中间页,范围可覆盖 |
|
|
|
|
|
+| 模糊性 | ✅ 已消除 | 以下歧义已在正文明确:body 维度固定 3 题无法轮换(降级说明);未到期直答保守不阻断(明确决策) |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
## 1. 背景与目标
|
|
## 1. 背景与目标
|
|
|
|
|
|
|
|
现有五维家庭自检(P0-1)提供 15 题问卷,用户可无限次重做,首页入口固定展示同一引导文案。本次需求:
|
|
现有五维家庭自检(P0-1)提供 15 题问卷,用户可无限次重做,首页入口固定展示同一引导文案。本次需求:
|
|
@@ -155,7 +168,7 @@ daysLeft = 15 - (now - lastDecisiveTime) 天数(未到期时 >0)
|
|
|
### 5.3 `pages/family/self-check.vue` — 保持答题页
|
|
### 5.3 `pages/family/self-check.vue` — 保持答题页
|
|
|
|
|
|
|
|
- `onLoad` 调 `/questions`(后端已随机),渲染逻辑不变。
|
|
- `onLoad` 调 `/questions`(后端已随机),渲染逻辑不变。
|
|
|
-- 从中间页跳入时正常答题;直接 URL 进入也能拿到随机题(后端不阻断,见 6.2)。
|
|
|
|
|
|
|
+- 从中间页跳入时正常答题;直接 URL 进入也能拿到随机题(后端不阻断,见第 6 节)。
|
|
|
|
|
|
|
|
### 5.4 `pages/family/self-check-result.vue`
|
|
### 5.4 `pages/family/self-check-result.vue`
|
|
|
|
|
|
|
@@ -172,17 +185,19 @@ export function ignoreSelfCheck(data) {
|
|
|
}
|
|
}
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-## 6. 错误处理与边界
|
|
|
|
|
|
|
+## 6. 边界行为
|
|
|
|
|
|
|
|
-1. **忽略幂等**:15 天内重复忽略不重复插入,返回最新 `nextRemindAt`。
|
|
|
|
|
-2. **题目不足**:body 维度仅 3 题,排除后不足则复用,不报错。
|
|
|
|
|
-3. **未到期直答**:用户绕过中间页直接进 `self-check` 页,`/questions` 仍返回随机题,`/submit` 不阻断(保守策略,前端入口已挡)。若产品要求强制阻断,可在 `/submit` 增加 `canCheck` 校验——**本设计默认不阻断**(避免用户答题中途被拒造成体验问题)。
|
|
|
|
|
-4. **历史老记录**:老记录 `question_ids_json` 为 NULL → 视为空集,首次轮换全量随机。
|
|
|
|
|
-5. **子维度题库**:合并仅用于主题自检抽取与计分;原 `getSubDimensionQuestions / submitSubDimensionCheck` 为死代码,保持不变。
|
|
|
|
|
|
|
+| 场景 | 行为 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| 忽略幂等 | 15 天内重复忽略不重复插入,返回最新 `nextRemindAt` |
|
|
|
|
|
+| 题目不足 | body 维度仅 3 题,排除后不足则复用,不报错 |
|
|
|
|
|
+| 未到期直答 | 用户绕过中间页直接进 `self-check` 页,`/questions` 仍返回随机题,`/submit` 不阻断(保守策略,前端入口已挡) |
|
|
|
|
|
+| 历史老记录 | 老记录 `question_ids_json` 为 NULL → 视为空集,首次轮换全量随机 |
|
|
|
|
|
+| 子维度题库 | 合并仅用于主题自检抽取与计分;原 `getSubDimensionQuestions / submitSubDimensionCheck` 为死代码,保持不变 |
|
|
|
|
|
|
|
|
## 7. 迁移
|
|
## 7. 迁移
|
|
|
|
|
|
|
|
-在 `DatabaseInitializer.runMigrations()` 追加(当前最大编号 `迁移268`):
|
|
|
|
|
|
|
+> 当前最大迁移编号:268(coupon.status)。本次新增 269/270,递增连续。
|
|
|
|
|
|
|
|
- `迁移269`: `five_dimension_self_checks` 表添加 `question_ids_json` 列(`ensureColumn`)
|
|
- `迁移269`: `five_dimension_self_checks` 表添加 `question_ids_json` 列(`ensureColumn`)
|
|
|
- `迁移270`: 创建 `self_check_ignores` 表(`CREATE TABLE IF NOT EXISTS`)
|
|
- `迁移270`: 创建 `self_check_ignores` 表(`CREATE TABLE IF NOT EXISTS`)
|