vxe-pc-ui 3.16.5 → 3.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 (53) hide show
  1. package/es/icon/style.css +1 -1
  2. package/es/list/src/list.js +24 -8
  3. package/es/menu/src/menu.js +81 -32
  4. package/es/menu/style.css +16 -7
  5. package/es/menu/style.min.css +1 -1
  6. package/es/style.css +1 -1
  7. package/es/style.min.css +1 -1
  8. package/es/tree/src/tree.js +13 -1
  9. package/es/ui/index.js +3 -3
  10. package/es/ui/src/log.js +1 -1
  11. package/es/vxe-menu/style.css +16 -7
  12. package/es/vxe-menu/style.min.css +1 -1
  13. package/lib/icon/style/style.css +1 -1
  14. package/lib/icon/style/style.min.css +1 -1
  15. package/lib/index.umd.js +125 -42
  16. package/lib/index.umd.min.js +1 -1
  17. package/lib/list/src/list.js +24 -8
  18. package/lib/list/src/list.min.js +1 -1
  19. package/lib/menu/src/menu.js +84 -29
  20. package/lib/menu/src/menu.min.js +1 -1
  21. package/lib/menu/style/style.css +16 -7
  22. package/lib/menu/style/style.min.css +1 -1
  23. package/lib/style.css +1 -1
  24. package/lib/style.min.css +1 -1
  25. package/lib/tree/src/tree.js +13 -1
  26. package/lib/tree/src/tree.min.js +1 -1
  27. package/lib/ui/index.js +3 -3
  28. package/lib/ui/index.min.js +1 -1
  29. package/lib/ui/src/log.js +1 -1
  30. package/lib/ui/src/log.min.js +1 -1
  31. package/lib/vxe-menu/style/style.css +16 -7
  32. package/lib/vxe-menu/style/style.min.css +1 -1
  33. package/package.json +1 -1
  34. package/packages/list/src/list.ts +30 -12
  35. package/packages/menu/src/menu.ts +91 -29
  36. package/packages/tree/src/tree.ts +15 -1
  37. package/packages/ui/index.ts +2 -2
  38. package/styles/components/menu.scss +10 -4
  39. package/types/components/list.d.ts +12 -0
  40. package/types/components/menu.d.ts +6 -0
  41. package/types/components/tree.d.ts +12 -0
  42. /package/es/icon/{iconfont.1783670400288.ttf → iconfont.1783873707609.ttf} +0 -0
  43. /package/es/icon/{iconfont.1783670400288.woff → iconfont.1783873707609.woff} +0 -0
  44. /package/es/icon/{iconfont.1783670400288.woff2 → iconfont.1783873707609.woff2} +0 -0
  45. /package/es/{iconfont.1783670400288.ttf → iconfont.1783873707609.ttf} +0 -0
  46. /package/es/{iconfont.1783670400288.woff → iconfont.1783873707609.woff} +0 -0
  47. /package/es/{iconfont.1783670400288.woff2 → iconfont.1783873707609.woff2} +0 -0
  48. /package/lib/icon/style/{iconfont.1783670400288.ttf → iconfont.1783873707609.ttf} +0 -0
  49. /package/lib/icon/style/{iconfont.1783670400288.woff → iconfont.1783873707609.woff} +0 -0
  50. /package/lib/icon/style/{iconfont.1783670400288.woff2 → iconfont.1783873707609.woff2} +0 -0
  51. /package/lib/{iconfont.1783670400288.ttf → iconfont.1783873707609.ttf} +0 -0
  52. /package/lib/{iconfont.1783670400288.woff → iconfont.1783873707609.woff} +0 -0
  53. /package/lib/{iconfont.1783670400288.woff2 → iconfont.1783873707609.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, MenuReactData, VxeMenuPropTypes, VxeLayoutAsideConstructor, VxeMenuEmits, VxeLayoutAsidePropTypes, VxeComponentPermissionInfo, VxeComponentSizeType, ValueOf } from '../../../types'
