| 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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
 | | <template xlang="wxml" minapp="mpvue"> |  |     <view class="tki-qrcode"> |  |         <!-- #ifndef MP-ALIPAY --> |  |         <canvas class="tki-qrcode-canvas" :canvas-id="cid" :style="{width:cpSize+'px',height:cpSize+'px'}" /> |  |         <!-- #endif --> |  |         <!-- #ifdef MP-ALIPAY --> |  |         <canvas :id="cid" :width="cpSize" :height="cpSize" class="tki-qrcode-canvas" /> |  |         <!-- #endif --> |  |         <image v-show="show" :src="result" :style="{width:cpSize+'px',height:cpSize+'px'}" /> |  |     </view> |  | </template> |  |   |  | <script> |  | import QRCode from "./qrcode.js" |  | let qrcode |  | export default { |  |     name: "tki-qrcode", |  |     props: { |  |         cid: { |  |             type: String, |  |             default: 'tki-qrcode-canvas' |  |         }, |  |         size: { |  |             type: Number, |  |             default: 200 |  |         }, |  |         unit: { |  |             type: String, |  |             default: 'upx' |  |         }, |  |         show: { |  |             type: Boolean, |  |             default: true |  |         }, |  |         val: { |  |             type: String, |  |             default: '' |  |         }, |  |         background: { |  |             type: String, |  |             default: '#ffffff' |  |         }, |  |         foreground: { |  |             type: String, |  |             default: '#000000' |  |         }, |  |         pdground: { |  |             type: String, |  |             default: '#000000' |  |         }, |  |         icon: { |  |             type: String, |  |             default: '' |  |         }, |  |         iconSize: { |  |             type: Number, |  |             default: 40 |  |         }, |  |         lv: { |  |             type: Number, |  |             default: 3 |  |         }, |  |         onval: { |  |             type: Boolean, |  |             default: false |  |         }, |  |         loadMake: { |  |             type: Boolean, |  |             default: false |  |         }, |  |         usingComponents: { |  |             type: Boolean, |  |             default: true |  |         }, |  |         showLoading: { |  |             type: Boolean, |  |             default: true |  |         }, |  |         loadingText: { |  |             type: String, |  |             default: '二维码生成中' |  |         }, |  |     }, |  |     data() { |  |         return { |  |             result: '', |  |         } |  |     }, |  |     methods: { |  |         _makeCode() { |  |             let that = this |  |             if (!this._empty(this.val)) { |  |                 setTimeout(() => { |  |                     qrcode = new QRCode({ |  |                         context: that, // 上下文环境 |  |                         canvasId:that.cid, // canvas-id |  |                         usingComponents: that.usingComponents, // 是否是自定义组件 |  |                         showLoading: that.showLoading, // 是否显示loading |  |                         loadingText: that.loadingText, // loading文字 |  |                         text: that.val, // 生成内容 |  |                         size: that.cpSize, // 二维码大小 |  |                         background: that.background, // 背景色 |  |                         foreground: that.foreground, // 前景色 |  |                         pdground: that.pdground, // 定位角点颜色 |  |                         correctLevel: that.lv, // 容错级别 |  |                         image: that.icon, // 二维码图标 |  |                         imageSize: that.iconSize,// 二维码图标大小 |  |                         cbResult: function (res) { // 生成二维码的回调 |  |                             that._result(res) |  |                         }, |  |                     }); |  |                 }, 1) |  |             } else { |  |                 uni.showToast({ |  |                     title: '二维码内容不能为空', |  |                     icon: 'none', |  |                     duration: 2000 |  |                 }); |  |             } |  |         }, |  |         _clearCode() { |  |             this._result('') |  |             qrcode.clear() |  |         }, |  |         _saveCode() { |  |             let that = this; |  |             if (this.result != "") { |  |                 uni.saveImageToPhotosAlbum({ |  |                     filePath: that.result, |  |                     success: function () { |  |                         uni.showToast({ |  |                             title: '二维码保存成功', |  |                             icon: 'success', |  |                             duration: 2000 |  |                         }); |  |                     } |  |                 }); |  |             } |  |         }, |  |         _result(res) { |  |             this.result = res; |  |             this.$emit('result', res) |  |         }, |  |         _empty(v) { |  |             let tp = typeof v, |  |                 rt = false; |  |             if (tp == "number" && String(v) == "") { |  |                 rt = true |  |             } else if (tp == "undefined") { |  |                 rt = true |  |             } else if (tp == "object") { |  |                 if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true |  |             } else if (tp == "string") { |  |                 if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true |  |             } else if (tp == "function") { |  |                 rt = false |  |             } |  |             return rt |  |         } |  |     }, |  |     watch: { |  |         size: function (n, o) { |  |             if (n != o && !this._empty(n)) { |  |                 this.cSize = n |  |                 if (!this._empty(this.val)) { |  |                     this._makeCode() |  |                 } |  |             } |  |         }, |  |         val: function (n, o) { |  |             if (this.onval) { |  |                 if (n != o && !this._empty(n)) { |  |                     this._makeCode() |  |                 } |  |             } |  |         } |  |     }, |  |     computed: { |  |         cpSize() { |  |             if(this.unit == "upx"){ |  |                 return uni.upx2px(this.size) |  |             }else{ |  |                 return this.size |  |             } |  |         } |  |     }, |  |     mounted () { |  |         if (this.loadMake) { |  |             if (!this._empty(this.val)) { |  |                 this._makeCode() |  |             } |  |         } |  |     }, |  | } |  | </script> |  | <style> |  | .tki-qrcode { |  |   position: relative; |  | } |  | .tki-qrcode-canvas { |  |   position: fixed!important; |  |   top: -99999upx; |  |   left: -99999upx; |  |   z-index: -99999; |  | } |  | </style> | 
 |