@zkwq/business 0.0.1

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 (231) hide show
  1. package/dist/index.css +1 -0
  2. package/dist/index.js +21861 -0
  3. package/dist/index.umd.cjs +46 -0
  4. package/package.json +27 -0
  5. package/src/components/base/ui/alert/Alert.vue +94 -0
  6. package/src/components/base/ui/autocomplete/autocomplete-suggestions.vue +77 -0
  7. package/src/components/base/ui/autocomplete/autocomplete.vue +305 -0
  8. package/src/components/base/ui/backtop/main.vue +112 -0
  9. package/src/components/base/ui/button/Button.vue +84 -0
  10. package/src/components/base/ui/button/ButtonGroup.vue +10 -0
  11. package/src/components/base/ui/carousel/Carousel.vue +304 -0
  12. package/src/components/base/ui/carousel/CarouselItem.vue +137 -0
  13. package/src/components/base/ui/cascader/cascader.vue +650 -0
  14. package/src/components/base/ui/cascader-panel/cascader-menu.vue +138 -0
  15. package/src/components/base/ui/cascader-panel/cascader-node.vue +246 -0
  16. package/src/components/base/ui/cascader-panel/cascader-panel.vue +382 -0
  17. package/src/components/base/ui/cascader-panel/node.js +166 -0
  18. package/src/components/base/ui/cascader-panel/store.js +62 -0
  19. package/src/components/base/ui/checkbox/checkbox-button.vue +199 -0
  20. package/src/components/base/ui/checkbox/checkbox-group.vue +48 -0
  21. package/src/components/base/ui/checkbox/checkbox.vue +222 -0
  22. package/src/components/base/ui/col/col.js +71 -0
  23. package/src/components/base/ui/collapse/collapse-item.vue +180 -0
  24. package/src/components/base/ui/collapse/collapse.vue +73 -0
  25. package/src/components/base/ui/color-picker/color.js +317 -0
  26. package/src/components/base/ui/color-picker/components/alpha-slider.vue +132 -0
  27. package/src/components/base/ui/color-picker/components/hue-slider.vue +123 -0
  28. package/src/components/base/ui/color-picker/components/picker-dropdown.vue +119 -0
  29. package/src/components/base/ui/color-picker/components/predefine.vue +61 -0
  30. package/src/components/base/ui/color-picker/components/sv-panel.vue +100 -0
  31. package/src/components/base/ui/color-picker/draggable.js +36 -0
  32. package/src/components/base/ui/color-picker/index.js +2 -0
  33. package/src/components/base/ui/color-picker/main.vue +188 -0
  34. package/src/components/base/ui/date-picker/basic/date-table.vue +441 -0
  35. package/src/components/base/ui/date-picker/basic/month-table.vue +254 -0
  36. package/src/components/base/ui/date-picker/basic/time-spinner.vue +304 -0
  37. package/src/components/base/ui/date-picker/basic/year-table.vue +101 -0
  38. package/src/components/base/ui/date-picker/panel/date-range.vue +680 -0
  39. package/src/components/base/ui/date-picker/panel/date.vue +597 -0
  40. package/src/components/base/ui/date-picker/panel/month-range.vue +289 -0
  41. package/src/components/base/ui/date-picker/panel/time-range.vue +248 -0
  42. package/src/components/base/ui/date-picker/panel/time-select.vue +178 -0
  43. package/src/components/base/ui/date-picker/panel/time.vue +186 -0
  44. package/src/components/base/ui/date-picker/picker/date-picker.js +43 -0
  45. package/src/components/base/ui/date-picker/picker/time-picker.js +39 -0
  46. package/src/components/base/ui/date-picker/picker/time-select.js +21 -0
  47. package/src/components/base/ui/date-picker/picker.vue +942 -0
  48. package/src/components/base/ui/dialog/Index.vue +212 -0
  49. package/src/components/base/ui/directive/repeat-click.js +24 -0
  50. package/src/components/base/ui/directive/ripple.js +303 -0
  51. package/src/components/base/ui/divider/Divider.vue +37 -0
  52. package/src/components/base/ui/drawer/Drawer.vue +202 -0
  53. package/src/components/base/ui/dropdown/dropdown-item.vue +39 -0
  54. package/src/components/base/ui/dropdown/dropdown-menu.vue +63 -0
  55. package/src/components/base/ui/dropdown/dropdown.vue +308 -0
  56. package/src/components/base/ui/form/Form.vue +167 -0
  57. package/src/components/base/ui/form/FormItem.vue +334 -0
  58. package/src/components/base/ui/form/LabelWrap.vue +69 -0
  59. package/src/components/base/ui/icon/icon.vue +13 -0
  60. package/src/components/base/ui/image/image-viewer.vue +302 -0
  61. package/src/components/base/ui/image/main.vue +248 -0
  62. package/src/components/base/ui/index.js +189 -0
  63. package/src/components/base/ui/input/Input.vue +438 -0
  64. package/src/components/base/ui/input/calcTextareaHeight.js +104 -0
  65. package/src/components/base/ui/input-number/input-number.vue +285 -0
  66. package/src/components/base/ui/locale/format.js +32 -0
  67. package/src/components/base/ui/locale/index.js +48 -0
  68. package/src/components/base/ui/locale/lang/zh-CN.js +120 -0
  69. package/src/components/base/ui/menu/menu-item-group.vue +45 -0
  70. package/src/components/base/ui/menu/menu-item.vue +112 -0
  71. package/src/components/base/ui/menu/menu-mixin.js +44 -0
  72. package/src/components/base/ui/menu/menu.vue +312 -0
  73. package/src/components/base/ui/menu/submenu.vue +408 -0
  74. package/src/components/base/ui/message/index.js +2 -0
  75. package/src/components/base/ui/message/main.js +87 -0
  76. package/src/components/base/ui/message/main.vue +110 -0
  77. package/src/components/base/ui/message-box/main.js +216 -0
  78. package/src/components/base/ui/message-box/main.vue +323 -0
  79. package/src/components/base/ui/mixin/emitter.js +31 -0
  80. package/src/components/base/ui/mixin/focus.js +9 -0
  81. package/src/components/base/ui/mixin/locale.js +9 -0
  82. package/src/components/base/ui/mixin/migrating.js +33 -0
  83. package/src/components/base/ui/pagination/pager.vue +163 -0
  84. package/src/components/base/ui/pagination/pagination.jsx +391 -0
  85. package/src/components/base/ui/popover/directive.js +20 -0
  86. package/src/components/base/ui/popover/index.js +14 -0
  87. package/src/components/base/ui/popover/main.vue +236 -0
  88. package/src/components/base/ui/progress/Progress.vue +227 -0
  89. package/src/components/base/ui/radio/radio-button.vue +114 -0
  90. package/src/components/base/ui/radio/radio-group.vue +111 -0
  91. package/src/components/base/ui/radio/radio.vue +134 -0
  92. package/src/components/base/ui/row/row.js +47 -0
  93. package/src/components/base/ui/scrollbar/bar.jsx +91 -0
  94. package/src/components/base/ui/scrollbar/index.jsx +203 -0
  95. package/src/components/base/ui/scrollbar/util.js +32 -0
  96. package/src/components/base/ui/select/Option.vue +168 -0
  97. package/src/components/base/ui/select/OptionGroup.vue +60 -0
  98. package/src/components/base/ui/select/Select.vue +920 -0
  99. package/src/components/base/ui/select/SelectDropdown.vue +74 -0
  100. package/src/components/base/ui/select/navigation-mixin.js +54 -0
  101. package/src/components/base/ui/skeleton/index.js +8 -0
  102. package/src/components/base/ui/skeleton/src/img-placeholder.vue +16 -0
  103. package/src/components/base/ui/skeleton/src/index.vue +80 -0
  104. package/src/components/base/ui/skeleton/src/item.vue +22 -0
  105. package/src/components/base/ui/skeleton-item/index.js +8 -0
  106. package/src/components/base/ui/slider/button.vue +238 -0
  107. package/src/components/base/ui/slider/main.vue +427 -0
  108. package/src/components/base/ui/slider/marker.js +18 -0
  109. package/src/components/base/ui/style/alert.scss +147 -0
  110. package/src/components/base/ui/style/animations.scss +65 -0
  111. package/src/components/base/ui/style/autocomplete.scss +81 -0
  112. package/src/components/base/ui/style/backtop.scss +20 -0
  113. package/src/components/base/ui/style/button-group.scss +0 -0
  114. package/src/components/base/ui/style/button.scss +380 -0
  115. package/src/components/base/ui/style/carousel-item.scss +50 -0
  116. package/src/components/base/ui/style/carousel.scss +161 -0
  117. package/src/components/base/ui/style/cascader-panel.scss +120 -0
  118. package/src/components/base/ui/style/cascader.scss +185 -0
  119. package/src/components/base/ui/style/checkbox-button.scss +0 -0
  120. package/src/components/base/ui/style/checkbox-group.scss +0 -0
  121. package/src/components/base/ui/style/checkbox.scss +360 -0
  122. package/src/components/base/ui/style/col.scss +156 -0
  123. package/src/components/base/ui/style/collapse-item.scss +0 -0
  124. package/src/components/base/ui/style/collapse.scss +114 -0
  125. package/src/components/base/ui/style/color-picker.scss +387 -0
  126. package/src/components/base/ui/style/config.scss +4 -0
  127. package/src/components/base/ui/style/date-picker/date-picker.scss +97 -0
  128. package/src/components/base/ui/style/date-picker/date-range-picker.scss +101 -0
  129. package/src/components/base/ui/style/date-picker/date-table.scss +151 -0
  130. package/src/components/base/ui/style/date-picker/month-table.scss +82 -0
  131. package/src/components/base/ui/style/date-picker/picker-panel.scss +117 -0
  132. package/src/components/base/ui/style/date-picker/picker.scss +197 -0
  133. package/src/components/base/ui/style/date-picker/time-picker.scss +85 -0
  134. package/src/components/base/ui/style/date-picker/time-range-picker.scss +31 -0
  135. package/src/components/base/ui/style/date-picker/time-spinner.scss +110 -0
  136. package/src/components/base/ui/style/date-picker/year-table.scss +51 -0
  137. package/src/components/base/ui/style/date-picker.scss +12 -0
  138. package/src/components/base/ui/style/dialog.scss +123 -0
  139. package/src/components/base/ui/style/divider.scss +47 -0
  140. package/src/components/base/ui/style/drawer.scss +218 -0
  141. package/src/components/base/ui/style/dropdown-item.scss +0 -0
  142. package/src/components/base/ui/style/dropdown-menu.scss +0 -0
  143. package/src/components/base/ui/style/dropdown.scss +185 -0
  144. package/src/components/base/ui/style/form-item.scss +0 -0
  145. package/src/components/base/ui/style/form.scss +203 -0
  146. package/src/components/base/ui/style/function.scss +43 -0
  147. package/src/components/base/ui/style/icon.scss +1167 -0
  148. package/src/components/base/ui/style/image.scss +184 -0
  149. package/src/components/base/ui/style/index.scss +57 -0
  150. package/src/components/base/ui/style/input-number.scss +187 -0
  151. package/src/components/base/ui/style/input.scss +477 -0
  152. package/src/components/base/ui/style/menu-item-group.scss +0 -0
  153. package/src/components/base/ui/style/menu-item.scss +0 -0
  154. package/src/components/base/ui/style/menu.scss +294 -0
  155. package/src/components/base/ui/style/message-box.scss +231 -0
  156. package/src/components/base/ui/style/message.scss +120 -0
  157. package/src/components/base/ui/style/mixins.scss +196 -0
  158. package/src/components/base/ui/style/option-group.scss +42 -0
  159. package/src/components/base/ui/style/option.scss +36 -0
  160. package/src/components/base/ui/style/pagination.scss +295 -0
  161. package/src/components/base/ui/style/popover.scss +40 -0
  162. package/src/components/base/ui/style/popper.scss +102 -0
  163. package/src/components/base/ui/style/popup.scss +42 -0
  164. package/src/components/base/ui/style/progress.scss +141 -0
  165. package/src/components/base/ui/style/radio-button.scss +113 -0
  166. package/src/components/base/ui/style/radio-group.scss +9 -0
  167. package/src/components/base/ui/style/radio.scss +203 -0
  168. package/src/components/base/ui/style/ripple.scss +35 -0
  169. package/src/components/base/ui/style/row.scss +39 -0
  170. package/src/components/base/ui/style/scrollbar.scss +75 -0
  171. package/src/components/base/ui/style/select-dropdown.scss +59 -0
  172. package/src/components/base/ui/style/select.scss +154 -0
  173. package/src/components/base/ui/style/skeleton-item.scss +84 -0
  174. package/src/components/base/ui/style/skeleton.scss +40 -0
  175. package/src/components/base/ui/style/slider.scss +250 -0
  176. package/src/components/base/ui/style/switch.scss +116 -0
  177. package/src/components/base/ui/style/tabs.scss +602 -0
  178. package/src/components/base/ui/style/tag.scss +174 -0
  179. package/src/components/base/ui/style/tooltip.scss +146 -0
  180. package/src/components/base/ui/style/transition.scss +138 -0
  181. package/src/components/base/ui/style/upload.scss +603 -0
  182. package/src/components/base/ui/style/utils.scss +39 -0
  183. package/src/components/base/ui/style/var.scss +1007 -0
  184. package/src/components/base/ui/switch/index.vue +174 -0
  185. package/src/components/base/ui/tabs/tab-bar.vue +57 -0
  186. package/src/components/base/ui/tabs/tab-nav.vue +294 -0
  187. package/src/components/base/ui/tabs/tab-pane.vue +56 -0
  188. package/src/components/base/ui/tabs/tabs.vue +191 -0
  189. package/src/components/base/ui/tag/Tag.vue +60 -0
  190. package/src/components/base/ui/tooltip/tooltip.jsx +234 -0
  191. package/src/components/base/ui/upload/Index.vue +340 -0
  192. package/src/components/base/ui/upload/Upload.vue +216 -0
  193. package/src/components/base/ui/upload/UploadDragger.vue +70 -0
  194. package/src/components/base/ui/upload/UploadList.vue +100 -0
  195. package/src/components/base/ui/upload/ajax.js +85 -0
  196. package/src/components/base/ui/util/aria-dialog.js +90 -0
  197. package/src/components/base/ui/util/aria-utils.js +122 -0
  198. package/src/components/base/ui/util/clickoutside.js +76 -0
  199. package/src/components/base/ui/util/date-util.js +292 -0
  200. package/src/components/base/ui/util/date.js +370 -0
  201. package/src/components/base/ui/util/debounce.js +21 -0
  202. package/src/components/base/ui/util/deepmerge.js +100 -0
  203. package/src/components/base/ui/util/dom.js +215 -0
  204. package/src/components/base/ui/util/index.js +262 -0
  205. package/src/components/base/ui/util/menu/aria-menubar.js +14 -0
  206. package/src/components/base/ui/util/menu/aria-menuitem.js +49 -0
  207. package/src/components/base/ui/util/menu/aria-submenu.js +59 -0
  208. package/src/components/base/ui/util/merge.js +14 -0
  209. package/src/components/base/ui/util/popper.js +1235 -0
  210. package/src/components/base/ui/util/popup/index.js +218 -0
  211. package/src/components/base/ui/util/popup/popup-manager.js +194 -0
  212. package/src/components/base/ui/util/resize-events.js +32 -0
  213. package/src/components/base/ui/util/scroll-into-view.js +27 -0
  214. package/src/components/base/ui/util/scrollbar-width.js +29 -0
  215. package/src/components/base/ui/util/shared.js +7 -0
  216. package/src/components/base/ui/util/throttle.js +91 -0
  217. package/src/components/base/ui/util/types.js +24 -0
  218. package/src/components/base/ui/util/vdom.js +5 -0
  219. package/src/components/base/ui/util/vue-popper.js +188 -0
  220. package/src/components/normal/AggsItemH.vue +139 -0
  221. package/src/index.js +10 -0
  222. package/src/static/base-icons.ttf +0 -0
  223. package/src/static/base-icons.woff +0 -0
  224. package/src/static/label_bg.png +0 -0
  225. package/src/static/term-label-bg.png +0 -0
  226. package/src/style/app-article.scss +698 -0
  227. package/src/style/app-comment.scss +259 -0
  228. package/src/style/app-recommend.scss +48 -0
  229. package/src/style/app-richtext.scss +176 -0
  230. package/src/style/index.scss +523 -0
  231. package/vite.config.js +38 -0
