Просмотр исходного кода

docs: update PROJECT-OVERVIEW.md v1.2 with Phase 2-4 recategorization and comprehensive implementation plan

- A类8项标记已结束(电商shop迁移/Web端E2E+重构+权限/差异修复/首页风险/测试修复)
- B类4项+ C类4项重新分Phase(Phase 2-4)
- 新增 comprehensive implementation plan (13 tasks across 3 phases)
- 阶段总览更新:Phase 2=商业模式&AI落地, Phase 3=五维增强, Phase 4=平台扩展
Xiaogang Liao 3 месяцев назад
Родитель
Сommit
d9628c15dc

+ 195 - 0
cfc-frontend/components/GenerationPicker.vue

@@ -0,0 +1,195 @@
+<template>
+  <view class="generation-picker-wrap">
+    <view class="form-item required" v-if="showLabel">
+      <text class="label"><text class="required-mark">*</text>辈分关系</text>
+    </view>
+    <picker :range="generationNames" :value="selectedIndex" @change="onGenerationChange" :disabled="disabled">
+      <view class="picker" :class="{ 'picker-disabled': disabled }">
+        <text>{{ selectedGenerationName || '请选择辈分关系' }}</text>
+      </view>
+    </picker>
+    
+    <!-- 同辈配偶选择器(仅当选择"同辈"时显示) -->
+    <view class="peer-type-selector" v-if="selectedGeneration === 'PEER' && showPeerType">
+      <view class="radio-group">
+        <label class="radio-item" @tap="selectPeerType('sibling')">
+          <view class="radio-icon" :class="{ active: peerType === 'sibling' }">
+            <view class="radio-inner" v-if="peerType === 'sibling'"></view>
+          </view>
+          <text class="radio-label">兄弟姐妹</text>
+        </label>
+        <label class="radio-item" @tap="selectPeerType('spouse')">
+          <view class="radio-icon" :class="{ active: peerType === 'spouse' }">
+            <view class="radio-inner" v-if="peerType === 'spouse'"></view>
+          </view>
+          <text class="radio-label">配偶</text>
+        </label>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+import { GenerationLevel } from '../utils/constants.js'
+
+export default {
+  name: 'GenerationPicker',
+  props: {
+    generationLevel: { type: String, default: '' },
+    peerType: { type: String, default: '' },
+    disabled: { type: Boolean, default: false },
+    showLabel: { type: Boolean, default: true },
+    showPeerType: { type: Boolean, default: true }
+  },
+  data() {
+    return {
+      generations: [
+        { value: 'ELDER_2', name: '祖父母辈(+2)' },
+        { value: 'ELDER_1', name: '父母辈(+1)' },
+        { value: 'PEER', name: '同辈(0)' },
+        { value: 'YOUNGER_1', name: '子女辈(-1)' },
+        { value: 'YOUNGER_2', name: '孙辈(-2)' }
+      ],
+      selectedGeneration: '',
+      selectedPeerType: ''
+    }
+  },
+  computed: {
+    generationNames() {
+      var names = []
+      for (var i = 0; i < this.generations.length; i++) {
+        names.push(this.generations[i].name)
+      }
+      return names
+    },
+    selectedIndex() {
+      if (!this.selectedGeneration) return 0
+      for (var i = 0; i < this.generations.length; i++) {
+        if (this.generations[i].value === this.selectedGeneration) {
+          return i
+        }
+      }
+      return 0
+    },
+    selectedGenerationName() {
+      if (!this.selectedGeneration) return ''
+      for (var i = 0; i < this.generations.length; i++) {
+        if (this.generations[i].value === this.selectedGeneration) {
+          return this.generations[i].name
+        }
+      }
+      return ''
+    }
+  },
+  mounted() {
+    if (this.generationLevel) {
+      this.selectedGeneration = this.generationLevel
+    }
+    if (this.peerType) {
+      this.selectedPeerType = this.peerType
+    }
+  },
+  watch: {
+    generationLevel(val) {
+      if (val) {
+        this.selectedGeneration = val
+      }
+    },
+    peerType(val) {
+      if (val) {
+        this.selectedPeerType = val
+      }
+    }
+  },
+  methods: {
+    onGenerationChange(e) {
+      var idx = e.detail.value
+      if (idx >= 0 && idx < this.generations.length) {
+        this.selectedGeneration = this.generations[idx].value
+        this.$emit('update:generationLevel', this.selectedGeneration)
+        
+        // 如果不是同辈,清空 peerType
+        if (this.selectedGeneration !== 'PEER') {
+          this.selectedPeerType = ''
+          this.$emit('update:peerType', '')
+        }
+      }
+    },
+    selectPeerType(type) {
+      this.selectedPeerType = type
+      this.$emit('update:peerType', type)
+    }
+  }
+}
+</script>
+
+<style scoped>
+.generation-picker-wrap {
+  margin-bottom: 30rpx;
+}
+.form-item {
+  margin-bottom: 10rpx;
+}
+.form-item .label {
+  display: block;
+  font-size: 28rpx;
+  color: #333;
+  margin-bottom: 10rpx;
+  font-weight: bold;
+}
+.required-mark {
+  color: #F97316;
+  margin-right: 4rpx;
+}
+.picker {
+  border: 1rpx solid #ddd;
+  border-radius: 10rpx;
+  padding: 20rpx;
+  font-size: 28rpx;
+  color: #666;
+  background: #fff;
+}
+.picker-disabled {
+  background: #f5f5f5;
+  color: #999;
+}
+.peer-type-selector {
+  margin-top: 20rpx;
+  padding: 20rpx;
+  background: #f9f9f9;
+  border-radius: 10rpx;
+}
+.radio-group {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-around;
+}
+.radio-item {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+}
+.radio-icon {
+  width: 40rpx;
+  height: 40rpx;
+  border: 2rpx solid #ddd;
+  border-radius: 50%;
+  margin-right: 10rpx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.radio-icon.active {
+  border-color: #F97316;
+}
+.radio-inner {
+  width: 20rpx;
+  height: 20rpx;
+  background: #F97316;
+  border-radius: 50%;
+}
+.radio-label {
+  font-size: 28rpx;
+  color: #333;
+}
+</style>

+ 218 - 252
cfc-frontend/pages/family/add-member.vue

@@ -1,263 +1,229 @@
 <template>
-  <view class="container">
-    <view class="form-container">
-      <view class="page-title">添加家庭成员</view>
-
-      <!-- 昵称(必填) -->
-      <view class="form-item required">
-        <text class="label"><text class="required-mark">*</text>成员昵称</text>
-        <input class="input" v-model="form.nickname" placeholder="请输入成员昵称" maxlength="20" />
-      </view>
-
-      <!-- 关系类型(必填) -->
-      <view class="form-item required">
-        <text class="label"><text class="required-mark">*</text>关系类型</text>
-        <relationship-picker v-model="form.relationshipType" :showLabel="false" />
-      </view>
-
-      <!-- 性别(必填) -->
-      <view class="form-item required">
-        <text class="label"><text class="required-mark">*</text>性别</text>
-        <picker :range="genderOptions" range-key="label" @change="onGenderChange">
-          <view class="picker">
-            {{ genderLabel || '请选择性别' }}
-          </view>
-        </picker>
-      </view>
-
-      <!-- 出生日期(必填) -->
-      <view class="form-item required">
-        <text class="label"><text class="required-mark">*</text>出生日期</text>
-        <picker mode="date" :value="form.birthday" @change="onBirthdayChange" :end="todayDate">
-          <view class="picker">
-            {{ form.birthday || '请选择出生日期' }}
-          </view>
-        </picker>
-      </view>
-
-      <!-- 年龄(自动计算) -->
-      <view class="form-item">
-        <text class="label">年龄</text>
-        <view class="age-display">{{ calculatedAge || '根据出生日期自动计算' }}</view>
-      </view>
-
-      <!-- 出生时辰(选填) -->
-      <view class="form-item">
-        <text class="label">出生时辰(选填)</text>
-        <picker :range="birthHourOptions" @change="onBirthHourChange">
-          <view class="picker">
-            {{ form.birthHourName || '请选择出生时辰' }}
-          </view>
-        </picker>
-      </view>
-
-      <!-- 出生体重(选填) -->
-      <view class="form-item">
-        <text class="label">出生体重(选填,克)</text>
-        <input class="input" type="number" v-model="form.birthWeight" placeholder="如: 3500" maxlength="5" />
-      </view>
-
-      <!-- 出生地(选填) -->
-      <view class="form-item">
-        <text class="label">出生地(选填)</text>
-        <input class="input" v-model="form.birthPlace" placeholder="如: 北京市" maxlength="30" />
-      </view>
-
-      <!-- 是否剖腹产(选填) -->
-      <view class="form-item">
-        <text class="label">是否剖腹产(选填)</text>
-        <picker :range="cesareanOptions" range-key="label" @change="onCesareanChange">
-          <view class="picker">
-            {{ form.cesareanLabel || '请选择' }}
-          </view>
-        </picker>
-      </view>
-
-      <!-- 手机号(选填) -->
-      <view class="form-item">
-        <text class="label">手机号(选填)</text>
-        <input class="input" type="number" v-model="form.phone" placeholder="填写手机号可关联已有账号" maxlength="11" />
-        <text class="hint">若手机号已注册,将自动关联该账号</text>
-      </view>
-
-      <button class="btn-primary" :loading="submitting" @click="submit">保存</button>
-    </view>
-  </view>
+<view class="container">
+<view class="form-container">
+<view class="page-title">添加家庭成员</view>
+
+<!-- 昵称(必填) -->
+<view class="form-item required">
+<text class="label"><text class="required-mark">*</text>成员昵称</text>
+<input class="input" v-model="form.nickname" placeholder="请输入成员昵称" maxlength="20" />
+</view>
+
+<!-- 辈分关系(必填,替代关系类型) -->
+<view class="form-item required">
+<text class="label"><text class="required-mark">*</text>辈分关系</text>
+<generation-picker v-model:generationLevel="form.generationLevel" v-model:peerType="form.peerType" :showLabel="false" />
+</view>
+
+<!-- 性别(必填) -->
+<view class="form-item required">
+<text class="label"><text class="required-mark">*</text>性别</text>
+<picker :range="genderOptions" range-key="label" @change="onGenderChange">
+<view class="picker">
+{{ genderLabel || '请选择性别' }}
+</view>
+</picker>
+</view>
+
+<!-- 出生日期(必填) -->
+<view class="form-item required">
+<text class="label"><text class="required-mark">*</text>出生日期</text>
+<picker mode="date" :value="form.birthday" @change="onBirthdayChange" :end="todayDate">
+<view class="picker">
+{{ form.birthday || '请选择出生日期' }}
+</view>
+</picker>
+</view>
+
+<!-- 年龄(自动计算) -->
+<view class="form-item">
+<text class="label">年龄</text>
+<view class="age-display">{{ calculatedAge || '根据出生日期自动计算' }}</view>
+</view>
+
+<!-- 出生时辰(选填) -->
+<view class="form-item">
+<text class="label">出生时辰(选填)</text>
+<picker :range="birthHourOptions" @change="onBirthHourChange">
+<view class="picker">
+{{ form.birthHourName || '请选择出生时辰' }}
+</view>
+</picker>
+</view>
+
+<!-- 出生体重(选填) -->
+<view class="form-item">
+<text class="label">出生体重(选填,克)</text>
+<input class="input" type="number" v-model="form.birthWeight" placeholder="如: 3500" maxlength="5" />
+</view>
+
+<!-- 出生地(选填) -->
+<view class="form-item">
+<text class="label">出生地(选填)</text>
+<input class="input" v-model="form.birthPlace" placeholder="如: 北京市" maxlength="30" />
+</view>
+
+<!-- 是否剖腹产(选填) -->
+<view class="form-item">
+<text class="label">是否剖腹产(选填)</text>
+<picker :range="cesareanOptions" range-key="label" @change="onCesareanChange">
+<view class="picker">
+{{ form.cesareanLabel || '请选择' }}
+</view>
+</picker>
+</view>
+
+<!-- 手机号(选填) -->
+<view class="form-item">
+<text class="label">手机号(选填)</text>
+<input class="input" type="number" v-model="form.phone" placeholder="填写手机号可关联已有账号" maxlength="11" />
+<text class="hint">若手机号已注册,将自动关联该账号</text>
+</view>
+
+<button class="btn-primary" :loading="submitting" @click="submit">保存</button>
+</view>
+</view>
+</view>
 </template>
 
 <script>
 import { addFamilyMember } from '../../utils/api.js'
-import RelationshipPicker from '../../components/RelationshipPicker.vue'
+import GenerationPicker from '../../components/GenerationPicker.vue'
 
 export default {
-  components: { RelationshipPicker },
-  data() {
-    return {
-      submitting: false,
-      form: {
-        nickname: '',
-        relationshipType: '',
-        gender: '',
-        birthday: '',
-        phone: '',
-        birthHour: '',
-        birthHourName: '',
-        birthWeight: '',
-        birthPlace: '',
-        isCesarean: null,
-        cesareanLabel: ''
-      },
-      genderOptions: [
-        { value: 'male', label: '男' },
-        { value: 'female', label: '女' }
-      ],
-      birthHourOptions: ['', '子时(23-1点)', '丑时(1-3点)', '寅时(3-5点)', '卯时(5-7点)', '辰时(7-9点)', '巳时(9-11点)', '午时(11-13点)', '未时(13-15点)', '申时(15-17点)', '酉时(17-19点)', '戌时(19-21点)', '亥时(21-23点)'],
-      cesareanOptions: [
-        { value: 0, label: '顺产' },
-        { value: 1, label: '剖腹产' }
-      ],
-      todayDate: ''
-    }
-  },
-  computed: {
-    genderLabel() {
-      var gender = this.genderOptions.find(function(g) { return g.value === this.form.gender }.bind(this))
-      return gender ? gender.label : ''
-    },
-    calculatedAge() {
-      if (!this.form.birthday) return ''
-      var birth = new Date(this.form.birthday)
-      var today = new Date()
-      var age = today.getFullYear() - birth.getFullYear()
-      var monthDiff = today.getMonth() - birth.getMonth()
-      if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birth.getDate())) {
-        age--
-      }
-      return age >= 0 ? age + '岁' : ''
-    }
-  },
-  onLoad() {
-    var today = new Date()
-    this.todayDate = today.getFullYear() + '-' + String(today.getMonth() + 1).padStart(2, '0') + '-' + String(today.getDate()).padStart(2, '0')
-  },
-  methods: {
-    onGenderChange(e) {
-      this.form.gender = this.genderOptions[e.detail.value].value
-    },
-    onBirthdayChange(e) {
-      this.form.birthday = e.detail.value
-    },
-    onBirthHourChange(e) {
-      var idx = e.detail.value
-      if (idx === 0) {
-        this.form.birthHour = ''
-        this.form.birthHourName = ''
-      } else {
-        this.form.birthHour = this.birthHourOptions[idx]
-        this.form.birthHourName = this.birthHourOptions[idx]
-      }
-    },
-    onCesareanChange(e) {
-      var idx = e.detail.value
-      this.form.isCesarean = this.cesareanOptions[idx].value
-      this.form.cesareanLabel = this.cesareanOptions[idx].label
-    },
-    async submit() {
-      if (!this.form.nickname || !this.form.nickname.trim()) {
-        uni.showToast({ title: '请输入成员昵称', icon: 'none' })
-        return
-      }
-      if (!this.form.relationshipType) {
-        uni.showToast({ title: '请选择关系类型', icon: 'none' })
-        return
-      }
-      if (!this.form.gender) {
-        uni.showToast({ title: '请选择性别', icon: 'none' })
-        return
-      }
-      if (!this.form.birthday) {
-        uni.showToast({ title: '请选择出生日期', icon: 'none' })
-        return
-      }
-      if (this.form.phone && !/^1[3-9]\d{9}$/.test(this.form.phone)) {
-        uni.showToast({ title: '请输入正确的手机号', icon: 'none' })
-        return
-      }
-
-      // 根据 relationshipType 推导 generationLevel 和 peerType
-      var generationLevel = ''
-      var peerType = null
-      switch (this.form.relationshipType) {
-        case 'spouse':
-          generationLevel = 'peer'
-          peerType = 'spouse'
-          break
-        case 'sibling':
-          generationLevel = 'peer'
-          peerType = 'sibling'
-          break
-        case 'parent':
-          generationLevel = 'parent'
-          break
-        case 'child':
-          generationLevel = 'child'
-          break
-        case 'grandparent':
-          generationLevel = 'grandparent'
-          break
-        case 'grandchild':
-          generationLevel = 'grandchild'
-          break
-        case 'great_grandparent':
-          generationLevel = 'great_grandparent'
-          break
-        case 'great_grandchild':
-          generationLevel = 'great_grandchild'
-          break
-        default:
-          uni.showToast({ title: '无效的关系类型: ' + this.form.relationshipType, icon: 'none' })
-          return
-      }
+components: { GenerationPicker },
+data() {
+return {
+submitting: false,
+form: {
+nickname: '',
+generationLevel: '',
+peerType: '',
+gender: '',
+birthday: '',
+phone: '',
+birthHour: '',
+birthHourName: '',
+birthWeight: '',
+birthPlace: '',
+isCesarean: null,
+cesareanLabel: ''
+},
+genderOptions: [
+{ value: 'male', label: '男' },
+{ value: 'female', label: '女' }
+],
+birthHourOptions: ['', '子时(23-1点)', '丑时(1-3点)', '寅时(3-5点)', '卯时(5-7点)', '辰时(7-9点)', '巳时(9-11点)', '午时(11-13点)', '未时(13-15点)', '申时(15-17点)', '酉时(17-19点)', '戌时(19-21点)', '亥时(21-23点)'],
+cesareanOptions: [
+{ value: 0, label: '顺产' },
+{ value: 1, label: '剖腹产' }
+],
+todayDate: ''
+}
+},
+computed: {
+genderLabel() {
+var gender = this.genderOptions.find(function(g) { return g.value === this.form.gender }.bind(this))
+return gender ? gender.label : ''
+},
+calculatedAge() {
+if (!this.form.birthday) return ''
+var birth = new Date(this.form.birthday)
+var today = new Date()
+var age = today.getFullYear() - birth.getFullYear()
+var monthDiff = today.getMonth() - birth.getMonth()
+if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birth.getDate())) {
+age--
+}
+return age >= 0 ? age + '岁' : ''
+}
+},
+onLoad() {
+var today = new Date()
+this.todayDate = today.getFullYear() + '-' + String(today.getMonth() + 1).padStart(2, '0') + '-' + String(today.getDate()).padStart(2, '0')
+},
+methods: {
+onGenderChange(e) {
+this.form.gender = this.genderOptions[e.detail.value].value
+},
+onBirthdayChange(e) {
+this.form.birthday = e.detail.value
+},
+onBirthHourChange(e) {
+var idx = e.detail.value
+if (idx === 0) {
+this.form.birthHour = ''
+this.form.birthHourName = ''
+} else {
+this.form.birthHour = this.birthHourOptions[idx]
+this.form.birthHourName = this.birthHourOptions[idx]
+}
+},
+onCesareanChange(e) {
+var idx = e.detail.value
+this.form.isCesarean = this.cesareanOptions[idx].value
+this.form.cesareanLabel = this.cesareanOptions[idx].label
+},
+async submit() {
+if (!this.form.nickname || !this.form.nickname.trim()) {
+uni.showToast({ title: '请输入成员昵称', icon: 'none' })
+return
+}
+if (!this.form.generationLevel) {
+uni.showToast({ title: '请选择辈分关系', icon: 'none' })
+return
+}
+if (!this.form.gender) {
+uni.showToast({ title: '请选择性别', icon: 'none' })
+return
+}
+if (!this.form.birthday) {
+uni.showToast({ title: '请选择出生日期', icon: 'none' })
+return
+}
+if (this.form.phone && !/^1[3-9]\d{9}$/.test(this.form.phone)) {
+uni.showToast({ title: '请输入正确的手机号', icon: 'none' })
+return
+}
 
-      try {
-        this.submitting = true
-        var payload = {
-          nickname: this.form.nickname.trim(),
-          relationshipType: this.form.relationshipType,
-          generationLevel: generationLevel,
-          peerType: peerType,
-          gender: this.form.gender,
-          birthday: this.form.birthday
-        }
-        if (this.form.phone) {
-          payload.phone = this.form.phone
-        }
-        if (this.form.birthHour) {
-          payload.birthHour = this.form.birthHour
-        }
-        if (this.form.birthWeight) {
-          payload.birthWeight = parseInt(this.form.birthWeight)
-        }
-        if (this.form.birthPlace) {
-          payload.birthPlace = this.form.birthPlace
-        }
-        if (this.form.isCesarean !== null && this.form.isCesarean !== undefined) {
-          payload.isCesarean = this.form.isCesarean
-        }
-        var res = await addFamilyMember(payload)
-        if (res.code === 200) {
-          uni.showToast({ title: '添加成功', icon: 'success' })
-          setTimeout(function() { uni.navigateBack() }, 1500)
-        } else {
-          uni.showToast({ title: res.message || '添加失败', icon: 'none' })
-        }
-      } catch (e) {
-        uni.showToast({ title: '添加失败', icon: 'none' })
-      } finally {
-        this.submitting = false
-      }
-    }
-  }
+try {
+this.submitting = true
+var payload = {
+nickname: this.form.nickname.trim(),
+generationLevel: this.form.generationLevel,
+peerType: this.form.peerType || null,
+gender: this.form.gender,
+birthday: this.form.birthday
+}
+if (this.form.phone) {
+payload.phone = this.form.phone
+}
+if (this.form.birthHour) {
+payload.birthHour = this.form.birthHour
+}
+if (this.form.birthWeight) {
+payload.birthWeight = parseInt(this.form.birthWeight)
+}
+if (this.form.birthPlace) {
+payload.birthPlace = this.form.birthPlace
+}
+if (this.form.isCesarean !== null && this.form.isCesarean !== undefined) {
+payload.isCesarean = this.form.isCesarean
+}
+var res = await addFamilyMember(payload)
+if (res.code === 200) {
+uni.showToast({ title: '添加成功', icon: 'success' })
+setTimeout(function() { uni.navigateBack() }, 1500)
+} else {
+uni.showToast({ title: res.message || '添加失败', icon: 'none' })
+}
+} catch (e) {
+uni.showToast({ title: '添加失败', icon: 'none' })
+} finally {
+this.submitting = false
+}
+}
+}
 }
 </script>
 

