From b187b6cf678f0e6b17e3612c5681ecd35434f15a Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期三, 25 六月 2025 10:36:11 +0800
Subject: [PATCH] 任务管理界面新增巡查单据下载功能

---
 /dev/null                                 |    0 
 package-lock.json                         |  180 ++++++++++++++++++++++++++++-------
 public/餐饮巡查单据模板.docx                      |    0 
 src/components/FYImageSelectDialog.vue    |   23 +++-
 package.json                              |    2 
 public/工地巡查单据模板.docx                      |    0 
 src/views/fysp/scene/SceneInspectFile.vue |   69 ++++++++-----
 7 files changed, 207 insertions(+), 67 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 32e37e1..b3f4309 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,6 +15,7 @@
         "@vueuse/core": "^9.7.0",
         "axios": "^1.2.1",
         "dayjs": "^1.11.13",
+        "docx-preview": "^0.3.5",
         "docxtemplater": "^3.50.0",
         "docxtemplater-image-module": "^3.1.0",
         "docxtemplater-image-module-free": "^1.1.1",
@@ -32,6 +33,7 @@
         "vue": "^3.2.45",
         "vue-demi": "^0.14.6",
         "vue-i18n": "^9.8.0",
+        "vue-print-nb": "^1.7.5",
         "vue-router": "^4.1.6",
         "xlsx": "^0.18.5"
       },
@@ -512,17 +514,17 @@
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.19.4",
-      "dev": true,
-      "license": "MIT",
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.19.1",
-      "dev": true,
-      "license": "MIT",
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
       "engines": {
         "node": ">=6.9.0"
       }
@@ -640,8 +642,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.20.5",
-      "license": "MIT",
+      "version": "7.27.5",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.5.tgz",
+      "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
+      "dependencies": {
+        "@babel/types": "^7.27.3"
+      },
       "bin": {
         "parser": "bin/babel-parser.js"
       },
@@ -1785,13 +1791,12 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.20.5",
-      "dev": true,
-      "license": "MIT",
+      "version": "7.27.6",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.27.6.tgz",
+      "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.19.4",
-        "@babel/helper-validator-identifier": "^7.19.1",
-        "to-fast-properties": "^2.0.0"
+        "@babel/helper-string-parser": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3948,6 +3953,14 @@
       },
       "engines": {
         "node": ">=6.0.0"
+      }
+    },
+    "node_modules/docx-preview": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmmirror.com/docx-preview/-/docx-preview-0.3.5.tgz",
+      "integrity": "sha512-nod1jG5PkvzDIiZAcgAY4gSFQzgmAAChcuZH4Hj9dj7oCzscY3Hn8NfbUv7X7Jk4xL1lfKO113JLDhWKOt6fYw==",
+      "dependencies": {
+        "jszip": ">=3.0.0"
       }
     },
     "node_modules/docxtemplater": {
@@ -7455,14 +7468,6 @@
         "node": ">=8.17.0"
       }
     },
