vxe-table 4.1.20 → 4.2.0-beta.2

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 (324) hide show
  1. package/README.en.md +2 -4
  2. package/README.md +2 -3
  3. package/README.zh-TW.md +2 -4
  4. package/es/button/index.js +1 -1
  5. package/es/checkbox/index.js +1 -1
  6. package/es/checkbox-group/index.js +1 -1
  7. package/es/colgroup/index.js +3 -2
  8. package/es/column/index.js +3 -2
  9. package/es/edit/src/hook.js +2 -1
  10. package/es/export/index.js +2 -2
  11. package/es/export/src/hook.js +2 -1
  12. package/es/export/src/util.js +3 -5
  13. package/es/filter/index.js +1 -1
  14. package/es/filter/src/hook.js +17 -10
  15. package/es/footer/index.js +1 -1
  16. package/es/footer/src/footer.js +3 -2
  17. package/es/form/index.js +1 -1
  18. package/es/form/src/form-gather.js +3 -3
  19. package/es/form/src/form-item.js +4 -4
  20. package/es/form/src/form.js +36 -43
  21. package/es/form/src/render.js +15 -10
  22. package/es/form/src/util.js +6 -0
  23. package/es/form-gather/index.js +1 -1
  24. package/es/form-item/index.js +1 -1
  25. package/es/grid/index.js +1 -1
  26. package/es/grid/src/grid.js +2 -1
  27. package/es/header/index.js +1 -1
  28. package/es/header/src/header.js +1 -1
  29. package/es/input/index.js +1 -1
  30. package/es/input/src/date.js +41 -0
  31. package/es/input/src/input.js +4 -51
  32. package/es/input/src/number.js +10 -0
  33. package/es/list/index.js +1 -1
  34. package/es/menu/index.js +1 -1
  35. package/es/modal/index.js +1 -1
  36. package/es/modal/src/modal.js +2 -1
  37. package/es/optgroup/index.js +1 -1
  38. package/es/option/index.js +1 -1
  39. package/es/pager/index.js +1 -1
  40. package/es/pager/src/pager.js +13 -2
  41. package/es/pulldown/index.js +1 -1
  42. package/es/radio/index.js +1 -1
  43. package/es/radio-button/index.js +1 -1
  44. package/es/radio-group/index.js +1 -1
  45. package/es/select/index.js +1 -1
  46. package/es/select/style.css +1 -1
  47. package/es/style.css +1 -1
  48. package/es/style.min.css +1 -1
  49. package/es/switch/index.js +1 -1
  50. package/es/table/index.js +1 -1
  51. package/es/table/src/body.js +32 -11
  52. package/es/table/src/cell.js +3 -3
  53. package/es/table/src/column.js +3 -1
  54. package/es/table/src/columnInfo.js +5 -4
  55. package/es/table/src/emits.js +5 -1
  56. package/es/table/src/props.js +5 -2
  57. package/es/table/src/table.js +120 -86
  58. package/es/table/src/util.js +5 -3
  59. package/es/textarea/index.js +1 -1
  60. package/es/toolbar/index.js +1 -1
  61. package/es/toolbar/src/toolbar.js +2 -1
  62. package/es/tools/dom.js +9 -0
  63. package/es/tools/log.js +13 -0
  64. package/es/tools/utils.js +0 -12
  65. package/es/tooltip/index.js +1 -1
  66. package/es/tooltip/src/tooltip.js +85 -45
  67. package/es/tooltip/style.css +1 -1
  68. package/es/v-x-e-table/index.js +1 -0
  69. package/es/v-x-e-table/src/conf.js +12 -7
  70. package/es/v-x-e-table/src/interceptor.js +1 -1
  71. package/es/v-x-e-table/src/renderer.js +2 -1
  72. package/es/v-x-e-table/src/store.js +1 -1
  73. package/helper/vetur/attributes.json +31 -11
  74. package/helper/vetur/tags.json +8 -3
  75. package/lib/button/index.js +3 -2
  76. package/lib/button/index.min.js +1 -1
  77. package/lib/checkbox/index.js +3 -2
  78. package/lib/checkbox/index.min.js +1 -1
  79. package/lib/checkbox-group/index.js +3 -2
  80. package/lib/checkbox-group/index.min.js +1 -1
  81. package/lib/colgroup/index.js +6 -4
  82. package/lib/colgroup/index.min.js +1 -1
  83. package/lib/column/index.js +6 -4
  84. package/lib/column/index.min.js +1 -1
  85. package/lib/edit/src/hook.js +7 -5
  86. package/lib/edit/src/hook.min.js +1 -1
  87. package/lib/export/index.js +5 -4
  88. package/lib/export/index.min.js +1 -1
  89. package/lib/export/src/hook.js +14 -12
  90. package/lib/export/src/hook.min.js +1 -1
  91. package/lib/export/src/util.js +7 -9
  92. package/lib/export/src/util.min.js +1 -1
  93. package/lib/filter/index.js +3 -2
  94. package/lib/filter/index.min.js +1 -1
  95. package/lib/filter/src/hook.js +24 -13
  96. package/lib/filter/src/hook.min.js +1 -1
  97. package/lib/footer/index.js +3 -2
  98. package/lib/footer/index.min.js +1 -1
  99. package/lib/footer/src/footer.js +7 -3
  100. package/lib/footer/src/footer.min.js +1 -1
  101. package/lib/form/index.js +3 -2
  102. package/lib/form/index.min.js +1 -1
  103. package/lib/form/src/form-gather.js +3 -3
  104. package/lib/form/src/form-gather.min.js +1 -1
  105. package/lib/form/src/form-item.js +3 -3
  106. package/lib/form/src/form-item.min.js +1 -1
  107. package/lib/form/src/form.js +45 -58
  108. package/lib/form/src/form.min.js +1 -1
  109. package/lib/form/src/render.js +24 -10
  110. package/lib/form/src/render.min.js +1 -1
  111. package/lib/form/src/util.js +11 -0
  112. package/lib/form/src/util.min.js +1 -1
  113. package/lib/form-gather/index.js +3 -2
  114. package/lib/form-gather/index.min.js +1 -1
  115. package/lib/form-item/index.js +3 -2
  116. package/lib/form-item/index.min.js +1 -1
  117. package/lib/grid/index.js +3 -2
  118. package/lib/grid/index.min.js +1 -1
  119. package/lib/grid/src/grid.js +16 -14
  120. package/lib/grid/src/grid.min.js +1 -1
  121. package/lib/header/index.js +3 -2
  122. package/lib/header/index.min.js +1 -1
  123. package/lib/header/src/header.js +1 -1
  124. package/lib/header/src/header.min.js +1 -1
  125. package/lib/index.umd.js +584 -415
  126. package/lib/index.umd.min.js +1 -2
  127. package/lib/input/index.js +3 -2
  128. package/lib/input/index.min.js +1 -1
  129. package/lib/input/src/date.js +56 -0
  130. package/lib/input/src/date.min.js +1 -0
  131. package/lib/input/src/input.js +13 -67
  132. package/lib/input/src/input.min.js +1 -1
  133. package/lib/input/src/number.js +23 -0
  134. package/lib/input/src/number.min.js +1 -0
  135. package/lib/list/index.js +3 -2
  136. package/lib/list/index.min.js +1 -1
  137. package/lib/menu/index.js +3 -2
  138. package/lib/menu/index.min.js +1 -1
  139. package/lib/modal/index.js +3 -2
  140. package/lib/modal/index.min.js +1 -1
  141. package/lib/modal/src/modal.js +3 -1
  142. package/lib/modal/src/modal.min.js +1 -1
  143. package/lib/optgroup/index.js +3 -2
  144. package/lib/optgroup/index.min.js +1 -1
  145. package/lib/option/index.js +3 -2
  146. package/lib/option/index.min.js +1 -1
  147. package/lib/pager/index.js +3 -2
  148. package/lib/pager/index.min.js +1 -1
  149. package/lib/pager/src/pager.js +15 -1
  150. package/lib/pager/src/pager.min.js +1 -1
  151. package/lib/pulldown/index.js +3 -2
  152. package/lib/pulldown/index.min.js +1 -1
  153. package/lib/radio/index.js +3 -2
  154. package/lib/radio/index.min.js +1 -1
  155. package/lib/radio-button/index.js +3 -2
  156. package/lib/radio-button/index.min.js +1 -1
  157. package/lib/radio-group/index.js +3 -2
  158. package/lib/radio-group/index.min.js +1 -1
  159. package/lib/select/index.js +3 -2
  160. package/lib/select/index.min.js +1 -1
  161. package/lib/select/style/style.css +1 -1
  162. package/lib/select/style/style.min.css +1 -1
  163. package/lib/style.css +1 -1
  164. package/lib/style.min.css +1 -1
  165. package/lib/switch/index.js +3 -2
  166. package/lib/switch/index.min.js +1 -1
  167. package/lib/table/index.js +3 -2
  168. package/lib/table/index.min.js +1 -1
  169. package/lib/table/src/body.js +32 -11
  170. package/lib/table/src/body.min.js +1 -1
  171. package/lib/table/src/cell.js +3 -3
  172. package/lib/table/src/cell.min.js +1 -1
  173. package/lib/table/src/column.js +3 -1
  174. package/lib/table/src/column.min.js +1 -1
  175. package/lib/table/src/columnInfo.js +13 -9
  176. package/lib/table/src/columnInfo.min.js +1 -1
  177. package/lib/table/src/emits.js +1 -1
  178. package/lib/table/src/emits.min.js +1 -1
  179. package/lib/table/src/props.js +5 -2
  180. package/lib/table/src/table.js +187 -148
  181. package/lib/table/src/table.min.js +1 -1
  182. package/lib/table/src/util.js +5 -3
  183. package/lib/table/src/util.min.js +1 -1
  184. package/lib/textarea/index.js +3 -2
  185. package/lib/textarea/index.min.js +1 -1
  186. package/lib/toolbar/index.js +3 -2
  187. package/lib/toolbar/index.min.js +1 -1
  188. package/lib/toolbar/src/toolbar.js +4 -2
  189. package/lib/toolbar/src/toolbar.min.js +1 -1
  190. package/lib/tools/dom.js +12 -1
  191. package/lib/tools/dom.min.js +1 -1
  192. package/lib/tools/log.js +29 -0
  193. package/lib/tools/log.min.js +1 -0
  194. package/lib/tools/utils.js +0 -20
  195. package/lib/tools/utils.min.js +1 -1
  196. package/lib/tooltip/index.js +3 -3
  197. package/lib/tooltip/index.min.js +1 -1
  198. package/lib/tooltip/src/tooltip.js +114 -60
  199. package/lib/tooltip/src/tooltip.min.js +1 -1
  200. package/lib/tooltip/style/style.css +1 -1
  201. package/lib/tooltip/style/style.min.css +1 -1
  202. package/lib/v-x-e-table/index.js +1 -0
  203. package/lib/v-x-e-table/index.min.js +1 -1
  204. package/lib/v-x-e-table/src/conf.js +12 -7
  205. package/lib/v-x-e-table/src/conf.min.js +1 -1
  206. package/lib/v-x-e-table/src/interceptor.js +3 -3
  207. package/lib/v-x-e-table/src/interceptor.min.js +1 -1
  208. package/lib/v-x-e-table/src/renderer.js +3 -1
  209. package/lib/v-x-e-table/src/renderer.min.js +1 -1
  210. package/lib/v-x-e-table/src/store.js +2 -2
  211. package/lib/v-x-e-table/src/store.min.js +1 -1
  212. package/package.json +4 -4
  213. package/packages/button/index.ts +2 -1
  214. package/packages/checkbox/index.ts +2 -1
  215. package/packages/checkbox-group/index.ts +2 -1
  216. package/packages/colgroup/index.ts +4 -2
  217. package/packages/column/index.ts +4 -2
  218. package/packages/edit/src/hook.ts +2 -1
  219. package/packages/export/index.ts +3 -2
  220. package/packages/export/src/hook.ts +2 -1
  221. package/packages/export/src/util.ts +4 -6
  222. package/packages/filter/index.ts +2 -1
  223. package/packages/filter/src/hook.ts +17 -10
  224. package/packages/footer/index.ts +2 -1
  225. package/packages/footer/src/footer.ts +3 -2
  226. package/packages/form/index.ts +2 -1
  227. package/packages/form/src/form-gather.ts +3 -3
  228. package/packages/form/src/form-item.ts +4 -4
  229. package/packages/form/src/form.ts +38 -46
  230. package/packages/form/src/render.ts +8 -6
  231. package/packages/form/src/util.ts +8 -1
  232. package/packages/form-gather/index.ts +2 -1
  233. package/packages/form-item/index.ts +2 -1
  234. package/packages/grid/index.ts +2 -1
  235. package/packages/grid/src/grid.ts +2 -1
  236. package/packages/header/index.ts +2 -1
  237. package/packages/header/src/header.ts +1 -1
  238. package/packages/input/index.ts +2 -1
  239. package/packages/input/src/date.ts +42 -0
  240. package/packages/input/src/input.ts +3 -51
  241. package/packages/input/src/number.ts +12 -0
  242. package/packages/list/index.ts +2 -1
  243. package/packages/menu/index.ts +2 -1
  244. package/packages/modal/index.ts +2 -1
  245. package/packages/modal/src/modal.ts +2 -1
  246. package/packages/optgroup/index.ts +2 -1
  247. package/packages/option/index.ts +2 -1
  248. package/packages/pager/index.ts +2 -1
  249. package/packages/pager/src/pager.ts +17 -3
  250. package/packages/pulldown/index.ts +2 -1
  251. package/packages/radio/index.ts +2 -1
  252. package/packages/radio-button/index.ts +2 -1
  253. package/packages/radio-group/index.ts +2 -1
  254. package/packages/select/index.ts +2 -1
  255. package/packages/switch/index.ts +2 -1
  256. package/packages/table/index.ts +2 -1
  257. package/packages/table/src/body.ts +33 -12
  258. package/packages/table/src/cell.ts +3 -3
  259. package/packages/table/src/column.ts +3 -1
  260. package/packages/table/src/columnInfo.ts +5 -3
  261. package/packages/table/src/emits.ts +5 -1
  262. package/packages/table/src/props.ts +5 -2
  263. package/packages/table/src/table.ts +120 -84
  264. package/packages/table/src/util.ts +5 -3
  265. package/packages/textarea/index.ts +2 -1
  266. package/packages/toolbar/index.ts +2 -1
  267. package/packages/toolbar/src/toolbar.ts +2 -1
  268. package/packages/tools/dom.ts +11 -0
  269. package/packages/tools/log.ts +16 -0
  270. package/packages/tools/utils.ts +0 -15
  271. package/packages/tooltip/index.ts +2 -1
  272. package/packages/tooltip/src/tooltip.ts +87 -46
  273. package/packages/v-x-e-table/index.ts +1 -0
  274. package/packages/v-x-e-table/src/conf.ts +12 -7
  275. package/packages/v-x-e-table/src/interceptor.ts +1 -1
  276. package/packages/v-x-e-table/src/renderer.ts +2 -1
  277. package/packages/v-x-e-table/src/store.ts +1 -1
  278. package/styles/select.scss +1 -1
  279. package/styles/tooltip.scss +1 -1
  280. package/types/all.d.ts +2 -2
  281. package/types/button.d.ts +54 -54
  282. package/types/checkbox-group.d.ts +21 -21
  283. package/types/checkbox.d.ts +30 -30
  284. package/types/colgroup.d.ts +16 -16
  285. package/types/column.d.ts +172 -161
  286. package/types/component.d.ts +9 -9
  287. package/types/edit.d.ts +35 -35
  288. package/types/export.d.ts +101 -101
  289. package/types/filter.d.ts +19 -19
  290. package/types/footer.d.ts +1 -1
  291. package/types/form-gather.d.ts +3 -3
  292. package/types/form-item.d.ts +68 -66
  293. package/types/form.d.ts +136 -131
  294. package/types/grid.d.ts +257 -257
  295. package/types/header.d.ts +1 -1
  296. package/types/icon.d.ts +1 -1
  297. package/types/input.d.ts +162 -162
  298. package/types/keyboard.d.ts +6 -6
  299. package/types/list.d.ts +54 -54
  300. package/types/menu.d.ts +33 -33
  301. package/types/modal.d.ts +160 -160
  302. package/types/optgroup.d.ts +5 -5
  303. package/types/option.d.ts +19 -19
  304. package/types/pager.d.ts +65 -61
  305. package/types/plugins/pro.d.ts +245 -215
  306. package/types/pulldown.d.ts +36 -36
  307. package/types/radio-button.d.ts +25 -25
  308. package/types/radio-group.d.ts +20 -20
  309. package/types/radio.d.ts +27 -27
  310. package/types/select.d.ts +82 -82
  311. package/types/switch.d.ts +40 -40
  312. package/types/table.d.ts +1422 -1336
  313. package/types/textarea.d.ts +71 -71
  314. package/types/toolbar.d.ts +65 -65
  315. package/types/tooltip.d.ts +50 -44
  316. package/types/v-x-e-table/commands.d.ts +12 -12
  317. package/types/v-x-e-table/formats.d.ts +10 -10
  318. package/types/v-x-e-table/hooks.d.ts +9 -9
  319. package/types/v-x-e-table/index.d.ts +51 -43
  320. package/types/v-x-e-table/interceptor.d.ts +26 -26
  321. package/types/v-x-e-table/menus.d.ts +13 -13
  322. package/types/v-x-e-table/renderer.d.ts +128 -128
  323. package/types/v-x-e-table/setup.d.ts +55 -55
  324. package/types/validator.d.ts +28 -28