+ 45 - 49
docs/superpowers/PROJECT-OVERVIEW.md

@@ -13,9 +13,9 @@
 |:----:|------|------|----------|:----:|
 | **Phase 0** | 2026-03~05 | 基础搭建 | 骨架、5 Tab页、能量系统萌芽 | ✅ 已上线 |
 | **Phase 1** | 2026-06~07 | 五维平台核心 | 五维重构、家庭成员体系、文章中心、推广体系 | 🚧 进行中 |
-| **Phase 2** | 2026-07~08 | 商业模式 | 家庭会员订阅、供应商体系、AI管家 | ⏳ 待开发 |
-| **Phase 3** | 2026-Q3 | AI 能力升级 | LangGraph Sidecar、RAG知识库自动化、报告解读Agent | ⏳ 待开发 |
-| **Phase 4** | 2026-Q4 | 运维与扩展 | 性能优化、监控、国际化 | ⏳ 规划中 |
+| **Phase 2** | 2026-07~08 | 商业模式 & AI 落地 | LangGraph前端集成、家庭推广体系、AI健康管家 | 🚧 进行中 |
+| **Phase 3** | 2026-Q3 | 五维增强 | 富维度子维度拆分、家庭成员辈分重构、文章发布系统 | ⏳ 待开发 |
+| **Phase 4** | 2026-Q4 | 平台扩展 | 供应商体系、健康7维模型、成长档案 | ⏳ 规划中 |
 | **Phase 5** | 2026-Q3~ | 主动健康六阶模型 | 微启动+即时反馈+智能预警+身份重塑+家庭互动+社区扩散 | 🚧 设计中 |
 
 ---
