ソースを参照

fix(frontend): 修复行/身页面 hasFamily 误判导致 FamilyEmptyState 覆盖内容区

- index-home/index.vue: 新增 childrenChecked/membersChecked 标记,hasFamily
  改为乐观加载模式(接口未返回前返回 true),避免暂无数据闪烁
- index-home/index.vue: loadChildren/loadFamilyMembers 增加 checked 标记设置
- DimensionProducts.vue: hasFamily 增加 isLoggedIn 判断,信任父组件可见性控制
Xiaogang Liao 1 ヶ月 前
コミット
dbb34bc266

+ 4 - 0
cfc-frontend/components/DimensionProducts.vue

@@ -66,6 +66,10 @@ export default {
       if (this.products && this.products.length > 0) {
         return true
       }
+      // 父组件已控制整体可见性(如 index-home 的行页面),信任父组件
+      if (this.isLoggedIn) {
+        return true
+      }
       return this.$store.getters.hasFamily
     },
     displayProducts: function() {

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

@@ -450,6 +450,9 @@ export default {
 
       // 登录态数据
       familyMembersVisible: [],
+      // 接口数据是否已检查(用于 hasFamily 判断,替代已失效的 store.familyId)
+      childrenChecked: false,
+      membersChecked: false,
       selectedMemberId: null,
       sandboxData: null,
       dualDimension: null,
@@ -481,8 +484,11 @@ export default {
   computed: {
     hasFamily: function() {
       if (!this.isLoggedIn()) return false
-      if (this.loading) return true
+      // 接口未返回前乐观显示内容区,避免"暂无数据"闪烁
+      if (!this.childrenChecked || !this.membersChecked) return true
+      // 有孩子成员或可见家庭成员即认为有家庭
       if (this.sandboxData) return true
+      if (this.children && this.children.length > 0) return true
       if (this.familyMembersVisible && this.familyMembersVisible.length > 0) return true
       return this.$store.getters.hasFamily
     },
@@ -613,7 +619,11 @@ export default {
           }
           self.loadDimensionData()
         }
-      }).catch(function() {})
+        self.childrenChecked = true
+      }).catch(function(e) {
+        console.log('获取孩子列表失败', e)
+        self.childrenChecked = true
+      })
     },
     loadDimensionData: function() {
       this.loadEnergyData()
@@ -790,7 +800,12 @@ export default {
         if (res.code === 200 && res.data) {
           self.familyMembersVisible = Array.isArray(res.data) ? res.data : (res.data.list || [])
         }
-      }).catch(function() {})
+        self.membersChecked = true
+      }).catch(function(e) {
+        console.log('获取可见家庭成员失败', e)
+        self.familyMembersVisible = []
+        self.membersChecked = true
+      })
     },
     parseRelatedDimensions: function(val) {
       if (!val) return []