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

feat: 首次登录引导浮层组件

新建 OnboardingGuide.vue:3 步引导(角色分流)+步进器+品牌配色

parent-index.vue / child-index.vue 集成引导浮层+storage 触发

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
User 4 месяцев назад
Родитель
Сommit
c9f36e4348

+ 2 - 2
cfc-frontend/components/OnboardingGuide.vue

@@ -244,7 +244,7 @@ export default {
 
 /* 最后一步:暖珊瑚色按钮 */
 .onboarding-btn--last {
-  background: var(--color-warm, #F08A7A);
-  box-shadow: 0 4rpx 16rpx rgba(240, 138, 122, 0.30);
+  background: var(--color-primary, #F97316);
+  box-shadow: 0 4rpx 16rpx rgba(249, 115, 22, 0.30);
 }
 </style>

+ 14 - 0
cfc-frontend/pages/index/child-index.vue

@@ -6,6 +6,12 @@
     <!-- 撒花庆祝 -->
     <ConfettiCelebration :show="showConfetti" />
 
+    <!-- 首次登录引导浮层 -->
+    <OnboardingGuide
+      role="child"
+      :show="showOnboarding"
+      @close="showOnboarding = false" />
+
     <!-- 空状态 - 无孩子 -->
     <BaseEmpty
       v-if="!loading && !hasChildren"
@@ -299,6 +305,7 @@ import PlayfulButton from '../../components/PlayfulButton.vue'
 import BaseBadge from '../../components/BaseBadge.vue'
 import BaseEmpty from '../../components/BaseEmpty.vue'
 import BaseLoading from '../../components/BaseLoading.vue'
+import OnboardingGuide from '../../components/OnboardingGuide.vue'
 import ConfettiCelebration from '../../components/ConfettiCelebration.vue'
 
 /**
@@ -337,11 +344,13 @@ export default {
     BaseBadge,
     BaseEmpty,
     BaseLoading,
+    OnboardingGuide,
     ConfettiCelebration
   },
   data() {
     return {
       loading: true,
+      showOnboarding: false,
       hasChildren: false,
       nickname: '',
       childId: '',
@@ -455,6 +464,11 @@ export default {
     }
   },
   mounted() {
+    // 首次登录引导
+    var onboardingDone = uni.getStorageSync('_onboardingDone')
+    if (!onboardingDone) {
+      this.showOnboarding = true
+    }
     this.loadData()
   },
   onShow() {

+ 15 - 1
cfc-frontend/pages/index/parent-index.vue

@@ -1,5 +1,11 @@
 <template>
 <view class="container">
+<!-- 首次登录引导浮层 -->
+<OnboardingGuide
+  role="parent"
+  :show="showOnboarding"
+  @close="showOnboarding = false" />
+
 <!-- 加载状态 -->
 <BaseLoading :loading="loading" text="正在加载..." />
 
@@ -298,6 +304,7 @@
 
 <script>
 import { getFamilyMembers, getChildren, getPendingReviewTasks, getPendingWishes, approveTask, rejectTask, getChildCompletionStats, getParentDashboard, getFamilyEnergySandbox, getEnergyOverview, getVisibleFamilyMembers, getActivityList, getProductsByDomain } from '../../utils/api.js'
+import OnboardingGuide from '../../components/OnboardingGuide.vue'
 import PageBanner from '../../components/PageBanner.vue'
 import DimensionActivities from '../../components/DimensionActivities.vue'
 import DimensionProducts from '../../components/DimensionProducts.vue'
@@ -310,7 +317,7 @@ import FamilyRelationGraph from '../../components/FamilyRelationGraph.vue'
 import WuxingSandbox from '../../components/wuxing-sandbox.vue'
 
 export default {
-  components: { PageBanner, DimensionActivities, DimensionProducts, PlayfulCard, PlayfulButton, BaseBadge, BaseEmpty, BaseLoading, FamilyRelationGraph, WuxingSandbox },
+  components: { OnboardingGuide, PageBanner, DimensionActivities, DimensionProducts, PlayfulCard, PlayfulButton, BaseBadge, BaseEmpty, BaseLoading, FamilyRelationGraph, WuxingSandbox },
   data() {
     return {
       nickname: '',
@@ -329,6 +336,7 @@ export default {
       familyTotalPoints: 0,
       // membershipText removed (no real function)
       loading: true,
+      showOnboarding: false,
       currentChildId: '',
       _initialLoadDone: false,
       _familyId: null,
@@ -411,6 +419,12 @@ export default {
       return
     }
     this.loadData()
+
+    // 首次登录引导
+    var onboardingDone = uni.getStorageSync('_onboardingDone')
+    if (!onboardingDone) {
+      this.showOnboarding = true
+    }
   },
   onShow() {
     // 首次 onShow 紧接 mounted 之后,跳过避免双重加载