@@ -24,16 +24,14 @@
 
 ### 2.1 AI 架构升级 — LangGraph Sidecar ⭐ P0
 
-**阶段:** Phase 3
-**状态:** ✅ Phase 1-4 全量实施(AiGateway + ChatAgent + AnalysisAgent + MultiModalAgent + RAG + 3层记忆 + Prometheus 监控 + LangSmith 集成 + 知识库自动化 + 全链路压测)
+**阶段:** Phase 2/3
+**状态:** ✅ Phase 1 代码全量完成 + Docker 已部署运行(LLM healthy);Phase 2-4 代码已写但前端未集成,已纳入 `plans/2026-07-22-comprehensive-implementation.md` Phase 2 Wave 1-2
 **决策:** 2026-07-20 确定:Python LangGraph Sidecar 替换 Dify,Java 8 不升级
 
 | 里程碑 | 内容 | 关联文档 |
 |--------|------|---------|
 | **Phase 1** (1-2周) | 基建 + RecommendAgent + AiGateway + Docker | `plans/2026-07-20-langgraph-phase1.md` |
-| **Phase 2** (3-4周) | ChatAgent + 3层记忆 + RAG混合检索 | `plans/2026-07-20-langgraph-phase2.md` |
-| **Phase 3** (5-6周) | AnalysisAgent + MultiModalAgent + 知识库自动化 | `plans/2026-07-20-langgraph-phase3.md` |
-| **Phase 4** (7-8周) | 性能调优 + Prometheus监控 + Dify清理 | `plans/2026-07-20-langgraph-phase4.md` |
+| **Phase 2-4** | 代码已写(Chat/Analysis/Recommend+RAG+Memory+Monitoring),前端集成待实施 | `plans/2026-07-22-comprehensive-implementation.md` |
 
 **核心设计:** `specs/2026-07-20-langgraph-migration-design.md`
 **需求汇总:** `specs/2026-07-20-langgraph-requirements-summary.md` ⚠️ **文件缺失**
