import { Router } from 'express' import { closeAdminTask, confirmAdminTaskAssistedRole, completeAdminTaskManualDispatch, getAdminTaskDetail, getAdminTaskScreenshotPath, getAdminTasks, markAdminTaskManualReview, regenerateAdminTaskClaimLink, redeemAdminTaskAssisted, releaseAdminTaskInventoryBinding, releaseAdminTaskInventory, retryAdminTask, } from '../../services/admin/admin-service.js' import { createFileHandler, createJsonHandler, requireAdminRoles } from './shared.js' const router = Router() router.get('/tasks', createJsonHandler( (req) => getAdminTasks(req.query, req.adminSession), { successMessage: 'ok', errorMessage: '读取任务列表失败', scope: '[admin/tasks]', }, )) router.get('/tasks/:taskId', createJsonHandler( (req) => getAdminTaskDetail(req.params.taskId, req.adminSession), { successMessage: 'ok', errorMessage: '读取任务详情失败', scope: '[admin/tasks/:taskId]', }, )) router.get('/tasks/:taskId/screenshot', createFileHandler( (req) => getAdminTaskScreenshotPath(req.params.taskId, req.adminSession), { errorMessage: '读取任务截图失败', scope: '[admin/tasks/:taskId/screenshot]', }, )) router.post('/tasks/:taskId/retry', requireAdminRoles(['admin', 'operator']), createJsonHandler( (req) => retryAdminTask(req.params.taskId), { successMessage: '任务已重试', errorMessage: '重试任务失败', scope: '[admin/tasks/:taskId/retry]', }, )) router.post('/tasks/:taskId/release-inventory', requireAdminRoles(['admin']), createJsonHandler( (req) => releaseAdminTaskInventory(req.params.taskId), { successMessage: '库存凭据已释放', errorMessage: '释放库存凭据失败', scope: '[admin/tasks/:taskId/release-inventory]', audit: (req, data) => ({ action: 'task_release_inventory', targetType: 'task', targetId: String(req.params.taskId), data: { taskId: data.task.taskId, taskNo: data.task.taskNo, inventoryItemId: data.task.inventoryItemId, }, }), }, )) router.post('/tasks/:taskId/inventory-bindings/:bindingId/release', requireAdminRoles(['admin']), createJsonHandler( (req) => releaseAdminTaskInventoryBinding(req.params.taskId, req.params.bindingId), { successMessage: '库存绑定已释放', errorMessage: '释放库存绑定失败', scope: '[admin/tasks/:taskId/inventory-bindings/:bindingId/release]', audit: (req, data) => ({ action: 'task_release_inventory_binding', targetType: 'task_inventory_binding', targetId: String(req.params.bindingId), data: { taskId: data.task.taskId, taskNo: data.task.taskNo, bindingId: data.bindingId, inventoryItemId: data.inventoryItemId, }, }), }, )) router.post('/tasks/:taskId/regenerate-claim-link', requireAdminRoles(['admin', 'operator', 'support']), createJsonHandler( (req) => regenerateAdminTaskClaimLink(req.params.taskId, req.adminSession), { successMessage: '领取链接已重新生成', errorMessage: '重新生成领取链接失败', scope: '[admin/tasks/:taskId/regenerate-claim-link]', audit: (req, data) => ({ action: 'task_regenerate_claim_link', targetType: 'task', targetId: String(req.params.taskId), data: { taskId: data.task.taskId, taskNo: data.task.taskNo, primaryClaimTokenId: data.task.primaryClaimTokenId, }, }), }, )) router.post('/tasks/:taskId/support-confirm-role', requireAdminRoles(['admin', 'operator', 'support']), createJsonHandler( (req) => confirmAdminTaskAssistedRole(req.params.taskId, req.adminSession), { successMessage: '角色已确认', errorMessage: '客服确认角色失败', scope: '[admin/tasks/:taskId/support-confirm-role]', audit: (req, data) => ({ action: 'task_support_confirm_role', targetType: 'task', targetId: String(req.params.taskId), data: { taskId: data.task.taskId, taskNo: data.task.taskNo, status: data.task.status, }, }), }, )) router.post('/tasks/:taskId/support-redeem', requireAdminRoles(['admin', 'operator', 'support']), createJsonHandler( (req) => redeemAdminTaskAssisted(req.params.taskId, req.adminSession), { successMessage: '兑换任务已启动', errorMessage: '客服发起兑换失败', scope: '[admin/tasks/:taskId/support-redeem]', audit: (req, data) => ({ action: 'task_support_redeem', targetType: 'task', targetId: String(req.params.taskId), data: { taskId: data.task.taskId, taskNo: data.task.taskNo, status: data.task.status, deliveryStatus: data.task.deliveryStatus, }, }), }, )) router.post('/tasks/:taskId/close', requireAdminRoles(['admin', 'operator']), createJsonHandler( (req) => closeAdminTask(req.params.taskId), { successMessage: '任务已关闭', errorMessage: '关闭任务失败', scope: '[admin/tasks/:taskId/close]', audit: (req, data) => ({ action: 'task_closed', targetType: 'task', targetId: String(req.params.taskId), data: { taskId: data.task.taskId, taskNo: data.task.taskNo, status: data.task.status, }, }), }, )) router.post('/tasks/:taskId/mark-manual-review', requireAdminRoles(['admin', 'operator']), createJsonHandler( (req) => markAdminTaskManualReview(req.params.taskId), { successMessage: '任务已转人工处理', errorMessage: '标记人工处理失败', scope: '[admin/tasks/:taskId/mark-manual-review]', audit: (req, data) => ({ action: 'task_mark_manual_review', targetType: 'task', targetId: String(req.params.taskId), data: { taskId: data.task.taskId, taskNo: data.task.taskNo, status: data.task.status, }, }), }, )) router.post('/tasks/:taskId/complete-manual-dispatch', requireAdminRoles(['admin', 'operator']), createJsonHandler( (req) => completeAdminTaskManualDispatch(req.params.taskId, req.body, req.adminSession), { successMessage: '人工履约结果已回写', errorMessage: '回写人工履约结果失败', scope: '[admin/tasks/:taskId/complete-manual-dispatch]', audit: (req, data) => ({ action: 'task_complete_manual_dispatch', targetType: 'task', targetId: String(req.params.taskId), data: { taskId: data.task.taskId, taskNo: data.task.taskNo, outcome: data.outcome, deliveryStatus: data.task.deliveryStatus, resultCode: data.task.resultCode, }, }), }, )) export default router