xianniu-ui 0.8.1 → 0.8.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xianniu-ui",
3
- "version": "0.8.1",
3
+ "version": "0.8.3",
4
4
  "private": false,
5
5
  "main": "lib/xianniu-ui.umd.min.js",
6
6
  "scripts": {
@@ -6,6 +6,20 @@
6
6
  }
7
7
  }
8
8
  }
9
+ &.is-idcard {
10
+ overflow: hidden;
11
+ .el-upload--picture-card {
12
+ width: 100%;
13
+ height: 100%;
14
+ }
15
+ .el-upload-list--picture-card {
16
+ .el-upload-list__item {
17
+ width: 100%;
18
+ height: 100%;
19
+ line-height: normal;
20
+ }
21
+ }
22
+ }
9
23
  &-list__item {
10
24
  &-file {
11
25
  height: 100%;
@@ -58,10 +72,7 @@
58
72
  }
59
73
  }
60
74
  }
61
- // &-main {
62
-
63
- // }
64
- .el-upload-list {
75
+ &:not(.is-idcard) .el-upload-list {
65
76
  &.el-upload-list--picture-card {
66
77
  .el-upload-list__item {
67
78
  width: 80px;
@@ -72,28 +83,29 @@
72
83
  }
73
84
  }
74
85
  }
75
- .el-upload {
76
- &.el-upload--picture-card {
77
- width: 80px;
78
- height: 80px;
79
- line-height: 80px;
80
- font-size: 14px;
81
- position: relative;
82
- .el-upload-list__item {
86
+ &:not(.is-idcard) {
87
+ .el-upload{
88
+ &.el-upload--picture-card {
83
89
  width: 80px;
84
90
  height: 80px;
85
- img.el-upload-list__item-thumbnail {
86
- object-fit: cover;
91
+ line-height: 80px;
92
+ font-size: 14px;
93
+ position: relative;
94
+ .el-upload-list__item {
95
+ width: 80px;
96
+ height: 80px;
97
+ img.el-upload-list__item-thumbnail {
98
+ object-fit: cover;
99
+ }
87
100
  }
88
- }
89
- .upload-limit {
90
- width: inherit;
91
- height: inherit;
92
- i {
93
- font-size: 20px;
101
+ .upload-limit {
102
+ width: inherit;
103
+ height: inherit;
104
+ i {
105
+ font-size: 20px;
106
+ }
94
107
  }
95
108
  }
96
-
97
109
  }
98
110
  }
99
111
  &--slot {
@@ -106,8 +118,6 @@
106
118
  width: 100%;
107
119
  height: 100%;
108
120
  .el-progress {
109
- width: 70%;
110
- height: auto;
111
121
  .el-progress-circle {
112
122
  width: 99% !important;
113
123
  height: 99% !important;
@@ -132,4 +142,9 @@
132
142
  border-radius: 0 0 0 0;
133
143
  }
134
144
  }
145
+ .el-upload-list__item {
146
+ .el-progress{
147
+ width: 50%;
148
+ }
149
+ }
135
150
  }
@@ -0,0 +1,137 @@
1
+ <template>
2
+ <div class="xn-idcard" :style="objStyle">
3
+ <img v-if="type === 'front' && url === ''" src="data:image/jpeg;base64,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" >
4
+
5
+ <img v-if="type === 'back' && url === ''" src="data:image/jpeg;base64,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" >
6
+ <div v-if="url" class="xn-idcard-img">
7
+ <img :src="url" alt="" />
8
+ </div>
9
+ <div v-if="url === ''" class="tip">
10
+ <i class="el-icon-upload" />
11
+ <span>点击上传{{ type === "front" ? "人像" : "国徽" }}面</span>
12
+ </div>
13
+ <el-dialog
14
+ title="查看"
15
+ append-to-body
16
+ :visible.sync="isShowView"
17
+ width="650px"
18
+ >
19
+ <div class="rotate" :style="rotateSty">
20
+ <el-image style="width: 100%" :src="previewUrl" fit="cover" />
21
+ </div>
22
+ <div class="text-center" style="position: relative">
23
+ <el-button
24
+ type="primary"
25
+ icon="el-icon-refresh-left"
26
+ @click="onRotate(1)"
27
+ />
28
+ <el-button
29
+ type="primary"
30
+ icon="el-icon-refresh-right"
31
+ @click="onRotate(2)"
32
+ />
33
+ </div>
34
+ </el-dialog>
35
+ </div>
36
+ </template>
37
+
38
+ <script>
39
+ export default {
40
+ name: "XnIdcard",
41
+ props: {
42
+ type: {
43
+ type: String,
44
+ default: "front",
45
+ validator: (val) => {
46
+ return ["front", "back"].includes(val);
47
+ },
48
+ },
49
+ url: {
50
+ type: String,
51
+ default: "",
52
+ },
53
+ width: {
54
+ type: Number,
55
+ default: 300,
56
+ },
57
+ },
58
+ data() {
59
+ return {
60
+ isShowView: false,
61
+ previewUrl: "",
62
+ rotate: 0,
63
+ };
64
+ },
65
+ computed: {
66
+ objStyle() {
67
+ const { width } = this;
68
+ return {
69
+ width: `${width}px`,
70
+ height: `${width / 1.59}px`,
71
+ };
72
+ },
73
+ rotateSty() {
74
+ return {
75
+ transform: `rotate(${this.rotate}deg)`,
76
+ };
77
+ },
78
+ },
79
+ methods: {
80
+ handlePreview(url) {
81
+ this.previewUrl = url;
82
+ this.isShowView = true;
83
+ },
84
+ onRotate(type) {
85
+ if (type === 1) {
86
+ this.rotate -= 90;
87
+ } else {
88
+ this.rotate += 90;
89
+ }
90
+ },
91
+ getIdcardSize(){
92
+ return this.objStyle
93
+ }
94
+ },
95
+ };
96
+ </script>
97
+
98
+ <style lang="scss" scoped>
99
+ ::v-deep .el-dialog__body {
100
+ overflow: hidden;
101
+ }
102
+ .rotate {
103
+ width: 100%;
104
+ height: 100%;
105
+ transition: all 0.2s ease-in-out;
106
+ overflow: hidden;
107
+ }
108
+ .xn-idcard {
109
+ position: relative;
110
+ border-radius: 10px;
111
+ overflow: hidden;
112
+ img {
113
+ display: block;
114
+ width: calc(100% - 2px);
115
+ height: 100%;
116
+ object-fit: cover;
117
+ }
118
+ .tip {
119
+ display: flex;
120
+ flex-direction: column;
121
+ position: absolute;
122
+ top: 50%;
123
+ left: 50%;
124
+ transform: translate(-50%, -50%);
125
+ font-size: 16px;
126
+ color: #999;
127
+ text-align: center;
128
+ i {
129
+ font-size: 36px;
130
+ }
131
+ span{
132
+ line-height: 1.5;
133
+
134
+ }
135
+ }
136
+ }
137
+ </style>
@@ -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 xn-upload-main"
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 === 'picture-card'">
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="listType === 'picture-card'"
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);