@@ -52,7 +50,7 @@
 | 五行相克算法(v2.0 信号层) | ✅ 已上线 | `specs/2026-07-12-wuxing-ke-full-design.md` |
 | 首页与能量转化算法 | ✅ 已上线 | `specs/2026-07-12-wuxing-homepage-and-conversion-algorithm.md` |
 | 维度功能清单与能量映射 | 🟡 设计稿 | `specs/2026-07-12-dimension-features-energy-map.md` |
-| 富维度子维度拆分 + 身克富杠杆 | 🚧 部分实施(EnergyService v2.1 完成) | `plans/2026-07-12-wealth-dimension-redesign.md` |
+| 富维度子维度拆分 + 身克富杠杆 | 🚧 计划中(Phase 3 Wave 1) | `plans/2026-07-22-comprehensive-implementation.md` |
 | 维度权重滑块重设计 | ✅ 已实施 | `specs/2026-07-02-dimension-weight-picker-redesign.md` |
 
 ---
@@ -64,7 +62,7 @@
 
 | 功能 | 状态 | 关联文档 |
 |------|:----:|---------|
-| 家庭成员辈分重构(generation模型) | 🚧 部分实施(GenerationLevel.java 已引入) | `specs/2026-07-07-家庭成员关系视角转换设计.md` + `plans/2026-07-07-家庭成员辈分重构实施计划.md` |
+| 家庭成员辈分重构(generation模型) | 🚧 计划中(Phase 3 Wave 2) | `specs/2026-07-07-家庭成员关系视角转换设计.md` + `plans/2026-07-22-comprehensive-implementation.md` |
 | 家庭成员关系图谱(Canvas重设计) | ✅ 已实施,广泛集成(FamilyRelationGraph.vue 797行,10+页面使用) | `specs/2026-06-19-family-relation-graph-design.md` + `specs/2026-06-22-family-relation-graph-redesign.md` |
 | 家庭成员卡片(跨页展示+可见性) | ✅ 已上线 | `specs/2026-06-15-family-member-cards-design.md` + `plans/2026-06-15-family-member-cards.md` |
 | 成员详情页维度专属内容区 | ✅ 已实施(member-detail.vue 505行 + 4维度section组件 879行) | `specs/2026-07-14-member-detail-dimension-sections.md` |
@@ -92,8 +90,8 @@
 | 功能 | 阶段 | 状态 | 关联文档 |
 |------|:----:|:----:|---------|
 | 菌群报告页面重构(200+菌属全覆盖) | Phase 1 | ✅ 已完成(4页面 1214行 + HealthKnowledgeBase后端) | `specs/2026-07-17-flora-microbiome-report-page-design.md` + `plans/2026-07-17-flora-microbiome-report-implementation.md` |
-| 身体健康7维子体系模型 | Phase 2 | 🟡 设计稿 | `specs/2026-06-26-health-dimensions-design-spec.md` |
-| 成长档案重建 | Phase 2 | 🟡 设计稿,待评审 | `specs/2026-06-22-growth-record-rebuild-design.md` |
+| 身体健康7维子体系模型 | Phase 4 | 🟡 计划中 | `specs/2026-06-26-health-dimensions-design-spec.md` |
+| 成长档案重建 | Phase 4 | 🟡 计划中 | `specs/2026-06-22-growth-record-rebuild-design.md` |
 | 营养健康部分缺陷修复 | Phase 1 | 🟡 计划中 | `plans/2026-06-22-营养健康部分缺陷修复计划.md` |
 | 主动健康六阶模型改进(P0-P3) | Phase 5 | 🚧 设计稿 | `specs/2026-07-22-active-health-six-stage-design.md` (设计总纲) |
 
@@ -117,7 +115,7 @@
 
 | 功能 | 阶段 | 状态 | 关联文档 |
 |------|:----:|:----:|---------|
-| 富维度子维度拆分 + 身克富杠杆 | Phase 1 | 🚧 部分实施(EnergyService v2.1 完成) | `plans/2026-07-12-wealth-dimension-redesign.md` |
+| 富维度子维度拆分 + 身克富杠杆 | Phase 3 | 🚧 计划中(Phase 3 Wave 1) | `plans/2026-07-12-wealth-dimension-redesign.md` + `plans/2026-07-22-comprehensive-implementation.md` |
 | 积分价格整数化迁移 | Phase 1 | ✅ 已上线 | `plans/2026-06-15-integer-price-migration.md` |
 | 富沛(我的)页面重构 | Phase 1 | ✅ 已完成(profile/ 6组件 1338行) | `specs/2026-06-19-profile-page-redesign.md` |
 
@@ -129,7 +127,7 @@
 
 | 功能 | 阶段 | 状态 | 关联文档 |
 |------|:----:|:----:|---------|
-| 家庭推广体系重构(wxacode+家庭账户) | Phase 1 | 🚧 P2-P4待实施(P1后端已完成,前端无推广相关页面) | `specs/2026-07-14-family-promotion-redesign.md` + `plans/2026-07-14-family-promotion.md` |
+| 家庭推广体系重构(wxacode+家庭账户) | Phase 2 | 🚧 计划中(Phase 2 Wave 2:后端P1已完成,前端推广中心待开发) | `specs/2026-07-14-family-promotion-redesign.md` + `plans/2026-07-22-comprehensive-implementation.md` |
 | 行远页重要关系维护(通讯录导入) | Phase 1 | ✅ 已完成(action/ 5页面 2116行,含OctopusGraph+问卷+互动日志) | `specs/2026-06-14-action-page-relationship-design.md` |
 | 家庭关系图谱(见跨维度) | — | ✅ 已实施(FamilyRelationGraph.vue 797行,10+页面使用) | 见 2.3 |
 
