123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /*
- * @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,
- 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)
- }
- });
- };
- }
- };
|