-    "node_modules/to-fast-properties": {
-      "version": "2.0.0",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/to-regex-range": {
       "version": "5.0.1",
       "dev": true,
@@ -8086,6 +8091,57 @@
       },
       "peerDependencies": {
         "vue": "^3.0.0"
+      }
+    },
+    "node_modules/vue-print-nb": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npmmirror.com/vue-print-nb/-/vue-print-nb-1.7.5.tgz",
+      "integrity": "sha512-iNbNyUVRWz0Ha1UTiCKxMPtHLUDGgNI8e8xmD3xqm9RlXIUeX9bT7DgNAfY8vPzqyFRHqGjxLI1rycKH366ziQ==",
+      "dependencies": {
+        "vue": "^2.6.11"
+      }
+    },
+    "node_modules/vue-print-nb/node_modules/@vue/compiler-sfc": {
+      "version": "2.7.16",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
+      "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
+      "dependencies": {
+        "@babel/parser": "^7.23.5",
+        "postcss": "^8.4.14",
+        "source-map": "^0.6.1"
+      },
+      "optionalDependencies": {
+        "prettier": "^1.18.2 || ^2.0.0"
+      }
+    },
+    "node_modules/vue-print-nb/node_modules/csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+    },
+    "node_modules/vue-print-nb/node_modules/prettier": {
+      "version": "2.8.8",
+      "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz",
+      "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+      "optional": true,
+      "bin": {
+        "prettier": "bin-prettier.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    },
+    "node_modules/vue-print-nb/node_modules/vue": {
+      "version": "2.7.16",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.16.tgz",
+      "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
+      "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.",
+      "dependencies": {
+        "@vue/compiler-sfc": "2.7.16",
+        "csstype": "^3.1.0"
       }
     },
     "node_modules/vue-router": {
@@ -8758,12 +8814,14 @@
       }
     },
     "@babel/helper-string-parser": {
-      "version": "7.19.4",
-      "dev": true
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
     },
     "@babel/helper-validator-identifier": {
-      "version": "7.19.1",
-      "dev": true
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
     },
     "@babel/helper-validator-option": {
       "version": "7.18.6",
@@ -8842,7 +8900,12 @@
       }
     },
     "@babel/parser": {
-      "version": "7.20.5"
+      "version": "7.27.5",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.5.tgz",
+      "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
+      "requires": {
+        "@babel/types": "^7.27.3"
+      }
     },
     "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
       "version": "7.18.6",
@@ -9515,12 +9578,12 @@
       }
     },
     "@babel/types": {
-      "version": "7.20.5",
-      "dev": true,
+      "version": "7.27.6",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.27.6.tgz",
+      "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==",
       "requires": {
-        "@babel/helper-string-parser": "^7.19.4",
-        "@babel/helper-validator-identifier": "^7.19.1",
-        "to-fast-properties": "^2.0.0"
+        "@babel/helper-string-parser": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1"
       }
     },
     "@colors/colors": {
@@ -10998,6 +11061,14 @@
       "dev": true,
       "requires": {
         "esutils": "^2.0.2"
+      }
+    },
+    "docx-preview": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmmirror.com/docx-preview/-/docx-preview-0.3.5.tgz",
+      "integrity": "sha512-nod1jG5PkvzDIiZAcgAY4gSFQzgmAAChcuZH4Hj9dj7oCzscY3Hn8NfbUv7X7Jk4xL1lfKO113JLDhWKOt6fYw==",
+      "requires": {
+        "jszip": ">=3.0.0"
       }
     },
     "docxtemplater": {
@@ -13309,10 +13380,6 @@
         "rimraf": "^3.0.0"
       }
     },
-    "to-fast-properties": {
-      "version": "2.0.0",
-      "dev": true
-    },
     "to-regex-range": {
       "version": "5.0.1",
       "dev": true,
@@ -13669,6 +13736,47 @@
         "@vue/devtools-api": "^6.5.0"
       }
     },
