feat(worker): 保留超时订单买家资料与快捷复制功能以方便打手核对辨认

- 调整目的:打手在订单超时退回大厅或被抢后,需要核对游戏内对应的好友与账号以分辨是哪一单,避免误认;
- 列表与抽屉展示:在桌面端表格、移动端卡片及详情抽屉中,恢复买家资料与主页截图展示,保留「复制信息」「复制图片」按钮,并补充「已超时,仅供核对辨认」轻量警示;
- 履约隔离:依然严格禁用一切提交验收、修改截图与申请取消等履约操作;
- 验证方式:通过前端 prettier、eslint、tsc、vitest、vite build 与后端全部 676 个测试。
This commit is contained in:
yml2213
2026-10-11 15:39:10 +08:00
parent c5e8b78a33
commit 966b804bfc
3 changed files with 29 additions and 42 deletions
@@ -171,23 +171,23 @@ export function WorkerOrderDetailDrawer({
</Card>
<Card title="资料信息" size="small">
{renderDetailFieldValues(getMaterialDetailItems(order), '当前还没有资料内容')}
{getMaterialScreenshots(order).length > 0 ? (
<div style={{ marginTop: 12 }}>
<Typography.Text type="secondary">买家主页截图</Typography.Text>
<div style={{ marginTop: 8 }}>
<ImagePreviewList files={getMaterialScreenshots(order)} size={72} />
</div>
</div>
) : null}
{isTimedOut ? (
<Typography.Text type="danger">
工单已超时退回大厅,游戏资料已锁定。严禁在游戏内向买家赠送或履约!
<Typography.Text
type="secondary"
style={{ display: 'block', marginTop: 12, fontSize: 12 }}
>
提示:该订单已超时退回大厅,保留资料仅供核对分辨,请勿在游戏内继续赠送。
</Typography.Text>
) : (
<>
{renderDetailFieldValues(getMaterialDetailItems(order), '当前还没有资料内容')}
{getMaterialScreenshots(order).length > 0 ? (
<div style={{ marginTop: 12 }}>
<Typography.Text type="secondary">买家主页截图</Typography.Text>
<div style={{ marginTop: 8 }}>
<ImagePreviewList files={getMaterialScreenshots(order)} size={72} />
</div>
</div>
) : null}
</>
)}
) : null}
</Card>
{isFriendGiftOrder(order) && order.gift && !isTimedOut ? (
@@ -340,21 +340,7 @@ function WorkerOrderMobileCard({
<span>{order.problemNote}</span>
</div>
) : null}
{order.status === 'open' || order.timeoutNotice?.isTimedOut ? (
<div
style={{
padding: '10px 12px',
background: '#fafafa',
border: '1px dashed #d9d9d9',
borderRadius: 6,
margin: '8px 12px',
color: 'rgba(0,0,0,0.45)',
fontSize: 12,
}}
>
工单已超时退回大厅,资料已锁定,禁止继续向该买家履约。
</div>
) : items.length > 0 || screenshots.length > 0 ? (
{items.length > 0 || screenshots.length > 0 ? (
<div className="worker-order-mobile-credentials-box">
{items.length > 0 ? (
<div className="worker-order-mobile-credentials-grid">
@@ -390,6 +376,13 @@ function WorkerOrderMobileCard({
复制图片
</Button>
) : null}
{order.status === 'open' || order.timeoutNotice?.isTimedOut ? (
<span
style={{ fontSize: 11, color: '#cf1322', marginLeft: 'auto', alignSelf: 'center' }}
>
⚠️ 已超时核对
</span>
) : null}
</div>
</div>
) : null}
@@ -182,20 +182,9 @@ export function buildWorkerOrderTableColumns({
title: '快捷复制',
width: 250,
render: (_, row) => {
if (row.status === 'open' || row.timeoutNotice?.isTimedOut) {
return (
<div className="cell-stack">
<Typography.Text type="danger" style={{ fontSize: 12 }}>
工单已超时退回大厅
</Typography.Text>
<Typography.Text type="secondary" style={{ fontSize: 12 }}>
已锁定资料,禁止继续履约
</Typography.Text>
</div>
)
}
const items = getMaterialDetailItems(row).filter((item) => String(item.value || '').trim())
const screenshots = getMaterialScreenshots(row)
const isTimedOut = row.status === 'open' || Boolean(row.timeoutNotice?.isTimedOut)
return (
<div className="cell-stack">
{items.length > 0 ? (
@@ -233,6 +222,11 @@ export function buildWorkerOrderTableColumns({
</Button>
) : null}
</Space>
{isTimedOut ? (
<Typography.Text type="danger" style={{ fontSize: 11, lineHeight: 1.2 }}>
⚠️ 已超时,仅供核对辨认
</Typography.Text>
) : null}
</div>
)
},