将退单审核文案明确为打手退单

This commit is contained in:
yml2213
2026-08-23 18:19:47 +08:00
parent 003c3e9208
commit e189811617
14 changed files with 37 additions and 31 deletions
@@ -0,0 +1,6 @@
-- 063_worker_cancel_request_wording_v2.sql —— 将退单审核文案明确为打手退单。
UPDATE admin_permissions
SET
permission_name = '审核打手退单申请',
description = '审核打手提交的退单申请'
WHERE permission_key = 'worker_cancel_request.review';
@@ -201,8 +201,8 @@ async function applyWorkerCancelRequestPenaltyWithClient(
return { levelBeforeId, levelChanged: true, accountDisabled: false } return { levelBeforeId, levelChanged: true, accountDisabled: false }
} }
/** 打手提交取消订单申请;待审核期间订单与押金均保持原状。 */ /** 打手提交退单申请;待审核期间订单与押金均保持原状。 */
/** 批量查询打手在各工单上待审核的取消订单申请,用于订单角标与问题单归类。 */ /** 批量查询打手在各工单上待审核的退单申请,用于订单角标与问题单归类。 */
export async function getPendingCancelRequestOrderIds( export async function getPendingCancelRequestOrderIds(
workerId: number, workerId: number,
workOrderIds: number[], workOrderIds: number[],
@@ -503,7 +503,7 @@ export async function reviewWorkerCancelRequest(input: {
`INSERT INTO worker_wallet_ledgers ( `INSERT INTO worker_wallet_ledgers (
worker_id, ledger_type, amount, balance_after, frozen_after, worker_id, ledger_type, amount, balance_after, frozen_after,
related_work_order_id, note, payload_json, created_at related_work_order_id, note, payload_json, created_at
) VALUES ($1, 'deposit_release', $2, $3, $4, $5, '取消订单申请审核通过退还拼单押金', $6::jsonb, $7)`, ) VALUES ($1, 'deposit_release', $2, $3, $4, $5, '打手退单申请审核通过退还拼单押金', $6::jsonb, $7)`,
[ [
request.worker_id, request.worker_id,
releasedDepositAmount, releasedDepositAmount,
@@ -583,8 +583,8 @@ export async function reviewWorkerCancelRequest(input: {
nextFrozen, nextFrozen,
request.work_order_id, request.work_order_id,
forfeitGiftDeposit forfeitGiftDeposit
? '取消订单申请审核通过扣除押金(已确认加好友)' ? '打手退单申请审核通过扣除押金(已确认加好友)'
: '取消订单申请审核通过退还押金', : '打手退单申请审核通过退还押金',
JSON.stringify({ JSON.stringify({
requestId: request.id, requestId: request.id,
reason: request.reason, reason: request.reason,
@@ -15,7 +15,7 @@ router.get(
requireAdminPermission('worker_cancel_request.review'), requireAdminPermission('worker_cancel_request.review'),
createJsonHandler((req) => listAdminWorkerCancelRequests(req.query), { createJsonHandler((req) => listAdminWorkerCancelRequests(req.query), {
successMessage: 'ok', successMessage: 'ok',
errorMessage: '读取取消订单申请失败', errorMessage: '读取打手退单申请失败',
scope: '[admin/worker-platform/cancel-requests]', scope: '[admin/worker-platform/cancel-requests]',
}), }),
) )
@@ -59,8 +59,8 @@ router.post(
req.adminSession?.username || '', req.adminSession?.username || '',
), ),
{ {
successMessage: '取消订单申请已审核', successMessage: '打手退单申请已审核',
errorMessage: '审核取消订单申请失败', errorMessage: '审核打手退单申请失败',
scope: '[admin/worker-platform/cancel-requests/:requestId/review]', scope: '[admin/worker-platform/cancel-requests/:requestId/review]',
audit: (req, data) => ({ audit: (req, data) => ({
action: 'worker_cancel_request_reviewed', action: 'worker_cancel_request_reviewed',
@@ -110,7 +110,7 @@ export async function createWorkerCancelRequestAdminNotification(input: {
entityType: 'worker_cancel_request', entityType: 'worker_cancel_request',
entityId: input.requestId, entityId: input.requestId,
dedupeKey: `worker_cancel_request:${input.requestId}`, dedupeKey: `worker_cancel_request:${input.requestId}`,
title: '有打手取消订单申请待审核', title: '有打手退单申请待审核',
body: [ body: [
`订单:${input.platformOrderId || input.workOrderId}`, `订单:${input.platformOrderId || input.workOrderId}`,
`商品:${input.productName || '-'}`, `商品:${input.productName || '-'}`,
@@ -41,19 +41,19 @@ export async function reviewAdminWorkerCancelRequest(
now: nowIso(), now: nowIso(),
}) })
if (result.failureReason === 'request_not_found') { if (result.failureReason === 'request_not_found') {
throw createHttpError('取消订单申请不存在', { throw createHttpError('打手退单申请不存在', {
statusCode: 404, statusCode: 404,
errorCode: 'worker_cancel_request_not_found', errorCode: 'worker_cancel_request_not_found',
}) })
} }
if (result.failureReason === 'request_not_pending') { if (result.failureReason === 'request_not_pending') {
throw createHttpError('该取消订单申请已审核,请刷新后重试', { throw createHttpError('该打手退单申请已审核,请刷新后重试', {
statusCode: 409, statusCode: 409,
errorCode: 'worker_cancel_request_not_pending', errorCode: 'worker_cancel_request_not_pending',
}) })
} }
if (!result.request || !result.order) { if (!result.request || !result.order) {
throw createHttpError('订单状态已变化,无法审核该取消订单申请', { throw createHttpError('订单状态已变化,无法审核该打手退单申请', {
statusCode: 409, statusCode: 409,
errorCode: 'worker_cancel_request_target_changed', errorCode: 'worker_cancel_request_target_changed',
}) })
@@ -98,7 +98,7 @@ export async function listWorkerMyOrders(query: JsonObject = {}, session: Worker
noteByOrderId.get(workOrderId) || '', noteByOrderId.get(workOrderId) || '',
viewedAtByOrderId.get(workOrderId) || null, viewedAtByOrderId.get(workOrderId) || null,
), ),
// 问题单分组内的来源角标:平台标记 / 取消申请审核中 / 反馈处理中。 // 问题单分组内的来源角标:平台标记 / 退单审核中 / 反馈处理中。
problemMarked: item.status === 'problem', problemMarked: item.status === 'problem',
pendingCancelRequest: pendingCancelOrderIds.has(workOrderId), pendingCancelRequest: pendingCancelOrderIds.has(workOrderId),
pendingFeedback: pendingFeedbackOrderIds.has(workOrderId), pendingFeedback: pendingFeedbackOrderIds.has(workOrderId),
@@ -123,17 +123,17 @@ export function formatWorkOrderEvent(event: WorkOrderEvent): EventNodeStyle {
return { title: '打手取消接单', color: 'red' } return { title: '打手取消接单', color: 'red' }
case 'cancel_request_submitted': case 'cancel_request_submitted':
return { return {
title: note ? `打手提交取消订单申请:${note}` : '打手提交取消订单申请,等待客服审核', title: note ? `打手提交退单申请:${note}` : '打手提交退单申请,等待客服审核',
color: 'orange', color: 'orange',
} }
case 'cancel_request_rejected': case 'cancel_request_rejected':
return { return {
title: note ? `客服驳回取消订单申请:${note}` : '客服驳回取消订单申请', title: note ? `客服驳回打手退单申请:${note}` : '客服驳回打手退单申请',
color: 'green', color: 'green',
} }
case 'cancel_request_approved': case 'cancel_request_approved':
return { return {
title: note ? `客服同意取消订单申请:${note}` : '客服同意取消订单申请,订单已回到大厅', title: note ? `客服同意打手退单申请:${note}` : '客服同意打手退单申请,订单已回到大厅',
color: 'red', color: 'red',
} }
case 'worker_feedback_submitted': case 'worker_feedback_submitted':
@@ -80,7 +80,7 @@ export default function AdminWorkerPlatformPage() {
{ key: 'orders', label: '接单工单', children: <WorkOrdersPanel /> }, { key: 'orders', label: '接单工单', children: <WorkOrdersPanel /> },
{ {
key: 'cancel-requests', key: 'cancel-requests',
label: '取消申请审核', label: '打手退单审核',
children: <CancelRequestsPanel />, children: <CancelRequestsPanel />,
}, },
{ key: 'feedbacks', label: '问题反馈', children: <FeedbacksPanel /> }, { key: 'feedbacks', label: '问题反馈', children: <FeedbacksPanel /> },
@@ -90,7 +90,7 @@ export default function AdminWorkerPlatformPage() {
{ key: 'orders', label: '接单工单', children: <WorkOrdersPanel /> }, { key: 'orders', label: '接单工单', children: <WorkOrdersPanel /> },
{ {
key: 'cancel-requests', key: 'cancel-requests',
label: '取消申请审核', label: '打手退单审核',
children: <CancelRequestsPanel />, children: <CancelRequestsPanel />,
}, },
{ key: 'feedbacks', label: '问题反馈', children: <FeedbacksPanel /> }, { key: 'feedbacks', label: '问题反馈', children: <FeedbacksPanel /> },
@@ -71,12 +71,12 @@ export default function CancelRequestsPanel() {
: result.levelChanged : result.levelChanged
? ',该打手已降一级 VIP' ? ',该打手已降一级 VIP'
: '' : ''
message.success(`${result.approved ? '已同意' : '已驳回'}取消订单申请${resultText}`) message.success(`${result.approved ? '已同意' : '已驳回'}打手退单申请${resultText}`)
setReviewTarget(null) setReviewTarget(null)
form.resetFields() form.resetFields()
await refreshAll() await refreshAll()
} catch (error) { } catch (error) {
message.error(error instanceof Error ? error.message : '审核取消订单申请失败') message.error(error instanceof Error ? error.message : '审核打手退单申请失败')
} }
} }
@@ -135,7 +135,7 @@ export default function CancelRequestsPanel() {
return ( return (
<> <>
<Card <Card
title={`待审核取消订单申请(${requestsQuery.data?.data.items.length || 0}`} title={`待审核打手退单申请(${requestsQuery.data?.data.items.length || 0}`}
extra={ extra={
<Button <Button
icon={<ReloadOutlined />} icon={<ReloadOutlined />}
@@ -154,12 +154,12 @@ export default function CancelRequestsPanel() {
dataSource={requestsQuery.data?.data.items || []} dataSource={requestsQuery.data?.data.items || []}
columns={columns} columns={columns}
pagination={false} pagination={false}
locale={{ emptyText: '暂无待审核取消订单申请' }} locale={{ emptyText: '暂无待审核打手退单申请' }}
scroll={{ x: 900 }} scroll={{ x: 900 }}
/> />
</Card> </Card>
<Modal <Modal
title={reviewTarget?.approved ? '同意取消订单申请' : '驳回取消订单申请'} title={reviewTarget?.approved ? '同意打手退单申请' : '驳回打手退单申请'}
open={Boolean(reviewTarget)} open={Boolean(reviewTarget)}
onCancel={() => { onCancel={() => {
setReviewTarget(null) setReviewTarget(null)
@@ -26,8 +26,8 @@ const notificationEventRows: NotificationEventRow[] = [
{ key: 'material_required', name: '待补资料工单', description: '新工单等待后台补充资料' }, { key: 'material_required', name: '待补资料工单', description: '新工单等待后台补充资料' },
{ {
key: 'cancel_requested', key: 'cancel_requested',
name: '取消订单申请', name: '打手退单申请',
description: '打手提交新的取消订单申请,等待客服审核', description: '打手提交新的退单申请,等待客服审核',
}, },
{ key: 'feedback_submitted', name: '问题反馈', description: '打手反馈客户资料或订单处理问题' }, { key: 'feedback_submitted', name: '问题反馈', description: '打手反馈客户资料或订单处理问题' },
] ]
@@ -77,7 +77,7 @@ export function getOrderFlagTags(order: WorkOrder) {
const flags: Array<{ key: string; label: string; color: string }> = [] const flags: Array<{ key: string; label: string; color: string }> = []
if (order.problemMarked) flags.push({ key: 'problem', label: '平台标记', color: 'red' }) if (order.problemMarked) flags.push({ key: 'problem', label: '平台标记', color: 'red' })
if (order.pendingCancelRequest) if (order.pendingCancelRequest)
flags.push({ key: 'cancel', label: '取消申请审核中', color: 'orange' }) flags.push({ key: 'cancel', label: '退单审核中', color: 'orange' })
if (order.pendingFeedback) flags.push({ key: 'feedback', label: '反馈处理中', color: 'orange' }) if (order.pendingFeedback) flags.push({ key: 'feedback', label: '反馈处理中', color: 'orange' })
if (order.materialUpdated) flags.push({ key: 'material', label: '资料已更新', color: 'blue' }) if (order.materialUpdated) flags.push({ key: 'material', label: '资料已更新', color: 'blue' })
return flags return flags
+1 -1
View File
@@ -582,7 +582,7 @@ export type WorkOrder = {
/** 打手本人尚未点击查看或操作过该工单。 */ /** 打手本人尚未点击查看或操作过该工单。 */
isUnread?: boolean isUnread?: boolean
problemNote: string problemNote: string
/** 问题单分组来源角标:平台标记 / 取消申请审核中 / 反馈处理中 / 资料已更新。 */ /** 问题单分组来源角标:平台标记 / 退单审核中 / 反馈处理中 / 资料已更新。 */
problemMarked?: boolean problemMarked?: boolean
pendingCancelRequest?: boolean pendingCancelRequest?: boolean
pendingFeedback?: boolean pendingFeedback?: boolean
+2 -2
View File
@@ -29,7 +29,7 @@ export function formatAuditAction(action: string) {
platform_shop_config_updated: '更新店铺配置', platform_shop_config_updated: '更新店铺配置',
platform_fulfillment_config_updated: '更新履约配置', platform_fulfillment_config_updated: '更新履约配置',
worker_finance_request_reviewed: '资金申请审核', worker_finance_request_reviewed: '资金申请审核',
worker_cancel_request_reviewed: '取消订单申请审核', worker_cancel_request_reviewed: '打手退单申请审核',
worker_reviewed: '打手账号审核', worker_reviewed: '打手账号审核',
worker_wallet_credited: '打手钱包手动加款', worker_wallet_credited: '打手钱包手动加款',
worker_password_reset: '重置打手密码', worker_password_reset: '重置打手密码',
@@ -80,7 +80,7 @@ export function formatAuditTargetType(targetType: string) {
work_order: '接单工单', work_order: '接单工单',
work_order_share: '拼单份额', work_order_share: '拼单份额',
worker_finance_request: '资金申请', worker_finance_request: '资金申请',
worker_cancel_request: '取消订单申请', worker_cancel_request: '打手退单申请',
after_sales_case: '售后问题单', after_sales_case: '售后问题单',
worker_level: '接单等级', worker_level: '接单等级',
work_category: '接单分类', work_category: '接单分类',
+2 -2
View File
@@ -36,7 +36,7 @@ export const adminUserStatusOptions = [
export const adminAuditActionOptions = [ export const adminAuditActionOptions = [
{ label: '资金申请审核(通过/拒绝)', value: 'worker_finance_request_reviewed' }, { label: '资金申请审核(通过/拒绝)', value: 'worker_finance_request_reviewed' },
{ label: '取消订单申请审核', value: 'worker_cancel_request_reviewed' }, { label: '打手退单申请审核', value: 'worker_cancel_request_reviewed' },
{ label: '打手账号审核', value: 'worker_reviewed' }, { label: '打手账号审核', value: 'worker_reviewed' },
{ label: '打手钱包手动加款', value: 'worker_wallet_credited' }, { label: '打手钱包手动加款', value: 'worker_wallet_credited' },
{ label: '重置打手密码', value: 'worker_password_reset' }, { label: '重置打手密码', value: 'worker_password_reset' },
@@ -86,7 +86,7 @@ export const adminAuditActionOptions = [
export const adminAuditTargetTypeOptions = [ export const adminAuditTargetTypeOptions = [
{ label: '资金申请', value: 'worker_finance_request' }, { label: '资金申请', value: 'worker_finance_request' },
{ label: '取消订单申请', value: 'worker_cancel_request' }, { label: '打手退单申请', value: 'worker_cancel_request' },
{ label: '打手', value: 'worker' }, { label: '打手', value: 'worker' },
{ label: '接单工单', value: 'work_order' }, { label: '接单工单', value: 'work_order' },
{ label: '拼单份额', value: 'work_order_share' }, { label: '拼单份额', value: 'work_order_share' },