4.2 KiB
4.2 KiB
Query 邀请码与新版 profile referral 入口关系(2026-05-07)
会话结论
用户指出:邀请码填写流程已经修改,登录窗口目前填写不了邀请码;邀请码填写被挪到了第一次登录后以及“我的”页签中。
因此后续回答或修改时不能只根据 AuthGate 里的旧逻辑判断“已支持”。
当前代码观察
旧 AuthGate 逻辑
文件:src/components/auth/AuthGate.tsx
readInviteCodeFromLocation()读取window.location.search。- 支持
inviteCode/invite_code。 - 会 normalize 为大写字母数字。
- 写入
pendingInviteCode,传给RegistrationInviteModal。
这只能说明“旧层仍有 query 读取”。
新版 profile referral 入口
文件:src/components/rpg-entry/RpgEntryHomeView.tsx
- “我的”页签标签为
profile。 - 兑换输入状态:
referralRedeemCode。 - 打开填邀请码面板:
openProfilePopupPanel('redeem')。 - 提交兑换:
submitReferralRedeemCode()。 - 可显示快捷入口受
canShowReferralRedeemShortcut控制。
文件:src/services/rpg-entry/rpgProfileClient.ts
getRpgProfileReferralInviteCenter()->GET /profile/referrals/invite-centerredeemRpgProfileReferralInviteCode(inviteCode)->POST /profile/referrals/redeem-code
回答口径
如果被问“是否支持 query 参数读取邀请码”,应回答:
- 代码里仍有 query 读取,支持
inviteCode/invite_code。 - 但登录窗口不再填写邀请码。
- 新版入口在第一次登录后 / 我的页签;需要检查
referralRedeemCode是否从 query 初始化。 - 若没有该连接,就不能说新版流程完整支持 query 预填。
本次实现后的状态
已将 query 邀请码读取接入新版 RpgEntryHomeView:
PROFILE_INVITE_QUERY_KEYS = ['inviteCode', 'invite_code']normalizeProfileInviteQueryCode():去除非字母数字并转大写。readProfileInviteCodeFromLocationSearch(window.location.search):读取 query 邀请码。pendingProfileInviteCode:组件初始化时读取 query。referralRedeemCode:用pendingProfileInviteCode初始化。openProfilePopupPanel('redeem'):打开“填邀请码”时重新写入pendingProfileInviteCode,避免首次打开或重新打开时丢失 query 预填。
当前行为:只预填,不自动弹出“填邀请码”面板;用户仍需在“我的”页签点击“填邀请码”。
验证测试:
cd <repo-root>
npm test -- --run src/components/rpg-entry/RpgEntryHomeView.recharge.test.tsx
npx eslint src/components/rpg-entry/RpgEntryHomeView.tsx src/components/rpg-entry/RpgEntryHomeView.recharge.test.tsx --max-warnings=0
node scripts/check-encoding.mjs
测试用例:profile redeem invite modal reads query invite code after login 覆盖 /?inviteCode=spring-2026 预填为 SPRING2026。
后续调整:带邀请码链接自动开窗
用户进一步明确期望:
- 如果用户未登录,直接打开登录窗口。
- 如果用户已登录,直接打开邀请码填写窗口。
实现要点:
- 在
RpgEntryHomeView.tsx中保留pendingProfileInviteCode作为 query 邀请码来源。 - 新增
autoOpenedInviteQueryRef = useRef(false),防止 effect 重复触发弹窗。 - 新增
useEffect:- 无 query 邀请码或已处理过则 return。
- 未登录:调用
authUi?.openLoginModal()。 - 已登录:设置
referralRedeemCode、清空 referral 错误/成功提示、setProfilePopupPanel('redeem')。
- 登录窗口仍不接收邀请码;邀请码只在登录后的 profile referral redeem 面板显示。
- 仍然只自动打开和预填,不自动提交兑换。
补充测试:
invite query opens login modal for logged out usersinvite query opens redeem modal directly for logged in users- 原
profile redeem invite modal reads query invite code after login同步调整为直接断言自动打开后的输入值。
验证命令仍为:
cd <repo-root>
npm test -- --run src/components/rpg-entry/RpgEntryHomeView.recharge.test.tsx
npx eslint src/components/rpg-entry/RpgEntryHomeView.tsx src/components/rpg-entry/RpgEntryHomeView.recharge.test.tsx --max-warnings=0
node scripts/check-encoding.mjs