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

fix(team-invite): 删 modal 虚假恢复承诺 + 同步过时注释(纯文案,零逻辑)

前端核验对 ffc2c8459 的 A/B 资产闸门已全 PASS,仅抓出一条涉及真实 CF 资产的
误导文案,合入前修掉。本轮只改文案与注释,不动任何逻辑闸门。

P1 删虚假恢复承诺:showBindRetryHint 的 modal content 删除「或从邀请链接重新进入」。
核验实证该路径走不通——重进是新实例,onLoad 解析 refCode 后 checkExistingApply 命中
已有 status=0 记录 → showStatusView=true → 表单 v-else 隐藏 → pending 态无补绑入口,
走不到 handleSubmit→bindUserReferral。改为真实可达兜底:
  改前:申请已提交成功,但推荐人未绑定成功。请重试,或从邀请链接重新进入。
  改后:申请已提交成功,但推荐人绑定未成功。请点击「重试绑定」;若已离开本页,请联系邀请人或客服补绑。
保留后端原文 serverMsg 前缀、保留「申请已提交成功」准确表述、保留 confirmText「重试绑定」
及回调、不泛化「提交失败」、不丢后端具体原因。

同步过时注释(非功能):绑定源已改用 this.inviteRefCode,getStorageSync('refCode') 仅残存
于防错配说明注释。修正 :463/:479/:489/:507 处「保留 storage.refCode 以便重试」「失败绝不清码
保证可重试/重新进入」等过时措辞——storage.refCode 已成僵尸字段(不参与绑定、清不清都不影响),
可重试的真正保证是 this.inviteRefCode 组件字段未清 + userRefBound=false + bindingRef=false + modal 回调。

未触碰(核验已 PASS 的资产闸门):doSubmit 返回值语义与唯一 return true 闸门、bindUserReferral
三个调用点与 if(submitted) 前置、userRefBound/bindingRef 幂等防重入、removeStorageSync('refCode')
仅成功分支、两级同源 this.inviteRefCode、openLoginSheet 透传、失败分支不清码、401 统一 reLaunch。

自验:vue-template-compiler 模板编译 + acorn script parse 双 OK;diff 新增行全部为注释/文案,
零逻辑代码改动;无可选链/CSS Grid/新增 emoji;仅改 1 文件。
Agnes Agent 19 часов назад
Родитель
Сommit
ac4ba5613e
1 измененных файлов с 11 добавлено и 8 удалено
  1. 11 8
      cfc-frontend/pages/profile/service-role-apply.vue

+ 11 - 8
cfc-frontend/pages/profile/service-role-apply.vue

@@ -460,8 +460,11 @@ export default {
     // 两级隔离:记录级零副作用、强校验;用户级才发资产。两者同源于组件字段 inviteRefCode。
     // 幂等:userRefBound 成功(含自邀 skipped)置 true,整个流程(含 handleReapply/handleAddRole
     //      多次提交)至多成功一次,避免重复发资产 / 触发后端 CommissionService:140「已绑定推荐人」误报错。
-    // 失败可恢复:失败时保留 storage.refCode、userRefBound 保持 false,弹可见提示 + 就地重试入口;
-    //      用户可点「重试绑定」就地补绑,或从邀请链接重新进入走完整流程。
+    // 失败可恢复:绑定源 this.inviteRefCode 组件字段全程未清、userRefBound 与 bindingRef 均保持 false,
+    //      配合 modal「重试绑定」回调即可就地重新发起绑定(真实可达的恢复路径)。
+    //      注意:storage.refCode 已成僵尸字段(不参与绑定、清不清都不影响),可重试不依赖它;
+    //      「从邀请链接重新进入」也不是补绑路径——重进会命中 checkExistingApply 的 status=0 记录进入审核态、无补绑入口,
+    //      故离开本页后只能联系邀请人/客服补绑,modal 文案据实说明、不承诺走不通的路径。
     async bindUserReferral() {
       if (this.userRefBound) return          // 幂等:已成功绑定过,不重复发资产
       if (this.bindingRef) return            // 防重入:重试连点/异常时序不并发
@@ -472,11 +475,11 @@ export default {
 
       this.bindingRef = true
       try {
-        // await 串行:绑定结果 settle 后才决定清码/置标记/提示,绝不 fire-and-forget
+        // await 串行:绑定结果 settle 后才决定置标记/清僵尸码/提示,绝不 fire-and-forget
         var bindRes = await bindReferralIfNotSelf(code)
         if (bindRes && (bindRes.code === 200 || bindRes.skipped)) {
-          // 仅成功(含自邀 skipped:true)才置幂等标记 + 清用户级码;
-          // 失败分支绝不清码,保证可重试/重新进入补绑(不丢资产)。
+          // 仅成功(含自邀 skipped:true)才置幂等标记,并清掉僵尸字段 storage.refCode(不参与绑定,仅为避免残留)。
+          // 可重试的真正保证是 this.inviteRefCode 组件字段未清 + userRefBound=false + modal 回调,与 storage.refCode 无关。
           this.userRefBound = true
           uni.removeStorageSync('refCode')
           return
@@ -486,7 +489,7 @@ export default {
       } catch (e) {
         // 401 由 request() 统一 reLaunch 登录页,不在这里叠加 modal
         if (e && e.code === 401) return
-        // 失败:保留 storage.refCode、userRefBound 保持 false。
+        // 失败:userRefBound 保持 false、inviteRefCode 未清,故可就地重试(不依赖 storage.refCode)。
         // request() 拦截器已对非 200 业务响应 toast 后端具体 message(如「邀请码无效」「已有推荐人」),
         // 这里用 modal 同时承载后端原文 + 明确重试引导:既不覆盖具体错误,又给出可见的重试入口。
         this.showBindRetryHint(e && e.message)
@@ -499,12 +502,12 @@ export default {
     showBindRetryHint(serverMsg) {
       uni.showModal({
         title: '推荐人绑定失败',
-        content: (serverMsg ? serverMsg + '\n' : '') + '申请已提交成功,但推荐人未绑定成功。请重试,或从邀请链接重新进入。',
+        content: (serverMsg ? serverMsg + '\n' : '') + '申请已提交成功,但推荐人绑定未成功。请点击「重试绑定」;若已离开本页,请联系邀请人或客服补绑。',
         confirmText: '重试绑定',
         cancelText: '稍后',
         success: (res) => {
           if (res.confirm) {
-            // 幂等标记仍为 false、码仍保留,重试会重新发起绑定;成功即置位并清码
+            // 幂等标记仍为 false、bindingRef 已归 false、inviteRefCode 未清,重试重新发起绑定;成功即置位
             this.bindUserReferral()
           }
         }