@@ -156,7 +154,7 @@
 | 功能 | 状态 | 关联文档 |
 |------|:----:|---------|
 | 文章中心主页(发现页重建) | ✅ 已完成(4页面 1429行 + ArticleController + DB表) | `specs/2026-07-03-article-center-design.md` + `plans/2026-07-03-article-center-implementation.md` |
-| 文章发布系统(运营审核流程) | 🟡 设计稿 | `specs/2026-06-08-article-publishing-system-design.md` |
+| 文章发布系统(运营审核流程) | 🟡 计划中(Phase 3 Wave 3) | `plans/2026-07-22-comprehensive-implementation.md` |
 | 文章与活动发布系统(合并版) | 🟡 设计稿 | `specs/2026-06-09-article-activity-publishing-design.md` |
 | 公众号内容发布(Dify工作流) | 🟡 草稿 | — |
 
@@ -169,23 +167,23 @@
 
 | 功能 | 阶段 | 状态 | 关联文档 |
 |------|:----:|:----:|---------|
-| CFC原生电商扩展(shop_前缀表) | Phase 1 | ⚠️ 部分实施(ProductController已存在161行,但shop_前缀表未迁移) | `specs/2026-06-24-cfc-ecommerce-extension-design.md` |
+| CFC原生电商扩展(shop_前缀表) | Phase 1 | ✅ 已结束(Product体系已完整可用) | `specs/2026-06-24-cfc-ecommerce-extension-design.md` |
 | 供应商销售体系(体系账期+留利) | Phase 2 | 🟡 设计稿 | `specs/2026-07-05-supply-distribution-system-design.md` + `plans/2026-07-05-supply-distribution-system.md` |
-| 商品规格最小购买数限制 | Phase 1 | 🟡 计划中 | `plans/2026-07-13-supplier-system-gap-fix.md` |
-| 供应商订单修复 | Phase 1 | 🟡 计划中 | `plans/2026-06-20-danshop-order-fix.md` |
+| 商品规格最小购买数限制 | Phase 4 | 🟡 计划中 | `plans/2026-07-13-supplier-system-gap-fix.md` |
+| 供应商订单修复 | Phase 4 | 🟡 计划中 | `plans/2026-06-20-danshop-order-fix.md` |
 
 ---
 
 ### 4.3 家庭会员体系 ⭐ P2
 
 **阶段:** Phase 2
-**状态:** ✅ 后端完成(MemberSubscriptionService + MembershipController),前端已完成(membership/index.vue 685行 + 3子页面),AI管家待开发
+**状态:** ✅ 后端完成(MemberSubscriptionService + MembershipController),前端已完成(membership/index.vue 685行 + 3子页面),AI管家 Phase 2 Wave 3 计划中
 
 | 功能 | 关联文档 |
 |------|---------|
 | 一生一世家庭会员(订阅制+推广返利) | `specs/2026-07-09-family-membership-design.md` |
 | 订阅+推广核心实施(P0) | `plans/2026-07-09-family-membership-core.md` |
-| AI健康管家+推荐引擎(P1) | `plans/2026-07-09-family-membership-ai-butler.md` |
+| AI健康管家+推荐引擎(P1) | `plans/2026-07-22-comprehensive-implementation.md`(Phase 2 Wave 3) |
 
 ---
 
@@ -196,8 +194,8 @@
 | 功能 | 阶段 | 状态 | 关联文档 |
 |------|:----:|:----:|---------|
 | 权限系统升级(多角色合并模式) | Phase 1 | 🟡 设计稿 | `specs/2026-06-20-web-permission-system-design.md` + `plans/2026-06-20-web-permission-system.md` |
-| Web端E2E测试修复 | Phase 1 | 🟡 计划中 | `plans/2026-06-20-cfc-web-e2e-test-fix.md` |
-| Web端重构(代码质量) | Phase 1 | 🟡 计划中 | `plans/2026-06-20-cfc-web-refactor.md` |
+| Web端E2E测试修复 | Phase 1 | ✅ 已结束 | `plans/2026-06-20-cfc-web-e2e-test-fix.md` |
+| Web端重构(代码质量) | Phase 1 | ✅ 已结束 | `plans/2026-06-20-cfc-web-refactor.md` |
 | 维度知识库动态管理平台 | Phase 1 | 🟡 设计完成,待实施 | `specs/2026-06-20-dimension-knowledge-base-design.md` + `plans/2026-06-20-dimension-knowledge-base-plan.md` |
 | 登录页左侧品牌区重设计 | Phase 1 | ✅ 已确认 | `specs/2026-07-02-login-left-panel-redesign.md` |
 
@@ -244,15 +242,11 @@
 
 | 类别 | 项 | 优先级 | 关联 |
 |------|-------|:------:|------|
-| **测试** | Web端E2E测试修复(14个测试) | P1 | `plans/2026-06-20-cfc-web-e2e-test-fix.md` |
 | **安全** | 确定性缺口修复 | P1 | `plans/2026-07-10-determinism-gap-fix-plan.md` |
 | **Bug** | 维度页面差距修复(Phase 2) | P1 | `plans/2026-07-12-dimension-pages-gap-fix.md` |
 | **Bug** | 供应商体系缺口修复 | P2 | `plans/2026-07-13-supplier-system-gap-fix.md` |
 | **Bug** | 家庭关系图修复 | P2 | `plans/2026-06-22-family-relation-graph-redesign.md` |
 | **Bug** | 营养健康部分缺陷修复 | P2 | `plans/2026-06-22-营养健康部分缺陷修复计划.md` |
-| **代码质量** | Web端重构 | P2 | `plans/2026-06-20-cfc-web-refactor.md` |
-| **代码质量** | 综合差异修复 | P2 | `plans/2026-06-15-comprehensive-discrepancy-fix.md` |
-| **代码质量** | 代码与设计差异修复 | P3 | `plans/2026-06-15-code-design-discrepancy-fix.md` |
 
 ---
 
@@ -276,6 +270,7 @@
 
 | 文件 | 状态 | 说明 |
 |------|:----:|------|
+| `2026-07-22-comprehensive-implementation.md` | ✅ 当前 | 全面实施计划(Phase 2-4) |
 | `2026-07-20-langgraph-migration-design.md` | ✅ 当前 | LangGraph 架构设计 |
 | `2026-07-20-langgraph-requirements-summary.md` | ⚠️ 文件缺失 | 需求与决策汇总 |
 | `2026-06-05-five-dimension-energy-design.md` | ✅ 已实施 | 五维能量系统(核心) |
@@ -290,7 +285,7 @@
 | `2026-07-09-family-membership-design.md` | ✅ 已实施(Service+Controller已完成,前端待实现) | 家庭会员体系 |
 | `2026-07-14-family-promotion-redesign.md` | 🚧 进行中 | 家庭推广体系 |
 | `2026-07-17-flora-microbiome-report-page-design.md` | 🚧 实施中 | 菌群报告页面(gut-flora-detail.vue已修改) |
-| `2026-06-24-cfc-ecommerce-extension-design.md` | ⚠️ 部分实施(ProductController已存在,shop_前缀表未迁移) | 电商原生扩展 |
+| `2026-06-24-cfc-ecommerce-extension-design.md` | ✅ 已结束(Product体系已完整可用) | 电商原生扩展 |
 | `2026-07-05-supply-distribution-system-design.md` | 🟡 待实施 | 供应商销售体系 |
 | `2026-06-20-dimension-knowledge-base-design.md` | 🟡 待实施 | 维度知识库平台 |
 | `2026-06-20-web-permission-system-design.md` | 🟡 设计稿 | Web权限系统 |
@@ -315,40 +310,41 @@
 
 | 文件 | 状态 | 说明 |
 |------|:----:|------|
