evui 3.3.36 → 3.3.39

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.
Files changed (141) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +40 -40
  3. package/dist/evui.common.js +1907 -1832
  4. package/dist/evui.common.js.map +1 -1
  5. package/dist/evui.umd.js +1907 -1832
  6. package/dist/evui.umd.js.map +1 -1
  7. package/dist/evui.umd.min.js +1 -1
  8. package/dist/evui.umd.min.js.map +1 -1
  9. package/dist/img/{EVUI.7f3588fb.svg → EVUI.b82ee81a.svg} +292 -292
  10. package/dist/img/{icon_mysql.7ea26d5d.svg → icon_mysql.1085fdc9.svg} +78 -78
  11. package/dist/img/{icon_oracle.9009b108.svg → icon_oracle.0572d3ee.svg} +13 -13
  12. package/dist/img/{icon_postgresql.f8fffba9.svg → icon_postgresql.ee12bde8.svg} +58 -58
  13. package/package.json +61 -61
  14. package/src/common/emitter.js +20 -20
  15. package/src/common/utils.debounce.js +223 -223
  16. package/src/common/utils.js +134 -134
  17. package/src/common/utils.table.js +78 -78
  18. package/src/common/utils.throttle.js +83 -83
  19. package/src/common/utils.tree.js +18 -18
  20. package/src/components/button/Button.vue +198 -198
  21. package/src/components/button/index.js +7 -7
  22. package/src/components/buttonGroup/ButtonGroup.vue +11 -11
  23. package/src/components/buttonGroup/index.js +7 -7
  24. package/src/components/calendar/Calendar.vue +661 -661
  25. package/src/components/calendar/index.js +7 -7
  26. package/src/components/calendar/uses.js +1272 -1272
  27. package/src/components/chart/Chart.vue +189 -192
  28. package/src/components/chart/chart.core.js +870 -870
  29. package/src/components/chart/element/element.bar.js +524 -524
  30. package/src/components/chart/element/element.bar.time.js +156 -156
  31. package/src/components/chart/element/element.heatmap.js +533 -533
  32. package/src/components/chart/element/element.line.js +339 -339
  33. package/src/components/chart/element/element.pie.js +197 -197
  34. package/src/components/chart/element/element.scatter.js +184 -184
  35. package/src/components/chart/element/element.tip.js +550 -542
  36. package/src/components/chart/helpers/helpers.canvas.js +265 -265
  37. package/src/components/chart/helpers/helpers.constant.js +206 -206
  38. package/src/components/chart/helpers/helpers.util.js +346 -338
  39. package/src/components/chart/index.js +9 -9
  40. package/src/components/chart/model/index.js +4 -4
  41. package/src/components/chart/model/model.series.js +93 -93
  42. package/src/components/chart/model/model.store.js +977 -967
  43. package/src/components/chart/plugins/plugins.interaction.js +769 -769
  44. package/src/components/chart/plugins/plugins.legend.gradient.js +602 -602
  45. package/src/components/chart/plugins/plugins.legend.js +1155 -1151
  46. package/src/components/chart/plugins/plugins.pie.js +254 -254
  47. package/src/components/chart/plugins/plugins.title.js +56 -56
  48. package/src/components/chart/plugins/plugins.tooltip.js +692 -692
  49. package/src/components/chart/scale/scale.js +848 -848
  50. package/src/components/chart/scale/scale.linear.js +38 -38
  51. package/src/components/chart/scale/scale.logarithmic.js +128 -128
  52. package/src/components/chart/scale/scale.step.js +336 -336
  53. package/src/components/chart/scale/scale.time.category.js +277 -277
  54. package/src/components/chart/scale/scale.time.js +48 -48
  55. package/src/components/chart/style/chart.scss +312 -312
  56. package/src/components/chart/uses.js +264 -252
  57. package/src/components/checkbox/Checkbox.vue +200 -200
  58. package/src/components/checkbox/index.js +7 -7
  59. package/src/components/checkboxGroup/CheckboxGroup.vue +44 -44
  60. package/src/components/checkboxGroup/index.js +7 -7
  61. package/src/components/contextMenu/ContextMenu.vue +80 -80
  62. package/src/components/contextMenu/MenuList.vue +149 -149
  63. package/src/components/contextMenu/index.js +7 -7
  64. package/src/components/contextMenu/uses.js +203 -203
  65. package/src/components/datePicker/DatePicker.vue +437 -437
  66. package/src/components/datePicker/index.js +7 -7
  67. package/src/components/datePicker/uses.js +419 -419
  68. package/src/components/grid/Grid.vue +827 -827
  69. package/src/components/grid/grid.filter.window.vue +493 -493
  70. package/src/components/grid/grid.pagination.vue +75 -75
  71. package/src/components/grid/grid.summary.vue +265 -265
  72. package/src/components/grid/grid.toolbar.vue +26 -26
  73. package/src/components/grid/index.js +11 -11
  74. package/src/components/grid/style/grid.scss +263 -263
  75. package/src/components/grid/uses.js +1002 -1007
  76. package/src/components/icon/Icon.vue +49 -49
  77. package/src/components/icon/index.js +8 -8
  78. package/src/components/inputNumber/InputNumber.vue +212 -212
  79. package/src/components/inputNumber/index.js +7 -7
  80. package/src/components/inputNumber/uses.js +217 -217
  81. package/src/components/loading/Loading.vue +125 -125
  82. package/src/components/loading/index.js +7 -7
  83. package/src/components/menu/Menu.vue +68 -68
  84. package/src/components/menu/MenuItem.vue +187 -187
  85. package/src/components/menu/index.js +7 -7
  86. package/src/components/message/Message.vue +223 -223
  87. package/src/components/message/index.js +31 -31
  88. package/src/components/messageBox/MessageBox.vue +358 -358
  89. package/src/components/messageBox/index.js +22 -22
  90. package/src/components/notification/Notification.vue +316 -316
  91. package/src/components/notification/index.js +49 -49
  92. package/src/components/pagination/Pagination.vue +271 -271
  93. package/src/components/pagination/index.js +7 -7
  94. package/src/components/pagination/pageButton.vue +30 -30
  95. package/src/components/progress/Progress.vue +139 -139
  96. package/src/components/progress/index.js +7 -7
  97. package/src/components/radio/Radio.vue +159 -159
  98. package/src/components/radio/index.js +7 -7
  99. package/src/components/radioGroup/RadioGroup.vue +41 -41
  100. package/src/components/radioGroup/index.js +7 -7
  101. package/src/components/scheduler/Scheduler.vue +149 -149
  102. package/src/components/scheduler/index.js +7 -7
  103. package/src/components/scheduler/uses.js +183 -183
  104. package/src/components/select/Select.vue +440 -440
  105. package/src/components/select/index.js +7 -7
  106. package/src/components/select/uses.js +270 -270
  107. package/src/components/slider/Slider.vue +505 -505
  108. package/src/components/slider/index.js +7 -7
  109. package/src/components/slider/uses.js +390 -390
  110. package/src/components/tabPanel/TabPanel.vue +74 -74
  111. package/src/components/tabPanel/index.js +7 -7
  112. package/src/components/tabs/Tabs.vue +517 -517
  113. package/src/components/tabs/index.js +7 -7
  114. package/src/components/textField/TextField.vue +375 -375
  115. package/src/components/textField/index.js +7 -7
  116. package/src/components/timePicker/TimePicker.vue +352 -352
  117. package/src/components/timePicker/index.js +7 -7
  118. package/src/components/toggle/Toggle.vue +115 -115
  119. package/src/components/toggle/index.js +7 -7
  120. package/src/components/tree/Tree.vue +313 -313
  121. package/src/components/tree/TreeNode.vue +293 -293
  122. package/src/components/tree/index.js +7 -7
  123. package/src/components/treeGrid/TreeGrid.vue +758 -758
  124. package/src/components/treeGrid/TreeGridNode.vue +275 -275
  125. package/src/components/treeGrid/index.js +9 -9
  126. package/src/components/treeGrid/style/treeGrid.scss +261 -261
  127. package/src/components/treeGrid/treeGrid.toolbar.vue +26 -26
  128. package/src/components/treeGrid/uses.js +867 -867
  129. package/src/components/window/Window.vue +329 -329
  130. package/src/components/window/index.js +7 -7
  131. package/src/components/window/uses.js +899 -899
  132. package/src/directives/clickoutside.js +90 -90
  133. package/src/main.js +116 -116
  134. package/src/style/components/input.scss +108 -108
  135. package/src/style/functions.scss +3 -3
  136. package/src/style/index.scss +6 -6
  137. package/src/style/lib/fonts/EVUI.svg +292 -292
  138. package/src/style/lib/icon.css +888 -888
  139. package/src/style/mixins.scss +94 -94
  140. package/src/style/themes.scss +67 -67
  141. package/src/style/variables.scss +22 -22
