fix(douyu): 和平小店绑定二维码自动弹出 + 扫码后自动更新角色
- 后端: get_xpd_bind_qr 生成二维码后保持 running, 每 5s 轮询 bindInfo(最长 300s), 检测到绑定即回写角色并自动结束 - 前端: hasBindQrcode 纳入 get_xpd_bind_qr → 新二维码自动弹出; 弹窗显示等待扫码/绑定成功状态与角色; 对 xpd 任务隐藏 不适用的"查询角色/确认绑定"按钮
This commit is contained in:
@@ -176,7 +176,8 @@ function bindReadyForConfirm(task: DouyuTaskItem | null | undefined): boolean {
|
||||
}
|
||||
|
||||
function hasBindQrcode(task: DouyuTaskItem | null | undefined): boolean {
|
||||
if (!task || task.task_type !== 'get_bind_qr') return false;
|
||||
if (!task) return false;
|
||||
if (!['get_bind_qr', 'get_xpd_bind_qr'].includes(task.task_type)) return false;
|
||||
// 有二维码,或已有待确认角色(无需再扫码)都应可展示绑定面板
|
||||
return Boolean(resultText(task.result, 'url'))
|
||||
|| bindReadyForConfirm(task)
|
||||
@@ -1053,10 +1054,12 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind })
|
||||
)
|
||||
),
|
||||
);
|
||||
const qrBindReady = bindReadyForConfirm(qrTask) || qrQueryPending;
|
||||
const isXpdBindTask = qrTask?.task_type === 'get_xpd_bind_qr';
|
||||
const qrXpdBound = Boolean(isXpdBindTask && resultFlag(qrResult, 'xpd_bound'));
|
||||
const qrBindReady = bindReadyForConfirm(qrTask) || qrQueryPending || qrXpdBound;
|
||||
const qrRoleSourceResult = qrQueryPending
|
||||
? qrQueryResult
|
||||
: (bindReadyForConfirm(qrTask) ? qrResult : null);
|
||||
: (bindReadyForConfirm(qrTask) || qrXpdBound ? qrResult : null);
|
||||
// 待确认角色优先用 pending_* 字段(已绑定角色之外的扫码新角色)
|
||||
const qrRoleName = resultText(qrRoleSourceResult, 'pending_role_name') || resultText(qrRoleSourceResult, 'role_name');
|
||||
const qrAreaName = resultText(qrRoleSourceResult, 'pending_area_name') || resultText(qrRoleSourceResult, 'area_name');
|
||||
@@ -1090,12 +1093,16 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind })
|
||||
: '';
|
||||
const qrBindSummary = resultText(qrResult, 'bind_summary') || resultText(qrQueryResult, 'bind_summary');
|
||||
const qrStatusText = qrBindReady
|
||||
? '已识别角色,待确认'
|
||||
: qrQueryRunning
|
||||
? '查询角色中'
|
||||
: qrQueryTask && qrQueryTask.id > (qrTask?.id || 0) && qrQueryTask.status === 'success' && qrQueryIsBoundAct
|
||||
? '查询结果:仍是当前绑定角色'
|
||||
: bindPhaseText(qrBindPhase, qrAutoPolling);
|
||||
? (isXpdBindTask ? '绑定成功' : '已识别角色,待确认')
|
||||
: (isXpdBindTask && qrTask?.status === 'failed')
|
||||
? '未检测到绑定'
|
||||
: (isXpdBindTask && qrTask?.status === 'running')
|
||||
? '等待扫码绑定'
|
||||
: qrQueryRunning
|
||||
? '查询角色中'
|
||||
: qrQueryTask && qrQueryTask.id > (qrTask?.id || 0) && qrQueryTask.status === 'success' && qrQueryIsBoundAct
|
||||
? '查询结果:仍是当前绑定角色'
|
||||
: bindPhaseText(qrBindPhase, qrAutoPolling);
|
||||
const qrAccountName = qrTask
|
||||
? (qrTask.account_nickname || qrTask.account_username || qrTask.account_uid || `#${qrTask.account_id}`)
|
||||
: '';
|
||||
@@ -2112,24 +2119,26 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind })
|
||||
最近查询: {qrQueryTask.message}
|
||||
</Text>
|
||||
) : null}
|
||||
<Space>
|
||||
<Button
|
||||
icon={<SearchOutlined />}
|
||||
onClick={queryQrRole}
|
||||
loading={qrQueryRunning}
|
||||
disabled={qrAutoPolling}
|
||||
>
|
||||
{qrAutoPolling ? '自动识别中' : '查询角色'}
|
||||
</Button>
|
||||
<Button
|
||||
type="primary"
|
||||
icon={<CheckCircleOutlined />}
|
||||
onClick={confirmQrBind}
|
||||
disabled={!qrBindReady}
|
||||
>
|
||||
确认绑定
|
||||
</Button>
|
||||
</Space>
|
||||
{!isXpdBindTask && (
|
||||
<Space>
|
||||
<Button
|
||||
icon={<SearchOutlined />}
|
||||
onClick={queryQrRole}
|
||||
loading={qrQueryRunning}
|
||||
disabled={qrAutoPolling}
|
||||
>
|
||||
{qrAutoPolling ? '自动识别中' : '查询角色'}
|
||||
</Button>
|
||||
<Button
|
||||
type="primary"
|
||||
icon={<CheckCircleOutlined />}
|
||||
onClick={confirmQrBind}
|
||||
disabled={!qrBindReady}
|
||||
>
|
||||
确认绑定
|
||||
</Button>
|
||||
</Space>
|
||||
)}
|
||||
</Space>
|
||||
</div>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user