feat(rock): 绑定错误可直接改买家 UID,提货号继续留在原订单

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yml2213
2026-10-06 17:47:02 +08:00
co-authored by Cursor
parent 0967ecc5db
commit 4b8fc76f36
6 changed files with 262 additions and 12 deletions
+2
View File
@@ -326,6 +326,8 @@ export const rockApi = {
purchaseTokens: (count = 50) => request.post('/platform/rock/purchase', { count }).then((r) => r.data.data),
listTokens: (params?: { page?: number; page_size?: number; status?: string; search?: string }) =>
request.get('/platform/rock/tokens', { params }).then((r) => r.data.data as { list: RockTokenItem[]; total: number; page: number; page_size: number }),
correctExpectedUid: (id: number, expectedUid: string) =>
request.post(`/platform/rock/tokens/${id}/expected-uid`, { expected_uid: expectedUid }).then((r) => r.data.data as { message?: string; status?: string }),
resetToken: (id: number) => request.post(`/platform/rock/tokens/${id}/reset`).then((r) => r.data.data),
releaseToken: (id: number) => request.post(`/platform/rock/tokens/${id}/release`).then((r) => r.data.data),
}
+84 -11
View File
@@ -69,6 +69,8 @@ export default function PlatformRock() {
const [loadingTokens, setLoadingTokens] = useState(false)
const [form] = Form.useForm()
const [uidEdit, setUidEdit] = useState<{ id: number; value: string; scanned: string; roleName: string } | null>(null)
const [savingUid, setSavingUid] = useState(false)
const loadData = useCallback(async () => {
setLoadingStats(true)
@@ -206,6 +208,29 @@ export default function PlatformRock() {
}
}
const handleCorrectUid = async () => {
if (!uidEdit) {
return
}
const nextUid = uidEdit.value.trim()
if (!/^\d{1,15}$/.test(nextUid)) {
message.warning('请填写 15 位以内的纯数字 UID')
return
}
setSavingUid(true)
try {
const res = await rockApi.correctExpectedUid(uidEdit.id, nextUid)
message.success(res.message || '已更新买家 UID')
setUidEdit(null)
loadData()
loadTokens()
} catch (e) {
message.error('修改 UID 失败: ' + (e instanceof Error ? e.message : '未知错误'))
} finally {
setSavingUid(false)
}
}
// 人工重置解冻 Mismatch Token
const handleResetToken = async (id: number) => {
try {
@@ -542,22 +567,38 @@ export default function PlatformRock() {
{
title: '操作',
key: 'action',
width: 140,
width: 168,
fixed: 'right',
render: (_, record) => {
if (record.status === 'mismatch') {
return (
<Popconfirm
title="确定解冻重置该 Token?"
description="重置后将清除原订单绑定与错误标记,重新释放为可用通用库存。"
okText="确认解冻"
cancelText="取消"
onConfirm={() => handleResetToken(record.id)}
>
<Button size="small" type="primary" danger ghost icon={<UndoOutlined />}>
解冻重置
<Space direction="vertical" size={4}>
<Button
size="small"
type="primary"
onClick={() =>
setUidEdit({
id: record.id,
value: record.actual_role_id || record.expected_uid || '',
scanned: record.actual_role_id || '',
roleName: record.actual_role_name || '',
})
}
>
修改 UID
</Button>
</Popconfirm>
<Popconfirm
title="确定解冻重置该 Token?"
description="重置后将清除原订单绑定与错误标记,重新释放为可用通用库存。已扫码的链接放回库存后,其他订单领走就会废掉。"
okText="确认解冻"
cancelText="取消"
onConfirm={() => handleResetToken(record.id)}
>
<Button size="small" danger ghost icon={<UndoOutlined />}>
解冻重置
</Button>
</Popconfirm>
</Space>
)
}
if (record.status === 'using' && !record.bound_at && !record.actual_role_id) {
@@ -1150,6 +1191,38 @@ export default function PlatformRock() {
</div>
</div>
</Modal>
<Modal
title="修改买家填写的 UID"
open={Boolean(uidEdit)}
okText="保存"
cancelText="取消"
confirmLoading={savingUid}
onOk={() => void handleCorrectUid()}
onCancel={() => setUidEdit(null)}
destroyOnClose
>
<p style={{ marginTop: 0, color: '#64748b' }}>
提货号继续留在原订单上,不会放回库存。改成扫码 UID 后,绑定阻断会解除。
</p>
{uidEdit?.scanned ? (
<p>
扫码角色:{uidEdit.roleName ? `「${uidEdit.roleName}」` : ''} {uidEdit.scanned}
</p>
) : null}
<Input
value={uidEdit?.value || ''}
maxLength={15}
placeholder="买家游戏 UID"
onChange={(event) =>
setUidEdit((current) =>
current
? { ...current, value: event.target.value.replace(/\D/g, '').slice(0, 15) }
: current,
)
}
onPressEnter={() => void handleCorrectUid()}
/>
</Modal>
{/* 发货结果图片高清预览弹窗 */}
<Modal
title={