lixuan 2 месяцев назад
Родитель
Сommit
b3e9f793ca

+ 46 - 3
src/views/production-safety/productionSafetySystem/lawManagement/components/lawManagementDetail.vue

@@ -14,13 +14,27 @@
       </template>
       <template #fileUrl>
         <UploadFiles
+          v-if="!isViewMode"
           label="上传文件"
           :maxCount="1"
           :file-list="ruleFormData.fileUrlList"
-          :disabled="isViewMode"
           :allow-all-file-types="true"
-          @uploadSuccess="(list: FileItem[]) => handleUploadSuccess(list)" 
+          @uploadSuccess="(list: FileItem[]) => handleUploadSuccess(list)"
+          @preview="handlePreview"
         />
+        <div class="file-list" v-else>
+          <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>
       </template>
       <template #content>
         <div class="editor-container" v-if="!isViewMode">
@@ -46,6 +60,7 @@
         </el-radio-group>
       </template>
     </BasicForm>
+    <PreviewOnline ref="previewOnlineRef" />
   </main>
   <footer class="safety-platform-container__footer">
     <el-button @click="router.back()">返回</el-button>
@@ -73,10 +88,13 @@
   } 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';
 
   const router = useRouter();
   const route = useRoute();
 
+  const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
+
   const operate = computed(() => (route.query.operate as string) || 'law-regulation-create');
   const currentId = computed(() => Number(route.query.id));
 
@@ -235,8 +253,11 @@
       //   // 合并已有URL和新上传的URL,取第一个作为fileUrl
       //   const allUrls = [...existingFiles, ...uploadedUrls].filter((url: string) => url);
       //   fileUrl = allUrls.length > 0 ? allUrls[0] : '';
+      //   debugger
       // }
 
+      const uploadedFileList = await formatAttachmentList(ruleFormData.fileUrlList);
+
       const basePayload: ProductionSafetyFile = {
         fileName: ruleFormData.fileName,
         classifyName: ruleFormData.classifyName,
@@ -244,7 +265,7 @@
         fileVersion: ruleFormData.fileVersion,
         fileFormat: ruleFormData.fileFormat,
         releaseDate: ruleFormData.releaseDate,
-        fileUrl: JSON.stringify(ruleFormData.fileUrlList) || undefined,
+        fileUrl: JSON.stringify(uploadedFileList) || undefined,
         content: ruleFormData.content || undefined,
         status: ruleFormData.status ?? 1,
       };
@@ -267,6 +288,28 @@
     }
   };
 
+  const handlePreview = (url: string) => {
+    if (url) {
+      // 根据文件扩展名判断文件类型
+      const extension = url.split('.').pop()?.toLowerCase() || '';
+      let fileType: 'pdf' | 'word' | 'excel' | 'ppt' = 'pdf';
+      if (extension === 'doc' || extension === 'docx') {
+        fileType = 'word';
+      } else if (extension === 'xls' || extension === 'xlsx') {
+        fileType = 'excel';
+      } else if (extension === 'ppt' || extension === 'pptx') {
+        fileType = 'ppt';
+      }
+      previewOnlineRef.value?.open(url, fileType);
+    }
+  };
+
+  const previewOnline = (url: string | undefined, type) => {
+    if (url) {
+      previewOnlineRef.value?.open(url, type);
+    }
+  };
+
   onMounted(() => {
     cloneRuleFormData();
     beforeRouteLeave();

+ 27 - 1
src/views/production-safety/productionSafetySystem/safetyTraining/components/safetyTrainingDetail.vue

@@ -14,6 +14,7 @@
       </template>
       <template #fileUrl>
         <UploadFiles
+          v-if="!isViewMode"
           label="上传文件"
           :maxCount="1"
           :file-list="ruleFormData.fileUrlList"
@@ -21,6 +22,19 @@
           :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.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>
       </template>
       <template #content>
         <div class="editor-container" v-if="!isViewMode">
@@ -46,6 +60,7 @@
         </el-radio-group>
       </template>
     </BasicForm>
+    <PreviewOnline ref="previewOnlineRef" />
   </main>
   <footer class="safety-platform-container__footer">
     <el-button @click="router.back()">返回</el-button>
@@ -77,6 +92,9 @@
   } 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';
+
+  const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
 
   const router = useRouter();
   const route = useRoute();
@@ -242,6 +260,8 @@
       //   fileUrl = allUrls.length > 0 ? allUrls[0] : '';
       // }
 
+      const uploadedFileList = await formatAttachmentList(ruleFormData.fileUrlList);
+
       const basePayload: ProductionSafetyFile = {
         fileName: ruleFormData.fileName,
         classifyName: ruleFormData.classifyName,
@@ -249,7 +269,7 @@
         fileVersion: ruleFormData.fileVersion,
         fileFormat: ruleFormData.fileFormat,
         releaseDate: ruleFormData.releaseDate,
-        fileUrl: JSON.stringify(ruleFormData.fileUrlList) || undefined,
+        fileUrl: JSON.stringify(uploadedFileList) || undefined,
         content: ruleFormData.content || undefined,
         status: ruleFormData.status ?? 1,
       };
@@ -272,6 +292,12 @@
     }
   };
 
+  const previewOnline = (url: string | undefined, type) => {
+    if (url) {
+      previewOnlineRef.value?.open(url, type);
+    }
+  };
+
   onMounted(() => {
     cloneRuleFormData();
     beforeRouteLeave();