vxe-pc-ui 4.16.5 → 4.16.7

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 (56) hide show
  1. package/dist/all.esm.js +177 -108
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/icon/style.css +1 -1
  5. package/es/list/src/list.js +21 -9
  6. package/es/menu/src/menu.js +64 -17
  7. package/es/menu/style.css +16 -7
  8. package/es/menu/style.min.css +1 -1
  9. package/es/style.css +1 -1
  10. package/es/style.min.css +1 -1
  11. package/es/tree/src/tree.js +12 -2
  12. package/es/ui/index.js +3 -3
  13. package/es/ui/src/log.js +1 -1
  14. package/es/vxe-menu/style.css +16 -7
  15. package/es/vxe-menu/style.min.css +1 -1
  16. package/lib/icon/style/style.css +1 -1
  17. package/lib/icon/style/style.min.css +1 -1
  18. package/lib/index.umd.js +102 -28
  19. package/lib/index.umd.min.js +1 -1
  20. package/lib/list/src/list.js +21 -9
  21. package/lib/list/src/list.min.js +1 -1
  22. package/lib/menu/src/menu.js +65 -13
  23. package/lib/menu/src/menu.min.js +1 -1
  24. package/lib/menu/style/style.css +16 -7
  25. package/lib/menu/style/style.min.css +1 -1
  26. package/lib/style.css +1 -1
  27. package/lib/style.min.css +1 -1
  28. package/lib/tree/src/tree.js +12 -2
  29. package/lib/tree/src/tree.min.js +1 -1
  30. package/lib/ui/index.js +3 -3
  31. package/lib/ui/index.min.js +1 -1
  32. package/lib/ui/src/log.js +1 -1
  33. package/lib/ui/src/log.min.js +1 -1
  34. package/lib/vxe-menu/style/style.css +16 -7
  35. package/lib/vxe-menu/style/style.min.css +1 -1
  36. package/package.json +1 -1
  37. package/packages/list/src/list.ts +25 -13
  38. package/packages/menu/src/menu.ts +70 -17
  39. package/packages/tree/src/tree.ts +12 -2
  40. package/packages/ui/index.ts +2 -2
  41. package/styles/components/menu.scss +10 -4
  42. package/types/components/list.d.ts +12 -0
  43. package/types/components/menu.d.ts +6 -0
  44. package/types/components/tree.d.ts +12 -0
  45. /package/es/icon/{iconfont.1783670404729.ttf → iconfont.1783873713408.ttf} +0 -0
  46. /package/es/icon/{iconfont.1783670404729.woff → iconfont.1783873713408.woff} +0 -0
  47. /package/es/icon/{iconfont.1783670404729.woff2 → iconfont.1783873713408.woff2} +0 -0
  48. /package/es/{iconfont.1783670404729.ttf → iconfont.1783873713408.ttf} +0 -0
  49. /package/es/{iconfont.1783670404729.woff → iconfont.1783873713408.woff} +0 -0
  50. /package/es/{iconfont.1783670404729.woff2 → iconfont.1783873713408.woff2} +0 -0
  51. /package/lib/icon/style/{iconfont.1783670404729.ttf → iconfont.1783873713408.ttf} +0 -0
  52. /package/lib/icon/style/{iconfont.1783670404729.woff → iconfont.1783873713408.woff} +0 -0
  53. /package/lib/icon/style/{iconfont.1783670404729.woff2 → iconfont.1783873713408.woff2} +0 -0
  54. /package/lib/{iconfont.1783670404729.ttf → iconfont.1783873713408.ttf} +0 -0
  55. /package/lib/{iconfont.1783670404729.woff → iconfont.1783873713408.woff} +0 -0
  56. /package/lib/{iconfont.1783670404729.woff2 → iconfont.1783873713408.woff2} +0 -0
@@ -8,12 +8,32 @@ import { getSlotVNs } from '../../ui/src/vn'
8
8
  import { createComponentLog } from '../../ui/src/log'
9
9
  import VxeLoadingComponent from '../../loading'
10
10
 