@@ -1,7 +1,8 @@
1
1
  import { defineComponent, getCurrentInstance, h, createCommentVNode, ComponentPublicInstance, resolveComponent, ComponentOptions, reactive, ref, Ref, provide, inject, nextTick, onActivated, onDeactivated, onBeforeUnmount, onUnmounted, watch, computed, ComputedRef, onMounted } from 'vue'
2
2
  import XEUtils from 'xe-utils'
3
- import { browse, isPx, isScale, hasClass, addClass, removeClass, getEventTargetNode, getPaddingTopBottomSize, setScrollTop, setScrollLeft } from '../../tools/dom'
4
- import { warnLog, errLog, getLog, getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../tools/utils'
3
+ import { browse, isPx, isScale, hasClass, addClass, removeClass, getEventTargetNode, getPaddingTopBottomSize, setScrollTop, setScrollLeft, isNodeElement } from '../../tools/dom'
4
+ import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../tools/utils'
5
+ import { warnLog, errLog, getLog } from '../../tools/log'
5
6
  import { createResizeEvent, XEResizeObserver } from '../../tools/resize'
6
7
  import { GlobalEvent, hasEventKey, EVENT_KEYS } from '../../tools/event'
7
8
  import { useSize } from '../../hooks/size'
@@ -161,6 +162,14 @@ export default defineComponent({
161
162
  insertList: [],
162
163
  removeList: []
163
164
  },
165
+ // 存放 tooltip 相关信息
166
+ tooltipStore: {
167
+ row: null,
168
+ column: null,
169
+ content: null,
170
+ visible: false,
171
+ currOpts: null
172
+ },
164
173
  // 存放数据校验相关信息
165
174
  validStore: {
166
175
  visible: false,
@@ -233,8 +242,6 @@ export default defineComponent({
233
242
  startIndex: 0,
234
243
  endIndex: 0
235
244
  },
236
- // 存放 tooltip 相关信息
237
- tooltipStore: {},
238
245
  // 表格宽度
239
246
  tableWidth: 0,
240
247
  // 表格高度
@@ -280,7 +287,6 @@ export default defineComponent({
280
287
  fullColumnIdData: {},
281
288
  fullColumnFieldData: {},
282
289
  inited: false,
283
- tooltipActive: false,
284
290
  tooltipTimeout: null,
285
291
  initStatus: false,
286
292
  isActivated: false
@@ -361,22 +367,17 @@ export default defineComponent({
361
367
 
362
368
  let computeTooltipOpts = ref() as ComputedRef<VxeTablePropTypes.TooltipOpts>
363
369
 
364
- const handleTooltipLeaveMethod = () => {
365
- const tooltipOpts = computeTooltipOpts.value
366
- setTimeout(() => {
367
- if (!internalData.tooltipActive) {
368
- tableMethods.closeTooltip()
369
- }
370
- }, tooltipOpts.leaveDelay)
371
- return false
372
- }
373
-
374
370
  computeTooltipOpts = computed(() => {
375
- const opts: VxeTablePropTypes.TooltipOpts = Object.assign({ leaveDelay: 300 }, GlobalConfig.table.tooltipConfig, props.tooltipConfig)
376
- if (opts.enterable) {
377
- opts.leaveMethod = handleTooltipLeaveMethod
371
+ return Object.assign({}, GlobalConfig.tooltip, GlobalConfig.table.tooltipConfig, props.tooltipConfig)
372
+ })
373
+
374
+ const computeTipConfig = computed(() => {
375
+ const { tooltipStore } = reactData
376
+ const tooltipOpts = computeTooltipOpts.value
377
+ return {
378
+ ...tooltipOpts,
379
+ ...tooltipStore.currOpts
378
380
  }
379
- return opts
380
381
  })
381
382
 
382
383
  const computeValidTipOpts = computed(() => {
@@ -1420,7 +1421,7 @@ export default defineComponent({
1420
1421
  }
1421
1422
  } else if (layout === 'body') {
1422
1423
  const emptyBlockElem = elemStore[`${name}-${layout}-emptyBlock`]
1423
- if (wrapperElem) {
1424
+ if (isNodeElement(wrapperElem)) {
1424
1425
  if (customMaxHeight) {
1425
1426
  wrapperElem.style.maxHeight = `${fixedType ? customMaxHeight - headerHeight - (showFooter ? 0 : scrollbarHeight) : customMaxHeight - headerHeight}px`
1426
1427
  } else {
@@ -1434,7 +1435,7 @@ export default defineComponent({
1434
1435
 
1435
1436
  // 如果是固定列
1436
1437
  if (fixedWrapperElem) {
1437
- if (wrapperElem) {
1438
+ if (isNodeElement(wrapperElem)) {
1438
1439
  wrapperElem.style.top = `${headerHeight}px`
1439
1440
  }
1440
1441
  fixedWrapperElem.style.height = `${(customHeight > 0 ? customHeight - headerHeight - footerHeight : tableHeight) + headerHeight + footerHeight - scrollbarHeight * (showFooter ? 2 : 1)}px`
@@ -1450,14 +1451,6 @@ export default defineComponent({
1450
1451
  tableColumn = fixedColumn
1451
1452
  } else {
1452
1453
  tableColumn = visibleColumn
1453
- // 检查固定列是否被合并,合并范围是否超出固定列
1454
- // if (mergeList.length && !isMergeLeftFixedExceeded && fixedType === 'left') {
1455
- // tableColumn = fixedColumn
1456
- // } else if (mergeList.length && !isMergeRightFixedExceeded && fixedType === 'right') {
1457
- // tableColumn = fixedColumn
1458
- // } else {
1459
- // tableColumn = visibleColumn
1460
- // }
1461
1454
  }
1462
1455
  } else {
1463
1456
  tableColumn = visibleColumn
@@ -1483,14 +1476,6 @@ export default defineComponent({
1483
1476
  tableColumn = fixedColumn
1484
1477
  } else {
1485
1478
  tableColumn = visibleColumn
1486
- // 检查固定列是否被合并,合并范围是否超出固定列
1487
- // if (mergeFooterList.length && !isMergeFooterLeftFixedExceeded && fixedType === 'left') {
1488
- // tableColumn = fixedColumn
1489
- // } else if (mergeFooterList.length && !isMergeFooterRightFixedExceeded && fixedType === 'right') {
1490
- // tableColumn = fixedColumn
1491
- // } else {
1492
- // tableColumn = visibleColumn
1493
- // }
1494
1479
  }
1495
1480
  } else {
1496
1481
  tableColumn = visibleColumn
@@ -1498,7 +1483,7 @@ export default defineComponent({
1498
1483
  }
1499
1484
  tWidth = tableColumn.reduce((previous, column) => previous + column.renderWidth, 0)
1500
1485
 
1501
- if (wrapperElem) {
1486
+ if (isNodeElement(wrapperElem)) {
1502
1487
  // 如果是固定列
1503
1488
  if (fixedWrapperElem) {
1504
1489
  wrapperElem.style.top = `${customHeight > 0 ? customHeight - footerHeight : tableHeight + headerHeight}px`
@@ -2387,11 +2372,29 @@ export default defineComponent({
2387
2372
  })
2388
2373
  },
2389
2374
  /**
2390
- * 手动处理数据
2375
+ * 手动处理数据,用于手动排序与筛选
2391
2376
  * 对于手动更改了排序、筛选...等条件后需要重新处理数据时可能会用到
2392
2377
  */
2393
2378
  updateData () {
2394
- return tablePrivateMethods.handleTableData(true).then(tableMethods.updateFooter).then(() => tableMethods.recalculate())
2379
+ const { scrollXLoad, scrollYLoad } = reactData
2380
+ return tablePrivateMethods.handleTableData(true).then(() => {
2381
+ tableMethods.updateFooter()
2382
+ if (scrollXLoad || scrollYLoad) {
2383
+ if (scrollXLoad) {
2384
+ tablePrivateMethods.updateScrollXSpace()
2385
+ }
2386
+ if (scrollYLoad) {
2387
+ tablePrivateMethods.updateScrollYSpace()
2388
+ }
2389
+ return tableMethods.refreshScroll()
2390
+ }
2391
+ }).then(() => {
2392
+ tablePrivateMethods.updateCellAreas()
2393
+ return tableMethods.recalculate(true)
2394
+ }).then(() => {
2395
+ // 存在滚动行为未结束情况
2396
+ setTimeout(() => $xetable.recalculate(), 50)
2397
+ })
2395
2398
  },
2396
2399
  /**
2397
2400
  * 重新加载数据,不会清空表格状态
@@ -2924,16 +2927,22 @@ export default defineComponent({
2924
2927
  const leftBodyElem = leftBody ? leftBody.$el as HTMLDivElement : null
2925
2928
  const rightBodyElem = rightBody ? rightBody.$el as HTMLDivElement : null
2926
2929
  const tableFooterElem = tableFooter ? tableFooter.$el as HTMLDivElement : null
2927
- // 还原滚动条位置
2928
- if (lastScrollLeft || lastScrollTop) {
2929
- return restoreScrollLocation($xetable, lastScrollLeft, lastScrollTop)
2930
- }
2931
- // 重置
2932
- setScrollTop(tableBodyElem, lastScrollTop)
2933
- setScrollTop(leftBodyElem, lastScrollTop)
2934
- setScrollTop(rightBodyElem, lastScrollTop)
2935
- setScrollLeft(tableFooterElem, lastScrollLeft)
2936
- return nextTick()
2930
+ return new Promise(resolve => {
2931
+ // 还原滚动条位置
2932
+ if (lastScrollLeft || lastScrollTop) {
2933
+ return restoreScrollLocation($xetable, lastScrollLeft, lastScrollTop).then(resolve).then(() => {
2934
+ // 存在滚动行为未结束情况
2935
+ setTimeout(resolve, 30)
2936
+ })
2937
+ }
2938
+ // 重置
2939
+ setScrollTop(tableBodyElem, lastScrollTop)
2940
+ setScrollTop(leftBodyElem, lastScrollTop)
2941
+ setScrollTop(rightBodyElem, lastScrollTop)
2942
+ setScrollLeft(tableFooterElem, lastScrollLeft)
2943
+ // 存在滚动行为未结束情况
2944
+ setTimeout(resolve, 30)
2945
+ })
2937
2946
  },
2938
2947
  /**
2939
2948
  * 计算单元格列宽,动态分配可用剩余空间
@@ -2969,7 +2978,7 @@ export default defineComponent({
2969
2978
  * 关闭 tooltip
2970
2979
  */
2971
2980
  closeTooltip () {
2972
- const { tooltipStore } = internalData
2981
+ const { tooltipStore } = reactData
2973
2982
  const $tooltip = refTooltip.value
2974
2983
  const $commTip = refCommTooltip.value
2975
2984
  if (tooltipStore.visible) {
@@ -4119,6 +4128,7 @@ export default defineComponent({
4119
4128
  const isEsc = hasEventKey(evnt, EVENT_KEYS.ESCAPE)
4120
4129
  if (isEsc) {
4121
4130
  tablePrivateMethods.preventEvent(evnt, 'event.keydown', null, () => {
4131
+ tableMethods.dispatchEvent('keydown-start', {}, evnt)
4122
4132
  if (keyboardConfig && mouseConfig && mouseOpts.area && $xetable.handleKeyboardEvent) {
4123
4133
  $xetable.handleKeyboardEvent(evnt)
4124
4134
  } else if (actived.row || filterStore.visible || ctxMenuStore.visible) {
@@ -4141,6 +4151,7 @@ export default defineComponent({
4141
4151
  }
4142
4152
  }
4143
4153
  tableMethods.dispatchEvent('keydown', {}, evnt)
4154
+ tableMethods.dispatchEvent('keydown-end', {}, evnt)
4144
4155
  })
4145
4156
  }
4146
4157
  }
@@ -4436,10 +4447,16 @@ export default defineComponent({
4436
4447
  tableMethods.recalculate(true)
4437
4448
  }
4438
4449
 
4439
- const handleTargetEnterEvent = () => {
4450
+ const handleTargetEnterEvent = (isClear: boolean) => {
4451
+ const $tooltip = refTooltip.value
4440
4452
  clearTimeout(internalData.tooltipTimeout)
4441
- internalData.tooltipActive = true
4442
- tableMethods.closeTooltip()
4453
+ if (isClear) {
4454
+ tableMethods.closeTooltip()
4455
+ } else {
4456
+ if ($tooltip) {
4457
+ $tooltip.setActived(true)
4458
+ }
4459
+ }
4443
4460
  }
4444
4461
 
4445
4462
  /**
@@ -4450,11 +4467,10 @@ export default defineComponent({
4450
4467
  */
4451
4468
  const handleTooltip = (evnt: MouseEvent, cell: any, overflowElem: any, tipElem: any, params: any) => {
4452
4469
  params.cell = cell
4453
- const { tooltipStore } = internalData
4470
+ const { tooltipStore } = reactData
4454
4471
  const tooltipOpts = computeTooltipOpts.value
4455
4472
  const { column, row } = params
4456
4473
  const { showAll, contentMethod } = tooltipOpts
4457
- const $tooltip = refTooltip.value
4458
4474
  const customContent = contentMethod ? contentMethod(params) : null
4459
4475
  const useCustom = contentMethod && !XEUtils.eqNull(customContent)
4460
4476
  const content = useCustom ? customContent : (column.type === 'html' ? overflowElem.innerText : overflowElem.textContent).trim()
@@ -4463,11 +4479,15 @@ export default defineComponent({
4463
4479
  Object.assign(tooltipStore, {
4464
4480
  row,
4465
4481
  column,
4466
- visible: true
4482
+ visible: true,
4483
+ currOpts: null
4484
+ })
4485
+ nextTick(() => {
4486
+ const $tooltip = refTooltip.value
4487
+ if ($tooltip) {
4488
+ $tooltip.open(isCellOverflow ? overflowElem : (tipElem || overflowElem), formatText(content))
4489
+ }
4467
4490
  })
4468
- if ($tooltip) {
4469
- $tooltip.open(isCellOverflow ? overflowElem : (tipElem || overflowElem), formatText(content))
4470
- }
4471
4491
  }
4472
4492
  return nextTick()
4473
4493
  }
@@ -4909,26 +4929,29 @@ export default defineComponent({
4909
4929
  },
4910
4930
  triggerHeaderHelpEvent (evnt, params) {
4911
4931
  const { column } = params
4912
- const { titleHelp } = column
4913
- if (titleHelp.content || titleHelp.message) {
4914
- const { tooltipStore } = internalData
4915
- const $tooltip = refTooltip.value
4916
- const content = getFuncText(titleHelp.content || titleHelp.message)
4917
- handleTargetEnterEvent()
4932
+ const titlePrefix = column.titlePrefix || column.titleHelp
4933
+ if (titlePrefix.content || titlePrefix.message) {
4934
+ const { tooltipStore } = reactData
4935
+ const content = getFuncText(titlePrefix.content || titlePrefix.message)
4936
+ handleTargetEnterEvent(true)
4918
4937
  tooltipStore.visible = true
4919
- if ($tooltip) {
4920
- $tooltip.open(evnt.currentTarget, content)
4921
- }
4938
+ tooltipStore.currOpts = { ...titlePrefix, content: null }
4939
+ nextTick(() => {
4940
+ const $tooltip = refTooltip.value
4941
+ if ($tooltip) {
4942
+ $tooltip.open(evnt.currentTarget, content)
4943
+ }
4944
+ })
4922
4945
  }
4923
4946
  },
4924
4947
  /**
4925
4948
  * 触发表头 tooltip 事件
4926
4949
  */
4927
4950
  triggerHeaderTooltipEvent (evnt, params) {
4928
- const { tooltipStore } = internalData
4951
+ const { tooltipStore } = reactData
4929
4952
  const { column } = params
4930
4953
  const titleElem = evnt.currentTarget
4931
- handleTargetEnterEvent()
4954
+ handleTargetEnterEvent(true)
4932
4955
  if (tooltipStore.column !== column || !tooltipStore.visible) {
4933
4956
  handleTooltip(evnt, titleElem, titleElem, null, params)
4934
4957
  }
@@ -4939,12 +4962,12 @@ export default defineComponent({
4939
4962
  triggerBodyTooltipEvent (evnt, params) {
4940
4963
  const { editConfig } = props
4941
4964
  const { editStore } = reactData
4942
- const { tooltipStore } = internalData
4965
+ const { tooltipStore } = reactData
4943
4966
  const editOpts = computeEditOpts.value
4944
4967
  const { actived } = editStore
4945
4968
  const { row, column } = params
4946
4969
  const cell = evnt.currentTarget as HTMLTableCellElement
4947
- handleTargetEnterEvent()
4970
+ handleTargetEnterEvent(tooltipStore.column !== column || tooltipStore.row !== row)
4948
4971
  if (isEnableConf(editConfig)) {
4949
4972
  if ((editOpts.mode === 'row' && actived.row === row) || (actived.row === row && actived.column === column)) {
4950
4973
  return
@@ -4969,20 +4992,23 @@ export default defineComponent({
4969
4992
  */
4970
4993
  triggerFooterTooltipEvent (evnt, params) {
4971
4994
  const { column } = params
4972
- const { tooltipStore } = internalData
4995
+ const { tooltipStore } = reactData
4973
4996
  const cell = evnt.currentTarget as HTMLTableCellElement
4974
- handleTargetEnterEvent()
4997
+ handleTargetEnterEvent(tooltipStore.column !== column || tooltipStore.row)
4975
4998
  if (tooltipStore.column !== column || !tooltipStore.visible) {
4976
4999
  handleTooltip(evnt, cell, cell.querySelector('.vxe-cell--item') || cell.children[0], null, params)
4977
5000
  }
4978
5001
  },
4979
5002
  handleTargetLeaveEvent () {
4980
5003
  const tooltipOpts = computeTooltipOpts.value
4981
- internalData.tooltipActive = false
5004
+ let $tooltip = refTooltip.value
5005
+ if ($tooltip) {
5006
+ $tooltip.setActived(false)
5007
+ }
4982
5008
  if (tooltipOpts.enterable) {
4983
5009
  internalData.tooltipTimeout = setTimeout(() => {
4984
- const $tooltip = refTooltip.value
4985
- if ($tooltip && !$tooltip.reactData.isHover) {
5010
+ $tooltip = refTooltip.value
5011
+ if ($tooltip && !$tooltip.isActived()) {
4986
5012
  tableMethods.closeTooltip()
4987
5013
  }
4988
5014
  }, tooltipOpts.leaveDelay)
@@ -5683,16 +5709,26 @@ export default defineComponent({
5683
5709
  const radioOpts = computeRadioOpts.value
5684
5710
  const checkboxOpts = computeCheckboxOpts.value
5685
5711
  const expandOpts = computeExpandOpts.value
5712
+ const rowOpts = computeRowOpts.value
5686
5713
 
5687
5714
  if (process.env.VUE_APP_VXE_TABLE_ENV === 'development') {
5688
- if (!props.rowId && (checkboxOpts.reserve || checkboxOpts.checkRowKeys || radioOpts.reserve || radioOpts.checkRowKey || expandOpts.expandRowKeys || treeOpts.expandRowKeys)) {
5689
- warnLog('vxe.error.reqProp', ['row-id'])
5715
+ // if (props.rowId) {
5716
+ // warnLog('vxe.error.delProp', ['rowId', 'row-config.keyField'])
5717
+ // }
5718
+ // if (props.rowKey) {
5719
+ // warnLog('vxe.error.delProp', ['rowId', 'row-config.useKey'])
5720
+ // }
5721
+ // if (props.columnKey) {
5722
+ // warnLog('vxe.error.delProp', ['rowId', 'column-config.useKey'])
5723
+ // }
5724
+ if (!(props.rowId || rowOpts.keyField) && (checkboxOpts.reserve || checkboxOpts.checkRowKeys || radioOpts.reserve || radioOpts.checkRowKey || expandOpts.expandRowKeys || treeOpts.expandRowKeys)) {
5725
+ warnLog('vxe.error.reqProp', ['row-config.keyField'])
5690
5726
  }
5691
5727
  if (props.editConfig && (editOpts.showStatus || editOpts.showUpdateStatus || editOpts.showInsertStatus) && !props.keepSource) {
5692
5728
  warnLog('vxe.error.reqProp', ['keep-source'])
5693
5729
  }
5694
- if (treeConfig && treeOpts.line && (!props.rowKey || !showOverflow)) {
5695
- warnLog('vxe.error.reqProp', ['row-key | show-overflow'])
5730
+ if (treeConfig && treeOpts.line && (!(props.rowKey || rowOpts.useKey) || !showOverflow)) {
5731
+ warnLog('vxe.error.reqProp', ['row-config.useKey | show-overflow'])
5696
5732
  }
5697
5733
  if (treeConfig && props.stripe) {
5698
5734
  warnLog('vxe.error.noTree', ['stripe'])
@@ -5844,7 +5880,7 @@ export default defineComponent({
5844
5880
  const { loading, stripe, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig } = props
5845
5881
  const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, scrollbarHeight, tableData, tableColumn, tableGroupColumn, footerTableData, initStore, columnStore, filterStore } = reactData
5846
5882
  const { leftList, rightList } = columnStore
5847
- const tooltipOpts = computeTooltipOpts.value
5883
+ const tipConfig = computeTipConfig.value
5848
5884
  const treeOpts = computeTreeOpts.value
5849
5885
  const rowOpts = computeRowOpts.value
5850
5886
  const columnOpts = computeColumnOpts.value
@@ -6020,7 +6056,7 @@ export default defineComponent({
6020
6056
  */
6021
6057
  hasUseTooltip ? h(resolveComponent('vxe-tooltip') as ComponentOptions, {
6022
6058
  ref: refTooltip,
6023
- ...tooltipOpts
6059
+ ...tipConfig
6024
6060
  }) : createCommentVNode()
6025
6061
  ])
6026
6062
  }
@@ -44,14 +44,16 @@ export function getRowUniqueId () {
44
44
  // 行主键 key
45
45
  export function getRowkey ($xetable: VxeTableConstructor) {
46
46
  const { props } = $xetable
47
+ const { computeRowOpts } = $xetable.getComputeMaps()
47
48
  const { rowId } = props
48
- return rowId || '_X_ID'
49
+ const rowOpts = computeRowOpts.value
50
+ return rowId || rowOpts.keyField || '_X_ID'
49
51
  }
50
52
 
51
53
  // 行主键 value
52
54
  export function getRowid ($xetable: VxeTableConstructor, row: any) {
53
- const rowId = XEUtils.get(row, getRowkey($xetable))
54
- return XEUtils.eqNull(rowId) ? '' : encodeURIComponent(rowId)
55
+ const rowid = XEUtils.get(row, getRowkey($xetable))
56
+ return XEUtils.eqNull(rowid) ? '' : encodeURIComponent(rowid)
55
57
  }
56
58
 
57
59
  export interface XEColumnInstance {
@@ -4,9 +4,10 @@ import { dynamicApp } from '../dynamics'
4
4
 
5
5
  export const Textarea = Object.assign(VxeTextareaComponent, {
6
6
  install: function (app: App) {
7
- dynamicApp.component(VxeTextareaComponent.name, VxeTextareaComponent)
8
7
  app.component(VxeTextareaComponent.name, VxeTextareaComponent)
9
8
  }
10
9
  })
11
10
 
11
+ dynamicApp.component(VxeTextareaComponent.name, VxeTextareaComponent)
12
+
12
13
  export default Textarea
@@ -4,9 +4,10 @@ import { dynamicApp } from '../dynamics'
4
4
 
5
5
  export const Toolbar = Object.assign(VxeToolbarComponent, {
6
6
  install: function (app: App) {
7
- dynamicApp.component(VxeToolbarComponent.name, VxeToolbarComponent)
8
7
  app.component(VxeToolbarComponent.name, VxeToolbarComponent)
9
8
  }
10
9
  })
11
10
 
11
+ dynamicApp.component(VxeToolbarComponent.name, VxeToolbarComponent)
12
+
12
13
  export default Toolbar
@@ -4,7 +4,8 @@ import GlobalConfig from '../../v-x-e-table/src/conf'
4
4
  import { VXETable } from '../../v-x-e-table'
5
5
  import { useSize } from '../../hooks/size'
6
6
  import { getEventTargetNode } from '../../tools/dom'
7
- import { warnLog, errLog, formatText } from '../../tools/utils'
7
+ import { formatText } from '../../tools/utils'
8
+ import { warnLog, errLog } from '../../tools/log'
8
9
  import { GlobalEvent } from '../../tools/event'
9
10
 
10
11
  import { VxeGridConstructor, GridPrivateMethods, ToolbarMethods, VxeToolbarConstructor, VxeToolbarEmits, VxeToolbarPropTypes, VxeTableConstructor, ToolbarPrivateRef, VxeTableMethods, VxeTablePrivateMethods, ToolbarReactData, VxeTableDefines } from '../../../types/all'
@@ -89,6 +89,13 @@ export function setScrollLeft (elem: HTMLElement | null, scrollLeft: number) {
89
89
  }
90
90
  }
91
91
 
92
+ // export function setScrollLeftAndTop (elem: HTMLElement | null, scrollLeft: number, scrollTop: number) {
93
+ // if (elem) {
94
+ // elem.scrollLeft = scrollLeft
95
+ // elem.scrollTop = scrollTop
96
+ // }
97
+ // }
98
+
92
99
  export function updateCellTitle (overflowElem: any, column: any) {
93
100
  const content = column.type === 'html' ? overflowElem.innerText : overflowElem.textContent
94
101
  if (overflowElem.getAttribute('title') !== content) {
@@ -146,3 +153,7 @@ export function triggerEvent (targetElem: Element, type: string) {
146
153
  targetElem.dispatchEvent(new Event(type))
147
154
  }
148
155
  }
156
+
157
+ export function isNodeElement (elem: Element) {
158
+ return elem && elem.nodeType === 1
159
+ }
@@ -0,0 +1,16 @@
1
+ import GlobalConfig from '../v-x-e-table/src/conf'
2
+
3
+ export function getLog (message: string, params?: any) {
4
+ return `[vxe-table v${process.env.VUE_APP_VXE_TABLE_VERSION}] ${GlobalConfig.i18n(message, params)}`
5
+ }
6
+
7
+ function outLog (type: 'log' | 'warn' | 'error') {
8
+ return function (message: string, params?: any) {
9
+ const msg = getLog(message, params)
10
+ console[type](msg)
11
+ return msg
12
+ }
13
+ }
14
+
15
+ export const warnLog = outLog('warn')
16
+ export const errLog = outLog('error')
@@ -4,18 +4,6 @@ import GlobalConfig from '../v-x-e-table/src/conf'
4
4
  let zindexIndex = 0
5
5
  let lastZindex = 1
6
6
 
7
- export function getLog (message: string, params?: any) {
8
- return `[vxe-table] ${GlobalConfig.i18n(message, params)}`
9
- }
10
-
11
- function outLog (type: 'log' | 'warn' | 'error') {
12
- return function (message: string, params?: any) {
13
- const msg = getLog(message, params)
14
- console[type](msg)
15
- return msg
16
- }
17
- }
18
-
19
7
  export function isEnableConf (conf: any): boolean {
20
8
  return conf && conf.enabled !== false
21
9
  }
@@ -41,9 +29,6 @@ export function getLastZIndex () {
41
29
  return lastZindex
42
30
  }
43
31
 
44
- export const warnLog = outLog('warn')
45
- export const errLog = outLog('error')
46
-
47
32
  export function hasChildrenList (item: any) {
48
33
  return item && item.children && item.children.length > 0
49
34
  }
@@ -6,9 +6,10 @@ import { dynamicApp } from '../dynamics'
6
6
  export const Tooltip = Object.assign(VxeTooltipComponent, {
7
7
  install: function (app: App) {
8
8
  VXETable.tooltip = true
9
- dynamicApp.component(VxeTooltipComponent.name, VxeTooltipComponent)
10
9
  app.component(VxeTooltipComponent.name, VxeTooltipComponent)
11
10
  }
12
11
  })
13
12
 
13
+ dynamicApp.component(VxeTooltipComponent.name, VxeTooltipComponent)
14
+
14
15
  export default Tooltip