feat(douyu): 和平小店绑定功能(生成绑定二维码/查询绑定信息)

- activity_client: xpd_bind_qr(roleParam 签发 livelink 绑定链接, 微信扫码进小程序绑定)
  + xpd_bind_info(bindInfo 查询绑定状态/角色/平台), gameRole 非 dict 边界防护
- runner/service: 注册 get_xpd_bind_qr / query_xpd_bind_info 任务, 回写
  xpd_game_name / xpd_bind_status
- router: get_xpd_bind_qr 的 url 加入列表接口保留白名单(二维码展示)
- 前端: 和平小店面板新增两个按钮, 二维码列支持 get_xpd_bind_qr 展示/放大
This commit is contained in:
yml2213
2026-08-06 17:33:11 +08:00
parent fdc74eba8c
commit 5f63d77dc3
5 changed files with 127 additions and 1 deletions
@@ -84,6 +84,8 @@ const ESPORTS_QUICK_ACTIONS = [
];
const PEACE_QUICK_ACTIONS = [
{ key: 'get_xpd_bind_qr', icon: <QrcodeOutlined /> },
{ key: 'query_xpd_bind_info', icon: <SearchOutlined /> },
{ key: 'query_xpd_role', icon: <SearchOutlined /> },
{ key: 'refresh_xpd_goods', icon: <ReloadOutlined /> },
{ key: 'query_xpd_balance', icon: <SearchOutlined /> },
@@ -122,6 +124,8 @@ const ESPORTS_TASK_TYPES = new Set([
'donate_esports_firework_gift',
]);
const PEACE_TASK_TYPES = new Set([
'get_xpd_bind_qr',
'query_xpd_bind_info',
'query_xpd_role',
'refresh_xpd_goods',
'query_xpd_balance',
@@ -149,6 +153,7 @@ function resultFlag(result: Record<string, unknown> | null | undefined, key: str
function taskQrUrl(task: DouyuTaskItem | null | undefined): string {
if (!task) return '';
if (task.task_type === 'get_bind_qr') return resultText(task.result, 'url');
if (task.task_type === 'get_xpd_bind_qr') return resultText(task.result, 'url');
if (['create_elite_qr', 'create_esports_qr', 'create_gold_qr'].includes(task.task_type)) {
return resultText(task.result, 'pay_url');
}
@@ -1323,6 +1328,7 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind })
if (!task) return;
if (hasBindQrcode(task)) openQrTask(task);
else if (hasPaymentQrcode(task)) openPayTask(task);
else if (task.task_type === 'get_xpd_bind_qr') openQrTask(task);
else openEsportsBindTask(task);
};
return (
@@ -1442,6 +1448,8 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind })
<span></span>
</div>
<Space direction="vertical" style={{ width: '100%' }} size={6}>
{renderActionButton('get_xpd_bind_qr', 'primary')}
{renderActionButton('query_xpd_bind_info', 'primary')}
{renderActionButton('query_xpd_role', 'primary')}
{renderActionButton('query_xpd_balance', 'primary')}
{renderActionButton('refresh_xpd_goods')}