eoss-ui 0.6.20 → 0.6.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/eoss-ui.common.js +439 -420
- package/lib/flow.js +118 -118
- package/lib/form.js +3 -3
- package/lib/index.js +1 -1
- package/lib/login.js +69 -60
- package/lib/main.js +220 -210
- package/lib/qr-code.js +13 -13
- package/lib/theme-chalk/index.css +1 -1
- package/lib/theme-chalk/login.css +1 -1
- package/lib/theme-chalk/selector.css +1 -1
- package/package.json +157 -157
- package/packages/.DS_Store +0 -0
- package/packages/button/src/main.vue +418 -418
- package/packages/button-group/src/main.vue +298 -298
- package/packages/checkbox-group/.DS_Store +0 -0
- package/packages/checkbox-group/src/main.vue +333 -333
- package/packages/clients/src/main.vue +144 -144
- package/packages/data-table/.DS_Store +0 -0
- package/packages/data-table/src/children.vue +39 -39
- package/packages/data-table/src/column.vue +983 -983
- package/packages/data-table/src/main.vue +1812 -1812
- package/packages/data-table/src/sizer.vue +195 -195
- package/packages/date-picker/src/main.vue +236 -236
- package/packages/dialog/.DS_Store +0 -0
- package/packages/flow/src/main.vue +2731 -2731
- package/packages/flow-group/src/main.vue +684 -684
- package/packages/form/src/main.vue +3582 -3582
- package/packages/form/src/table.vue +1420 -1420
- package/packages/handle-user/src/main.vue +134 -134
- package/packages/handler/.DS_Store +0 -0
- package/packages/handler/src/main.vue +374 -374
- package/packages/icon/src/main.vue +101 -101
- package/packages/input/src/main.vue +356 -356
- package/packages/login/.DS_Store +0 -0
- package/packages/login/src/main.vue +1857 -1851
- package/packages/login/src/resetPassword.vue +562 -557
- package/packages/main/.DS_Store +0 -0
- package/packages/main/src/.DS_Store +0 -0
- package/packages/main/src/default/message.vue +249 -249
- package/packages/main/src/default/notice.vue +157 -157
- package/packages/main/src/default/userinfo.vue +494 -494
- package/packages/main/src/main.vue +65 -57
- package/packages/main/src/public/online.vue +89 -89
- package/packages/main/src/public/search.vue +454 -454
- package/packages/main/src/public/settings.vue +221 -221
- package/packages/main/src/simplicity/apps.vue +388 -388
- package/packages/main/src/simplicity/avatar.vue +82 -82
- package/packages/main/src/simplicity/handler.vue +183 -183
- package/packages/main/src/simplicity/index.vue +1931 -1930
- package/packages/main/src/simplicity/lists.vue +84 -84
- package/packages/main/src/simplicity/menu-list.vue +128 -128
- package/packages/main/src/simplicity/message.vue +259 -259
- package/packages/main/src/simplicity/notice.vue +190 -190
- package/packages/main/src/simplicity/router-page.vue +45 -45
- package/packages/main/src/simplicity/sub-menu.vue +241 -241
- package/packages/main/src/simplicity/user.vue +248 -248
- package/packages/main/src/simplicity/userinfo.vue +306 -304
- package/packages/menu/src/main.vue +536 -536
- package/packages/pagination/src/main.vue +96 -96
- package/packages/qr-code/src/main.vue +170 -170
- package/packages/radio-group/src/main.vue +319 -319
- package/packages/select/src/main.vue +761 -761
- package/packages/selector/src/main.vue +677 -677
- package/packages/selector-panel/src/main.vue +1020 -1020
- package/packages/selector-panel/src/selection.vue +160 -160
- package/packages/tabs/src/main.vue +788 -788
- package/packages/theme-chalk/lib/index.css +1 -1
- package/packages/theme-chalk/lib/login.css +1 -1
- package/packages/theme-chalk/lib/selector.css +1 -1
- package/packages/theme-chalk/src/.DS_Store +0 -0
- package/packages/theme-chalk/src/base.scss +260 -260
- package/packages/theme-chalk/src/button-group.scss +175 -175
- package/packages/theme-chalk/src/calendar.scss +113 -113
- package/packages/theme-chalk/src/clients.scss +87 -87
- package/packages/theme-chalk/src/common/var.scss +4 -1
- package/packages/theme-chalk/src/data-table.scss +276 -276
- package/packages/theme-chalk/src/dialog.scss +77 -77
- package/packages/theme-chalk/src/flow-group.scss +110 -110
- package/packages/theme-chalk/src/form.scss +496 -496
- package/packages/theme-chalk/src/handler.scss +133 -133
- package/packages/theme-chalk/src/icon.scss +1745 -1745
- package/packages/theme-chalk/src/icons.scss +99 -99
- package/packages/theme-chalk/src/login.scss +928 -917
- package/packages/theme-chalk/src/main.scss +632 -632
- package/packages/theme-chalk/src/menu.scss +222 -222
- package/packages/theme-chalk/src/nav.scss +125 -125
- package/packages/theme-chalk/src/pagination.scss +29 -29
- package/packages/theme-chalk/src/selector-panel.scss +204 -204
- package/packages/theme-chalk/src/selector.scss +1 -1
- package/packages/theme-chalk/src/simplicity.scss +1246 -1246
- package/packages/theme-chalk/src/tabs.scss +87 -87
- package/packages/theme-chalk/src/toolbar.scss +179 -179
- package/packages/theme-chalk/src/tree-group.scss +72 -72
- package/packages/theme-chalk/src/tree.scss +165 -165
- package/packages/upload/src/main.vue +1313 -1313
- package/packages/wujie/src/main.vue +145 -145
- package/src/.DS_Store +0 -0
- package/src/config/api.js +236 -236
- package/src/config/image.js +2 -2
- package/src/index.js +157 -157
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<el-pagination
|
|
3
|
-
class="es-pagination"
|
|
4
|
-
:class="{ 'es-pagination-complete': isComplete && position != 'center' }"
|
|
5
|
-
v-bind="$attrs"
|
|
6
|
-
:current-page="pageNum"
|
|
7
|
-
:page-size="pageSize"
|
|
8
|
-
:page-sizes="limits"
|
|
9
|
-
:layout="layout"
|
|
10
|
-
:total="totalCount"
|
|
11
|
-
:pager-count="groups"
|
|
12
|
-
:hide-on-single-page="hideOnSinglePage"
|
|
13
|
-
:unit="false"
|
|
14
|
-
@size-change="handleSize"
|
|
15
|
-
@current-change="handleCurrent"
|
|
16
|
-
@prev-click="handlePrev"
|
|
17
|
-
@next-click="handleNext"
|
|
18
|
-
>
|
|
19
|
-
</el-pagination>
|
|
20
|
-
</template>
|
|
21
|
-
<script>
|
|
22
|
-
import util from 'eoss-ui/src/utils/util';
|
|
23
|
-
const paginationLayout =
|
|
24
|
-
util.win.top.tableLayout ||
|
|
25
|
-
util.win.tableLayout ||
|
|
26
|
-
'prev, pager, next, sizes, total';
|
|
27
|
-
export default {
|
|
28
|
-
name: 'EsPagination',
|
|
29
|
-
inheritAttrs: false,
|
|
30
|
-
computed: {
|
|
31
|
-
isComplete() {
|
|
32
|
-
return (
|
|
33
|
-
this.layout.indexOf('total') > -1 &&
|
|
34
|
-
this.layout.indexOf('sizes') > -1 &&
|
|
35
|
-
this.layout.indexOf('prev') > -1 &&
|
|
36
|
-
this.layout.indexOf('pager') > -1 &&
|
|
37
|
-
this.layout.indexOf('next') > -1 &&
|
|
38
|
-
this.layout.indexOf('jumper') > -1
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
props: {
|
|
43
|
-
position: String,
|
|
44
|
-
// 当前页码
|
|
45
|
-
pageNum: {
|
|
46
|
-
type: Number,
|
|
47
|
-
default: 1
|
|
48
|
-
},
|
|
49
|
-
// 每页显示的条数
|
|
50
|
-
pageSize: {
|
|
51
|
-
type: Number,
|
|
52
|
-
default: 20
|
|
53
|
-
},
|
|
54
|
-
// 每页条数的选择项
|
|
55
|
-
limits: {
|
|
56
|
-
type: Array,
|
|
57
|
-
default() {
|
|
58
|
-
return [10, 20, 30, 40, 50, 100];
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
// 总页数
|
|
62
|
-
pageCount: Number,
|
|
63
|
-
// 总条目数
|
|
64
|
-
totalCount: Number,
|
|
65
|
-
// 自定义排版
|
|
66
|
-
layout: {
|
|
67
|
-
type: String,
|
|
68
|
-
default: paginationLayout
|
|
69
|
-
},
|
|
70
|
-
// 只有一页时是否隐藏
|
|
71
|
-
hideOnSinglePage: {
|
|
72
|
-
type: Boolean,
|
|
73
|
-
default: false
|
|
74
|
-
},
|
|
75
|
-
// 页码按钮的数量
|
|
76
|
-
groups: {
|
|
77
|
-
type: Number,
|
|
78
|
-
default: 7
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
methods: {
|
|
82
|
-
handleSize(res) {
|
|
83
|
-
this.$emit('change', res);
|
|
84
|
-
},
|
|
85
|
-
handleCurrent(res) {
|
|
86
|
-
this.$emit('current', res);
|
|
87
|
-
},
|
|
88
|
-
handlePrev(res) {
|
|
89
|
-
this.$emit('prev', res);
|
|
90
|
-
},
|
|
91
|
-
handleNext(res) {
|
|
92
|
-
this.$emit('next', res);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<el-pagination
|
|
3
|
+
class="es-pagination"
|
|
4
|
+
:class="{ 'es-pagination-complete': isComplete && position != 'center' }"
|
|
5
|
+
v-bind="$attrs"
|
|
6
|
+
:current-page="pageNum"
|
|
7
|
+
:page-size="pageSize"
|
|
8
|
+
:page-sizes="limits"
|
|
9
|
+
:layout="layout"
|
|
10
|
+
:total="totalCount"
|
|
11
|
+
:pager-count="groups"
|
|
12
|
+
:hide-on-single-page="hideOnSinglePage"
|
|
13
|
+
:unit="false"
|
|
14
|
+
@size-change="handleSize"
|
|
15
|
+
@current-change="handleCurrent"
|
|
16
|
+
@prev-click="handlePrev"
|
|
17
|
+
@next-click="handleNext"
|
|
18
|
+
>
|
|
19
|
+
</el-pagination>
|
|
20
|
+
</template>
|
|
21
|
+
<script>
|
|
22
|
+
import util from 'eoss-ui/src/utils/util';
|
|
23
|
+
const paginationLayout =
|
|
24
|
+
util.win.top.tableLayout ||
|
|
25
|
+
util.win.tableLayout ||
|
|
26
|
+
'prev, pager, next, sizes, total';
|
|
27
|
+
export default {
|
|
28
|
+
name: 'EsPagination',
|
|
29
|
+
inheritAttrs: false,
|
|
30
|
+
computed: {
|
|
31
|
+
isComplete() {
|
|
32
|
+
return (
|
|
33
|
+
this.layout.indexOf('total') > -1 &&
|
|
34
|
+
this.layout.indexOf('sizes') > -1 &&
|
|
35
|
+
this.layout.indexOf('prev') > -1 &&
|
|
36
|
+
this.layout.indexOf('pager') > -1 &&
|
|
37
|
+
this.layout.indexOf('next') > -1 &&
|
|
38
|
+
this.layout.indexOf('jumper') > -1
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
props: {
|
|
43
|
+
position: String,
|
|
44
|
+
// 当前页码
|
|
45
|
+
pageNum: {
|
|
46
|
+
type: Number,
|
|
47
|
+
default: 1
|
|
48
|
+
},
|
|
49
|
+
// 每页显示的条数
|
|
50
|
+
pageSize: {
|
|
51
|
+
type: Number,
|
|
52
|
+
default: 20
|
|
53
|
+
},
|
|
54
|
+
// 每页条数的选择项
|
|
55
|
+
limits: {
|
|
56
|
+
type: Array,
|
|
57
|
+
default() {
|
|
58
|
+
return [10, 20, 30, 40, 50, 100];
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
// 总页数
|
|
62
|
+
pageCount: Number,
|
|
63
|
+
// 总条目数
|
|
64
|
+
totalCount: Number,
|
|
65
|
+
// 自定义排版
|
|
66
|
+
layout: {
|
|
67
|
+
type: String,
|
|
68
|
+
default: paginationLayout
|
|
69
|
+
},
|
|
70
|
+
// 只有一页时是否隐藏
|
|
71
|
+
hideOnSinglePage: {
|
|
72
|
+
type: Boolean,
|
|
73
|
+
default: false
|
|
74
|
+
},
|
|
75
|
+
// 页码按钮的数量
|
|
76
|
+
groups: {
|
|
77
|
+
type: Number,
|
|
78
|
+
default: 7
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
methods: {
|
|
82
|
+
handleSize(res) {
|
|
83
|
+
this.$emit('change', res);
|
|
84
|
+
},
|
|
85
|
+
handleCurrent(res) {
|
|
86
|
+
this.$emit('current', res);
|
|
87
|
+
},
|
|
88
|
+
handlePrev(res) {
|
|
89
|
+
this.$emit('prev', res);
|
|
90
|
+
},
|
|
91
|
+
handleNext(res) {
|
|
92
|
+
this.$emit('next', res);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
</script>
|
|
@@ -1,170 +1,170 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="es-qrcode-box" id="qrcode" ref="qrcode">
|
|
3
|
-
<template v-if="mwidth && mheight">
|
|
4
|
-
<img
|
|
5
|
-
class="es-qrcode-img"
|
|
6
|
-
:width="mwidth"
|
|
7
|
-
:height="mheight"
|
|
8
|
-
ref="qrcodeImg"
|
|
9
|
-
alt="二维码图片"
|
|
10
|
-
/>
|
|
11
|
-
<!-- <img
|
|
12
|
-
v-if="logo"
|
|
13
|
-
class="es-qrcode-logo"
|
|
14
|
-
ref="qrcodeLogo"
|
|
15
|
-
:src="logo"
|
|
16
|
-
alt="二维码logo"
|
|
17
|
-
/> -->
|
|
18
|
-
<canvas
|
|
19
|
-
:width="mwidth"
|
|
20
|
-
:height="mheight"
|
|
21
|
-
class="canvas"
|
|
22
|
-
ref="canvas"
|
|
23
|
-
></canvas>
|
|
24
|
-
</template>
|
|
25
|
-
</div>
|
|
26
|
-
</template>
|
|
27
|
-
|
|
28
|
-
<script>
|
|
29
|
-
import util from 'eoss-ui/src/utils/util';
|
|
30
|
-
const QRCode = require('qrcode');
|
|
31
|
-
export default {
|
|
32
|
-
name: 'EsQrCode',
|
|
33
|
-
props: {
|
|
34
|
-
content: {
|
|
35
|
-
type: String,
|
|
36
|
-
required: true
|
|
37
|
-
},
|
|
38
|
-
logo: String,
|
|
39
|
-
text: String,
|
|
40
|
-
width: {
|
|
41
|
-
type: Number,
|
|
42
|
-
default: 300
|
|
43
|
-
},
|
|
44
|
-
height: {
|
|
45
|
-
type: Number,
|
|
46
|
-
default: 300
|
|
47
|
-
},
|
|
48
|
-
auto: Boolean,
|
|
49
|
-
option: {
|
|
50
|
-
type: Object,
|
|
51
|
-
default: () => {
|
|
52
|
-
return {
|
|
53
|
-
errorCorrectionLevel: 'H', //纠错等级
|
|
54
|
-
color: {
|
|
55
|
-
dark: '#000000',
|
|
56
|
-
light: '#ffffff'
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
computed: {},
|
|
63
|
-
data() {
|
|
64
|
-
return {
|
|
65
|
-
mwidth: 0,
|
|
66
|
-
mheight: 0
|
|
67
|
-
};
|
|
68
|
-
},
|
|
69
|
-
watch: {
|
|
70
|
-
logo: function (val) {
|
|
71
|
-
this.$nextTick(() => {
|
|
72
|
-
this.createQRCode();
|
|
73
|
-
});
|
|
74
|
-
},
|
|
75
|
-
content: {
|
|
76
|
-
immediate: true,
|
|
77
|
-
handler(val) {
|
|
78
|
-
if (val) {
|
|
79
|
-
this.createQRCode();
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
created() {},
|
|
85
|
-
mounted() {
|
|
86
|
-
if (this.auto) {
|
|
87
|
-
let h =
|
|
88
|
-
(this.$refs.qrcode.offsetHeight || this.$refs.qrcode.offsetWidth) -
|
|
89
|
-
parseInt(util.getStyle(this.$refs.qrcode, 'padding-top'), 10) -
|
|
90
|
-
parseInt(util.getStyle(this.$refs.qrcode, 'padding-bottom'), 10);
|
|
91
|
-
if (h > 0) {
|
|
92
|
-
this.mwidth = h;
|
|
93
|
-
this.mheight = h;
|
|
94
|
-
}
|
|
95
|
-
} else {
|
|
96
|
-
this.mwidth = this.width;
|
|
97
|
-
this.mheight = this.height;
|
|
98
|
-
}
|
|
99
|
-
this.$nextTick(() => {
|
|
100
|
-
this.createQRCode();
|
|
101
|
-
});
|
|
102
|
-
},
|
|
103
|
-
methods: {
|
|
104
|
-
createQRCode() {
|
|
105
|
-
let qrcodeImg = this.$refs.qrcodeImg;
|
|
106
|
-
//let qrcodeLogo = this.$refs.qrcodeLogo;
|
|
107
|
-
let canvas = this.$refs.canvas;
|
|
108
|
-
let option = util.extend({}, this.option, {
|
|
109
|
-
width: this.mwidth,
|
|
110
|
-
height: this.mheight
|
|
111
|
-
});
|
|
112
|
-
if (!qrcodeImg) {
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
QRCode.toDataURL(this.content, option, (err, url) => {
|
|
116
|
-
if (this.content && url) {
|
|
117
|
-
qrcodeImg.src = url;
|
|
118
|
-
// 画二维码里的logo// 在canvas里进行拼接
|
|
119
|
-
let ctx = canvas.getContext('2d');
|
|
120
|
-
setTimeout(() => {
|
|
121
|
-
//获取图片
|
|
122
|
-
ctx.drawImage(qrcodeImg, 0, 0, this.mwidth, this.mheight);
|
|
123
|
-
if (this.logo && this.logo.indexOf('.') > -1) {
|
|
124
|
-
let logo = new Image();
|
|
125
|
-
logo.src = this.logo;
|
|
126
|
-
//设置logo大小
|
|
127
|
-
let logoPosition = (this.mwidth - 46) / 2; //logo相对于canvas居中定位
|
|
128
|
-
//设置获取的logo将其变为圆角以及添加白色背景
|
|
129
|
-
/* ctx.fillStyle = "#fff";
|
|
130
|
-
ctx.beginPath();
|
|
131
|
-
let h = 46; //圆角高 10为基数(logo四周白色背景为10/2)
|
|
132
|
-
let w = 46; //圆角宽
|
|
133
|
-
let x = logoPosition - 5;
|
|
134
|
-
let y = logoPosition - 5;
|
|
135
|
-
let r = 5; //圆角半径
|
|
136
|
-
ctx.moveTo(x + r, y);
|
|
137
|
-
ctx.arcTo(x + w, y, x + w, y + h, r);
|
|
138
|
-
ctx.arcTo(x + w, y + h, x, y + h, r);
|
|
139
|
-
ctx.arcTo(x, y + h, x, y, r);
|
|
140
|
-
ctx.arcTo(x, y, x + w, y, r);
|
|
141
|
-
ctx.closePath();
|
|
142
|
-
ctx.fill(); */
|
|
143
|
-
logo.onload = () => {
|
|
144
|
-
ctx.drawImage(logo, logoPosition, logoPosition, 46, 46);
|
|
145
|
-
qrcodeImg.src = canvas.toDataURL();
|
|
146
|
-
};
|
|
147
|
-
} else if (this.text) {
|
|
148
|
-
//设置字体
|
|
149
|
-
let fpadd = 10; //规定内间距
|
|
150
|
-
ctx.font = 'bold 16px Arial';
|
|
151
|
-
let tw = ctx.measureText(this.text).width; //文字真实宽度
|
|
152
|
-
let ftop = (this.mheight - 16) / 2; //根据字体大小计算文字top
|
|
153
|
-
let fleft = (this.mwidth - tw) / 2; //根据字体大小计算文字left
|
|
154
|
-
let tp = 16 / 2; //字体边距为字体大小的一半可以自己设置
|
|
155
|
-
ctx.fillStyle = '#fff';
|
|
156
|
-
ctx.fillRect(fleft - tp / 2, ftop - tp / 2, tw + tp, 16 + tp);
|
|
157
|
-
ctx.textBaseline = 'top'; //设置绘制文本时的文本基线。
|
|
158
|
-
ctx.fillStyle = '#f40';
|
|
159
|
-
ctx.fillText(this.text, fleft, ftop);
|
|
160
|
-
}
|
|
161
|
-
canvas.style.display = 'none';
|
|
162
|
-
qrcodeImg.src = canvas.toDataURL();
|
|
163
|
-
qrcodeImg.style.display = 'inline-block';
|
|
164
|
-
}, 500);
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<div class="es-qrcode-box" id="qrcode" ref="qrcode">
|
|
3
|
+
<template v-if="mwidth && mheight">
|
|
4
|
+
<img
|
|
5
|
+
class="es-qrcode-img"
|
|
6
|
+
:width="mwidth"
|
|
7
|
+
:height="mheight"
|
|
8
|
+
ref="qrcodeImg"
|
|
9
|
+
alt="二维码图片"
|
|
10
|
+
/>
|
|
11
|
+
<!-- <img
|
|
12
|
+
v-if="logo"
|
|
13
|
+
class="es-qrcode-logo"
|
|
14
|
+
ref="qrcodeLogo"
|
|
15
|
+
:src="logo"
|
|
16
|
+
alt="二维码logo"
|
|
17
|
+
/> -->
|
|
18
|
+
<canvas
|
|
19
|
+
:width="mwidth"
|
|
20
|
+
:height="mheight"
|
|
21
|
+
class="canvas"
|
|
22
|
+
ref="canvas"
|
|
23
|
+
></canvas>
|
|
24
|
+
</template>
|
|
25
|
+
</div>
|
|
26
|
+
</template>
|
|
27
|
+
|
|
28
|
+
<script>
|
|
29
|
+
import util from 'eoss-ui/src/utils/util';
|
|
30
|
+
const QRCode = require('qrcode');
|
|
31
|
+
export default {
|
|
32
|
+
name: 'EsQrCode',
|
|
33
|
+
props: {
|
|
34
|
+
content: {
|
|
35
|
+
type: String,
|
|
36
|
+
required: true
|
|
37
|
+
},
|
|
38
|
+
logo: String,
|
|
39
|
+
text: String,
|
|
40
|
+
width: {
|
|
41
|
+
type: Number,
|
|
42
|
+
default: 300
|
|
43
|
+
},
|
|
44
|
+
height: {
|
|
45
|
+
type: Number,
|
|
46
|
+
default: 300
|
|
47
|
+
},
|
|
48
|
+
auto: Boolean,
|
|
49
|
+
option: {
|
|
50
|
+
type: Object,
|
|
51
|
+
default: () => {
|
|
52
|
+
return {
|
|
53
|
+
errorCorrectionLevel: 'H', //纠错等级
|
|
54
|
+
color: {
|
|
55
|
+
dark: '#000000',
|
|
56
|
+
light: '#ffffff'
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
computed: {},
|
|
63
|
+
data() {
|
|
64
|
+
return {
|
|
65
|
+
mwidth: 0,
|
|
66
|
+
mheight: 0
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
watch: {
|
|
70
|
+
logo: function (val) {
|
|
71
|
+
this.$nextTick(() => {
|
|
72
|
+
this.createQRCode();
|
|
73
|
+
});
|
|
74
|
+
},
|
|
75
|
+
content: {
|
|
76
|
+
immediate: true,
|
|
77
|
+
handler(val) {
|
|
78
|
+
if (val) {
|
|
79
|
+
this.createQRCode();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
created() {},
|
|
85
|
+
mounted() {
|
|
86
|
+
if (this.auto) {
|
|
87
|
+
let h =
|
|
88
|
+
(this.$refs.qrcode.offsetHeight || this.$refs.qrcode.offsetWidth) -
|
|
89
|
+
parseInt(util.getStyle(this.$refs.qrcode, 'padding-top'), 10) -
|
|
90
|
+
parseInt(util.getStyle(this.$refs.qrcode, 'padding-bottom'), 10);
|
|
91
|
+
if (h > 0) {
|
|
92
|
+
this.mwidth = h;
|
|
93
|
+
this.mheight = h;
|
|
94
|
+
}
|
|
95
|
+
} else {
|
|
96
|
+
this.mwidth = this.width;
|
|
97
|
+
this.mheight = this.height;
|
|
98
|
+
}
|
|
99
|
+
this.$nextTick(() => {
|
|
100
|
+
this.createQRCode();
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
methods: {
|
|
104
|
+
createQRCode() {
|
|
105
|
+
let qrcodeImg = this.$refs.qrcodeImg;
|
|
106
|
+
//let qrcodeLogo = this.$refs.qrcodeLogo;
|
|
107
|
+
let canvas = this.$refs.canvas;
|
|
108
|
+
let option = util.extend({}, this.option, {
|
|
109
|
+
width: this.mwidth,
|
|
110
|
+
height: this.mheight
|
|
111
|
+
});
|
|
112
|
+
if (!qrcodeImg) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
QRCode.toDataURL(this.content, option, (err, url) => {
|
|
116
|
+
if (this.content && url) {
|
|
117
|
+
qrcodeImg.src = url;
|
|
118
|
+
// 画二维码里的logo// 在canvas里进行拼接
|
|
119
|
+
let ctx = canvas.getContext('2d');
|
|
120
|
+
setTimeout(() => {
|
|
121
|
+
//获取图片
|
|
122
|
+
ctx.drawImage(qrcodeImg, 0, 0, this.mwidth, this.mheight);
|
|
123
|
+
if (this.logo && this.logo.indexOf('.') > -1) {
|
|
124
|
+
let logo = new Image();
|
|
125
|
+
logo.src = this.logo;
|
|
126
|
+
//设置logo大小
|
|
127
|
+
let logoPosition = (this.mwidth - 46) / 2; //logo相对于canvas居中定位
|
|
128
|
+
//设置获取的logo将其变为圆角以及添加白色背景
|
|
129
|
+
/* ctx.fillStyle = "#fff";
|
|
130
|
+
ctx.beginPath();
|
|
131
|
+
let h = 46; //圆角高 10为基数(logo四周白色背景为10/2)
|
|
132
|
+
let w = 46; //圆角宽
|
|
133
|
+
let x = logoPosition - 5;
|
|
134
|
+
let y = logoPosition - 5;
|
|
135
|
+
let r = 5; //圆角半径
|
|
136
|
+
ctx.moveTo(x + r, y);
|
|
137
|
+
ctx.arcTo(x + w, y, x + w, y + h, r);
|
|
138
|
+
ctx.arcTo(x + w, y + h, x, y + h, r);
|
|
139
|
+
ctx.arcTo(x, y + h, x, y, r);
|
|
140
|
+
ctx.arcTo(x, y, x + w, y, r);
|
|
141
|
+
ctx.closePath();
|
|
142
|
+
ctx.fill(); */
|
|
143
|
+
logo.onload = () => {
|
|
144
|
+
ctx.drawImage(logo, logoPosition, logoPosition, 46, 46);
|
|
145
|
+
qrcodeImg.src = canvas.toDataURL();
|
|
146
|
+
};
|
|
147
|
+
} else if (this.text) {
|
|
148
|
+
//设置字体
|
|
149
|
+
let fpadd = 10; //规定内间距
|
|
150
|
+
ctx.font = 'bold 16px Arial';
|
|
151
|
+
let tw = ctx.measureText(this.text).width; //文字真实宽度
|
|
152
|
+
let ftop = (this.mheight - 16) / 2; //根据字体大小计算文字top
|
|
153
|
+
let fleft = (this.mwidth - tw) / 2; //根据字体大小计算文字left
|
|
154
|
+
let tp = 16 / 2; //字体边距为字体大小的一半可以自己设置
|
|
155
|
+
ctx.fillStyle = '#fff';
|
|
156
|
+
ctx.fillRect(fleft - tp / 2, ftop - tp / 2, tw + tp, 16 + tp);
|
|
157
|
+
ctx.textBaseline = 'top'; //设置绘制文本时的文本基线。
|
|
158
|
+
ctx.fillStyle = '#f40';
|
|
159
|
+
ctx.fillText(this.text, fleft, ftop);
|
|
160
|
+
}
|
|
161
|
+
canvas.style.display = 'none';
|
|
162
|
+
qrcodeImg.src = canvas.toDataURL();
|
|
163
|
+
qrcodeImg.style.display = 'inline-block';
|
|
164
|
+
}, 500);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
</script>
|