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.
- package/dist/all.esm.js +177 -108
- package/dist/style.css +1 -1
- package/dist/style.min.css +1 -1
- package/es/icon/style.css +1 -1
- package/es/list/src/list.js +21 -9
- package/es/menu/src/menu.js +64 -17
- package/es/menu/style.css +16 -7
- package/es/menu/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tree/src/tree.js +12 -2
- package/es/ui/index.js +3 -3
- package/es/ui/src/log.js +1 -1
- package/es/vxe-menu/style.css +16 -7
- package/es/vxe-menu/style.min.css +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +102 -28
- package/lib/index.umd.min.js +1 -1
- package/lib/list/src/list.js +21 -9
- package/lib/list/src/list.min.js +1 -1
- package/lib/menu/src/menu.js +65 -13
- package/lib/menu/src/menu.min.js +1 -1
- package/lib/menu/style/style.css +16 -7
- package/lib/menu/style/style.min.css +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tree/src/tree.js +12 -2
- package/lib/tree/src/tree.min.js +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-menu/style/style.css +16 -7
- package/lib/vxe-menu/style/style.min.css +1 -1
- package/package.json +1 -1
- package/packages/list/src/list.ts +25 -13
- package/packages/menu/src/menu.ts +70 -17
- package/packages/tree/src/tree.ts +12 -2
- package/packages/ui/index.ts +2 -2
- package/styles/components/menu.scss +10 -4
- package/types/components/list.d.ts +12 -0
- package/types/components/menu.d.ts +6 -0
- package/types/components/tree.d.ts +12 -0
- /package/es/icon/{iconfont.1783670404729.ttf → iconfont.1783873713408.ttf} +0 -0
- /package/es/icon/{iconfont.1783670404729.woff → iconfont.1783873713408.woff} +0 -0
- /package/es/icon/{iconfont.1783670404729.woff2 → iconfont.1783873713408.woff2} +0 -0
- /package/es/{iconfont.1783670404729.ttf → iconfont.1783873713408.ttf} +0 -0
- /package/es/{iconfont.1783670404729.woff → iconfont.1783873713408.woff} +0 -0
- /package/es/{iconfont.1783670404729.woff2 → iconfont.1783873713408.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1783670404729.ttf → iconfont.1783873713408.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1783670404729.woff → iconfont.1783873713408.woff} +0 -0
- /package/lib/icon/style/{iconfont.1783670404729.woff2 → iconfont.1783873713408.woff2} +0 -0
- /package/lib/{iconfont.1783670404729.ttf → iconfont.1783873713408.ttf} +0 -0
- /package/lib/{iconfont.1783670404729.woff → iconfont.1783873713408.woff} +0 -0
- /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
|
|
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,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 {
|
|
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 =
|
|
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
|
|
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',
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
|
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
|