From ace47910059e589051f5ae938bf9e1dfbf2d8284 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Fri, 18 Sep 2026 18:43:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(consignment):=20=E5=AF=84=E5=8D=96?= =?UTF-8?q?=E7=89=A9=E5=93=81=E5=B7=B2=E9=AA=8C=E6=94=B6=E5=90=8E=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E9=80=80=E5=8D=95=E5=9B=9E=E5=BA=93=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E5=B9=B6=E6=8B=A6=E6=88=AA=E9=80=80=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 寄卖库存管理面板中,已验收通过的现货记录不再展示「退单回库」按钮; 2. 后端 returnAdminConsignmentInventory 接口增加校验,若关联工单已验收结算则拒绝退库,后续问题引导走售后流程。 --- .../consignment-admin-service.ts | 19 +++++++++++++++++++ .../panels/ConsignmentInventoryPanel.tsx | 5 ++++- 2 files changed, 23 insertions(+), 1 deletion(-) 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' ? (