vxe-pc-ui 4.1.19 → 4.1.21

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 (259) hide show
  1. package/README.md +83 -2
  2. package/es/anchor/src/anchor-link.js +1 -1
  3. package/es/anchor/src/anchor.js +1 -1
  4. package/es/breadcrumb/src/breadcrumb.js +1 -1
  5. package/es/button/src/button-group.js +4 -1
  6. package/es/button/src/button.js +2 -1
  7. package/es/calendar/src/calendar.js +64 -32
  8. package/es/card/src/card.js +4 -3
  9. package/es/carousel/src/carousel-item.js +13 -3
  10. package/es/carousel/src/carousel.js +16 -8
  11. package/es/checkbox/src/checkbox.js +30 -14
  12. package/es/checkbox/src/group.js +17 -8
  13. package/es/collapse-pane/index.js +1 -1
  14. package/es/countdown/src/countdown.js +17 -8
  15. package/es/date-picker/src/date-picker.js +148 -69
  16. package/es/drawer/src/drawer.js +86 -46
  17. package/es/form/render/index.js +1 -2
  18. package/es/form/src/form-config-item.js +4 -3
  19. package/es/form/src/form-gather.js +5 -3
  20. package/es/form/src/form-item.js +15 -10
  21. package/es/form/src/form.js +11 -8
  22. package/es/form/src/render.js +2 -1
  23. package/es/form/src/util.js +2 -1
  24. package/es/icon/src/icon.js +3 -0
  25. package/es/icon/style.css +1 -1
  26. package/es/icon-picker/src/icon-picker.js +24 -11
  27. package/es/image/src/group.js +4 -1
  28. package/es/image/src/preview.js +1 -1
  29. package/es/input/src/input.js +131 -66
  30. package/es/layout-aside/src/layout-aside.js +1 -1
  31. package/es/list/src/list.js +7 -5
  32. package/es/list-design/src/list-design.js +1 -1
  33. package/es/list-design/src/list-view.js +1 -1
  34. package/es/loading/src/loading.js +4 -1
  35. package/es/menu/src/menu.js +4 -3
  36. package/es/number-input/src/number-input.js +100 -77
  37. package/es/pager/src/pager.js +85 -45
  38. package/es/password-input/src/password-input.js +2 -2
  39. package/es/print/src/page-break.js +11 -2
  40. package/es/print/src/print.js +6 -4
  41. package/es/pulldown/src/pulldown.js +19 -13
  42. package/es/radio/src/button.js +2 -2
  43. package/es/radio/src/group.js +8 -4
  44. package/es/row/src/row.js +1 -1
  45. package/es/select/src/optgroup.js +19 -10
  46. package/es/select/src/option.js +17 -9
  47. package/es/select/src/select.js +64 -41
  48. package/es/select/src/util.js +2 -2
  49. package/es/style.css +1 -1
  50. package/es/style.min.css +1 -1
  51. package/es/tabs/src/tab-pane.js +13 -3
  52. package/es/tabs/src/tabs.js +57 -47
  53. package/es/textarea/src/textarea.js +28 -10
  54. package/es/tooltip/src/tooltip.js +107 -78
  55. package/es/tree/src/tree.js +6 -3
  56. package/es/tree-select/src/tree-select.js +18 -10
  57. package/es/ui/index.js +1 -7
  58. package/es/ui/src/log.js +1 -1
  59. package/es/upload/src/upload.js +5 -5
  60. package/lib/anchor/src/anchor-link.js +1 -1
  61. package/lib/anchor/src/anchor-link.min.js +1 -1
  62. package/lib/anchor/src/anchor.js +1 -1
  63. package/lib/anchor/src/anchor.min.js +1 -1
  64. package/lib/breadcrumb/src/breadcrumb.js +1 -1
  65. package/lib/breadcrumb/src/breadcrumb.min.js +1 -1
  66. package/lib/button/src/button-group.js +4 -1
  67. package/lib/button/src/button-group.min.js +1 -1
  68. package/lib/button/src/button.js +2 -1
  69. package/lib/button/src/button.min.js +1 -1
  70. package/lib/calendar/src/calendar.js +42 -24
  71. package/lib/calendar/src/calendar.min.js +1 -1
  72. package/lib/card/src/card.js +6 -5
  73. package/lib/card/src/card.min.js +1 -1
  74. package/lib/carousel/src/carousel-item.js +16 -3
  75. package/lib/carousel/src/carousel-item.min.js +1 -1
  76. package/lib/carousel/src/carousel.js +18 -8
  77. package/lib/carousel/src/carousel.min.js +1 -1
  78. package/lib/checkbox/src/checkbox.js +16 -12
  79. package/lib/checkbox/src/checkbox.min.js +1 -1
  80. package/lib/checkbox/src/group.js +10 -7
  81. package/lib/checkbox/src/group.min.js +1 -1
  82. package/lib/collapse-pane/index.js +1 -1
  83. package/lib/collapse-pane/index.min.js +1 -1
  84. package/lib/countdown/src/countdown.js +15 -7
  85. package/lib/countdown/src/countdown.min.js +1 -1
  86. package/lib/date-picker/src/date-picker.js +124 -62
  87. package/lib/date-picker/src/date-picker.min.js +1 -1
  88. package/lib/drawer/src/drawer.js +15 -30
  89. package/lib/drawer/src/drawer.min.js +1 -1
  90. package/lib/form/render/index.js +1 -4
  91. package/lib/form/render/index.min.js +1 -1
  92. package/lib/form/src/form-config-item.js +4 -5
  93. package/lib/form/src/form-config-item.min.js +1 -1
  94. package/lib/form/src/form-gather.js +11 -9
  95. package/lib/form/src/form-gather.min.js +1 -1
  96. package/lib/form/src/form-item.js +11 -12
  97. package/lib/form/src/form-item.min.js +1 -1
  98. package/lib/form/src/form.js +7 -7
  99. package/lib/form/src/form.min.js +1 -1
  100. package/lib/form/src/render.js +2 -1
  101. package/lib/form/src/util.js +2 -1
  102. package/lib/icon/src/icon.js +3 -0
  103. package/lib/icon/src/icon.min.js +1 -1
  104. package/lib/icon/style/style.css +1 -1
  105. package/lib/icon/style/style.min.css +1 -1
  106. package/lib/icon-picker/src/icon-picker.js +22 -12
  107. package/lib/icon-picker/src/icon-picker.min.js +1 -1
  108. package/lib/image/src/group.js +4 -1
  109. package/lib/image/src/group.min.js +1 -1
  110. package/lib/image/src/preview.js +1 -1
  111. package/lib/image/src/preview.min.js +1 -1
  112. package/lib/index.umd.js +884 -649
  113. package/lib/index.umd.min.js +1 -1
  114. package/lib/input/src/input.js +79 -51
  115. package/lib/input/src/input.min.js +1 -1
  116. package/lib/layout-aside/src/layout-aside.js +1 -1
  117. package/lib/layout-aside/src/layout-aside.min.js +1 -1
  118. package/lib/list/src/list.js +9 -5
  119. package/lib/list/src/list.min.js +1 -1
  120. package/lib/list-design/src/list-design.js +1 -1
  121. package/lib/list-design/src/list-design.min.js +1 -1
  122. package/lib/list-design/src/list-view.js +1 -1
  123. package/lib/list-design/src/list-view.min.js +1 -1
  124. package/lib/loading/src/loading.js +4 -1
  125. package/lib/loading/src/loading.min.js +1 -1
  126. package/lib/menu/src/menu.js +4 -3
  127. package/lib/menu/src/menu.min.js +1 -1
  128. package/lib/number-input/src/number-input.js +67 -69
  129. package/lib/number-input/src/number-input.min.js +1 -1
  130. package/lib/pager/src/pager.js +40 -39
  131. package/lib/pager/src/pager.min.js +1 -1
  132. package/lib/password-input/src/password-input.js +2 -2
  133. package/lib/print/src/page-break.js +14 -2
  134. package/lib/print/src/page-break.min.js +1 -1
  135. package/lib/print/src/print.js +8 -6
  136. package/lib/print/src/print.min.js +1 -1
  137. package/lib/pulldown/src/pulldown.js +19 -13
  138. package/lib/pulldown/src/pulldown.min.js +1 -1
  139. package/lib/radio/src/button.js +2 -2
  140. package/lib/radio/src/group.js +8 -4
  141. package/lib/radio/src/group.min.js +1 -1
  142. package/lib/row/src/row.js +1 -1
  143. package/lib/row/src/row.min.js +1 -1
  144. package/lib/select/src/optgroup.js +12 -9
  145. package/lib/select/src/optgroup.min.js +1 -1
  146. package/lib/select/src/option.js +9 -7
  147. package/lib/select/src/option.min.js +1 -1
  148. package/lib/select/src/select.js +52 -41
  149. package/lib/select/src/select.min.js +1 -1
  150. package/lib/select/src/util.js +2 -2
  151. package/lib/select/src/util.min.js +1 -1
  152. package/lib/style.css +1 -1
  153. package/lib/style.min.css +1 -1
  154. package/lib/tabs/src/tab-pane.js +16 -3
  155. package/lib/tabs/src/tab-pane.min.js +1 -1
  156. package/lib/tabs/src/tabs.js +62 -50
  157. package/lib/tabs/src/tabs.min.js +1 -1
  158. package/lib/textarea/src/textarea.js +4 -4
  159. package/lib/tooltip/src/tooltip.js +96 -88
  160. package/lib/tooltip/src/tooltip.min.js +1 -1
  161. package/lib/tree/src/tree.js +2 -2
  162. package/lib/tree/src/tree.min.js +1 -1
  163. package/lib/tree-select/src/tree-select.js +13 -8
  164. package/lib/tree-select/src/tree-select.min.js +1 -1
  165. package/lib/ui/index.js +3 -10
  166. package/lib/ui/index.min.js +1 -1
  167. package/lib/ui/src/log.js +1 -1
  168. package/lib/ui/src/log.min.js +1 -1
  169. package/lib/upload/src/upload.js +5 -5
  170. package/lib/upload/src/upload.min.js +1 -1
  171. package/package.json +2 -2
  172. package/packages/anchor/src/anchor-link.ts +2 -2
  173. package/packages/anchor/src/anchor.ts +2 -2
  174. package/packages/breadcrumb/src/breadcrumb.ts +2 -2
  175. package/packages/button/src/button-group.ts +4 -1
  176. package/packages/button/src/button.ts +6 -5
  177. package/packages/calendar/src/calendar.ts +67 -35
  178. package/packages/card/src/card.ts +6 -4
  179. package/packages/carousel/src/carousel-item.ts +19 -4
  180. package/packages/carousel/src/carousel.ts +19 -11
  181. package/packages/checkbox/src/checkbox.ts +34 -15
  182. package/packages/checkbox/src/group.ts +22 -10
  183. package/packages/collapse-pane/index.ts +1 -1
  184. package/packages/countdown/src/countdown.ts +20 -11
  185. package/packages/date-picker/src/date-picker.ts +160 -80
  186. package/packages/drawer/src/drawer.ts +91 -50
  187. package/packages/form/render/index.ts +1 -3
  188. package/packages/form/src/form-config-item.ts +4 -3
  189. package/packages/form/src/form-gather.ts +5 -3
  190. package/packages/form/src/form-item.ts +15 -10
  191. package/packages/form/src/form.ts +12 -10
  192. package/packages/form/src/render.ts +2 -1
  193. package/packages/form/src/util.ts +2 -1
  194. package/packages/icon/src/icon.ts +3 -0
  195. package/packages/icon-picker/src/icon-picker.ts +31 -17
  196. package/packages/image/src/group.ts +4 -1
  197. package/packages/image/src/preview.ts +2 -2
  198. package/packages/input/src/input.ts +138 -75
  199. package/packages/layout-aside/src/layout-aside.ts +2 -2
  200. package/packages/list/src/list.ts +12 -11
  201. package/packages/list-design/src/list-design.ts +2 -2
  202. package/packages/list-design/src/list-view.ts +2 -2
  203. package/packages/loading/src/loading.ts +5 -2
  204. package/packages/menu/src/menu.ts +5 -4
  205. package/packages/number-input/src/number-input.ts +102 -79
  206. package/packages/pager/src/pager.ts +91 -50
  207. package/packages/password-input/src/password-input.ts +2 -2
  208. package/packages/print/src/page-break.ts +18 -4
  209. package/packages/print/src/print.ts +10 -5
  210. package/packages/pulldown/src/pulldown.ts +28 -22
  211. package/packages/radio/src/button.ts +2 -2
  212. package/packages/radio/src/group.ts +9 -5
  213. package/packages/row/src/row.ts +2 -2
  214. package/packages/select/src/optgroup.ts +22 -13
  215. package/packages/select/src/option.ts +18 -10
  216. package/packages/select/src/select.ts +79 -52
  217. package/packages/select/src/util.ts +3 -3
  218. package/packages/tabs/src/tab-pane.ts +20 -5
  219. package/packages/tabs/src/tabs.ts +59 -49
  220. package/packages/textarea/src/textarea.ts +28 -10
  221. package/packages/tooltip/src/tooltip.ts +118 -84
  222. package/packages/tree/src/tree.ts +7 -4
  223. package/packages/tree-select/src/tree-select.ts +25 -16
  224. package/packages/ui/index.ts +0 -7
  225. package/packages/upload/src/upload.ts +6 -6
  226. package/types/components/calendar.d.ts +6 -0
  227. package/types/components/carousel.d.ts +5 -0
  228. package/types/components/countdown.d.ts +4 -0
  229. package/types/components/date-picker.d.ts +23 -5
  230. package/types/components/drawer.d.ts +0 -1
  231. package/types/components/form.d.ts +4 -2
  232. package/types/components/icon-picker.d.ts +4 -0
  233. package/types/components/input.d.ts +9 -1
  234. package/types/components/list.d.ts +1 -0
  235. package/types/components/number-input.d.ts +6 -2
  236. package/types/components/optgroup.d.ts +10 -4
  237. package/types/components/pulldown.d.ts +5 -1
  238. package/types/components/select.d.ts +4 -0
  239. package/types/components/tabs.d.ts +4 -0
  240. package/types/components/toolbar.d.ts +5 -0
  241. package/types/components/tooltip.d.ts +4 -0
  242. package/types/components/tree-select.d.ts +4 -0
  243. package/types/ui/index.d.ts +0 -22
  244. /package/es/{collapse-pane → collapse}/src/collapse-pane.js +0 -0
  245. /package/es/icon/style/{iconfont.1725597808239.ttf → iconfont.1725941866604.ttf} +0 -0
  246. /package/es/icon/style/{iconfont.1725597808239.woff → iconfont.1725941866604.woff} +0 -0
  247. /package/es/icon/style/{iconfont.1725597808239.woff2 → iconfont.1725941866604.woff2} +0 -0
  248. /package/es/{iconfont.1725597808239.ttf → iconfont.1725941866604.ttf} +0 -0
  249. /package/es/{iconfont.1725597808239.woff → iconfont.1725941866604.woff} +0 -0
  250. /package/es/{iconfont.1725597808239.woff2 → iconfont.1725941866604.woff2} +0 -0
  251. /package/lib/{collapse-pane → collapse}/src/collapse-pane.js +0 -0
  252. /package/lib/{collapse-pane → collapse}/src/collapse-pane.min.js +0 -0
  253. /package/lib/icon/style/{iconfont.1725597808239.ttf → iconfont.1725941866604.ttf} +0 -0
  254. /package/lib/icon/style/{iconfont.1725597808239.woff → iconfont.1725941866604.woff} +0 -0
  255. /package/lib/icon/style/{iconfont.1725597808239.woff2 → iconfont.1725941866604.woff2} +0 -0
  256. /package/lib/{iconfont.1725597808239.ttf → iconfont.1725941866604.ttf} +0 -0
  257. /package/lib/{iconfont.1725597808239.woff → iconfont.1725941866604.woff} +0 -0
  258. /package/lib/{iconfont.1725597808239.woff2 → iconfont.1725941866604.woff2} +0 -0
  259. /package/packages/{collapse-pane → collapse}/src/collapse-pane.ts +0 -0
