feat(douyu): 支持管理员取消作废协作单

This commit is contained in:
yml2213
2026-11-06 15:42:19 +08:00
parent 973042288f
commit afcbff2207
3 changed files with 233 additions and 7 deletions
+53 -6
View File
@@ -748,6 +748,14 @@ export default function DouyuCollabPage() {
setBatchStatusRollback(false);
};
const openRestoreVoid = (order: DouyuCollabOrder) => {
setStatusTarget(order);
setBatchStatusOpen(false);
setStatusValue('incomplete');
setStatusReason('');
setBatchStatusRollback(false);
};
const openBatchStatus = () => {
if (selectedIds.length === 0) {
message.warning('请先勾选协作单');
@@ -800,13 +808,14 @@ export default function DouyuCollabPage() {
} else if (statusTarget) {
const currentIndex = FLOW_ORDER.indexOf(statusTarget.status);
const targetIndex = FLOW_ORDER.indexOf(statusValue);
const restoringVoid = statusTarget.status === 'void';
await douyuCollabApi.setStatus(statusTarget.id, {
status: statusValue,
reason: statusReason,
rollback: targetIndex >= 0 && currentIndex >= 0 && targetIndex < currentIndex,
expected_version: statusTarget.version,
});
message.success('状态已更新');
message.success(restoringVoid ? '已取消作废并恢复状态' : '状态已更新');
setSelectedRowKeys((keys) => keys.filter((key) => Number(key) !== statusTarget.id));
setStatusTarget(null);
}
@@ -1350,6 +1359,17 @@ export default function DouyuCollabPage() {
</Dropdown>
</>
)}
{canEdit && !row.is_archived && row.status === 'void' && isAdmin && (
<Tooltip title="仅超级管理员可将已作废订单恢复为其它状态">
<Button
size="small"
icon={<UndoOutlined />}
onClick={() => openRestoreVoid(row)}
>
取消作废
</Button>
</Tooltip>
)}
{row.is_archived && canEdit && (
<Button size="small" icon={<UndoOutlined />} onClick={() => void unarchiveOrders(row)}>
取消归档
@@ -1960,7 +1980,13 @@ export default function DouyuCollabPage() {
</Modal>
<Modal
title={batchStatusOpen ? `批量改状态(${selectedCount} 单)` : `改状态:${statusTarget?.order_no || ''}`}
title={
batchStatusOpen
? `批量改状态(${selectedCount} 单)`
: statusTarget?.status === 'void'
? `取消作废:${statusTarget.order_no}`
: `改状态:${statusTarget?.order_no || ''}`
}
open={batchStatusOpen || Boolean(statusTarget)}
onCancel={() => {
setBatchStatusOpen(false);
@@ -1968,7 +1994,13 @@ export default function DouyuCollabPage() {
}}
onOk={() => void submitStatus()}
confirmLoading={statusBusy}
okText={batchStatusOpen ? `改成「${STATUS_META[statusValue].label}」` : '确定'}
okText={
batchStatusOpen
? `改成「${STATUS_META[statusValue].label}」`
: statusTarget?.status === 'void'
? `恢复为「${STATUS_META[statusValue].label}」`
: '确定'
}
okButtonProps={{
disabled: batchStatusOpen && batchRollbackRequired && !batchStatusRollback,
}}
@@ -1978,13 +2010,26 @@ export default function DouyuCollabPage() {
style={{ width: '100%' }}
value={statusValue}
onChange={(value: DouyuCollabStatus) => setStatusValue(value)}
options={STATUS_ORDER.map((item) => ({
options={STATUS_ORDER.filter(
(item) => !(statusTarget?.status === 'void' && item === 'void'),
).map((item) => ({
value: item,
label: STATUS_META[item].label,
}))}
/>
{statusValue === 'void' && (
<Alert type="warning" showIcon message="作废后不可恢复;请在备注里写作废原因。" />
<Alert
type="warning"
showIcon
message="作废后普通用户不能恢复;如需恢复,请由管理员取消作废。"
/>
)}
{statusTarget?.status === 'void' && (
<Alert
type="warning"
showIcon
message="管理员操作:订单会恢复为所选状态,原作废原因会保留在审计记录中。"
/>
)}
{batchStatusOpen && (
<>
@@ -2009,7 +2054,9 @@ export default function DouyuCollabPage() {
<Input.TextArea
rows={2}
value={statusReason}
placeholder="原因 / 备注(可选)"
placeholder={
statusTarget?.status === 'void' ? '取消作废原因(可选)' : '原因 / 备注(可选)'
}
onChange={(event) => setStatusReason(event.target.value)}
/>
</Space>