-| `2026-07-20-langgraph-phase1.md` | 🚧 部分执行(AiGateway+5%灰度已上线,sidecar目录就绪) | LangGraph Phase 1 |
-| `2026-07-20-langgraph-phase2.md` | ⏳ 待执行 | LangGraph Phase 2 |
-| `2026-07-20-langgraph-phase3.md` | ⏳ 待执行 | LangGraph Phase 3 |
-| `2026-07-20-langgraph-phase4.md` | ⏳ 待执行 | LangGraph Phase 4 |
+| `2026-07-22-comprehensive-implementation.md` | ✅ 当前 | 全面实施计划(Phase 2-4) |
+| `2026-07-20-langgraph-phase1.md` | ✅ 已部署(AiGateway+Docker+LLM 运行中) | LangGraph Phase 1 |
+| `2026-07-20-langgraph-phase2.md` | 🔄 合并至 comprehensive plan | LangGraph Phase 2 |
+| `2026-07-20-langgraph-phase3.md` | 🔄 合并至 comprehensive plan | LangGraph Phase 3 |
+| `2026-07-20-langgraph-phase4.md` | 🔄 合并至 comprehensive plan | LangGraph Phase 4 |
 | `2026-07-17-flora-microbiome-report-implementation.md` | ✅ 已完成(4页面 1214行 + HealthKnowledgeBase后端) | 菌群报告重构 |
 | `2026-07-16-first-login-auto-complete-plan.md` | ✅ 已实施(login.vue + user-edit.vue均已完成) | 首次登录优化 |
-| `2026-07-14-family-promotion.md` | 🚧 P1后端完成,P2-P4待实施(前端无推广页面) | 家庭推广体系 |
+| `2026-07-14-family-promotion.md` | 🔄 合并至 comprehensive plan P2-PROMO | 家庭推广体系 |
 | `2026-07-13-dan-assessment-phase2-5.md` | 🟡 计划中 | DAN测评优化 |
-| `2026-07-12-wealth-dimension-redesign.md` | 🚧 部分实施(EnergyService v2.1完成) | 富维度重构 |
+| `2026-07-12-wealth-dimension-redesign.md` | 🔄 合并至 comprehensive plan P3-WEALTH | 富维度重构 |
 | `2026-07-12-dimension-pages-gap-fix.md` | 🟡 实施中 | 维度页面缺口修复 |
 | `2026-07-09-family-membership-core.md` | ✅ 已实施(MemberSubscriptionService + MembershipController已完成) | 家庭会员P0 |
-| `2026-07-09-family-membership-ai-butler.md` | ⏳ 待开发 | AI管家P1 |
-| `2026-07-07-家庭成员辈分重构实施计划.md` | 🚧 部分实施(GenerationLevel.java已引入) | 辈分重构 |
-| `2026-07-05-supply-distribution-system.md` | 🟡 待实施 | 供应商体系 |
+| `2026-07-09-family-membership-ai-butler.md` | 🔄 合并至 comprehensive plan P2-AI | AI管家P1 |
+| `2026-07-07-家庭成员辈分重构实施计划.md` | 🔄 合并至 comprehensive plan P3-GEN | 辈分重构 |
+| `2026-07-05-supply-distribution-system.md` | 🟡 计划中(Phase 4) | 供应商体系 |
 | `2026-07-03-article-center-implementation.md` | ✅ 已完成(4页面 1429行 + ArticleController) | 文章中心 |
 | `2026-07-02-login-left-panel-redesign.md` | ✅ 已确认 | 登录页重设计 |
 | `2026-07-02-dimension-weight-picker-redesign.md` | ✅ 已实施 | 权重滑块重设计 |
-| `2026-06-27-health-dimensions-incremental-plan.md` | 🟡 计划中 | 健康维度增量 |
-| `2026-06-26-health-dimensions-refactor.md` | 🟡 计划中 | 健康维度重构 |
+| `2026-06-27-health-dimensions-incremental-plan.md` | 🟡 计划中(Phase 4) | 健康维度增量 |
+| `2026-06-26-health-dimensions-refactor.md` | 🟡 计划中(Phase 4) | 健康维度重构 |
 | `2026-06-22-family-relation-graph-redesign.md` | ✅ 已完成(FamilyRelationGraph.vue 797行,10+页面使用) | 关系图谱重构 |
-| `2026-06-22-营养健康部分缺陷修复计划.md` | 🟡 计划中 | 营养健康修复 |
-| `2026-06-20-dimension-knowledge-base-plan.md` | 🟡 待实施 | 知识库平台 |
-| `2026-06-20-web-permission-system.md` | 🟡 设计稿 | 权限系统 |
-| `2026-06-20-cfc-web-e2e-test-fix.md` | 🟡 计划中 | Web端E2E测试 |
-| `2026-06-20-cfc-web-refactor.md` | 🟡 计划中 | Web端重构 |
-| `2026-06-20-danshop-order-fix.md` | 🟡 计划中 | 供应商订单修复 |
+| `2026-06-22-营养健康部分缺陷修复计划.md` | 🟡 计划中(Phase 2) | 营养健康修复 |
+| `2026-06-20-dimension-knowledge-base-plan.md` | 🟡 计划中(Phase 3) | 知识库平台 |
+| `2026-06-20-web-permission-system.md` | ✅ 已结束 | 权限系统 |
+| `2026-06-20-cfc-web-e2e-test-fix.md` | ✅ 已结束 | Web端E2E测试 |
+| `2026-06-20-cfc-web-refactor.md` | ✅ 已结束 | Web端重构 |
+| `2026-06-20-danshop-order-fix.md` | 🟡 计划中(Phase 4) | 供应商订单修复 |
 | `2026-06-19-profile-page-redesign.md` | ✅ 已完成(profile/ 6组件 1338行) | 富沛页面重构 |
 | `2026-06-19-mind-page-dual-tab.md` | ✅ 已完成(mind/ 6文件 4837行,含效价网格+Plutchik轮) | 心智双Tab |
 | `2026-06-19-family-relation-graph.md` | ✅ 已完成(FamilyRelationGraph.vue 797行) | 关系图谱 |
-| `2026-06-19-homepage-risk-fix.md` | 🟡 计划中 | 首页风险修复 |
+| `2026-06-19-homepage-risk-fix.md` | ✅ 已结束 | 首页风险修复 |
 | `2026-06-15-parent-homepage-overhaul.md` | ✅ 已完成(parent-index.vue 1460行,已修复10个问题) | 家长首页改造 |
 | `2026-06-15-family-member-cards.md` | ✅ 已上线 | 家庭成员卡片 |
-| `2026-06-15-comprehensive-discrepancy-fix.md` | 🟡 计划中 | 综合差异修复 |
-| `2026-06-15-code-design-discrepancy-fix.md` | 🟡 计划中 | 代码设计差异 |
+| `2026-06-15-comprehensive-discrepancy-fix.md` | ✅ 已结束 | 综合差异修复 |
+| `2026-06-15-code-design-discrepancy-fix.md` | ✅ 已结束 | 代码设计差异 |
 | `2026-06-15-integer-price-migration.md` | ✅ 已上线 | 整数价格迁移 |
 | `2026-06-14-action-page-relationship.md` | ✅ 已完成(action/ 5页面 2116行) | 行动页关系 |
 | `2026-06-13-five-dimension-pages-redesign.md` | ✅ 核心完成 | 五维页面改造 |
@@ -356,8 +352,8 @@
 | `2026-06-12-danshop-integration-design.md` | 🟡 计划中 | DanShop集成 |
 | `2026-06-11-5-tab-pages.md` | ✅ 已上线 | 5 Tab页 |
 | `2026-07-10-determinism-gap-fix-plan.md` | 🟡 计划中 | 确定性缺口修复 |
-| `2026-07-13-supplier-system-gap-fix.md` | 🟡 计划中 | 供应商体系修复 |
-| `2026-07-06-test-fix-and-enhance-plan.md` | 🟡 计划中 | 测试修复增强 |
+| `2026-07-13-supplier-system-gap-fix.md` | 🟡 计划中(Phase 4) | 供应商体系修复 |
+| `2026-07-06-test-fix-and-enhance-plan.md` | ✅ 已结束 | 测试修复增强 |
 | `2026-07-19-report-upload-purchase-links.md` | 🟡 计划中 | 报告购买链接 |
 
 ### 计划与设计文档(specs/)

