|
|
@@ -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()
|
|
|
}
|
|
|
}
|