From 8b7f6d99c84481d52d275aad50ecc58bb4ada655 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Sun, 19 Jul 2026 16:47:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(web-admin):=20=E6=89=A9=E5=B1=95=E5=87=BA?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E5=8D=95=E4=B8=8E=E5=85=AC=E5=85=B1=E9=A1=B5?= =?UTF-8?q?=20TypeScript=20=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为 enrichment 返回的取送货、产品编号、包装规格与单位标签补齐前端类型。 Co-authored-by: Cursor --- web-admin/src/api/pl/index.ts | 108 ++++++++++++++++++++++++ web-admin/src/api/pl/public-io-order.ts | 61 +++++++++++++ 2 files changed, 169 insertions(+) create mode 100644 web-admin/src/api/pl/public-io-order.ts diff --git a/web-admin/src/api/pl/index.ts b/web-admin/src/api/pl/index.ts index 00182fa34..8cfd95d07 100644 --- a/web-admin/src/api/pl/index.ts +++ b/web-admin/src/api/pl/index.ts @@ -680,11 +680,21 @@ export interface TransportSiteLink { siteFeedbackTime?: string } +export interface TransportIoOrderBrief { + kind: string + orderId: string + orderNo: string + siteAccessToken?: string + siteUrl?: string + status?: string +} + export interface PlanArrangeInfo { driverUrl?: string licensePlate?: string siteRecords?: TransportSiteLink[] inventoryRecords?: TransportInventoryLink[] + ioOrder?: TransportIoOrderBrief } export interface TransportArrangeResult extends Transport { @@ -692,6 +702,104 @@ export interface TransportArrangeResult extends Transport { driverUrl?: string siteRecords?: TransportSiteLink[] inventoryRecords?: TransportInventoryLink[] + ioOrder?: TransportIoOrderBrief +} + +export interface PlIoOrderItem { + id: string + orderId: string + planProductId: string + productId?: string + productNo?: string + productName?: string + specification?: string + unit?: string + unitLabel?: string + planQty?: number + actualQty?: number + qtySource?: string + packageSpec?: string + remark?: string +} + +export interface PlIoOrder { + id: string + orderNo: string + planId: string + transportId: string + status: string + partnerCompany?: string + vehicleNo?: string + planNo?: string + planDate?: string + businessType?: string + planRemark?: string + pickupAddress?: string + pickupLng?: number | null + pickupLat?: number | null + pickupTime?: string + pickupNotes?: string + destinationName?: string + destinationAddress?: string + destinationLng?: number | null + destinationLat?: number | null + deliveryTime?: string + destinationNotes?: string + siteAccessToken?: string + siteUrl?: string + siteFeedbackRemark?: string + siteFeedbackImages?: string[] + siteFeedbackTime?: string + siteFirstSubmittedAt?: string + remark?: string + productSummary?: string + actualQtyTotal?: number + kind: string + items?: PlIoOrderItem[] + createTime?: string + updateTime?: string +} + +export interface PlIoOrderQuery { + orderNo?: string + planNo?: string + status?: string + partnerCompany?: string + vehicleNo?: string + q?: string + page?: number + pageSize?: number +} + +export interface PlIoOrderListResponse { + total: number + list: PlIoOrder[] +} + +export const inboundOrderApi = { + list: (params?: PlIoOrderQuery) => + request.get('/transport/inbound/', { params }), + get: (id: string) => request.get(`/transport/inbound/${id}`), + getByPlan: (planId: string) => + request.get(`/transport/inbound/by-plan/${planId}`), + patch: (id: string, data: Record) => + request.patch(`/transport/inbound/${id}`, data), + siteUrl: (id: string) => + request.get<{ siteUrl?: string; siteAccessToken?: string }>(`/transport/inbound/${id}/site-url`) +} + +export const outboundOrderApi = { + list: (params?: PlIoOrderQuery) => + request.get('/transport/outbound/', { params }), + get: (id: string) => request.get(`/transport/outbound/${id}`), + getByPlan: (planId: string) => + request.get(`/transport/outbound/by-plan/${planId}`), + patch: (id: string, data: Record) => + request.patch(`/transport/outbound/${id}`, data), + siteUrl: (id: string) => + request.get<{ siteUrl?: string; siteAccessToken?: string }>( + `/transport/outbound/${id}/site-url` + ) } export interface TransportQuery { diff --git a/web-admin/src/api/pl/public-io-order.ts b/web-admin/src/api/pl/public-io-order.ts new file mode 100644 index 000000000..8d00c465d --- /dev/null +++ b/web-admin/src/api/pl/public-io-order.ts @@ -0,0 +1,61 @@ +import { publicPlGet, publicPlPost, publicPlUpload } from '@/utils/http/public-pl' + +export interface PublicIoOrderItem { + id: string + productNo?: string + productName?: string + specification?: string + unit?: string + planQty?: number + actualQty?: number + packageSpec?: string + remark?: string +} + +export interface PublicIoOrderPage { + title?: string + orderNo?: string + status?: string + businessType?: string + partnerCompany?: string + vehicleNo?: string + planNo?: string + planDate?: string + planRemark?: string + pickupAddress?: string + pickupLng?: number | null + pickupLat?: number | null + pickupTime?: string + pickupNotes?: string + destinationName?: string + destinationAddress?: string + destinationLng?: number | null + destinationLat?: number | null + deliveryTime?: string + destinationNotes?: string + siteFeedbackRemark?: string + siteFeedbackImages?: string[] + siteFeedbackTime?: string + voided: boolean + items: PublicIoOrderItem[] +} + +export function createPublicIoOrderApi(kind: 'inbound' | 'outbound') { + const base = `/public/pl/${kind}` + return { + getPage: (token: string) => publicPlGet(`${base}/${token}`), + saveFeedback: ( + token: string, + data: { + remark?: string + images?: string[] + items: { id: string; actualQty: number }[] + } + ) => publicPlPost<{ success: boolean }>(`${base}/${token}/feedback`, data), + uploadAttachment: (token: string, file: File) => + publicPlUpload<{ fileUrl: string }>(`${base}/${token}/attachments`, file) + } +} + +export const publicInboundOrderApi = createPublicIoOrderApi('inbound') +export const publicOutboundOrderApi = createPublicIoOrderApi('outbound')