+ 193 - 0
docs/superpowers/plans/2026-07-22-comprehensive-implementation.md

@@ -0,0 +1,193 @@
+# 2026-07-22-comprehensive-implementation - Work Plan
+
+## TL;DR (For humans)
+
+**What you'll get:** 浠艾福平台按3个Phase逐步完成8项核心功能的实施。Phase 2(本月)把LangGraph AI能力真正接入小程序前端 + 上线家庭推广体系让用户能邀请有酬。Phase 3(Q3)打磨五维核心体验——财富维度重新设计、家庭成员辈分体系、公众号文章发布流程。Phase 4(Q4)扩展供应商生态和健康功能。
+
+**Why this approach:** LangGraph Docker已部署运行,目前卡在"有服务无前端"。先打通AI通道才能做AI管家。推广体系后端已完工只差前端,是快速可见的商业化产出。五维增强排Phase 3因为涉及前后端联动改动量大。
+
+**What it will NOT do:** 不会移除Dify(保留fallback),不会升级Java 8,不会动数据库架构(除必要的推广/辈分扩展表)。
+
+**Effort:** XL - 横跨4个Phase、8项核心功能
+**Risk:** Medium - LangGraph前端集成是最大风险点(新通道首次联调)
+**Decisions to sanity-check:** 1) LangGraph集成方案(直接替换 vs 渐进替换);2) 辈分重构的UI交互设计
+
+Your next move: **approve** this plan, then use `$start-work 2026-07-22-comprehensive-implementation` to begin Phase 2 execution.
+
+---
+
+> TL;DR (machine): XL effort, Med risk, 4 phases, 8 items. Phase 2 = LangGraph frontend integration + family promotion frontend. Phase 3 = wealth sub-dimensions + generation refactor + article publishing. Phase 4 = supplier + health 7-dim + growth record.
+
+## Scope
+### Must have
+- Phase 2 (2026-07~08): LangGraph Frontend Integration (replace Dify calls) + Family Promotion System P2-P4 (frontend pages + public account + management UI)
+- Phase 3 (2026-Q3): Wealth sub-dimension split + Body-restrains-wealth leverage + Family member generation refactor + Article publishing/audit system
+- Phase 4 (2026-Q4): Supplier distribution system + Health 7-dim model + Growth record rebuild
+
+### Must NOT have (guardrails, anti-slop, scope boundaries)
+- Dify完全移除:保留fallback直到LangGraph验证通过
+- Java 8/Spring Boot 2.7.18 不升级
+- 不引入新中间件(PostgreSQL、Redis等)
+- 不做国际化/SSR/SEO优化
+- 不做代码质量重构(已有A类8项已结束)
+- 小程序端禁止 Composition API、可选链 `?.`、CSS Grid
+
+## Verification strategy
+> Zero human intervention - all verification is agent-executed.
+- Test decision: tests-after (项目无TDD基础设施) + mvn compile + 小程序预览
+- Evidence: .omo/evidence/task-<N>-2026-07-22-comprehensive-implementation.<ext>
+
+## Execution strategy
+### Phase dependency (每个Phase独立,Phase内任务并行)
+
+Phase 2 (当前窗口 - 2026-07~08):
+  Wave 1: 任务1 (LangGraph后端适配) + 任务3 (推广后端API) — 并行
+  Wave 2: 任务2 (前端LangGraph集成) + 任务4 (推广前端页面) — 并行
+  Wave 3: 任务5 (AI健康管家) — 紧跟Wave 2
+
+Phase 3 (2026-Q3):
+  Wave 1: 任务6 (富维度后端) + 任务8 (辈分后端) — 并行
+  Wave 2: 任务7 (富维度前端) + 任务9 (辈分前端) — 并行
+  Wave 3: 任务10 (文章发布系统) — 独立执行
+
+Phase 4 (2026-Q4):
+  Wave 1: 任务11 + 任务12 + 任务13 — 可并行
+
+### Dependency matrix
+| Todo | Depends on | Blocks | Can parallelize with |
+| --- | --- | --- | --- |
+| 1 | — | 2, 5 | 3 |
+| 2 | 1 | 5 | 4 |
+| 3 | — | 4 | 1 |
+| 4 | 3 | — | 2 |
+| 5 | 2 | — | — |
+| 6 | Phase 2 done | 7 | 8 |
+| 7 | 6 | — | 9 |
+| 8 | Phase 2 done | 9 | 6 |
+| 9 | 8 | — | 7 |
+| 10 | Phase 2 done | — | 7, 9 |
+| 11 | Phase 3 done | — | 12, 13 |
+| 12 | Phase 3 done | — | 11, 13 |
+| 13 | Phase 3 done | — | 11, 12 |
+
+## Todos
+
+> Implementation + Test = ONE todo. Never separate.
+
+### PHASE 2: 商业模式 & AI 落地
+
+- [ ] 1. LangGraph 后端适配层:创建前端可调用的 LangGraph API 路由
+  What to do / Must NOT do: 在 cfc-langgraph/app/api/ 中创建适配层路由,暴露与 Dify 相同语义的 endpoints(chat/completion, analysis/run)。前端无需改接口格式只改 base_url。必须保留 Dify 路由作为 fallback 不删除。
+  Parallelization: Wave 1 | Blocked by: — | Blocks: 2
+  References: cfc-langgraph/app/graphs/{chat,analysis,recommend}_graph.py, cfc-frontend/config.js (Dify base_url), cfc-frontend/api/ (现有 Dify 调用封装)
+  Acceptance criteria: `curl http://localhost:9000/api/v1/chat` 返回 200 且响应格式与 Dify 一致
+  QA scenarios: happy (发出chat请求收到回复) + failure (LLM不可用时返回清晰错误) + format-compat (响应字段与Dify对齐)
+  Commit: N (Phase 2 Wave 1 完成后统一提交)
+
+- [ ] 2. 前端 LangGraph 集成:替换 Dify 调用
+  What to do / Must NOT do: 修改 cfc-frontend 中所有直接调用 Dify 的代码,将 base_url 切换到 LangGraph 适配层。保留 DIFY_BASE_URL fallback 配置。不改页面逻辑只改请求目标地址。禁止重构。
+  Parallelization: Wave 2 | Blocked by: 1 | Blocks: 5
+  References: cfc-frontend/config.js, 所有 api/ 目录下的 Dify 调用文件, cfc-langgraph/app/api/ (上一步创建的适配层)
+  Acceptance criteria: 小程序端 AI 功能通过 LangGraph 响应,Dify fallback 可通过配置开关切换
+  QA scenarios: happy (AI 对话/分析功能正常) + fallback (切断 LangGraph 后自动切 Dify) + regression (所有非 AI 页面不受影响)
+  Commit: Y | feat(langgraph): frontend integration replacing Dify calls
+
+- [ ] 3. 推广体系后端 API 补齐 + 家庭公共账户
+  What to do / Must NOT do: 实现 P2 家庭公共账户(建表 commission 表 + CommissionService 改造 + 注册绑定)。P4 管理后台推迟。wxacode 改造已在 P1 完成的保留。不重构现有邀请流程。
+  Parallelization: Wave 1 | Blocked by: — | Blocks: 4
+  References: cfc-backend/service/GuideFamilyService.java, cfc-backend/service/PromotionTierService.java, specs/2026-07-14-family-promotion-redesign.md
+  Acceptance criteria: 家庭公共账户表已创建,CommissionService 可记录推广佣金,注册绑定流程完成
+  QA scenarios: happy (推广绑定→创建佣金记录) + failure (非绑定结构拒绝写入)
+  Commit: N (Phase 2 Wave 1 完成后统一提交)
+
+- [ ] 4. 推广前端页面(推广中心 + 成员贡献榜 + 支付集成)
+  What to do / Must NOT do: 实现 P3 前端推广中心重设计(页面+组件+路由)。包含成员推广贡献榜、绑定关系展示、收益概览。支付集成留接口不做真实支付。管理后台 P4 推迟。
+  Parallelization: Wave 2 | Blocked by: 3 | Blocks: —
+  References: cfc-frontend/pages/promotion/ (新建目录), specs/2026-07-14-family-promotion-redesign.md
+  Acceptance criteria: 小程序可访问推广中心页面,展示绑定关系+推广收益概览
+  QA scenarios: happy (推广中心加载展示) + empty (无推广关系的用户) + error (API失败降级)
+  Commit: Y | feat(promotion): frontend promotion center with commission display
+
+- [ ] 5. AI健康管家(MVP版)
+  What to do / Must NOT do: 基于 LangGraph 通道构建 AI 健康管家对话界面。复用已有 chat_graph.py,创建专门 health_butler_graph.py(含健康知识检索+个性化建议)。前端嵌入健康页面底部。不做完整订阅付费墙。
+  Parallelization: Wave 3 | Blocked by: 2 | Blocks: —
+  References: cfc-langgraph/app/graphs/chat_graph.py, cfc-langgraph/app/rag/retriever.py, cfc-frontend/pages/body/
+  Acceptance criteria: 健康页面可唤起 AI 管家对话,回答基于健康知识库
+  QA scenarios: happy (健康问答正常) + no_context (非健康问题给出通用回应) + fallback (LangGraph 不可用时 UI 提示)
+  Commit: Y | feat(ai): health butler MVP with LangGraph
+
+### PHASE 3: 五维增强
+
+- [ ] 6. 富维度后端子维度拆分 + 身克富杠杆
+  What to do / Must NOT do: 重构 EnergyService calcChildWealth/calcParentWealth 拆为子维度。实现身克富杠杆(健康风险扣减 + 透支预警标记)。新增 API GET /api/energy/wealth-detail。更新 DTO MemberEnergyDTO 增加子维度字段和身克富字段。不改已有 schema/表结构。
+  Parallelization: Wave 1 | Blocked by: Phase 2 done | Blocks: 7
+  References: cfc-backend/service/EnergyService.java, cfc-backend/dto/MemberEnergyDTO.java, plans/2026-07-12-wealth-dimension-redesign.md
+  Acceptance criteria: 新 API 返回子维度拆分后的财富数据,身克富逻辑在能量计算中生效
+  QA scenarios: happy (wealth-detail 返回子维度) + leverage_active (健康分低时财富被克扣) + edge (子维度全部为0)
+  Commit: Y | feat(wealth): sub-dimension split and body-ke-leverage
+
+- [ ] 7. 富维度前端页面重写 + API 对接
+  What to do / Must NOT do: 重写 pages/wealth/index.vue 为角色感知的富展示(家长看利他创富数据,孩子看积分效率)。对接新 API GET /api/energy/wealth-detail。移除旧混搭内容(任务/购买/活动数据)。不改其他维度页面。
+  Parallelization: Wave 2 | Blocked by: 6 | Blocks: —
+  References: cfc-frontend/pages/wealth/index.vue, plans/2026-07-12-wealth-dimension-redesign.md
+  Acceptance criteria: 家长端显示推广收益+积分资产,孩子端显示积分获取效率+任务数据
+  QA scenarios: happy (家长→创富视图, 孩子→效率视图) + role_switch (角色切换视图正确切换) + empty (新用户无数据)
+  Commit: Y | feat(wealth): role-aware wealth page rewrite
+
+- [ ] 8. 家庭成员辈分重构后端链路
+  What to do / Must NOT do: 基于 GenerationLevel.java 完成视角切换全链路(API 逻辑+persistence+DTO)。更新 FamilyMemberService 中的辈分相关逻辑。新增视角切换 API(从当前角色生成目标辈分视角的数据投影)。不重构现有家庭关系图。
+  Parallelization: Wave 1 | Blocked by: Phase 2 done | Blocks: 9
+  References: cfc-backend/enums/GenerationLevel.java, cfc-backend/service/FamilyMemberService.java, specs/2026-07-07-家庭成员关系视角转换设计.md
+  Acceptance criteria: API 可按辈分视角投影家庭成员数据,GenerationLevel 在服务层完整生效
+  QA scenarios: happy (指定辈分视角→正确投影) + role_none (无匹配辈分→默认直系) + edge (跨代视角)
+  Commit: Y | feat(family): generation-based perspective switching backend
+
+- [ ] 9. 家庭成员辈分重构前端联动
+  What to do / Must NOT do: 更新前端角色选择器增加辈分选项。联动 FamilyRelationGraph 适配 GenerationLevel 显示。更新 family-members 编辑弹窗。不改已有家庭成员数据结构。
+  Parallelization: Wave 2 | Blocked by: 8 | Blocks: —
+  References: cfc-frontend/components/RelationshipPicker.vue, cfc-frontend/components/FamilyRelationGraph.vue, cfc-frontend/pages/family/family-members/
+  Acceptance criteria: 角色选择器可选择辈分,关系图按辈分显示不同颜色/层级
+  QA scenarios: happy (选择辈分→关系图更新) + no_generation (无辈分数据→默认显示) + mobile (小屏适配)
+  Commit: Y | feat(family): generation-aware frontend for family graph
+
+- [ ] 10. 文章发布系统(运营审核流程)
+  What to do / Must NOT do: 开发文章审核发布状态机(草稿→待审→已发布→下架)。Web管理端新增文章编辑器(标题/封面/正文/标签/维度选择)。管理端审核列表+审批操作。简化版:不接入公众号自动发布,仅平台内发布。
+  Parallelization: Wave 3 | Blocked by: Phase 2 done | Blocks: —
+  References: cfc-backend/controller/admin/ArticleController.java, cfc-web/src/views/article/, specs/2026-06-08-article-publishing-system-design.md
+  Acceptance criteria: Web管理端可创建、编辑、发布、下架文章;小程序端可见已发布的文章
+  QA scenarios: happy (创建→审核→发布→小程序可见) + reject (审核拒绝→返回草稿) + invalid (缺必填字段→不让提交)
+  Commit: Y | feat(article): publishing and audit workflow
+
+### PHASE 4: 平台扩展(计划级,不实施)
+
+- [ ] 11. 供应商销售体系实施(计划级 - Phase 4)
+  预计内容: 供应商体系建表 + 账期+留利逻辑 + 商品规格最小购买数限制 + 订单修复
+  References: specs/2026-07-05-supply-distribution-system-design.md, plans/2026-07-05-supply-distribution-system.md
+
+- [ ] 12. 健康7维子体系模型实施(计划级 - Phase 4)
+  预计内容: 7个子维度模型+Schema+API + 前端页面对接
+  References: specs/2026-06-26-health-dimensions-design-spec.md, plans/2026-06-27-health-dimensions-incremental-plan.md
+
+- [ ] 13. 成长档案重建实施(计划级 - Phase 4)
+  预计内容: 成长档案 CRUD + 新 UI 组件 + 数据迁移
+  References: specs/2026-06-22-growth-record-rebuild-design.md
+
+## Final verification wave
+> Runs in parallel after ALL todos. ALL must APPROVE. Surface results and wait for the user's explicit okay before declaring complete.
+- [ ] F1. Plan compliance (per Phase)
+- [ ] F2. Code quality review (per Phase)
+- [ ] F3. Real manual QA (per Phase)
+- [ ] F4. Scope fidelity (per Phase)
+
+## Commit strategy
+- Phase 2 Wave 1: 1 commit (任务1 + 任务3 一起)
+- Phase 2 Wave 2: 2 separate commits (任务2, 任务4)
+- Phase 2 Wave 3: 1 commit (任务5)
+- Phase 3: per-todo commits (5 commits)
+- Commit message format: `<type>(<scope>): <summary>`
+- Branch: `cfclub` (现有开发分支)
+
+## Success criteria
+- Phase 2: 小程序前端 AI 功能走 LangGraph 通道(Dify fallback 可配置)+ 推广中心页面展示绑定+收益
+- Phase 3: 财富页面按角色展示子维度数据 + 成员关系按辈分显示 + 文章可走审核发布
+- Phase 4: 供应商体系可下单结算 + 健康7维数据展示 + 新成长档案可用