From 6ce99cb40ee88271fa0d0d8daea99ba0eaec122f Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Fri, 05 Nov 2021 16:01:39 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.105:10010/r/zhba_enterprises
---
src/assets/js/print.js | 123 +++++++++++++++++++++++++++++++++++++++++
src/main.js | 5 +
src/views/securityGuard/securityGuard.vue | 23 +++++--
3 files changed, 143 insertions(+), 8 deletions(-)
diff --git a/src/assets/js/print.js b/src/assets/js/print.js
new file mode 100644
index 0000000..1e1c861
--- /dev/null
+++ b/src/assets/js/print.js
@@ -0,0 +1,123 @@
+const Print = function (dom, options) {
+ if (!(this instanceof Print)) return new Print(dom, options);
+
+ this.options = this.extend({
+ noPrint: '.no-print',
+ onStart: function () {},
+ onEnd: function () {}
+ }, options);
+
+ if ((typeof dom) === "string") {
+ this.dom = document.querySelector(dom);
+ } else {
+ this.dom = dom;
+ }
+
+ this.init();
+};
+Print.prototype = {
+ init: function () {
+ let content = this.getStyle() + this.getHtml();
+ this.writeIframe(content);
+ },
+ extend: function (obj, obj2) {
+ for (let k in obj2) {
+ obj[k] = obj2[k];
+ }
+ return obj;
+ },
+
+ getStyle: function () {
+ let str = "";
+ let styles = document.querySelectorAll('style,link');
+ for (let i = 0; i < styles.length; i++) {
+ str += styles[i].outerHTML;
+ }
+ str += "<style>" + (this.options.noPrint ? this.options.noPrint : '.no-print') + "{display:none;}</style>";
+
+ return str;
+ },
+
+ getHtml: function () {
+ let inputs = document.querySelectorAll('input');
+ let textareas = document.querySelectorAll('textarea');
+ let selects = document.querySelectorAll('select');
+
+ for (let k in inputs) {
+ if (inputs[k].type === "checkbox" || inputs[k].type === "radio") {
+ if (inputs[k].checked === true) {
+ inputs[k].setAttribute('checked', "checked");
+ } else {
+ inputs[k].removeAttribute('checked');
+ }
+ } else if (inputs[k].type === "text") {
+ inputs[k].setAttribute('value', inputs[k].value);
+ }
+ }
+
+ for (let k2 in textareas) {
+ if (textareas[k2].type === 'textarea') {
+ textareas[k2].innerHTML = textareas[k2].value;
+ }
+ }
+
+ for (let k3 in selects) {
+ if (selects[k3].type === 'select-one') {
+ let child = selects[k3].children;
+ for (let i in child) {
+ if (child[i].tagName === 'OPTION') {
+ if (child[i].selected === true) {
+ child[i].setAttribute('selected', "selected");
+ } else {
+ child[i].removeAttribute('selected');
+ }
+ }
+ }
+ }
+ }
+ return this.dom.outerHTML;
+ },
+
+ writeIframe: function (content) {
+ let w;
+ let doc;
+ let iframe = document.createElement('iframe');
+ let f = document.body.appendChild(iframe);
+ iframe.id = "myIframe";
+ iframe.style = "position:absolute;width:0;height:0;top:-10px;left:-10px;";
+ w = f.contentWindow || f.contentDocument;
+ doc = f.contentDocument || f.contentWindow.document;
+ doc.open();
+ doc.write(content);
+ doc.close();
+ this.toPrint(w, function () {
+ document.body.removeChild(iframe);
+ });
+ },
+
+ toPrint: function (w, cb) {
+ let _this = this;
+ w.onload = function () {
+ try {
+ setTimeout(function () {
+ w.focus();
+ typeof _this.options.onStart === 'function' && _this.options.onStart();
+ if (!w.document.execCommand('print', false, null)) {
+ w.print();
+ }
+ typeof _this.options.onEnd === 'function' && _this.options.onEnd();
+ w.close();
+ cb && cb();
+ });
+ } catch (err) {
+ console.log('err', err);
+ }
+ };
+ }
+};
+const MyPlugin = {};
+MyPlugin.install = function (Vue, options) {
+ // 4. 添加实例方法
+ Vue.prototype.$print = Print;
+};
+export default MyPlugin;
diff --git a/src/main.js b/src/main.js
index bd58cc3..45a4ef6 100644
--- a/src/main.js
+++ b/src/main.js
@@ -23,6 +23,11 @@
import website from '@/config/website';
import crudCommon from '@/mixins/crud';
+import Print from '@/assets/js/print';
+
+Vue.use(Print);
+
+
import Map from './components/map/main';
Vue.component('Map', Map);
diff --git a/src/views/securityGuard/securityGuard.vue b/src/views/securityGuard/securityGuard.vue
index 6f8ce0f..69862c6 100644
--- a/src/views/securityGuard/securityGuard.vue
+++ b/src/views/securityGuard/securityGuard.vue
@@ -266,7 +266,7 @@
:upload-after="uploadAfter2">
</avue-form>
</el-dialog>
- <div style="position: fixed; top: 9999px; width: 100%; height: 100%;">
+ <div style="position: fixed; top: 9999px; width: 100%; height: 100%; ">
<div class="certificate_box"
id="certificateDom">
<div class="security_main"
@@ -1131,19 +1131,26 @@
return
}
//更新发证时间
- this.updateUserInfo();
var printDom = document.getElementById("certificateDom");
- printDom.style.position = "fixed";
+ printDom.style.position = "absolute";
printDom.style.top = "-27.5%";
printDom.style.left = "-23%";
printDom.style.width = "120%";
printDom.style.height = "100%";
printDom.style.fontFamily = "SimSun";
- this.$Print(this.$refs.certificateBox);
- printDom.style.position = "relative";
- printDom.style.left = "0";
- printDom.style.width = "100%";
- printDom.style.height = "auto";
+
+ this.$print('#certificateDom', {
+ noPrint: '.noPrint',
+ onStart: () => {
+ // console.log('打印开始', Date.parse(new Date()));
+ },
+ onEnd: () => {
+ this.updateUserInfo();
+ // console.log('打印完成', Date.parse(new Date()));
+ }
+ });
+
+
},
getNewTime () {
var nowTime = new Date()
--
Gitblit v1.9.3