11
- import type { VxeMenuDefines, VxeMenuPropTypes, MenuReactData, VxeMenuEmits, MenuMethods, VxeComponentSlotType, VxeLayoutAsidePropTypes, MenuPrivateMethods, MenuPrivateRef, VxeMenuPrivateComputed, VxeMenuConstructor, VxeMenuPrivateMethods, ValueOf, VxeLayoutAsideConstructor, VxeLayoutAsidePrivateMethods } from '../../../types'
11
+ import type { VxeMenuDefines, VxeMenuPropTypes, MenuInternalData, MenuReactData, VxeMenuEmits, MenuMethods, VxeComponentSlotType, VxeLayoutAsidePropTypes, MenuPrivateMethods, MenuPrivateRef, VxeMenuPrivateComputed, VxeMenuConstructor, VxeMenuPrivateMethods, ValueOf, VxeLayoutAsideConstructor, VxeLayoutAsidePrivateMethods } from '../../../types'
12
12
 
13
13
  const { errLog } = createComponentLog('menu')
14
14
 
15
15
  const { menus, getConfig, getIcon } = VxeUI
16
16
 
17
+ function createInternalData (): MenuInternalData {
18
+ return {
19
+ menuEffectMaps: {}
20
+ }
21
+ }
22
+
23
+ function createReactData (): MenuReactData {
24
+ return {
25
+ initialized: false,
26
+ isEnterCollapse: false,
27
+ collapseStyle: {},
28
+ collapseZindex: 0,
29
+ activeName: '',
30
+ menuList: [],
31
+ itemHeight: 1
32
+ }
33
+ }
34
+
35
+ let nemuUniqueKey = 100000000
36
+
17
37
  export default defineVxeComponent({
18
38
  name: 'VxeMenu',
19
39
  props: {
@@ -57,15 +77,8 @@ export default defineVxeComponent({
57
77
 
58
78
  const { computeSize } = useSize(props)
59
79
 
60
- const reactData = reactive<MenuReactData>({
61
- initialized: !!props.collapsed,
62
- isEnterCollapse: false,
63
- collapseStyle: {},
64
- collapseZindex: 0,
65
- activeName: props.modelValue,
66
- menuList: [],
67
- itemHeight: 1
68
- })
80
+ const reactData = reactive(createReactData())
81
+ const internalData = createInternalData()
69
82
 
70
83
  const refMaps: MenuPrivateRef = {
71
84
  refElem
@@ -151,6 +164,7 @@ export default defineVxeComponent({
151
164
  ...item,
152
165
  parentKey: parent ? (parent.name || path.slice(0, path.length - 1).join(',')) : '',
153
166
  level: path.length,
167
+ itemId: ++nemuUniqueKey,
154
168
  itemKey: item.name || path.join(','),
155
169
  isExactActive: false,
156
170
  isActive: false,
@@ -211,10 +225,17 @@ export default defineVxeComponent({
211
225
 
212
226
  const handleClickIconCollapse = (evnt: MouseEvent, item: VxeMenuDefines.MenuItem, itemList: VxeMenuDefines.MenuItem[]) => {
213
227
  const { accordion } = props
214
- const { hasChild, isExpand } = item
228
+ const { menuEffectMaps } = internalData
229
+ const { itemId, hasChild, isExpand } = item
230
+ const expanded = !isExpand
215
231
  if (hasChild) {
216
232
  evnt.stopPropagation()
217
233
  evnt.preventDefault()
234
+
235
+ if (menuEffectMaps[itemId]) {
236
+ clearTimeout(menuEffectMaps[itemId])
237
+ }
238
+
218
239
  if (accordion) {
219
240
  itemList.forEach(obj => {
220
241
  if (obj !== item) {
@@ -222,7 +243,33 @@ export default defineVxeComponent({
222
243
  }
223
244
  })
224
245
  }
225
- item.isExpand = !isExpand
246
+ item.isExpand = expanded
247
+
248
+ const el = refElem.value
249
+ if (el) {
250
+ const nemuEl = el.querySelector<HTMLDivElement>(`.vxe-menu--item-wrapper[data-menu-id="${itemId}"]`)
251
+ const groupEl = nemuEl ? nemuEl.querySelector<HTMLDivElement>('.vxe-menu--item-group') : null
252
+ if (groupEl) {
253
+ if (expanded) {
254
+ groupEl.style.height = '0'
255
+ groupEl.setAttribute('data-effect', 'y')
256
+ requestAnimationFrame(() => {
257
+ groupEl.style.height = `${groupEl.scrollHeight}px`
258
+ })
259
+ } else {
260
+ groupEl.style.height = `${groupEl.scrollHeight}px`
261
+ groupEl.setAttribute('data-effect', 'y')
262
+ requestAnimationFrame(() => {
263
+ groupEl.style.height = '0'
264
+ })
265
+ }
266
+ menuEffectMaps[itemId] = setTimeout(() => {
267
+ delete menuEffectMaps[itemId]
268
+ groupEl.removeAttribute('data-effect')
269
+ groupEl.style.height = ''
270
+ }, 350)
271
+ }
272
+ }
226
273
  }
227
274
  }
228
275
 
@@ -382,7 +429,7 @@ export default defineVxeComponent({
382
429
  }
383
430
 
384
431
  const renderDefaultChildren = (item: VxeMenuDefines.MenuItem, itemList: VxeMenuDefines.MenuItem[]): VNode => {
385
- const { itemKey, level, hasChild, isActive, isExactActive, isExpand, routerLink, childList } = item
432
+ const { itemId, itemKey, level, hasChild, isActive, isExactActive, isExpand, routerLink, childList } = item
386
433
  const { isEnterCollapse } = reactData
387
434
  const isCollapsed = computeIsCollapsed.value
388
435
  if (item.permissionCode) {
@@ -396,7 +443,8 @@ export default defineVxeComponent({
396
443
  'is--exact-active': isExactActive,
397
444
  'is--active': isActive,
398
445
  'is--expand': (!isCollapsed || isEnterCollapse) && isExpand
399
- }]
446
+ }],
447
+ 'data-menu-id': itemId
400
448
  }, [
401
449
  routerLink
402
450
  ? h(resolveComponent('router-link'), {
@@ -429,7 +477,7 @@ export default defineVxeComponent({
429
477
  }
430
478
 
431
479
  const renderCollapseChildren = (item: VxeMenuDefines.MenuItem, itemList: VxeMenuDefines.MenuItem[]): VNode => {
432
- const { itemKey, level, hasChild, isActive, isExactActive, routerLink, childList } = item
480
+ const { itemId, itemKey, level, hasChild, isActive, isExactActive, routerLink, childList } = item
433
481
  if (item.permissionCode) {
434
482
  if (!permission.checkVisible(item.permissionCode)) {
435
483
  return renderEmptyElement($xeMenu)
@@ -440,7 +488,8 @@ export default defineVxeComponent({
440
488
  class: ['vxe-menu--item-wrapper', `vxe-menu--item-level${level}`, {
441
489
  'is--exact-active': isExactActive,
442
490
  'is--active': isActive
443
- }]
491
+ }],
492
+ 'data-menu-id': itemId
444
493
  }, [
445
494
  routerLink
446
495
  ? h(resolveComponent('router-link'), {
@@ -560,7 +609,6 @@ export default defineVxeComponent({
560
609
  })
561
610
 
562
611
  onBeforeUnmount(() => {
563
- globalEvents.off($xeMenu, 'resize')
564
612
  const collapseEl = refCollapseElem.value
565
613
  if (collapseEl) {
566
614
  const parentNode = collapseEl.parentNode
@@ -568,8 +616,13 @@ export default defineVxeComponent({
568
616
  parentNode.removeChild(collapseEl)
569
617
  }
570
618
  }
619
+ globalEvents.off($xeMenu, 'resize')
620
+ XEUtils.assign(reactData, createReactData())
621
+ XEUtils.assign(internalData, createInternalData())
571
622
  })
572
623
 
624
+ reactData.initialized = !!props.collapsed
625
+ reactData.activeName = props.modelValue
573
626
  updateMenuConfig()
574
627
  updateActiveMenu(true)
575
628
 
@@ -1819,6 +1819,9 @@ export default defineVxeComponent({
1819
1819
  return nodeKeys
1820
1820
  },
1821
1821
  getCheckboxNodes () {
1822
+ return $xeTree.getCheckboxRecords()
1823
+ },
1824
+ getCheckboxRecords () {
1822
1825
  const { nodeMaps, selectCheckboxMaps } = internalData
1823
1826
  const list: any[] = []
1824
1827
  XEUtils.each(selectCheckboxMaps, (item, nodeid) => {
@@ -2223,7 +2226,13 @@ export default defineVxeComponent({
2223
2226
  const nodeid = getNodeId(node)
2224
2227
  return !!reactData.removeNodeFlag && !!internalData.removeNodeMaps[nodeid]
2225
2228
  },
2226
- closeTooltip
2229
+ closeTooltip,
2230
+ getRecordset () {
2231
+ return {
2232
+ insertRecords: $xeTree.getInsertRecords(),
2233
+ removeRecords: $xeTree.getRemoveRecords()
2234
+ }
2235
+ }
2227
2236
  }
2228
2237
 
2229
2238
  const handleNodeDragEndClearStatus = () => {
@@ -3210,9 +3219,9 @@ export default defineVxeComponent({
3210
3219
  ])
3211
3220
  ]
3212
3221
  : []),
3213
- renderDragIcon(node, nodeid),
3214
3222
  renderRadio(node, nodeid, isExistChild, nLevel, isRadioChecked),
3215
3223
  renderCheckbox(node, nodeid, isExistChild, nLevel, isCheckboxChecked, isIndeterminate),
3224
+ renderDragIcon(node, nodeid),
3216
3225
  h('div', {
3217
3226
  class: 'vxe-tree--node-item-inner'
3218
3227
  }, [
@@ -3517,6 +3526,7 @@ export default defineVxeComponent({
3517
3526
  internalData.resizeObserver = resizeObserver
3518
3527
  }
3519
3528
 
3529
+ recalculate()
3520
3530
  globalEvents.on($xeTree, 'resize', handleGlobalResizeEvent)
3521
3531
  })
3522
3532
 
@@ -513,8 +513,8 @@ setIcon({
513
513
  BUTTON_TOOLTIP_ICON: iconPrefix + 'question-circle-fill',
514
514
 
515
515
  // menu
516
- MENU_ITEM_EXPAND_OPEN: iconPrefix + 'arrow-down rotate180',
517
- MENU_ITEM_EXPAND_CLOSE: iconPrefix + 'arrow-down',
516
+ MENU_ITEM_EXPAND_OPEN: iconPrefix + 'arrow-right rotate90',
517
+ MENU_ITEM_EXPAND_CLOSE: iconPrefix + 'arrow-right',
518
518
 
519
519
  // select
520
520
  SELECT_LOADED: iconPrefix + 'spinner roll',
@@ -1,7 +1,8 @@
1
1
  @use '../helpers/baseMixin.scss';
2
2
 
3
3
  // 局部变量
4
- .vxe-menu {
4
+ .vxe-menu,
5
+ .vxe-menu--collapse-wrapper {
5
6
  --vxe-ui-menu-current-font-size: var(--vxe-ui-font-size-default);
6
7
  --vxe-ui-menu-current-item-height: var(--vxe-ui-menu-item-height-default);
7
8
  &.size--medium {
@@ -31,7 +32,8 @@
31
32
  min-height: 4em;
32
33
  }
33
34
  }
34
- .vxe-menu {
35
+ .vxe-menu,
36
+ .vxe-menu--collapse-wrapper {
35
37
  font-size: var(--vxe-ui-menu-current-font-size);
36
38
  color: var(--vxe-ui-font-color);
37
39
  font-family: var(--vxe-ui-font-family);
@@ -114,7 +116,11 @@
114
116
  }
115
117
 
116
118
  .vxe-menu--item-group {
117
- display: none;
119
+ height: 0;
120
+ overflow: hidden;
121
+ &[data-effect] {
122
+ transition: height 0.3s ease-in-out;
123
+ }
118
124
  }
119
125
  .vxe-menu--item-wrapper {
120
126
  &.is--active {
@@ -130,7 +136,7 @@
130
136
  }
131
137
  &.is--expand {
132
138
  & > .vxe-menu--item-group {
133
- display: block;
139
+ height: auto;
134
140
  }
135
141
  }
136
142
  }
@@ -440,6 +440,10 @@ export interface ListMethods<D = any> {
440
440
  * 只对 show-checkbox 有效,根据主键设置复选框
441
441
  */
442
442
  setCheckboxRowByKey(rowKeys: string | number | null | undefined | (string | number | null | undefined)[], checked: boolean): Promise<void>
443
+ /**
444
+ * 只对 show-checkbox 有效,获取复选框已选的行
445
+ */
446
+ getCheckboxRecords(): D[]
443
447
  /**
444
448
  * 只对 show-checkbox 有效,获取复选框已选的行
445
449
  */
@@ -492,6 +496,14 @@ export interface ListMethods<D = any> {
492
496
  * 判断数据是否被删除
493
497
  */
494
498
  isRemoveByRow(row: any | null): boolean
499
+ /**
500
+ * 获取列表数据集
501
+ * 获取新增、删除的数据
502
+ */
503
+ getRecordset(): {
504
+ insertRecords: D[]
505
+ removeRecords: D[]
506
+ }
495
507
  }
496
508
  export interface VxeListMethods<D = any> extends ListMethods<D> { }
497
509
 
@@ -13,6 +13,7 @@ export type VxeMenuInstance = DefineVxeComponentInstance<VxeMenuProps, VxeMenuCo
13
13
  export interface VxeMenuConstructor extends VxeComponentBaseOptions, VxeMenuMethods {
14
14
  props: VxeMenuProps
15
15
  context: SetupContext<VxeMenuEmits>
16
+ internalData: MenuInternalData
16
17
  reactData: MenuReactData
17
18
  getRefMaps(): MenuPrivateRef
18
19
  getComputeMaps(): MenuPrivateComputed
@@ -85,6 +86,10 @@ export interface MenuPrivateComputed {
85
86
  }
86
87
  export interface VxeMenuPrivateComputed extends MenuPrivateComputed { }
87
88
 
89
+ export interface MenuInternalData {
90
+ menuEffectMaps: Record<number, number>
91
+ }
92
+
88
93
  export interface MenuReactData {
89
94
  initialized: boolean
90
95
  collapseStyle: VxeComponentStyleType
@@ -116,6 +121,7 @@ export namespace VxeMenuDefines {
116
121
  }
117
122
 
118
123
  export interface MenuItem extends VxeMenuPropTypes.MenuOption {
124
+ itemId: number
119
125
  itemKey: string | number
120
126
  level: number,
121
127
  parentKey: string | number
@@ -544,6 +544,10 @@ export interface TreeMethods<D = any> {
544
544
  * 只对 show-checkbox 有效,获取复选框的节点
545
545
  */
546
546
  getCheckboxNodes(): D[]
547
+ /**
548
+ * 只对 show-checkbox 有效,获取复选框的节点
549
+ */
550
+ getCheckboxRecords(): D[]
547
551
  /**
548
552
  * 用于 showCheckbox,手动清空复选框的
549
553
  */
@@ -724,6 +728,14 @@ export interface TreeMethods<D = any> {
724
728
  * 手动关闭工具提示
725
729
  */
726
730
  closeTooltip(): Promise<void>
731
+ /**
732
+ * 获取列表数据集
733
+ * 获取新增、删除的数据
734
+ */
735
+ getRecordset(): {
736
+ insertRecords: D[]
737
+ removeRecords: D[]
738
+ }
727
739
  }
728
740
  export interface VxeTreeMethods<D = any> extends TreeMethods<D> { }
729
741