Quellcode durchsuchen

feat: 注册引导-活动报名接入就地补充回写

Xiaogang Liao vor 1 Monat
Ursprung
Commit
82cec34e07
1 geänderte Dateien mit 39 neuen und 4 gelöschten Zeilen
  1. 39 4
      cfc-frontend/pages/activity/activity-detail/activity-detail.vue

+ 39 - 4
cfc-frontend/pages/activity/activity-detail/activity-detail.vue

@@ -272,6 +272,7 @@ import config from '@/config.js'
 import shareMixin from '../../../components/share-mixin.js'
 import MpHtml from '@/components/mp-html/mp-html.vue'
 import ContentSharePoster from '@/components/ContentSharePoster.vue'
+import { backfillProfile } from '../../../utils/profile-backfill.js'
 
 export default {
   mixins: [shareMixin],
@@ -581,7 +582,8 @@ export default {
               phone: parents[i].phone || '',
               relation: '家长',
               memberId: parents[i].id,
-              source: 'parent'
+              source: 'parent',
+              targetType: 'user'
             })
           }
           // children
@@ -593,7 +595,8 @@ export default {
               phone: children[j].phone || '',
               relation: '孩子',
               memberId: children[j].userId || children[j].id,
-              source: 'child'
+              source: 'child',
+              targetType: 'member'
             })
           }
           self.familyMembers = list
@@ -617,7 +620,9 @@ export default {
         memberId: member.id,
         name: member.name,
         phone: member.phone,
-        memberId: member.memberId
+        childId: member.childId,
+        targetType: member.targetType,
+        prevPhone: member.phone
       })
     },
     addManualEntry: function() {
@@ -688,6 +693,30 @@ export default {
         }
       }
 
+      // 就地补充的手机号自动回写(仅家庭成员;外部报名人 memberId=null 不回写)
+      var backfillTasks = []
+      for (var b = 0; b < self.registrants.length; b++) {
+        var entryB = self.registrants[b]
+        if (!entryB.memberId) continue
+        var phoneB = (entryB.phone || '').trim()
+        if (phoneB === '') continue
+        var rawId = String(entryB.memberId)
+        var realId = rawId.indexOf('_') >= 0 ? rawId.substring(2) : rawId
+        backfillTasks.push(backfillProfile({
+          targetType: entryB.targetType,
+          targetId: realId,
+          fields: { phone: phoneB },
+          scene: 'activity-signup',
+          prevValues: { phone: entryB.prevPhone }
+        }))
+      }
+      // 回写失败不阻塞报名主流程,仅静默记录
+      if (backfillTasks.length > 0) {
+        Promise.all(backfillTasks).catch(function(err) {
+          console.warn('[backfill] 活动报名信息回写失败', err)
+        })
+      }
+
       // 付费活动 → 先确认支付
       if (self.hasFee && self.registrantsTotal > 0) {
         uni.showModal({
@@ -712,10 +741,16 @@ export default {
       var registrantsData = []
       for (var i = 0; i < self.registrants.length; i++) {
         var entry = self.registrants[i]
+        // memberId 可能带 p_/c_ 前缀(仅回写用),下单需去掉前缀的纯数字
+        var orderMemberId = entry.memberId
+        if (orderMemberId !== null && orderMemberId !== undefined) {
+          var midStr = String(orderMemberId)
+          if (midStr.indexOf('_') >= 0) orderMemberId = midStr.substring(2)
+        }
         registrantsData.push({
           name: entry.name.trim(),
           phone: entry.phone || '',
-          memberId: entry.memberId
+          memberId: orderMemberId
         })
       }