From 63d9a9c62fd34f4b48a157e0bc57dd82ee09a197 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 27 十一月 2025 17:36:12 +0800
Subject: [PATCH] 2025.11.27

---
 src/views/fysp/scene/SceneInspectFile.vue |  145 +++++++++++++++++++++++++-----------------------
 1 files changed, 76 insertions(+), 69 deletions(-)

diff --git a/src/views/fysp/scene/SceneInspectFile.vue b/src/views/fysp/scene/SceneInspectFile.vue
index e59d32a..7bec485 100644
--- a/src/views/fysp/scene/SceneInspectFile.vue
+++ b/src/views/fysp/scene/SceneInspectFile.vue
@@ -2,7 +2,7 @@
   <el-dialog
     :model-value="modelValue"
     @update:model-value="handleDialogChange"
-    title="宸℃煡鍗曟嵁涓嬭浇"
+    title="宸℃煡鍗曟嵁涓嬭浇鎵撳嵃"
     class="dialog-wrapper"
     v-loading="loading"
   >
@@ -43,9 +43,9 @@
                 type="default"
                 size="small"
                 class="m-t-4"
+                icon="IconPrinter"
                 @click="handlePreview(item)"
               >
-                棰勮
               </el-button>
             </el-row>
           </el-checkbox>
@@ -54,17 +54,33 @@
     </el-scrollbar>
     <template #footer>
       <div class="dialog-footer">
-        <el-button type="danger" @click="cancel">鍙栨秷</el-button>
-        <el-button type="primary" :loading="docLoading" @click="handelDownload">
-          涓嬭浇
+        <el-button type="danger" @click="cancel" icon="CloseBold"
+          >鍙栨秷</el-button
+        >
+        <el-button
+          type="primary"
+          :loading="docLoading"
+          icon="Download"
+          :disabled="checkList.length == 0"
+          @click="handelDownload"
+        >
+          涓嬭浇鎵�閫�
         </el-button>
-        <el-button type="default" :loading="docLoading" @click="handelPrint">
-          鎵撳嵃
+        <el-button
+          type="default"
+          :loading="docLoading"
+          :disabled="checkList.length == 0"
+          @click="handlePreview()"
+          icon="IconPrinter"
+        >
+          <el-space>
+            鎵撳嵃鎵�閫�
+          </el-space>
         </el-button>
       </div>
     </template>
   </el-dialog>
-  <el-dialog v-model="previewVisible" :show-close="true" fullscreen>
+  <el-dialog v-model="previewVisible" :show-close="false" fullscreen>
     <template #header="{ close, titleId, titleClass }">
       <el-row justify="end">
         <el-button type="danger" @click="close" icon="CircleCloseFilled">
@@ -73,14 +89,18 @@
         <el-button
           type="primary"
           @click="handelPrint(refWord)"
-          icon="PrintFilled"
+          icon="IconPrinter"
         >
           鎵撳嵃
         </el-button>
       </el-row>
     </template>
     <div ref="refWord">
-      
+      <div
+        :id="`word-preview-${i}`"
+        v-for="(item, i) in previewList"
+        :key="item"
+      ></div>
     </div>
     <!-- <iframe ref="pdfPreview" width="100%" height="100vh" style="height: calc(100vh - 60px);"></iframe> -->
   </el-dialog>
@@ -90,7 +110,7 @@
  * 鍦烘櫙宸℃煡鍗曟嵁鑷姩涓嬭浇
  */
 import { ref, watch } from 'vue';
