fix(claim): 领取页展示游戏角色名,并说明乐玩免扫码场景
持久化 affiliate_dash roleName/gameChannel;免扫码授权时明确提示,有绑定链接时提交前仍可显示二维码。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -46,6 +46,10 @@ export function AffiliateDashClaimPanel({
|
||||
)
|
||||
const canSubmit = Boolean(bound && boundAccountMatched && !bindMismatch)
|
||||
const displayBoundAccount = boundAccount || '-'
|
||||
const roleName = String(affiliateDash.roleName || '').trim()
|
||||
const gameChannel = String(affiliateDash.gameChannel || '').trim()
|
||||
const hasBindQr = Boolean(qrCodeDataUrl)
|
||||
const skipScanAuthorized = Boolean(canSubmit && !hasBindQr)
|
||||
|
||||
return (
|
||||
<Card className="claim-content-card">
|
||||
@@ -55,7 +59,9 @@ export function AffiliateDashClaimPanel({
|
||||
</Typography.Title>
|
||||
<p>
|
||||
{canSubmit
|
||||
? '账号绑定成功,确认无误后提交发货'
|
||||
? skipScanAuthorized
|
||||
? '账号已在平台授权,确认无误后提交发货(无需再次扫码)'
|
||||
: '账号绑定成功,确认无误后提交发货'
|
||||
: bindMismatch
|
||||
? '绑定账号与填写 UID 不一致,请核对 UID 后用正确账号重新绑定'
|
||||
: bound
|
||||
@@ -107,7 +113,13 @@ export function AffiliateDashClaimPanel({
|
||||
showIcon
|
||||
icon={<CheckCircleOutlined />}
|
||||
message={`已绑定账号:${displayBoundAccount}`}
|
||||
description={affiliateDash.gameChannel ? `渠道:${affiliateDash.gameChannel}` : undefined}
|
||||
description={[
|
||||
roleName ? `游戏角色:${roleName}` : '',
|
||||
gameChannel ? `渠道:${gameChannel}` : '',
|
||||
skipScanAuthorized ? '该账号此前已授权,本次免扫码' : '',
|
||||
]
|
||||
.filter(Boolean)
|
||||
.join(' · ') || undefined}
|
||||
style={{ marginBottom: 16 }}
|
||||
/>
|
||||
) : null}
|
||||
@@ -135,7 +147,7 @@ export function AffiliateDashClaimPanel({
|
||||
>
|
||||
Q区用Q扫
|
||||
</span>
|
||||
{qrCodeDataUrl ? (
|
||||
{hasBindQr ? (
|
||||
<img
|
||||
src={qrCodeDataUrl}
|
||||
alt="绑定二维码"
|
||||
@@ -158,16 +170,30 @@ export function AffiliateDashClaimPanel({
|
||||
</span>
|
||||
</div>
|
||||
) : (
|
||||
<Button
|
||||
type="primary"
|
||||
size="large"
|
||||
loading={submittingSubmit}
|
||||
disabled={submittingSubmit}
|
||||
onClick={onSubmit}
|
||||
style={{ marginBottom: 16 }}
|
||||
>
|
||||
提交发货
|
||||
</Button>
|
||||
<>
|
||||
<Button
|
||||
type="primary"
|
||||
size="large"
|
||||
loading={submittingSubmit}
|
||||
disabled={submittingSubmit}
|
||||
onClick={onSubmit}
|
||||
style={{ marginBottom: 16 }}
|
||||
>
|
||||
提交发货
|
||||
</Button>
|
||||
{hasBindQr ? (
|
||||
<div style={{ marginBottom: 16, textAlign: 'center' }}>
|
||||
<Typography.Text type="secondary" style={{ display: 'block', marginBottom: 8 }}>
|
||||
如需换号可重新扫码绑定
|
||||
</Typography.Text>
|
||||
<img
|
||||
src={qrCodeDataUrl}
|
||||
alt="绑定二维码"
|
||||
style={{ width: 160, height: 160, borderRadius: 8 }}
|
||||
/>
|
||||
</div>
|
||||
) : null}
|
||||
</>
|
||||
)}
|
||||
</Card>
|
||||
)
|
||||
@@ -176,6 +202,11 @@ export function AffiliateDashClaimPanel({
|
||||
export function AffiliateDashResultStep({ snapshot }: { snapshot: ClaimSnapshot }) {
|
||||
const affiliateDash = snapshot.affiliateDash
|
||||
const success = Boolean(affiliateDash && !snapshot.isRedeemFailed)
|
||||
const roleName = String(affiliateDash?.roleName || '').trim()
|
||||
const gameChannel = String(affiliateDash?.gameChannel || '').trim()
|
||||
const boundAccount = String(
|
||||
affiliateDash?.boundAccount || affiliateDash?.gameAccount || '',
|
||||
).trim()
|
||||
|
||||
return (
|
||||
<Card className="claim-content-card">
|
||||
@@ -193,10 +224,9 @@ export function AffiliateDashResultStep({ snapshot }: { snapshot: ClaimSnapshot
|
||||
|
||||
<div className="claim-info-grid">
|
||||
<InfoTile label="领取商品" value={snapshot.product?.title || '-'} />
|
||||
<InfoTile
|
||||
label="绑定账号"
|
||||
value={affiliateDash?.boundAccount || affiliateDash?.gameAccount || '-'}
|
||||
/>
|
||||
<InfoTile label="绑定账号" value={boundAccount || '-'} />
|
||||
<InfoTile label="游戏角色" value={roleName || '-'} />
|
||||
<InfoTile label="游戏渠道" value={gameChannel || '-'} />
|
||||
<InfoTile label="结果时间" value={formatAdminDateTime(snapshot.task?.redeemedAt || null)} />
|
||||
</div>
|
||||
|
||||
|
||||
@@ -67,7 +67,15 @@ export default function ClaimPage() {
|
||||
if (expectedUid) {
|
||||
setUidInput(expectedUid)
|
||||
}
|
||||
await generateQRCode(String(nextDetail.affiliateDash?.bindUrl || '').trim())
|
||||
const bindUrl = String(nextDetail.affiliateDash?.bindUrl || '').trim()
|
||||
const qrUrl = String(nextDetail.affiliateDash?.qrUrl || '').trim()
|
||||
if (bindUrl) {
|
||||
await generateQRCode(bindUrl)
|
||||
} else if (qrUrl) {
|
||||
setQrCodeDataUrl(qrUrl)
|
||||
} else {
|
||||
setQrCodeDataUrl('')
|
||||
}
|
||||
},
|
||||
[generateQRCode],
|
||||
)
|
||||
|
||||
@@ -193,6 +193,9 @@ function resolveProgressText(options: {
|
||||
if (!options.isAffiliateDashReadyToSubmit) {
|
||||
return '绑定账号确认中,请稍候'
|
||||
}
|
||||
if (!(options.affiliateDash?.bindUrl || options.affiliateDash?.qrUrl)) {
|
||||
return '账号已授权,请确认提交发货'
|
||||
}
|
||||
return '已绑定,请提交发货'
|
||||
}
|
||||
return '当前领取流程不可用'
|
||||
|
||||
@@ -183,6 +183,7 @@ export interface ClaimAffiliateDashFlowInfo {
|
||||
bindMismatch: boolean
|
||||
bound: boolean
|
||||
boundAccount: string
|
||||
roleName: string
|
||||
gameChannel: string
|
||||
submitStatus: string
|
||||
consumeStatus: string
|
||||
|
||||
Reference in New Issue
Block a user