shuishen
2021-11-05 7719e6d5057054a80442c7cb2c73fc5a57919330
打印更改
2 files modified
1 files added
154 ■■■■■ changed files
src/assets/js/print.js 123 ●●●●● patch | view | raw | blame | history
src/main.js 5 ●●●●● patch | view | raw | blame | history
src/views/securityGuard/securityGuard.vue 26 ●●●●● patch | view | raw | blame | history
src/assets/js/print.js
New file
@@ -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;
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);
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"
@@ -1124,19 +1124,26 @@
                return
            }
            //更新发证时间
            this.updateUserInfo();
            var printDom = document.getElementById("certificateDom");
            printDom.style.position = "fixed";
            printDom.style.position = "absolute";
            printDom.style.top = "-28.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()
@@ -1733,7 +1740,7 @@
    align-items: center;
    justify-content: center;
    flex-direction: column;
    font: bold 18px 'SimSun' !important;
    font: normal 18px 'SimSuncss' !important;
}
.security_main {
    width: 630px;
@@ -1889,7 +1896,6 @@
    top: $downTop + $lineHigeht * 2 -6px;
    left: $centerLeft;
    width: 160px;
    font: bold 16px 'SimSun' !important;
}
// 身份证
.security_m_r_o_rightcardid {