+    "vue-print-nb": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npmmirror.com/vue-print-nb/-/vue-print-nb-1.7.5.tgz",
+      "integrity": "sha512-iNbNyUVRWz0Ha1UTiCKxMPtHLUDGgNI8e8xmD3xqm9RlXIUeX9bT7DgNAfY8vPzqyFRHqGjxLI1rycKH366ziQ==",
+      "requires": {
+        "vue": "^2.6.11"
+      },
+      "dependencies": {
+        "@vue/compiler-sfc": {
+          "version": "2.7.16",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
+          "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
+          "requires": {
+            "@babel/parser": "^7.23.5",
+            "postcss": "^8.4.14",
+            "prettier": "^1.18.2 || ^2.0.0",
+            "source-map": "^0.6.1"
+          }
+        },
+        "csstype": {
+          "version": "3.1.3",
+          "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+          "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+        },
+        "prettier": {
+          "version": "2.8.8",
+          "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz",
+          "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+          "optional": true
+        },
+        "vue": {
+          "version": "2.7.16",
+          "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.16.tgz",
+          "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
+          "requires": {
+            "@vue/compiler-sfc": "2.7.16",
+            "csstype": "^3.1.0"
+          }
+        }
+      }
+    },
     "vue-router": {
       "version": "4.1.6",
       "requires": {
diff --git a/package.json b/package.json
index 4b341e9..c219580 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
     "@vueuse/core": "^9.7.0",
     "axios": "^1.2.1",
     "dayjs": "^1.11.13",
+    "docx-preview": "^0.3.5",
     "docxtemplater": "^3.50.0",
     "docxtemplater-image-module": "^3.1.0",
     "docxtemplater-image-module-free": "^1.1.1",
@@ -37,6 +38,7 @@
     "vue": "^3.2.45",
     "vue-demi": "^0.14.6",
     "vue-i18n": "^9.8.0",
+    "vue-print-nb": "^1.7.5",
     "vue-router": "^4.1.6",
     "xlsx": "^0.18.5"
   },
diff --git "a/public/\345\267\245\345\234\260\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277.docx" "b/public/\345\267\245\345\234\260\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277.docx"
index c1a8470..5455724 100644
--- "a/public/\345\267\245\345\234\260\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277.docx"
+++ "b/public/\345\267\245\345\234\260\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277.docx"
Binary files differ
diff --git "a/public/\351\244\220\351\245\256\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277.doc" "b/public/\351\244\220\351\245\256\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277.doc"
deleted file mode 100644
index b65f9c3..0000000
--- "a/public/\351\244\220\351\245\256\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277.doc"
+++ /dev/null
Binary files differ
diff --git "a/public/\351\244\220\351\245\256\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277.docx" "b/public/\351\244\220\351\245\256\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277.docx"
new file mode 100644
index 0000000..5ce80a0
--- /dev/null
+++ "b/public/\351\244\220\351\245\256\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277.docx"
Binary files differ
diff --git a/src/components/FYImageSelectDialog.vue b/src/components/FYImageSelectDialog.vue
index 4d2602a..7a10793 100644
--- a/src/components/FYImageSelectDialog.vue
+++ b/src/components/FYImageSelectDialog.vue
@@ -9,9 +9,18 @@
     :close-on-press-escape="false"
   >
     <el-row justify="end">
-      <el-text v-if="onContextMenu != undefined" size="small" type="info">{{
-        `锛�${contextMenuStr}锛塦
-      }}</el-text>
+      <el-space v-if="onContextMenu != undefined">
+        <el-switch
+          v-model="useContextMenu"
+          inline-prompt
+          active-text="寮�"
+          inactive-text="鍏�"
+        />
+        <el-text size="small" type="info">
+          {{ `锛�${contextMenuStr}锛塦 }}
+        </el-text>
+      </el-space>
+
       <div v-if="!readonly">
         <el-text size="small" type="info" class="m-r-8"
           >鏈�澶氶�夋嫨{{ maxSelect }}寮犲浘鐗�</el-text
@@ -104,7 +113,7 @@
   },
   contextMenuStr: {
     type: String,
-    default: '鍙抽敭鐐瑰嚮鍥剧墖瑙﹀彂棰濆鎿嶄綔'
+    default: '鍙抽敭鐐瑰嚮鍥剧墖绉诲姩'
   }
 });
 
@@ -113,6 +122,8 @@
 const activeId = ref('');
 
 const selectedImgUrlList = ref([]);
+
+const useContextMenu = ref(false);
 
 let loadedImgCount = ref(0);
 // 鍔犺浇鐘舵��
@@ -186,9 +197,9 @@
   emit('update:dialogVisible', false);
 }
 
