|
@@ -9,6 +9,9 @@
|
|
|
tagline="家庭健康成长俱乐部"
|
|
tagline="家庭健康成长俱乐部"
|
|
|
quote="给全家的一站式幸福提案" />
|
|
quote="给全家的一站式幸福提案" />
|
|
|
|
|
|
|
|
|
|
+<!-- ===== 新手任务进度条(onboarding 置顶引导) ===== -->
|
|
|
|
|
+<OnboardingProgressBar ref="onboardingProgress" />
|
|
|
|
|
+
|
|
|
<!-- ===== 家庭成员选择条 ===== -->
|
|
<!-- ===== 家庭成员选择条 ===== -->
|
|
|
<FamilyMemberStrip
|
|
<FamilyMemberStrip
|
|
|
v-if="isLoggedIn"
|
|
v-if="isLoggedIn"
|
|
@@ -19,6 +22,14 @@
|
|
|
@switch="onFamilyMemberSwitch"
|
|
@switch="onFamilyMemberSwitch"
|
|
|
@removed="loadFamilyMembersVisible" />
|
|
@removed="loadFamilyMembersVisible" />
|
|
|
|
|
|
|
|
|
|
+<!-- ===== 无家庭成员空状态引导卡 ===== -->
|
|
|
|
|
+<view class="empty-family-card" v-if="isLoggedIn && familyMembersVisible.length === 0">
|
|
|
|
|
+ <view class="empty-family-icon">🏠</view>
|
|
|
|
|
+ <text class="empty-family-title">创建我的家庭</text>
|
|
|
|
|
+ <text class="empty-family-desc">添加家庭成员,开启五维能量之旅</text>
|
|
|
|
|
+ <button class="empty-family-btn" @click="goAddMember">立即添加</button>
|
|
|
|
|
+</view>
|
|
|
|
|
+
|
|
|
<!-- ===== 微行动卡片(P0:有效启动) ===== -->
|
|
<!-- ===== 微行动卡片(P0:有效启动) ===== -->
|
|
|
<MicroActionCard
|
|
<MicroActionCard
|
|
|
v-if="selectedMemberId && selectedChild && selectedChild.id"
|
|
v-if="selectedMemberId && selectedChild && selectedChild.id"
|
|
@@ -482,10 +493,11 @@ import DailySummary from '../../components/DailySummary.vue'
|
|
|
import HealthAlertBanner from '../../components/HealthAlertBanner.vue'
|
|
import HealthAlertBanner from '../../components/HealthAlertBanner.vue'
|
|
|
import CircleRanking from '../../components/CircleRanking.vue'
|
|
import CircleRanking from '../../components/CircleRanking.vue'
|
|
|
import ArticleBookshelf from '../../components/ArticleBookshelf.vue'
|
|
import ArticleBookshelf from '../../components/ArticleBookshelf.vue'
|
|
|
|
|
+import OnboardingProgressBar from '../../components/OnboardingProgressBar.vue'
|
|
|
import feedbackEngine from '../../utils/feedback-engine.js'
|
|
import feedbackEngine from '../../utils/feedback-engine.js'
|
|
|
|
|
|
|
|
export default {
|
|
export default {
|
|
|
- components: { PageBanner, RecommendedFeed, PlayfulCard, PlayfulButton, BaseBadge, BaseEmpty, BaseLoading, FamilyRelationGraph, WuxingSandbox, ContactCard, ContactImport, FamilyMemberStrip, MicroActionCard, FeedbackToast, MilestoneCelebration, DailySummary, HealthAlertBanner, FamilyHealthRanking, FamilyChallengeCard, CircleRanking, ArticleBookshelf },
|
|
|
|
|
|
|
+ components: { PageBanner, RecommendedFeed, PlayfulCard, PlayfulButton, BaseBadge, BaseEmpty, BaseLoading, FamilyRelationGraph, WuxingSandbox, ContactCard, ContactImport, FamilyMemberStrip, MicroActionCard, FeedbackToast, MilestoneCelebration, DailySummary, HealthAlertBanner, FamilyHealthRanking, FamilyChallengeCard, CircleRanking, ArticleBookshelf, OnboardingProgressBar },
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
|
nickname: '',
|
|
nickname: '',
|
|
@@ -645,6 +657,9 @@ export default {
|
|
|
this.isLoggedIn = true
|
|
this.isLoggedIn = true
|
|
|
this.loadData()
|
|
this.loadData()
|
|
|
}
|
|
}
|
|
|
|
|
+ if (this.$refs.onboardingProgress) {
|
|
|
|
|
+ this.$refs.onboardingProgress.reload()
|
|
|
|
|
+ }
|
|
|
},
|
|
},
|
|
|
onPullDownRefresh() {
|
|
onPullDownRefresh() {
|
|
|
this.loadData().finally(() => {
|
|
this.loadData().finally(() => {
|
|
@@ -933,6 +948,9 @@ export default {
|
|
|
this.loadData()
|
|
this.loadData()
|
|
|
feedbackEngine.trigger('micro_action')
|
|
feedbackEngine.trigger('micro_action')
|
|
|
},
|
|
},
|
|
|
|
|
+ goAddMember() {
|
|
|
|
|
+ uni.navigateTo({ url: '/pages/family/add-member' })
|
|
|
|
|
+ },
|
|
|
onDailySummaryDismiss() {
|
|
onDailySummaryDismiss() {
|
|
|
// DailySummary 已关闭,无额外操作
|
|
// DailySummary 已关闭,无额外操作
|
|
|
},
|
|
},
|
|
@@ -2040,4 +2058,45 @@ export default {
|
|
|
opacity: 0.8;
|
|
opacity: 0.8;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/* 无家庭成员空状态引导卡 */
|
|
|
|
|
+.empty-family-card {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ margin: 20rpx 24rpx;
|
|
|
|
|
+ padding: 48rpx 30rpx;
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
+ border-radius: 24rpx;
|
|
|
|
|
+ border: 2rpx dashed #FED7AA;
|
|
|
|
|
+}
|
|
|
|
|
+.empty-family-icon {
|
|
|
|
|
+ font-size: 88rpx;
|
|
|
|
|
+ margin-bottom: 16rpx;
|
|
|
|
|
+}
|
|
|
|
|
+.empty-family-title {
|
|
|
|
|
+ font-size: 34rpx;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ color: #9A3412;
|
|
|
|
|
+ margin-bottom: 10rpx;
|
|
|
|
|
+}
|
|
|
|
|
+.empty-family-desc {
|
|
|
|
|
+ font-size: 26rpx;
|
|
|
|
|
+ color: #999;
|
|
|
|
|
+ margin-bottom: 28rpx;
|
|
|
|
|
+}
|
|
|
|
|
+.empty-family-btn {
|
|
|
|
|
+ width: 320rpx;
|
|
|
|
|
+ height: 80rpx;
|
|
|
|
|
+ line-height: 80rpx;
|
|
|
|
|
+ font-size: 30rpx;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+ background: linear-gradient(135deg, #F97316, #FF8C42);
|
|
|
|
|
+ border-radius: 40rpx;
|
|
|
|
|
+ border: none;
|
|
|
|
|
+}
|
|
|
|
|
+.empty-family-btn::after {
|
|
|
|
|
+ border: none;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
</style>
|
|
</style>
|