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

feat(health): 优化免费会员家庭挑战创建流程

- 新增 checkMembership:获取会员等级判断是否为免费会员
- openCreateModal 细分场景:
  - 免费会员且仅 1 成员(自己) -> 引导先添加孩子 (showAddChildPrompt)
  - 其他成员不足 -> 通用添加成员引导 (showMemberPrompt)
- 新增 goToAddChild:直接跳转到添加孩子页面
- 提示文案明确告知:免费会员只能添加 1 位孩子,挑战创建后可切换到孩子身份同意参与
liaoxg 2 месяцев назад
Родитель
Сommit
6155aef22a
1 измененных файлов с 46 добавлено и 3 удалено
  1. 46 3
      cfc-frontend/pages/health/challenge-manage.vue

+ 46 - 3
cfc-frontend/pages/health/challenge-manage.vue

@@ -195,11 +195,31 @@
         </view>
       </view>
     </view>
+
+    <!-- 免费会员引导添加孩子弹窗 -->
+    <view class="overlay" v-if="showAddChildPrompt" @click="showAddChildPrompt = false">
+      <view class="modal prompt-modal" @click.stop>
+        <view class="modal-header">
+          <text class="modal-title">免费会员专属提示</text>
+          <text class="modal-close" @click="showAddChildPrompt = false">×</text>
+        </view>
+        <view class="prompt-content">
+          <text class="prompt-icon">👶</text>
+          <text class="prompt-title">需先添加孩子成员</text>
+          <text class="prompt-desc">免费会员只能添加 1 位孩子成员,添加后即可创建家庭挑战。<br/>挑战创建后,可切换到孩子身份同意参与。</text>
+        </view>
+        <view class="modal-footer">
+          <button class="btn-cancel" @click="showAddChildPrompt = false">暂不添加</button>
+          <button class="btn-submit" @click="goToAddChild">去添加孩子</button>
+        </view>
+      </view>
+    </view>
   </view>
 </template>
 
 <script>
-import { getChallengeList, getChallengeHistory, createChallenge, updateChallenge, deleteChallenge, getChallengeTemplates, getFamilyMemberList } from '../../utils/api.js'
+import { getChallengeList, getChallengeHistory, createChallenge, updateChallenge, deleteChallenge, getChallengeTemplates, getFamilyMemberList, getMyMembership } from '../../utils/api.js'
+import store from '../../store/index.js'
 
 export default {
   data() {
@@ -212,6 +232,7 @@ export default {
       selectedMemberIds: [],
       showModal: false,
       showMemberPrompt: false,
+      showAddChildPrompt: false,
       editMode: false,
       editingId: null,
       form: {
@@ -222,12 +243,14 @@ export default {
         targetValue: '7',
         durationDays: '7',
         rewardPoints: '50'
-      }
+      },
+      isFreeMember: false
     }
   },
   onLoad() {
     this.loadTemplates()
     this.loadMembers()
+    this.checkMembership()
     this.loadData()
   },
   onShow() {
@@ -285,6 +308,17 @@ export default {
         this.selectedMemberIds = []
       }
     },
+    async checkMembership() {
+      try {
+        const res = await getMyMembership()
+        const m = res.data || {}
+        const level = m.memberLevel || m.levelCode || ''
+        // 免费会员:level 为空或 FREE
+        this.isFreeMember = !level || level === 'FREE'
+      } catch (e) {
+        this.isFreeMember = true // 默认按免费处理,保守策略
+      }
+    },
     isMemberSelected(id) {
       return this.selectedMemberIds.indexOf(id) >= 0
     },
@@ -312,8 +346,13 @@ export default {
       }
     },
     openCreateModal() {
+      // 免费会员且只有1个成员(自己)时,引导先添加孩子
       if (this.familyMembers.length < 2) {
-        this.showMemberPrompt = true
+        if (this.isFreeMember && this.familyMembers.length === 1) {
+          this.showAddChildPrompt = true
+        } else {
+          this.showMemberPrompt = true
+        }
         return
       }
       this.editMode = false
@@ -414,6 +453,10 @@ export default {
     goToAddMember() {
       this.showMemberPrompt = false
       uni.navigateTo({ url: '/pages/profile-extra/family-members' })
+    },
+    goToAddChild() {
+      this.showAddChildPrompt = false
+      uni.navigateTo({ url: '/pages/family/add-member' })
     }
   }
 }