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

feat(sandbox): 首页能量沙盘个人/全家切换始终显示,成员<2时点全家弹提示引导添加

liaoxg 2 месяцев назад
Родитель
Сommit
699742847c

+ 24 - 2
cfc-frontend/components/wuxing-sandbox.vue

@@ -9,8 +9,8 @@
     </view>
   </slot>
 
-  <!-- 个人/全家切换开关(有 2+ 成员时显示) -->
-  <view class="sandbox-toggle" v-if="hasMultipleMembers && mode !== 'preview'">
+  <!-- 个人/全家切换开关(始终显示,成员 <2 时点全家会提示) -->
+  <view class="sandbox-toggle" v-if="mode !== 'preview'">
     <view class="toggle-item" :class="activeClassName" @click="onToggle('personal')">
       <text class="toggle-icon">👤</text>
       <text class="toggle-text">个人</text>
@@ -165,6 +165,11 @@ export default {
       type: Boolean,
       default: false
     },
+    /** 家庭真实成员数(来自 /api/family/member/list,用于全家切换判断;缺省时用 members 长度) */
+    memberCount: {
+      type: Number,
+      default: 0
+    },
     /** 当前视角模式(由父组件控制) */
     currentView: {
       type: String,
@@ -427,6 +432,23 @@ export default {
 
     /** 个人/全家切换(由父组件控制数据源) */
     onToggle: function(view) {
+      if (view === 'family') {
+        var total = this.memberCount > 0 ? this.memberCount : (this.members ? this.members.length : 0)
+        if (total < 2) {
+          uni.showModal({
+            title: '需要更多家庭成员',
+            content: '至少需要 2 位家庭成员才能查看全家能量,快去添加吧!',
+            confirmText: '去添加',
+            cancelText: '取消',
+            success: function(res) {
+              if (res.confirm) {
+                uni.navigateTo({ url: '/pages/profile-extra/family-members' })
+              }
+            }
+          })
+          return
+        }
+      }
       this.viewMode = view
       if (view === this.currentView) return
       this.$emit('view-change', view)

+ 2 - 4
cfc-frontend/pages/energy/index.vue

@@ -349,10 +349,8 @@ export default {
         this.switchView('self')
         return
       }
-      // 进入全家态前检查成员数
-      var members = this.familySandboxData && this.familySandboxData.members
-        ? this.familySandboxData.members
-        : this.familyMembers
+      // 进入全家态前检查成员数(以 /api/family/member/list 为准,sandbox 接口 members 不全)
+      var members = this.familyMembers
       if (!members || members.length < 2) {
         uni.showModal({
           title: '需要更多家庭成员',

+ 1 - 0
cfc-frontend/pages/home-pages/child-index.vue

@@ -46,6 +46,7 @@
   :totalHealthIndex="totalHealthIndex"
   :familyUnlocked="familyUnlocked"
   :currentView="currentSandboxView"
+  :memberCount="familyMembersVisible.length"
   starHeight="400rpx"
   showDimensionBar
   @view-change="onSandboxViewChange"

+ 1 - 0
cfc-frontend/pages/home-pages/parent-index.vue

@@ -155,6 +155,7 @@
         :totalHealthIndex="totalHealthIndex"
         :familyUnlocked="familyUnlocked"
         :currentView="currentSandboxView"
+        :memberCount="familyMembersVisible.length"
         starHeight="400rpx"
         showDimensionBar
         @view-change="onSandboxViewChange"

+ 3 - 3
cfc-frontend/pages/index-home/index.vue

@@ -74,6 +74,7 @@
       :totalHealthIndex="totalHealthIndex"
       :currentView="currentSandboxView"
       :familyUnlocked="familyUnlocked"
+      :memberCount="familyMembersVisible.length"
       @view-change="onSandboxViewChange"
       showDimensionBar
       starHeight="480rpx" />
@@ -1049,11 +1050,10 @@ membershipDays: 0,
       this._watchPageReady()
     },
     _refreshOnShow() {
-      // 切 Tab 返回时刷新易变数据(仅会员状态、今日任务、挑战列表),避免重复加载
+      // 切 Tab 返回:刷新家庭成员 + 沙盘 + 会员状态(loadFamilyData 内含任务/挑战刷新)
       if (!this.isLoggedIn()) return
       this.checkMemberStatus()
-      this.loadTodayTasks()
-      this.loadChallenges()
+      this.loadFamilyData()
     },
     _watchPageReady() {
       if (this._watchPageReadyDone) return