style:模具组-新增/编辑/详情-修改图纸上传格式

main
黄伟杰 1 week ago
parent df07b2a194
commit 8f1eec7073

@ -63,7 +63,7 @@
</el-col>
<el-col :span="24">
<el-form-item :label="t('MoldManagement.MoldBrandFormPage.drawings')" prop="drawings">
<UploadImgs v-model="drawingsValue" :limit="9" width="96px" height="96px" />
<UploadFile v-model="drawingsValue" :limit="9" :file-type="drawingFileTypes" :is-show-tip="false" />
</el-form-item>
</el-col>
<el-col :span="24">
@ -253,6 +253,7 @@ const formData = ref<MoldBrandVO>({
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)

@ -305,15 +305,11 @@
</el-tab-pane>
<el-tab-pane :label="t('MoldManagement.MoldBrandDetail.tabDrawings')" name="drawings">
<el-table :data="drawingRows" :stripe="true" :show-overflow-tooltip="true">
<el-table-column :label="t('MoldManagement.MoldBrandDetail.drawings')" prop="url" min-width="180">
<el-table-column :label="t('MoldManagement.MoldBrandDetail.drawings')" prop="url" min-width="220">
<template #default="scope">
<el-image
:src="scope.row.url"
:preview-src-list="drawingRows.map((item) => item.url)"
preview-teleported
fit="cover"
class="mold-brand-asset-image"
/>
<el-link :href="scope.row.url" target="_blank" type="primary" :underline="false">
{{ scope.row.name }}
</el-link>
</template>
</el-table-column>
</el-table>
@ -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)

Loading…
Cancel
Save