xianniu-ui 0.8.0 → 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.0",
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,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAgICAgJCAkKCgkNDgwODRMREBARExwUFhQWFBwrGx8bGx8bKyYuJSMlLiZENS8vNUROQj5CTl9VVV93cXecnNEBCAgICAkICQoKCQ0ODA4NExEQEBETHBQWFBYUHCsbHxsbHxsrJi4lIyUuJkQ1Ly81RE5CPkJOX1VVX3dxd5yc0f/CABEIAQUBnQMBIgACEQEDEQH/xAAxAAEBAQEBAQEBAAAAAAAAAAAAAQMCBAYFBwEBAQEBAQAAAAAAAAAAAAAAAAECAwT/2gAMAwEAAhADEAAAAP7N6zrgFCFlAUAFCUAAFoAUAESwABAAsBAEsQAKfO/RVIAFCFlAUAFCUAAFoAUAESwABAAsBAEsQAKBAAV5vT47J6/L6aw6z7T1DGwUJQAAWgBQARLAARLz58E9XPnHq18I/QZ6WJYgAUCAArjsY990ymwCUFCUAAFoAUAESwAni280yAAB17/zta9kLkAKBAAUYm18m5o8vZuJQUJRmaMLZs88PUlmgUAESwA8/n61k871U8u2y3zX0jDD1eWT2956awAFAgAK83p4Ty+rPuvFrr1ZsMbBQlY7cWeTfvjUxz9Vs165659AUAESwEPJpadWVYChOPJ7sD0Xnq4BAoEABQhZQFABQlAABaAFABEsHPQw77hzZVgKEcd057LgECgQAFc9Yml8utnffg0PYM6BQlAABaAFABEsAEpM7YsC0I7luUsZACgQAFYbjzd7U83W4CUFCUAAFoAUAESwABHPXJyhrrvju4BEsQAKBAAUQt56ghaAFCUAAFoAUAESwGVmvHk56cvY8frzoMdLecdY208Dpz/Qnm9HPVEoUCAArzenGzLfyemzDXDWvWOewUJQAAWgBQARLDLydc+jzhrLvhHsnm65ddPOdOYWO+B72O3DqCggAKELKAoAKEoAALQAoAIlhw7WcOycOxw7WcOxw7Jm0hz0AAIACiFuekGFrZzku5nLo5h2w1OmPa9sRuJQUAESwABAAsBAEsQAKBAAVjtki5bV47rdRjv5z0Ye3zS3SJc9/L7Dx7KZTu16Os9OfQFABEsAAQALAQBLEACgQAFCFlAUAFCUAAFoAUAESwABAAsBAEsQAKBCwBQhZQFABQlAABaAFABEsAAQALAQBLEACh0nwf3YoAKEAABKoA0AEUCCgAgAAUggIFgAAUCP4AR//8QAOhAAAgIBAgMECQIFAgcAAAAAAQIDEQASIRMxQQQiMFIFECAyQFBRYXEGkRQjYnLBYKEHM0JwkrHh/9oACAEBAAE/AOwdh7H6P7HB2PscCw9nhQLHGooAf5J5kn5n6b/Sv6e9OyQS+lPRyzyRKVRwXRtJN0ShF/NASOR/1dNIyyIArEC2NdQBkkzlZNKmu7RHS8VybtCv5x3dyoB4ak7Fhu2K0pl06lYD3qFV8YzqvM4Z16A5xz5cE46jFZW5H4DtNqdXRl0fi+uTIwibQV0GjywCUBrKk9NqGOk0jmNpABpsgDKki4YDLpLAUFrn8UWCiyceZjsNh7IJBsZHJrH38fQuvX1qsaBGuy1fQMaxECXTMfybx4UdtTAk1Wfw8VqQCCDfP4lmCgk47ljZ9tW0sD8sn5L4KSlaBO2XfyqduS5XrAJ6YsXmwo1nu4Im67YyKqH6+qM2g8WWXQV3/wCoX+Mk7SFDgHcEV1u8EqsrFTdDDJOIuJ3KoGt8klIWShurKP38CVykbsOYF5qm80WI7mQo2g927XBOTIw0NpFdORyOaRgTwid9qI5dMBJAJFfbxH3dvzkW6kffOGn0wIv09mX3PVF7g8WVf5iN9XUfsDkitHEyLH3dQN398Bdla0o/Qm7zSFMrGFCq0K1HbJOXaP70/wAeB2j/AJEv9uSxNwyeBEKo7fbIlYEERRqCOanGB1yNqNGVVI6HDtKoZJLayQDV/TkcU2o2I+x8SUU5++Q+6fz7bi1PqUUo8V01FN/dYHHilcEGUVflwLLTXICendqsMB0BA1Kfe2snJI3fYMoUkXtvt4Eia0ZLqxiowNtIzf7DBCQy0/cU2FwQsNILig2o7bk4IbDamtm6jaq5VihgoDGz9fDJrHUPRvEXSteAIjq+2BvlJxrBsDwWs0K264PlVYR4FZXilgCoJ3JoYHBdkrkAf3xWVhYOGVQJDR7nPAbAPxR+GkBLx6SuoEmj+2LxuNJ7l6V+uRhljYAhnBP4s746wLG4YXJRs0eeRjs1pSd7bofiyPaA8dxJxUZFB7pBs1gE4kZ9CbgCtX0yISLxSy7lrAv7Y7TMjLwTuCPeGB5gAOCdh5h8Y2Xl4N/mLcvWvy8yIObYsqsaGE36wawuAtnBMhwEHkfGJCgkmhhIBAJ3PL1BgwsG81Aki9x8Q8oXYbnGdm5n1A0QcBDKGHrAvJXs0OQ9azEc9xgIIseJKxaWOOjp1bn/AHAyVGBi/nMe+Pptiq6g0+o9NX/zEeRIXal2c/vqzUy9okpC3dXl8PK+kUOZ9lH0H7ZzFjcZRyRwo0jn7KOVP28SX34P7z/6yQ9lJQgL74vbpiNEFbggHrQ2x9aRMr6RZsAWTzvBNEJpG1bELRo/Du2pifaVmXkcMrnr7cLWCPp8lOcNPKM4aeUZw08ozhp5RnDTyjOGnlGcNPKM4aeUZw08ozhp5RnDTyjOGnlGcNPKM4aeUYEUch/rMkAEnkMMihVY3Rr/AH9X8Qh5Bj+FOCdCQKYWaFqRjOqC2YAYO0wm++BRrf1cVKJ39/T+TgcFmXqvPC6h9J51Y++fxEX9X/icV1ZdQuvuKwToQCFcg/0nEdXur2NGxWCeItps3+Dh7RGASQ9D+k/JJAzsI6Onmx/xliVZFI7t6QfrkRfdXG69ehyN6SuOV3bbTfXEkVxGzzEkEGtPXO0XUVXescsl4nCe+JWk8yucR3jJjH2B/wA4hZI4pCtqq2APqepy2aZaQo2ne6IK5b8ZVbSRRI23FY7sQhqyJ6AH2wu+m+E1narGR8TSAgmobc16ZFrUm437xssxGRzMZHbT3WkC3e9VhdjC6lJNTMeh5E4jB1DLyPyOYyBKRSSdvxhVzHwxDQra2GRFig1im65CZVULwq3NkmuZxuJHrCKSDZWuhOSKCRcGs1z2rJYO4bjAJGyoL3+5yqWvtiK7RwoVIUAFr+3TE1PMX0MAErfJFkMiMvIKbz+Z3f5L7Sl+nLEYsLKFfzjRQqL4RP4s5AtazpKgtsDhjkMh2Gnihr67DGBQjeZj+4yJSsSKeYUf9uj8zAXqc/4e/qPtn6i9A/xXbFUTwzGBytAOUAbXXQnVlZWVlZWV4VZWVlZWV7NezWVlZWVleDWVlZWV6v1/+v8A9Q+jP1BN6M9GzpAnZlXW+hHaUyKH31jP/8QAJhEAAwAABAYBBQAAAAAAAAAAAAERAjFAURAgITBBUBIDE2Bhgf/aAAgBAgEBPwD22HMch0njv0vZrK99CueUjI+WHxeiQ2p4KuRZotUPkvWtDSnnU0v6XpkmxfT3ZjwzhhVY8CHha5lmPJEzc7mFRcJT7bEklwao1Ho692V7le5XuV7le5Xv2I9iPbjHsRke2iWY8jyzDOgmjz/BjaaZ0H+BrLU4n0P/xAAmEQEAAgECBQMFAAAAAAAAAAABABFRAkAQICEwMQMSQVBgYXHR/9oACAEDAQE/APqz4hdzruaJRuRJfLc9x2KlSo87CVyPhldZ7XtsTdLzjB/WxXsBK/OwdsoR9TBNGq/PDW0Q1sEeZh5mOvc1NvE9SKrxGzZ0YJRiUYlGJRiUYlHYslnGzMElmdkwmI/MRn9hARJ1h9hu5J//2Q==" >
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);
@@ -65,7 +65,6 @@ const download = (params = { name: '', url: '' }) => {
65
65
  name: '下载模板'
66
66
  }
67
67
  const _params = Object.assign(defaultParams, params)
68
- console.log('_params: ', _params);
69
68
  const { url, name } = _params
70
69
  const x = new XMLHttpRequest();
71
70
  x.open("GET", url, true);
@@ -116,10 +115,32 @@ const arrMerge = (arr = [], key = '') => {
116
115
  }
117
116
  return result
118
117
  }
118
+ // 判空
119
+ const isBlank = (str) => {
120
+ if (str === null || (!str && str !== 0)) {
121
+ return true
122
+ }
123
+ return false
124
+ }
125
+ /* 重置方法 */
126
+ const reset = (obj) => {
127
+ for (const key in obj) {
128
+ if (Array.isArray(obj[key])) {
129
+ obj[key] = []
130
+ } else if (typeof obj[key] === 'object') {
131
+ obj[key] = reset(obj[key])
132
+ } else {
133
+ obj[key] = ''
134
+ }
135
+ }
136
+ return obj
137
+ }
119
138
  export default {
120
139
  isEmpty,
121
140
  isImg,
122
141
  deepClone,
123
142
  download,
124
- arrMerge
143
+ arrMerge,
144
+ reset,
145
+ isBlank
125
146
  }