vxe-pc-ui 4.16.6 → 4.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.
- package/dist/all.esm.js +236 -132
- package/dist/style.css +1 -1
- package/dist/style.min.css +1 -1
- package/es/cascader/src/cascader.js +66 -26
- package/es/cascader/style.css +9 -9
- package/es/cascader/style.min.css +1 -1
- package/es/date-range-picker/src/date-range-picker.js +25 -9
- package/es/icon/style.css +1 -1
- package/es/menu/src/menu.js +65 -17
- package/es/menu/style.css +15 -8
- package/es/menu/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/ui/index.js +3 -3
- package/es/ui/src/log.js +1 -1
- package/es/vxe-cascader/style.css +9 -9
- package/es/vxe-cascader/style.min.css +1 -1
- package/es/vxe-menu/style.css +15 -8
- package/es/vxe-menu/style.min.css +1 -1
- package/lib/cascader/src/cascader.js +73 -27
- package/lib/cascader/src/cascader.min.js +1 -1
- package/lib/cascader/style/style.css +9 -9
- package/lib/cascader/style/style.min.css +1 -1
- package/lib/date-range-picker/src/date-range-picker.js +27 -9
- package/lib/date-range-picker/src/date-range-picker.min.js +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +171 -53
- package/lib/index.umd.min.js +1 -1
- package/lib/menu/src/menu.js +66 -13
- package/lib/menu/src/menu.min.js +1 -1
- package/lib/menu/style/style.css +15 -8
- package/lib/menu/style/style.min.css +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/ui/index.js +3 -3
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-cascader/style/style.css +9 -9
- package/lib/vxe-cascader/style/style.min.css +1 -1
- package/lib/vxe-menu/style/style.css +15 -8
- package/lib/vxe-menu/style/style.min.css +1 -1
- package/package.json +1 -1
- package/packages/cascader/src/cascader.ts +66 -25
- package/packages/date-range-picker/src/date-range-picker.ts +23 -9
- package/packages/menu/src/menu.ts +71 -17
- package/packages/ui/index.ts +2 -2
- package/styles/components/cascader.scss +9 -9
- package/styles/components/menu.scss +9 -5
- package/types/components/cascader.d.ts +1 -0
- package/types/components/menu.d.ts +6 -0
- /package/es/icon/{iconfont.1783838735018.ttf → iconfont.1783923662673.ttf} +0 -0
- /package/es/icon/{iconfont.1783838735018.woff → iconfont.1783923662673.woff} +0 -0
- /package/es/icon/{iconfont.1783838735018.woff2 → iconfont.1783923662673.woff2} +0 -0
- /package/es/{iconfont.1783838735018.ttf → iconfont.1783923662673.ttf} +0 -0
- /package/es/{iconfont.1783838735018.woff → iconfont.1783923662673.woff} +0 -0
- /package/es/{iconfont.1783838735018.woff2 → iconfont.1783923662673.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1783838735018.ttf → iconfont.1783923662673.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1783838735018.woff → iconfont.1783923662673.woff} +0 -0
- /package/lib/icon/style/{iconfont.1783838735018.woff2 → iconfont.1783923662673.woff2} +0 -0
- /package/lib/{iconfont.1783838735018.ttf → iconfont.1783923662673.ttf} +0 -0
- /package/lib/{iconfont.1783838735018.woff → iconfont.1783923662673.woff} +0 -0
- /package/lib/{iconfont.1783838735018.woff2 → iconfont.1783923662673.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
|
|
61
|
-
|
|
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,18 @@ export default defineVxeComponent({
|
|
|
211
225
|
|
|
212
226
|
const handleClickIconCollapse = (evnt: MouseEvent, item: VxeMenuDefines.MenuItem, itemList: VxeMenuDefines.MenuItem[]) => {
|
|
213
227
|
const { accordion } = props
|
|
214
|
-
const {
|
|
228
|
+
const { menuEffectMaps } = internalData
|
|
229
|
+
const { itemId, hasChild, isExpand } = item
|
|
230
|
+
const isCollapsed = computeIsCollapsed.value
|
|
231
|
+
const expanded = !isExpand
|
|
215
232
|
if (hasChild) {
|
|
216
233
|
evnt.stopPropagation()
|
|
217
234
|
evnt.preventDefault()
|
|
235
|
+
|
|
236
|
+
if (menuEffectMaps[itemId]) {
|
|
237
|
+
clearTimeout(menuEffectMaps[itemId])
|
|
238
|
+
}
|
|
239
|
+
|
|
218
240
|
if (accordion) {
|
|
219
241
|
itemList.forEach(obj => {
|
|
220
242
|
if (obj !== item) {
|
|
@@ -222,7 +244,33 @@ export default defineVxeComponent({
|
|
|
222
244
|
}
|
|
223
245
|
})
|
|
224
246
|
}
|
|
225
|
-
item.isExpand =
|
|
247
|
+
item.isExpand = expanded
|
|
248
|
+
|
|
249
|
+
const wrapperEl = isCollapsed ? refCollapseElem.value : refElem.value
|
|
250
|
+
if (wrapperEl) {
|
|
251
|
+
const nemuEl = wrapperEl.querySelector<HTMLDivElement>(`.vxe-menu--item-wrapper[data-menu-id="${itemId}"]`)
|
|
252
|
+
const groupEl = nemuEl ? nemuEl.querySelector<HTMLDivElement>('.vxe-menu--item-group') : null
|
|
253
|
+
if (groupEl) {
|
|
254
|
+
if (expanded) {
|
|
255
|
+
groupEl.style.height = '0'
|
|
256
|
+
groupEl.setAttribute('data-effect', 'y')
|
|
257
|
+
requestAnimationFrame(() => {
|
|
258
|
+
groupEl.style.height = `${groupEl.scrollHeight}px`
|
|
259
|
+
})
|
|
260
|
+
} else {
|
|
261
|
+
groupEl.style.height = `${groupEl.scrollHeight}px`
|
|
262
|
+
groupEl.setAttribute('data-effect', 'y')
|
|
263
|
+
requestAnimationFrame(() => {
|
|
264
|
+
groupEl.style.height = '0'
|
|
265
|
+
})
|
|
266
|
+
}
|
|
267
|
+
menuEffectMaps[itemId] = setTimeout(() => {
|
|
268
|
+
delete menuEffectMaps[itemId]
|
|
269
|
+
groupEl.removeAttribute('data-effect')
|
|
270
|
+
groupEl.style.height = ''
|
|
271
|
+
}, 350)
|
|
272
|
+
}
|
|
273
|
+
}
|
|
226
274
|
}
|
|
227
275
|
}
|
|
228
276
|
|
|
@@ -382,7 +430,7 @@ export default defineVxeComponent({
|
|
|
382
430
|
}
|
|
383
431
|
|
|
384
432
|
const renderDefaultChildren = (item: VxeMenuDefines.MenuItem, itemList: VxeMenuDefines.MenuItem[]): VNode => {
|
|
385
|
-
const { itemKey, level, hasChild, isActive, isExactActive, isExpand, routerLink, childList } = item
|
|
433
|
+
const { itemId, itemKey, level, hasChild, isActive, isExactActive, isExpand, routerLink, childList } = item
|
|
386
434
|
const { isEnterCollapse } = reactData
|
|
387
435
|
const isCollapsed = computeIsCollapsed.value
|
|
388
436
|
if (item.permissionCode) {
|
|
@@ -396,7 +444,8 @@ export default defineVxeComponent({
|
|
|
396
444
|
'is--exact-active': isExactActive,
|
|
397
445
|
'is--active': isActive,
|
|
398
446
|
'is--expand': (!isCollapsed || isEnterCollapse) && isExpand
|
|
399
|
-
}]
|
|
447
|
+
}],
|
|
448
|
+
'data-menu-id': itemId
|
|
400
449
|
}, [
|
|
401
450
|
routerLink
|
|
402
451
|
? h(resolveComponent('router-link'), {
|
|
@@ -429,7 +478,7 @@ export default defineVxeComponent({
|
|
|
429
478
|
}
|
|
430
479
|
|
|
431
480
|
const renderCollapseChildren = (item: VxeMenuDefines.MenuItem, itemList: VxeMenuDefines.MenuItem[]): VNode => {
|
|
432
|
-
const { itemKey, level, hasChild, isActive, isExactActive, routerLink, childList } = item
|
|
481
|
+
const { itemId, itemKey, level, hasChild, isActive, isExactActive, routerLink, childList } = item
|
|
433
482
|
if (item.permissionCode) {
|
|
434
483
|
if (!permission.checkVisible(item.permissionCode)) {
|
|
435
484
|
return renderEmptyElement($xeMenu)
|
|
@@ -440,7 +489,8 @@ export default defineVxeComponent({
|
|
|
440
489
|
class: ['vxe-menu--item-wrapper', `vxe-menu--item-level${level}`, {
|
|
441
490
|
'is--exact-active': isExactActive,
|
|
442
491
|
'is--active': isActive
|
|
443
|
-
}]
|
|
492
|
+
}],
|
|
493
|
+
'data-menu-id': itemId
|
|
444
494
|
}, [
|
|
445
495
|
routerLink
|
|
446
496
|
? h(resolveComponent('router-link'), {
|
|
@@ -560,7 +610,6 @@ export default defineVxeComponent({
|
|
|
560
610
|
})
|
|
561
611
|
|
|
562
612
|
onBeforeUnmount(() => {
|
|
563
|
-
globalEvents.off($xeMenu, 'resize')
|
|
564
613
|
const collapseEl = refCollapseElem.value
|
|
565
614
|
if (collapseEl) {
|
|
566
615
|
const parentNode = collapseEl.parentNode
|
|
@@ -568,8 +617,13 @@ export default defineVxeComponent({
|
|
|
568
617
|
parentNode.removeChild(collapseEl)
|
|
569
618
|
}
|
|
570
619
|
}
|
|
620
|
+
globalEvents.off($xeMenu, 'resize')
|
|
621
|
+
XEUtils.assign(reactData, createReactData())
|
|
622
|
+
XEUtils.assign(internalData, createInternalData())
|
|
571
623
|
})
|
|
572
624
|
|
|
625
|
+
reactData.initialized = !!props.collapsed
|
|
626
|
+
reactData.activeName = props.modelValue
|
|
573
627
|
updateMenuConfig()
|
|
574
628
|
updateActiveMenu(true)
|
|
575
629
|
|
package/packages/ui/index.ts
CHANGED
|
@@ -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-
|
|
517
|
-
MENU_ITEM_EXPAND_CLOSE: iconPrefix + 'arrow-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
87
|
-
width:
|
|
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-
|
|
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-
|
|
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-
|
|
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,9 +116,11 @@
|
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
.vxe-menu--item-group {
|
|
117
|
-
|
|
119
|
+
height: 0;
|
|
118
120
|
overflow: hidden;
|
|
119
|
-
|
|
121
|
+
&[data-effect] {
|
|
122
|
+
transition: height 0.3s ease-in-out;
|
|
123
|
+
}
|
|
120
124
|
}
|
|
121
125
|
.vxe-menu--item-wrapper {
|
|
122
126
|
&.is--active {
|
|
@@ -132,7 +136,7 @@
|
|
|
132
136
|
}
|
|
133
137
|
&.is--expand {
|
|
134
138
|
& > .vxe-menu--item-group {
|
|
135
|
-
|
|
139
|
+
height: auto;
|
|
136
140
|
}
|
|
137
141
|
}
|
|
138
142
|
}
|
|
@@ -257,6 +257,7 @@ export interface CascaderInternalData {
|
|
|
257
257
|
selectCheckboxMaps: Record<string, any>
|
|
258
258
|
treeExpandedMaps: Record<string, boolean>
|
|
259
259
|
treeExpandLazyLoadedMaps: Record<string, boolean>
|
|
260
|
+
isUpdateMode?: boolean
|
|
260
261
|
}
|
|
261
262
|
|
|
262
263
|
export interface CascaderMethods {
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|