@@ -1,440 +1,440 @@
1
- <template>
2
- <div
3
- ref="select"
4
- v-clickoutside="clickOutsideDropbox"
5
- class="ev-select"
6
- :class="{
7
- selected: isDropbox,
8
- disabled,
9
- }"
10
- >
11
- <div
12
- ref="selectWrapper"
13
- class="ev-select__wrapper"
14
- >
15
- <template v-if="!multiple">
16
- <span
17
- v-if="!clearable || !isClearableIcon"
18
- class="ev-input-suffix"
19
- @click="clickSelectInput"
20
- >
21
- <i
22
- class="ev-input-suffix-arrow ev-icon-s-arrow-down"
23
- :class="{
24
- selected: isDropbox,
25
- }"
26
- />
27
- </span>
28
- <input
29
- v-model="selectedModel"
30
- type="text"
31
- class="ev-input"
32
- readonly
33
- :placeholder="computedPlaceholder"
34
- :disabled="disabled"
35
- @click="clickSelectInput"
36
- />
37
- </template>
38
- <template v-else>
39
- <div class="ev-select-tag-wrapper">
40
- <span
41
- v-if="!clearable || !isClearableIcon"
42
- class="ev-input-suffix"
43
- @click="clickSelectInput"
44
- >
45
- <i
46
- class="ev-input-suffix-arrow ev-icon-s-arrow-down"
47
- :class="{
48
- selected: isDropbox,
49
- }"
50
- />
51
- </span>
52
- <input
53
- type="text"
54
- class="ev-input multiple"
55
- readonly
56
- :placeholder="computedPlaceholder"
57
- :disabled="disabled"
58
- @click="clickSelectInput"
59
- />
60
- <template v-if="!collapseTags">
61
- <div
62
- v-for="item in selectedModel"
63
- :key="item"
64
- class="ev-select-tag"
65
- >
66
- <span class="ev-tag-name">
67
- {{ item.name }}
68
- </span>
69
- <span
70
- class="ev-tag-suffix"
71
- @click.stop="[removeMv(item.value), changeDropboxPosition()]"
72
- >
73
- <i class="ev-tag-suffix-close ev-icon-error" />
74
- </span>
75
- </div>
76
- </template>
77
- <template v-else>
78
- <div
79
- v-if="selectedModel.length"
80
- class="ev-select-tag"
81
- >
82
- <span class="ev-tag-name">
83
- {{ selectedModel[0].name }}
84
- </span>
85
- <span
86
- class="ev-tag-suffix"
87
- @click.stop="[removeMv(selectedModel[0].value), changeDropboxPosition()]"
88
- >
89
- <i class="ev-tag-suffix-close ev-icon-error" />
90
- </span>
91
- </div>
92
- <div
93
- v-if="selectedModel.length > 1"
94
- class="ev-select-tag num"
95
- >
96
- <span class="ev-tag-name">
97
- + {{ selectedModel.length - 1 }}
98
- </span>
99
- </div>
100
- </template>
101
- </div>
102
- </template>
103
- <template v-if="clearable">
104
- <span
105
- v-show="isClearableIcon"
106
- class="ev-input-suffix"
107
- @click.stop="[removeAllMv(), clickOutsideDropbox()]"
108
- >
109
- <i class="ev-icon-error" />
110
- </span>
111
- </template>
112
- <div class="ev-select-dropbox-wrapper">
113
- <div
114
- v-if="isDropbox"
115
- ref="dropbox"
116
- class="ev-select-dropbox"
117
- :style="dropboxPosition"
118
- >
119
- <input
120
- v-if="filterable"
121
- type="text"
122
- class="ev-input-query"
123
- :placeholder="searchPlaceholder"
124
- :value="filterTextRef"
125
- @input="changeFilterText"
126
- />
127
- <div
128
- ref="itemWrapper"
129
- class="ev-select-dropbox-list"
130
- >
131
- <ul
132
- v-if="filteredItems.length"
133
- class="ev-select-dropbox-ul"
134
- >
135
- <li
136
- v-for="(item, idx) in filteredItems"
137
- :key="`${item.value}_${idx}`"
138
- class="ev-select-dropbox-item"
139
- :class="{
140
- selected: selectedItemClass(item.value),
141
- disabled: item.disabled
142
- }"
143
- :title="item.name"
144
- @click.stop.prevent="[clickItem(item.value), changeDropboxPosition()]"
145
- >
146
- <i
147
- v-if="item.iconClass"
148
- :class="item.iconClass"
149
- />
150
- {{ item.name }}
151
- </li>
152
- </ul>
153
- <ul v-else>
154
- <li class="ev-select-dropbox-item disabled">
155
- {{ noMatchingText }}
156
- </li>
157
- </ul>
158
- </div>
159
- </div>
160
- </div>
161
- </div>
162
- </div>
163
- </template>
164
-
165
- <script>
166
- import { selectClickoutside as clickoutside } from '@/directives/clickoutside';
167
- import { useModel, useDropdown } from './uses';
168
-
169
- export default {
170
- name: 'EvSelect',
171
- directives: {
172
- clickoutside,
173
- },
174
- props: {
175
- modelValue: {
176
- type: [Boolean, String, Number, Array, Object],
177
- default: null,
178
- },
179
- placeholder: {
180
- type: String,
181
- default: '',
182
- },
183
- searchPlaceholder: {
184
- type: String,
185
- default: 'Please Enter a Search Words.',
186
- },
187
- noMatchingText: {
188
- type: String,
189
- default: 'NO MATCHING DATA',
190
- },
191
- items: {
192
- type: Array,
193
- default: () => [],
194
- },
195
- disabled: {
196
- type: Boolean,
197
- default: false,
198
- },
199
- clearable: {
200
- type: Boolean,
201
- default: false,
202
- },
203
- multiple: {
204
- type: Boolean,
205
- default: false,
206
- },
207
- collapseTags: {
208
- type: Boolean,
209
- default: false,
210
- },
211
- filterable: {
212
- type: Boolean,
213
- default: false,
214
- },
215
- filterText: {
216
- type: String,
217
- default: '',
218
- },
219
- },
220
- emits: {
221
- 'update:modelValue': null,
222
- change: null,
223
- },
224
- setup() {
225
- const {
226
- mv,
227
- selectedModel,
228
- computedPlaceholder,
229
- isClearableIcon,
230
- changeMv,
231
- removeMv,
232
- removeAllMv,
233
- } = useModel();
234
-
235
- const {
236
- select,
237
- selectWrapper,
238
- dropbox,
239
- itemWrapper,
240
- isDropbox,
241
- dropboxPosition,
242
- filterTextRef,
243
- filteredItems,
244
- clickSelectInput,
245
- clickOutsideDropbox,
246
- changeFilterText,
247
- changeDropboxPosition,
248
- clickItem,
249
- selectedItemClass,
250
- } = useDropdown({ mv, changeMv });
251
-
252
- return {
253
- mv,
254
- selectedModel,
255
- computedPlaceholder,
256
- isClearableIcon,
257
- changeMv,
258
- removeMv,
259
- removeAllMv,
260
-
261
- select,
262
- selectWrapper,
263
- dropbox,
264
- itemWrapper,
265
- isDropbox,
266
- dropboxPosition,
267
- filterTextRef,
268
- filteredItems,
269
- clickSelectInput,
270
- clickOutsideDropbox,
271
- changeFilterText,
272
- changeDropboxPosition,
273
- clickItem,
274
- selectedItemClass,
275
- };
276
- },
277
- };
278
- </script>
279
-
280
- <style lang="scss">
281
- @import '../../style/index.scss';
282
-
283
- .ev-select {
284
- $select-height: $input-default-height;
285
- display: block;
286
- position: relative;
287
- width: 100%;
288
- border-radius: $default-radius;
289
- cursor: pointer;
290
-
291
- @import '../../style/components/input.scss';
292
-
293
- &__wrapper {
294
- position: relative;
295
- }
296
- .ev-input {
297
- padding: 0 30px 0 15px;
298
- border: 1px solid #B2B2B2;
299
- cursor: pointer;
300
-
301
- &.multiple {
302
- position: absolute;
303
- height: 100%;
304
- }
305
- }
306
-
307
- .ev-input-suffix {
308
- display: flex;
309
- position: absolute;
310
- top: 0;
311
- right: 5px;
312
- height: 100%;
313
- align-items: center;
314
-
315
- &:hover {
316
- color: #409EFF;
317
- }
318
- }
319
-
320
- .ev-input-suffix-arrow {
321
- transform: rotate(0deg);
322
- transition-duration: 0.3s;
323
-
324
- &.selected {
325
- transform: rotate(180deg);
326
- }
327
- }
328
-
329
- .ev-select-tag-wrapper {
330
- display: flex;
331
- width: 100%;
332
- height: 100%;
333
- padding: 3px 0;
334
- min-height: $select-height;
335
- flex-wrap: wrap;
336
- align-items: center;
337
- z-index: 100;
338
- }
339
- }
340
-
341
- .ev-select-tag {
342
- display: flex;
343
- position: relative;
344
- height: 24px;
345
- padding: 0 19px 0 8px;
346
- margin: 2px 0 2px 6px;
347
- background-color: #F4F4F5;
348
- align-items: center;
349
- border: 1px solid #E9E9EB;
350
- border-radius: 4px;
351
- color: #909399;
352
- font-size: $font-size-base;
353
- cursor: auto;
354
-
355
- &.num {
356
- padding-right: 8px;
357
- }
358
-
359
- .ev-tag-suffix {
360
- display: flex;
361
- position: absolute;
362
- top: 0;
363
- right: 3px;
364
- height: 100%;
365
- align-items: center;
366
- color: #0D0D0D;
367
- cursor: pointer;
368
-
369
- &:hover {
370
- color: #409EFF;
371
- }
372
- }
373
- }
374
-
375
- .ev-select-dropbox-wrapper {
376
- height: 0;
377
- }
378
-
379
- .ev-select-dropbox {
380
- $select-height: $input-default-height;
381
- position: absolute;
382
- width: 100%;
383
- max-height: $select-height * 5;
384
- background-color: #FCFCFC;
385
- border: 1px solid #E4E7ED;
386
- color: #606266;
387
- box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
388
- border-radius: 4px;
389
- z-index: 100;
390
- cursor: pointer;
391
- overflow: hidden;
392
-
393
- ul {
394
- list-style: none;
395
- }
396
- li {
397
- height: $select-height;
398
- line-height: $select-height;
399
- }
400
-
401
- .ev-input-query {
402
- width: 100%;
403
- min-height: $select-height;
404
- padding: 0 30px 0 15px;
405
- border: 0;
406
- border-bottom: 1px solid #B2B2B2;
407
- outline: 0;
408
- font-size: $font-size-medium;
409
- background-color: transparent;
410
- }
411
-
412
- .ev-select-dropbox-list {
413
- width: 100%;
414
- max-height: $select-height * 4;
415
- overflow-y: auto;
416
- }
417
- }
418
-
419
- .ev-select-dropbox-item {
420
- padding: 0 15px;
421
- overflow: hidden;
422
- text-overflow: ellipsis;
423
- font-size: 15px;
424
- color: #0D0D0D;
425
- white-space: nowrap;
426
- cursor: pointer;
427
-
428
- &:hover {
429
- opacity: 0.85;
430
- }
431
- &.selected {
432
- color: #EBEBEB;
433
- background-color: #730EF4;
434
- }
435
- &.disabled {
436
- opacity: 1;
437
- color: #C0C4CC;
438
- }
439
- }
440
- </style>
1
+ <template>
2
+ <div
3
+ ref="select"
4
+ v-clickoutside="clickOutsideDropbox"
5
+ class="ev-select"
6
+ :class="{
7
+ selected: isDropbox,
8
+ disabled,
9
+ }"
10
+ >
11
+ <div
12
+ ref="selectWrapper"
13
+ class="ev-select__wrapper"
14
+ >
15
+ <template v-if="!multiple">
16
+ <span
17
+ v-if="!clearable || !isClearableIcon"
18
+ class="ev-input-suffix"
19
+ @click="clickSelectInput"
20
+ >
21
+ <i
22
+ class="ev-input-suffix-arrow ev-icon-s-arrow-down"
23
+ :class="{
24
+ selected: isDropbox,
25
+ }"
26
+ />
27
+ </span>
28
+ <input
29
+ v-model="selectedModel"
30
+ type="text"
31
+ class="ev-input"
32
+ readonly
33
+ :placeholder="computedPlaceholder"
34
+ :disabled="disabled"
35
+ @click="clickSelectInput"
36
+ />
37
+ </template>
38
+ <template v-else>
39
+ <div class="ev-select-tag-wrapper">
40
+ <span
41
+ v-if="!clearable || !isClearableIcon"
42
+ class="ev-input-suffix"
43
+ @click="clickSelectInput"
44
+ >
45
+ <i
46
+ class="ev-input-suffix-arrow ev-icon-s-arrow-down"
47
+ :class="{
48
+ selected: isDropbox,
49
+ }"
50
+ />
51
+ </span>
52
+ <input
53
+ type="text"
54
+ class="ev-input multiple"
55
+ readonly
56
+ :placeholder="computedPlaceholder"
57
+ :disabled="disabled"
58
+ @click="clickSelectInput"
59
+ />
60
+ <template v-if="!collapseTags">
61
+ <div
62
+ v-for="item in selectedModel"
63
+ :key="item"
64
+ class="ev-select-tag"
65
+ >
66
+ <span class="ev-tag-name">
67
+ {{ item.name }}
68
+ </span>
69
+ <span
70
+ class="ev-tag-suffix"
71
+ @click.stop="[removeMv(item.value), changeDropboxPosition()]"
72
+ >
73
+ <i class="ev-tag-suffix-close ev-icon-error" />
74
+ </span>
75
+ </div>
76
+ </template>
77
+ <template v-else>
78
+ <div
79
+ v-if="selectedModel.length"
80
+ class="ev-select-tag"
81
+ >
82
+ <span class="ev-tag-name">
83
+ {{ selectedModel[0].name }}
84
+ </span>
85
+ <span
86
+ class="ev-tag-suffix"
87
+ @click.stop="[removeMv(selectedModel[0].value), changeDropboxPosition()]"
88
+ >
89
+ <i class="ev-tag-suffix-close ev-icon-error" />
90
+ </span>
91
+ </div>
92
+ <div
93
+ v-if="selectedModel.length > 1"
94
+ class="ev-select-tag num"
95
+ >
96
+ <span class="ev-tag-name">
97
+ + {{ selectedModel.length - 1 }}
98
+ </span>
99
+ </div>
100
+ </template>
101
+ </div>
102
+ </template>
103
+ <template v-if="clearable">
104
+ <span
105
+ v-show="isClearableIcon"
106
+ class="ev-input-suffix"
107
+ @click.stop="[removeAllMv(), clickOutsideDropbox()]"
108
+ >
109
+ <i class="ev-icon-error" />
110
+ </span>
111
+ </template>
112
+ <div class="ev-select-dropbox-wrapper">
113
+ <div
114
+ v-if="isDropbox"
115
+ ref="dropbox"
116
+ class="ev-select-dropbox"
117
+ :style="dropboxPosition"
118
+ >
119
+ <input
120
+ v-if="filterable"
121
+ type="text"
122
+ class="ev-input-query"
123
+ :placeholder="searchPlaceholder"
124
+ :value="filterTextRef"
125
+ @input="changeFilterText"
126
+ />
127
+ <div
128
+ ref="itemWrapper"
129
+ class="ev-select-dropbox-list"
130
+ >
131
+ <ul
132
+ v-if="filteredItems.length"
133
+ class="ev-select-dropbox-ul"
134
+ >
135
+ <li
136
+ v-for="(item, idx) in filteredItems"
137
+ :key="`${item.value}_${idx}`"
138
+ class="ev-select-dropbox-item"
139
+ :class="{
140
+ selected: selectedItemClass(item.value),
141
+ disabled: item.disabled
142
+ }"
143
+ :title="item.name"
144
+ @click.stop.prevent="[clickItem(item.value), changeDropboxPosition()]"
145
+ >
146
+ <i
147
+ v-if="item.iconClass"
148
+ :class="item.iconClass"
149
+ />
150
+ {{ item.name }}
151
+ </li>
152
+ </ul>
153
+ <ul v-else>
154
+ <li class="ev-select-dropbox-item disabled">
155
+ {{ noMatchingText }}
156
+ </li>
157
+ </ul>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </div>
162
+ </div>
163
+ </template>
164
+
165
+ <script>
166
+ import { selectClickoutside as clickoutside } from '@/directives/clickoutside';
167
+ import { useModel, useDropdown } from './uses';
168
+
169
+ export default {
170
+ name: 'EvSelect',
171
+ directives: {
172
+ clickoutside,
173
+ },
174
+ props: {
175
+ modelValue: {
176
+ type: [Boolean, String, Number, Array, Object],
177
+ default: null,
178
+ },
179
+ placeholder: {
180
+ type: String,
181
+ default: '',
182
+ },
183
+ searchPlaceholder: {
184
+ type: String,
185
+ default: 'Please Enter a Search Words.',
186
+ },
187
+ noMatchingText: {
188
+ type: String,
189
+ default: 'NO MATCHING DATA',
190
+ },
191
+ items: {
192
+ type: Array,
193
+ default: () => [],
194
+ },
195
+ disabled: {
196
+ type: Boolean,
197
+ default: false,
198
+ },
199
+ clearable: {
200
+ type: Boolean,
201
+ default: false,
202
+ },
203
+ multiple: {
204
+ type: Boolean,
205
+ default: false,
206
+ },
207
+ collapseTags: {
208
+ type: Boolean,
209
+ default: false,
210
+ },
211
+ filterable: {
212
+ type: Boolean,
213
+ default: false,
214
+ },
215
+ filterText: {
216
+ type: String,
217
+ default: '',
218
+ },
219
+ },
220
+ emits: {
221
+ 'update:modelValue': null,
222
+ change: null,
223
+ },
224
+ setup() {
225
+ const {
226
+ mv,
227
+ selectedModel,
228
+ computedPlaceholder,
229
+ isClearableIcon,
230
+ changeMv,
231
+ removeMv,
232
+ removeAllMv,
233
+ } = useModel();
234
+
235
+ const {
236
+ select,
237
+ selectWrapper,
238
+ dropbox,
239
+ itemWrapper,
240
+ isDropbox,
241
+ dropboxPosition,
242
+ filterTextRef,
243
+ filteredItems,
244
+ clickSelectInput,
245
+ clickOutsideDropbox,
246
+ changeFilterText,
247
+ changeDropboxPosition,
248
+ clickItem,
249
+ selectedItemClass,
250
+ } = useDropdown({ mv, changeMv });
251
+
252
+ return {
253
+ mv,
254
+ selectedModel,
255
+ computedPlaceholder,
256
+ isClearableIcon,
257
+ changeMv,
258
+ removeMv,
259
+ removeAllMv,
260
+
261
+ select,
262
+ selectWrapper,
263
+ dropbox,
264
+ itemWrapper,
265
+ isDropbox,
266
+ dropboxPosition,
267
+ filterTextRef,
268
+ filteredItems,
269
+ clickSelectInput,
270
+ clickOutsideDropbox,
271
+ changeFilterText,
272
+ changeDropboxPosition,
273
+ clickItem,
274
+ selectedItemClass,
275
+ };
276
+ },
277
+ };
278
+ </script>
279
+
280
+ <style lang="scss">
281
+ @import '../../style/index.scss';
282
+
283
+ .ev-select {
284
+ $select-height: $input-default-height;
285
+ display: block;
286
+ position: relative;
287
+ width: 100%;
288
+ border-radius: $default-radius;
289
+ cursor: pointer;
290
+
291
+ @import '../../style/components/input.scss';
292
+
293
+ &__wrapper {
294
+ position: relative;
295
+ }
296
+ .ev-input {
297
+ padding: 0 30px 0 15px;
298
+ border: 1px solid #B2B2B2;
299
+ cursor: pointer;
300
+
301
+ &.multiple {
302
+ position: absolute;
303
+ height: 100%;
304
+ }
305
+ }
306
+
307
+ .ev-input-suffix {
308
+ display: flex;
309
+ position: absolute;
310
+ top: 0;
311
+ right: 5px;
312
+ height: 100%;
313
+ align-items: center;
314
+
315
+ &:hover {
316
+ color: #409EFF;
317
+ }
318
+ }
319
+
320
+ .ev-input-suffix-arrow {
321
+ transform: rotate(0deg);
322
+ transition-duration: 0.3s;
323
+
324
+ &.selected {
325
+ transform: rotate(180deg);
326
+ }
327
+ }
328
+
329
+ .ev-select-tag-wrapper {
330
+ display: flex;
331
+ width: 100%;
332
+ height: 100%;
333
+ padding: 3px 0;
334
+ min-height: $select-height;
335
+ flex-wrap: wrap;
336
+ align-items: center;
337
+ z-index: 100;
338
+ }
339
+ }
340
+
341
+ .ev-select-tag {
342
+ display: flex;
343
+ position: relative;
344
+ height: 24px;
345
+ padding: 0 19px 0 8px;
346
+ margin: 2px 0 2px 6px;
347
+ background-color: #F4F4F5;
348
+ align-items: center;
349
+ border: 1px solid #E9E9EB;
350
+ border-radius: 4px;
351
+ color: #909399;
352
+ font-size: $font-size-base;
353
+ cursor: auto;
354
+
355
+ &.num {
356
+ padding-right: 8px;
357
+ }
358
+
359
+ .ev-tag-suffix {
360
+ display: flex;
361
+ position: absolute;
362
+ top: 0;
363
+ right: 3px;
364
+ height: 100%;
365
+ align-items: center;
366
+ color: #0D0D0D;
367
+ cursor: pointer;
368
+
369
+ &:hover {
370
+ color: #409EFF;
371
+ }
372
+ }
373
+ }
374
+
375
+ .ev-select-dropbox-wrapper {
376
+ height: 0;
377
+ }
378
+
379
+ .ev-select-dropbox {
380
+ $select-height: $input-default-height;
381
+ position: absolute;
382
+ width: 100%;
383
+ max-height: $select-height * 5;
384
+ background-color: #FCFCFC;
385
+ border: 1px solid #E4E7ED;
386
+ color: #606266;
387
+ box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
388
+ border-radius: 4px;
389
+ z-index: 100;
390
+ cursor: pointer;
391
+ overflow: hidden;
392
+
393
+ ul {
394
+ list-style: none;
395
+ }
396
+ li {
397
+ height: $select-height;
398
+ line-height: $select-height;
399
+ }
400
+
401
+ .ev-input-query {
402
+ width: 100%;
403
+ min-height: $select-height;
404
+ padding: 0 30px 0 15px;
405
+ border: 0;
406
+ border-bottom: 1px solid #B2B2B2;
407
+ outline: 0;
408
+ font-size: $font-size-medium;
409
+ background-color: transparent;
410
+ }
411
+
412
+ .ev-select-dropbox-list {
413
+ width: 100%;
414
+ max-height: $select-height * 4;
415
+ overflow-y: auto;
416
+ }
417
+ }
418
+
419
+ .ev-select-dropbox-item {
420
+ padding: 0 15px;
421
+ overflow: hidden;
422
+ text-overflow: ellipsis;
423
+ font-size: 15px;
424
+ color: #0D0D0D;
425
+ white-space: nowrap;
426
+ cursor: pointer;
427
+
428
+ &:hover {
429
+ opacity: 0.85;
430
+ }
431
+ &.selected {
432
+ color: #EBEBEB;
433
+ background-color: #730EF4;
434
+ }
435
+ &.disabled {
436
+ opacity: 1;
437
+ color: #C0C4CC;
438
+ }
439
+ }
440
+ </style>