ソースを参照

Merge remote-tracking branch 'origin/cfclub' into cfclub

jiapu 1 週間 前
コミット
44e2e274c0
1 ファイル変更47 行追加4 行削除
  1. 47 4
      cfc-frontend/pages/index-home/index.vue

+ 47 - 4
cfc-frontend/pages/index-home/index.vue

@@ -46,6 +46,9 @@
 
   <!-- 登录态 — 直接内嵌,保持底签可见 -->
   <view v-if="currentRole" class="logged-in-container">
+    <!-- ⓪ 新手成长礼包进度条(新用户引导,全部领取后自动隐藏) -->
+    <OnboardingProgressBar ref="onboardingProgress" />
+
     <!-- ① 了解区 — 自测大卡(首屏,引导"从了解开始") -->
     <view class="self-test-card" @click="goSelfTest">
       <view class="self-test-head">
@@ -232,6 +235,12 @@
     <!-- 底部占位 -->
 
     <view class="bottom-spacer" style="height: 40rpx;"></view>
+
+    <!-- 首次登录引导浮层(3 步产品介绍,看过一次后不再弹) -->
+    <OnboardingGuide
+      :role="currentRole"
+      :show="showOnboardingGuide"
+      @close="closeOnboardingGuide" />
   </view>
 
   <!-- 未登录态 — 发现页/引流内容,直接内嵌,不跳转 -->
@@ -414,6 +423,8 @@ import ArticleBookshelf from '../../components/ArticleBookshelf.vue'
 import FamilyChallengeCard from '../../components/FamilyChallengeCard.vue'
 import DailyTaskCard from '../../components/daily-task-card.vue'
 import ReportUploadCard from '../../components/report-upload-card.vue'
+import OnboardingProgressBar from '../../components/OnboardingProgressBar.vue'
+import OnboardingGuide from '../../components/OnboardingGuide.vue'
 import { acceptParentInvite, getActivityList, getFeaturedArticles, getEnergySandbox, getEnergyOverview, getFamilyMemberList, getChallengeList, switchToFamilyMember, getMyMembership, updateChallengeProgress, respondChallenge, getTodayTasks, completeTask as completeTaskApi, getTodayParentTasks, completeParentTask as completeParentTaskApi, getTaskHistory, getNotices, getNotificationList, getSurveyStatus, getSelfCheckStatus, getReferralCode, extractReferralCode } from '../../utils/api.js'
 import nav from '../../utils/nav.js'
 import config from '@/config.js'
@@ -429,6 +440,8 @@ export default {
     FamilyChallengeCard,
     DailyTaskCard,
     ReportUploadCard,
+    OnboardingProgressBar,
+    OnboardingGuide,
     
   },
   data() {
@@ -451,6 +464,7 @@ export default {
       pendingSurveys: [],
       selfCheckScore: null,
       selfCheckLoading: false,
+      showOnboardingGuide: false,
 
       dimensionActivities: [],
       indexArticles: [],
@@ -591,7 +605,18 @@ membershipDays: 0,
           color: 'orange'
         }
       }
-      // 2) 待填调研 — 定期调研是用户的实际行动邀请
+      // 2) 家庭成员为空 — 新用户关键动作,引导添加孩子/家人
+      if (this.membersChecked && this.familyMembersVisible && this.familyMembersVisible.length <= 1) {
+        return {
+          type: 'add-member',
+          icon: '👨‍👩‍👧',
+          title: '添加家庭成员',
+          sub: '邀请孩子和家人,开启全家成长管理',
+          btn: '去添加',
+          color: 'blue'
+        }
+      }
+      // 3) 待填调研 — 定期调研是用户的实际行动邀请
       if (this.pendingSurveys && this.pendingSurveys.length > 0) {
         return {
           type: 'survey',
@@ -602,7 +627,7 @@ membershipDays: 0,
           color: 'blue'
         }
       }
-      // 3) 待办任务 — 用户已完成自检后的执行路径
+      // 4) 待办任务 — 用户已完成自检后的执行路径
       if (this.pendingTasks && this.pendingTasks.length > 0) {
         return {
           type: 'task',
@@ -613,7 +638,7 @@ membershipDays: 0,
           color: 'green'
         }
       }
-      // 4) 未读通知 — 私域触达优先
+      // 5) 未读通知 — 私域触达优先
       var unreadCount = 0
       if (this.notices && this.notices.length) {
         for (var i = 0; i < this.notices.length; i++) {
@@ -630,7 +655,7 @@ membershipDays: 0,
           color: 'purple'
         }
       }
-      // 5) 默认引导 — 已完成所有任务,指向增值内容
+      // 6) 默认引导 — 已完成所有任务,指向增值内容
       return {
         type: 'default',
         icon: '✨',
@@ -1106,6 +1131,9 @@ membershipDays: 0,
             })
           }
           break
+        case 'add-member':
+          this.navTo('/pages/profile-extra/family-members')
+          break
         case 'task':
           this.navTo('/pages/tasks/tasks')
           break
@@ -1154,6 +1182,7 @@ membershipDays: 0,
         this.checkMemberStatus()
       }
       this._watchPageReady()
+      this._maybeShowOnboardingGuide()
     },
     _refreshOnShow() {
       // 切 Tab 返回:刷新家庭成员 + 沙盘 + 会员状态(loadFamilyData 内含任务/挑战刷新)
@@ -1175,6 +1204,20 @@ membershipDays: 0,
         if (newVal) that._tryHideSplash()
       })
     },
+    // 首次登录引导浮层:仅当从未看过(无 _onboardingDone 标记)时展示一次
+    _maybeShowOnboardingGuide() {
+      if (this.showOnboardingGuide) return
+      if (uni.getStorageSync('_onboardingDone')) return
+      // 延迟到 splash 蒙板关闭后再弹,避免层级冲突
+      var self = this
+      setTimeout(function() {
+        if (!self.isLoggedIn()) return
+        self.showOnboardingGuide = true
+      }, 600)
+    },
+    closeOnboardingGuide() {
+      this.showOnboardingGuide = false
+    },
     isLoggedIn() {
       return !!uni.getStorageSync('token')
     },