# 任务 7 实现报告 — 单接口页面家庭数据区改造(批次 B)
## 概览
改造 9 个 uni-app(Vue 2)小程序页面,为每个页面的家庭数据区添加 `v-if="hasFamily"` / `v-else` 渲染 `FamilyEmptyState type="card"` 的条件包裹。
- 基准提交:`7b4c3eea`
- 改动文件:仅上述 9 个页面文件
- 不动文件:`store/index.js` / `utils/api.js` / `main.js` / `FamilyEmptyState.vue` / 其他页面(均为任务 1-4 遗留改动)
## 改动明细
| 文件 | FamilyEmptyState | hasFamily | 改动说明 |
|---|---:|---:|---|
| `pages/growth/create.vue` | 1 | 3 | 已在上游任务改造,本次确认无重复改动 |
| `pages/growth/index.vue` | 1 | 5 | 新增 `hasFamily` computed;children-list / records-section / footer-btn 加 `v-if="hasFamily"`,v-else 渲染 FamilyEmptyState |
| `pages/health/gut-index.vue` | 1 | 3 | 新增 computed 块含 `hasFamily`;scroll-view 内容加 `v-if="hasFamily"`,v-else 渲染 FamilyEmptyState |
| `pages/mind-detail/member-mind-detail.vue` | 1 | 3 | 在现有 computed 对象中追加 `hasFamily`;能量条至底部占位区域加 `v-if="hasFamily"`,v-else 渲染 FamilyEmptyState |
| `pages/mind/member-mind-detail.vue` | 1 | 3 | 同上 |
| `pages/parent/child-detail.vue` | 1 | 3 | 在现有 computed 对象中追加 `hasFamily`;加载状态 + template 内容区加 `v-if="hasFamily"`,v-else 渲染 FamilyEmptyState |
| `pages/parent/plans/index.vue` | 1 | 3 | 新增 computed 块含 `hasFamily`;header 至 plan-list 区域加 `v-if="hasFamily"`,v-else 渲染 FamilyEmptyState |
| `pages/parent/wishes/index.vue` | 1 | 3 | 在现有 computed 对象中追加 `hasFamily`;整个 wish-list 内容区加 `v-if="hasFamily"`,v-else 渲染 FamilyEmptyState |
| `pages/rewards/badge.vue` | 1 | 3 | 在现有 computed 对象中追加 `hasFamily`;stats-card 至底部弹窗区域加 `v-if="hasFamily"`,v-else 渲染 FamilyEmptyState |
## 验证输出
### grep 验证
```
=== pages/growth/create.vue ===
FamilyEmptyState: 1
hasFamily: 3
=== pages/growth/index.vue ===
FamilyEmptyState: 1
hasFamily: 5
=== pages/health/gut-index.vue ===
FamilyEmptyState: 1
hasFamily: 3
=== pages/mind-detail/member-mind-detail.vue ===
FamilyEmptyState: 1
hasFamily: 3
=== pages/mind/member-mind-detail.vue ===
FamilyEmptyState: 1
hasFamily: 3
=== pages/parent/child-detail.vue ===
FamilyEmptyState: 1
hasFamily: 3
=== pages/parent/plans/index.vue ===
FamilyEmptyState: 1
hasFamily: 3
=== pages/parent/wishes/index.vue ===
FamilyEmptyState: 1
hasFamily: 3
=== pages/rewards/badge.vue ===
FamilyEmptyState: 1
hasFamily: 3
```
所有文件均满足:`grep -c "FamilyEmptyState" ≥ 1` 且 `grep -c "hasFamily" ≥ 2`。
### git diff --stat(仅任务 7 改动)
```
cfc-frontend/pages/growth/create.vue | 67 +++++++++++++---------
cfc-frontend/pages/growth/index.vue | 12 +++-
cfc-frontend/pages/health/gut-index.vue | 11 +++-
.../pages/mind-detail/member-mind-detail.vue | 8 +++
cfc-frontend/pages/mind/member-mind-detail.vue | 8 +++
cfc-frontend/pages/parent/child-detail.vue | 9 +++
cfc-frontend/pages/parent/plans/index.vue | 11 ++++
cfc-frontend/pages/parent/wishes/index.vue | 8 +++
cfc-frontend/pages/rewards/badge.vue | 8 +++
9 files changed, 110 insertions(+), 32 deletions(-)
```
## 改造模式
每个文件均按以下模式改造:
1. **computed**:组件已有 computed 对象则在现有对象中追加 `hasFamily`;无 computed 对象则新建:
```js
hasFamily: function() {
return this.$store.getters.hasFamily
}
```
2. **模板**:在接口成功回调渲染的家庭数据区外层加 `v-if="hasFamily"`,末尾补 `v-else` 块:
```html
```
3. **FamilyEmptyState** 已通过 `main.js` 全局注册,各组件无需 import 或 components 注册。
## 注意事项
- `pages/growth/create.vue` 在本次任务开始前已由上游任务改造完成,本次确认其状态正确,未做额外改动。
- `pages/growth/index.vue` 的 `hasFamily` 计数为 5(computed 定义 1 + v-if 模板 2 + footer-btn 条件 2),其余文件均为 3(computed 定义 1 + v-if 模板 1 + v-else 模板 1)。
- 未触碰 `store/index.js`、`utils/api.js`、`main.js`、`FamilyEmptyState.vue` 及其他非目标页面。
- 未使用 `?.`、`:key` 表达式、中文 CSS 类名、`new Date(string)`、`uni.getSystemInfoSync()`、CSS Grid。
- 未 commit 任何更改。