接单工单新增流转记录(订单详情时间线)

- 后端:新增工单事件查询接口(管理端 + 打手端),事件带操作人显示名(管理员用户名 / 打手昵称 / 系统)
- 补齐关键节点事件:抢单接手(grabbed)、验收通过(accepted 带操作人)
- 管理端/打手端事件写入操作人(admin session username 贯通至事件)
- 前端:订单详情新增「流转记录」时间线,按订单生命周期节点展示(创建/发单/接手/资料/验收/问题/取消),时间+操作人+状态流转
This commit is contained in:
yml2213
2026-08-16 19:25:20 +08:00
parent 81ae04dae0
commit 950c4fd578
13 changed files with 699 additions and 92 deletions
+141 -65
View File
@@ -15,6 +15,7 @@ import {
deleteAdminWorkerLevel,
getAdminWorkerFinanceConfig,
getAdminWorkerPlatformSummary,
getAdminWorkOrderEvents,
getAdminWorkOrderSharing,
listAdminWorkerFinanceRequests,
listAdminWorkCategories,
@@ -311,7 +312,12 @@ router.post(
'/worker-platform/orders/:workOrderId/material',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler(
(req) => submitAdminWorkOrderMaterial(String(req.params.workOrderId || ''), req.body || {}),
(req) =>
submitAdminWorkOrderMaterial(
String(req.params.workOrderId || ''),
req.body || {},
req.adminSession?.username || '',
),
{
successMessage: '订单资料已保存',
errorMessage: '补充订单资料失败',
@@ -333,6 +339,7 @@ router.put(
(req) =>
updateAdminWorkOrder(String(req.params.workOrderId || ''), req.body || {}, {
canEditRequirementFields: req.adminSession?.role !== 'support',
actorName: req.adminSession?.username || '',
}),
{
successMessage: '工单信息已保存',
@@ -352,7 +359,12 @@ router.post(
'/worker-platform/orders/:workOrderId/assign',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler(
(req) => assignAdminWorkOrderToWorker(String(req.params.workOrderId || ''), req.body || {}),
(req) =>
assignAdminWorkOrderToWorker(
String(req.params.workOrderId || ''),
req.body || {},
req.adminSession?.username || '',
),
{
successMessage: '已指派打手',
errorMessage: '指派打手失败',
@@ -370,24 +382,36 @@ router.post(
router.post(
'/worker-platform/orders/:workOrderId/unassign',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler((req) => unassignAdminWorkOrder(String(req.params.workOrderId || '')), {
successMessage: '已取消指派',
errorMessage: '取消指派失败',
scope: '[admin/worker-platform/orders/:workOrderId/unassign]',
audit: (req, data) => ({
action: 'work_order_worker_unassigned',
targetType: 'work_order',
targetId: String(req.params.workOrderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
}),
createJsonHandler(
(req) =>
unassignAdminWorkOrder(
String(req.params.workOrderId || ''),
req.adminSession?.username || '',
),
{
successMessage: '已取消指派',
errorMessage: '取消指派失败',
scope: '[admin/worker-platform/orders/:workOrderId/unassign]',
audit: (req, data) => ({
action: 'work_order_worker_unassigned',
targetType: 'work_order',
targetId: String(req.params.workOrderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
},
),
)
router.post(
'/worker-platform/orders/:workOrderId/cancel',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler(
(req) => cancelAdminWorkOrder(String(req.params.workOrderId || ''), req.body || {}),
(req) =>
cancelAdminWorkOrder(
String(req.params.workOrderId || ''),
req.body || {},
req.adminSession?.username || '',
),
{
successMessage: '撤单处理完成,打手额度已恢复',
errorMessage: '撤单失败',
@@ -424,40 +448,56 @@ router.delete(
router.post(
'/worker-platform/orders/:workOrderId/publish',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler((req) => publishAdminWorkOrder(String(req.params.workOrderId || '')), {
successMessage: '订单已发布到抢单大厅',
errorMessage: '发布接单订单失败',
scope: '[admin/worker-platform/orders/:workOrderId/publish]',
audit: (req, data) => ({
action: 'work_order_published',
targetType: 'work_order',
targetId: String(req.params.workOrderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
}),
createJsonHandler(
(req) =>
publishAdminWorkOrder(String(req.params.workOrderId || ''), req.adminSession?.username || ''),
{
successMessage: '订单已发布到抢单大厅',
errorMessage: '发布接单订单失败',
scope: '[admin/worker-platform/orders/:workOrderId/publish]',
audit: (req, data) => ({
action: 'work_order_published',
targetType: 'work_order',
targetId: String(req.params.workOrderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
},
),
)
router.post(
'/worker-platform/orders/:workOrderId/unpublish',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler((req) => unpublishAdminWorkOrder(String(req.params.workOrderId || '')), {
successMessage: '订单已撤回到未分配',
errorMessage: '下架接单订单失败',
scope: '[admin/worker-platform/orders/:workOrderId/unpublish]',
audit: (req, data) => ({
action: 'work_order_unpublished',
targetType: 'work_order',
targetId: String(req.params.workOrderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
}),
createJsonHandler(
(req) =>
unpublishAdminWorkOrder(
String(req.params.workOrderId || ''),
req.adminSession?.username || '',
),
{
successMessage: '订单已撤回到未分配',
errorMessage: '下架接单订单失败',
scope: '[admin/worker-platform/orders/:workOrderId/unpublish]',
audit: (req, data) => ({
action: 'work_order_unpublished',
targetType: 'work_order',
targetId: String(req.params.workOrderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
},
),
)
router.post(
'/worker-platform/orders/:workOrderId/pin',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler(
(req) => pinAdminWorkOrder(String(req.params.workOrderId || ''), req.body || {}),
(req) =>
pinAdminWorkOrder(
String(req.params.workOrderId || ''),
req.body || {},
req.adminSession?.username || '',
),
{
successMessage: '置顶状态已更新',
errorMessage: '更新置顶状态失败',
@@ -482,11 +522,26 @@ router.get(
}),
)
router.get(
'/worker-platform/orders/:workOrderId/events',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler((req) => getAdminWorkOrderEvents(String(req.params.workOrderId || '')), {
successMessage: 'ok',
errorMessage: '读取工单流转记录失败',
scope: '[admin/worker-platform/orders/:workOrderId/events]',
}),
)
router.post(
'/worker-platform/orders/:workOrderId/sharing',
requireAdminRoles(['admin', 'operator']),
createJsonHandler(
(req) => updateAdminWorkOrderSharing(String(req.params.workOrderId || ''), req.body || {}),
(req) =>
updateAdminWorkOrderSharing(
String(req.params.workOrderId || ''),
req.body || {},
req.adminSession?.username || '',
),
{
successMessage: '拼单配置已保存',
errorMessage: '保存拼单配置失败',
@@ -505,7 +560,12 @@ router.post(
'/worker-platform/orders/:workOrderId/problem',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler(
(req) => markAdminWorkOrderProblem(String(req.params.workOrderId || ''), req.body || {}),
(req) =>
markAdminWorkOrderProblem(
String(req.params.workOrderId || ''),
req.body || {},
req.adminSession?.username || '',
),
{
successMessage: '订单已标记为问题单',
errorMessage: '标记问题单失败',
@@ -524,7 +584,12 @@ router.post(
'/worker-platform/orders/:workOrderId/problem/resolve',
requireAdminRoles(['admin', 'operator']),
createJsonHandler(
(req) => resolveAdminProblemWorkOrder(String(req.params.workOrderId || ''), req.body || {}),
(req) =>
resolveAdminProblemWorkOrder(
String(req.params.workOrderId || ''),
req.body || {},
req.adminSession?.username || '',
),
{
successMessage: '问题单已处置',
errorMessage: '处置问题单失败',
@@ -542,35 +607,42 @@ router.post(
router.post(
'/worker-platform/orders/:workOrderId/accept',
requireAdminRoles(['admin', 'operator']),
createJsonHandler((req) => acceptAdminWorkOrder(String(req.params.workOrderId || '')), {
successMessage: '订单已验收通过',
errorMessage: '验收接单订单失败',
scope: '[admin/worker-platform/orders/:workOrderId/accept]',
audit: (req, data) => ({
action: 'work_order_accepted',
targetType: 'work_order',
targetId: String(req.params.workOrderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
}),
createJsonHandler(
(req) =>
acceptAdminWorkOrder(String(req.params.workOrderId || ''), req.adminSession?.username || ''),
{
successMessage: '订单已验收通过',
errorMessage: '验收接单订单失败',
scope: '[admin/worker-platform/orders/:workOrderId/accept]',
audit: (req, data) => ({
action: 'work_order_accepted',
targetType: 'work_order',
targetId: String(req.params.workOrderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
},
),
)
router.post(
'/worker-platform/orders/accept-batch',
requireAdminRoles(['admin', 'operator']),
createJsonHandler((req) => acceptAdminWorkOrders(req.body || {}), {
successMessage: '选中订单已验收通过',
errorMessage: '批量验收接单订单失败',
scope: '[admin/worker-platform/orders/accept-batch]',
audit: (req, data) => ({
action: 'work_orders_batch_accepted',
targetType: 'work_order',
targetId: Array.isArray(req.body?.workOrderIds)
? req.body.workOrderIds.map((item: unknown) => String(item)).join(',')
: '',
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
}),
createJsonHandler(
(req) => acceptAdminWorkOrders(req.body || {}, req.adminSession?.username || ''),
{
successMessage: '选中订单已验收通过',
errorMessage: '批量验收接单订单失败',
scope: '[admin/worker-platform/orders/accept-batch]',
audit: (req, data) => ({
action: 'work_orders_batch_accepted',
targetType: 'work_order',
targetId: Array.isArray(req.body?.workOrderIds)
? req.body.workOrderIds.map((item: unknown) => String(item)).join(',')
: '',
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
},
),
)
router.post(
@@ -578,7 +650,11 @@ router.post(
requireAdminRoles(['admin', 'operator']),
createJsonHandler(
(req) =>
deductAdminWorkOrderPendingDeposit(String(req.params.workOrderId || ''), req.body || {}),
deductAdminWorkOrderPendingDeposit(
String(req.params.workOrderId || ''),
req.body || {},
req.adminSession?.username || '',
),
{
successMessage: '待解冻押金已扣减',
errorMessage: '扣减待解冻押金失败',