diff --git a/admin-web/src/api/admin.ts b/admin-web/src/api/admin.ts index 23c6349..19ea7f8 100644 --- a/admin-web/src/api/admin.ts +++ b/admin-web/src/api/admin.ts @@ -104,7 +104,14 @@ export interface AdminWarehouseWorkbenchContext { operator_name: string; remark: string; created_at: string; + inbound_attachments?: AdminFileAsset[]; + packing_attachments?: AdminFileAsset[]; }>; + return_verification?: { + verified: boolean; + report_id: number; + report_no: string; + }; next_action?: string; next_action_text?: string; } @@ -244,6 +251,66 @@ export interface AdminOrderWarehouseOption { supported_category_names: string[]; } +export interface AdminManualOrderMaterialItem { + item_code: string; + item_name: string; + is_required: boolean; + files: AdminFileAsset[]; +} + +export interface AdminManualOrderCreatePayload { + service_provider: string; + product_info: { + category_id: number; + brand_id: number; + product_name: string; + color: string; + size_spec: string; + serial_no: string; + }; + extra_info: { + purchase_channel: string; + purchase_price: number; + usage_status: string; + condition_desc: string; + remark: string; + }; + return_address: { + consignee: string; + mobile: string; + province: string; + city: string; + district: string; + detail_address: string; + }; + materials: AdminManualOrderMaterialItem[]; +} + +export interface AdminManualOrderCreateResponse { + order_id: number; + order_no: string; + appraisal_no: string; + user_id: number; + next_status: "pending_shipping"; +} + +export interface AdminManualOrderMeta { + categories: Array<{ + id: number; + name: string; + code: string; + supported_service_types: string[]; + }>; + brands: Array<{ + id: number; + name: string; + en_name: string; + code: string; + category_ids: number[]; + supported_service_types: string[]; + }>; +} + export interface CatalogOverviewCard { title: string; value: number; @@ -380,6 +447,9 @@ export interface AdminReportListItem { product_name: string; category_name: string; brand_name: string; + material_tag_bound: boolean; + material_tag_verify_code: string; + material_tag_bind_status: string; } export interface AdminReportDetail { @@ -414,6 +484,7 @@ export interface AdminReportDetail { mime_type?: string; }>; zhongjian_report_files: AdminFileAsset[]; + material_tag: null | AdminMaterialTagCode; risk_notice_text: string; verify_info: { verify_status: string; @@ -705,6 +776,7 @@ export interface AdminAppraisalTaskResultPayload { }>; external_remark: string; internal_remark: string; + qr_input?: string; } export interface AdminAppraisalTaskSupplementPayload { @@ -1450,6 +1522,33 @@ export const adminApi = { }; }>; }, + createManualOrder(data: AdminManualOrderCreatePayload) { + return request.post("/api/admin/manual-order/create", data) as Promise<{ + code: number; + message: string; + data: AdminManualOrderCreateResponse; + }>; + }, + getManualOrderMeta() { + return request.get("/api/admin/manual-order/meta") as Promise<{ + code: number; + message: string; + data: AdminManualOrderMeta; + }>; + }, + uploadManualOrderFile(file: File) { + const formData = new FormData(); + formData.append("file", file); + return request.post("/api/admin/manual-order/file/upload", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + }) as Promise<{ + code: number; + message: string; + data: AdminFileAsset; + }>; + }, getCatalogOverview() { return request.get("/api/admin/catalog/overview") as Promise<{ code: number; @@ -1588,13 +1687,14 @@ export const adminApi = { data: AdminReportDetail; }>; }, - publishReport(id: number) { + publishReport(id: number, qrInput = "") { return request.post("/api/admin/report/publish", { id, + qr_input: qrInput, }) as Promise<{ code: number; message: string; - data: AdminPublishReportResponse; + data: AdminPublishReportResponse & { material_tag?: AdminMaterialTagCode | null }; }>; }, saveInspectionReport(data: AdminManualInspectionPayload) { @@ -1689,7 +1789,7 @@ export const adminApi = { }; }>; }, - saveZhongjianAppraisalReport(data: { id: number; zhongjian_report_no: string; report_files: AdminFileAsset[] }) { + saveZhongjianAppraisalReport(data: { id: number; zhongjian_report_no: string; report_files: AdminFileAsset[]; qr_input: string }) { return request.post("/api/admin/appraisal-task/zhongjian-report/save", data) as Promise<{ code: number; message: string; @@ -1728,16 +1828,16 @@ export const adminApi = { data: { file_url: string }; }>; }, - lookupWarehouseInbound(trackingNo: string) { + lookupWarehouseInbound(inboundNo: string) { return request.get("/api/admin/warehouse-workbench/inbound/lookup", { - params: { tracking_no: trackingNo }, + params: { inbound_no: inboundNo }, }) as Promise<{ code: number; message: string; data: AdminWarehouseWorkbenchContext; }>; }, - receiveWarehouseInbound(data: { tracking_no: string; internal_tag_no: string }) { + receiveWarehouseInbound(data: { inbound_no?: string; tracking_no?: string; internal_tag_no: string; inbound_attachments?: AdminFileAsset[] }) { return request.post("/api/admin/warehouse-workbench/inbound/receive", data) as Promise<{ code: number; message: string; @@ -1775,12 +1875,32 @@ export const adminApi = { data: AdminWarehouseWorkbenchContext; }>; }, + confirmWarehouseReturnReport(data: { internal_tag_no: string; report_id: number }) { + return request.post("/api/admin/warehouse-workbench/return/report/confirm", data) as Promise<{ + code: number; + message: string; + data: AdminWarehouseWorkbenchContext; + }>; + }, confirmWarehouseReturnZhongjian(internalTagNo: string) { return request.post("/api/admin/warehouse-workbench/return/zhongjian/confirm", { internal_tag_no: internalTagNo, }) as Promise<{ code: number; message: string; data: AdminWarehouseWorkbenchContext }>; }, - shipWarehouseReturn(data: { internal_tag_no: string; express_company: string; tracking_no: string }) { + uploadWarehouseReturnPackingFile(file: File) { + const formData = new FormData(); + formData.append("file", file); + return request.post("/api/admin/warehouse-workbench/return/packing/upload", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + }) as Promise<{ + code: number; + message: string; + data: AdminFileAsset; + }>; + }, + shipWarehouseReturn(data: { internal_tag_no: string; express_company: string; tracking_no: string; packing_attachments?: AdminFileAsset[] }) { return request.post("/api/admin/warehouse-workbench/return/ship", data) as Promise<{ code: number; message: string; diff --git a/admin-web/src/pages/appraisal-tasks/index.vue b/admin-web/src/pages/appraisal-tasks/index.vue index 4bb895b..e796d28 100644 --- a/admin-web/src/pages/appraisal-tasks/index.vue +++ b/admin-web/src/pages/appraisal-tasks/index.vue @@ -1,6 +1,6 @@ + +