@@ -1,12 +1,12 @@
1
1
  import { defineComponent, h, Teleport, PropType, ref, Ref, inject, computed, provide, onUnmounted, reactive, nextTick, watch, onMounted, createCommentVNode } from 'vue'
2
2
  import XEUtils from 'xe-utils'
3
- import { getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useSize, VxeComponentSlotType } from '../../ui'
3
+ import { getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useSize } from '../../ui'
4
4
  import { getEventTargetNode, getAbsolutePos } from '../../ui/src/dom'
5
5
  import { getLastZIndex, nextZIndex, getFuncText } from '../../ui/src/utils'
6
6
  import VxeInputComponent from '../../input/src/input'
7
7
  import { getSlotVNs } from '../../ui/src/vn'
8
8
 
9
- import type { VxeSelectPropTypes, VxeSelectConstructor, SelectReactData, VxeSelectEmits, VxeInputConstructor, SelectMethods, SelectPrivateRef, VxeSelectMethods, VxeOptgroupProps, VxeOptionProps, VxeTableConstructor, VxeTablePrivateMethods, VxeFormDefines, VxeFormConstructor, VxeFormPrivateMethods, VxeModalConstructor, VxeModalMethods } from '../../../types'
9
+ import type { VxeSelectPropTypes, VxeSelectConstructor, SelectInternalData, SelectReactData, VxeSelectEmits, VxeComponentSlotType, VxeInputConstructor, SelectMethods, SelectPrivateRef, VxeSelectMethods, VxeOptgroupProps, VxeOptionProps, VxeTableConstructor, VxeDrawerConstructor, VxeDrawerMethods, VxeTablePrivateMethods, VxeFormDefines, VxeFormConstructor, VxeFormPrivateMethods, VxeModalConstructor, VxeModalMethods } from '../../../types'
10
10
 
