瀏覽代碼

Merge branch 'cfclub' of http://git.iwintrue.com/liaoxg/cfc into cfclub

liaoxg 4 周之前
父節點
當前提交
2dd4309203
共有 61 個文件被更改,包括 267 次插入1405 次删除
  1. 202 196
      cfc-frontend/AGENTS.md
  2. 0 25
      cfc-frontend/pages/achievement/index.vue
  3. 1 22
      cfc-frontend/pages/action-detail/member-action-detail.vue
  4. 1 18
      cfc-frontend/pages/activity/index.vue
  5. 3 26
      cfc-frontend/pages/ai/chat.vue
  6. 1 1
      cfc-frontend/pages/article-center/article-edit.vue
  7. 1 26
      cfc-frontend/pages/body-detail/checkin.vue
  8. 3 28
      cfc-frontend/pages/body-detail/health-report.vue
  9. 1 22
      cfc-frontend/pages/body-detail/member-body-detail.vue
  10. 1 22
      cfc-frontend/pages/body/member-body-detail.vue
  11. 1 4
      cfc-frontend/pages/dan-assessment/report-upload.vue
  12. 1 34
      cfc-frontend/pages/diet/food-query.vue
  13. 1 34
      cfc-frontend/pages/diet/meal-config.vue
  14. 1 34
      cfc-frontend/pages/diet/preferences.vue
  15. 1 34
      cfc-frontend/pages/diet/recommendation.vue
  16. 1 34
      cfc-frontend/pages/diet/record-detail.vue
  17. 1 34
      cfc-frontend/pages/diet/records.vue
  18. 1 19
      cfc-frontend/pages/discover/circles.vue
  19. 1 26
      cfc-frontend/pages/energy/index.vue
  20. 2 12
      cfc-frontend/pages/games/list.vue
  21. 1 18
      cfc-frontend/pages/growth/caution-detail.vue
  22. 1 13
      cfc-frontend/pages/growth/diet-checkin.vue
  23. 1 13
      cfc-frontend/pages/growth/exercise-checkin.vue
  24. 1 10
      cfc-frontend/pages/growth/foods-detail.vue
  25. 1 13
      cfc-frontend/pages/growth/growth-emotion-checkin.vue
  26. 1 13
      cfc-frontend/pages/growth/profile/index.vue
  27. 1 13
      cfc-frontend/pages/growth/sleep-checkin.vue
  28. 1 11
      cfc-frontend/pages/health/bodyfat-confirm.vue
  29. 1 22
      cfc-frontend/pages/health/daily-checkin.vue
  30. 1 35
      cfc-frontend/pages/health/diet-index.vue
  31. 1 35
      cfc-frontend/pages/health/exercise-index.vue
  32. 1 13
      cfc-frontend/pages/health/gut-flora-detail.vue
  33. 1 10
      cfc-frontend/pages/health/gut-flora-risks-detail.vue
  34. 1 10
      cfc-frontend/pages/health/gut-flora-species-detail.vue
  35. 1 39
      cfc-frontend/pages/health/gut-index.vue
  36. 1 36
      cfc-frontend/pages/health/meditation-index.vue
  37. 1 26
      cfc-frontend/pages/health/nutrition-profile.vue
  38. 1 19
      cfc-frontend/pages/health/physical-exam-detail.vue
  39. 1 19
      cfc-frontend/pages/health/report-confirm.vue
  40. 1 19
      cfc-frontend/pages/health/report-survey.vue
  41. 0 21
      cfc-frontend/pages/health/report-upload.vue
  42. 1 35
      cfc-frontend/pages/health/sleep-index.vue
  43. 1 11
      cfc-frontend/pages/health/teacher-select.vue
  44. 1 28
      cfc-frontend/pages/health/water-index.vue
  45. 1 22
      cfc-frontend/pages/home-pages/member-home-detail.vue
  46. 1 19
      cfc-frontend/pages/member-detail/member-detail.vue
  47. 1 26
      cfc-frontend/pages/member-detail/report-detail.vue
  48. 1 26
      cfc-frontend/pages/member-detail/service-role-apply.vue
  49. 1 22
      cfc-frontend/pages/mind-detail/member-mind-detail.vue
  50. 1 22
      cfc-frontend/pages/mind/member-mind-detail.vue
  51. 2 11
      cfc-frontend/pages/rewards/rewards.vue
  52. 1 8
      cfc-frontend/pages/tianpan/annual-energy.vue
  53. 1 8
      cfc-frontend/pages/tianpan/daily-fortune.vue
  54. 1 7
      cfc-frontend/pages/tianpan/index.vue
  55. 1 14
      cfc-frontend/pages/tianpan/member-detail.vue
  56. 1 8
      cfc-frontend/pages/tianpan/related-items.vue
  57. 1 14
      cfc-frontend/pages/tianpan/relation-detail.vue
  58. 1 31
      cfc-frontend/pages/wisdom-detail/member-wisdom-detail.vue
  59. 1 31
      cfc-frontend/pages/wisdom/member-wisdom-detail.vue
  60. 1 1
      cfc-web/.last_build_commit
  61. 2 2
      cfc-web/package-lock.json

+ 202 - 196
cfc-frontend/AGENTS.md

