@zkwq/business 0.0.4 → 0.0.6

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 (227) hide show
  1. package/package.json +2 -2
  2. package/src/components/base/ui/alert/Alert.vue +0 -94
  3. package/src/components/base/ui/autocomplete/autocomplete-suggestions.vue +0 -77
  4. package/src/components/base/ui/autocomplete/autocomplete.vue +0 -305
  5. package/src/components/base/ui/backtop/main.vue +0 -112
  6. package/src/components/base/ui/button/Button.vue +0 -84
  7. package/src/components/base/ui/button/ButtonGroup.vue +0 -10
  8. package/src/components/base/ui/carousel/Carousel.vue +0 -304
  9. package/src/components/base/ui/carousel/CarouselItem.vue +0 -137
  10. package/src/components/base/ui/cascader/cascader.vue +0 -650
  11. package/src/components/base/ui/cascader-panel/cascader-menu.vue +0 -138
  12. package/src/components/base/ui/cascader-panel/cascader-node.vue +0 -246
  13. package/src/components/base/ui/cascader-panel/cascader-panel.vue +0 -382
  14. package/src/components/base/ui/cascader-panel/node.js +0 -166
  15. package/src/components/base/ui/cascader-panel/store.js +0 -62
  16. package/src/components/base/ui/checkbox/checkbox-button.vue +0 -199
  17. package/src/components/base/ui/checkbox/checkbox-group.vue +0 -48
  18. package/src/components/base/ui/checkbox/checkbox.vue +0 -222
  19. package/src/components/base/ui/col/col.js +0 -71
  20. package/src/components/base/ui/collapse/collapse-item.vue +0 -180
  21. package/src/components/base/ui/collapse/collapse.vue +0 -73
  22. package/src/components/base/ui/color-picker/color.js +0 -317
  23. package/src/components/base/ui/color-picker/components/alpha-slider.vue +0 -132
  24. package/src/components/base/ui/color-picker/components/hue-slider.vue +0 -123
  25. package/src/components/base/ui/color-picker/components/picker-dropdown.vue +0 -119
  26. package/src/components/base/ui/color-picker/components/predefine.vue +0 -61
  27. package/src/components/base/ui/color-picker/components/sv-panel.vue +0 -100
  28. package/src/components/base/ui/color-picker/draggable.js +0 -36
  29. package/src/components/base/ui/color-picker/index.js +0 -2
  30. package/src/components/base/ui/color-picker/main.vue +0 -188
  31. package/src/components/base/ui/date-picker/basic/date-table.vue +0 -441
  32. package/src/components/base/ui/date-picker/basic/month-table.vue +0 -254
  33. package/src/components/base/ui/date-picker/basic/time-spinner.vue +0 -304
  34. package/src/components/base/ui/date-picker/basic/year-table.vue +0 -101
  35. package/src/components/base/ui/date-picker/panel/date-range.vue +0 -680
  36. package/src/components/base/ui/date-picker/panel/date.vue +0 -597
  37. package/src/components/base/ui/date-picker/panel/month-range.vue +0 -289
  38. package/src/components/base/ui/date-picker/panel/time-range.vue +0 -248
  39. package/src/components/base/ui/date-picker/panel/time-select.vue +0 -178
  40. package/src/components/base/ui/date-picker/panel/time.vue +0 -186
  41. package/src/components/base/ui/date-picker/picker/date-picker.js +0 -43
  42. package/src/components/base/ui/date-picker/picker/time-picker.js +0 -39
  43. package/src/components/base/ui/date-picker/picker/time-select.js +0 -21
  44. package/src/components/base/ui/date-picker/picker.vue +0 -942
  45. package/src/components/base/ui/dialog/Index.vue +0 -212
  46. package/src/components/base/ui/directive/repeat-click.js +0 -24
  47. package/src/components/base/ui/directive/ripple.js +0 -303
  48. package/src/components/base/ui/divider/Divider.vue +0 -37
  49. package/src/components/base/ui/drawer/Drawer.vue +0 -202
  50. package/src/components/base/ui/dropdown/dropdown-item.vue +0 -39
  51. package/src/components/base/ui/dropdown/dropdown-menu.vue +0 -63
  52. package/src/components/base/ui/dropdown/dropdown.vue +0 -308
  53. package/src/components/base/ui/form/Form.vue +0 -167
  54. package/src/components/base/ui/form/FormItem.vue +0 -334
  55. package/src/components/base/ui/form/LabelWrap.vue +0 -69
  56. package/src/components/base/ui/icon/icon.vue +0 -13
  57. package/src/components/base/ui/image/image-viewer.vue +0 -302
  58. package/src/components/base/ui/image/main.vue +0 -248
  59. package/src/components/base/ui/index.js +0 -189
  60. package/src/components/base/ui/input/Input.vue +0 -438
  61. package/src/components/base/ui/input/calcTextareaHeight.js +0 -104
  62. package/src/components/base/ui/input-number/input-number.vue +0 -285
  63. package/src/components/base/ui/locale/format.js +0 -32
  64. package/src/components/base/ui/locale/index.js +0 -48
  65. package/src/components/base/ui/locale/lang/zh-CN.js +0 -120
  66. package/src/components/base/ui/menu/menu-item-group.vue +0 -45
  67. package/src/components/base/ui/menu/menu-item.vue +0 -112
  68. package/src/components/base/ui/menu/menu-mixin.js +0 -44
  69. package/src/components/base/ui/menu/menu.vue +0 -312
  70. package/src/components/base/ui/menu/submenu.vue +0 -408
  71. package/src/components/base/ui/message/index.js +0 -2
  72. package/src/components/base/ui/message/main.js +0 -87
  73. package/src/components/base/ui/message/main.vue +0 -110
  74. package/src/components/base/ui/message-box/main.js +0 -216
  75. package/src/components/base/ui/message-box/main.vue +0 -323
  76. package/src/components/base/ui/mixin/emitter.js +0 -31
  77. package/src/components/base/ui/mixin/focus.js +0 -9
  78. package/src/components/base/ui/mixin/locale.js +0 -9
  79. package/src/components/base/ui/mixin/migrating.js +0 -33
  80. package/src/components/base/ui/pagination/pager.vue +0 -163
  81. package/src/components/base/ui/pagination/pagination.jsx +0 -391
  82. package/src/components/base/ui/popover/directive.js +0 -20
  83. package/src/components/base/ui/popover/index.js +0 -14
  84. package/src/components/base/ui/popover/main.vue +0 -236
  85. package/src/components/base/ui/progress/Progress.vue +0 -227
  86. package/src/components/base/ui/radio/radio-button.vue +0 -114
  87. package/src/components/base/ui/radio/radio-group.vue +0 -111
  88. package/src/components/base/ui/radio/radio.vue +0 -134
  89. package/src/components/base/ui/row/row.js +0 -47
  90. package/src/components/base/ui/scrollbar/bar.jsx +0 -91
  91. package/src/components/base/ui/scrollbar/index.jsx +0 -203
  92. package/src/components/base/ui/scrollbar/util.js +0 -32
  93. package/src/components/base/ui/select/Option.vue +0 -168
  94. package/src/components/base/ui/select/OptionGroup.vue +0 -60
  95. package/src/components/base/ui/select/Select.vue +0 -920
  96. package/src/components/base/ui/select/SelectDropdown.vue +0 -74
  97. package/src/components/base/ui/select/navigation-mixin.js +0 -54
  98. package/src/components/base/ui/skeleton/index.js +0 -8
  99. package/src/components/base/ui/skeleton/src/img-placeholder.vue +0 -16
  100. package/src/components/base/ui/skeleton/src/index.vue +0 -80
  101. package/src/components/base/ui/skeleton/src/item.vue +0 -22
  102. package/src/components/base/ui/skeleton-item/index.js +0 -8
  103. package/src/components/base/ui/slider/button.vue +0 -238
  104. package/src/components/base/ui/slider/main.vue +0 -427
  105. package/src/components/base/ui/slider/marker.js +0 -18
  106. package/src/components/base/ui/style/alert.scss +0 -147
  107. package/src/components/base/ui/style/animations.scss +0 -65
  108. package/src/components/base/ui/style/autocomplete.scss +0 -81
  109. package/src/components/base/ui/style/backtop.scss +0 -20
  110. package/src/components/base/ui/style/button-group.scss +0 -0
  111. package/src/components/base/ui/style/button.scss +0 -380
  112. package/src/components/base/ui/style/carousel-item.scss +0 -50
  113. package/src/components/base/ui/style/carousel.scss +0 -161
  114. package/src/components/base/ui/style/cascader-panel.scss +0 -120
  115. package/src/components/base/ui/style/cascader.scss +0 -185
  116. package/src/components/base/ui/style/checkbox-button.scss +0 -0
  117. package/src/components/base/ui/style/checkbox-group.scss +0 -0
  118. package/src/components/base/ui/style/checkbox.scss +0 -360
  119. package/src/components/base/ui/style/col.scss +0 -156
  120. package/src/components/base/ui/style/collapse-item.scss +0 -0
  121. package/src/components/base/ui/style/collapse.scss +0 -114
  122. package/src/components/base/ui/style/color-picker.scss +0 -387
  123. package/src/components/base/ui/style/config.scss +0 -4
  124. package/src/components/base/ui/style/date-picker/date-picker.scss +0 -97
  125. package/src/components/base/ui/style/date-picker/date-range-picker.scss +0 -101
  126. package/src/components/base/ui/style/date-picker/date-table.scss +0 -151
  127. package/src/components/base/ui/style/date-picker/month-table.scss +0 -82
  128. package/src/components/base/ui/style/date-picker/picker-panel.scss +0 -117
  129. package/src/components/base/ui/style/date-picker/picker.scss +0 -197
  130. package/src/components/base/ui/style/date-picker/time-picker.scss +0 -85
  131. package/src/components/base/ui/style/date-picker/time-range-picker.scss +0 -31
  132. package/src/components/base/ui/style/date-picker/time-spinner.scss +0 -110
  133. package/src/components/base/ui/style/date-picker/year-table.scss +0 -51
  134. package/src/components/base/ui/style/date-picker.scss +0 -12
  135. package/src/components/base/ui/style/dialog.scss +0 -123
  136. package/src/components/base/ui/style/divider.scss +0 -47
  137. package/src/components/base/ui/style/drawer.scss +0 -218
  138. package/src/components/base/ui/style/dropdown-item.scss +0 -0
  139. package/src/components/base/ui/style/dropdown-menu.scss +0 -0
  140. package/src/components/base/ui/style/dropdown.scss +0 -185
  141. package/src/components/base/ui/style/form-item.scss +0 -0
  142. package/src/components/base/ui/style/form.scss +0 -203
  143. package/src/components/base/ui/style/function.scss +0 -43
  144. package/src/components/base/ui/style/icon.scss +0 -1167
  145. package/src/components/base/ui/style/image.scss +0 -184
  146. package/src/components/base/ui/style/index.scss +0 -57
  147. package/src/components/base/ui/style/input-number.scss +0 -187
  148. package/src/components/base/ui/style/input.scss +0 -477
  149. package/src/components/base/ui/style/menu-item-group.scss +0 -0
  150. package/src/components/base/ui/style/menu-item.scss +0 -0
  151. package/src/components/base/ui/style/menu.scss +0 -294
  152. package/src/components/base/ui/style/message-box.scss +0 -231
  153. package/src/components/base/ui/style/message.scss +0 -120
  154. package/src/components/base/ui/style/mixins.scss +0 -196
  155. package/src/components/base/ui/style/option-group.scss +0 -42
  156. package/src/components/base/ui/style/option.scss +0 -36
  157. package/src/components/base/ui/style/pagination.scss +0 -295
  158. package/src/components/base/ui/style/popover.scss +0 -40
  159. package/src/components/base/ui/style/popper.scss +0 -102
  160. package/src/components/base/ui/style/popup.scss +0 -42
  161. package/src/components/base/ui/style/progress.scss +0 -141
  162. package/src/components/base/ui/style/radio-button.scss +0 -113
  163. package/src/components/base/ui/style/radio-group.scss +0 -9
  164. package/src/components/base/ui/style/radio.scss +0 -203
  165. package/src/components/base/ui/style/ripple.scss +0 -35
  166. package/src/components/base/ui/style/row.scss +0 -39
  167. package/src/components/base/ui/style/scrollbar.scss +0 -75
  168. package/src/components/base/ui/style/select-dropdown.scss +0 -59
  169. package/src/components/base/ui/style/select.scss +0 -154
  170. package/src/components/base/ui/style/skeleton-item.scss +0 -84
  171. package/src/components/base/ui/style/skeleton.scss +0 -40
  172. package/src/components/base/ui/style/slider.scss +0 -250
  173. package/src/components/base/ui/style/switch.scss +0 -116
  174. package/src/components/base/ui/style/tabs.scss +0 -602
  175. package/src/components/base/ui/style/tag.scss +0 -174
  176. package/src/components/base/ui/style/tooltip.scss +0 -146
  177. package/src/components/base/ui/style/transition.scss +0 -138
  178. package/src/components/base/ui/style/upload.scss +0 -603
  179. package/src/components/base/ui/style/utils.scss +0 -39
  180. package/src/components/base/ui/style/var.scss +0 -1011
  181. package/src/components/base/ui/switch/index.vue +0 -174
  182. package/src/components/base/ui/tabs/tab-bar.vue +0 -57
  183. package/src/components/base/ui/tabs/tab-nav.vue +0 -294
  184. package/src/components/base/ui/tabs/tab-pane.vue +0 -56
  185. package/src/components/base/ui/tabs/tabs.vue +0 -191
  186. package/src/components/base/ui/tag/Tag.vue +0 -60
  187. package/src/components/base/ui/tooltip/tooltip.jsx +0 -234
  188. package/src/components/base/ui/upload/Index.vue +0 -340
  189. package/src/components/base/ui/upload/Upload.vue +0 -216
  190. package/src/components/base/ui/upload/UploadDragger.vue +0 -70
  191. package/src/components/base/ui/upload/UploadList.vue +0 -100
  192. package/src/components/base/ui/upload/ajax.js +0 -85
  193. package/src/components/base/ui/util/aria-dialog.js +0 -90
  194. package/src/components/base/ui/util/aria-utils.js +0 -122
  195. package/src/components/base/ui/util/clickoutside.js +0 -76
  196. package/src/components/base/ui/util/date-util.js +0 -292
  197. package/src/components/base/ui/util/date.js +0 -355
  198. package/src/components/base/ui/util/debounce.js +0 -21
  199. package/src/components/base/ui/util/deepmerge.js +0 -100
  200. package/src/components/base/ui/util/dom.js +0 -215
  201. package/src/components/base/ui/util/index.js +0 -262
  202. package/src/components/base/ui/util/menu/aria-menubar.js +0 -14
  203. package/src/components/base/ui/util/menu/aria-menuitem.js +0 -49
  204. package/src/components/base/ui/util/menu/aria-submenu.js +0 -59
  205. package/src/components/base/ui/util/merge.js +0 -14
  206. package/src/components/base/ui/util/popper.js +0 -1235
  207. package/src/components/base/ui/util/popup/index.js +0 -218
  208. package/src/components/base/ui/util/popup/popup-manager.js +0 -194
  209. package/src/components/base/ui/util/resize-events.js +0 -32
  210. package/src/components/base/ui/util/scroll-into-view.js +0 -27
  211. package/src/components/base/ui/util/scrollbar-width.js +0 -29
  212. package/src/components/base/ui/util/shared.js +0 -7
  213. package/src/components/base/ui/util/throttle.js +0 -91
  214. package/src/components/base/ui/util/types.js +0 -24
  215. package/src/components/base/ui/util/vdom.js +0 -5
  216. package/src/components/base/ui/util/vue-popper.js +0 -188
  217. package/src/components/normal/AggsItemH.vue +0 -145
  218. package/src/index.js +0 -10
  219. package/src/static/base-icons.ttf +0 -0
  220. package/src/static/base-icons.woff +0 -0
  221. package/src/static/label_bg.png +0 -0
  222. package/src/static/term-label-bg.png +0 -0
  223. package/src/style/app-article.scss +0 -698
  224. package/src/style/app-comment.scss +0 -259
  225. package/src/style/app-recommend.scss +0 -48
  226. package/src/style/app-richtext.scss +0 -176
  227. package/src/style/index.scss +0 -523
