/* * @Author: lee * @Date: 2021-05-10 11:45:50 * @LastEditors: lee * @LastEditTime: 2021-05-20 15:39:43 * @Description: file content */ import Print from "./printarea.js"; /** * @file 打印 * 指令`v-print`,默认打印整个窗口 * 传入参数`v-print="'#id'"` , 参数为需要打印局部的盒子标识. */ const addEvent = (element, type, callback) => { if (element.addEventListener) { element.addEventListener(type, callback, false); } else if (element.attachEvent) { element.attachEvent("on" + type, callback); } else { element["on" + type] = callback; } }; export default { directiveName: "print", bind(el, binding, vnode) { let vue = vnode.context; let id = ""; addEvent(el, "click", () => { vue.$nextTick(() => { if (binding?.value?.clickMounted) { binding.value.clickMounted(vue); } if (typeof binding.value === "string") { // 全局打印 id = binding.value; localPrint(); } else if (typeof binding.value === "object" && !!binding.value.id) { // 局部打印 id = binding.value.id; let ids = id.replace(new RegExp("#", "g"), ""); let elsdom = document.getElementById(ids); if (!elsdom) console.log("id in Error"), (id = ""); localPrint(); } else if (binding?.value?.preview) { localPrint(); } else { window.print(); return; } }); }); const localPrint = () => { new Print({ ids: id, // * 局部打印必传入id vue, url: binding.value.url, // 打印指定的网址,这里不能跟id共存 如果共存id的优先级会比较高 standard: "", // 文档类型,默认是html5,可选 html5,loose,strict extraHead: binding.value.extraHead, // 附加在head标签上的额外标签,使用逗号分隔 extraCss: binding.value.extraCss, // 额外的css连接,多个逗号分开 previewTitle: binding.value.previewTitle || "打印预览", // 打印预览的标题 zIndex: binding.value.zIndex || 20002, // 预览窗口的z-index previewPrintBtnLabel: binding.value.previewPrintBtnLabel || "打印", // 打印预览的标题 popTitle: binding.value.popTitle, // title的标题 preview: binding.value.preview || false, // 是否启动预览模式 asyncUrl: binding.value.asyncUrl, beforeEntryIframe() { binding.value.beforeEntryIframe && binding.value.beforeEntryIframe(vue); }, previewBeforeOpenCallback() { // 预览窗口打开之前的callback binding.value.previewBeforeOpenCallback && binding.value.previewBeforeOpenCallback(vue); }, previewOpenCallback() { // 预览窗口打开之后的callback binding.value.previewOpenCallback && binding.value.previewOpenCallback(vue); }, openCallback() { // 调用打印之后的回调事件 binding.value.openCallback && binding.value.openCallback(vue); }, closeCallback() { binding.value.closeCallback && binding.value.closeCallback(vue); }, beforeOpenCallback() { binding.value.beforeOpenCallback && binding.value.beforeOpenCallback(vue); }, }); }; }, };