|
|
@@ -1,7 +1,11 @@
|
|
|
<template>
|
|
|
<main class="safety-platform-container__main">
|
|
|
- <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="isViewMode ? undefined : formRules"
|
|
|
- :formConfig="computedFormConfig">
|
|
|
+ <BasicForm
|
|
|
+ ref="basicFormRef"
|
|
|
+ :formData="ruleFormData"
|
|
|
+ :formRules="isViewMode ? undefined : formRules"
|
|
|
+ :formConfig="computedFormConfig"
|
|
|
+ >
|
|
|
<template #fileFormat>
|
|
|
<el-radio-group v-model="ruleFormData.fileFormat" :disabled="isViewMode">
|
|
|
<el-radio value="PDF">PDF</el-radio>
|
|
|
@@ -9,23 +13,52 @@
|
|
|
</el-radio-group>
|
|
|
</template>
|
|
|
<template #fileUrl>
|
|
|
- <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.attachmentUrl"
|
|
|
+ :disabled="isViewMode"
|
|
|
+ :allow-all-file-types="true"
|
|
|
+ @uploadSuccess="(list: FileItem[]) => handleUploadSuccess(list)"
|
|
|
+ />
|
|
|
+ <div class="file-list" v-else>
|
|
|
+ <div class="file-item" v-for="file in ruleFormData.attachmentUrl" :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>
|
|
|
+ <!-- <UploadFiles
|
|
|
+ label="上传文件"
|
|
|
+ :maxCount="1"
|
|
|
+ :file-list="ruleFormData.attachmentUrl"
|
|
|
+ :disabled="isViewMode"
|
|
|
+ :allow-all-file-types="true"
|
|
|
+ @upload-success="handleUploadSuccess"
|
|
|
+ /> -->
|
|
|
</template>
|
|
|
<template #content>
|
|
|
<div class="editor-container">
|
|
|
<Toolbar style="border-bottom: 1px solid #dcdfe6" :editor="editorRef" />
|
|
|
- <Editor style="height: 400px; overflow-y: auto" v-model="ruleFormData.content" mode="default"
|
|
|
- :defaultConfig="editorConfig" @on-created="handleEditorCreated" @on-change="handleEditorChange" />
|
|
|
+ <Editor
|
|
|
+ style="height: 400px; overflow-y: auto"
|
|
|
+ v-model="ruleFormData.description"
|
|
|
+ mode="default"
|
|
|
+ :defaultConfig="editorConfig"
|
|
|
+ @on-created="handleEditorCreated"
|
|
|
+ @on-change="handleEditorChange"
|
|
|
+ />
|
|
|
</div>
|
|
|
</template>
|
|
|
- <template #status>
|
|
|
- <el-radio-group v-model="ruleFormData.status" :disabled="isViewMode">
|
|
|
- <el-radio :value="1">启用</el-radio>
|
|
|
- <el-radio :value="0">禁用</el-radio>
|
|
|
- </el-radio-group>
|
|
|
- </template>
|
|
|
</BasicForm>
|
|
|
+ <PreviewOnline ref="previewOnlineRef" />
|
|
|
</main>
|
|
|
<footer class="safety-platform-container__footer">
|
|
|
<el-button @click="router.back()">返回</el-button>
|
|
|
@@ -36,283 +69,297 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { computed, onMounted, ref, shallowRef, onBeforeUnmount } from 'vue';
|
|
|
-import { useRoute, useRouter } from 'vue-router';
|
|
|
-import { ElMessage } from 'element-plus';
|
|
|
-import BasicForm from '@/components/BasicForm.vue';
|
|
|
-import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
|
|
|
-import { Editor, Toolbar } from '@wangeditor/editor-for-vue';
|
|
|
-import '@wangeditor/editor/dist/css/style.css';
|
|
|
-import { useFormConfigHook } from '@/hooks/useFormConfigHook';
|
|
|
-import { ACADEMY_FILE_FORM_CONFIG, ACADEMY_FILE_FORM_DATA, ACADEMY_FILE_FORM_RULES } from '../configs/form';
|
|
|
-import {
|
|
|
- queryAcademyFileById,
|
|
|
- saveAcademyFile,
|
|
|
- updateAcademyFile,
|
|
|
- type safetyCultureFile,
|
|
|
-} from '@/api/safety-culture';
|
|
|
-import type { FileItem } from '@/components/UploadFiles/types';
|
|
|
-import { formatAttachmentList } from '@/components/UploadFiles/utils';
|
|
|
-import { Plus, Delete } from '@element-plus/icons-vue';
|
|
|
-
|
|
|
-const router = useRouter();
|
|
|
-const route = useRoute();
|
|
|
-
|
|
|
-const operate = computed(() => (route.query.operate as string) || 'safety-publicity-board-create');
|
|
|
-const currentId = computed(() => Number(route.query.id));
|
|
|
-
|
|
|
-const isCreateMode = computed(() => operate.value === 'safety-publicity-board-create');
|
|
|
-const isEditMode = computed(() => operate.value === 'safety-publicity-board-edit');
|
|
|
-const isViewMode = computed(() => operate.value === 'safety-publicity-board-view');
|
|
|
-
|
|
|
-const { ruleFormData, formRules, ruleFormConfig, cloneRuleFormData, beforeRouteLeave } =
|
|
|
- useFormConfigHook(ACADEMY_FILE_FORM_CONFIG, ACADEMY_FILE_FORM_DATA, ACADEMY_FILE_FORM_RULES);
|
|
|
-
|
|
|
-// 查看模式下,所有字段设为只读
|
|
|
-const viewFormConfig = ref(
|
|
|
- ACADEMY_FILE_FORM_CONFIG.map((item) => ({
|
|
|
- ...item,
|
|
|
- componentProps: {
|
|
|
- ...item.componentProps,
|
|
|
- disabled: true,
|
|
|
- },
|
|
|
- })),
|
|
|
-);
|
|
|
-
|
|
|
-const computedFormConfig = computed(() => {
|
|
|
- if (isViewMode.value) {
|
|
|
- return viewFormConfig.value;
|
|
|
- }
|
|
|
- return ruleFormConfig.value;
|
|
|
-});
|
|
|
-
|
|
|
-const basicFormRef = ref<InstanceType<typeof BasicForm>>();
|
|
|
+ import { computed, onMounted, ref, shallowRef, onBeforeUnmount } from 'vue';
|
|
|
+ import { useRoute, useRouter } from 'vue-router';
|
|
|
+ import { ElMessage } from 'element-plus';
|
|
|
+ import BasicForm from '@/components/BasicForm.vue';
|
|
|
+ import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
|
|
|
+ import { Editor, Toolbar } from '@wangeditor/editor-for-vue';
|
|
|
+ import '@wangeditor/editor/dist/css/style.css';
|
|
|
+ import { useFormConfigHook } from '@/hooks/useFormConfigHook';
|
|
|
+ import { ACADEMY_FILE_FORM_CONFIG, ACADEMY_FILE_FORM_DATA, ACADEMY_FILE_FORM_RULES } from '../configs/form';
|
|
|
+ import {
|
|
|
+ querySafetyPublicityBoardDetail,
|
|
|
+ saveSafetyPublicityBoardPage,
|
|
|
+ updateSafetyPublicityBoardPage,
|
|
|
+ } from '@/api/safety-culture';
|
|
|
+ import type { FileItem } from '@/components/UploadFiles/types';
|
|
|
+ import { formatAttachmentList } from '@/components/UploadFiles/utils';
|
|
|
+ import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
|
|
|
+
|
|
|
+ const router = useRouter();
|
|
|
+ const route = useRoute();
|
|
|
+
|
|
|
+ const operate = computed(() => (route.query.operate as string) || 'safety-publicity-board-create');
|
|
|
+ const currentId = computed(() => Number(route.query.id));
|
|
|
+
|
|
|
+ const isCreateMode = computed(() => operate.value === 'safety-publicity-board-create');
|
|
|
+ const isEditMode = computed(() => operate.value === 'safety-publicity-board-edit');
|
|
|
+ const isViewMode = computed(() => operate.value === 'safety-publicity-board-view');
|
|
|
+ const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
|
|
|
+
|
|
|
+ const { ruleFormData, formRules, ruleFormConfig, cloneRuleFormData } = useFormConfigHook(
|
|
|
+ ACADEMY_FILE_FORM_CONFIG,
|
|
|
+ ACADEMY_FILE_FORM_DATA,
|
|
|
+ ACADEMY_FILE_FORM_RULES,
|
|
|
+ );
|
|
|
+
|
|
|
+ // 查看模式下,所有字段设为只读
|
|
|
+ const viewFormConfig = ref(
|
|
|
+ ACADEMY_FILE_FORM_CONFIG.map((item) => ({
|
|
|
+ ...item,
|
|
|
+ componentProps: {
|
|
|
+ ...item.componentProps,
|
|
|
+ disabled: true,
|
|
|
+ },
|
|
|
+ })),
|
|
|
+ );
|
|
|
+
|
|
|
+ const computedFormConfig = computed(() => {
|
|
|
+ if (isViewMode.value) {
|
|
|
+ return viewFormConfig.value;
|
|
|
+ }
|
|
|
+ return ruleFormConfig.value;
|
|
|
+ });
|
|
|
|
|
|
-// 富文本编辑器
|
|
|
-const editorRef = shallowRef();
|
|
|
-const editorConfig = computed(() => ({
|
|
|
- placeholder: '请输入文档内容',
|
|
|
- MENU_CONF: {},
|
|
|
-}));
|
|
|
+ const basicFormRef = ref<InstanceType<typeof BasicForm>>();
|
|
|
|
|
|
-const handleEditorCreated = (editor: any) => {
|
|
|
- editorRef.value = editor;
|
|
|
-};
|
|
|
+ // 富文本编辑器
|
|
|
+ const editorRef = shallowRef();
|
|
|
+ const editorConfig = computed(() => ({
|
|
|
+ placeholder: '请输入文档内容',
|
|
|
+ MENU_CONF: {},
|
|
|
+ }));
|
|
|
|
|
|
-const handleEditorChange = () => {
|
|
|
- // 编辑器内容变化时的处理
|
|
|
-};
|
|
|
+ const handleEditorCreated = (editor: any) => {
|
|
|
+ editorRef.value = editor;
|
|
|
+ if (isViewMode.value) {
|
|
|
+ editor.disable();
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
-// 文件上传
|
|
|
-const handleUploadSuccess = (files: FileItem[]) => {
|
|
|
- ruleFormData.fileUrl = files;
|
|
|
-};
|
|
|
+ const handleEditorChange = () => {
|
|
|
+ // 编辑器内容变化时的处理
|
|
|
+ };
|
|
|
|
|
|
-// 将逗号分隔的URL字符串转换为FileItem数组
|
|
|
-const convertFileUrlToFileItems = (fileUrl: string): FileItem[] => {
|
|
|
- if (!fileUrl || !fileUrl.trim()) {
|
|
|
- return [];
|
|
|
- }
|
|
|
+ // 文件上传
|
|
|
+ const handleUploadSuccess = (files: FileItem[]) => {
|
|
|
+ ruleFormData.attachmentUrl = files;
|
|
|
+ };
|
|
|
|
|
|
- // 按逗号分割URL
|
|
|
- const urls = fileUrl.split(',').map(url => url.trim()).filter(url => url);
|
|
|
-
|
|
|
- return urls.map((url, index) => {
|
|
|
- // 从URL中提取文件名
|
|
|
- const urlParts = url.split('/');
|
|
|
- const fileName = urlParts[urlParts.length - 1] || `附件${index + 1}`;
|
|
|
-
|
|
|
- // 根据文件扩展名判断文件类型
|
|
|
- const extension = fileName.split('.').pop()?.toLowerCase() || '';
|
|
|
- let fileType = 'pdf';
|
|
|
- if (extension === 'doc' || extension === 'docx') {
|
|
|
- fileType = 'word';
|
|
|
- } else if (extension === 'xls' || extension === 'xlsx') {
|
|
|
- fileType = 'excel';
|
|
|
- } else if (extension === 'ppt' || extension === 'pptx') {
|
|
|
- fileType = 'ppt';
|
|
|
+ const parseAttachmentUrls = (attachmentUrl?: string): string[] => {
|
|
|
+ if (!attachmentUrl || !attachmentUrl.trim()) {
|
|
|
+ return [];
|
|
|
}
|
|
|
|
|
|
- return {
|
|
|
- fileId: Date.now() + index,
|
|
|
- fileName,
|
|
|
- fileType,
|
|
|
- fileSize: '0',
|
|
|
- fileUrl: url,
|
|
|
- };
|
|
|
- });
|
|
|
-};
|
|
|
+ const normalized = attachmentUrl.trim();
|
|
|
+
|
|
|
+ if (normalized.startsWith('[') && normalized.endsWith(']')) {
|
|
|
+ try {
|
|
|
+ const parsed = JSON.parse(normalized);
|
|
|
+ if (Array.isArray(parsed)) {
|
|
|
+ return parsed.map((item) => String(item).trim()).filter((item) => item);
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('解析 attachmentUrl 失败:', error);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-const handleValidate = async () => {
|
|
|
- if (!basicFormRef.value) return;
|
|
|
- const res = await basicFormRef.value.validateForm();
|
|
|
- return res;
|
|
|
-};
|
|
|
+ return normalized
|
|
|
+ .split(',')
|
|
|
+ .map((url) => url.trim())
|
|
|
+ .filter((url) => url);
|
|
|
+ };
|
|
|
|
|
|
-const getDetail = async () => {
|
|
|
- if (!currentId.value) return;
|
|
|
- try {
|
|
|
- const res = await queryAcademyFileById(currentId.value);
|
|
|
- if (res) {
|
|
|
- // 映射接口字段到表单字段
|
|
|
- ruleFormData.materialName = res.materialName || '';
|
|
|
- ruleFormData.categoryName = res.categoryName || '';
|
|
|
- ruleFormData.description = res.description || '';
|
|
|
- // ruleFormData.fileUrl = res.fileUrl ? convertFileUrlToFileItems(res.fileUrl) : [];
|
|
|
- ruleFormData.status = res.status ?? 1;
|
|
|
+ // 将逗号分隔的URL字符串转换为FileItem数组
|
|
|
+ const convertFileUrlToFileItems = (fileUrl: string): FileItem[] => {
|
|
|
+ if (!fileUrl || !fileUrl.trim()) {
|
|
|
+ return [];
|
|
|
}
|
|
|
- cloneRuleFormData();
|
|
|
- } catch (e) {
|
|
|
- console.error('获取院级文件详情失败:', e);
|
|
|
- ElMessage.error('获取详情失败');
|
|
|
- }
|
|
|
-};
|
|
|
+
|
|
|
+ // 按逗号分割URL
|
|
|
+ const urls = fileUrl.split(',').map(url => url.trim()).filter(url => url);
|
|
|
+
|
|
|
+ return urls.map((url, index) => {
|
|
|
+ // 从URL中提取文件名
|
|
|
+ const urlParts = url.split('/');
|
|
|
+ const fileName = urlParts[urlParts.length - 1] || `附件${index + 1}`;
|
|
|
+
|
|
|
+ // 根据文件扩展名判断文件类型
|
|
|
+ const extension = fileName.split('.').pop()?.toLowerCase() || '';
|
|
|
+ let fileType = 'pdf';
|
|
|
+ if (extension === 'doc' || extension === 'docx') {
|
|
|
+ fileType = 'word';
|
|
|
+ } else if (extension === 'xls' || extension === 'xlsx') {
|
|
|
+ fileType = 'excel';
|
|
|
+ } else if (extension === 'ppt' || extension === 'pptx') {
|
|
|
+ fileType = 'ppt';
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ fileId: Date.now() + index,
|
|
|
+ fileName,
|
|
|
+ fileType,
|
|
|
+ fileSize: '0',
|
|
|
+ fileUrl: url,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ const handleValidate = async () => {
|
|
|
+ if (!basicFormRef.value) return;
|
|
|
+ const res = await basicFormRef.value.validateForm();
|
|
|
+ return res;
|
|
|
+ };
|
|
|
+
|
|
|
+ const getDetail = async () => {
|
|
|
+ if (!currentId.value) return;
|
|
|
+ try {
|
|
|
+ const res = await querySafetyPublicityBoardDetail(currentId.value);
|
|
|
+ if (res) {
|
|
|
+ ruleFormData.materialName = res.materialName || '';
|
|
|
+ ruleFormData.categoryName = res.categoryName || '';
|
|
|
+ ruleFormData.description = res.description || '';
|
|
|
+ ruleFormData.attachmentUrl = JSON.parse(res.attachmentUrl || res.fileUrl || '');
|
|
|
+ ruleFormData.status = res.status ?? 1;
|
|
|
+ }
|
|
|
+ cloneRuleFormData();
|
|
|
+ } catch (e) {
|
|
|
+ console.error('获取院级文件详情失败:', e);
|
|
|
+ ElMessage.error('获取详情失败');
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
-const handleSubmit = async () => {
|
|
|
- const res = await handleValidate();
|
|
|
- if (!res) return;
|
|
|
+ const handleSubmit = async () => {
|
|
|
+ const res = await handleValidate();
|
|
|
+ if (!res) return;
|
|
|
|
|
|
- // 验证文件上传(必填)
|
|
|
- if (!ruleFormData.fileUrlList || ruleFormData.fileUrlList.length === 0) {
|
|
|
- ElMessage.warning('请上传文件');
|
|
|
- return;
|
|
|
- }
|
|
|
- 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] : '';
|
|
|
- // }
|
|
|
-
|
|
|
- const basePayload = {
|
|
|
- materialName: ruleFormData.materialName,
|
|
|
- categoryName: ruleFormData.categoryName,
|
|
|
- description: ruleFormData.description,
|
|
|
- fileFormat: ruleFormData.fileFormat === 'PDF' ? 1 : 2,
|
|
|
- status: ruleFormData.status ?? 1,
|
|
|
- };
|
|
|
- if (isCreateMode.value) {
|
|
|
- // await saveAcademyFile(basePayload);
|
|
|
- ElMessage.success('创建成功');
|
|
|
- } else if (isEditMode.value && currentId.value) {
|
|
|
- // await updateAcademyFile({
|
|
|
- // id: currentId.value,
|
|
|
- // ...basePayload,
|
|
|
- // });
|
|
|
- ElMessage.success('保存成功');
|
|
|
+ // 验证文件上传(必填)
|
|
|
+ if (!ruleFormData.attachmentUrl || ruleFormData.attachmentUrl.length === 0) {
|
|
|
+ ElMessage.warning('请上传文件');
|
|
|
+ return;
|
|
|
}
|
|
|
-
|
|
|
- router.back();
|
|
|
- } catch (e) {
|
|
|
- console.error('保存院级文件失败:', e);
|
|
|
- ElMessage.error('保存失败,请重试');
|
|
|
+ try {
|
|
|
+ const uploadedFileList = await formatAttachmentList(ruleFormData.attachmentUrl);
|
|
|
+ const basePayload = {
|
|
|
+ materialName: ruleFormData.materialName,
|
|
|
+ categoryName: ruleFormData.categoryName,
|
|
|
+ description: ruleFormData.description,
|
|
|
+ attachmentUrl: JSON.stringify(uploadedFileList),
|
|
|
+ };
|
|
|
+ if (isCreateMode.value) {
|
|
|
+ await saveSafetyPublicityBoardPage(basePayload);
|
|
|
+ ElMessage.success('创建成功');
|
|
|
+ } else if (isEditMode.value && currentId.value) {
|
|
|
+ await updateSafetyPublicityBoardPage({
|
|
|
+ id: currentId.value,
|
|
|
+ ...basePayload,
|
|
|
+ });
|
|
|
+ ElMessage.success('保存成功');
|
|
|
+ }
|
|
|
+
|
|
|
+ router.back();
|
|
|
+ } catch (e) {
|
|
|
+ console.error('保存院级文件失败:', e);
|
|
|
+ ElMessage.error('保存失败,请重试');
|
|
|
+ }
|
|
|
+ };
|
|
|
+ const previewOnline = (url: string | undefined, type) => {
|
|
|
+ if (url) {
|
|
|
+ previewOnlineRef.value?.open(url, type);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-const handleImageUploadSuccess = (response: any, file: any, fileList: any[]) => {
|
|
|
- const imageUrl = response.data?.url || file.url;
|
|
|
- ruleFormData.imageFileUrl = fileList.map(item => ({
|
|
|
- fileId: Date.now() + Math.random(),
|
|
|
- fileName: item.name,
|
|
|
- fileType: 'image',
|
|
|
- fileSize: (item.size / 1024).toFixed(2) + 'KB',
|
|
|
- fileUrl: imageUrl || item.url
|
|
|
- }));
|
|
|
-};
|
|
|
-
|
|
|
-const handleImageRemove = (file: any, fileList: any[]) => {
|
|
|
- ruleFormData.imageFileUrl = fileList.map(item => ({
|
|
|
- fileId: item.fileId || Date.now() + Math.random(),
|
|
|
- fileName: item.name || item.fileName,
|
|
|
- fileType: 'image',
|
|
|
- fileSize: item.size ? (item.size / 1024).toFixed(2) + 'KB' : item.fileSize,
|
|
|
- fileUrl: item.url || item.fileUrl
|
|
|
- }));
|
|
|
-};
|
|
|
-
|
|
|
-onMounted(() => {
|
|
|
- cloneRuleFormData();
|
|
|
- // beforeRouteLeave();
|
|
|
- if (isEditMode.value || isViewMode.value) {
|
|
|
- getDetail();
|
|
|
- }
|
|
|
-});
|
|
|
+ // const handleImageUploadSuccess = (response: any, file: any, fileList: any[]) => {
|
|
|
+ // const imageUrl = response.data?.url || file.url;
|
|
|
+ // ruleFormData.imageFileUrl = fileList.map((item) => ({
|
|
|
+ // fileId: Date.now() + Math.random(),
|
|
|
+ // fileName: item.name,
|
|
|
+ // fileType: 'image',
|
|
|
+ // fileSize: (item.size / 1024).toFixed(2) + 'KB',
|
|
|
+ // fileUrl: imageUrl || item.url,
|
|
|
+ // }));
|
|
|
+ // };
|
|
|
+
|
|
|
+ // const handleImageRemove = (file: any, fileList: any[]) => {
|
|
|
+ // ruleFormData.imageFileUrl = fileList.map((item) => ({
|
|
|
+ // fileId: item.fileId || Date.now() + Math.random(),
|
|
|
+ // fileName: item.name || item.fileName,
|
|
|
+ // fileType: 'image',
|
|
|
+ // fileSize: item.size ? (item.size / 1024).toFixed(2) + 'KB' : item.fileSize,
|
|
|
+ // fileUrl: item.url || item.fileUrl,
|
|
|
+ // }));
|
|
|
+ // };
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ cloneRuleFormData();
|
|
|
+ // beforeRouteLeave();
|
|
|
+ if (isEditMode.value || isViewMode.value) {
|
|
|
+ getDetail();
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
-onBeforeUnmount(() => {
|
|
|
- const editor = editorRef.value;
|
|
|
- if (editor == null) return;
|
|
|
- editor.destroy();
|
|
|
-});
|
|
|
+ onBeforeUnmount(() => {
|
|
|
+ const editor = editorRef.value;
|
|
|
+ if (editor == null) return;
|
|
|
+ editor.destroy();
|
|
|
+ });
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
-@use '@/styles/page-details-layout.scss' as *;
|
|
|
+ @use '@/styles/page-details-layout.scss' as *;
|
|
|
|
|
|
-.editor-container {
|
|
|
- width: 100%;
|
|
|
- border: 1px solid #dcdfe6;
|
|
|
- border-radius: 4px;
|
|
|
- overflow: hidden;
|
|
|
-}
|
|
|
+ .editor-container {
|
|
|
+ width: 100%;
|
|
|
+ border: 1px solid #dcdfe6;
|
|
|
+ border-radius: 4px;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
|
|
|
-.content-display {
|
|
|
- min-height: 200px;
|
|
|
- padding: 12px;
|
|
|
- border: 1px solid #dcdfe6;
|
|
|
- border-radius: 4px;
|
|
|
- background-color: #f5f7fa;
|
|
|
-}
|
|
|
+ .content-display {
|
|
|
+ min-height: 200px;
|
|
|
+ padding: 12px;
|
|
|
+ border: 1px solid #dcdfe6;
|
|
|
+ border-radius: 4px;
|
|
|
+ background-color: #f5f7fa;
|
|
|
+ }
|
|
|
|
|
|
-.file-display {
|
|
|
- .file-link {
|
|
|
- color: #409eff;
|
|
|
- text-decoration: none;
|
|
|
+ .file-display {
|
|
|
+ .file-link {
|
|
|
+ color: #409eff;
|
|
|
+ text-decoration: none;
|
|
|
|
|
|
- &:hover {
|
|
|
- text-decoration: underline;
|
|
|
+ &:hover {
|
|
|
+ text-decoration: underline;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-.no-file {
|
|
|
- color: rgba(0, 0, 0, 0.65);
|
|
|
-}
|
|
|
-
|
|
|
-.image-uploader {
|
|
|
- :deep(.el-upload--picture-card) {
|
|
|
- width: 80px !important;
|
|
|
- height: 80px !important;
|
|
|
- line-height: 80px;
|
|
|
+ .no-file {
|
|
|
+ color: rgba(0, 0, 0, 0.65);
|
|
|
}
|
|
|
|
|
|
- :deep(.el-upload-list--picture-card .el-upload-list__item) {
|
|
|
- width: 80px !important;
|
|
|
- height: 80px !important;
|
|
|
+ .image-uploader {
|
|
|
+ :deep(.el-upload--picture-card) {
|
|
|
+ width: 80px !important;
|
|
|
+ height: 80px !important;
|
|
|
+ line-height: 80px;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.el-upload-list--picture-card .el-upload-list__item) {
|
|
|
+ width: 80px !important;
|
|
|
+ height: 80px !important;
|
|
|
+ }
|
|
|
}
|
|
|
+</style>
|
|
|
+
|
|
|
+<style lang="scss">
|
|
|
+.w-e-full-screen-container {
|
|
|
+ inset: 0 !important;
|
|
|
+ z-index: 3000 !important;
|
|
|
+}
|
|
|
+
|
|
|
+.w-e-full-screen-container .w-e-text-container {
|
|
|
+ height: calc(100vh - 42px) !important;
|
|
|
}
|
|
|
</style>
|