@@ -0,0 +1,650 @@
1
+ <template>
2
+ <div
3
+ ref="reference"
4
+ :class="[
5
+ 'base-cascader',
6
+ realSize && `base-cascader--${realSize}`,
7
+ { 'is-disabled': isDisabled }
8
+ ]"
9
+ v-clickoutside="() => toggleDropDownVisible(false)"
10
+ @mouseenter="inputHover = true"
11
+ @mouseleave="inputHover = false"
12
+ @click="() => toggleDropDownVisible(readonly ? undefined : true)"
13
+ @keydown="handleKeyDown">
14
+
15
+ <base-input
16
+ ref="input"
17
+ v-model="multiple ? presentText : inputValue"
18
+ :size="realSize"
19
+ :placeholder="placeholder"
20
+ :readonly="readonly"
21
+ :disabled="isDisabled"
22
+ :validate-event="false"
23
+ :class="{ 'is-focus': dropDownVisible }"
24
+ @focus="handleFocus"
25
+ @blur="handleBlur"
26
+ @input="handleInput">
27
+ <template slot="suffix">
28
+ <i
29
+ v-if="clearBtnVisible"
30
+ key="clear"
31
+ class="base-input__icon base-icon-circle-close"
32
+ @click.stop="handleClear"></i>
33
+ <i
34
+ v-else
35
+ key="arrow-down"
36
+ :class="[
37
+ 'base-input__icon',
38
+ 'base-icon-arrow-down',
39
+ dropDownVisible && 'is-reverse'
40
+ ]"
41
+ @click.stop="toggleDropDownVisible()"></i>
42
+ </template>
43
+ </base-input>
44
+
45
+ <div v-if="multiple" class="base-cascader__tags">
46
+ <base-tag
47
+ v-for="(tag, index) in presentTags"
48
+ :key="tag.key"
49
+ type="info"
50
+ :size="tagSize"
51
+ :hit="tag.hitState"
52
+ :closable="tag.closable"
53
+ disable-transitions
54
+ @close="deleteTag(index)">
55
+ <span>{{ tag.text }}</span>
56
+ </base-tag>
57
+ <input
58
+ v-if="filterable && !isDisabled"
59
+ v-modbase.trim="inputValue"
60
+ type="text"
61
+ class="base-cascader__search-input"
62
+ :placeholder="presentTags.length ? '' : placeholder"
63
+ @input="e => handleInput(inputValue, e)"
64
+ @click.stop="toggleDropDownVisible(true)"
65
+ @keydown.delete="handleDelete">
66
+ </div>
67
+
68
+ <transition name="base-zoom-in-top" @after-leave="handleDropdownLeave">
69
+ <div
70
+ v-show="dropDownVisible"
71
+ ref="popper"
72
+ :class="['base-popper', 'base-cascader__dropdown', popperClass]">
73
+ <base-cascader-panel
74
+ ref="panel"
75
+ v-show="!filtering"
76
+ v-model="checkedValue"
77
+ :options="options"
78
+ :props="config"
79
+ :border="false"
80
+ :render-label="$scopedSlots.default"
81
+ @expand-change="handleExpandChange"
82
+ @close="toggleDropDownVisible(false)"></base-cascader-panel>
83
+ <base-scrollbar
84
+ ref="suggestionPanel"
85
+ v-if="filterable"
86
+ v-show="filtering"
87
+ tag="ul"
88
+ class="base-cascader__suggestion-panel"
89
+ view-class="base-cascader__suggestion-list"
90
+ @keydown.native="handleSuggestionKeyDown">
91
+ <template v-if="suggestions.length">
92
+ <li
93
+ v-for="(item, index) in suggestions"
94
+ :key="item.uid"
95
+ :class="[
96
+ 'base-cascader__suggestion-item',
97
+ item.checked && 'is-checked'
98
+ ]"
99
+ :tabindex="-1"
100
+ @click="handleSuggestionClick(index)">
101
+ <span>{{ item.text }}</span>
102
+ <i v-if="item.checked" class="base-icon-check"></i>
103
+ </li>
104
+ </template>
105
+ <slot v-else name="empty">
106
+ <li class="base-cascader__empty-text">{{ t('base.cascader.noMatch') }}</li>
107
+ </slot>
108
+ </base-scrollbar>
109
+ </div>
110
+ </transition>
111
+ </div>
112
+ </template>
113
+
114
+ <script>
115
+ import Popper from '../util/vue-popper';
116
+ import Clickoutside from '../util/clickoutside';
117
+ import Emitter from '../mixin/emitter';
118
+ import Locale from '../mixin/locale';
119
+ import Migrating from '../mixin/migrating';
120
+ import BaseInput from '../input/Input';
121
+ import BaseTag from '../tag/Tag';
122
+ import BaseScrollbar from '../scrollbar/index';
123
+ import BaseCascaderPanel from '../cascader-panel/cascader-panel';
124
+ import AriaUtils from '../util/aria-utils';
125
+ import { t } from '../locale/index';
126
+ import { isEqual, isEmpty, kebabCase } from '../util/index';
127
+ import { isUndefined, isFunction } from '../util/types';
128
+ import { isDef } from '../util/shared';
129
+ import { addResizeListener, removeResizeListener } from '../util/resize-events';
130
+ import debounce from '../util/debounce';
131
+
132
+ const { keys: KeyCode } = AriaUtils;
133
+ const MigratingProps = {
134
+ expandTrigger: {
135
+ newProp: 'expandTrigger',
136
+ type: String
137
+ },
138
+ changeOnSelect: {
139
+ newProp: 'checkStrictly',
140
+ type: Boolean
141
+ },
142
+ hoverThreshold: {
143
+ newProp: 'hoverThreshold',
144
+ type: Number
145
+ }
146
+ };
147
+
148
+ const PopperMixin = {
149
+ props: {
150
+ placement: {
151
+ type: String,
152
+ default: 'bottom-start'
153
+ },
154
+ appendToBody: Popper.props.appendToBody,
155
+ visibleArrow: {
156
+ type: Boolean,
157
+ default: true
158
+ },
159
+ arrowOffset: Popper.props.arrowOffset,
160
+ offset: Popper.props.offset,
161
+ boundariesPadding: Popper.props.boundariesPadding,
162
+ popperOptions: Popper.props.popperOptions
163
+ },
164
+ methods: Popper.methods,
165
+ data: Popper.data,
166
+ beforeDestroy: Popper.beforeDestroy
167
+ };
168
+
169
+ const InputSizeMap = {
170
+ medium: 36,
171
+ small: 32,
172
+ mini: 28
173
+ };
174
+
175
+ export default {
176
+ name: 'BaseCascader',
177
+
178
+ directives: { Clickoutside },
179
+
180
+ mixins: [PopperMixin, Emitter, Locale, Migrating],
181
+
182
+ inject: {
183
+ baseForm: {
184
+ default: ''
185
+ },
186
+ baseFormItem: {
187
+ default: ''
188
+ }
189
+ },
190
+
191
+ components: {
192
+ BaseInput,
193
+ BaseTag,
194
+ BaseScrollbar,
195
+ BaseCascaderPanel
196
+ },
197
+
198
+ props: {
199
+ value: {},
200
+ options: Array,
201
+ props: Object,
202
+ size: String,
203
+ placeholder: {
204
+ type: String,
205
+ default: () => t('base.cascader.placeholder')
206
+ },
207
+ disabled: Boolean,
208
+ clearable: Boolean,
209
+ filterable: Boolean,
210
+ filterMethod: Function,
211
+ separator: {
212
+ type: String,
213
+ default: ' / '
214
+ },
215
+ showAllLevels: {
216
+ type: Boolean,
217
+ default: true
218
+ },
219
+ collapseTags: Boolean,
220
+ debounce: {
221
+ type: Number,
222
+ default: 300
223
+ },
224
+ beforeFilter: {
225
+ type: Function,
226
+ default: () => (() => {})
227
+ },
228
+ popperClass: String
229
+ },
230
+
231
+ data() {
232
+ return {
233
+ dropDownVisible: false,
234
+ checkedValue: this.value || null,
235
+ inputHover: false,
236
+ inputValue: null,
237
+ presentText: null,
238
+ presentTags: [],
239
+ checkedNodes: [],
240
+ filtering: false,
241
+ suggestions: [],
242
+ inputInitialHeight: 0,
243
+ pressDeleteCount: 0
244
+ };
245
+ },
246
+
247
+ computed: {
248
+ realSize() {
249
+ const _baseFormItemSize = (this.baseFormItem || {}).baseFormItemSize;
250
+ return this.size || _baseFormItemSize || (this.$ELEMENT || {}).size;
251
+ },
252
+ tagSize() {
253
+ return ['small', 'mini'].indexOf(this.realSize) > -1
254
+ ? 'mini'
255
+ : 'small';
256
+ },
257
+ isDisabled() {
258
+ return this.disabled || (this.baseForm || {}).disabled;
259
+ },
260
+ config() {
261
+ const config = this.props || {};
262
+ const { $attrs } = this;
263
+
264
+ Object
265
+ .keys(MigratingProps)
266
+ .forEach(oldProp => {
267
+ const { newProp, type } = MigratingProps[oldProp];
268
+ let oldValue = $attrs[oldProp] || $attrs[kebabCase(oldProp)];
269
+ if (isDef(oldProp) && !isDef(config[newProp])) {
270
+ if (type === Boolean && oldValue === '') {
271
+ oldValue = true;
272
+ }
273
+ config[newProp] = oldValue;
274
+ }
275
+ });
276
+
277
+ return config;
278
+ },
279
+ multiple() {
280
+ return this.config.multiple;
281
+ },
282
+ leafOnly() {
283
+ return !this.config.checkStrictly;
284
+ },
285
+ readonly() {
286
+ return !this.filterable || this.multiple;
287
+ },
288
+ clearBtnVisible() {
289
+ if (!this.clearable || this.isDisabled || this.filtering || !this.inputHover) {
290
+ return false;
291
+ }
292
+
293
+ return this.multiple
294
+ ? !!this.checkedNodes.filter(node => !node.isDisabled).length
295
+ : !!this.presentText;
296
+ },
297
+ panel() {
298
+ return this.$refs.panel;
299
+ }
300
+ },
301
+
302
+ watch: {
303
+ disabled() {
304
+ this.computePresentContent();
305
+ },
306
+ value(val) {
307
+ if (!isEqual(val, this.checkedValue)) {
308
+ this.checkedValue = val;
309
+ this.computePresentContent();
310
+ }
311
+ },
312
+ checkedValue(val) {
313
+ const { value, dropDownVisible } = this;
314
+ const { checkStrictly, multiple } = this.config;
315
+
316
+ if (!isEqual(val, value) || isUndefined(value)) {
317
+ this.computePresentContent();
318
+ // hide dropdown when single mode
319
+ if (!multiple && !checkStrictly && dropDownVisible) {
320
+ this.toggleDropDownVisible(false);
321
+ }
322
+
323
+ this.$emit('input', val);
324
+ this.$emit('change', val);
325
+ this.dispatch('BaseFormItem', 'base.form.change', [val]);
326
+ }
327
+ },
328
+ options: {
329
+ handler: function() {
330
+ this.$nextTick(this.computePresentContent);
331
+ },
332
+ deep: true
333
+ },
334
+ presentText(val) {
335
+ this.inputValue = val;
336
+ },
337
+ presentTags(val, oldVal) {
338
+ if (this.multiple && (val.length || oldVal.length)) {
339
+ this.$nextTick(this.updateStyle);
340
+ }
341
+ },
342
+ filtering(val) {
343
+ this.$nextTick(this.updatePopper);
344
+ }
345
+ },
346
+
347
+ mounted() {
348
+ const { input } = this.$refs;
349
+ if (input && input.$el) {
350
+ this.inputInitialHeight = input.$el.offsetHeight || InputSizeMap[this.realSize] || 40;
351
+ }
352
+
353
+ if (!isEmpty(this.value)) {
354
+ this.computePresentContent();
355
+ }
356
+
357
+ this.filterHandler = debounce(this.debounce, () => {
358
+ const { inputValue } = this;
359
+
360
+ if (!inputValue) {
361
+ this.filtering = false;
362
+ return;
363
+ }
364
+
365
+ const before = this.beforeFilter(inputValue);
366
+ if (before && before.then) {
367
+ before.then(this.getSuggestions);
368
+ } else if (before !== false) {
369
+ this.getSuggestions();
370
+ } else {
371
+ this.filtering = false;
372
+ }
373
+ });
374
+
375
+ addResizeListener(this.$el, this.updateStyle);
376
+ },
377
+
378
+ beforeDestroy() {
379
+ removeResizeListener(this.$el, this.updateStyle);
380
+ },
381
+
382
+ methods: {
383
+ getMigratingConfig() {
384
+ return {
385
+ props: {
386
+ 'expand-trigger': 'expand-trigger is removed, use `props.expandTrigger` instead.',
387
+ 'change-on-select': 'change-on-select is removed, use `props.checkStrictly` instead.',
388
+ 'hover-threshold': 'hover-threshold is removed, use `props.hoverThreshold` instead'
389
+ },
390
+ events: {
391
+ 'active-item-change': 'active-item-change is renamed to expand-change'
392
+ }
393
+ };
394
+ },
395
+ toggleDropDownVisible(visible) {
396
+ if (this.isDisabled) return;
397
+
398
+ const { dropDownVisible } = this;
399
+ const { input } = this.$refs;
400
+ visible = isDef(visible) ? visible : !dropDownVisible;
401
+ if (visible !== dropDownVisible) {
402
+ this.dropDownVisible = visible;
403
+ if (visible) {
404
+ this.$nextTick(() => {
405
+ this.updatePopper();
406
+ this.panel.scrollIntoView();
407
+ });
408
+ }
409
+ input.$refs.input.setAttribute('aria-expanded', visible);
410
+ this.$emit('visible-change', visible);
411
+ }
412
+ },
413
+ handleDropdownLeave() {
414
+ this.filtering = false;
415
+ this.inputValue = this.presentText;
416
+ },
417
+ handleKeyDown(event) {
418
+ switch (event.keyCode) {
419
+ case KeyCode.enter:
420
+ this.toggleDropDownVisible();
421
+ break;
422
+ case KeyCode.down:
423
+ this.toggleDropDownVisible(true);
424
+ this.focusFirstNode();
425
+ event.preventDefault();
426
+ break;
427
+ case KeyCode.esc:
428
+ case KeyCode.tab:
429
+ this.toggleDropDownVisible(false);
430
+ break;
431
+ }
432
+ },
433
+ handleFocus(e) {
434
+ this.$emit('focus', e);
435
+ },
436
+ handleBlur(e) {
437
+ this.$emit('blur', e);
438
+ },
439
+ handleInput(val, event) {
440
+ !this.dropDownVisible && this.toggleDropDownVisible(true);
441
+
442
+ if (event && event.isComposing) return;
443
+ if (val) {
444
+ this.filterHandler();
445
+ } else {
446
+ this.filtering = false;
447
+ }
448
+ },
449
+ handleClear() {
450
+ this.presentText = '';
451
+ this.panel.clearCheckedNodes();
452
+ },
453
+ handleExpandChange(value) {
454
+ this.$nextTick(this.updatePopper.bind(this));
455
+ this.$emit('expand-change', value);
456
+ this.$emit('active-item-change', value); // Deprecated
457
+ },
458
+ focusFirstNode() {
459
+ this.$nextTick(() => {
460
+ const { filtering } = this;
461
+ const { popper, suggestionPanel } = this.$refs;
462
+ let firstNode = null;
463
+
464
+ if (filtering && suggestionPanel) {
465
+ firstNode = suggestionPanbase.$el.querySelector('.base-cascader__suggestion-item');
466
+ } else {
467
+ const firstMenu = popper.querySelector('.base-cascader-menu');
468
+ firstNode = firstMenu.querySelector('.base-cascader-node[tabindex="-1"]');
469
+ }
470
+
471
+ if (firstNode) {
472
+ firstNode.focus();
473
+ !filtering && firstNode.click();
474
+ }
475
+ });
476
+ },
477
+ computePresentContent() {
478
+ // nextTick is required, because checked nodes may not change right now
479
+ this.$nextTick(() => {
480
+ if (this.config.multiple) {
481
+ this.computePresentTags();
482
+ this.presentText = this.presentTags.length ? ' ' : null;
483
+ } else {
484
+ this.computePresentText();
485
+ }
486
+ });
487
+ },
488
+ computePresentText() {
489
+ const { checkedValue, config } = this;
490
+ if (!isEmpty(checkedValue)) {
491
+ const node = this.panel.getNodeByValue(checkedValue);
492
+ if (node && (config.checkStrictly || node.isLeaf)) {
493
+ this.presentText = node.getText(this.showAllLevels, this.separator);
494
+ return;
495
+ }
496
+ }
497
+ this.presentText = null;
498
+ },
499
+ computePresentTags() {
500
+ const { isDisabled, leafOnly, showAllLevels, separator, collapseTags } = this;
501
+ const checkedNodes = this.getCheckedNodes(leafOnly);
502
+ const tags = [];
503
+
504
+ const genTag = node => ({
505
+ node,
506
+ key: node.uid,
507
+ text: node.getText(showAllLevels, separator),
508
+ hitState: false,
509
+ closable: !isDisabled && !node.isDisabled
510
+ });
511
+
512
+ if (checkedNodes.length) {
513
+ const [first, ...rest] = checkedNodes;
514
+ const restCount = rest.length;
515
+ tags.push(genTag(first));
516
+
517
+ if (restCount) {
518
+ if (collapseTags) {
519
+ tags.push({
520
+ key: -1,
521
+ text: `+ ${restCount}`,
522
+ closable: false
523
+ });
524
+ } else {
525
+ rest.forEach(node => tags.push(genTag(node)));
526
+ }
527
+ }
528
+ }
529
+
530
+ this.checkedNodes = checkedNodes;
531
+ this.presentTags = tags;
532
+ },
533
+ getSuggestions() {
534
+ let { filterMethod } = this;
535
+
536
+ if (!isFunction(filterMethod)) {
537
+ filterMethod = (node, keyword) => node.text.includes(keyword);
538
+ }
539
+
540
+ const suggestions = this.panel.getFlattedNodes(this.leafOnly)
541
+ .filter(node => {
542
+ if (node.isDisabled) return false;
543
+ node.text = node.getText(this.showAllLevels, this.separator) || '';
544
+ return filterMethod(node, this.inputValue);
545
+ });
546
+
547
+ if (this.multiple) {
548
+ this.presentTags.forEach(tag => {
549
+ tag.hitState = false;
550
+ });
551
+ } else {
552
+ suggestions.forEach(node => {
553
+ node.checked = isEqual(this.checkedValue, node.getValueByOption());
554
+ });
555
+ }
556
+
557
+ this.filtering = true;
558
+ this.suggestions = suggestions;
559
+ this.$nextTick(this.updatePopper);
560
+ },
561
+ handleSuggestionKeyDown(event) {
562
+ const { keyCode, target } = event;
563
+ switch (keyCode) {
564
+ case KeyCode.enter:
565
+ target.click();
566
+ break;
567
+ case KeyCode.up:
568
+ const prev = target.previousElementSibling;
569
+ prev && prev.focus();
570
+ break;
571
+ case KeyCode.down:
572
+ const next = target.nextElementSibling;
573
+ next && next.focus();
574
+ break;
575
+ case KeyCode.esc:
576
+ case KeyCode.tab:
577
+ this.toggleDropDownVisible(false);
578
+ break;
579
+ }
580
+ },
581
+ handleDelete() {
582
+ const { inputValue, pressDeleteCount, presentTags } = this;
583
+ const lastIndex = presentTags.length - 1;
584
+ const lastTag = presentTags[lastIndex];
585
+ this.pressDeleteCount = inputValue ? 0 : pressDeleteCount + 1;
586
+
587
+ if (!lastTag) return;
588
+
589
+ if (this.pressDeleteCount) {
590
+ if (lastTag.hitState) {
591
+ this.deleteTag(lastIndex);
592
+ } else {
593
+ lastTag.hitState = true;
594
+ }
595
+ }
596
+ },
597
+ handleSuggestionClick(index) {
598
+ const { multiple } = this;
599
+ const targetNode = this.suggestions[index];
600
+
601
+ if (multiple) {
602
+ const { checked } = targetNode;
603
+ targetNode.doCheck(!checked);
604
+ this.panel.calculateMultiCheckedValue();
605
+ } else {
606
+ this.checkedValue = targetNode.getValueByOption();
607
+ this.toggleDropDownVisible(false);
608
+ }
609
+ },
610
+ deleteTag(index) {
611
+ const { checkedValue } = this;
612
+ const val = checkedValue[index];
613
+ this.checkedValue = checkedValue.filter((n, i) => i !== index);
614
+ this.$emit('remove-tag', val);
615
+ },
616
+ updateStyle() {
617
+ const { $el, inputInitialHeight } = this;
618
+ if (this.$isServer || !$el) return;
619
+
620
+ const { suggestionPanel } = this.$refs;
621
+ const inputInner = $el.querySelector('.base-input__inner');
622
+
623
+ if (!inputInner) return;
624
+
625
+ const tags = $el.querySelector('.base-cascader__tags');
626
+ let suggestionPanelEl = null;
627
+
628
+ if (suggestionPanel && (suggestionPanelEl = suggestionPanbase.$el)) {
629
+ const suggestionList = suggestionPanelEl.querySelector('.base-cascader__suggestion-list');
630
+ suggestionList.style.minWidth = inputInner.offsetWidth + 'px';
631
+ }
632
+
633
+ if (tags) {
634
+ const { offsetHeight } = tags;
635
+ const height = Math.max(offsetHeight + 6, inputInitialHeight) + 'px';
636
+ inputInner.style.height = height;
637
+ this.updatePopper();
638
+ }
639
+ },
640
+
641
+ /**
642
+ * public methods
643
+ */
644
+ getCheckedNodes(leafOnly) {
645
+ return this.panel.getCheckedNodes(leafOnly);
646
+ }
647
+ }
648
+ };
649
+ </script>
650
+