|
|
@@ -13,17 +13,40 @@
|
|
|
</el-radio-group>
|
|
|
</template>
|
|
|
<template #fileUrl>
|
|
|
- <UploadFiles
|
|
|
+ <!-- <UploadFiles
|
|
|
label="上传文件"
|
|
|
:maxCount="1"
|
|
|
:file-list="ruleFormData.fileUrlList"
|
|
|
:disabled="isViewMode"
|
|
|
:allow-all-file-types="true"
|
|
|
@uploadSuccess="handleUploadSuccess"
|
|
|
+ /> -->
|
|
|
+ <UploadFiles
|
|
|
+ v-if="!isViewMode"
|
|
|
+ label="上传地址确认书"
|
|
|
+ :maxCount="1"
|
|
|
+ :file-list="ruleFormData.fileUrlList"
|
|
|
+ @uploadSuccess="handleUploadSuccess"
|
|
|
/>
|
|
|
+ <div class="file-list" v-else>
|
|
|
+ <div v-if="ruleFormData.fileUrlList && ruleFormData.fileUrlList.length > 0">
|
|
|
+ <div class="file-item" v-for="file in ruleFormData.fileUrlList" :key="file.fileId">
|
|
|
+ <span class="file-item--name">{{ file.fileName }}</span>
|
|
|
+ <div class="file-item--footer">
|
|
|
+ <el-button link type="primary" @click="previewOnline(file.fileUrl, file.fileType)"
|
|
|
+ >预览</el-button
|
|
|
+ >
|
|
|
+ <el-button link type="primary" @click.stop="downloadFile(file.fileUrl, file.fileName)"
|
|
|
+ >下载</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-else class="no-attachment">暂无附件</div>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
<template #content>
|
|
|
- <div class="editor-container">
|
|
|
+ <div class="editor-container" v-if="!isViewMode">
|
|
|
<Toolbar style="border-bottom: 1px solid #dcdfe6" :editor="editorRef" />
|
|
|
<Editor
|
|
|
style="height: 400px; overflow-y: auto"
|
|
|
@@ -34,6 +57,7 @@
|
|
|
@on-change="handleEditorChange"
|
|
|
/>
|
|
|
</div>
|
|
|
+ <div v-html="ruleFormData.content" v-else></div>
|
|
|
</template>
|
|
|
<template #status>
|
|
|
<el-radio-group v-model="ruleFormData.status" :disabled="isViewMode">
|
|
|
@@ -42,6 +66,7 @@
|
|
|
</el-radio-group>
|
|
|
</template>
|
|
|
</BasicForm>
|
|
|
+ <PreviewOnline ref="previewOnlineRef" />
|
|
|
</main>
|
|
|
<footer class="safety-platform-container__footer">
|
|
|
<el-button @click="router.back()">返回</el-button>
|
|
|
@@ -73,6 +98,8 @@
|
|
|
} from '@/api/production-safety-system';
|
|
|
import type { FileItem } from '@/components/UploadFiles/types';
|
|
|
import { formatAttachmentList } from '@/components/UploadFiles/utils';
|
|
|
+ import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
|
|
|
+ import { downloadFile } from '@/views/disaster/utils';
|
|
|
|
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
|
@@ -83,6 +110,7 @@
|
|
|
const isCreateMode = computed(() => operate.value === 'safety-standardization-create');
|
|
|
const isEditMode = computed(() => operate.value === 'safety-standardization-edit');
|
|
|
const isViewMode = computed(() => operate.value === 'safety-standardization-view');
|
|
|
+ const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
|
|
|
|
|
|
const { ruleFormData, formRules, ruleFormConfig, cloneRuleFormData, beforeRouteLeave } = useFormConfigHook(
|
|
|
SAFETY_STANDARDIZATION_FORM_CONFIG,
|
|
|
@@ -128,6 +156,7 @@
|
|
|
// 文件上传
|
|
|
const handleUploadSuccess = (files: FileItem[]) => {
|
|
|
ruleFormData.fileUrlList = files;
|
|
|
+ ruleFormData.fileUrl = JSON.stringify(files) || '';
|
|
|
};
|
|
|
|
|
|
// 将逗号分隔的URL字符串转换为FileItem数组
|
|
|
@@ -189,9 +218,7 @@
|
|
|
ruleFormData.fileUrl = res.fileUrl || '';
|
|
|
ruleFormData.content = res.content || '';
|
|
|
ruleFormData.status = res.status ?? 1;
|
|
|
-
|
|
|
- // 如果有文件URL,转换为FileItem格式
|
|
|
- ruleFormData.fileUrlList = convertFileUrlToFileItems(res.fileUrl || '');
|
|
|
+ ruleFormData.fileUrlList = JSON.parse(res.fileUrl || '[]');
|
|
|
}
|
|
|
cloneRuleFormData();
|
|
|
} catch (e) {
|
|
|
@@ -212,33 +239,34 @@
|
|
|
|
|
|
try {
|
|
|
// 处理文件上传:先上传文件获取 URL,然后提取 fileUrl
|
|
|
- let fileUrl = '';
|
|
|
- if (ruleFormData.fileUrlList && ruleFormData.fileUrlList.length > 0) {
|
|
|
- // 分离已有URL的文件和新上传的文件
|
|
|
- const existingFiles: string[] = [];
|
|
|
- const newFiles: FileItem[] = [];
|
|
|
-
|
|
|
- ruleFormData.fileUrlList.forEach((file: FileItem) => {
|
|
|
- // 如果文件已经有 fileUrl 且没有 file 对象,说明是已有文件
|
|
|
- if (file.fileUrl && !file.file) {
|
|
|
- existingFiles.push(file.fileUrl);
|
|
|
- } else {
|
|
|
- // 否则是需要上传的新文件
|
|
|
- newFiles.push(file);
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- // 上传新文件
|
|
|
- let uploadedUrls: string[] = [];
|
|
|
- if (newFiles.length > 0) {
|
|
|
- const uploadedFiles = await formatAttachmentList(newFiles);
|
|
|
- uploadedUrls = uploadedFiles.map((file: any) => file.fileUrl || file.url || '').filter((url: string) => url);
|
|
|
- }
|
|
|
-
|
|
|
- // 合并已有URL和新上传的URL,取第一个作为fileUrl
|
|
|
- const allUrls = [...existingFiles, ...uploadedUrls].filter((url: string) => url);
|
|
|
- fileUrl = allUrls.length > 0 ? allUrls[0] : '';
|
|
|
- }
|
|
|
+ // let fileUrl = '';
|
|
|
+ // if (ruleFormData.fileUrlList && ruleFormData.fileUrlList.length > 0) {
|
|
|
+ // // 分离已有URL的文件和新上传的文件
|
|
|
+ // const existingFiles: string[] = [];
|
|
|
+ // const newFiles: FileItem[] = [];
|
|
|
+
|
|
|
+ // ruleFormData.fileUrlList.forEach((file: FileItem) => {
|
|
|
+ // // 如果文件已经有 fileUrl 且没有 file 对象,说明是已有文件
|
|
|
+ // if (file.fileUrl && !file.file) {
|
|
|
+ // existingFiles.push(file.fileUrl);
|
|
|
+ // } else {
|
|
|
+ // // 否则是需要上传的新文件
|
|
|
+ // newFiles.push(file);
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+
|
|
|
+ // // 上传新文件
|
|
|
+ // let uploadedUrls: string[] = [];
|
|
|
+ // if (newFiles.length > 0) {
|
|
|
+ // const uploadedFiles = await formatAttachmentList(newFiles);
|
|
|
+ // uploadedUrls = uploadedFiles.map((file: any) => file.fileUrl || file.url || '').filter((url: string) => url);
|
|
|
+ // }
|
|
|
+
|
|
|
+ // // 合并已有URL和新上传的URL,取第一个作为fileUrl
|
|
|
+ // const allUrls = [...existingFiles, ...uploadedUrls].filter((url: string) => url);
|
|
|
+ // fileUrl = allUrls.length > 0 ? allUrls[0] : '';
|
|
|
+ // }
|
|
|
+ const uploadedFileList = await formatAttachmentList(ruleFormData.fileUrlList);
|
|
|
|
|
|
const basePayload: ProductionSafetyFile = {
|
|
|
fileName: ruleFormData.fileName,
|
|
|
@@ -247,7 +275,7 @@
|
|
|
fileVersion: ruleFormData.fileVersion,
|
|
|
fileFormat: ruleFormData.fileFormat,
|
|
|
releaseDate: ruleFormData.releaseDate,
|
|
|
- fileUrl: fileUrl || undefined,
|
|
|
+ fileUrl: JSON.stringify(uploadedFileList) || undefined,
|
|
|
content: ruleFormData.content || undefined,
|
|
|
status: ruleFormData.status ?? 1,
|
|
|
};
|
|
|
@@ -262,7 +290,7 @@
|
|
|
});
|
|
|
ElMessage.success('保存成功');
|
|
|
}
|
|
|
-
|
|
|
+ cloneRuleFormData();
|
|
|
router.back();
|
|
|
} catch (e) {
|
|
|
console.error('保存安全标准化体系建设失败:', e);
|
|
|
@@ -270,6 +298,12 @@
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ const previewOnline = (url: string | undefined, type) => {
|
|
|
+ if (url) {
|
|
|
+ previewOnlineRef.value?.open(url, type);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
cloneRuleFormData();
|
|
|
beforeRouteLeave();
|