@@ -1,196 +1,202 @@
-# zxyj-frontend
-
-uni-app 微信小程序前端,Vue 2 语法,家庭教育任务管理。
-
-## WHERE TO LOOK
-
-| Task | Location | Notes |
-|------|----------|-------|
-| 页面组件 | `pages/*/` | login, index, tasks, rewards, profile, guide, games等 |
-| 页面注册 | `pages.json` | TabBar配置和页面路径 |
-| 应用配置 | `manifest.json` | AppID: `wx5ba8038ef16fb245` |
-| 全局样式 | `uni.scss` | SCSS变量和全局样式 |
-| 应用入口 | `App.vue` | 全局生命周期和配置 |
-| 组件库 | `components/` | 地址选择器、任务卡片等可复用组件 |
-| API配置 | `config/` | baseUrl和请求封装 |
-
-## STRUCTURE
-
-### 主包(主包 = `pages.json` 的 `pages` 数组)
-
-仅含 5 个 TabBar 页面,主包大小已压缩至 ~1MB 以下:
-
-| 路径 | 说明 |
-|------|------|
-| `pages/index/index` | 首页(未登录态引流页 + 角色路由跳转) |
-| `pages/mind/index` | 心维度首页 |
-| `pages/body/index` | 身维度首页 |
-| `pages/wisdom/index` | 智维度首页 |
-| `pages/wealth/index` | 富维度首页 |
-
-> **登录用户路由**:`pages/index/index` 中 `parent-index` 和 `child-index` 已从静态组件改为 `redirectTo` 跳转到分包页面,不再计入主包体积。
-
-### 分包(`pages.json` 的 `subPackages` 数组,共 45 个)
-
-主要分包(按 `root`):
-
-| Root | 内容 |
-|------|------|
-| `pages/teacher` | 成长规划师中心(7 页) |
-| `pages/guide` | 任务模板、邀请、绑定等(11 页) |
-| `pages/parent` | 家长端市场、孩子详情(3 页) |
-| `pages/child` | 孩子端任务、心愿(2 页) |
-| `pages/tasks` | 任务列表/创建/审核(4 页) |
-| `pages/wishes` | 心愿管理(3 页) |
-| `pages/rewards` | 心愿单/勋章墙(2 页) |
-| `pages/games` | 小游戏(5 页) |
-| `pages/assessment` | 测评申请/报告(5 页) |
-| `pages/dan-assessment` | DAN 测评上传(1 页) |
-| `pages/growth` | 成长记录(6 页) |
-| `pages/shop` | 商城(15 页) |
-| `pages/vendor` | 服务商入驻/管理(5 页) |
-| `pages/health` | 健康功能(18 页) |
-| `pages/mind-detail` | 心智详情(11 页) |
-| `pages/body-detail` | 身体详情(6 页) |
-| `pages/wisdom-detail` | 智慧详情(4 页) |
-| `pages/action-detail` | 行动详情(4 页) |
-| `pages/tianpan` | 家庭天盘(6 页) |
-| `pages/article-center` | 文章中心(4 页) |
-| `pages/activity` | 活动(3 页) |
-| `pages/promotion` | 财富中心/推广(6 页) |
-| `pages/membership` | 会员(3 页) |
-| `pages/index` | 原主包页面(parent-index, child-index, member-home-detail) |
-| `pages/login` | 登录页 |
-| `pages/share` | 健康足迹 |
-| `pages/profile` | 个人中心(profile + index) |
-| `pages/profile-extra` | 孩子管理/优惠券(6 页) |
-| ... 共 45 个分包 | 详见 `pages.json` |
-
-> **注意**:分包页面在首次访问时异步下载,主包只加载必要的 TabBar 页面,确保主包 < 1.5MB。
-
-## TabBar 配置
-
-pages.json 中定义 5 个 TabBar 页面(TabBar 文案,非五维维度名):
-- 首页: `pages/index/index` - 角色分流入口
-- 身: `pages/body/index` - 身体健康维度
-- 智: `pages/wisdom/index` - 智慧维度(心智测评)
-- 心: `pages/mind/index` - 心理/情感维度
-- 我的: `pages/profile/profile` - 个人设置和积分
-
-## CONVENTIONS
-
-- **Vue 2:** 使用 Options API,生命周期 `onLoad`、`onShow`
-- **页面注册:** 新页面必须在 `pages.json` 中注册
-- **导航:** 使用 `uni.navigateTo`、`uni.redirectTo`
-- **API 调用:** 使用 `uni.request`,统一在 `config.baseUrl`
-- **地址选择:** 使用 `components/address-picker.vue` 四级联动组件
-- **角色切换:** 页面根据用户角色显示不同内容
-
-## 时间显示规范
-
-页面时间展示必须统一以下两种格式:
-
-| 使用场景 | 格式 | 示例 |
-|------|------|------|
-| **时间(年月日+时分秒)** | `yyyy-MM-dd HH:mm:ss` | `2026-08-15 14:30:00` |
-| **仅日期(不带时间)** | `yyyy-MM-dd` | `2026-08-15` |
-
-后端返回 ISO 8601 格式(`2026-08-15T14:30:00`),前端格式化:
-
-- **需展示时间**:字符串先经 `parseDate()` 解析(iOS 安全),再用 `getFullYear()`/`getMonth()`/`getDate()`/`getHours()`/`getMinutes()`/`getSeconds()` 拼出 `yyyy-MM-dd HH:mm:ss`
-- **仅需日期**:直接截取字符串前 10 位 → `yyyy-MM-dd`
-
-禁止 `new Date(str).toLocaleString()`(iOS 输出格式与渲染结果因人而异)。
-
-## ANTI-PATTERNS
-
-- **DO NOT** 创建页面后忘记在 `pages.json` 注册
-- **DO NOT** 硬编码 API 地址,使用 `config.baseUrl`
-- **DO NOT** 在前端存储敏感信息 (密码、密钥)
-- **NEVER** 跳过 JWT 认证直接调用需登录接口
-- **NEVER** 在本地存储中保存敏感用户信息
-- **NEVER** 在 WXML/Vue 模板中使用可选链 `?.`,微信小程序不支持 → 使用 `&&` 代替(如 `currentWish?.title` 改为 `currentWish && currentWish.title`)
-- **NEVER** 在 `:class` 绑定中调用方法(如 `:class="getStatusClass(item)"`),微信小程序模板编译器不支持带参数的方法调用 → 改用内联表达式(如 `:class="'status-' + item._cssClass"`)或计算属性
-- **NEVER** 在 CSS 类名、选择器中使用中文(如 `.val-偏高`、`.badge-低风险`),微信小程序 wxss 编译器不支持中文类名 → 使用英文(如 `.val-high`、`.badge-low`),数据中的中文状态通过 `_cssClass` 字段映射
-- **NEVER** 在 `:key` 中使用表达式(如 `:key="item.id || item.circleId"`),微信小程序模板编译器不支持带运算符的 `:key` 绑定 → 改用方法调用(如 `:key="getItemKey(item)"`,在 methods 中定义 `getItemKey(item) { return item.id || item.circleId }`)
-- **NEVER** 直接用 `new Date(string)` 解析日期字符串。部分 iOS(JavaScriptCore)的 `new Date()` 只支持 `yyyy/MM/dd`、`yyyy/MM/dd HH:mm:ss`、`yyyy-MM-dd`、`yyyy-MM-ddTHH:mm:ss`、`yyyy-MM-ddTHH:mm:ss+HH:mm` 格式,后端常见的 `"2026-08-22 14:00"`(空格分隔的 MySQL DATETIME 风格)和 Java 的 `"Sat Aug 22 14:00:00 CST 2026"` 会解析失败返回 Invalid Date → 一律使用 `utils/format.js` 的 `parseDate()`,它会自动归一化上述两种格式并返回 `Date|null`(如 `var d = parseDate(item.startTime); if (!d) return`)
-- **NEVER** 新增 `uni.getSystemInfoSync()` 调用。该 API 已在微信基础库 2.20.1+ 弃用,开发者工具会持续告警(`getSystemInfoSync is deprecated`)→ 改用 `uni.getWindowInfo()`(取 `windowWidth`/`pixelRatio`/`safeArea` 等窗口信息)或 `uni.getDeviceInfo()`(取 `system`/`brand`/`model` 等设备信息)。已有兼容代码(`components/mp-html/` 内的 `uni.canIUse('getWindowInfo')` 兜底)保持不变。参考替换:`uni.getSystemInfoSync().pixelRatio` → `uni.getWindowInfo().pixelRatio`
-- **NEVER** 给 `props` 传可能为非数组的值而不做兜底。组件接收 `Array` 类型 prop 时,父组件传值必须保证是数组(`|| []` 兜底 + `Array.isArray` 校验),否则触发 `Invalid prop: type check failed for prop "xxx". Expected Array, got Object` 告警。典型场景:接口返回结构不确定(`res.data.list` 可能为 `Object`)时,用 `var arr = (res.data && res.data.list) || (res.data instanceof Array ? res.data : [])` 三态兼容
-
-## UNIQUE FEATURES
-
-- 地址匹配页面: `pages/match/street-match.vue` - 街道地址匹配功能
-- 地址编辑页面: `pages/family/address-edit.vue` - 家庭地址管理
-- 四级地址选择: `components/address-picker.vue` - 省市区街道联动
-- 双角色界面: 根据用户角色(parent/child)显示不同UI
-
-## BUILD SYSTEM
-
-### 打包方式(强制规范)
-
-**小程序打包必须用 HBuilderX 完成,Agent 禁止自行执行 `npm run build:mp-weixin` 等打包命令。**
-
-- 打包工具:HBuilderX(导入 `cfc-frontend/` 目录 → 运行 → 运行到小程序模拟器 → 微信开发者工具)
-- 打包产物:**`cfc-frontend/unpackage/`** 目录(HBuilderX 输出位置,dev 产物在 `unpackage/dist/dev/mp-weixin/`)
-- 微信开发者工具导入的目录是 `unpackage/dist/dev/mp-weixin/`(或 HBuilderX 自动打开),**不是** `dist/`
-- `dist/` 目录是 npm CLI 打包的残留产物,**不可用**——`app.js` 仅有 89 字节(require 三行),非完整产物
-- Agent 修改代码后:只做**语法/结构校验**(如 `node --check` 提取的 script 块),**不打包、不运行 build 命令**
-- 页面白板排查第一步:确认用户是否在 HBuilderX 中**重新打包**过(改代码后未重新打包 → 产物过期 → 白板)
-
-### 依赖约束(2026-07-23 修复后锁定)
-
-| 包 | 版本 | 原因 |
-|----|------|------|
-| `@vue/cli-service` | `~4.5.0` | v5 使用 webpack 5,`@dcloudio/uni-mp-weixin` 依赖 `webpack/lib/GraphHelpers`(webpack 4 特有)|
-| `@vue/cli-plugin-babel` | `~4.5.0` | 与 cli-service v4 匹配 |
-| `postcss` (override + dependency) | `7.0.39` | `remove-scoped.js` 在 PostCSS 8 下会走 v8 插件路径,但 `spaces` 属性访问有兼容问题 |
-| `node-sass` | (devDependency) | `@dcloudio/vue-cli-plugin-uni` 内置的 sass-loader 需要 |
-| `copy-webpack-plugin` | `^5.1.2` | 与 cli-service v4 的 webpack 4 兼容 |
-
-### postinstall 自动补丁
-
-`npm install` 后会自动运行 `postinstall-fix.js`,修补 `remove-scoped.js` 中的 `spaces` 崩溃:
-
-```js
-// 问题: selector.first 可能为 undefined
-// 修改前: selector.first.spaces.before = '';
-// 修改后: if (selector.first) { selector.first.spaces.before = ''; }
-```
-
-### 已知编译错误处理
-
-| 错误 | 原因 | 处理 |
-|------|------|------|
-| `Cannot read properties of undefined (reading 'spaces')` in `remove-scoped.js` | PostCSS 节点没有 `spaces` 属性 | postinstall-fix.js 自动补丁 |
-| `Cannot find module 'webpack/lib/GraphHelpers'` | `@vue/cli-service v5` 的 webpack 5 不支持 | 保持 `@vue/cli-service ~4.5.0` |
-| `Cannot find module 'node-sass'` | uni-app sass-loader 需要 | `npm install node-sass --save-dev` |
-| `getPreCompileOptions` DevTools 内部错误 | `dist/dev/mp-weixin/` 缺少 `project.config.json` | 先 `npm run build:mp-weixin` 生成 dist |
-| `Unexpected token` in `.vue` | JS 语法错误,常见于方法被截断/拼接错误 | 检查 v-on:click/方法调用是否正确闭合 |
-
-### 修改 `remove-scoped.js` 的风险
-
-该文件在 `node_modules/@dcloudio/vue-cli-plugin-uni/` 内,每次 `npm install` 会通过 `postinstall-fix.js` 自动恢复补丁。如需手动执行:
-
-```bash
-node postinstall-fix.js
-```
-
-**不要**将 `@vue/cli-service` 升级到 v5,除非:
-- `@dcloudio/uni-mp-weixin` 确认移除了 `webpack/lib/GraphHelpers` 依赖
-- 或者找到替代方法处理独立分包插件
-
-## COMMANDS
-
-```bash
-npm install             # 安装依赖(自动运行 postinstall-fix.js)
-# 注意:打包一律用 HBuilderX(产物在 unpackage/),Agent 不要执行 npm run build:mp-weixin
-```
-
-## NOTES
-
-- 小程序AppID: `wx5ba8038ef16fb245`
-- 后端API地址: 配置在 `config/index.js` 的 `baseUrl`
-- 地址数据: 使用后端街道API获取四级地址数据
-- 调试工具: 微信开发者工具需配置合法域名
-- **打包流程(HBuilderX)**:HBuilderX 打开 `cfc-frontend/` → 运行到微信开发者工具 → 产物输出至 `unpackage/dist/dev/mp-weixin/`。改代码后必须在 HBuilderX 中重新运行打包,否则小程序显示旧产物(甚至白板)
-- **禁止**在终端执行 `npm run build:mp-weixin` 或 `npm run dev:mp-weixin` 自行打包(产物进 `dist/` 而非 `unpackage/`,与 HBuilderX 工作流冲突)
+# zxyj-frontend
+
+uni-app 微信小程序前端,Vue 2 语法,家庭教育任务管理。
+
+## WHERE TO LOOK
+
+| Task | Location | Notes |
+|------|----------|-------|
+| 页面组件 | `pages/*/` | login, index, tasks, rewards, profile, guide, games等 |
+| 页面注册 | `pages.json` | TabBar配置和页面路径 |
+| 应用配置 | `manifest.json` | AppID: `wx5ba8038ef16fb245` |
+| 全局样式 | `uni.scss` | SCSS变量和全局样式 |
+| 应用入口 | `App.vue` | 全局生命周期和配置 |
+| 组件库 | `components/` | 地址选择器、任务卡片等可复用组件 |
+| API配置 | `config/` | baseUrl和请求封装 |
+
+## STRUCTURE
+
+### 主包(主包 = `pages.json` 的 `pages` 数组)
+
+仅含 5 个 TabBar 页面,主包大小已压缩至 ~1MB 以下:
+
+| 路径 | 说明 |
+|------|------|
+| `pages/index/index` | 首页(未登录态引流页 + 角色路由跳转) |
+| `pages/mind/index` | 心维度首页 |
+| `pages/body/index` | 身维度首页 |
+| `pages/wisdom/index` | 智维度首页 |
+| `pages/wealth/index` | 富维度首页 |
+
+> **登录用户路由**:`pages/index/index` 中 `parent-index` 和 `child-index` 已从静态组件改为 `redirectTo` 跳转到分包页面,不再计入主包体积。
+
+### 分包(`pages.json` 的 `subPackages` 数组,共 45 个)
+
+主要分包(按 `root`):
+
+| Root | 内容 |
+|------|------|
+| `pages/teacher` | 成长规划师中心(7 页) |
+| `pages/guide` | 任务模板、邀请、绑定等(11 页) |
+| `pages/parent` | 家长端市场、孩子详情(3 页) |
+| `pages/child` | 孩子端任务、心愿(2 页) |
+| `pages/tasks` | 任务列表/创建/审核(4 页) |
+| `pages/wishes` | 心愿管理(3 页) |
+| `pages/rewards` | 心愿单/勋章墙(2 页) |
+| `pages/games` | 小游戏(5 页) |
+| `pages/assessment` | 测评申请/报告(5 页) |
+| `pages/dan-assessment` | DAN 测评上传(1 页) |
+| `pages/growth` | 成长记录(6 页) |
+| `pages/shop` | 商城(15 页) |
+| `pages/vendor` | 服务商入驻/管理(5 页) |
+| `pages/health` | 健康功能(18 页) |
+| `pages/mind-detail` | 心智详情(11 页) |
+| `pages/body-detail` | 身体详情(6 页) |
+| `pages/wisdom-detail` | 智慧详情(4 页) |
+| `pages/action-detail` | 行动详情(4 页) |
+| `pages/tianpan` | 家庭天盘(6 页) |
+| `pages/article-center` | 文章中心(4 页) |
+| `pages/activity` | 活动(3 页) |
+| `pages/promotion` | 财富中心/推广(6 页) |
+| `pages/membership` | 会员(3 页) |
+| `pages/index` | 原主包页面(parent-index, child-index, member-home-detail) |
+| `pages/login` | 登录页 |
+| `pages/share` | 健康足迹 |
+| `pages/profile` | 个人中心(profile + index) |
+| `pages/profile-extra` | 孩子管理/优惠券(6 页) |
+| ... 共 45 个分包 | 详见 `pages.json` |
+
+> **注意**:分包页面在首次访问时异步下载,主包只加载必要的 TabBar 页面,确保主包 < 1.5MB。
+
+## TabBar 配置
+
+pages.json 中定义 5 个 TabBar 页面(TabBar 文案,非五维维度名):
+- 首页: `pages/index/index` - 角色分流入口
+- 身: `pages/body/index` - 身体健康维度
+- 智: `pages/wisdom/index` - 智慧维度(心智测评)
+- 心: `pages/mind/index` - 心理/情感维度
+- 我的: `pages/profile/profile` - 个人设置和积分
+
+## CONVENTIONS
+
+- **Vue 2:** 使用 Options API,生命周期 `onLoad`、`onShow`
+- **页面注册:** 新页面必须在 `pages.json` 中注册
+- **导航:** 使用 `uni.navigateTo`、`uni.redirectTo`
+- **API 调用:** 使用 `uni.request`,统一在 `config.baseUrl`
+- **地址选择:** 使用 `components/address-picker.vue` 四级联动组件
+- **角色切换:** 页面根据用户角色显示不同内容
+- **页面标题:** 所有页面的标题必须在 `pages.json` 的 `navigationBarTitleText` 中配置,禁止在 Vue 模板中手动写 `<text class="nav-title">`。仅动态标题页面(根据数据实时变化)可保留自定义 nav-bar
+- **API 调用去重:** 同一个接口在同一个页面生命周期内只调用一次。禁止在 onLoad/onShow/mounted 中多次调用同一 URL。如需依赖数据,在首次请求的 then 回调中处理后续逻辑
+
+## 时间显示规范
+
+页面时间展示必须统一以下两种格式:
+
+| 使用场景 | 格式 | 示例 |
+|------|------|------|
+| **时间(年月日+时分秒)** | `yyyy-MM-dd HH:mm:ss` | `2026-08-15 14:30:00` |
+| **仅日期(不带时间)** | `yyyy-MM-dd` | `2026-08-15` |
+
+后端返回 ISO 8601 格式(`2026-08-15T14:30:00`),前端格式化:
+
+- **需展示时间**:字符串先经 `parseDate()` 解析(iOS 安全),再用 `getFullYear()`/`getMonth()`/`getDate()`/`getHours()`/`getMinutes()`/`getSeconds()` 拼出 `yyyy-MM-dd HH:mm:ss`
+- **仅需日期**:直接截取字符串前 10 位 → `yyyy-MM-dd`
+
+禁止 `new Date(str).toLocaleString()`(iOS 输出格式与渲染结果因人而异)。
+
+## ANTI-PATTERNS
+
+- **DO NOT** 创建页面后忘记在 `pages.json` 注册
+- **DO NOT** 硬编码 API 地址,使用 `config.baseUrl`
+- **DO NOT** 在前端存储敏感信息 (密码、密钥)
+- **NEVER** 跳过 JWT 认证直接调用需登录接口
+- **NEVER** 在本地存储中保存敏感用户信息
+- **NEVER** 在 WXML/Vue 模板中使用可选链 `?.`,微信小程序不支持 → 使用 `&&` 代替(如 `currentWish?.title` 改为 `currentWish && currentWish.title`)
+- **NEVER** 在 `:class` 绑定中调用方法(如 `:class="getStatusClass(item)"`),微信小程序模板编译器不支持带参数的方法调用 → 改用内联表达式(如 `:class="'status-' + item._cssClass"`)或计算属性
+- **NEVER** 在 CSS 类名、选择器中使用中文(如 `.val-偏高`、`.badge-低风险`),微信小程序 wxss 编译器不支持中文类名 → 使用英文(如 `.val-high`、`.badge-low`),数据中的中文状态通过 `_cssClass` 字段映射
+- **NEVER** 在 `:key` 中使用表达式(如 `:key="item.id || item.circleId"`),微信小程序模板编译器不支持带运算符的 `:key` 绑定 → 改用方法调用(如 `:key="getItemKey(item)"`,在 methods 中定义 `getItemKey(item) { return item.id || item.circleId }`)
+- **NEVER** 直接用 `new Date(string)` 解析日期字符串。部分 iOS(JavaScriptCore)的 `new Date()` 只支持 `yyyy/MM/dd`、`yyyy/MM/dd HH:mm:ss`、`yyyy-MM-dd`、`yyyy-MM-ddTHH:mm:ss`、`yyyy-MM-ddTHH:mm:ss+HH:mm` 格式,后端常见的 `"2026-08-22 14:00"`(空格分隔的 MySQL DATETIME 风格)和 Java 的 `"Sat Aug 22 14:00:00 CST 2026"` 会解析失败返回 Invalid Date → 一律使用 `utils/format.js` 的 `parseDate()`,它会自动归一化上述两种格式并返回 `Date|null`(如 `var d = parseDate(item.startTime); if (!d) return`)
+- **NEVER** 新增 `uni.getSystemInfoSync()` 调用。该 API 已在微信基础库 2.20.1+ 弃用,开发者工具会持续告警(`getSystemInfoSync is deprecated`)→ 改用 `uni.getWindowInfo()`(取 `windowWidth`/`pixelRatio`/`safeArea` 等窗口信息)或 `uni.getDeviceInfo()`(取 `system`/`brand`/`model` 等设备信息)。已有兼容代码(`components/mp-html/` 内的 `uni.canIUse('getWindowInfo')` 兜底)保持不变。参考替换:`uni.getSystemInfoSync().pixelRatio` → `uni.getWindowInfo().pixelRatio`
+- **NEVER** 给 `props` 传可能为非数组的值而不做兜底。组件接收 `Array` 类型 prop 时,父组件传值必须保证是数组(`|| []` 兜底 + `Array.isArray` 校验),否则触发 `Invalid prop: type check failed for prop "xxx". Expected Array, got Object` 告警。典型场景:接口返回结构不确定(`res.data.list` 可能为 `Object`)时,用 `var arr = (res.data && res.data.list) || (res.data instanceof Array ? res.data : [])` 三态兼容
+
+
+- **NEVER** 在页面模板中写 `<text class="nav-title">` 或自定义 nav-bar 标题。所有静态标题统一在 `pages.json` 的 `navigationBarTitleText` 中配置。需要运行时动态标题时才用自定义 nav-bar
+- **NEVER** 在同一个页面中多次调用相同的 API 接口。如果第一次请求的结果需要用于后续请求的参数,在第一次请求的 success/then 回调中发起第二次请求,而不是并行调用
+
+## UNIQUE FEATURES
+
+- 地址匹配页面: `pages/match/street-match.vue` - 街道地址匹配功能
+- 地址编辑页面: `pages/family/address-edit.vue` - 家庭地址管理
+- 四级地址选择: `components/address-picker.vue` - 省市区街道联动
+- 双角色界面: 根据用户角色(parent/child)显示不同UI
+
+## BUILD SYSTEM
+
+### 打包方式(强制规范)
+
+**小程序打包必须用 HBuilderX 完成,Agent 禁止自行执行 `npm run build:mp-weixin` 等打包命令。**
+
+- 打包工具:HBuilderX(导入 `cfc-frontend/` 目录 → 运行 → 运行到小程序模拟器 → 微信开发者工具)
+- 打包产物:**`cfc-frontend/unpackage/`** 目录(HBuilderX 输出位置,dev 产物在 `unpackage/dist/dev/mp-weixin/`)
+- 微信开发者工具导入的目录是 `unpackage/dist/dev/mp-weixin/`(或 HBuilderX 自动打开),**不是** `dist/`
+- `dist/` 目录是 npm CLI 打包的残留产物,**不可用**——`app.js` 仅有 89 字节(require 三行),非完整产物
+- Agent 修改代码后:只做**语法/结构校验**(如 `node --check` 提取的 script 块),**不打包、不运行 build 命令**
+- 页面白板排查第一步:确认用户是否在 HBuilderX 中**重新打包**过(改代码后未重新打包 → 产物过期 → 白板)
+
+### 依赖约束(2026-07-23 修复后锁定)
+
+| 包 | 版本 | 原因 |
+|----|------|------|
+| `@vue/cli-service` | `~4.5.0` | v5 使用 webpack 5,`@dcloudio/uni-mp-weixin` 依赖 `webpack/lib/GraphHelpers`(webpack 4 特有)|
+| `@vue/cli-plugin-babel` | `~4.5.0` | 与 cli-service v4 匹配 |
+| `postcss` (override + dependency) | `7.0.39` | `remove-scoped.js` 在 PostCSS 8 下会走 v8 插件路径,但 `spaces` 属性访问有兼容问题 |
+| `node-sass` | (devDependency) | `@dcloudio/vue-cli-plugin-uni` 内置的 sass-loader 需要 |
+| `copy-webpack-plugin` | `^5.1.2` | 与 cli-service v4 的 webpack 4 兼容 |
+
+### postinstall 自动补丁
+
+`npm install` 后会自动运行 `postinstall-fix.js`,修补 `remove-scoped.js` 中的 `spaces` 崩溃:
+
+```js
+// 问题: selector.first 可能为 undefined
+// 修改前: selector.first.spaces.before = '';
+// 修改后: if (selector.first) { selector.first.spaces.before = ''; }
+```
+
+### 已知编译错误处理
+
+| 错误 | 原因 | 处理 |
+|------|------|------|
+| `Cannot read properties of undefined (reading 'spaces')` in `remove-scoped.js` | PostCSS 节点没有 `spaces` 属性 | postinstall-fix.js 自动补丁 |
+| `Cannot find module 'webpack/lib/GraphHelpers'` | `@vue/cli-service v5` 的 webpack 5 不支持 | 保持 `@vue/cli-service ~4.5.0` |
+| `Cannot find module 'node-sass'` | uni-app sass-loader 需要 | `npm install node-sass --save-dev` |
+| `getPreCompileOptions` DevTools 内部错误 | `dist/dev/mp-weixin/` 缺少 `project.config.json` | 先 `npm run build:mp-weixin` 生成 dist |
+| `Unexpected token` in `.vue` | JS 语法错误,常见于方法被截断/拼接错误 | 检查 v-on:click/方法调用是否正确闭合 |
+
+### 修改 `remove-scoped.js` 的风险
+
+该文件在 `node_modules/@dcloudio/vue-cli-plugin-uni/` 内,每次 `npm install` 会通过 `postinstall-fix.js` 自动恢复补丁。如需手动执行:
+
+```bash
+node postinstall-fix.js
+```
+
+**不要**将 `@vue/cli-service` 升级到 v5,除非:
+- `@dcloudio/uni-mp-weixin` 确认移除了 `webpack/lib/GraphHelpers` 依赖
+- 或者找到替代方法处理独立分包插件
+
+## COMMANDS
+
+```bash
+npm install             # 安装依赖(自动运行 postinstall-fix.js)
+# 注意:打包一律用 HBuilderX(产物在 unpackage/),Agent 不要执行 npm run build:mp-weixin
+```
+
+## NOTES
+
+- 小程序AppID: `wx5ba8038ef16fb245`
+- 后端API地址: 配置在 `config/index.js` 的 `baseUrl`
+- 地址数据: 使用后端街道API获取四级地址数据
+- 调试工具: 微信开发者工具需配置合法域名
+- **打包流程(HBuilderX)**:HBuilderX 打开 `cfc-frontend/` → 运行到微信开发者工具 → 产物输出至 `unpackage/dist/dev/mp-weixin/`。改代码后必须在 HBuilderX 中重新运行打包,否则小程序显示旧产物(甚至白板)
+- **禁止**在终端执行 `npm run build:mp-weixin` 或 `npm run dev:mp-weixin` 自行打包(产物进 `dist/` 而非 `unpackage/`,与 HBuilderX 工作流冲突)