11
+ import type { VxeMenuDefines, MenuInternalData, MenuReactData, VxeMenuPropTypes, VxeLayoutAsideConstructor, VxeMenuEmits, VxeLayoutAsidePropTypes, VxeComponentPermissionInfo, VxeComponentSizeType, ValueOf } 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 /* define-vxe-component start */ defineVxeComponent({
18
38
  name: 'VxeMenu',
19
39
  mixins: [
@@ -49,16 +69,11 @@ export default /* define-vxe-component start */ defineVxeComponent({
49
69
  }
50
70
  },
51
71
  data () {
52
- const reactData: MenuReactData = {
53
- initialized: false,
54
- isEnterCollapse: false,
55
- collapseStyle: {},
56
- collapseZindex: 0,
57
- activeName: null,
58
- menuList: [],
59
- itemHeight: 1
60
- }
72
+ const reactData = createReactData()
61
73
  return {
74
+ ...({} as {
75
+ internalData: MenuInternalData,
76
+ }),
62
77
  xID: XEUtils.uniqueId(),
63
78
  reactData
64
79
  }
@@ -185,6 +200,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
185
200
  ...item,
186
201
  parentKey: parent ? (parent.name || path.slice(0, path.length - 1).join(',')) : '',
187
202
  level: path.length,
203
+ itemId: ++nemuUniqueKey,
188
204
  itemKey: item.name || path.join(','),
189
205
  isExactActive: false,
190
206
  isActive: false,
@@ -251,12 +267,20 @@ export default /* define-vxe-component start */ defineVxeComponent({
251
267
  handleClickIconCollapse (evnt: MouseEvent, item: VxeMenuDefines.MenuItem, itemList: VxeMenuDefines.MenuItem[]) {
252
268
  const $xeMenu = this
253
269
  const props = $xeMenu
270
+ const internalData = $xeMenu.internalData
254
271
 
255
272
  const { accordion } = props
256
- const { hasChild, isExpand } = item
273
+ const { menuEffectMaps } = internalData
274
+ const { itemId, hasChild, isExpand } = item
275
+ const expanded = !isExpand
257
276
  if (hasChild) {
258
277
  evnt.stopPropagation()
259
278
  evnt.preventDefault()
279
+
280
+ if (menuEffectMaps[itemId]) {
281
+ clearTimeout(menuEffectMaps[itemId])
282
+ }
283
+
260
284
  if (accordion) {
261
285
  itemList.forEach(obj => {
262
286
  if (obj !== item) {
@@ -264,7 +288,33 @@ export default /* define-vxe-component start */ defineVxeComponent({
264
288
  }
265
289
  })
266
290
  }
267
- item.isExpand = !isExpand
291
+ item.isExpand = expanded
292
+
293
+ const el = $xeMenu.$refs.refElem as HTMLDivElement
294
+ if (el) {
295
+ const nemuEl = el.querySelector<HTMLDivElement>(`.vxe-menu--item-wrapper[data-menu-id="${itemId}"]`)
296
+ const groupEl = nemuEl ? nemuEl.querySelector<HTMLDivElement>('.vxe-menu--item-group') : null
297
+ if (groupEl) {
298
+ if (expanded) {
299
+ groupEl.style.height = '0'
300
+ groupEl.setAttribute('data-effect', 'y')
301
+ requestAnimationFrame(() => {
302
+ groupEl.style.height = `${groupEl.scrollHeight}px`
303
+ })
304
+ } else {
305
+ groupEl.style.height = `${groupEl.scrollHeight}px`
306
+ groupEl.setAttribute('data-effect', 'y')
307
+ requestAnimationFrame(() => {
308
+ groupEl.style.height = '0'
309
+ })
310
+ }
311
+ menuEffectMaps[itemId] = setTimeout(() => {
312
+ delete menuEffectMaps[itemId]
313
+ groupEl.removeAttribute('data-effect')
314
+ groupEl.style.height = ''
315
+ }, 350)
316
+ }
317
+ }
268
318
  }
269
319
  },
270
320
  handleContextmenuEvent (evnt: MouseEvent, item: VxeMenuDefines.MenuItem) {
@@ -343,7 +393,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
343
393
  const reactData = $xeMenu.reactData
344
394
 
345
395
  const { collapseStyle } = reactData
346
- const el = this.$refs.refElem as HTMLDivElement
396
+ const el = $xeMenu.$refs.refElem as HTMLDivElement
347
397
  reactData.collapseStyle = Object.assign({}, collapseStyle, {
348
398
  width: el ? toCssUnit(el.offsetWidth) : ''
349
399
  })
@@ -414,7 +464,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
414
464
  const $xeMenu = this
415
465
  const reactData = $xeMenu.reactData
416
466
 
417
- const { itemKey, level, hasChild, isActive, isExactActive, isExpand, routerLink, childList } = item
467
+ const { itemId, itemKey, level, hasChild, isActive, isExactActive, isExpand, routerLink, childList } = item
418
468
  const { isEnterCollapse } = reactData
419
469
  const isCollapsed = $xeMenu.computeIsCollapsed
420
470
  if (item.permissionCode) {
@@ -428,7 +478,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
428
478
  'is--exact-active': isExactActive,
429
479
  'is--active': isActive,
430
480
  'is--expand': (!isCollapsed || isEnterCollapse) && isExpand
431
- }]
481
+ }],
482
+ attrs: {
483
+ 'data-menu-id': itemId
484
+ }
432
485
  }, [
433
486
  routerLink
434
487
  ? h('router-link', {
@@ -467,7 +520,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
467
520
  renderCollapseChildren (h: CreateElement, item: VxeMenuDefines.MenuItem, itemList: VxeMenuDefines.MenuItem[]): VNode {
468
521
  const $xeMenu = this
469
522
 
470
- const { itemKey, level, hasChild, isActive, isExactActive, routerLink, childList } = item
523
+ const { itemId, itemKey, level, hasChild, isActive, isExactActive, routerLink, childList } = item
471
524
  if (item.permissionCode) {
472
525
  if (!permission.checkVisible(item.permissionCode)) {
473
526
  return renderEmptyElement($xeMenu)
@@ -478,7 +531,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
478
531
  class: ['vxe-menu--item-wrapper', `vxe-menu--item-level${level}`, {
479
532
  'is--exact-active': isExactActive,
480
533
  'is--active': isActive
481
- }]
534
+ }],
535
+ attrs: {
536
+ 'data-menu-id': itemId
537
+ }
482
538
  }, [
483
539
  routerLink
484
540
  ? h('router-link', {
@@ -594,6 +650,18 @@ export default /* define-vxe-component start */ defineVxeComponent({
594
650
  $xeMenu.handleCollapseMenu()
595
651
  }
596
652
  },
653
+ created () {
654
+ const $xeMenu = this
655
+ const props = $xeMenu
656
+
657
+ $xeMenu.internalData = createInternalData()
658
+
659
+ const reactData = $xeMenu.reactData
660
+ reactData.initialized = !!props.collapsed
661
+ reactData.activeName = props.value
662
+ $xeMenu.updateMenuConfig()
663
+ $xeMenu.updateActiveMenu(true)
664
+ },
597
665
  mounted () {
598
666
  const $xeMenu = this
599
667
  const props = $xeMenu
@@ -603,13 +671,14 @@ export default /* define-vxe-component start */ defineVxeComponent({
603
671
  if (menuConfig && !VxeUIContextMenu) {
604
672
  errLog('vxe.error.reqComp', ['vxe-context-menu'])
605
673
  }
606
- globalEvents.on($xeMenu, 'resize', $xeMenu.updateCollapseStyle)
607
674
  $xeMenu.updateCollapseStyle()
675
+ globalEvents.on($xeMenu, 'resize', $xeMenu.updateCollapseStyle)
608
676
  },
609
677
  beforeDestroy () {
610
678
  const $xeMenu = this
679
+ const reactData = $xeMenu.reactData
680
+ const internalData = $xeMenu.internalData
611
681
 
612
- globalEvents.off($xeMenu, 'resize')
613
682
  const collapseEl = $xeMenu.$refs.refCollapseElem as HTMLDivElement
614
683
  if (collapseEl) {
615
684
  const parentNode = collapseEl.parentNode
@@ -617,16 +686,9 @@ export default /* define-vxe-component start */ defineVxeComponent({
617
686
  parentNode.removeChild(collapseEl)
618
687
  }
619
688
  }
620
- },
621
- created () {
622
- const $xeMenu = this
623
- const props = $xeMenu
624
-
625
- const reactData = $xeMenu.reactData
626
- reactData.initialized = !!props.collapsed
627
- reactData.activeName = props.value
628
- $xeMenu.updateMenuConfig()
629
- $xeMenu.updateActiveMenu(true)
689
+ globalEvents.off($xeMenu, 'resize')
690
+ XEUtils.assign(reactData, createReactData())
691
+ XEUtils.assign(internalData, createInternalData())
630
692
  },
631
693
  render (this: any, h) {
632
694
  return this.renderVN(h)
@@ -2099,6 +2099,14 @@ export default /* define-vxe-component start */ defineVxeComponent({
2099
2099
  }
2100
2100
  return $xeTree.$nextTick()
2101
2101
  },
2102
+ getRecordset () {
2103
+ const $xeTree = this
2104
+
2105
+ return {
2106
+ insertRecords: $xeTree.getInsertRecords(),
2107
+ removeRecords: $xeTree.getRemoveRecords()
2108
+ }
2109
+ },
2102
2110
  handleContextmenuEvent (evnt: MouseEvent, node: any) {
2103
2111
  const $xeTree = this
2104
2112
  const props = $xeTree
@@ -2618,6 +2626,11 @@ export default /* define-vxe-component start */ defineVxeComponent({
2618
2626
  },
2619
2627
  getCheckboxNodes () {
2620
2628
  const $xeTree = this
2629
+
2630
+ return $xeTree.getCheckboxRecords()
2631
+ },
2632
+ getCheckboxRecords () {
2633
+ const $xeTree = this
2621
2634
  const internalData = $xeTree.internalData
2622
2635
 
2623
2636
  const { nodeMaps, selectCheckboxMaps } = internalData
@@ -3544,9 +3557,9 @@ export default /* define-vxe-component start */ defineVxeComponent({
3544
3557
  ])
3545
3558
  ]
3546
3559
  : []),
3547
- $xeTree.renderDragIcon(h, node, nodeid),
3548
3560
  $xeTree.renderRadio(h, node, nodeid, isExistChild, nLevel, isRadioChecked),
3549
3561
  $xeTree.renderCheckbox(h, node, nodeid, isExistChild, nLevel, isCheckboxChecked, isIndeterminate),
3562
+ $xeTree.renderDragIcon(h, node, nodeid),
3550
3563
  h('div', {
3551
3564
  class: 'vxe-tree--node-item-inner'
3552
3565
  }, [
@@ -3892,6 +3905,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
3892
3905
  internalData.resizeObserver = resizeObserver
3893
3906
  }
3894
3907
 
3908
+ $xeTree.recalculate()
3895
3909
  globalEvents.on($xeTree, 'resize', $xeTree.handleGlobalResizeEvent)
3896
3910
  },
3897
3911
  beforeDestroy () {
@@ -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
 
@@ -9,6 +9,7 @@ export declare const VxeMenu: DefineVxeComponentApp<VxeMenuProps, VxeMenuEventPr
9
9
  export type VxeMenuComponent = DefineVxeComponentOptions<VxeMenuProps>
10
10
 
11
11
  export type VxeMenuInstance = DefineVxeComponentInstance<{
12
+ internalData: MenuInternalData
12
13
  reactData: MenuReactData
13
14
  }, VxeMenuProps, VxeMenuPrivateComputed, VxeMenuMethods>
14
15
 
@@ -79,6 +80,10 @@ export interface MenuPrivateComputed {
79
80
  }
80
81
  export interface VxeMenuPrivateComputed extends MenuPrivateComputed { }
81
82
 
83
+ export interface MenuInternalData {
84
+ menuEffectMaps: Record<number, number>
85
+ }
86
+
82
87
  export interface MenuReactData {
83
88
  initialized: boolean
84
89
  collapseStyle: VxeComponentStyleType
@@ -111,6 +116,7 @@ export namespace VxeMenuDefines {
111
116
  }
112
117
 
113
118
  export interface MenuItem extends VxeMenuPropTypes.MenuOption {
119
+ itemId: number
114
120
  itemKey: string | number
115
121
  level: number,
116
122
  parentKey: string | number
@@ -537,6 +537,10 @@ export interface TreeMethods<D = any> {
537
537
  * 只对 show-checkbox 有效,获取复选框的节点
538
538
  */
539
539
  getCheckboxNodes(): D[]
540
+ /**
541
+ * 只对 show-checkbox 有效,获取复选框的节点
542
+ */
543
+ getCheckboxRecords(): D[]
540
544
  /**
541
545
  * 用于 showCheckbox,手动清空复选框的
542
546
  */
@@ -717,6 +721,14 @@ export interface TreeMethods<D = any> {
717
721
  * 手动关闭工具提示
718
722
  */
719
723
  closeTooltip(): Promise<void>
724
+ /**
725
+ * 获取列表数据集
726
+ * 获取新增、删除的数据
727
+ */
728
+ getRecordset(): {
729
+ insertRecords: D[]
730
+ removeRecords: D[]
731
+ }
720
732
  }
721
733
  export interface VxeTreeMethods<D = any> extends TreeMethods<D> { }
722
734