From 8f1eec70732fa6a5d68cbf56a5689b6d4eb10baa Mon Sep 17 00:00:00 2001 From: hwj Date: Mon, 15 Jun 2026 11:02:30 +0800 Subject: [PATCH] =?UTF-8?q?style=EF=BC=9A=E6=A8=A1=E5=85=B7=E7=BB=84-?= =?UTF-8?q?=E6=96=B0=E5=A2=9E/=E7=BC=96=E8=BE=91/=E8=AF=A6=E6=83=85-?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BE=E7=BA=B8=E4=B8=8A=E4=BC=A0=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/erp/mold/MoldBrandForm.vue | 23 +++++++++++++--- src/views/erp/mold/detail/brand.vue | 39 ++++++++++++++++++++++------ 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/src/views/erp/mold/MoldBrandForm.vue b/src/views/erp/mold/MoldBrandForm.vue index 25e0adfe..6a860c54 100644 --- a/src/views/erp/mold/MoldBrandForm.vue +++ b/src/views/erp/mold/MoldBrandForm.vue @@ -63,7 +63,7 @@ - + @@ -253,6 +253,7 @@ const formData = ref({ const manualFileTypes = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt'] const videoFileTypes = ['mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv', 'webm'] +const drawingFileTypes = ['dwg', 'dxf', 'step', 'stp', 'igs', 'iges'] const splitAssetValue = (value: unknown): string[] => { if (!value) return [] @@ -277,9 +278,23 @@ const splitAssetValue = (value: unknown): string[] => { const normalizeAssetString = (value: unknown) => splitAssetValue(value).join(',') +// 图纸字段专用处理函数,支持 JSON 格式 +const parseDrawingValue = (value: unknown): string => { + if (!value) return '' + if (typeof value === 'string') { + const trimmed = value.trim() + if (trimmed.startsWith('{') || trimmed.startsWith('[')) { + return trimmed + } + // 旧格式,直接返回 + return trimmed + } + return JSON.stringify(value) +} + const drawingsValue = computed({ - get: () => splitAssetValue((formData.value as any).drawings), - set: (value: any) => { ;(formData.value as any).drawings = normalizeAssetString(value) } + get: () => parseDrawingValue((formData.value as any).drawings), + set: (value: any) => { (formData.value as any).drawings = parseDrawingValue(value) } }) const operationManualValue = computed({ @@ -455,7 +470,7 @@ const submitForm = async () => { const payload: MoldBrandVO = { ...formData.value, productIds: Array.isArray(formData.value.productIds) ? formData.value.productIds : [], - drawings: normalizeAssetString((formData.value as any).drawings), + drawings: (formData.value as any).drawings, operationManual: normalizeAssetString((formData.value as any).operationManual), operationVideo: normalizeAssetString((formData.value as any).operationVideo), isEnable: Boolean(formData.value.isEnable) diff --git a/src/views/erp/mold/detail/brand.vue b/src/views/erp/mold/detail/brand.vue index 0991d41d..5c3510c4 100644 --- a/src/views/erp/mold/detail/brand.vue +++ b/src/views/erp/mold/detail/brand.vue @@ -305,15 +305,11 @@ - + @@ -469,6 +465,33 @@ const getAssetName = (url: string) => { } const parseAssetRows = (value: any) => { + if (!value) return [] + + const text = String(value).trim() + if (text.startsWith('{') || text.startsWith('[')) { + try { + const parsed = JSON.parse(text) + if (Array.isArray(parsed)) { + return parsed.map((item) => { + if (item && typeof item === 'object' && item.fileUrl) { + return { + url: String(item.fileUrl), + name: item.fileName ? String(item.fileName) : getAssetName(item.fileUrl) + } + } + return null + }).filter(Boolean) + } + if (parsed && typeof parsed === 'object' && parsed.fileUrl) { + return [{ + url: String(parsed.fileUrl), + name: parsed.fileName ? String(parsed.fileName) : getAssetName(parsed.fileUrl) + }] + } + } catch {} + } + + // 旧格式处理 return parseAssetUrls(value).map((url) => ({ url, name: getAssetName(url)