diff --git a/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx b/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx index bd1b6967..65eb8eec 100644 --- a/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx +++ b/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx @@ -1,5 +1,6 @@ import { CheckOutlined, + CopyOutlined, DeleteOutlined, EditOutlined, FormOutlined, @@ -1295,6 +1296,63 @@ export default function WorkOrdersPanel() { }) } + function copyBuyerMaterialInfo(order: WorkOrder) { + const items = getMaterialDetailItems(order).filter((item) => String(item.value || '').trim()) + if (items.length === 0) { + message.warning('当前工单暂无买家资料') + return + } + const lines = items.map((item) => `${item.label}: ${item.value}`) + navigator.clipboard + .writeText(lines.join('\n')) + .then(() => message.success('买家资料已复制到剪贴板')) + .catch(() => message.error('复制失败,请手动复制')) + } + + function copyConsignmentSellerInfo(order: WorkOrder) { + const consignmentInfo = getConsignmentFulfillment(order) + const sellerFields = order.gift?.boosterMaterial?.fields || {} + const gameNickname = String( + sellerFields.gameNickname || consignmentInfo?.buyerName || '', + ).trim() + const gameId = String(sellerFields.gameId || consignmentInfo?.sellerGameId || '').trim() + const serverZone = String(sellerFields.serverZone || consignmentInfo?.serverZone || '').trim() + const system = String(sellerFields.system || consignmentInfo?.system || '').trim() + const sellerContact = String( + sellerFields.sellerContact || consignmentInfo?.sellerContact || '', + ).trim() + const sellerPhone = String( + sellerFields.sellerPhone || consignmentInfo?.sellerPhone || '', + ).trim() + const sourceSubmissionNo = String( + sellerFields.sourceSubmissionNo || consignmentInfo?.sourceSubmissionNo || '', + ).trim() + const inventoryNo = String( + sellerFields.inventoryNo || consignmentInfo?.inventoryNo || '', + ).trim() + const note = String(order.gift?.boosterMaterial?.note || consignmentInfo?.remark || '').trim() + + const lines: string[] = [] + if (gameNickname) lines.push(`卖家角色昵称: ${gameNickname}`) + if (gameId) lines.push(`卖家游戏ID: ${gameId}`) + if (serverZone) lines.push(`区服: ${serverZone}`) + if (system) lines.push(`系统: ${system}`) + if (sellerContact) lines.push(`卖家微信/QQ: ${sellerContact}`) + if (sellerPhone) lines.push(`卖家手机: ${sellerPhone}`) + if (sourceSubmissionNo) lines.push(`提报单号: ${sourceSubmissionNo}`) + if (inventoryNo) lines.push(`仓库单号: ${inventoryNo}`) + if (note) lines.push(`卖家备注: ${note}`) + + if (lines.length === 0) { + message.warning('当前工单暂无可复制的卖家资料') + return + } + navigator.clipboard + .writeText(lines.join('\n')) + .then(() => message.success('卖家资料已复制到剪贴板')) + .catch(() => message.error('复制失败,请手动复制')) + } + const columns: TableColumnsType = [ { title: '订单', @@ -2093,7 +2151,19 @@ export default function WorkOrdersPanel() { - + } + onClick={() => copyBuyerMaterialInfo(detailOrder)} + > + 一键复制买家资料 + + } + > {renderDetailFieldValues(getMaterialDetailItems(detailOrder), '当前还没有填写资料')}
买家主页截图 @@ -2109,15 +2179,30 @@ export default function WorkOrdersPanel() { isInternalConsignmentOrder(detailOrder) || isConsignmentOrder(detailOrder) const consignmentInfo = getConsignmentFulfillment(detailOrder) const sellerFields = detailOrder.gift.boosterMaterial?.fields || {} - const sellerContact = - sellerFields.sellerContact || String(consignmentInfo?.sellerContact || '') - const sellerPhone = - sellerFields.sellerPhone || String(consignmentInfo?.sellerPhone || '') - const inventoryNo = - sellerFields.inventoryNo || String(consignmentInfo?.inventoryNo || '') - const sourceSubmissionNo = - sellerFields.sourceSubmissionNo || - String(consignmentInfo?.sourceSubmissionNo || '') + const sellerNickname = String( + sellerFields.gameNickname || consignmentInfo?.buyerName || '', + ).trim() + const sellerGameId = String( + sellerFields.gameId || consignmentInfo?.sellerGameId || '', + ).trim() + const sellerServerZone = String( + sellerFields.serverZone || consignmentInfo?.serverZone || '', + ).trim() + const sellerSystem = String( + sellerFields.system || consignmentInfo?.system || '', + ).trim() + const sellerContact = String( + sellerFields.sellerContact || consignmentInfo?.sellerContact || '', + ).trim() + const sellerPhone = String( + sellerFields.sellerPhone || consignmentInfo?.sellerPhone || '', + ).trim() + const inventoryNo = String( + sellerFields.inventoryNo || consignmentInfo?.inventoryNo || '', + ).trim() + const sourceSubmissionNo = String( + sellerFields.sourceSubmissionNo || consignmentInfo?.sourceSubmissionNo || '', + ).trim() const effectiveNote = String( detailOrder.gift?.boosterMaterial?.note || consignmentInfo?.remark || '', ).trim() @@ -2127,7 +2212,7 @@ export default function WorkOrdersPanel() { title={isConsignment ? '寄售赠送进度' : '好友赠送进度'} size="small" extra={ - + {isInternalConsignmentOrder(detailOrder) ? ( 内部寄售匹配 ) : isConsignment ? ( @@ -2140,6 +2225,15 @@ export default function WorkOrdersPanel() { {formatGiftPhase(detailOrder.gift.phase, isConsignment)} + {isConsignment ? ( + + ) : null} {detailOrder.capabilities?.canConfirmFriend && canManageProblem ? (