From f2163ed27bf7f5a26b743f6e41838184aa22cab9 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期一, 17 十一月 2025 17:38:35 +0800
Subject: [PATCH] 1. 调试巡查单据通过浏览器批量下载功能(待完成)
---
src/utils/doc.js | 104 ++++++++-
package-lock.json | 372 +++++++++++++++++++++++++++++++++++-
package.json | 1
public/工地巡查单据模板-简版.doc | 0
src/components.d.ts | 1
src/views/common/PDFViewer.vue | 28 ++
src/views/fysp/scene/SceneInspectFile.vue | 41 +++
src/router/index.js | 5
8 files changed, 510 insertions(+), 42 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index be9e772..c5270a2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -24,6 +24,7 @@
"exceljs": "^4.4.0",
"file-saver": "^2.0.5",
"js-base64": "^3.7.5",
+ "jspdf": "^3.0.3",
"jszip": "^3.10.1",
"jszip-utils": "^0.1.0",
"md5": "^2.3.0",
@@ -1741,12 +1742,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.20.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "regenerator-runtime": "^0.13.11"
- },
+ "version": "7.28.4",
+ "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.4.tgz",
+ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
"engines": {
"node": ">=6.9.0"
}
@@ -2303,6 +2301,17 @@
"version": "14.18.34",
"license": "MIT"
},
+ "node_modules/@types/pako": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/@types/pako/-/pako-2.0.4.tgz",
+ "integrity": "sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw=="
+ },
+ "node_modules/@types/raf": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmmirror.com/@types/raf/-/raf-3.4.3.tgz",
+ "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==",
+ "optional": true
+ },
"node_modules/@types/semver": {
"version": "7.5.5",
"resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.5.tgz",
@@ -2318,6 +2327,12 @@
"version": "2.3.3",
"dev": true,
"license": "MIT"
+ },
+ "node_modules/@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+ "optional": true
},
"node_modules/@types/web-bluetooth": {
"version": "0.0.16",
@@ -3262,6 +3277,15 @@
"version": "1.0.2",
"license": "MIT"
},
+ "node_modules/base64-arraybuffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+ "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+ "optional": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/base64-js": {
"version": "1.5.1",
"funding": [
@@ -3520,6 +3544,25 @@
}
],
"license": "CC-BY-4.0"
+ },
+ "node_modules/canvg": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmmirror.com/canvg/-/canvg-3.0.11.tgz",
+ "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "@types/raf": "^3.4.0",
+ "core-js": "^3.8.3",
+ "raf": "^3.4.1",
+ "regenerator-runtime": "^0.13.7",
+ "rgbcolor": "^1.0.1",
+ "stackblur-canvas": "^2.0.0",
+ "svg-pathdata": "^6.0.3"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
},
"node_modules/caseless": {
"version": "0.12.0",
@@ -3815,6 +3858,17 @@
"url": "https://github.com/sponsors/mesqueeb"
}
},
+ "node_modules/core-js": {
+ "version": "3.46.0",
+ "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.46.0.tgz",
+ "integrity": "sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
"node_modules/core-js-compat": {
"version": "3.26.1",
"dev": true,
@@ -3879,6 +3933,15 @@
"version": "4.2.0",
"resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
+ },
+ "node_modules/css-line-break": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
+ "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+ "optional": true,
+ "dependencies": {
+ "utrie": "^1.0.2"
+ }
},
"node_modules/cssesc": {
"version": "3.0.0",
@@ -4169,6 +4232,15 @@
},
"engines": {
"node": ">=12"
+ }
+ },
+ "node_modules/dompurify": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-3.3.0.tgz",
+ "integrity": "sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==",
+ "optional": true,
+ "optionalDependencies": {
+ "@types/trusted-types": "^2.0.7"
}
},
"node_modules/dunder-proto": {
@@ -4926,6 +4998,21 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/fast-png": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmmirror.com/fast-png/-/fast-png-6.4.0.tgz",
+ "integrity": "sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q==",
+ "dependencies": {
+ "@types/pako": "^2.0.3",
+ "iobuffer": "^5.3.2",
+ "pako": "^2.1.0"
+ }
+ },
+ "node_modules/fast-png/node_modules/pako": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/pako/-/pako-2.1.0.tgz",
+ "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
+ },
"node_modules/fastq": {
"version": "1.14.0",
"dev": true,
@@ -4941,6 +5028,11 @@
"dependencies": {
"pend": "~1.2.0"
}
+ },
+ "node_modules/fflate": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.2.tgz",
+ "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
},
"node_modules/figures": {
"version": "3.2.0",
@@ -5431,6 +5523,19 @@
"node": ">=12"
}
},
+ "node_modules/html2canvas": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
+ "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+ "optional": true,
+ "dependencies": {
+ "css-line-break": "^2.1.0",
+ "text-segmentation": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/http-proxy-agent": {
"version": "5.0.0",
"dev": true,
@@ -5585,6 +5690,11 @@
"engines": {
"node": ">=10"
}
+ },
+ "node_modules/iobuffer": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmmirror.com/iobuffer/-/iobuffer-5.4.0.tgz",
+ "integrity": "sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA=="
},
"node_modules/is-arguments": {
"version": "1.2.0",
@@ -5983,6 +6093,22 @@
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jspdf": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmmirror.com/jspdf/-/jspdf-3.0.3.tgz",
+ "integrity": "sha512-eURjAyz5iX1H8BOYAfzvdPfIKK53V7mCpBTe7Kb16PaM8JSXEcUQNBQaiWMI8wY5RvNOPj4GccMjTlfwRBd+oQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.26.9",
+ "fast-png": "^6.2.0",
+ "fflate": "^0.8.1"
+ },
+ "optionalDependencies": {
+ "canvg": "^3.0.11",
+ "core-js": "^3.6.0",
+ "dompurify": "^3.2.4",
+ "html2canvas": "^1.0.0-rc.5"
}
},
"node_modules/jsprim": {
@@ -6883,7 +7009,7 @@
},
"node_modules/performance-now": {
"version": "2.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/picocolors": {
@@ -7110,6 +7236,15 @@
],
"license": "MIT"
},
+ "node_modules/raf": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz",
+ "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+ "optional": true,
+ "dependencies": {
+ "performance-now": "^2.1.0"
+ }
+ },
"node_modules/randombytes": {
"version": "2.1.0",
"dev": true,
@@ -7188,8 +7323,9 @@
},
"node_modules/regenerator-runtime": {
"version": "0.13.11",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+ "optional": true
},
"node_modules/regenerator-transform": {
"version": "0.15.1",
@@ -7330,6 +7466,15 @@
"version": "1.3.0",
"dev": true,
"license": "MIT"
+ },
+ "node_modules/rgbcolor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/rgbcolor/-/rgbcolor-1.0.1.tgz",
+ "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==",
+ "optional": true,
+ "engines": {
+ "node": ">= 0.8.15"
+ }
},
"node_modules/rimraf": {
"version": "3.0.2",
@@ -7636,6 +7781,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/stackblur-canvas": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmmirror.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz",
+ "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.1.14"
+ }
+ },
"node_modules/start-server-and-test": {
"version": "1.15.1",
"dev": true,
@@ -7800,6 +7954,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/svg-pathdata": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmmirror.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
+ "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
+ "optional": true,
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/symbol-tree": {
"version": "3.2.4",
"dev": true,
@@ -7886,6 +8049,15 @@
"dev": true,
"license": "MIT",
"peer": true
+ },
+ "node_modules/text-segmentation": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
+ "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+ "optional": true,
+ "dependencies": {
+ "utrie": "^1.0.2"
+ }
},
"node_modules/text-table": {
"version": "0.2.0",
@@ -8388,6 +8560,15 @@
"node_modules/util-deprecate": {
"version": "1.0.2",
"license": "MIT"
+ },
+ "node_modules/utrie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
+ "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+ "optional": true,
+ "dependencies": {
+ "base64-arraybuffer": "^1.0.2"
+ }
},
"node_modules/uuid": {
"version": "8.3.2",
@@ -10044,11 +10225,9 @@
}
},
"@babel/runtime": {
- "version": "7.20.6",
- "dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.11"
- }
+ "version": "7.28.4",
+ "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.4.tgz",
+ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="
},
"@babel/template": {
"version": "7.18.10",
@@ -10474,6 +10653,17 @@
"@types/node": {
"version": "14.18.34"
},
+ "@types/pako": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/@types/pako/-/pako-2.0.4.tgz",
+ "integrity": "sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw=="
+ },
+ "@types/raf": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmmirror.com/@types/raf/-/raf-3.4.3.tgz",
+ "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==",
+ "optional": true
+ },
"@types/semver": {
"version": "7.5.5",
"resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.5.tgz",
@@ -10487,6 +10677,12 @@
"@types/sizzle": {
"version": "2.3.3",
"dev": true
+ },
+ "@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+ "optional": true
},
"@types/web-bluetooth": {
"version": "0.0.16"
@@ -11150,6 +11346,12 @@
"balanced-match": {
"version": "1.0.2"
},
+ "base64-arraybuffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+ "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+ "optional": true
+ },
"base64-js": {
"version": "1.5.1"
},
@@ -11297,6 +11499,22 @@
"caniuse-lite": {
"version": "1.0.30001436",
"dev": true
+ },
+ "canvg": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmmirror.com/canvg/-/canvg-3.0.11.tgz",
+ "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==",
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.12.5",
+ "@types/raf": "^3.4.0",
+ "core-js": "^3.8.3",
+ "raf": "^3.4.1",
+ "regenerator-runtime": "^0.13.7",
+ "rgbcolor": "^1.0.1",
+ "stackblur-canvas": "^2.0.0",
+ "svg-pathdata": "^6.0.3"
+ }
},
"caseless": {
"version": "0.12.0",
@@ -11485,6 +11703,12 @@
"is-what": "^3.14.1"
}
},
+ "core-js": {
+ "version": "3.46.0",
+ "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.46.0.tgz",
+ "integrity": "sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==",
+ "optional": true
+ },
"core-js-compat": {
"version": "3.26.1",
"dev": true,
@@ -11527,6 +11751,15 @@
"version": "4.2.0",
"resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
+ },
+ "css-line-break": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
+ "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+ "optional": true,
+ "requires": {
+ "utrie": "^1.0.2"
+ }
},
"cssesc": {
"version": "3.0.0",
@@ -11737,6 +11970,15 @@
"dev": true,
"requires": {
"webidl-conversions": "^7.0.0"
+ }
+ },
+ "dompurify": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-3.3.0.tgz",
+ "integrity": "sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==",
+ "optional": true,
+ "requires": {
+ "@types/trusted-types": "^2.0.7"
}
},
"dunder-proto": {
@@ -12269,6 +12511,23 @@
"version": "2.0.6",
"dev": true
},
+ "fast-png": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmmirror.com/fast-png/-/fast-png-6.4.0.tgz",
+ "integrity": "sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q==",
+ "requires": {
+ "@types/pako": "^2.0.3",
+ "iobuffer": "^5.3.2",
+ "pako": "^2.1.0"
+ },
+ "dependencies": {
+ "pako": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/pako/-/pako-2.1.0.tgz",
+ "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
+ }
+ }
+ },
"fastq": {
"version": "1.14.0",
"dev": true,
@@ -12282,6 +12541,11 @@
"requires": {
"pend": "~1.2.0"
}
+ },
+ "fflate": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.2.tgz",
+ "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
},
"figures": {
"version": "3.2.0",
@@ -12596,6 +12860,16 @@
"whatwg-encoding": "^2.0.0"
}
},
+ "html2canvas": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
+ "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+ "optional": true,
+ "requires": {
+ "css-line-break": "^2.1.0",
+ "text-segmentation": "^1.0.3"
+ }
+ },
"http-proxy-agent": {
"version": "5.0.0",
"dev": true,
@@ -12682,6 +12956,11 @@
"ini": {
"version": "2.0.0",
"dev": true
+ },
+ "iobuffer": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmmirror.com/iobuffer/-/iobuffer-5.4.0.tgz",
+ "integrity": "sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA=="
},
"is-arguments": {
"version": "1.2.0",
@@ -12944,6 +13223,20 @@
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^2.0.0"
+ }
+ },
+ "jspdf": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmmirror.com/jspdf/-/jspdf-3.0.3.tgz",
+ "integrity": "sha512-eURjAyz5iX1H8BOYAfzvdPfIKK53V7mCpBTe7Kb16PaM8JSXEcUQNBQaiWMI8wY5RvNOPj4GccMjTlfwRBd+oQ==",
+ "requires": {
+ "@babel/runtime": "^7.26.9",
+ "canvg": "^3.0.11",
+ "core-js": "^3.6.0",
+ "dompurify": "^3.2.4",
+ "fast-png": "^6.2.0",
+ "fflate": "^0.8.1",
+ "html2canvas": "^1.0.0-rc.5"
}
},
"jsprim": {
@@ -13568,7 +13861,7 @@
},
"performance-now": {
"version": "2.1.0",
- "dev": true
+ "devOptional": true
},
"picocolors": {
"version": "1.0.0"
@@ -13696,6 +13989,15 @@
"version": "1.2.3",
"dev": true
},
+ "raf": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz",
+ "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+ "optional": true,
+ "requires": {
+ "performance-now": "^2.1.0"
+ }
+ },
"randombytes": {
"version": "2.1.0",
"dev": true,
@@ -13760,7 +14062,9 @@
},
"regenerator-runtime": {
"version": "0.13.11",
- "dev": true
+ "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+ "optional": true
},
"regenerator-transform": {
"version": "0.15.1",
@@ -13854,6 +14158,12 @@
"rfdc": {
"version": "1.3.0",
"dev": true
+ },
+ "rgbcolor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/rgbcolor/-/rgbcolor-1.0.1.tgz",
+ "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==",
+ "optional": true
},
"rimraf": {
"version": "3.0.2",
@@ -14037,6 +14347,12 @@
"tweetnacl": "~0.14.0"
}
},
+ "stackblur-canvas": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmmirror.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz",
+ "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==",
+ "optional": true
+ },
"start-server-and-test": {
"version": "1.15.1",
"dev": true,
@@ -14137,6 +14453,12 @@
"version": "1.0.0",
"dev": true
},
+ "svg-pathdata": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmmirror.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
+ "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
+ "optional": true
+ },
"symbol-tree": {
"version": "3.2.4",
"dev": true
@@ -14186,6 +14508,15 @@
"schema-utils": "^3.1.1",
"serialize-javascript": "^6.0.0",
"terser": "^5.14.1"
+ }
+ },
+ "text-segmentation": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
+ "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+ "optional": true,
+ "requires": {
+ "utrie": "^1.0.2"
}
},
"text-table": {
@@ -14522,6 +14853,15 @@
"util-deprecate": {
"version": "1.0.2"
},
+ "utrie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
+ "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+ "optional": true,
+ "requires": {
+ "base64-arraybuffer": "^1.0.2"
+ }
+ },
"uuid": {
"version": "8.3.2"
},
diff --git a/package.json b/package.json
index 98ad790..4c12d0f 100644
--- a/package.json
+++ b/package.json
@@ -29,6 +29,7 @@
"exceljs": "^4.4.0",
"file-saver": "^2.0.5",
"js-base64": "^3.7.5",
+ "jspdf": "^3.0.3",
"jszip": "^3.10.1",
"jszip-utils": "^0.1.0",
"md5": "^2.3.0",
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-\347\256\200\347\211\210.doc" "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-\347\256\200\347\211\210.doc"
new file mode 100644
index 0000000..9dd972d
--- /dev/null
+++ "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-\347\256\200\347\211\210.doc"
Binary files differ
diff --git a/src/components.d.ts b/src/components.d.ts
index 4603eee..62c34bc 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -111,6 +111,7 @@
ItemSubTask: typeof import('./components/list-item/ItemSubTask.vue')['default']
ItemUser: typeof import('./components/list-item/ItemUser.vue')['default']
MenuItems: typeof import('./components/core/MenuItems.vue')['default']
+ PDFViewer: typeof import('./components/PDFViewer.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
SceneMap: typeof import('./components/map/SceneMap.vue')['default']
diff --git a/src/router/index.js b/src/router/index.js
index 920fc00..407f82d 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -408,6 +408,11 @@
component: () => import('@/views/DocTest.vue')
}
]
+ },
+ {
+ name: 'pdfPreview',
+ path: '/common/pdfPreview',
+ component: () => import('@/views/common/PDFViewer.vue')
}
];
diff --git a/src/utils/doc.js b/src/utils/doc.js
index 35f3b88..7d014aa 100644
--- a/src/utils/doc.js
+++ b/src/utils/doc.js
@@ -6,7 +6,9 @@
import FileSaver from 'file-saver';
import { renderAsync } from 'docx-preview';
import printJS from 'print-js';
-import pdfMake from 'pdfmake';
+import pdfMake from 'pdfmake/build/pdfmake';
+import vfs from 'pdfmake/build/vfs_fonts.js';
+import { jsPDF } from 'jspdf';
/**
* 绛夋瘮渚嬬缉鏀惧浘鐗�
@@ -209,24 +211,90 @@
});
}
-function preparePdf(tempDocpath, data, imageSize) {
- return prepareDocxStr(tempDocpath, data, imageSize).then( (res) => {
- // 灏� Word 鏂囨。杞崲涓� PDF 鏍煎紡骞朵繚瀛樺埌鏂囦欢
- console.log(pdfMake);
+async function preparePdf(tempDocpath, data, imageSize) {
+ // return prepareDocxStr(tempDocpath, data, imageSize).then((res) => {
+ // // 灏� Word 鏂囨。杞崲涓� PDF 鏍煎紡骞朵繚瀛樺埌鏂囦欢
+ // console.log(pdfMake);
+ // console.log('res', res);
+
+ // // const printer = new PdfPrinter(vfs);
+ // const docDefinition = {
+ // content: [
+ // {
+ // text: res.getZip().generate({
+ // type: 'blob',
+ // mimeType:
+ // 'application/vnd.openxmlformats-officedocumnet.wordprocessingml.document'
+ // })
+ // // text: res.toString('utf8')
+ // }
+ // ]
+ // };
+ // const pdfDoc = pdfMake.createPdf(docDefinition);
+ // // const pdfBuffer = await pdfDoc.getBuffer();
+ // // return new Blob([pdfBuffer], { type: 'application/pdf' });
+ // console.log(pdfDoc);
+ // return pdfDoc;
+
+ // // console.log('res', res.toString('utf8'));
+
+ // // const doc = new jsPDF();
+ // // doc.text(res.toString('utf8'), 10, 10);
+
+ // // return doc;
+ // });
+
+ try {
+ // 绗竴姝ワ細浣跨敤docxtemplater澶勭悊docx妯℃澘
+ const doc = await prepareDocxStr(tempDocpath, data, imageSize);
- // const printer = new pdfMake.PdfPrinter();
- const docDefinition = {
- content: [
- {
- text: res.toString('utf8')
- }
- ]
- };
- const pdfDoc = pdfMake.createPdf(docDefinition);
- // const pdfBuffer = await pdfDoc.getBuffer();
- // return new Blob([pdfBuffer], { type: 'application/pdf' });
- return pdfDoc;
- });
+ // 绗簩姝ワ細鑾峰彇娓叉煋鍚庣殑docx鍐呭
+ const docxBlob = doc.getZip().generate({
+ type: 'blob',
+ mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
+ });
+
+ return docxBlob
+
+ // 绗笁姝ワ細璇诲彇docx鍐呭锛堟敞鎰忥細杩欎竴姝ラ渶瑕侀澶栫殑搴撴潵瑙f瀽docx鍐呭锛�
+ // 鐢变簬pdfmake涓嶈兘鐩存帴澶勭悊docx鏍煎紡锛屾垜浠渶瑕佸厛瑙f瀽docx鍐呭
+ // 杩欓噷鎻愪緵涓ょ鏂规锛�
+
+ // 鏂规1锛氫娇鐢╠ocx-preview搴撳厛娓叉煋涓篐TML锛屽啀鐢╬dfmake鍒涘缓PDF
+ // const container = document.createElement('div');
+ // await renderAsync(docxBlob, container);
+
+ // // 鎻愬彇HTML鍐呭骞惰浆鎹负pdfmake鍙敤鐨勬牸寮�
+ // const textContent = extractTextFromHtml(container.innerHTML);
+
+ // // 绗洓姝ワ細浣跨敤pdfmake鍒涘缓PDF
+ // const docDefinition = {
+ // content: [
+ // {
+ // text: textContent,
+ // style: 'body'
+ // }
+ // ],
+ // };
+
+ // const pdfDoc = pdfMake.createPdf(docDefinition);
+ // return pdfDoc;
+
+ } catch (error) {
+ console.error('杞崲docx鍒皃df澶辫触:', error);
+ throw error;
+ }
+}
+
+/**
+ * 浠嶩TML涓彁鍙栨枃鏈唴瀹�
+ * @param {string} html HTML瀛楃涓�
+ * @returns {string} 鎻愬彇鐨勬枃鏈唴瀹�
+ */
+function extractTextFromHtml(html) {
+ const tempDiv = document.createElement('div');
+ tempDiv.innerHTML = html;
+ return tempDiv.textContent || tempDiv.innerText || '';
}
function exportDocx(tempDocpath, data, zipName, imageSize) {
diff --git a/src/views/common/PDFViewer.vue b/src/views/common/PDFViewer.vue
new file mode 100644
index 0000000..605ac88
--- /dev/null
+++ b/src/views/common/PDFViewer.vue
@@ -0,0 +1,28 @@
+<template>
+ <iframe ref="pdfPreview" width="100%" height="100vh" style="height: 100vh;"></iframe>
+</template>
+<script setup>
+import { ref, onMounted } from 'vue'
+import { useRoute, useRouter } from "vue-router";
+
+const props = defineProps({
+ pdfUrl: String
+})
+
+const route = useRoute();
+const router = useRouter();
+
+const pdfPreview = ref(null)
+
+function getQueryParam(name) {
+ route.query.data
+ const queryString = window.location.search;
+ const urlParams = new URLSearchParams(queryString);
+ return urlParams.get(name);
+}
+
+onMounted(() => {
+ pdfPreview.value.src = props.pdfUrl
+
+})
+</script>
\ No newline at end of file
diff --git a/src/views/fysp/scene/SceneInspectFile.vue b/src/views/fysp/scene/SceneInspectFile.vue
index ddeaeb4..05c464b 100644
--- a/src/views/fysp/scene/SceneInspectFile.vue
+++ b/src/views/fysp/scene/SceneInspectFile.vue
@@ -64,22 +64,23 @@
</div>
</template>
</el-dialog>
- <el-dialog v-model="previewVisible" :show-close="false" fullscreen>
- <template #header="{ close, titleId, titleClass }">
+ <el-dialog v-model="previewVisible" :show-close="true" fullscreen>
+ <!-- <template #header="{ close, titleId, titleClass }">
<el-row justify="end">
<el-button type="danger" @click="close" icon="CircleCloseFilled">
鍏抽棴
</el-button>
<el-button
type="primary"
- @click="handelPrint(refWord)"
+ @click="handelPrint(pdfPreview)"
icon="PrintFilled"
>
鎵撳嵃
</el-button>
</el-row>
- </template>
+ </template> -->
<div ref="refWord"></div>
+ <iframe ref="pdfPreview" width="100%" height="100vh" style="height: calc(100vh - 60px);"></iframe>
</el-dialog>
</template>
<script setup>
@@ -87,6 +88,7 @@
* 鍦烘櫙宸℃煡鍗曟嵁鑷姩涓嬭浇
*/
import { ref, watch } from 'vue';
+import { useRouter } from "vue-router";
import {
exportDocx,
prepareDocxBlob,
@@ -107,7 +109,10 @@
const emits = defineEmits(['update:modelValue']);
+const router = useRouter();
+
const refWord = ref(null);
+const pdfPreview = ref(null);
const loading = ref(false);
const scrollbarRef = ref();
@@ -303,12 +308,32 @@
const param = parseParam(item);
if (param) {
generatePdf(param, (blob, name) => {
- blob.getBuffer((buffer) => {
- previewDocx(buffer, refWord.value);
- });
previewVisible.value = true;
+ previewDocx(blob, refWord.value);
+ // 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(() => {
- // previewDocx(blob, refWord.value);
+ // // 鍦╥frame涓樉绀洪瑙�
+ // pdfPreview.value.src = URL.createObjectURL(pdfBlob);
// }, 200);
});
}
--
Gitblit v1.9.3