xianniu-ui 0.8.1 → 0.8.4
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/style/index.css +1 -1
- package/lib/style/upload.css +1 -1
- package/lib/xianniu-ui.common.js +281 -77
- package/lib/xianniu-ui.css +1 -1
- package/lib/xianniu-ui.umd.js +281 -77
- package/lib/xianniu-ui.umd.min.js +9 -9
- package/package.json +1 -1
- package/packages/style/src/upload.scss +73 -23
- package/packages/upload/idCard.vue +110 -0
- package/packages/upload/main.vue +38 -11
package/package.json
CHANGED
|
@@ -6,6 +6,21 @@
|
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
+
&.is-idcard {
|
|
10
|
+
overflow: hidden;
|
|
11
|
+
.el-upload--picture-card {
|
|
12
|
+
width: 100%;
|
|
13
|
+
height: 100%;
|
|
14
|
+
overflow: hidden;
|
|
15
|
+
}
|
|
16
|
+
.el-upload-list--picture-card {
|
|
17
|
+
.el-upload-list__item {
|
|
18
|
+
width: 100%;
|
|
19
|
+
height: 100%;
|
|
20
|
+
line-height: normal;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
9
24
|
&-list__item {
|
|
10
25
|
&-file {
|
|
11
26
|
height: 100%;
|
|
@@ -58,10 +73,7 @@
|
|
|
58
73
|
}
|
|
59
74
|
}
|
|
60
75
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
// }
|
|
64
|
-
.el-upload-list {
|
|
76
|
+
&:not(.is-idcard) .el-upload-list {
|
|
65
77
|
&.el-upload-list--picture-card {
|
|
66
78
|
.el-upload-list__item {
|
|
67
79
|
width: 80px;
|
|
@@ -72,28 +84,29 @@
|
|
|
72
84
|
}
|
|
73
85
|
}
|
|
74
86
|
}
|
|
75
|
-
.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
height: 80px;
|
|
79
|
-
line-height: 80px;
|
|
80
|
-
font-size: 14px;
|
|
81
|
-
position: relative;
|
|
82
|
-
.el-upload-list__item {
|
|
87
|
+
&:not(.is-idcard) {
|
|
88
|
+
.el-upload {
|
|
89
|
+
&.el-upload--picture-card {
|
|
83
90
|
width: 80px;
|
|
84
91
|
height: 80px;
|
|
85
|
-
|
|
86
|
-
|
|
92
|
+
line-height: 80px;
|
|
93
|
+
font-size: 14px;
|
|
94
|
+
position: relative;
|
|
95
|
+
.el-upload-list__item {
|
|
96
|
+
width: 80px;
|
|
97
|
+
height: 80px;
|
|
98
|
+
img.el-upload-list__item-thumbnail {
|
|
99
|
+
object-fit: cover;
|
|
100
|
+
}
|
|
87
101
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
.upload-limit {
|
|
103
|
+
width: inherit;
|
|
104
|
+
height: inherit;
|
|
105
|
+
i {
|
|
106
|
+
font-size: 20px;
|
|
107
|
+
}
|
|
94
108
|
}
|
|
95
109
|
}
|
|
96
|
-
|
|
97
110
|
}
|
|
98
111
|
}
|
|
99
112
|
&--slot {
|
|
@@ -106,8 +119,6 @@
|
|
|
106
119
|
width: 100%;
|
|
107
120
|
height: 100%;
|
|
108
121
|
.el-progress {
|
|
109
|
-
width: 70%;
|
|
110
|
-
height: auto;
|
|
111
122
|
.el-progress-circle {
|
|
112
123
|
width: 99% !important;
|
|
113
124
|
height: 99% !important;
|
|
@@ -132,4 +143,43 @@
|
|
|
132
143
|
border-radius: 0 0 0 0;
|
|
133
144
|
}
|
|
134
145
|
}
|
|
146
|
+
.el-upload-list__item {
|
|
147
|
+
.el-progress {
|
|
148
|
+
width: 50%;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
.xn-idcard {
|
|
153
|
+
position: relative;
|
|
154
|
+
border-radius: 10px;
|
|
155
|
+
overflow: hidden;
|
|
156
|
+
img {
|
|
157
|
+
display: block;
|
|
158
|
+
width: calc(100% - 2px);
|
|
159
|
+
height: 100%;
|
|
160
|
+
object-fit: cover;
|
|
161
|
+
}
|
|
162
|
+
.tip {
|
|
163
|
+
display: flex;
|
|
164
|
+
flex-direction: column;
|
|
165
|
+
position: absolute;
|
|
166
|
+
top: 50%;
|
|
167
|
+
left: 50%;
|
|
168
|
+
transform: translate(-50%, -50%);
|
|
169
|
+
font-size: 16px;
|
|
170
|
+
color: #999;
|
|
171
|
+
text-align: center;
|
|
172
|
+
i {
|
|
173
|
+
font-size: 36px;
|
|
174
|
+
}
|
|
175
|
+
span {
|
|
176
|
+
line-height: 1.5;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
&-rotate {
|
|
180
|
+
width: 100%;
|
|
181
|
+
height: 100%;
|
|
182
|
+
transition: all 0.2s ease-in-out;
|
|
183
|
+
overflow: hidden;
|
|
184
|
+
}
|
|
135
185
|
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="xn-idcard" :style="objStyle">
|
|
3
|
+
<img
|
|
4
|
+
v-if="type === 'front' && url === ''"
|
|
5
|
+
src="data:image/jpeg;base64,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"
|
|
6
|
+
/>
|
|
7
|
+
|
|
8
|
+
<img
|
|
9
|
+
v-if="type === 'back' && url === ''"
|
|
10
|
+
src="data:image/jpeg;base64,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"
|
|
11
|
+
/>
|
|
12
|
+
<div v-if="url" class="xn-idcard-img">
|
|
13
|
+
<img :src="url" alt="" />
|
|
14
|
+
</div>
|
|
15
|
+
<div v-if="url === ''" class="tip">
|
|
16
|
+
<i class="el-icon-upload" />
|
|
17
|
+
<span>点击上传{{ type === "front" ? "人像" : "国徽" }}面</span>
|
|
18
|
+
</div>
|
|
19
|
+
<el-dialog
|
|
20
|
+
title="查看"
|
|
21
|
+
append-to-body
|
|
22
|
+
:visible.sync="isShowView"
|
|
23
|
+
width="650px"
|
|
24
|
+
>
|
|
25
|
+
<div class="xn-idcard-rotate" :style="rotateSty">
|
|
26
|
+
<el-image style="width: 100%" :src="previewUrl" fit="cover" />
|
|
27
|
+
</div>
|
|
28
|
+
<div class="text-center" style="position: relative">
|
|
29
|
+
<el-button
|
|
30
|
+
type="primary"
|
|
31
|
+
icon="el-icon-refresh-left"
|
|
32
|
+
@click="onRotate(1)"
|
|
33
|
+
/>
|
|
34
|
+
<el-button
|
|
35
|
+
type="primary"
|
|
36
|
+
icon="el-icon-refresh-right"
|
|
37
|
+
@click="onRotate(2)"
|
|
38
|
+
/>
|
|
39
|
+
</div>
|
|
40
|
+
</el-dialog>
|
|
41
|
+
</div>
|
|
42
|
+
</template>
|
|
43
|
+
|
|
44
|
+
<script>
|
|
45
|
+
export default {
|
|
46
|
+
name: "XnIdcard",
|
|
47
|
+
props: {
|
|
48
|
+
type: {
|
|
49
|
+
type: String,
|
|
50
|
+
default: "front",
|
|
51
|
+
validator: (val) => {
|
|
52
|
+
return ["front", "back"].includes(val);
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
url: {
|
|
56
|
+
type: String,
|
|
57
|
+
default: "",
|
|
58
|
+
},
|
|
59
|
+
width: {
|
|
60
|
+
type: Number,
|
|
61
|
+
default: 300,
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
data() {
|
|
65
|
+
return {
|
|
66
|
+
isShowView: false,
|
|
67
|
+
previewUrl: "",
|
|
68
|
+
rotate: 0,
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
computed: {
|
|
72
|
+
objStyle() {
|
|
73
|
+
const { width } = this;
|
|
74
|
+
return {
|
|
75
|
+
width: `${width}px`,
|
|
76
|
+
height: `${width / 1.59}px`,
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
rotateSty() {
|
|
80
|
+
return {
|
|
81
|
+
transform: `rotate(${this.rotate}deg)`,
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
methods: {
|
|
86
|
+
handlePreview(url) {
|
|
87
|
+
this.previewUrl = url;
|
|
88
|
+
this.isShowView = true;
|
|
89
|
+
},
|
|
90
|
+
onRotate(type) {
|
|
91
|
+
if (type === 1) {
|
|
92
|
+
this.rotate -= 90;
|
|
93
|
+
} else {
|
|
94
|
+
this.rotate += 90;
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
getIdcardSize() {
|
|
98
|
+
return this.objStyle;
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
</script>
|
|
103
|
+
|
|
104
|
+
<style lang="scss" scoped>
|
|
105
|
+
::v-deep .el-dialog__body {
|
|
106
|
+
overflow: hidden;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
</style>
|
package/packages/upload/main.vue
CHANGED
|
@@ -3,22 +3,28 @@
|
|
|
3
3
|
ref="upload"
|
|
4
4
|
:class="{
|
|
5
5
|
'is-disabled': $attrs.disabled != undefined,
|
|
6
|
-
'is-hidden': preview,
|
|
6
|
+
'is-hidden': preview || hideUpload || isHidden,
|
|
7
|
+
'is-idcard': listType === 'idcard',
|
|
7
8
|
}"
|
|
8
|
-
class="xn-upload
|
|
9
|
+
class="xn-upload"
|
|
9
10
|
action="###"
|
|
10
11
|
:limit="limit"
|
|
11
|
-
:list-type="listType"
|
|
12
|
+
:list-type="listType === 'idcard' ? 'picture-card' : listType"
|
|
12
13
|
v-bind="$attrs"
|
|
13
14
|
:file-list.sync="fileList"
|
|
14
15
|
:http-request="onHttpUpload"
|
|
15
16
|
:on-error="onError"
|
|
16
17
|
:before-upload="onBeforeUpload"
|
|
17
|
-
:style="styles"
|
|
18
|
+
:style="{ ...styles,...idCardSizeData }"
|
|
18
19
|
:on-exceed="onExceed"
|
|
19
20
|
:on-change="onChange"
|
|
20
21
|
>
|
|
21
|
-
<template v-if="listType === '
|
|
22
|
+
<template v-if="listType === 'idcard'">
|
|
23
|
+
<template slot="trigger">
|
|
24
|
+
<idCard ref="idcard" :type="type" />
|
|
25
|
+
</template>
|
|
26
|
+
</template>
|
|
27
|
+
<template v-else-if="listType === 'picture-card'">
|
|
22
28
|
<div slot="trigger" class="upload-limit">
|
|
23
29
|
<i class="el-icon el-icon-plus" />
|
|
24
30
|
</div>
|
|
@@ -30,11 +36,12 @@
|
|
|
30
36
|
>
|
|
31
37
|
</slot>
|
|
32
38
|
</template>
|
|
39
|
+
|
|
33
40
|
<div
|
|
34
41
|
slot="file"
|
|
35
42
|
slot-scope="{ file }"
|
|
36
43
|
class="xn-upload--slot"
|
|
37
|
-
v-if="
|
|
44
|
+
v-if="['picture-card', 'idcard'].includes(listType)"
|
|
38
45
|
>
|
|
39
46
|
<uploadPop :file="file" @on-download="handleDownload(file)"></uploadPop>
|
|
40
47
|
<template v-if="$utils.isImg(file)">
|
|
@@ -42,7 +49,6 @@
|
|
|
42
49
|
class="el-upload-list__item-thumbnail"
|
|
43
50
|
:src="file.url"
|
|
44
51
|
fit="cover"
|
|
45
|
-
:lazy="true"
|
|
46
52
|
/>
|
|
47
53
|
</template>
|
|
48
54
|
<template v-else>
|
|
@@ -58,7 +64,7 @@
|
|
|
58
64
|
<el-progress
|
|
59
65
|
:status="file.percentage === 100 && !isUploading ? 'success' : null"
|
|
60
66
|
type="circle"
|
|
61
|
-
:percentage="process(file.percentage)"
|
|
67
|
+
:percentage="process(file.percentage || 0)"
|
|
62
68
|
:stroke-width="6"
|
|
63
69
|
/>
|
|
64
70
|
</div>
|
|
@@ -77,7 +83,7 @@
|
|
|
77
83
|
<i class="fz-16 el-icon-download" />
|
|
78
84
|
</span>
|
|
79
85
|
<span
|
|
80
|
-
v-if="!$attrs.disabled && !preview"
|
|
86
|
+
v-if="(!$attrs.disabled && !preview) || hideUpload"
|
|
81
87
|
class="el-upload-list__item-delete icon ml-5"
|
|
82
88
|
@click="handleRemove(file, fileList)"
|
|
83
89
|
>
|
|
@@ -99,6 +105,7 @@
|
|
|
99
105
|
import ElImageViewer from "element-ui/packages/image/src/image-viewer";
|
|
100
106
|
import Client from "@/oss";
|
|
101
107
|
import uploadPop from "./upload-pop.vue";
|
|
108
|
+
import idCard from "./idCard.vue";
|
|
102
109
|
// const MAX_WARNING = 1024 * 10 * 1024;
|
|
103
110
|
export default {
|
|
104
111
|
name: "XnUpload",
|
|
@@ -106,6 +113,7 @@ export default {
|
|
|
106
113
|
components: {
|
|
107
114
|
uploadPop,
|
|
108
115
|
ElImageViewer,
|
|
116
|
+
idCard,
|
|
109
117
|
},
|
|
110
118
|
props: {
|
|
111
119
|
listType: {
|
|
@@ -141,6 +149,17 @@ export default {
|
|
|
141
149
|
type: Object,
|
|
142
150
|
default: () => {},
|
|
143
151
|
},
|
|
152
|
+
hideUpload: {
|
|
153
|
+
type: Boolean,
|
|
154
|
+
default: false,
|
|
155
|
+
},
|
|
156
|
+
type: {
|
|
157
|
+
type: String,
|
|
158
|
+
default: "front",
|
|
159
|
+
validator: (val) => {
|
|
160
|
+
return ["front", "back"].includes(val);
|
|
161
|
+
},
|
|
162
|
+
},
|
|
144
163
|
},
|
|
145
164
|
data() {
|
|
146
165
|
return {
|
|
@@ -154,6 +173,7 @@ export default {
|
|
|
154
173
|
file: {},
|
|
155
174
|
oss: null,
|
|
156
175
|
client: null,
|
|
176
|
+
idCardSizeData: {},
|
|
157
177
|
};
|
|
158
178
|
},
|
|
159
179
|
computed: {
|
|
@@ -180,11 +200,19 @@ export default {
|
|
|
180
200
|
stsUrl: this.$XN.stsUrl || "",
|
|
181
201
|
setFileIdUrl: this.$XN.setFileIdUrl || "",
|
|
182
202
|
});
|
|
203
|
+
this.idCardSize()
|
|
183
204
|
},
|
|
184
205
|
beforeDestroy() {
|
|
185
206
|
this.$emit("update:fileList", []);
|
|
186
207
|
},
|
|
187
208
|
methods: {
|
|
209
|
+
async idCardSize() {
|
|
210
|
+
if (this.listType !== "idcard") return {};
|
|
211
|
+
this.$nextTick(() => {
|
|
212
|
+
this.idCardSizeData =
|
|
213
|
+
this.$refs.idcard && this.$refs.idcard.getIdcardSize();
|
|
214
|
+
});
|
|
215
|
+
},
|
|
188
216
|
async onBeforeUpload(file) {
|
|
189
217
|
this.file = file;
|
|
190
218
|
return Promise.all([
|
|
@@ -277,10 +305,9 @@ export default {
|
|
|
277
305
|
},
|
|
278
306
|
async handleDownload(file) {
|
|
279
307
|
const { url, name } = file;
|
|
280
|
-
return this.$utils.download({url, name})
|
|
308
|
+
return this.$utils.download({ url, name });
|
|
281
309
|
},
|
|
282
310
|
handleRemove(file, fileList) {
|
|
283
|
-
console.log('file, fileList: ', file, fileList,this.files);
|
|
284
311
|
fileList.forEach((item, idx) => {
|
|
285
312
|
if (file.uid === item.uid) {
|
|
286
313
|
fileList.splice(idx, 1);
|