print.js
3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
* @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)
}
});
};
}
};