diff --git a/apps/backend/src/services/worker-platform/consignment-admin-service.ts b/apps/backend/src/services/worker-platform/consignment-admin-service.ts index e4c4b8d7..70ad37fe 100644 --- a/apps/backend/src/services/worker-platform/consignment-admin-service.ts +++ b/apps/backend/src/services/worker-platform/consignment-admin-service.ts @@ -16,6 +16,7 @@ import { import { getWorkerUserById, getWorkerUserByPhone, + listWorkOrdersByIds, } from '../../repositories/worker-platform/index.js' import type { JsonObject } from '../../types/json.js' import { createHttpError } from '../../utils/http.js' @@ -468,6 +469,24 @@ export async function returnAdminConsignmentInventory( payload: JsonObject, _actorName = '', ) { + const currentItem = await getConsignmentInventoryById(id) + if (!currentItem) { + throw createHttpError('寄卖物品不存在', { + statusCode: 404, + errorCode: 'consignment_not_found', + }) + } + const boundWorkOrderId = Number(currentItem.bound_work_order_id || 0) + if (boundWorkOrderId > 0) { + const [boundWo] = await listWorkOrdersByIds([boundWorkOrderId]) + if (boundWo && (boundWo.status === 'accepted' || boundWo.status === 'completed')) { + throw createHttpError('该物品关联工单已验收结算,无法退回复库;后续问题请走售后流程', { + statusCode: 409, + errorCode: 'consignment_order_already_accepted', + }) + } + } + const now = nowIso() const reason = String(payload.reason || '').trim() try { diff --git a/apps/frontend/src/pages/admin/panels/ConsignmentInventoryPanel.tsx b/apps/frontend/src/pages/admin/panels/ConsignmentInventoryPanel.tsx index 4eff7482..b2608220 100644 --- a/apps/frontend/src/pages/admin/panels/ConsignmentInventoryPanel.tsx +++ b/apps/frontend/src/pages/admin/panels/ConsignmentInventoryPanel.tsx @@ -610,7 +610,10 @@ export default function ConsignmentInventoryPanel() { ) : null} - {record.status === 'consumed' && canManageConsignment ? ( + {record.status === 'consumed' && + canManageConsignment && + record.giftEvidenceReviewStatus !== 'accepted' && + record.giftWorkOrderStatus !== 'accepted' ? (