-// 鍥剧墖鍙抽敭鐐瑰嚮鏃堕棿
+// 鍥剧墖鍙抽敭鐐瑰嚮浜嬩欢
 function showContextMenu(event, index) {
-  if (props.onContextMenu) {
+  if (props.onContextMenu && useContextMenu.value) {
     event.preventDefault();
     props.onContextMenu(event, activeId.value, index);
   }
diff --git a/src/views/fysp/scene/SceneInspectFile.vue b/src/views/fysp/scene/SceneInspectFile.vue
index ddd17c8..3e1d912 100644
--- a/src/views/fysp/scene/SceneInspectFile.vue
+++ b/src/views/fysp/scene/SceneInspectFile.vue
@@ -53,9 +53,9 @@
         <el-button type="primary" :loading="docLoading" @click="handelDownload">
           涓嬭浇
         </el-button>
-        <el-button type="default" :loading="docLoading" @click="handelPrint">
+        <!-- <el-button type="default" :loading="docLoading" @click="handelPrint">
           鎵撳嵃
-        </el-button>
+        </el-button> -->
       </div>
     </template>
   </el-dialog>
@@ -124,6 +124,20 @@
   emits('update:modelValue', value);
 }
 
+function setParam(value, length) {
+  const _value = value ? value : '';
+  const offset = length - _value.length;
+  if (offset > 0) {
+    let str = _value;
+    for (let i = 0; i < offset; i++) {
+      str += ' ';
+    }
+    return str;
+  } else {
+    return _value;
+  }
+}
+
 // 鏍煎紡鍖栧満鏅俊鎭紝鐢熸垚鍙傛暟缁撴瀯
 function parseParam() {
   const selected = sceneInfoList.value.filter((v, i) => {
@@ -137,16 +151,19 @@
           type: v.scense.typeid,
           params: {
             district: v.scense.districtname,
-            name: v.scense.name,
-            employerUnit: v.scense.csEmployerUnit,
-            constructionUnit: v.subScene.csConstructionUnit,
-            timeRange: v.subScene.csStartTime
-              ? `${v.subScene.csStartTime}鑷�${v.subScene.csEndTime}`
-              : undefined,
-            stage: v.subScene.siExtension1,
-            contacts: v.subScene.csConstructionContacts,
-            contactsTel: v.subScene.csConstructionContactsTel,
-            location: v.scense.location
+            name: setParam(v.scense.name, 57),
+            employerUnit: setParam(v.scense.csEmployerUnit, 30),
+            constructionUnit: setParam(v.subScene.csConstructionUnit, 36),
+            timeRange: setParam(
+              v.subScene.csStartTime
+                ? `${v.subScene.csStartTime}鑷�${v.subScene.csEndTime}`
+                : '',
+              26
+            ),
+            stage: setParam(v.subScene.siExtension1, 36),
+            contacts: setParam(v.scense.contacts, 27),
+            contactsTel: setParam(v.scense.contactst, 40),
+            location: setParam(v.scense.location, 27)
           }
         };
       // 椁愰ギ
@@ -155,10 +172,10 @@
           type: v.scense.typeid,
           params: {
             district: v.scense.districtname,
-            location: v.scense.location,
-            name: v.scense.name,
-            contacts: v.scense.contacts,
-            contactsTel: v.scense.contactst
+            location: setParam(v.scense.location, 63),
+            name: setParam(v.scense.name, 64),
+            contacts: setParam(v.scense.contacts, 67),
+            contactsTel: setParam(v.scense.contactst, 62)
           }
         };
       // default:
@@ -167,15 +184,15 @@
     }
   });
 
-  param.forEach((p) => {
-    for (const key in p.params) {
-      let value = p.params[key];
-      if (value == undefined) {
-        // 鑻ュ睘鎬х己澶憋紝鍒欐敼涓�20涓┖鏍肩锛屽搴攚ord涓�10涓腑鏂囧瓧绗︾殑闀垮害
-        p.params[key] = '                    ';
-      }
-    }
-  });
+  // param.forEach((p) => {
+  //   for (const key in p.params) {
+  //     let value = p.params[key];
+  //     if (value == undefined) {
+  //       // 鑻ュ睘鎬х己澶憋紝鍒欐敼涓�20涓┖鏍肩锛屽搴攚ord涓�10涓腑鏂囧瓧绗︾殑闀垮害
+  //       p.params[key] = '                    ';
+  //     }
+  //   }
+  // });
 
   return param;
 }
@@ -192,6 +209,8 @@
         break;
       // 椁愰ギ
       case 5:
+        template = '/椁愰ギ宸℃煡鍗曟嵁妯℃澘.docx';
+        _param = p.params;
         break;
       default:
         break;

--
Gitblit v1.9.3