diff --git a/src/composables/useStockingForm.ts b/src/composables/useStockingForm.ts index 280a3d7..c8cb749 100644 --- a/src/composables/useStockingForm.ts +++ b/src/composables/useStockingForm.ts @@ -67,6 +67,7 @@ export interface ItemRow { fob_transport_fee: number | undefined port_misc_fee: string remark: string + attachment_files?: { name: string; url: string; file_name: string }[] ocean_freight: string ocean_freight_currency: string ocean_freight_currency_snapshot: string @@ -235,6 +236,7 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) { fob_transport_fee: undefined, port_misc_fee: '', remark: '', + attachment_files: [], ocean_freight: '', ocean_freight_currency: 'CNY', ocean_freight_currency_snapshot: '人民币', @@ -705,6 +707,48 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) { } } + // 车辆明细附件上传 + const itemUploadAction = `${import.meta.env.VITE_API_URL}/ticket/upload?scene=stock_orders` + + const beforeItemAttachmentUpload = (file: File) => { + const isValidType = /\.(jpg|jpeg|png|gif|pdf|doc|docx|xls|xlsx|txt)$/i.test(file.name) + if (!isValidType) { + ElMessage.error('只能上传图片或文档文件!') + return false + } + const isLt10M = file.size / 1024 / 1024 < 10 + if (!isLt10M) { + ElMessage.error('文件大小不能超过 10MB!') + return false + } + return true + } + + const handleItemAttachmentUpload = (response: any, idx: number) => { + if (response.code === 200) { + const fileInfo = { + name: response.data.original_name || '附件', + url: response.data.file_url, + file_name: response.data.file_name + } + if (!items.value[idx].attachment_files) { + items.value[idx].attachment_files = [] + } + items.value[idx].attachment_files!.push(fileInfo) + ElMessage.success('附件上传成功!') + } else { + ElMessage.error(response.message || '附件上传失败!') + } + } + + const removeItemAttachment = (idx: number, fileIdx: number) => { + const list = items.value[idx].attachment_files + if (list) { + list.splice(fileIdx, 1) + ElMessage.success('附件已删除') + } + } + const removeContractFile = (index: number) => { contractFiles.value.splice(index, 1) // 更新合同字段为文件名数组 @@ -977,6 +1021,11 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) { _echo_vin: Boolean(it.vin), mileage: it.mileage ?? 0, model_snapshot: it.model_snapshot || '', + attachment_files: (it.attachment || []).map((f: any) => ({ + name: f.original_name || f.name || '附件', + url: f.url || f.file_url || '', + file_name: f.file_name || f.url || '' + })), listing_price: it.listing_price?.amount ? Number(it.listing_price.amount) : undefined, listing_price_currency: it.listing_price?.currency || 'CNY', listing_price_currency_snapshot: '', @@ -1231,7 +1280,11 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) { ), retention_price: wrapMoney(it.retention_price, (it as any).retention_price_currency, '挂账'), car_price: wrapMoney(it.car_price, (it as any).car_price_currency, '车价'), - increase_price: wrapMoney(it.increase_price, (it as any).increase_price_currency, '加价') + increase_price: wrapMoney(it.increase_price, (it as any).increase_price_currency, '加价'), + attachment: (it.attachment_files || []).map((f) => ({ + url: f.url, + original_name: f.name + })) })) // 从提交参数中移除 settlement_currency @@ -1540,6 +1593,10 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) { // 上传相关 actionImageUplode, uploadHeaders, + itemUploadAction, + beforeItemAttachmentUpload, + handleItemAttachmentUpload, + removeItemAttachment, // 方法 initializeForm,