-import { useRouter } from "vue-router";
+import { useRouter } from 'vue-router';
 import {
   exportDocx,
   prepareDocxBlob,
@@ -124,6 +144,8 @@
 
 // 棰勮瀵硅瘽妗嗗紑鍏�
 const previewVisible = ref(false);
+// 棰勮鐨勬枃妗�
+const previewList = ref([]);
 
 watch(
   () => [props.modelValue, props.value],
@@ -236,7 +258,7 @@
 
 // 鏍规嵁鍦烘櫙绫诲瀷锛岀敓鎴愬搴旂殑word鏂囨。
 function generateDoc(param, callback) {
-  param.map((p) => {
+  param.map((p, index) => {
     let template, _param;
     switch (p.type) {
       // 宸ュ湴
@@ -253,30 +275,7 @@
         break;
     }
     prepareDocxBlob(template, _param).then((blob) => {
-      callback(blob, `${_param.name}宸℃煡鍗曟嵁.docx`);
-    });
-  });
-}
-
-function generatePdf(param, callback) {
-  param.map((p) => {
-    let template, _param;
-    switch (p.type) {
-      // 宸ュ湴
-      case 1:
-        template = '/宸ュ湴宸℃煡鍗曟嵁妯℃澘-绠�鐗�.docx';
-        _param = p.params;
-        break;
-      // 椁愰ギ
-      case 5:
-        template = '/椁愰ギ宸℃煡鍗曟嵁妯℃澘.docx';
-        _param = p.params;
-        break;
-      default:
-        break;
-    }
-    preparePdf(template, _param).then((blob) => {
-      callback(blob, `${_param.name}宸℃煡鍗曟嵁.pdf`);
+      callback(blob, `${_param.name}宸℃煡鍗曟嵁.docx`, index);
     });
   });
 }
@@ -298,47 +297,36 @@
 // 鐐瑰嚮鎵撳嵃鎸夐挳鎿嶄綔
 function handelPrint(ref) {
   if (ref) {
-    print(ref);
+    print({
+      ref,
+      // 鏍规嵁鐩墠浣跨敤鐨刣ocx-preview缁勪欢锛岃缃墦鍗版牱寮忥紝涓昏鍘婚櫎澶氫綑鐨刴argin鍜宲adding锛屼互鍙婇槾褰辨晥鏋�
+      style: `
+        @page{size:A4;margin: 0 !important;padding:0 !important;} 
+        body {margin: 0 !important;padding:0 !important;} 
+        header {color: rgb(182, 182, 182);}
+        footer {color: rgb(182, 182, 182);}
+        .docx-wrapper {padding: 0 !important;}
+        .docx {margin-bottom: 0 !important; box-shadow: none !important;}
+        .docx_5 {
+          display: flex;
+          justify-content: space-between;
+          align-items: flex-end;
+        }
+      `
+    });
   }
-  // const file = filePrepare();
-  // if (file) {
-  //   previewDocx(file.blob, refWord.value);
-  // }
 }
 
 function handlePreview(item) {
-  const param = parseParam(item);
+  // 棰勮鐨勬枃妗o紝鍖哄垎鍗曠嫭鎵撳嵃鍜屾墦鍗板叏閮�
+  previewList.value = item ? ['0'] : checkList.value;
+  const param = item ? parseParam(item) : parseParam();
   if (param) {
-    generatePdf(param, (blob, name) => {
+    generateDoc(param, (blob, name, index) => {
       previewVisible.value = true;
       setTimeout(() => {
-        previewDocx(blob, refWord.value);        
+        previewDocx(blob, document.getElementById(`word-preview-${index}`));
       }, 200);
-      // blob.print()
-      // blob.getBlob((buffer) => {
-      //   previewDocx(buffer, refWord.value);
-      // });
-
-      // const resolved = router.resolve({
-      //   path: '/fysp/scene/SceneInspectFile',
-      //   query: {
-      //     data: JSON.stringify(blob),
-      //   }
-      // });
-      // window.open(resolved.href, '_blank')
-
-
-      // console.log('pdf', blob);
-
-      // blob.autoPrint();
-      // // blob.save(name)
-      // // 鐢熸垚PDF鐨凚lob瀵硅薄
-      // var pdfBlob = blob.output('blob');
-
-      // setTimeout(() => {
-      //   // 鍦╥frame涓樉绀洪瑙�
-      //   pdfPreview.value.src = URL.createObjectURL(pdfBlob);
-      // }, 200);
     });
   }
 }
@@ -363,4 +351,23 @@
 :deep(.el-checkbox__label) {
   width: 100%;
 }
+
+/* 鏂囨。瀛椾綋 */
+:deep(section.docx) {
+  font-family: '榛戜綋' !important;
+}
+/* 鏂囨。鏍囬 */
+:deep(header) {
+  color: rgb(182, 182, 182);
+}
+:deep(.docx_5) {
+  display: flex;
+  justify-content: space-between;
+  align-items: flex-end;
+}
+
+/*  */
+:deep(footer) {
+  color: rgb(182, 182, 182);
+}
 </style>

--
Gitblit v1.9.3