+ 0 - 25
cfc-frontend/pages/achievement/index.vue

@@ -1,11 +1,6 @@
 <template>
   <view class="container">
     <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack">‹ 返回</view>
-      <text class="nav-title">我的成就</text>
-      <view class="nav-placeholder"></view>
-    </view>
 
     <!-- 统计概览 -->
     <view class="stats-card">
@@ -116,26 +111,6 @@ export default {
   min-height: 100vh;
   background: #f5f7fa;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  height: 88rpx;
-  background: #fff;
-  border-bottom: 1rpx solid #eee;
-  padding: 0 30rpx;
-}
-.nav-back {
-  font-size: 32rpx;
-  color: #666;
-  padding: 0 20rpx;
-}
-.nav-title {
-  flex: 1;
-  text-align: center;
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .nav-placeholder {
   width: 60rpx;
 }

+ 1 - 22
cfc-frontend/pages/action-detail/member-action-detail.vue

@@ -1,12 +1,7 @@
 <template>
   <view class="detail-container">
     <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack">
-        <text class="nav-back-icon">&#x2190;</text>
-      </view>
-      <text class="nav-title">行 · 成员详情</text>
-    </view>
+</view>
 <!-- 品牌定位语(登录前显示) -->
     <view class="brand-strap" v-if="!isLoggedIn">
       <text class="brand-strap-text">改善全家关系与沟通能力</text>
@@ -227,26 +222,10 @@ export default {
   background: #f5f7fa;
   padding-bottom: 40rpx;
 }
-.nav-bar {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  padding: 20rpx 30rpx;
-  background: #fff;
-}
-.nav-back {
-  padding: 10rpx;
-}
 .nav-back-icon {
   font-size: 36rpx;
   color: #333;
 }
-.nav-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-  margin-left: 16rpx;
-}
 .member-card {
   display: flex;
   flex-direction: row;

+ 1 - 18
cfc-frontend/pages/activity/index.vue

@@ -1,12 +1,7 @@
 <template>
   <view class="activity-container">
     <!-- Nav bar with title "活动中心" and admin "+" button -->
-    <view class="nav-bar">
-      <text class="nav-title">活动中心</text>
-      <view class="nav-add-btn" @click="goCreate">
-        <text class="nav-add-icon">+</text>
-      </view>
-    </view>
+</view>
 
     <!-- Tab bar (4 tabs) -->
     <view class="tab-bar">
@@ -781,18 +776,6 @@ export default {
   flex-direction: column;
 }
 
-.nav-bar {
-  background: #1A0F00;
-  padding: 20rpx 0;
-  text-align: center;
-}
-
-.nav-title {
-  color: #fff;
-  font-size: 32rpx;
-  font-weight: 600;
-}
-
 .tab-bar {
   background: #fff;
   display: flex;

+ 3 - 26
cfc-frontend/pages/ai/chat.vue

@@ -5,8 +5,7 @@
       <view class="nav-back" @click="goBack">
         <text class="nav-back-icon">‹</text>
       </view>
-      <text class="nav-title">{{ isNutrition ? '营养助手' : (isHealthCoach ? '健康教练' : (isButler ? '健康管家' : '家庭助手')) }}</text>
-      <view class="nav-actions">
+<view class="nav-actions">
         <view class="mascot-badge" v-if="mascotCode && !isNutrition" @click="showConversations = !showConversations">
           <text class="mascot-badge-icon">{{ mascotIcon }}</text>
           <text class="mascot-badge-name">{{ mascotName }}</text>
@@ -467,38 +466,16 @@ export default {
   background: linear-gradient(135deg, #FFF7ED 0%, #FFE4CC 100%);
   border-bottom-color: #FF8C42;
 }
-.chat-nav.mascot-xibao .nav-title {
-  color: #D97706;
-}
-
-.chat-nav.mascot-fubao {
+.chat-nav.mascot-xibao .chat-nav.mascot-fubao {
   background: linear-gradient(135deg, #FFFBEB 0%, #FEF3C7 100%);
   border-bottom-color: #F59E0B;
 }
-.chat-nav.mascot-fubao .nav-title {
-  color: #B45309;
-}
-
-.nav-back {
-  width: 60rpx;
-  height: 60rpx;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
-
-.nav-back-icon {
+.chat-nav.mascot-fubao .nav-back-icon {
   font-size: 40rpx;
   color: var(--text, #1E293B);
   font-weight: 600;
 }
 
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: var(--text, #1E293B);
-}
-
 .nav-actions {
   width: 60rpx;
   height: 60rpx;

+ 1 - 1
cfc-frontend/pages/article-center/article-edit.vue

@@ -254,7 +254,7 @@ export default {
 }
 .header-left { display: flex; align-items: center; }
 .back-icon { font-size: 36rpx; margin-right: 8rpx; }
-.back-text { font-size: 26rpx; color: #333; }
+
 .header-title { font-size: 32rpx; font-weight: bold; color: #333; }
 .header-right { }
 .history-text { font-size: 26rpx; color: #5B9BD5; }

+ 1 - 26
cfc-frontend/pages/body-detail/checkin.vue

@@ -1,11 +1,7 @@
 <template>
   <view class="checkin-container">
     <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <text class="nav-back" @click="goBack">‹ 返回</text>
-      <text class="nav-title">健康打卡</text>
-      <view class="nav-placeholder"></view>
-    </view>
+</view>
 
     <!-- 能量奖励提示 -->
     <view class="energy-tip">
@@ -289,27 +285,6 @@ export default {
 }
 
 /* ===== 导航栏 ===== */
-.nav-bar {
-  position: sticky;
-  top: 0;
-  background: #fff;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: space-between;
-  padding: 20rpx 30rpx;
-  box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.06);
-  z-index: 100;
-}
-.nav-back {
-  font-size: 32rpx;
-  color: #5B9BD5;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-}
 .nav-placeholder {
   width: 80rpx;
 }

+ 3 - 28
cfc-frontend/pages/body-detail/health-report.vue

@@ -1,11 +1,7 @@
 <template>
   <view class="report-container">
     <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <text class="nav-back" @click="goBack">‹ 返回</text>
-      <text class="nav-title">健康报告详情</text>
-      <view class="nav-placeholder"></view>
-    </view>
+</view>
 
     <!-- 报告头部 -->
     <view class="report-header" v-if="report">
@@ -369,8 +365,8 @@ export default {
           self.report = results[0].data
           self.reportId = self.report.id
           self.loadDeficiencyRecords()
-          // Load indicators after getting reportId
-          if (self.reportId) {
+          // Load indicators after getting reportId (only if not already loaded in parallel)
+          if (self.reportId && !self.indicators) {
             healthRequest('/api/health/indicator/list', { reportId: self.reportId }).then(function(res) {
               if (res.data) {
                 self.indicators = res.data
@@ -527,27 +523,6 @@ export default {
 }
 
 /* ===== 导航栏 ===== */
-.nav-bar {
-  position: sticky;
-  top: 0;
-  background: #fff;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: space-between;
-  padding: 20rpx 30rpx;
-  box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.06);
-  z-index: 100;
-}
-.nav-back {
-  font-size: 32rpx;
-  color: #5B9BD5;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-}
 .nav-placeholder {
   width: 80rpx;
 }

+ 1 - 22
cfc-frontend/pages/body-detail/member-body-detail.vue

@@ -1,12 +1,7 @@
 <template>
   <view class="detail-container">
     <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack">
-        <text class="nav-back-icon">&#x2190;</text>
-      </view>
-      <text class="nav-title">身 · 成员详情</text>
-    </view>
+</view>
 
     <!-- 五维能量条 -->
     <FamilyEnergyBar
@@ -187,26 +182,10 @@ export default {
   background: #f5f7fa;
   padding-bottom: 40rpx;
 }
-.nav-bar {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  padding: 20rpx 30rpx;
-  background: #fff;
-}
-.nav-back {
-  padding: 10rpx;
-}
 .nav-back-icon {
   font-size: 36rpx;
   color: #333;
 }
-.nav-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-  margin-left: 16rpx;
-}
 .member-card {
   display: flex;
   flex-direction: row;

+ 1 - 22
cfc-frontend/pages/body/member-body-detail.vue

@@ -1,12 +1,7 @@
 <template>
   <view class="detail-container">
     <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack">
-        <text class="nav-back-icon">&#x2190;</text>
-      </view>
-      <text class="nav-title">身 · 成员详情</text>
-    </view>
+</view>
 
     <!-- 五维能量条 -->
     <FamilyEnergyBar
@@ -187,26 +182,10 @@ export default {
   background: #f5f7fa;
   padding-bottom: 40rpx;
 }
-.nav-bar {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  padding: 20rpx 30rpx;
-  background: #fff;
-}
-.nav-back {
-  padding: 10rpx;
-}
 .nav-back-icon {
   font-size: 36rpx;
   color: #333;
 }
-.nav-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-  margin-left: 16rpx;
-}
 .member-card {
   display: flex;
   flex-direction: row;

+ 1 - 4
cfc-frontend/pages/dan-assessment/report-upload.vue

@@ -313,10 +313,7 @@ export default {
   color: #fff;
   margin-right: 8rpx;
 }
-.back-text {
-  font-size: 28rpx;
-  color: #fff;
-}
+
 .header-title {
   font-size: 36rpx;
   font-weight: 700;

+ 1 - 34
cfc-frontend/pages/diet/food-query.vue

@@ -1,12 +1,5 @@
 <template>
-  <view class="food-query-page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">食材查询</text>
-      <view class="nav-placeholder"></view>
-    </view>
+  <view class="food-query-page"></view>
 
     <view class="search-bar">
       <input class="search-input" placeholder="搜索食材..." v-model="searchQuery" @confirm="searchFood" />
@@ -159,32 +152,6 @@ export default {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: env(safe-area-inset-top);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-.back-text {
-  font-size: 28rpx;
-  color: #333;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .nav-placeholder {
   width: 80rpx;
 }

+ 1 - 34
cfc-frontend/pages/diet/meal-config.vue

@@ -1,12 +1,5 @@
 <template>
-  <view class="meal-config-page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">共餐配置</text>
-      <view class="nav-placeholder"></view>
-    </view>
+  <view class="meal-config-page"></view>
 
     <scroll-view class="content" scroll-y>
       <!-- 日期类型切换 -->
@@ -177,32 +170,6 @@ export default {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: env(safe-area-inset-top);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-.back-text {
-  font-size: 28rpx;
-  color: #333;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .nav-placeholder {
   width: 80rpx;
 }

+ 1 - 34
cfc-frontend/pages/diet/preferences.vue

@@ -1,12 +1,5 @@
 <template>
-  <view class="preferences-page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">饮食偏好调研</text>
-      <view class="nav-placeholder"></view>
-    </view>
+  <view class="preferences-page"></view>
 
     <scroll-view class="content" scroll-y>
       <!-- 硬性要求 -->
@@ -235,32 +228,6 @@ export default {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: env(safe-area-inset-top);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-.back-text {
-  font-size: 28rpx;
-  color: #333;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .nav-placeholder {
   width: 80rpx;
 }

+ 1 - 34
cfc-frontend/pages/diet/recommendation.vue

@@ -1,12 +1,5 @@
 <template>
-  <view class="recommendation-page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">食谱推荐</text>
-      <view class="nav-placeholder"></view>
-    </view>
+  <view class="recommendation-page"></view>
 
     <scroll-view class="content" scroll-y>
       <!-- 无推荐状态 -->
@@ -229,32 +222,6 @@ export default {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: env(safe-area-inset-top);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-.back-text {
-  font-size: 28rpx;
-  color: #333;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .nav-placeholder {
   width: 80rpx;
 }

+ 1 - 34
cfc-frontend/pages/diet/record-detail.vue

@@ -1,12 +1,5 @@
 <template>
-  <view class="record-detail-page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">记录详情</text>
-      <view class="nav-placeholder"></view>
-    </view>
+  <view class="record-detail-page"></view>
 
     <scroll-view class="content" scroll-y v-if="record">
       <!-- 照片 -->
@@ -181,32 +174,6 @@ export default {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: env(safe-area-inset-top);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-.back-text {
-  font-size: 28rpx;
-  color: #333;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .nav-placeholder {
   width: 80rpx;
 }

+ 1 - 34
cfc-frontend/pages/diet/records.vue

@@ -1,12 +1,5 @@
 <template>
-  <view class="records-page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">饮食记录</text>
-      <view class="nav-placeholder"></view>
-    </view>
+  <view class="records-page"></view>
 
     <!-- 日期选择 -->
     <view class="date-picker">
@@ -176,32 +169,6 @@ export default {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: env(safe-area-inset-top);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-.back-text {
-  font-size: 28rpx;
-  color: #333;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .nav-placeholder {
   width: 80rpx;
 }

+ 1 - 19
cfc-frontend/pages/discover/circles.vue

@@ -5,10 +5,7 @@
       <view class="nav-header">
         <view class="nav-back" @click="goBack">
           <text class="nav-back-icon">‹</text>
-        </view>
-        <text class="nav-title">发现圈子</text>
-        <view class="nav-placeholder"></view>
-      </view>
+        </view></view>
     </view>
 
     <!-- 加载状态 -->
@@ -203,14 +200,6 @@ export default {
   height: 88rpx;
   position: relative;
 }
-.nav-back {
-  width: 88rpx;
-  height: 88rpx;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  flex-shrink: 0;
-}
 .nav-back:active {
   opacity: 0.6;
 }
@@ -219,13 +208,6 @@ export default {
   color: #333;
   line-height: 1;
 }
-.nav-title {
-  flex: 1;
-  text-align: center;
-  font-size: 34rpx;
-  font-weight: 600;
-  color: #333;
-}
 .nav-placeholder {
   width: 88rpx;
   flex-shrink: 0;

+ 1 - 26
cfc-frontend/pages/energy/index.vue

@@ -5,8 +5,7 @@
       <view class="nav-back" @click="goBack">
         <text class="nav-back-icon">&#x2190;</text>
       </view>
-      <text class="nav-title">{{ pageTitle }}</text>
-      <view class="nav-right" @click="showMemberPicker = true">
+<view class="nav-right" @click="showMemberPicker = true">
         <text class="nav-current-member">{{ currentMemberName }}</text>
         <text class="nav-arrow">▼</text>
       </view>
@@ -347,34 +346,10 @@ export default {
   background: linear-gradient(180deg, #0F1B2D 0%, #1A2744 100%);
   padding-bottom: 40rpx;
 }
-.nav-bar {
-  position: relative;
-  display: flex;
-  align-items: center;
-  padding: 20rpx 30rpx;
-  padding-top: 40rpx;
-}
-.nav-back {
-  width: 60rpx;
-  height: 60rpx;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  background: rgba(255,255,255,0.1);
-  border-radius: 30rpx;
-}
 .nav-back-icon {
   font-size: 32rpx;
   color: #fff;
 }
-.nav-title {
-  flex: 1;
-  text-align: center;
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #fff;
-  margin-right: 80rpx;
-}
 .nav-right {
   position: absolute;
   right: 30rpx;

+ 2 - 12
cfc-frontend/pages/games/list.vue

@@ -4,13 +4,7 @@
       <text class="title">🎮 益智小游戏</text>
       <text class="subtitle">完成游戏获得积分奖励</text>
     </view>
-
-    <view class="nav-bar">
-      <view class="nav-item" @click="goRecords">
-        <text class="nav-icon">📋</text>
-        <text class="nav-text">训练记录</text>
-      </view>
-      <view class="nav-item" @click="goStats">
+<view class="nav-item" @click="goStats">
         <text class="nav-icon">📊</text>
         <text class="nav-text">训练统计</text>
       </view>
@@ -117,11 +111,7 @@ export default {
   margin-top: 10rpx;
 }
 
-.nav-bar {
-  display: flex;
-  gap: 20rpx;
-  margin-bottom: 30rpx;
-}
+
 .nav-item {
   flex: 1;
   background: rgba(255,255,255,0.15);

+ 1 - 18
cfc-frontend/pages/growth/caution-detail.vue

@@ -1,12 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">食材戒备匹配</text>
-      <view class="nav-placeholder"></view>
-    </view>
+  <view class="page"></view>
 
     <view class="warning-banner">
       <text class="banner-icon">⚠️</text>
@@ -151,16 +144,6 @@ export default {
   min-height: 100vh;
   background: #f5f6fa;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  padding: 20rpx 30rpx;
-  background: #fff;
-  position: relative;
-}
-.nav-back { padding: 10rpx 0; }
-.back-text { font-size: 28rpx; color: #4A9BD7; }
-.nav-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: 600; }
 .nav-placeholder { width: 80rpx; }
 
 .warning-banner {

+ 1 - 13
cfc-frontend/pages/growth/diet-checkin.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">饮食打卡</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <!-- 餐次选择 -->
       <view class="card">
         <view class="card-accent"></view>
@@ -320,10 +312,6 @@ export default {
 
 <style scoped>
 .page { min-height: 100vh; background: #FFF7ED; }
-.nav-bar { display: flex; align-items: center; height: 88rpx; padding-top: env(safe-area-inset-top); background: #fff; border-bottom: 1rpx solid #f0f0f0; position: relative; }
-.nav-back { position: absolute; left: 24rpx; top: 0; bottom: 0; display: flex; align-items: center; }
-.back-text { font-size: 28rpx; color: #F97316; }
-.nav-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: bold; color: #333; }
 .content { height: calc(100vh - 88rpx); }
 .card { margin: 16rpx 24rpx; background: #fff; border-radius: 20rpx; overflow: hidden; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.06); }
 .card-accent { height: 6rpx; background: linear-gradient(90deg, #FF8C42, #F97316); }

+ 1 - 13
cfc-frontend/pages/growth/exercise-checkin.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">运动打卡</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <!-- 运动表单 -->
       <view class="card">
         <view class="card-accent"></view>
@@ -336,10 +328,6 @@ export default {
 
 <style scoped>
 .page { min-height: 100vh; background: #FFF7ED; }
-.nav-bar { display: flex; align-items: center; height: 88rpx; padding-top: env(safe-area-inset-top); background: #fff; border-bottom: 1rpx solid #f0f0f0; position: relative; }
-.nav-back { position: absolute; left: 24rpx; top: 0; bottom: 0; display: flex; align-items: center; }
-.back-text { font-size: 28rpx; color: #F97316; }
-.nav-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: bold; color: #333; }
 .content { height: calc(100vh - 88rpx); }
 .card { margin: 16rpx 24rpx; background: #fff; border-radius: 20rpx; overflow: hidden; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.06); }
 .card-accent { height: 6rpx; background: linear-gradient(90deg, #FF8C42, #F97316); }

+ 1 - 10
cfc-frontend/pages/growth/foods-detail.vue

@@ -1,11 +1,6 @@
 <template>
   <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">饮食推荐</text>
-      <text class="nav-edit" @tap="toggleEdit">{{ isEditing ? '完成' : '编辑' }}</text>
+<text class="nav-edit" @tap="toggleEdit">{{ isEditing ? '完成' : '编辑' }}</text>
     </view>
 
     <scroll-view class="filter-bar" scroll-x>
@@ -170,10 +165,6 @@ export default {
 
 <style scoped>
 .page { min-height: 100vh; background: #f8f8f8; }
-.nav-bar { display: flex; align-items: center; padding: 20rpx 30rpx; background: #fff; position: relative; }
-.nav-back { padding: 10rpx 0; }
-.back-text { font-size: 28rpx; color: #4A9BD7; }
-.nav-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: 600; }
 .nav-edit { font-size: 28rpx; color: #4A9BD7; padding: 10rpx 0; }
 .filter-bar { background: #fff; padding: 10rpx 20rpx; white-space: nowrap; }
 .filter-item { display: inline-block; padding: 12rpx 28rpx; margin: 0 10rpx; border-radius: 30rpx; font-size: 26rpx; background: #f0f0f0; color: #666; }

+ 1 - 13
cfc-frontend/pages/growth/growth-emotion-checkin.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">心情打卡</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <!-- 情绪选择 -->
       <view class="card">
         <view class="card-accent"></view>
@@ -324,10 +316,6 @@ export default {
 
 <style scoped>
 .page { min-height: 100vh; background: #FFF7ED; }
-.nav-bar { display: flex; align-items: center; height: 88rpx; padding-top: env(safe-area-inset-top); background: #fff; border-bottom: 1rpx solid #f0f0f0; position: relative; }
-.nav-back { position: absolute; left: 24rpx; top: 0; bottom: 0; display: flex; align-items: center; }
-.back-text { font-size: 28rpx; color: #F97316; }
-.nav-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: bold; color: #333; }
 .content { height: calc(100vh - 88rpx); }
 .card { margin: 16rpx 24rpx; background: #fff; border-radius: 20rpx; overflow: hidden; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.06); }
 .card-accent { height: 6rpx; background: linear-gradient(90deg, #FF6B9D, #F97316); }

+ 1 - 13
cfc-frontend/pages/growth/profile/index.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">我的画像</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <!-- 基本信息 -->
       <view class="card" v-if="profile.member">
         <view class="card-accent"></view>
@@ -299,10 +291,6 @@ export default {
 
 <style scoped>
 .page { min-height: 100vh; background: #FFF7ED; }
-.nav-bar { display: flex; align-items: center; height: 88rpx; padding-top: env(safe-area-inset-top); background: #fff; border-bottom: 1rpx solid #f0f0f0; position: relative; }
-.nav-back { position: absolute; left: 24rpx; top: 0; bottom: 0; display: flex; align-items: center; }
-.back-text { font-size: 28rpx; color: #F97316; }
-.nav-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: bold; color: #333; }
 .content { height: calc(100vh - 88rpx); }
 .card { margin: 16rpx 24rpx; background: #fff; border-radius: 20rpx; overflow: hidden; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.06); }
 .card-accent { height: 6rpx; background: linear-gradient(90deg, #FF8C42, #F97316); }

+ 1 - 13
cfc-frontend/pages/growth/sleep-checkin.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">睡眠打卡</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <!-- 睡眠表单 -->
       <view class="card">
         <view class="card-accent"></view>
@@ -172,10 +164,6 @@ export default {
 
 <style scoped>
 .page { min-height: 100vh; background: #FFF7ED; }
-.nav-bar { display: flex; align-items: center; height: 88rpx; padding-top: env(safe-area-inset-top); background: #fff; border-bottom: 1rpx solid #f0f0f0; position: relative; }
-.nav-back { position: absolute; left: 24rpx; top: 0; bottom: 0; display: flex; align-items: center; }
-.back-text { font-size: 28rpx; color: #F97316; }
-.nav-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: bold; color: #333; }
 .content { height: calc(100vh - 88rpx); }
 .card { margin: 16rpx 24rpx; background: #fff; border-radius: 20rpx; overflow: hidden; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.06); }
 .card-accent { height: 6rpx; background: linear-gradient(90deg, #FF8C42, #F97316); }

+ 1 - 11
cfc-frontend/pages/health/bodyfat-confirm.vue

@@ -1,11 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack"><text class="back-text">‹ 返回</text></view>
-      <text class="nav-title">体脂秤数据确认</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <!-- 已识别指标 -->
       <view class="card">
         <view class="card-accent"></view>
@@ -124,10 +118,6 @@ export default {
 
 <style scoped>
 .page { min-height: 100vh; background: #F5F7FA; padding-bottom: 140rpx; }
-.nav-bar { display: flex; align-items: center; padding: 24rpx 30rpx; background: #fff; }
-.nav-back { margin-right: 20rpx; }
-.back-text { font-size: 28rpx; color: #333; }
-.nav-title { font-size: 32rpx; font-weight: bold; color: #333; }
 .content { height: calc(100vh - 100rpx); }
 .card { margin: 24rpx 30rpx; background: #fff; border-radius: 16rpx; overflow: hidden; }
 .card-accent { height: 6rpx; background: linear-gradient(90deg, #F97316, #F59E0B); }

+ 1 - 22
cfc-frontend/pages/health/daily-checkin.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">健康打卡</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <view class="card">
         <view class="card-accent"></view>
         <view class="card-body">
@@ -202,19 +194,6 @@ export default {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: var(--status-bar-height, 0);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back { position: absolute; left: 30rpx; top: 50%; transform: translateY(-50%); padding: 10rpx; }
-.back-text { font-size: 28rpx; color: #333; }
-.nav-title { font-size: 32rpx; font-weight: 600; color: #333; }
 .content { flex: 1; padding: 30rpx; }
 .card {
   display: flex; background-color: #FFFFFF; border-radius: 20rpx; margin-bottom: 30rpx;

+ 1 - 35
cfc-frontend/pages/health/diet-index.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">饮食</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <view class="card">
         <view class="card-accent"></view>
         <view class="card-body">
@@ -252,32 +244,6 @@ export default {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: var(--status-bar-height, 0);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-.back-text {
-  font-size: 28rpx;
-  color: #333;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .content {
   flex: 1;
   padding: 30rpx;

+ 1 - 35
cfc-frontend/pages/health/exercise-index.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">运动</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <view class="card">
         <view class="card-accent"></view>
         <view class="card-body">
@@ -268,32 +260,6 @@ export default {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: var(--status-bar-height, 0);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-.back-text {
-  font-size: 28rpx;
-  color: #333;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .content {
   flex: 1;
   padding: 30rpx;

+ 1 - 13
cfc-frontend/pages/health/gut-flora-detail.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">肠道菌群报告</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <!-- 报告头部 -->
       <view class="report-header">
         <text class="report-title">肠道菌群检测报告</text>
@@ -493,10 +485,6 @@ export default {
 
 <style scoped>
 .page { min-height: 100vh; background: #f8f8f8; }
-.nav-bar { display: flex; align-items: center; padding: 20rpx 30rpx; background: #fff; position: relative; }
-.nav-back { padding: 10rpx 0; }
-.back-text { font-size: 28rpx; color: #4A9BD7; }
-.nav-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: 600; }
 .content { height: calc(100vh - 100rpx); }
 
 .report-header { background: linear-gradient(135deg, #4A9BD7, #6366F1); padding: 40rpx 30rpx; color: #fff; }

+ 1 - 10
cfc-frontend/pages/health/gut-flora-risks-detail.vue

@@ -1,11 +1,6 @@
 <template>
   <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">疾病风险</text>
-      <text class="nav-edit" @tap="toggleEdit">{{ isEditing ? '完成' : '编辑' }}</text>
+<text class="nav-edit" @tap="toggleEdit">{{ isEditing ? '完成' : '编辑' }}</text>
     </view>
 
     <scroll-view class="content" scroll-y>
@@ -203,10 +198,6 @@ export default {
 
 <style scoped>
 .page { min-height: 100vh; background: #f8f8f8; }
-.nav-bar { display: flex; align-items: center; padding: 20rpx 30rpx; background: #fff; position: relative; }
-.nav-back { padding: 10rpx 0; }
-.back-text { font-size: 28rpx; color: #4A9BD7; }
-.nav-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: 600; }
 .nav-edit { font-size: 28rpx; color: #4A9BD7; padding: 10rpx 0; }
 .content { padding: 20rpx 30rpx; height: calc(100vh - 100rpx); }
 .section-label { font-size: 26rpx; color: #999; margin: 10rpx 0 16rpx; padding-left: 8rpx; }

+ 1 - 10
cfc-frontend/pages/health/gut-flora-species-detail.vue

@@ -1,11 +1,6 @@
 <template>
   <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">菌群详情</text>
-      <text class="nav-edit" @tap="toggleEdit">{{ isEditing ? '完成' : '编辑' }}</text>
+<text class="nav-edit" @tap="toggleEdit">{{ isEditing ? '完成' : '编辑' }}</text>
     </view>
 
     <scroll-view class="tabs" scroll-x>
@@ -235,10 +230,6 @@ export default {
 
 <style scoped>
 .page { min-height: 100vh; background: #f8f8f8; }
-.nav-bar { display: flex; align-items: center; padding: 20rpx 30rpx; background: #fff; position: relative; }
-.nav-back { padding: 10rpx 0; }
-.back-text { font-size: 28rpx; color: #4A9BD7; }
-.nav-title { flex: 1; text-align: center; font-size: 32rpx; font-weight: 600; }
 .nav-edit { font-size: 28rpx; color: #4A9BD7; padding: 10rpx 0; }
 .tabs { background: #fff; padding: 10rpx 20rpx; white-space: nowrap; border-bottom: 1rpx solid #eee; }
 .tab-item { display: inline-block; padding: 12rpx 24rpx; margin: 0 6rpx; border-radius: 30rpx; font-size: 24rpx; background: #f0f0f0; color: #666; }

+ 1 - 39
cfc-frontend/pages/health/gut-index.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">菌群</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <view class="card">
         <view class="card-accent"></view>
         <view class="card-body">
@@ -170,36 +162,6 @@ export default {
   flex-direction: column;
 }
 
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: var(--status-bar-height, 0);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-
-.back-text {
-  font-size: 28rpx;
-  color: #333;
-}
-
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
-
 .content {
   flex: 1;
   padding: 30rpx;

+ 1 - 36
cfc-frontend/pages/health/meditation-index.vue

@@ -1,13 +1,4 @@
-<template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">冥想记录</text>
-    </view>
-
-    <!-- 成员选择 -->
+<template><!-- 成员选择 -->
     <view class="member-selector-card">
       <text class="member-label">记录人</text>
       <picker mode="selector" :range="memberOptions" :value="selectedMemberIndex" @change="onMemberChange">
@@ -173,32 +164,6 @@ function healthRequest(url, data) {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: var(--status-bar-height, 0);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-.back-text {
-  font-size: 28rpx;
-  color: #333;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .content {
   flex: 1;
   padding: 30rpx;

+ 1 - 26
cfc-frontend/pages/health/nutrition-profile.vue

@@ -1,10 +1,6 @@
 <template>
   <view class="nutrition-profile">
-    <view class="nav-bar">
-      <text class="nav-back" @click="goBack">‹ 返回</text>
-      <text class="nav-title">营养档案</text>
-      <view class="nav-placeholder"></view>
-    </view>
+</view>
 
     <view class="profile-header" v-if="childName">
       <view class="child-info">
@@ -311,27 +307,6 @@ export default {
   padding-bottom: 40rpx;
 }
 
-.nav-bar {
-  position: sticky;
-  top: 0;
-  background: #fff;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: space-between;
-  padding: 20rpx 30rpx;
-  box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.06);
-  z-index: 100;
-}
-.nav-back {
-  font-size: 32rpx;
-  color: #F97316;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-}
 .nav-placeholder {
   width: 80rpx;
 }

+ 1 - 19
cfc-frontend/pages/health/physical-exam-detail.vue

@@ -1,11 +1,7 @@
 <template>
   <view class="detail-container">
     <!-- 导航栏 -->
-    <view class="nav-bar">
-      <text class="nav-back" @click="goBack">‹ 返回</text>
-      <text class="nav-title">体检报告详情</text>
-      <view class="nav-placeholder"></view>
-    </view>
+</view>
 
     <!-- 加载状态 -->
     <view class="loading-wrap" v-if="loading">
@@ -214,20 +210,6 @@ goBack: function() {
   min-height: 100vh;
   background: #F5F7FA;
 }
-.nav-bar {
-  position: sticky;
-  top: 0;
-  background: #fff;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: space-between;
-  padding: 20rpx 30rpx;
-  box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.06);
-  z-index: 100;
-}
-.nav-back { font-size: 32rpx; color: #5B9BD5; }
-.nav-title { font-size: 32rpx; font-weight: bold; color: #333; }
 .nav-placeholder { width: 80rpx; }
 
 .loading-wrap {

+ 1 - 19
cfc-frontend/pages/health/report-confirm.vue

@@ -1,10 +1,6 @@
 <template>
   <view class="confirm-container">
-    <view class="nav-bar">
-      <text class="nav-back" @click="goBack">‹ 返回</text>
-      <text class="nav-title">确认健康报告</text>
-      <view class="nav-placeholder"></view>
-    </view>
+</view>
 
     <view class="tip-banner">
       <text class="tip-icon">✅</text>
@@ -897,20 +893,6 @@ export default {
   min-height: 100vh;
   background: #F5F7FA;
 }
-.nav-bar {
-  position: sticky;
-  top: 0;
-  background: #fff;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: space-between;
-  padding: 20rpx 30rpx;
-  box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.06);
-  z-index: 100;
-}
-.nav-back { font-size: 32rpx; color: #5B9BD5; }
-.nav-title { font-size: 32rpx; font-weight: bold; color: #333; }
 .nav-placeholder { width: 80rpx; }
 
 .tip-banner {

+ 1 - 19
cfc-frontend/pages/health/report-survey.vue

@@ -1,11 +1,7 @@
 <template>
   <view class="survey-container">
     <!-- 导航 -->
-    <view class="nav-bar">
-      <text class="nav-back" @click="goBack">‹ 返回</text>
-      <text class="nav-title">健康调研问卷</text>
-      <view class="nav-placeholder"></view>
-    </view>
+</view>
 
     <!-- 进度条 -->
     <view class="progress-bar">
@@ -772,20 +768,6 @@ export default {
   min-height: 100vh;
   background: #F3F7FA;
 }
-.nav-bar {
-  position: sticky;
-  top: 0;
-  background: #fff;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: space-between;
-  padding: 20rpx 30rpx;
-  box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.06);
-  z-index: 100;
-}
-.nav-back { font-size: 32rpx; color: #5B9BD5; }
-.nav-title { font-size: 32rpx; font-weight: bold; color: #333; }
 .nav-placeholder { width: 80rpx; }
 
 .progress-bar {

+ 0 - 21
cfc-frontend/pages/health/report-upload.vue

@@ -316,27 +316,6 @@ export default {
 }
 
 /* ===== 导航栏 ===== */
-.nav-bar {
-  position: sticky;
-  top: 0;
-  background: #fff;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: space-between;
-  padding: 20rpx 30rpx;
-  box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.06);
-  z-index: 100;
-}
-.nav-back {
-  font-size: 32rpx;
-  color: #5B9BD5;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-}
 .nav-placeholder {
   width: 80rpx;
 }

+ 1 - 35
cfc-frontend/pages/health/sleep-index.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">作息</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <view class="card">
         <view class="card-accent"></view>
         <view class="card-body">
@@ -258,32 +250,6 @@ export default {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: var(--status-bar-height, 0);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-.back-text {
-  font-size: 28rpx;
-  color: #333;
-}
-.nav-title {
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .content {
   flex: 1;
   padding: 30rpx;

+ 1 - 11
cfc-frontend/pages/health/teacher-select.vue

@@ -1,11 +1,7 @@
 <template>
   <view class="page">
     <!-- 导航栏 -->
-    <view class="nav-bar">
-      <text class="nav-back" @click="goBack">‹ 返回</text>
-      <text class="nav-title">选择规划师</text>
-      <view class="nav-placeholder"></view>
-    </view>
+</view>
 
     <!-- 提示 -->
     <view class="tip-banner">
@@ -108,12 +104,6 @@ export default {
 
 <style scoped>
 .page { min-height: 100vh; background: #F3F7FA; padding-bottom: 120rpx; }
-.nav-bar {
-  display: flex; align-items: center; justify-content: space-between;
-  padding: 28rpx 32rpx; background: #fff;
-}
-.nav-back { font-size: 32rpx; color: #666; }
-.nav-title { font-size: 34rpx; font-weight: bold; color: #333; }
 .nav-placeholder { width: 80rpx; }
 .tip-banner {
   display: flex; align-items: center; gap: 12rpx;

+ 1 - 28
cfc-frontend/pages/health/water-index.vue

@@ -1,13 +1,5 @@
 <template>
-  <view class="page">
-    <view class="nav-bar">
-      <view class="nav-back" @tap="goBack">
-        <text class="back-text">‹ 返回</text>
-      </view>
-      <text class="nav-title">饮水</text>
-    </view>
-
-    <scroll-view class="content" scroll-y>
+  <scroll-view class="content" scroll-y>
       <view class="card">
         <view class="card-accent"></view>
         <view class="card-body">
@@ -218,25 +210,6 @@ export default {
   display: flex;
   flex-direction: column;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 88rpx;
-  padding-top: var(--status-bar-height, 0);
-  background-color: #FFFFFF;
-  position: relative;
-  border-bottom: 1rpx solid #f0f0f0;
-}
-.nav-back {
-  position: absolute;
-  left: 30rpx;
-  top: 50%;
-  transform: translateY(-50%);
-  padding: 10rpx;
-}
-.back-text { font-size: 28rpx; color: #333; }
-.nav-title { font-size: 32rpx; font-weight: 600; color: #333; }
 .content { flex: 1; padding: 30rpx; }
 .card {
   display: flex;

+ 1 - 22
cfc-frontend/pages/home-pages/member-home-detail.vue

@@ -1,12 +1,7 @@
 <template>
   <view class="detail-container">
     <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack">
-        <text class="nav-back-icon">&#x2190;</text>
-      </view>
-      <text class="nav-title">成员详情</text>
-    </view>
+</view>
 
     <!-- 加载中 -->
     <view class="loading" v-if="loading">加载中...</view>
@@ -218,26 +213,10 @@ export default {
   background: #f5f7fa;
   padding-bottom: 40rpx;
 }
-.nav-bar {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  padding: 20rpx 30rpx;
-  background: #fff;
-}
-.nav-back {
-  padding: 10rpx;
-}
 .nav-back-icon {
   font-size: 36rpx;
   color: #333;
 }
-.nav-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-  margin-left: 16rpx;
-}
 .loading {
   text-align: center;
   padding: 60rpx;

+ 1 - 19
cfc-frontend/pages/member-detail/member-detail.vue

@@ -5,8 +5,7 @@
       <view class="nav-back" @click="goBack">
         <text class="nav-back-icon">&#x2190;</text>
       </view>
-      <text class="nav-title">{{ navTitle }}</text>
-    </view>
+</view>
 
     <!-- 加载中 -->
     <view class="loading" v-if="loading">加载中...</view>
@@ -381,27 +380,10 @@ export default {
 }
 
 /* ===== 导航栏 ===== */
-.nav-bar {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  padding: 20rpx 30rpx;
-  background: #fff;
-}
-.nav-back {
-  padding: 10rpx;
-}
 .nav-back-icon {
   font-size: 36rpx;
   color: #333;
 }
-.nav-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-  margin-left: 16rpx;
-}
-
 /* ===== 通用 ===== */
 .loading {
   text-align: center;

+ 1 - 26
cfc-frontend/pages/member-detail/report-detail.vue

@@ -1,11 +1,6 @@
 <template>
   <view class="container">
-    <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack">‹ 返回</view>
-      <text class="nav-title">报告详情</text>
-      <view class="nav-placeholder"></view>
-    </view>
+    <!-- 顶部导航 --></view>
 
     <!-- 加载状态 -->
     <view class="loading" v-if="loading">加载中...</view>
@@ -158,26 +153,6 @@ export default {
   min-height: 100vh;
   background: #f5f7fa;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  height: 88rpx;
-  background: #fff;
-  border-bottom: 1rpx solid #eee;
-  padding: 0 30rpx;
-}
-.nav-back {
-  font-size: 32rpx;
-  color: #666;
-  padding: 0 20rpx;
-}
-.nav-title {
-  flex: 1;
-  text-align: center;
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .nav-placeholder {
   width: 60rpx;
 }

+ 1 - 26
cfc-frontend/pages/member-detail/service-role-apply.vue

@@ -1,11 +1,6 @@
 <template>
   <view class="container">
-    <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack">‹ 返回</view>
-      <text class="nav-title">服务角色申请</text>
-      <view class="nav-placeholder"></view>
-    </view>
+    <!-- 顶部导航 --></view>
 
     <!-- 加载状态 -->
     <view class="loading" v-if="loading">加载中...</view>
@@ -224,26 +219,6 @@ export default {
   min-height: 100vh;
   background: #f5f7fa;
 }
-.nav-bar {
-  display: flex;
-  align-items: center;
-  height: 88rpx;
-  background: #fff;
-  border-bottom: 1rpx solid #eee;
-  padding: 0 30rpx;
-}
-.nav-back {
-  font-size: 32rpx;
-  color: #666;
-  padding: 0 20rpx;
-}
-.nav-title {
-  flex: 1;
-  text-align: center;
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #333;
-}
 .nav-placeholder {
   width: 60rpx;
 }

+ 1 - 22
cfc-frontend/pages/mind-detail/member-mind-detail.vue

@@ -1,12 +1,7 @@
 <template>
   <view class="detail-container">
     <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack">
-        <text class="nav-back-icon">&#x2190;</text>
-      </view>
-      <text class="nav-title">心 · 成员详情</text>
-    </view>
+</view>
 
     <!-- 五维能量条 -->
     <FamilyEnergyBar
@@ -187,26 +182,10 @@ export default {
   background: #f5f7fa;
   padding-bottom: 40rpx;
 }
-.nav-bar {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  padding: 20rpx 30rpx;
-  background: #fff;
-}
-.nav-back {
-  padding: 10rpx;
-}
 .nav-back-icon {
   font-size: 36rpx;
   color: #333;
 }
-.nav-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-  margin-left: 16rpx;
-}
 .member-card {
   display: flex;
   flex-direction: row;

+ 1 - 22
cfc-frontend/pages/mind/member-mind-detail.vue

@@ -1,12 +1,7 @@
 <template>
   <view class="detail-container">
     <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack">
-        <text class="nav-back-icon">&#x2190;</text>
-      </view>
-      <text class="nav-title">心 · 成员详情</text>
-    </view>
+</view>
 
     <!-- 五维能量条 -->
     <FamilyEnergyBar
@@ -187,26 +182,10 @@ export default {
   background: #f5f7fa;
   padding-bottom: 40rpx;
 }
-.nav-bar {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  padding: 20rpx 30rpx;
-  background: #fff;
-}
-.nav-back {
-  padding: 10rpx;
-}
 .nav-back-icon {
   font-size: 36rpx;
   color: #333;
 }
-.nav-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #333;
-  margin-left: 16rpx;
-}
 .member-card {
   display: flex;
   flex-direction: row;

+ 2 - 11
cfc-frontend/pages/rewards/rewards.vue

@@ -1,11 +1,6 @@
 <template>
   <view class="container">
-    <view class="nav-bar">
-      <view class="nav-item" @click="goToBadge">
-        <text class="nav-icon">🏅</text>
-        <text class="nav-text">勋章墙</text>
-      </view>
-    </view>
+</view>
     <view class="reward-list" v-if="rewards.length > 0">
       <view v-for="reward in rewards" :key="reward.id" class="reward-item">
         <view class="reward-info">
@@ -212,11 +207,7 @@ export default {
   padding-bottom: 120rpx;
 }
 
-.nav-bar {
-  display: flex;
-  margin-bottom: 20rpx;
-  gap: 16rpx;
-}
+
 .nav-item {
   display: flex;
   align-items: center;

+ 1 - 8
cfc-frontend/pages/tianpan/annual-energy.vue

@@ -1,10 +1,6 @@
 <template>
 <view class="annual-energy-page">
-  <view class="nav-bar">
-    <text class="nav-back" @click="goBack">←</text>
-    <text class="nav-title">流年能量</text>
-    <view class="nav-right"></view>
-  </view>
+</view>
   <view v-if="loading" class="loading-state"><text>加载中...</text></view>
   <view v-else-if="error" class="error-state"><text class="error-text">{{ error }}</text></view>
   <view v-else-if="energy" class="content">
@@ -123,9 +119,6 @@ export default {
 </script>
 <style scoped>
 .annual-energy-page { min-height: 100vh; background: #F3F4F6; }
-.nav-bar { display: flex; align-items: center; justify-content: space-between; padding: 20px 16px 10px; background: #F97316; }
-.nav-back { font-size: 18px; color: #FFF; }
-.nav-title { font-size: 17px; font-weight: bold; color: #FFF; }
 .nav-right { width: 40px; }
 .loading-state, .error-state { padding: 60px 20px; display: flex; justify-content: center; align-items: center; }
 .error-text { color: #EF4444; font-size: 14px; }

+ 1 - 8
cfc-frontend/pages/tianpan/daily-fortune.vue

@@ -1,10 +1,6 @@
 <template>
 <view class="daily-fortune-page">
-  <view class="nav-bar">
-    <text class="nav-back" @click="goBack">←</text>
-    <text class="nav-title">每日宜忌</text>
-    <view class="nav-right"></view>
-  </view>
+</view>
   <view v-if="loading" class="loading-state"><text>加载中...</text></view>
   <view v-else-if="error" class="error-state"><text class="error-text">{{ error }}</text></view>
   <view v-else-if="fortune" class="content">
@@ -75,9 +71,6 @@ export default {
 </script>
 <style scoped>
 .daily-fortune-page { min-height: 100vh; background: #F3F4F6; }
-.nav-bar { display: flex; align-items: center; justify-content: space-between; padding: 20px 16px 10px; background: #F97316; }
-.nav-back { font-size: 18px; color: #FFF; }
-.nav-title { font-size: 17px; font-weight: bold; color: #FFF; }
 .nav-right { width: 40px; }
 .loading-state, .error-state { padding: 60px 20px; display: flex; justify-content: center; align-items: center; }
 .error-text { color: #EF4444; font-size: 14px; }

+ 1 - 7
cfc-frontend/pages/tianpan/index.vue

@@ -3,8 +3,7 @@
     <!-- 自定义导航栏 -->
     <view class="custom-nav">
       <view class="nav-header">
-        <text class="nav-title">家庭天盘</text>
-        <picker mode="selector" :range="yearOptions" :value="yearIndex" @change="onYearChange">
+<picker mode="selector" :range="yearOptions" :value="yearIndex" @change="onYearChange">
           <view class="year-picker">
             <text class="year-text">{{ currentYear }}</text>
             <text class="picker-icon">▼</text>
@@ -643,11 +642,6 @@ export default {
   align-items: center;
 }
 
-.nav-title {
-  font-size: 20px;
-  font-weight: bold;
-}
-
 .year-picker {
   display: flex;
   align-items: center;

+ 1 - 14
cfc-frontend/pages/tianpan/member-detail.vue

@@ -3,8 +3,7 @@
     <!-- 自定义导航栏 -->
     <view class="custom-nav">
       <view class="nav-back" @click="goBack">‹ 返回</view>
-      <text class="nav-title">成员详情</text>
-    </view>
+</view>
 
     <!-- 加载状态 -->
     <view class="loading-state" v-if="loading">
@@ -246,18 +245,6 @@ export default {
   align-items: center;
 }
 
-.nav-back {
-  color: #FFFFFF;
-  font-size: 14px;
-  margin-right: 16px;
-}
-
-.nav-title {
-  color: #FFFFFF;
-  font-size: 18px;
-  font-weight: bold;
-}
-
 .loading-state, .error-state {
   display: flex;
   flex-direction: column;

+ 1 - 8
cfc-frontend/pages/tianpan/related-items.vue

@@ -1,10 +1,6 @@
 <template>
 <view class="related-items-page">
-  <view class="nav-bar">
-    <text class="nav-back" @click="goBack">←</text>
-    <text class="nav-title">关注事宜</text>
-    <view class="nav-right"></view>
-  </view>
+</view>
   <view class="tab-bar">
     <view v-for="(tab, idx) in tabs" :key="idx" :class="'tab-item ' + (activeTab === idx ? 'active' : '')" @click="switchTab(idx)">
       <text class="tab-text">{{ tab.label }}</text>
@@ -105,9 +101,6 @@ export default {
 </script>
 <style scoped>
 .related-items-page { min-height: 100vh; background: #F3F4F6; }
-.nav-bar { display: flex; align-items: center; justify-content: space-between; padding: 20px 16px 10px; background: #F97316; }
-.nav-back { font-size: 18px; color: #FFF; }
-.nav-title { font-size: 17px; font-weight: bold; color: #FFF; }
 .nav-right { width: 40px; }
 .tab-bar { display: flex; background: #FFF; border-bottom: 1px solid #E5E7EB; position: sticky; top: 0; z-index: 10; }
 .tab-item { flex: 1; display: flex; flex-direction: column; align-items: center; padding: 12px 0; position: relative; }

+ 1 - 14
cfc-frontend/pages/tianpan/relation-detail.vue

@@ -3,8 +3,7 @@
     <!-- 自定义导航栏 -->
     <view class="custom-nav">
       <view class="nav-back" @click="goBack">‹ 返回</view>
-      <text class="nav-title">关系详情</text>
-    </view>
+</view>
 
     <!-- 加载状态 -->
     <view class="loading-state" v-if="loading">
@@ -424,18 +423,6 @@ export default {
   align-items: center;
 }
 
-.nav-back {
-  color: #FFFFFF;
-  font-size: 14px;
-  margin-right: 16px;
-}
-
-.nav-title {
-  color: #FFFFFF;
-  font-size: 18px;
-  font-weight: bold;
-}
-
 .loading-state, .error-state {
   display: flex;
   flex-direction: column;

+ 1 - 31
cfc-frontend/pages/wisdom-detail/member-wisdom-detail.vue

@@ -1,12 +1,7 @@
 <template>
   <view class="detail-container">
     <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack">
-        <text class="nav-back-icon">&#x2190;</text>
-      </view>
-      <text class="nav-title">智 · 成员详情</text>
-    </view>
+</view>
 
     <!-- 五维能量条 -->
     <FamilyEnergyBar
@@ -142,36 +137,11 @@ export default {
   padding-bottom: 120rpx;
 }
 
-.nav-bar {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  padding: 80rpx 30rpx 20rpx;
-  background: linear-gradient(135deg, #FFD700, #FFA500);
-}
-
-.nav-back {
-  width: 60rpx;
-  height: 60rpx;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
-
 .nav-back-icon {
   font-size: 36rpx;
   color: #fff;
 }
 
-.nav-title {
-  flex: 1;
-  text-align: center;
-  font-size: 34rpx;
-  font-weight: bold;
-  color: #fff;
-  margin-right: 60rpx;
-}
-
 .member-card {
   display: flex;
   flex-direction: row;

+ 1 - 31
cfc-frontend/pages/wisdom/member-wisdom-detail.vue

@@ -1,12 +1,7 @@
 <template>
   <view class="detail-container">
     <!-- 顶部导航 -->
-    <view class="nav-bar">
-      <view class="nav-back" @click="goBack">
-        <text class="nav-back-icon">&#x2190;</text>
-      </view>
-      <text class="nav-title">智 · 成员详情</text>
-    </view>
+</view>
 
     <!-- 五维能量条 -->
     <FamilyEnergyBar
@@ -142,36 +137,11 @@ export default {
   padding-bottom: 120rpx;
 }
 
-.nav-bar {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  padding: 80rpx 30rpx 20rpx;
-  background: linear-gradient(135deg, #FFD700, #FFA500);
-}
-
-.nav-back {
-  width: 60rpx;
-  height: 60rpx;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
-
 .nav-back-icon {
   font-size: 36rpx;
   color: #fff;
 }
 
-.nav-title {
-  flex: 1;
-  text-align: center;
-  font-size: 34rpx;
-  font-weight: bold;
-  color: #fff;
-  margin-right: 60rpx;
-}
-
 .member-card {
   display: flex;
   flex-direction: row;

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-327bc9ed4761a3b1d1290f844a1cdda40ca10aab
+f048448e3ba616024db3869523ee9cff6c46888c

+ 2 - 2
cfc-web/package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "cfc-web",
-  "version": "1.0.1189",
+  "version": "1.0.1190",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "cfc-web",
-      "version": "1.0.1189",
+      "version": "1.0.1190",
       "dependencies": {
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor-for-vue": "^1.0.2",