vxe-pc-ui 3.16.6 → 3.16.8

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 (61) hide show
  1. package/es/cascader/src/cascader.js +66 -24
  2. package/es/cascader/style.css +9 -9
  3. package/es/cascader/style.min.css +1 -1
  4. package/es/date-range-picker/src/date-range-picker.js +25 -9
  5. package/es/icon/style.css +1 -1
  6. package/es/menu/src/menu.js +82 -32
  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/ui/index.js +3 -3
  12. package/es/ui/src/log.js +1 -1
  13. package/es/vxe-cascader/style.css +9 -9
  14. package/es/vxe-cascader/style.min.css +1 -1
  15. package/es/vxe-menu/style.css +16 -7
  16. package/es/vxe-menu/style.min.css +1 -1
  17. package/lib/cascader/src/cascader.js +89 -29
  18. package/lib/cascader/src/cascader.min.js +1 -1
  19. package/lib/cascader/style/style.css +9 -9
  20. package/lib/cascader/style/style.min.css +1 -1
  21. package/lib/date-range-picker/src/date-range-picker.js +23 -9
  22. package/lib/date-range-picker/src/date-range-picker.min.js +1 -1
  23. package/lib/icon/style/style.css +1 -1
  24. package/lib/icon/style/style.min.css +1 -1
  25. package/lib/index.umd.js +203 -71
  26. package/lib/index.umd.min.js +1 -1
  27. package/lib/menu/src/menu.js +85 -29
  28. package/lib/menu/src/menu.min.js +1 -1
  29. package/lib/menu/style/style.css +16 -7
  30. package/lib/menu/style/style.min.css +1 -1
  31. package/lib/style.css +1 -1
  32. package/lib/style.min.css +1 -1
  33. package/lib/ui/index.js +3 -3
  34. package/lib/ui/index.min.js +1 -1
  35. package/lib/ui/src/log.js +1 -1
  36. package/lib/ui/src/log.min.js +1 -1
  37. package/lib/vxe-cascader/style/style.css +9 -9
  38. package/lib/vxe-cascader/style/style.min.css +1 -1
  39. package/lib/vxe-menu/style/style.css +16 -7
  40. package/lib/vxe-menu/style/style.min.css +1 -1
  41. package/package.json +1 -1
  42. package/packages/cascader/src/cascader.ts +66 -23
  43. package/packages/date-range-picker/src/date-range-picker.ts +23 -9
  44. package/packages/menu/src/menu.ts +92 -29
  45. package/packages/ui/index.ts +2 -2
  46. package/styles/components/cascader.scss +9 -9
  47. package/styles/components/menu.scss +10 -4
  48. package/types/components/cascader.d.ts +1 -0
  49. package/types/components/menu.d.ts +6 -0
  50. /package/es/icon/{iconfont.1783838609874.ttf → iconfont.1783923648005.ttf} +0 -0
  51. /package/es/icon/{iconfont.1783838609874.woff → iconfont.1783923648005.woff} +0 -0
  52. /package/es/icon/{iconfont.1783838609874.woff2 → iconfont.1783923648005.woff2} +0 -0
  53. /package/es/{iconfont.1783838609874.ttf → iconfont.1783923648005.ttf} +0 -0
  54. /package/es/{iconfont.1783838609874.woff → iconfont.1783923648005.woff} +0 -0
  55. /package/es/{iconfont.1783838609874.woff2 → iconfont.1783923648005.woff2} +0 -0
  56. /package/lib/icon/style/{iconfont.1783838609874.ttf → iconfont.1783923648005.ttf} +0 -0
  57. /package/lib/icon/style/{iconfont.1783838609874.woff → iconfont.1783923648005.woff} +0 -0
  58. /package/lib/icon/style/{iconfont.1783838609874.woff2 → iconfont.1783923648005.woff2} +0 -0
  59. /package/lib/{iconfont.1783838609874.ttf → iconfont.1783923648005.ttf} +0 -0
  60. /package/lib/{iconfont.1783838609874.woff → iconfont.1783923648005.woff} +0 -0
  61. /package/lib/{iconfont.1783838609874.woff2 → iconfont.1783923648005.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,21 @@ 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 isCollapsed = $xeMenu.computeIsCollapsed
276
+ const expanded = !isExpand
257
277
  if (hasChild) {
258
278
  evnt.stopPropagation()
259
279
  evnt.preventDefault()
280
+
281
+ if (menuEffectMaps[itemId]) {
282
+ clearTimeout(menuEffectMaps[itemId])
283
+ }
284
+
260
285
  if (accordion) {
261
286
  itemList.forEach(obj => {
262
287
  if (obj !== item) {
@@ -264,7 +289,33 @@ export default /* define-vxe-component start */ defineVxeComponent({
264
289
  }
265
290
  })
266
291
  }
267
- item.isExpand = !isExpand
292
+ item.isExpand = expanded
293
+
294
+ const wrapperEl = isCollapsed ? $xeMenu.$refs.refCollapseElem as HTMLDivElement : $xeMenu.$refs.refElem as HTMLDivElement
295
+ if (wrapperEl) {
296
+ const nemuEl = wrapperEl.querySelector<HTMLDivElement>(`.vxe-menu--item-wrapper[data-menu-id="${itemId}"]`)
297
+ const groupEl = nemuEl ? nemuEl.querySelector<HTMLDivElement>('.vxe-menu--item-group') : null
298
+ if (groupEl) {
299
+ if (expanded) {
300
+ groupEl.style.height = '0'
301
+ groupEl.setAttribute('data-effect', 'y')
302
+ requestAnimationFrame(() => {
303
+ groupEl.style.height = `${groupEl.scrollHeight}px`
304
+ })
305
+ } else {
306
+ groupEl.style.height = `${groupEl.scrollHeight}px`
307
+ groupEl.setAttribute('data-effect', 'y')
308
+ requestAnimationFrame(() => {
309
+ groupEl.style.height = '0'
310
+ })
311
+ }
312
+ menuEffectMaps[itemId] = setTimeout(() => {
313
+ delete menuEffectMaps[itemId]
314
+ groupEl.removeAttribute('data-effect')
315
+ groupEl.style.height = ''
316
+ }, 350)
317
+ }
318
+ }
268
319
  }
269
320
  },
270
321
  handleContextmenuEvent (evnt: MouseEvent, item: VxeMenuDefines.MenuItem) {
@@ -343,7 +394,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
343
394
  const reactData = $xeMenu.reactData
344
395
 
345
396
  const { collapseStyle } = reactData
346
- const el = this.$refs.refElem as HTMLDivElement
397
+ const el = $xeMenu.$refs.refElem as HTMLDivElement
347
398
  reactData.collapseStyle = Object.assign({}, collapseStyle, {
348
399
  width: el ? toCssUnit(el.offsetWidth) : ''
349
400
  })
@@ -414,7 +465,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
414
465
  const $xeMenu = this
415
466
  const reactData = $xeMenu.reactData
416
467
 
417
- const { itemKey, level, hasChild, isActive, isExactActive, isExpand, routerLink, childList } = item
468
+ const { itemId, itemKey, level, hasChild, isActive, isExactActive, isExpand, routerLink, childList } = item
418
469
  const { isEnterCollapse } = reactData
419
470
  const isCollapsed = $xeMenu.computeIsCollapsed
420
471
  if (item.permissionCode) {
@@ -428,7 +479,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
428
479
  'is--exact-active': isExactActive,
429
480
  'is--active': isActive,
430
481
  'is--expand': (!isCollapsed || isEnterCollapse) && isExpand
431
- }]
482
+ }],
483
+ attrs: {
484
+ 'data-menu-id': itemId
485
+ }
432
486
  }, [
433
487
  routerLink
434
488
  ? h('router-link', {
@@ -467,7 +521,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
467
521
  renderCollapseChildren (h: CreateElement, item: VxeMenuDefines.MenuItem, itemList: VxeMenuDefines.MenuItem[]): VNode {
468
522
  const $xeMenu = this
469
523
 
470
- const { itemKey, level, hasChild, isActive, isExactActive, routerLink, childList } = item
524
+ const { itemId, itemKey, level, hasChild, isActive, isExactActive, routerLink, childList } = item
471
525
  if (item.permissionCode) {
472
526
  if (!permission.checkVisible(item.permissionCode)) {
473
527
  return renderEmptyElement($xeMenu)
@@ -478,7 +532,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
478
532
  class: ['vxe-menu--item-wrapper', `vxe-menu--item-level${level}`, {
479
533
  'is--exact-active': isExactActive,
480
534
  'is--active': isActive
481
- }]
535
+ }],
536
+ attrs: {
537
+ 'data-menu-id': itemId
538
+ }
482
539
  }, [
483
540
  routerLink
484
541
  ? h('router-link', {
@@ -594,6 +651,18 @@ export default /* define-vxe-component start */ defineVxeComponent({
594
651
  $xeMenu.handleCollapseMenu()
595
652
  }
596
653
  },
654
+ created () {
655
+ const $xeMenu = this
656
+ const props = $xeMenu
657
+
658
+ $xeMenu.internalData = createInternalData()
659
+
660
+ const reactData = $xeMenu.reactData
661
+ reactData.initialized = !!props.collapsed
662
+ reactData.activeName = props.value
663
+ $xeMenu.updateMenuConfig()
664
+ $xeMenu.updateActiveMenu(true)
665
+ },
597
666
  mounted () {
598
667
  const $xeMenu = this
599
668
  const props = $xeMenu
@@ -603,13 +672,14 @@ export default /* define-vxe-component start */ defineVxeComponent({
603
672
  if (menuConfig && !VxeUIContextMenu) {
604
673
  errLog('vxe.error.reqComp', ['vxe-context-menu'])
605
674
  }
606
- globalEvents.on($xeMenu, 'resize', $xeMenu.updateCollapseStyle)
607
675
  $xeMenu.updateCollapseStyle()
676
+ globalEvents.on($xeMenu, 'resize', $xeMenu.updateCollapseStyle)
608
677
  },
609
678
  beforeDestroy () {
610
679
  const $xeMenu = this
680
+ const reactData = $xeMenu.reactData
681
+ const internalData = $xeMenu.internalData
611
682
 
612
- globalEvents.off($xeMenu, 'resize')
613
683
  const collapseEl = $xeMenu.$refs.refCollapseElem as HTMLDivElement
614
684
  if (collapseEl) {
615
685
  const parentNode = collapseEl.parentNode
@@ -617,16 +687,9 @@ export default /* define-vxe-component start */ defineVxeComponent({
617
687
  parentNode.removeChild(collapseEl)
618
688
  }
619
689
  }
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)
690
+ globalEvents.off($xeMenu, 'resize')
691
+ XEUtils.assign(reactData, createReactData())
692
+ XEUtils.assign(internalData, createInternalData())
630
693
  },
631
694
  render (this: any, h) {
632
695
  return this.renderVN(h)
@@ -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',
@@ -5,18 +5,18 @@
5
5
  .vxe-cascader,
6
6
  .vxe-cascader--panel {
7
7
  --vxe-ui-cascader-current-font-size: var(--vxe-ui-font-size-default);
8
- --vxe-ui-cascader-current-font-size: var(--vxe-ui-layout-padding-default);
8
+ --vxe-ui-cascader-current-padding: var(--vxe-ui-layout-padding-default);
9
9
  &.size--medium {
10
10
  --vxe-ui-cascader-current-font-size: var(--vxe-ui-font-size-medium);
11
- --vxe-ui-cascader-current-font-size: var(--vxe-ui-layout-padding-medium);
11
+ --vxe-ui-cascader-current-padding: var(--vxe-ui-layout-padding-medium);
12
12
  }
13
13
  &.size--small {
14
14
  --vxe-ui-cascader-current-font-size: var(--vxe-ui-font-size-small);
15
- --vxe-ui-cascader-current-font-size: var(--vxe-ui-layout-padding-small);
15
+ --vxe-ui-cascader-current-padding: var(--vxe-ui-layout-padding-small);
16
16
  }
17
17
  &.size--mini {
18
18
  --vxe-ui-cascader-current-font-size: var(--vxe-ui-font-size-mini);
19
- --vxe-ui-cascader-current-font-size: var(--vxe-ui-layout-padding-mini);
19
+ --vxe-ui-cascader-current-padding: var(--vxe-ui-layout-padding-mini);
20
20
  }
21
21
  }
22
22
 
@@ -83,8 +83,8 @@
83
83
 
84
84
  .vxe-cascader--panel-search {
85
85
  display: block;
86
- padding: var(--vxe-ui-cascader-current-font-size);
87
- width: calc(var(--vxe-ui-cascader-node-width) * var(--vxe-ui-cascader-chunk-size));
86
+ padding: var(--vxe-ui-cascader-current-padding);
87
+ width: 100%;
88
88
  .vxe-cascader-search--input {
89
89
  width: 100%;
90
90
  }
@@ -99,7 +99,7 @@
99
99
  min-height: 2em;
100
100
  }
101
101
  .vxe-cascader--total-btns {
102
- padding-left: var(--vxe-ui-cascader-current-font-size);
102
+ padding-left: var(--vxe-ui-cascader-current-padding);
103
103
  flex-grow: 1;
104
104
  }
105
105
  .vxe-cascader--total-btns,
@@ -166,7 +166,7 @@
166
166
  .vxe-cascader-chunk--item-wrapper {
167
167
  flex-shrink: 0;
168
168
  border-left: 1px solid var(--vxe-ui-base-popup-border-color);
169
- padding: var(--vxe-ui-cascader-current-font-size) 0;
169
+ padding: var(--vxe-ui-cascader-current-padding) 0;
170
170
  &:first-child {
171
171
  border-left: 0;
172
172
  }
@@ -190,7 +190,7 @@
190
190
  flex-direction: row;
191
191
  height: var(--vxe-ui-cascader-node-height);
192
192
  line-height: var(--vxe-ui-cascader-node-height);
193
- padding: 0 calc(var(--vxe-ui-cascader-current-font-size) + 18px) 0 var(--vxe-ui-cascader-current-font-size);
193
+ padding: 0 calc(var(--vxe-ui-cascader-current-padding) + 18px) 0 var(--vxe-ui-cascader-current-padding);
194
194
  cursor: pointer;
195
195
  &:hover {
196
196
  background-color: var(--vxe-ui-cascader-node-hover-background-color);
@@ -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
  }
@@ -250,6 +250,7 @@ export interface CascaderInternalData {
250
250
  selectCheckboxMaps: Record<string, any>
251
251
  treeExpandedMaps: Record<string, boolean>
252
252
  treeExpandLazyLoadedMaps: Record<string, boolean>
253
+ isUpdateMode?: boolean
253
254
  }
254
255
 
255
256
  export interface CascaderMethods {
@@ -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