@@ -1,202 +0,0 @@
1
- <template>
2
- <transition
3
- name="base-drawer-fade"
4
- @after-enter="afterEnter"
5
- @after-leave="afterLeave">
6
- <div
7
- class="base-drawer__wrapper"
8
- tabindex="-1"
9
- v-show="visible">
10
- <div
11
- class="base-drawer__container"
12
- :class="visible && 'base-drawer__open'"
13
- @click.self="handleWrapperClick"
14
- role="document"
15
- tabindex="-1">
16
- <div
17
- aria-modal="true"
18
- aria-labelledby="base-drawer__title"
19
- :aria-label="title"
20
- class="base-drawer"
21
- :class="[direction, customClass]"
22
- :style="isHorizontal ? `width: ${size}` : `height: ${size}`"
23
- ref="drawer"
24
- role="dialog"
25
- tabindex="-1"
26
- >
27
- <header class="base-drawer__header" id="base-drawer__title" v-if="withHeader">
28
- <slot name="title">
29
- <span role="heading" tabindex="0">{{ title }}</span>
30
- </slot>
31
- <slot name="actions"></slot>
32
- <button
33
- :aria-label="`close ${title || 'drawer'}`"
34
- class="base-drawer__close-btn"
35
- type="button"
36
- v-if="showClose"
37
- @click="closeDrawer">
38
- <i class="base-dialog__close base-icon base-icon-close"></i>
39
- </button>
40
- </header>
41
- <base-scrollbar class="App__scroll">
42
- <section class="base-drawer__body" v-if="rendered">
43
- <slot></slot>
44
- </section>
45
- </base-scrollbar>
46
- </div>
47
- </div>
48
- </div>
49
- </transition>
50
- </template>
51
-
52
- <script>
53
- import Popup from '../util/popup'
54
- import emitter from '../mixin/emitter'
55
- import Utils from '../util/aria-utils'
56
- import BaseScrollbar from '../scrollbar'
57
- export default {
58
- name: 'BaseDrawer',
59
- components: {BaseScrollbar},
60
- mixins: [Popup, emitter],
61
- props: {
62
- appendToBody: {
63
- type: Boolean,
64
- default: false
65
- },
66
- beforeClose: {
67
- type: Function
68
- },
69
- customClass: {
70
- type: String,
71
- default: ''
72
- },
73
- closeOnPressEscape: {
74
- type: Boolean,
75
- default: true
76
- },
77
- destroyOnClose: {
78
- type: Boolean,
79
- default: false
80
- },
81
- modal: {
82
- type: Boolean,
83
- default: true
84
- },
85
- direction: {
86
- type: String,
87
- default: 'rtl',
88
- validator(val) {
89
- return ['ltr', 'rtl', 'ttb', 'btt'].indexOf(val) !== -1
90
- }
91
- },
92
- modalAppendToBody: {
93
- type: Boolean,
94
- default: true
95
- },
96
- showClose: {
97
- type: Boolean,
98
- default: true
99
- },
100
- size: {
101
- type: String,
102
- default: '30%'
103
- },
104
- title: {
105
- type: String,
106
- default: ''
107
- },
108
- visible: {
109
- type: Boolean
110
- },
111
- wrapperClosable: {
112
- type: Boolean,
113
- default: true
114
- },
115
- withHeader: {
116
- type: Boolean,
117
- default: true
118
- }
119
- },
120
- computed: {
121
- isHorizontal () {
122
- return this.direction === 'rtl' || this.direction === 'ltr'
123
- }
124
- },
125
- data () {
126
- return {
127
- closed: false,
128
- prevActiveElement: null
129
- }
130
- },
131
- watch: {
132
- visible (val) {
133
- if (val) {
134
- this.closed = false
135
- this.$emit('open')
136
- if (this.appendToBody) {
137
- document.body.appendChild(this.$el)
138
- }
139
- this.prevActiveElement = document.activeElement
140
- this.$nextTick(() => {
141
- Utils.focusFirstDescendant(this.$refs.drawer)
142
- })
143
- } else {
144
- if (!this.closed) this.$emit('close')
145
- this.$nextTick(() => {
146
- if (this.prevActiveElement) {
147
- this.prevActiveElement.focus()
148
- }
149
- })
150
- }
151
- }
152
- },
153
- methods: {
154
- afterEnter () {
155
- this.$emit('opened')
156
- },
157
- afterLeave () {
158
- this.$emit('closed')
159
- },
160
- hide (cancel) {
161
- if (cancel !== false) {
162
- this.$emit('update:visible', false)
163
- this.$emit('close')
164
- if (this.destroyOnClose === true) {
165
- this.rendered = false
166
- }
167
- this.closed = true
168
- }
169
- },
170
- handleWrapperClick () {
171
- if (this.wrapperClosable) {
172
- this.closeDrawer()
173
- }
174
- },
175
- closeDrawer () {
176
- if (typeof this.beforeClose === 'function') {
177
- this.beforeClose(this.hide)
178
- } else {
179
- this.hide()
180
- }
181
- },
182
- handleClose () {
183
- // This method here will be called by PopupManger, when the `closeOnPressEscape` was set to true
184
- // pressing `ESC` will call this method, and also close the drawer.
185
- // This method also calls `beforeClose` if there was one.
186
- this.closeDrawer()
187
- }
188
- },
189
- mounted () {
190
- if (this.visible) {
191
- this.rendered = true
192
- this.open()
193
- }
194
- },
195
- destroyed () {
196
- // if appendToBody is true, remove DOM node after destroy
197
- if (this.appendToBody && this.$el && this.$el.parentNode) {
198
- this.$el.parentNode.removeChild(this.$el)
199
- }
200
- }
201
- }
202
- </script>
@@ -1,39 +0,0 @@
1
- <template>
2
- <li
3
- class="base-dropdown-menu__item"
4
- :class="{
5
- 'is-disabled': disabled,
6
- 'base-dropdown-menu__item--divided': divided
7
- }"
8
- @click="handleClick"
9
- :aria-disabled="disabled"
10
- :tabindex="disabled ? null : -1"
11
- v-ripple
12
- >
13
- <i :class="icon" v-if="icon"></i>
14
- <slot></slot>
15
- </li>
16
- </template>
17
- <script>
18
- import Emitter from '../mixin/emitter'
19
- import Ripple from '../directive/ripple'
20
- export default {
21
- name: 'BaseDropdownItem',
22
- mixins: [Emitter],
23
- directives: {
24
- Ripple
25
- },
26
- props: {
27
- command: {},
28
- disabled: Boolean,
29
- divided: Boolean,
30
- icon: String
31
- },
32
-
33
- methods: {
34
- handleClick(e) {
35
- this.dispatch('BaseDropdown', 'menu-item-click', [this.command, this])
36
- }
37
- }
38
- }
39
- </script>
@@ -1,63 +0,0 @@
1
- <template>
2
- <transition name="base-slide-y" @after-leave="doDestroy">
3
- <ul class="base-dropdown-menu base-popper" :class="[size && `base-dropdown-menu--${size}`]" v-show="showPopper">
4
- <slot></slot>
5
- </ul>
6
- </transition>
7
- </template>
8
- <script>
9
- import Popper from '../util/vue-popper'
10
-
11
- export default {
12
- name: 'BaseDropdownMenu',
13
-
14
- componentName: 'BaseDropdownMenu',
15
-
16
- mixins: [Popper],
17
-
18
- props: {
19
- visibleArrow: {
20
- type: Boolean,
21
- default: true
22
- },
23
- arrowOffset: {
24
- type: Number,
25
- default: 0
26
- }
27
- },
28
-
29
- data() {
30
- return {
31
- size: this.dropdown.dropdownSize
32
- }
33
- },
34
-
35
- inject: ['dropdown'],
36
-
37
- created() {
38
- this.$on('updatePopper', () => {
39
- if (this.showPopper) this.updatePopper()
40
- })
41
- this.$on('visible', val => {
42
- this.showPopper = val
43
- })
44
- },
45
-
46
- mounted() {
47
- this.dropdown.popperElm = this.popperElm = this.$el
48
- this.referenceElm = this.dropdown.$el
49
- // compatible with 2.6 new v-slot syntax
50
- // issue link https://github.com/ElemeFE/element/issues/14345
51
- this.dropdown.initDomOperation()
52
- },
53
-
54
- watch: {
55
- 'dropdown.placement': {
56
- immediate: true,
57
- handler(val) {
58
- this.currentPlacement = val
59
- }
60
- }
61
- }
62
- }
63
- </script>
@@ -1,308 +0,0 @@
1
- <script lang="jsx" type="text/jsx">
2
- import Clickoutside from '../util/clickoutside'
3
- import Emitter from '../mixin/emitter'
4
- import Migrating from '../mixin/migrating'
5
- import BaseButton from '../button/Button'
6
- import BaseButtonGroup from '../button/ButtonGroup'
7
- import { generateId } from '../util'
8
-
9
- export default {
10
- name: 'BaseDropdown',
11
-
12
- componentName: 'BaseDropdown',
13
-
14
- mixins: [Emitter, Migrating],
15
-
16
- directives: { Clickoutside },
17
-
18
- components: {
19
- BaseButton,
20
- BaseButtonGroup
21
- },
22
-
23
- provide() {
24
- return {
25
- dropdown: this
26
- }
27
- },
28
-
29
- props: {
30
- trigger: {
31
- type: String,
32
- default: 'hover'
33
- },
34
- type: String,
35
- size: {
36
- type: String,
37
- default: ''
38
- },
39
- splitButton: Boolean,
40
- hideOnClick: {
41
- type: Boolean,
42
- default: true
43
- },
44
- placement: {
45
- type: String,
46
- default: 'bottom-end'
47
- },
48
- visibleArrow: {
49
- default: true
50
- },
51
- showTimeout: {
52
- type: Number,
53
- default: 150
54
- },
55
- hideTimeout: {
56
- type: Number,
57
- default: 150
58
- },
59
- tabindex: {
60
- type: Number,
61
- default: 0
62
- }
63
- },
64
-
65
- data() {
66
- return {
67
- timeout: null,
68
- visible: false,
69
- triggerElm: null,
70
- menuItems: null,
71
- menuItemsArray: null,
72
- dropdownElm: null,
73
- focusing: false,
74
- listId: `dropdown-menu-${generateId()}`
75
- }
76
- },
77
-
78
- computed: {
79
- dropdownSize() {
80
- return this.size || (this.$ELEMENT || {}).size
81
- }
82
- },
83
-
84
- mounted() {
85
- this.$on('menu-item-click', this.handleMenuItemClick)
86
- },
87
-
88
- watch: {
89
- visible (val) {
90
- this.broadcast('BaseDropdownMenu', 'visible', val)
91
- this.$emit('visible-change', val)
92
- },
93
- focusing (val) {
94
- const selfDefine = this.$el.querySelector('.base-dropdown-selfdefine')
95
- if (selfDefine) { // 自定义
96
- if (val) {
97
- selfDefine.className += ' focusing'
98
- } else {
99
- selfDefine.className = selfDefine.className.replace('focusing', '')
100
- }
101
- }
102
- }
103
- },
104
-
105
- methods: {
106
- getMigratingConfig() {
107
- return {
108
- props: {
109
- 'menu-align': 'menu-align is renamed to placement.'
110
- }
111
- }
112
- },
113
- show() {
114
- if (this.triggerElm.disabled) return
115
- clearTimeout(this.timeout)
116
- this.timeout = setTimeout(() => {
117
- this.visible = true
118
- }, this.trigger === 'click' ? 0 : this.showTimeout)
119
- },
120
- hide() {
121
- if (this.triggerElm.disabled) return
122
- this.removeTabindex()
123
- if (this.tabindex >= 0) {
124
- this.resetTabindex(this.triggerElm)
125
- }
126
- clearTimeout(this.timeout)
127
- this.timeout = setTimeout(() => {
128
- this.visible = false
129
- }, this.trigger === 'click' ? 0 : this.hideTimeout)
130
- },
131
- handleClick() {
132
- if (this.triggerElm.disabled) return
133
- if (this.visible) {
134
- this.hide()
135
- } else {
136
- this.show()
137
- }
138
- },
139
- handleTriggerKeyDown(ev) {
140
- const keyCode = ev.keyCode
141
- if ([38, 40].indexOf(keyCode) > -1) { // up/down
142
- this.removeTabindex()
143
- this.resetTabindex(this.menuItems[0])
144
- this.menuItems[0].focus()
145
- ev.preventDefault()
146
- ev.stopPropagation()
147
- } else if (keyCode === 13) { // space enter选中
148
- this.handleClick()
149
- } else if ([9, 27].indexOf(keyCode) > -1) { // tab || esc
150
- this.hide()
151
- }
152
- },
153
- handleItemKeyDown(ev) {
154
- const keyCode = ev.keyCode
155
- const target = ev.target
156
- const currentIndex = this.menuItemsArray.indexOf(target)
157
- const max = this.menuItemsArray.length - 1
158
- let nextIndex
159
- if ([38, 40].indexOf(keyCode) > -1) { // up/down
160
- if (keyCode === 38) { // up
161
- nextIndex = currentIndex !== 0 ? currentIndex - 1 : 0
162
- } else { // down
163
- nextIndex = currentIndex < max ? currentIndex + 1 : max
164
- }
165
- this.removeTabindex()
166
- this.resetTabindex(this.menuItems[nextIndex])
167
- this.menuItems[nextIndex].focus()
168
- ev.preventDefault()
169
- ev.stopPropagation()
170
- } else if (keyCode === 13) { // enter选中
171
- this.triggerElmFocus()
172
- target.click()
173
- if (this.hideOnClick) { // click关闭
174
- this.visible = false
175
- }
176
- } else if ([9, 27].indexOf(keyCode) > -1) { // tab // esc
177
- this.hide()
178
- this.triggerElmFocus()
179
- }
180
- },
181
- resetTabindex(ele) { // 下次tab时组件聚焦元素
182
- this.removeTabindex()
183
- ele.setAttribute('tabindex', '0') // 下次期望的聚焦元素
184
- },
185
- removeTabindex() {
186
- this.triggerElm.setAttribute('tabindex', '-1')
187
- this.menuItemsArray.forEach((item) => {
188
- item.setAttribute('tabindex', '-1')
189
- })
190
- },
191
- initAria() {
192
- this.dropdownElm.setAttribute('id', this.listId)
193
- this.triggerElm.setAttribute('aria-haspopup', 'list')
194
- this.triggerElm.setAttribute('aria-controls', this.listId)
195
-
196
- if (!this.splitButton) { // 自定义
197
- this.triggerElm.setAttribute('role', 'button')
198
- this.triggerElm.setAttribute('tabindex', this.tabindex)
199
- this.triggerElm.setAttribute('class', (this.triggerElm.getAttribute('class') || '') + ' base-dropdown-selfdefine') // 控制
200
- }
201
- },
202
- initEvent() {
203
- let { trigger, show, hide, handleClick, splitButton, handleTriggerKeyDown, handleItemKeyDown } = this
204
- this.triggerElm = splitButton
205
- ? this.$refs.trigger.$el
206
- : this.$slots.default[0].elm
207
-
208
- let dropdownElm = this.dropdownElm
209
-
210
- this.triggerElm.addEventListener('keydown', handleTriggerKeyDown) // triggerElm keydown
211
- dropdownElm.addEventListener('keydown', handleItemKeyDown, true) // item keydown
212
- // 控制自定义元素的样式
213
- if (!splitButton) {
214
- this.triggerElm.addEventListener('focus', () => {
215
- this.focusing = true
216
- })
217
- this.triggerElm.addEventListener('blur', () => {
218
- this.focusing = false
219
- })
220
- this.triggerElm.addEventListener('click', () => {
221
- this.focusing = false
222
- })
223
- }
224
- if (trigger === 'hover') {
225
- this.triggerElm.addEventListener('mouseenter', show)
226
- this.triggerElm.addEventListener('mouseleave', hide)
227
- dropdownElm.addEventListener('mouseenter', show)
228
- dropdownElm.addEventListener('mouseleave', hide)
229
- } else if (trigger === 'click') {
230
- this.triggerElm.addEventListener('click', handleClick)
231
- }
232
- },
233
- removeEvent() {
234
- let { trigger, show, hide, handleClick, splitButton, handleTriggerKeyDown, handleItemKeyDown } = this
235
- this.triggerElm = splitButton
236
- ? this.$refs.trigger.$el
237
- : this.$slots.default[0].elm
238
- let dropdownElm = this.dropdownElm
239
- this.triggerElm.removeEventListener('keydown', handleTriggerKeyDown) // triggerElm keydown
240
- dropdownElm.removeEventListener('keydown', handleItemKeyDown, true) // item keydown
241
- // 控制自定义元素的样式
242
- if (!splitButton) {
243
- this.triggerElm.removeEventListener('focus', () => {
244
- this.focusing = true
245
- })
246
- this.triggerElm.removeEventListener('blur', () => {
247
- this.focusing = false
248
- })
249
- this.triggerElm.removeEventListener('click', () => {
250
- this.focusing = false
251
- })
252
- }
253
- if (trigger === 'hover') {
254
- this.triggerElm.removeEventListener('mouseenter', show)
255
- this.triggerElm.removeEventListener('mouseleave', hide)
256
- dropdownElm.removeEventListener('mouseenter', show)
257
- dropdownElm.removeEventListener('mouseleave', hide)
258
- } else if (trigger === 'click') {
259
- this.triggerElm.removeEventListener('click', handleClick)
260
- }
261
- },
262
- handleMenuItemClick(command, instance) {
263
- if (this.hideOnClick) {
264
- this.visible = false
265
- }
266
- this.$emit('command', command, instance)
267
- },
268
- triggerElmFocus() {
269
- this.triggerElm.focus && this.triggerElm.focus()
270
- },
271
- initDomOperation() {
272
- this.dropdownElm = this.popperElm
273
- this.menuItems = this.dropdownElm.querySelectorAll("[tabindex='-1']")
274
- this.menuItemsArray = [].slice.call(this.menuItems)
275
-
276
- this.initEvent()
277
- this.initAria()
278
- }
279
- },
280
-
281
- render(h) {
282
- let { hide, splitButton, type, dropdownSize } = this
283
-
284
- const handleMainButtonClick = (event) => {
285
- this.$emit('click', event)
286
- hide()
287
- }
288
-
289
- let triggerElm = !splitButton
290
- ? this.$slots.default
291
- : (<base-button-group>
292
- <base-button type={type} size={dropdownSize} nativeOn-click={handleMainButtonClick}>
293
- {this.$slots.default}
294
- </base-button>
295
- <base-button ref="trigger" type={type} size={dropdownSize} class="base-dropdown__caret-button">
296
- <i class="base-dropdown__icon base-icon-arrow-down"></i>
297
- </base-button>
298
- </base-button-group>)
299
-
300
- return (
301
- <div class="base-dropdown" v-clickoutside={hide}>
302
- {triggerElm}
303
- {this.$slots.dropdown}
304
- </div>
305
- )
306
- }
307
- }
308
- </script>