# Task 8 实现报告 — 单接口页面接入家庭空态(批次 C) ## 概览 | 文件 | 接口 | 改动类型 | 改动行数(新增/删除) | |------|------|----------|----------------------| | `pages/share/index.vue` | getFamilyFootprint | 常规(FamilyEmptyState type="card") | +15 / −2 | | `pages/teacher/teacher-profile.vue` | generateParentInvite | 常规(FamilyEmptyState type="card") | +8 / −0 | | `pages/user-edit/user-edit.vue` | requestJoinByCode | 常规(FamilyEmptyState type="card") | +44 / −28 | | `pages/wisdom-detail/member-wisdom-detail.vue` | getEnergyOverview | 常规(FamilyEmptyState type="card") | +11 / −0 | | `pages/wisdom/member-wisdom-detail.vue` | getEnergyOverview | 常规(FamilyEmptyState type="card") | +11 / −0 | | `pages/profile-extra/family-members.vue` | 特例(不套 FamilyEmptyState) | +6 / −1 | | `pages/invite/join.vue` | 特例(零改动) | — | — | **总计**:6 文件,79 行新增,22 行删除。 --- ## 常规改造(5 文件) 每个文件均做了以下两件事: 1. **script 追加 computed** ```js computed: { hasFamily: function() { return this.$store.getters.hasFamily } } ``` 已有 computed 的对象则追加字段;无 computed 的则新增 computed 块。 2. **模板加 v-if/v-else 包裹** - 原有数据区内容保持一字不动 - 外层用 `` 包裹 - 对应 `` - FamilyEmptyState 已全局注册(main.js),未在任何组件内 import ### 各文件详情 #### 1. `pages/share/index.vue` - `sp-header`、`sp-body`、`sp-footer` 三个数据区均改为 `v-if="hasFamily && ..."`(保留原条件组合) - `sp-qr`(扫码区)保持不动,作为对外引流入口 - `v-else` 插在第 24 行(sp-footer 之后、sp-qr 之前) - grep 验证:`FamilyEmptyState` = 1,`hasFamily` = 5 #### 2. `pages/teacher/teacher-profile.vue` - `switch-out-btn`(切换家长端)保持不动(全局可见) - `user-card` + `menu-list` 整体用 `` 包裹 - `v-else` 紧跟 `` 闭合标签之后 - `modal-mask` 密码弹窗保持不动 - grep 验证:`FamilyEmptyState` = 1,`hasFamily` = 3 #### 3. `pages/user-edit/user-edit.vue` - 角色选择区(`role-select-section`)保持不动(新用户流程可见) - `form-section` 的 `v-if="isEdit"` 改为 `v-if="isEdit && hasFamily"` - `v-else-if="isEdit"` 分支插入 `FamilyEmptyState type="card"` - computed 中追加 `hasFamily`(原已有 5 个 computed 字段) - grep 验证:`FamilyEmptyState` = 1,`hasFamily` = 3 #### 4. `pages/wisdom-detail/member-wisdom-detail.vue` - `nav-bar` 保持不动 - 从 `FamilyEnergyBar` 到 `DimensionProducts` 的整个数据区用 `` 包裹 - `v-else` 插入在 `` 之后、`bottom-spacer` 之前 - 新增 computed 块含 `hasFamily` - grep 验证:`FamilyEmptyState` = 1,`hasFamily` = 3 #### 5. `pages/wisdom/member-wisdom-detail.vue` - 与第 4 文件完全对称(同名结构) - grep 验证:`FamilyEmptyState` = 1,`hasFamily` = 3 --- ## 特例处理(2 文件) ### 6. `pages/profile-extra/family-members.vue` - 仅在 `SharePoster` 上添加 `v-if="hasFamily"`,并补充 `v-else` 渲染简短提示文字: ```vue 暂无家庭成员,请先创建或加入家庭 ``` - 在 computed 中追加 `hasFamily` - 在 `