11
11
  function isOptionVisible (option: any) {
12
12
  return option.visible !== false
@@ -32,7 +32,10 @@ export default defineComponent({
32
32
  default: null
33
33
  },
34
34
  multiple: Boolean as PropType<VxeSelectPropTypes.Multiple>,
35
- multiCharOverflow: { type: [Number, String] as PropType<VxeSelectPropTypes.MultiCharOverflow>, default: () => getConfig().select.multiCharOverflow },
35
+ multiCharOverflow: {
36
+ type: [Number, String] as PropType<VxeSelectPropTypes.MultiCharOverflow>,
37
+ default: () => getConfig().select.multiCharOverflow
38
+ },
36
39
  prefixIcon: String as PropType<VxeSelectPropTypes.PrefixIcon>,
37
40
  placement: String as PropType<VxeSelectPropTypes.Placement>,
38
41
  options: Array as PropType<VxeSelectPropTypes.Options>,
@@ -42,21 +45,31 @@ export default defineComponent({
42
45
  optionConfig: Object as PropType<VxeSelectPropTypes.OptionConfig>,
43
46
  className: [String, Function] as PropType<VxeSelectPropTypes.ClassName>,
44
47
  popupClassName: [String, Function] as PropType<VxeSelectPropTypes.PopupClassName>,
45
- max: { type: [String, Number] as PropType<VxeSelectPropTypes.Max>, default: null },
46
- size: { type: String as PropType<VxeSelectPropTypes.Size>, default: () => getConfig().select.size || getConfig().size },
48
+ max: {
49
+ type: [String, Number] as PropType<VxeSelectPropTypes.Max>,
50
+ default: null
51
+ },
52
+ size: {
53
+ type: String as PropType<VxeSelectPropTypes.Size>,
54
+ default: () => getConfig().select.size || getConfig().size
55
+ },
47
56
  filterable: Boolean as PropType<VxeSelectPropTypes.Filterable>,
48
57
  filterMethod: Function as PropType<VxeSelectPropTypes.FilterMethod>,
49
58
  remote: Boolean as PropType<VxeSelectPropTypes.Remote>,
50
59
  remoteMethod: Function as PropType<VxeSelectPropTypes.RemoteMethod>,
51
60
  emptyText: String as PropType<VxeSelectPropTypes.EmptyText>,
52
- // 已废弃,被 option-config.keyField 替换
53
- optionId: { type: String as PropType<VxeSelectPropTypes.OptionId>, default: () => getConfig().select.optionId },
54
- // 已废弃,被 option-config.useKey 替换
55
- optionKey: Boolean as PropType<VxeSelectPropTypes.OptionKey>,
56
61
  transfer: {
57
62
  type: Boolean as PropType<VxeSelectPropTypes.Transfer>,
58
63
  default: null
59
- }
64
+ },
65
+
66
+ // 已废弃,被 option-config.keyField 替换
67
+ optionId: {
68
+ type: String as PropType<VxeSelectPropTypes.OptionId>,
69
+ default: () => getConfig().select.optionId
70
+ },
71
+ // 已废弃,被 option-config.useKey 替换
72
+ optionKey: Boolean as PropType<VxeSelectPropTypes.OptionKey>
60
73
  },
61
74
  emits: [
62
75
  'update:modelValue',
@@ -69,9 +82,10 @@ export default defineComponent({
69
82
  setup (props, context) {
70
83
  const { slots, emit } = context
71
84
 
72
- const $xeModal = inject<VxeModalConstructor & VxeModalMethods | null>('$xeModal', null)
73
- const $xeTable = inject<VxeTableConstructor & VxeTablePrivateMethods | null>('$xeTable', null)
74
- const $xeForm = inject<VxeFormConstructor & VxeFormPrivateMethods | null>('$xeForm', null)
85
+ const $xeModal = inject<(VxeModalConstructor & VxeModalMethods)| null>('$xeModal', null)
86
+ const $xeDrawer = inject<(VxeDrawerConstructor & VxeDrawerMethods) | null>('$xeDrawer', null)
87
+ const $xeTable = inject<(VxeTableConstructor & VxeTablePrivateMethods) | null>('$xeTable', null)
88
+ const $xeForm = inject<(VxeFormConstructor & VxeFormPrivateMethods)| null>('$xeForm', null)
75
89
  const formItemInfo = inject<VxeFormDefines.ProvideItemInfo | null>('xeFormItemInfo', null)
76
90
 
77
91
  const xID = XEUtils.uniqueId()
@@ -99,6 +113,10 @@ export default defineComponent({
99
113
  searchLoading: false
100
114
  })
101
115
 
116
+ const internalData: SelectInternalData = {
117
+ hpTimeout: undefined
118
+ }
119
+
102
120
  const refElem = ref() as Ref<HTMLDivElement>
103
121
  const refInput = ref() as Ref<VxeInputConstructor>
104
122
  const refInpSearch = ref() as Ref<VxeInputConstructor>
@@ -114,6 +132,7 @@ export default defineComponent({
114
132
  props,
115
133
  context,
116
134
  reactData,
135
+ internalData,
117
136
  getRefMaps: () => refMaps
118
137
  } as unknown as VxeSelectConstructor & VxeSelectMethods
119
138
 
@@ -148,7 +167,7 @@ export default defineComponent({
148
167
  if (XEUtils.isBoolean(globalTransfer)) {
149
168
  return globalTransfer
150
169
  }
151
- if ($xeTable || $xeModal || $xeForm) {
170
+ if ($xeTable || $xeModal || $xeDrawer || $xeForm) {
152
171
  return true
153
172
  }
154
173
  }
@@ -168,11 +187,11 @@ export default defineComponent({
168
187
  })
169
188
 
170
189
  const computePropsOpts = computed(() => {
171
- return props.optionProps || {}
190
+ return Object.assign({}, props.optionProps)
172
191
  })
173
192
 
174
193
  const computeGroupPropsOpts = computed(() => {
175
- return props.optionGroupProps || {}
194
+ return Object.assign({}, props.optionGroupProps)
176
195
  })
177
196
 
178
197
  const computeLabelField = computed(() => {
@@ -215,6 +234,28 @@ export default defineComponent({
215
234
  return XEUtils.toNumber(props.multiCharOverflow)
216
235
  })
217
236
 
237
+ const computeSelectLabel = computed(() => {
238
+ const { modelValue, multiple, remote } = props
239
+ const multiMaxCharNum = computeMultiMaxCharNum.value
240
+ if (modelValue && multiple) {
241
+ const vals = XEUtils.isArray(modelValue) ? modelValue : [modelValue]
242
+ if (remote) {
243
+ return vals.map(val => getRemoteSelectLabel(val)).join(', ')
244
+ }
245
+ return vals.map((val) => {
246
+ const label = getSelectLabel(val)
247
+ if (multiMaxCharNum > 0 && label.length > multiMaxCharNum) {
248
+ return `${label.substring(0, multiMaxCharNum)}...`
249
+ }
250
+ return label
251
+ }).join(', ')
252
+ }
253
+ if (remote) {
254
+ return getRemoteSelectLabel(modelValue)
255
+ }
256
+ return getSelectLabel(modelValue)
257
+ })
258
+
218
259
  const callSlot = <T>(slotFunc: ((params: T) => VxeComponentSlotType | VxeComponentSlotType[]) | string | null, params: T) => {
219
260
  if (slotFunc) {
220
261
  if (XEUtils.isString(slotFunc)) {
@@ -281,28 +322,6 @@ export default defineComponent({
281
322
  return XEUtils.toValueString(item ? item[labelField as 'label'] : value)
282
323
  }
283
324
 
284
- const computeSelectLabel = computed(() => {
285
- const { modelValue, multiple, remote } = props
286
- const multiMaxCharNum = computeMultiMaxCharNum.value
287
- if (modelValue && multiple) {
288
- const vals = XEUtils.isArray(modelValue) ? modelValue : [modelValue]
289
- if (remote) {
290
- return vals.map(val => getRemoteSelectLabel(val)).join(', ')
291
- }
292
- return vals.map((val) => {
293
- const label = getSelectLabel(val)
294
- if (multiMaxCharNum > 0 && label.length > multiMaxCharNum) {
295
- return `${label.substring(0, multiMaxCharNum)}...`
296
- }
297
- return label
298
- }).join(', ')
299
- }
300
- if (remote) {
301
- return getRemoteSelectLabel(modelValue)
302
- }
303
- return getSelectLabel(modelValue)
304
- })
305
-
306
325
  const getOptkey = () => {
307
326
  const optionOpts = computeOptionOpts.value
308
327
  return optionOpts.keyField || props.optionId || '_X_OPTION_KEY'
@@ -473,13 +492,15 @@ export default defineComponent({
473
492
  })
474
493
  }
475
494
 
476
- let hidePanelTimeout: number
477
-
478
495
  const showOptionPanel = () => {
479
496
  const { loading, filterable } = props
497
+ const { hpTimeout } = internalData
480
498
  const isDisabled = computeIsDisabled.value
481
499
  if (!loading && !isDisabled) {
482
- clearTimeout(hidePanelTimeout)
500
+ if (hpTimeout) {
501
+ clearTimeout(hpTimeout)
502
+ internalData.hpTimeout = undefined
503
+ }
483
504
  if (!reactData.initialized) {
484
505
  reactData.initialized = true
485
506
  }
@@ -507,14 +528,14 @@ export default defineComponent({
507
528
  reactData.searchValue = ''
508
529
  reactData.searchLoading = false
509
530
  reactData.visiblePanel = false
510
- hidePanelTimeout = window.setTimeout(() => {
531
+ internalData.hpTimeout = window.setTimeout(() => {
511
532
  reactData.isAniVisible = false
512
533
  }, 350)
513
534
  }
514
535
 
515
536
  const changeEvent = (evnt: Event, selectValue: any) => {
537
+ emit('update:modelValue', selectValue)
516
538
  if (selectValue !== props.modelValue) {
517
- emit('update:modelValue', selectValue)
518
539
  selectMethods.dispatchEvent('change', { value: selectValue }, evnt)
519
540
  // 自动更新校验状态
520
541
  if ($xeForm && formItemInfo) {
@@ -753,19 +774,25 @@ export default defineComponent({
753
774
  reactData.isActivated = true
754
775
  }
755
776
 
756
- const triggerSearchEvent = XEUtils.debounce(function () {
777
+ const handleSearchEvent = () => {
757
778
  const { remote, remoteMethod } = props
758
779
  const { searchValue } = reactData
759
780
  if (remote && remoteMethod) {
760
781
  reactData.searchLoading = true
761
- Promise.resolve(remoteMethod({ searchValue })).then(() => nextTick()).catch(() => nextTick()).finally(() => {
762
- reactData.searchLoading = false
763
- refreshOption()
764
- })
782
+ Promise.resolve(
783
+ remoteMethod({ searchValue })
784
+ ).then(() => nextTick())
785
+ .catch(() => nextTick())
786
+ .finally(() => {
787
+ reactData.searchLoading = false
788
+ refreshOption()
789
+ })
765
790
  } else {
766
791
  refreshOption()
767
792
  }
768
- }, 350, { trailing: true })
793
+ }
794
+
795
+ const triggerSearchEvent = XEUtils.debounce(handleSearchEvent, 350, { trailing: true })
769
796
 
770
797
  const togglePanelEvent = (params: any) => {
771
798
  const { $event } = params
@@ -978,7 +1005,7 @@ export default defineComponent({
978
1005
  }, defaultSlot ? defaultSlot({}) : []),
979
1006
  h('span', {
980
1007
  class: 'vxe-select-label'
981
- }, selectLabel)
1008
+ }, [selectLabel])
982
1009
  ])
983
1010
  }
984
1011
  return h('div', {
@@ -1078,8 +1105,6 @@ export default defineComponent({
1078
1105
  ])
1079
1106
  }
1080
1107
 
1081
- $xeSelect.renderVN = renderVN
1082
-
1083
1108
  watch(() => reactData.staticOptions, (value) => {
1084
1109
  if (value.some((item) => item.options && item.options.length)) {
1085
1110
  reactData.fullOptionList = []
@@ -1128,6 +1153,8 @@ export default defineComponent({
1128
1153
 
1129
1154
  provide('$xeSelect', $xeSelect)
1130
1155
 
1156
+ $xeSelect.renderVN = renderVN
1157
+
1131
1158
  return $xeSelect
1132
1159
  },
1133
1160
  render () {
@@ -5,7 +5,7 @@ import { OptionInfo } from './option-info'
5
5
  import type { VxeSelectConstructor } from '../../../types'
6
6
 
7
7
  export interface XEOptionProvide {
8
- option: OptionInfo;
8
+ optionConfig: OptionInfo;
9
9
  }
10
10
 
11
11
  export function isOption (option: any) {
@@ -24,11 +24,11 @@ export function watchOption (props: any, option: OptionInfo) {
24
24
  })
25
25
  }
26
26
 
27
- export function assembleOption ($xeSelect: VxeSelectConstructor, el: HTMLDivElement, option: OptionInfo, optGroup?: XEOptionProvide | null) {
27
+ export function assembleOption ($xeSelect: VxeSelectConstructor, el: HTMLDivElement, option: OptionInfo, $xeOptgroup?: XEOptionProvide | null) {
28
28
  const { reactData } = $xeSelect
29
29
  const { staticOptions } = reactData
30
30
  const parentElem = el.parentNode
31
- const parentOption = optGroup ? optGroup.option : null
31
+ const parentOption = $xeOptgroup ? $xeOptgroup.optionConfig : null
32
32
  const parentCols = parentOption ? parentOption.options : staticOptions
33
33
  if (parentElem && parentCols) {
34
34
  parentCols.splice(XEUtils.arrayIndexOf(parentElem.children, el), 0, option)
@@ -1,8 +1,9 @@
1
1
  import { defineComponent, ref, h, reactive, PropType, watch, inject, onMounted, onUnmounted } from 'vue'
2
2
  import XEUtils from 'xe-utils'
3
+ import { createEvent } from '../../ui'
3
4
  import { assembleAnchorTab, destroyAnchorTab } from './util'
4
5
 
5
- import type { VxeTabPanePropTypes, TabPaneReactData, TabPanePrivateRef, VxeTabPanePrivateComputed, VxeTabPaneConstructor, VxeTabPanePrivateMethods, VxeTabPaneDefines, VxeTabsConstructor, VxeTabsPrivateMethods } from '../../../types'
6
+ import type { VxeTabPanePropTypes, TabPaneReactData, TabPaneMethods, TabPanePrivateMethods, VxeTabPaneEmits, ValueOf, TabPanePrivateRef, VxeTabPanePrivateComputed, VxeTabPaneConstructor, VxeTabPanePrivateMethods, VxeTabPaneDefines, VxeTabsConstructor, VxeTabsPrivateMethods } from '../../../types'
6
7
 
7
8
  export default defineComponent({
8
9
  name: 'VxeTabPane',
@@ -15,9 +16,9 @@ export default defineComponent({
15
16
  preload: Boolean as PropType<VxeTabPanePropTypes.Preload>,
16
17
  permissionCode: [String, Number] as PropType<VxeTabPanePropTypes.PermissionCode>
17
18
  },
18
- emits: [],
19
+ emits: [] as VxeTabPaneEmits,
19
20
  setup (props, context) {
20
- const { slots } = context
21
+ const { slots, emit } = context
21
22
 
22
23
  const xID = XEUtils.uniqueId()
23
24
 
@@ -59,6 +60,19 @@ export default defineComponent({
59
60
  getComputeMaps: () => computeMaps
60
61
  } as unknown as VxeTabPaneConstructor & VxeTabPanePrivateMethods
61
62
 
63
+ const dispatchEvent = (type: ValueOf<VxeTabPaneEmits>, params: Record<string, any>, evnt: Event | null) => {
64
+ emit(type, createEvent(evnt, { $tabPane: $xeTabPane }, params))
65
+ }
66
+
67
+ const tabPaneMethods: TabPaneMethods = {
68
+ dispatchEvent
69
+ }
70
+
71
+ const tabPanePrivateMethods: TabPanePrivateMethods = {
72
+ }
73
+
74
+ Object.assign($xeTabPane, tabPaneMethods, tabPanePrivateMethods)
75
+
62
76
  watch(() => props.title, (val) => {
63
77
  tabConfig.title = val
64
78
  })
@@ -76,8 +90,9 @@ export default defineComponent({
76
90
  })
77
91
 
78
92
  onMounted(() => {
79
- if ($xeTabs && refElem.value) {
80
- assembleAnchorTab($xeTabs, refElem.value, tabConfig)
93
+ const elem = refElem.value
94
+ if ($xeTabs && elem) {
95
+ assembleAnchorTab($xeTabs, elem, tabConfig)
81
96
  }
82
97
  })
83
98
 
@@ -5,7 +5,7 @@ import { toCssUnit } from '../..//ui/src/dom'
5
5
  import { warnLog } from '../../ui/src/log'
6
6
  import XEUtils from 'xe-utils'
7
7
 
8
- import type { VxeTabsPropTypes, VxeTabPaneProps, VxeTabsEmits, TabsReactData, TabsPrivateRef, VxeTabsPrivateComputed, VxeTabsConstructor, VxeTabsPrivateMethods, VxeTabPaneDefines, ValueOf, TabsMethods, TabsPrivateMethods } from '../../../types'
8
+ import type { VxeTabsPropTypes, VxeTabPaneProps, VxeTabsEmits, TabsInternalData, TabsReactData, TabsPrivateRef, VxeTabsPrivateComputed, VxeTabsConstructor, VxeTabsPrivateMethods, VxeTabPaneDefines, ValueOf, TabsMethods, TabsPrivateMethods } from '../../../types'
9
9
 
10
10
  export default defineComponent({
11
11
  name: 'VxeTabs',
@@ -55,28 +55,22 @@ export default defineComponent({
55
55
  resizeFlag: 1
56
56
  })
57
57
 
58
- const refMaps: TabsPrivateRef = {
59
- refElem
58
+ const internalData: TabsInternalData = {
59
+ slTimeout: undefined
60
60
  }
61
61
 
62
- const handleFilterTab = (item: VxeTabPaneProps | VxeTabPaneDefines.TabConfig) => {
63
- const { permissionCode } = item
64
- if (permissionCode) {
65
- if (!permission.checkVisible(permissionCode)) {
66
- return false
67
- }
68
- }
69
- return true
62
+ const refMaps: TabsPrivateRef = {
63
+ refElem
70
64
  }
71
65
 
72
66
  const computeTabOptions = computed(() => {
73
67
  const { options } = props
74
- return (options || []).filter(handleFilterTab)
68
+ return (options || []).filter((item) => handleFilterTab(item))
75
69
  })
76
70
 
77
71
  const computeTabStaticOptions = computed(() => {
78
72
  const { staticTabs } = reactData
79
- return staticTabs.filter(handleFilterTab)
73
+ return staticTabs.filter((item) => handleFilterTab(item))
80
74
  })
81
75
 
82
76
  const computeMaps: VxeTabsPrivateComputed = {
@@ -92,6 +86,16 @@ export default defineComponent({
92
86
  getComputeMaps: () => computeMaps
93
87
  } as unknown as VxeTabsConstructor & VxeTabsPrivateMethods
94
88
 
89
+ const handleFilterTab = (item: VxeTabPaneProps | VxeTabPaneDefines.TabConfig) => {
90
+ const { permissionCode } = item
91
+ if (permissionCode) {
92
+ if (!permission.checkVisible(permissionCode)) {
93
+ return false
94
+ }
95
+ }
96
+ return true
97
+ }
98
+
95
99
  const callSlot = (slotFunc: any, params: any) => {
96
100
  if (slotFunc) {
97
101
  if (XEUtils.isString(slotFunc)) {
@@ -218,13 +222,15 @@ export default defineComponent({
218
222
  }
219
223
  }
220
224
 
221
- let scrollTimeout: any = null
222
-
223
225
  const startScrollAnimation = (offsetPos: number, offsetSize: number) => {
226
+ const { slTimeout } = internalData
224
227
  let offsetLeft = offsetSize
225
228
  let scrollCount = 6
226
229
  let delayNum = 35
227
- clearTimeout(scrollTimeout)
230
+ if (slTimeout) {
231
+ clearTimeout(slTimeout)
232
+ internalData.slTimeout = undefined
233
+ }
228
234
  const scrollAnimate = () => {
229
235
  const headerWrapperEl = refHeadWrapperElem.value
230
236
  if (scrollCount > 0) {
@@ -236,13 +242,13 @@ export default defineComponent({
236
242
  if (clientWidth + scrollLeft < scrollWidth) {
237
243
  headerWrapperEl.scrollLeft += offsetLeft
238
244
  delayNum -= 4
239
- scrollTimeout = setTimeout(scrollAnimate, delayNum)
245
+ internalData.slTimeout = setTimeout(scrollAnimate, delayNum)
240
246
  }
241
247
  } else {
242
248
  if (scrollLeft > 0) {
243
249
  headerWrapperEl.scrollLeft -= offsetLeft
244
250
  delayNum -= 4
245
- scrollTimeout = setTimeout(scrollAnimate, delayNum)
251
+ internalData.slTimeout = setTimeout(scrollAnimate, delayNum)
246
252
  }
247
253
  }
248
254
  updateTabStyle()
@@ -297,41 +303,43 @@ export default defineComponent({
297
303
  })
298
304
  }
299
305
 
300
- const createHandlePrevNext = (isNext: boolean) => {
301
- return () => {
302
- const { activeName } = reactData
303
- const tabOptions = computeTabOptions.value
304
- const tabStaticOptions = computeTabStaticOptions.value
305
- const list = tabStaticOptions.length ? tabStaticOptions : tabOptions
306
- const index = XEUtils.findIndexOf(list, item => item.name === activeName)
307
- if (index > -1) {
308
- let item: VxeTabPaneProps | null = null
309
- if (isNext) {
310
- if (index < list.length - 1) {
311
- item = list[index + 1]
312
- }
313
- } else {
314
- if (index > 0) {
315
- item = list[index - 1]
316
- }
306
+ const handlePrevNext = (isNext: boolean) => {
307
+ const { activeName } = reactData
308
+ const tabOptions = computeTabOptions.value
309
+ const tabStaticOptions = computeTabStaticOptions.value
310
+ const list = tabStaticOptions.length ? tabStaticOptions : tabOptions
311
+ const index = XEUtils.findIndexOf(list, item => item.name === activeName)
312
+ if (index > -1) {
313
+ let item: VxeTabPaneProps | null = null
314
+ if (isNext) {
315
+ if (index < list.length - 1) {
316
+ item = list[index + 1]
317
317
  }
318
- if (item) {
319
- const name = item.name
320
- const value = name
321
- reactData.activeName = name
322
- emit('update:modelValue', value)
323
- addInitName(name, null)
318
+ } else {
319
+ if (index > 0) {
320
+ item = list[index - 1]
324
321
  }
325
322
  }
326
- return nextTick()
323
+ if (item) {
324
+ const name = item.name
325
+ const value = name
326
+ reactData.activeName = name
327
+ emit('update:modelValue', value)
328
+ addInitName(name, null)
329
+ }
327
330
  }
331
+ return nextTick()
328
332
  }
329
333
 
330
334
  const tabsMethods: TabsMethods = {
331
335
  dispatchEvent,
332
336
  scrollToTab,
333
- prev: createHandlePrevNext(false),
334
- next: createHandlePrevNext(true),
337
+ prev () {
338
+ return handlePrevNext(false)
339
+ },
340
+ next () {
341
+ return handlePrevNext(true)
342
+ },
335
343
  prevTab () {
336
344
  if (process.env.VUE_APP_VXE_ENV === 'development') {
337
345
  warnLog('vxe.error.delFunc', ['prevTab', 'prev'])
@@ -475,9 +483,9 @@ export default defineComponent({
475
483
  const { activeName } = reactData
476
484
  const activeDefaultTab = tabList.find(item => item.name === activeName)
477
485
  if (destroyOnClose) {
478
- return activeDefaultTab ? [renderTabPane(activeDefaultTab)] : createCommentVNode()
486
+ return [activeDefaultTab ? renderTabPane(activeDefaultTab) : createCommentVNode()]
479
487
  }
480
- return tabList.map(renderTabPane)
488
+ return tabList.map((item) => renderTabPane(item))
481
489
  }
482
490
 
483
491
  const renderVN = () => {
@@ -552,7 +560,9 @@ export default defineComponent({
552
560
  }
553
561
 
554
562
  watch(() => reactData.resizeFlag, () => {
555
- nextTick(updateTabStyle)
563
+ nextTick(() => {
564
+ updateTabStyle()
565
+ })
556
566
  })
557
567
 
558
568
  nextTick(() => {
@@ -567,13 +577,13 @@ export default defineComponent({
567
577
  globalEvents.off($xeTabs, 'resize')
568
578
  })
569
579
 
570
- $xeTabs.renderVN = renderVN
571
-
572
580
  provide('$xeTabs', $xeTabs)
573
581
 
574
582
  addInitName(props.modelValue, null)
575
583
  initDefaultName(reactData.staticTabs.length ? reactData.staticTabs : props.options)
576
584
 
585
+ $xeTabs.renderVN = renderVN
586
+
577
587
  return $xeTabs
578
588
  },
579
589
  render () {
@@ -12,27 +12,45 @@ export default defineComponent({
12
12
  props: {
13
13
  modelValue: [String, Number] as PropType<VxeTextareaPropTypes.ModelValue>,
14
14
  className: String as PropType<VxeTextareaPropTypes.ClassName>,
15
- immediate: { type: Boolean as PropType<VxeTextareaPropTypes.Immediate>, default: true },
15
+ immediate: {
16
+ type: Boolean as PropType<VxeTextareaPropTypes.Immediate>,
17
+ default: true
18
+ },
16
19
  name: String as PropType<VxeTextareaPropTypes.Name>,
17
20
  readonly: {
18
21
  type: Boolean as PropType<VxeTextareaPropTypes.Readonly>,
19
22
  default: null
20
23
  },
21
- editable: { type: Boolean as PropType<VxeTextareaPropTypes.Readonly>, default: true },
24
+ editable: {
25
+ type: Boolean as PropType<VxeTextareaPropTypes.Readonly>,
26
+ default: true
27
+ },
22
28
  disabled: {
23
29
  type: Boolean as PropType<VxeTextareaPropTypes.Disabled>,
24
30
  default: null
25
31
  },
26
32
  placeholder: String as PropType<VxeTextareaPropTypes.Placeholder>,
27
33
  maxLength: [String, Number] as PropType<VxeTextareaPropTypes.MaxLength>,
28
- rows: { type: [String, Number] as PropType<VxeTextareaPropTypes.Rows>, default: null },
29
- cols: { type: [String, Number] as PropType<VxeTextareaPropTypes.Cols>, default: null },
34
+ rows: {
35
+ type: [String, Number] as PropType<VxeTextareaPropTypes.Rows>,
36
+ default: null
37
+ },
38
+ cols: {
39
+ type: [String, Number] as PropType<VxeTextareaPropTypes.Cols>,
40
+ default: null
41
+ },
30
42
  showWordCount: Boolean as PropType<VxeTextareaPropTypes.ShowWordCount>,
31
43
  countMethod: Function as PropType<VxeTextareaPropTypes.CountMethod>,
32
44
  autosize: [Boolean, Object] as PropType<VxeTextareaPropTypes.Autosize>,
33
45
  form: String as PropType<VxeTextareaPropTypes.Form>,
34
- resize: { type: String as PropType<VxeTextareaPropTypes.Resize>, default: () => getConfig().textarea.resize },
35
- size: { type: String as PropType<VxeTextareaPropTypes.Size>, default: () => getConfig().textarea.size || getConfig().size },
46
+ resize: {
47
+ type: String as PropType<VxeTextareaPropTypes.Resize>,
48
+ default: () => getConfig().textarea.resize
49
+ },
50
+ size: {
51
+ type: String as PropType<VxeTextareaPropTypes.Size>,
52
+ default: () => getConfig().textarea.size || getConfig().size
53
+ },
36
54
  // 已废弃
37
55
  maxlength: [String, Number] as PropType<VxeTextareaPropTypes.Maxlength>
38
56
  },
@@ -193,7 +211,7 @@ export default defineComponent({
193
211
  $xeTextarea.dispatchEvent(evnt.type, { value }, evnt)
194
212
  }
195
213
 
196
- const emitUpdate = (value: string, evnt: Event) => {
214
+ const handleChange = (value: string, evnt: Event) => {
197
215
  reactData.inputValue = value
198
216
  emit('update:modelValue', value)
199
217
  if (XEUtils.toValueString(props.modelValue) !== value) {
@@ -211,7 +229,7 @@ export default defineComponent({
211
229
  const value = textElem.value
212
230
  reactData.inputValue = value
213
231
  if (immediate) {
214
- emitUpdate(value, evnt)
232
+ handleChange(value, evnt)
215
233
  }
216
234
  $xeTextarea.dispatchEvent('input', { value }, evnt)
217
235
  handleResize()
@@ -222,7 +240,7 @@ export default defineComponent({
222
240
  if (immediate) {
223
241
  triggerEvent(evnt)
224
242
  } else {
225
- emitUpdate(reactData.inputValue, evnt)
243
+ handleChange(reactData.inputValue, evnt)
226
244
  }
227
245
  }
228
246
 
@@ -230,7 +248,7 @@ export default defineComponent({
230
248
  const { immediate } = props
231
249
  const { inputValue } = reactData
232
250
  if (!immediate) {
233
- emitUpdate(inputValue, evnt)
251
+ handleChange(inputValue, evnt)
234
252
  }
235
253
  $xeTextarea.dispatchEvent('blur', { value: inputValue }, evnt)
236
254
  }