vxe-pc-ui 4.11.30 → 4.11.32
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/es/backtop/src/backtop.js +1 -3
- package/es/button/src/button.js +21 -12
- package/es/components.js +3 -0
- package/es/context-menu/index.js +46 -0
- package/es/context-menu/src/context-menu.js +343 -0
- package/es/context-menu/style.css +112 -0
- package/es/context-menu/style.min.css +1 -0
- package/es/dynamics/index.js +29 -3
- package/es/icon/style.css +1 -1
- package/es/language/ar-EG.js +3 -0
- package/es/language/de-DE.js +3 -0
- package/es/language/en-US.js +3 -0
- package/es/language/es-ES.js +3 -0
- package/es/language/fr-FR.js +3 -0
- package/es/language/hu-HU.js +3 -0
- package/es/language/hy-AM.js +4 -1
- package/es/language/id-ID.js +3 -0
- package/es/language/it-IT.js +3 -0
- package/es/language/ja-JP.js +3 -0
- package/es/language/ko-KR.js +3 -0
- package/es/language/ms-MY.js +3 -0
- package/es/language/nb-NO.js +3 -0
- package/es/language/pt-BR.js +3 -0
- package/es/language/ru-RU.js +3 -0
- package/es/language/th-TH.js +3 -0
- package/es/language/ug-CN.js +3 -0
- package/es/language/uk-UA.js +3 -0
- package/es/language/uz-UZ.js +3 -0
- package/es/language/vi-VN.js +3 -0
- package/es/language/zh-CHT.js +3 -0
- package/es/language/zh-CN.js +4 -1
- package/es/print/src/print.js +24 -1
- package/es/print/src/util.js +8 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tree/src/tree.js +69 -21
- package/es/ui/index.js +8 -3
- package/es/ui/src/log.js +1 -1
- package/es/vxe-context-menu/index.js +3 -0
- package/es/vxe-context-menu/style.css +112 -0
- package/es/vxe-context-menu/style.min.css +1 -0
- package/lib/backtop/src/backtop.js +0 -2
- package/lib/backtop/src/backtop.min.js +1 -1
- package/lib/button/src/button.js +12 -6
- package/lib/button/src/button.min.js +1 -1
- package/lib/components.js +13 -1
- package/lib/components.min.js +1 -1
- package/lib/context-menu/index.js +56 -0
- package/lib/context-menu/index.min.js +1 -0
- package/lib/context-menu/src/context-menu.js +362 -0
- package/lib/context-menu/src/context-menu.min.js +1 -0
- package/lib/context-menu/style/index.js +1 -0
- package/lib/context-menu/style/style.css +112 -0
- package/lib/context-menu/style/style.min.css +1 -0
- package/lib/dynamics/index.js +33 -3
- package/lib/dynamics/index.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 +603 -40
- package/lib/index.umd.min.js +1 -1
- package/lib/language/ar-EG.js +3 -0
- package/lib/language/ar-EG.min.js +1 -1
- package/lib/language/ar-EG.umd.js +3 -0
- package/lib/language/de-DE.js +3 -0
- package/lib/language/de-DE.min.js +1 -1
- package/lib/language/de-DE.umd.js +3 -0
- package/lib/language/en-US.js +3 -0
- package/lib/language/en-US.min.js +1 -1
- package/lib/language/en-US.umd.js +3 -0
- package/lib/language/es-ES.js +3 -0
- package/lib/language/es-ES.min.js +1 -1
- package/lib/language/es-ES.umd.js +3 -0
- package/lib/language/fr-FR.js +3 -0
- package/lib/language/fr-FR.min.js +1 -1
- package/lib/language/fr-FR.umd.js +3 -0
- package/lib/language/hu-HU.js +3 -0
- package/lib/language/hu-HU.min.js +1 -1
- package/lib/language/hu-HU.umd.js +3 -0
- package/lib/language/hy-AM.js +4 -1
- package/lib/language/hy-AM.min.js +1 -1
- package/lib/language/hy-AM.umd.js +4 -1
- package/lib/language/id-ID.js +3 -0
- package/lib/language/id-ID.min.js +1 -1
- package/lib/language/id-ID.umd.js +3 -0
- package/lib/language/it-IT.js +3 -0
- package/lib/language/it-IT.min.js +1 -1
- package/lib/language/it-IT.umd.js +3 -0
- package/lib/language/ja-JP.js +3 -0
- package/lib/language/ja-JP.min.js +1 -1
- package/lib/language/ja-JP.umd.js +3 -0
- package/lib/language/ko-KR.js +3 -0
- package/lib/language/ko-KR.min.js +1 -1
- package/lib/language/ko-KR.umd.js +3 -0
- package/lib/language/ms-MY.js +3 -0
- package/lib/language/ms-MY.min.js +1 -1
- package/lib/language/ms-MY.umd.js +3 -0
- package/lib/language/nb-NO.js +3 -0
- package/lib/language/nb-NO.min.js +1 -1
- package/lib/language/nb-NO.umd.js +3 -0
- package/lib/language/pt-BR.js +3 -0
- package/lib/language/pt-BR.min.js +1 -1
- package/lib/language/pt-BR.umd.js +3 -0
- package/lib/language/ru-RU.js +3 -0
- package/lib/language/ru-RU.min.js +1 -1
- package/lib/language/ru-RU.umd.js +3 -0
- package/lib/language/th-TH.js +3 -0
- package/lib/language/th-TH.min.js +1 -1
- package/lib/language/th-TH.umd.js +3 -0
- package/lib/language/ug-CN.js +3 -0
- package/lib/language/ug-CN.min.js +1 -1
- package/lib/language/ug-CN.umd.js +3 -0
- package/lib/language/uk-UA.js +3 -0
- package/lib/language/uk-UA.min.js +1 -1
- package/lib/language/uk-UA.umd.js +3 -0
- package/lib/language/uz-UZ.js +3 -0
- package/lib/language/uz-UZ.min.js +1 -1
- package/lib/language/uz-UZ.umd.js +3 -0
- package/lib/language/vi-VN.js +3 -0
- package/lib/language/vi-VN.min.js +1 -1
- package/lib/language/vi-VN.umd.js +3 -0
- package/lib/language/zh-CHT.js +3 -0
- package/lib/language/zh-CHT.min.js +1 -1
- package/lib/language/zh-CHT.umd.js +3 -0
- package/lib/language/zh-CN.js +4 -1
- package/lib/language/zh-CN.min.js +1 -1
- package/lib/language/zh-CN.umd.js +4 -1
- package/lib/print/src/print.js +42 -1
- package/lib/print/src/print.min.js +1 -1
- package/lib/print/src/util.js +9 -2
- package/lib/print/src/util.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tree/src/tree.js +78 -20
- package/lib/tree/src/tree.min.js +1 -1
- package/lib/ui/index.js +8 -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-context-menu/index.js +22 -0
- package/lib/vxe-context-menu/index.min.js +1 -0
- package/lib/vxe-context-menu/style/index.js +1 -0
- package/lib/vxe-context-menu/style/style.css +112 -0
- package/lib/vxe-context-menu/style/style.min.css +1 -0
- package/package.json +1 -1
- package/packages/backtop/src/backtop.ts +1 -4
- package/packages/button/src/button.ts +22 -13
- package/packages/components.ts +3 -0
- package/packages/context-menu/index.ts +54 -0
- package/packages/context-menu/src/context-menu.ts +388 -0
- package/packages/dynamics/index.ts +36 -9
- package/packages/language/ar-EG.ts +3 -0
- package/packages/language/de-DE.ts +3 -0
- package/packages/language/en-US.ts +3 -0
- package/packages/language/es-ES.ts +3 -0
- package/packages/language/fr-FR.ts +3 -0
- package/packages/language/hu-HU.ts +3 -0
- package/packages/language/hy-AM.ts +4 -1
- package/packages/language/id-ID.ts +3 -0
- package/packages/language/it-IT.ts +3 -0
- package/packages/language/ja-JP.ts +3 -0
- package/packages/language/ko-KR.ts +3 -0
- package/packages/language/ms-MY.ts +3 -0
- package/packages/language/nb-NO.ts +3 -0
- package/packages/language/pt-BR.ts +3 -0
- package/packages/language/ru-RU.ts +3 -0
- package/packages/language/th-TH.ts +3 -0
- package/packages/language/ug-CN.ts +3 -0
- package/packages/language/uk-UA.ts +3 -0
- package/packages/language/uz-UZ.ts +3 -0
- package/packages/language/vi-VN.ts +3 -0
- package/packages/language/zh-CHT.ts +3 -0
- package/packages/language/zh-CN.ts +4 -1
- package/packages/print/src/print.ts +24 -1
- package/packages/print/src/util.ts +9 -1
- package/packages/tree/src/tree.ts +73 -22
- package/packages/ui/index.ts +8 -2
- package/styles/all.scss +1 -0
- package/styles/components/backtop.scss +1 -1
- package/styles/components/context-menu.scss +113 -0
- package/styles/theme/base.scss +3 -0
- package/types/all.d.ts +3 -0
- package/types/components/button.d.ts +3 -1
- package/types/components/context-menu.d.ts +286 -0
- package/types/components/password-input.d.ts +2 -0
- package/types/components/print.d.ts +8 -0
- package/types/components/table.d.ts +8 -0
- package/types/components/tree.d.ts +46 -1
- package/types/ui/global-config.d.ts +2 -0
- package/types/ui/global-icon.d.ts +4 -0
- package/types/ui/index.d.ts +3 -0
- /package/es/icon/{iconfont.1767491587367.ttf → iconfont.1767614230277.ttf} +0 -0
- /package/es/icon/{iconfont.1767491587367.woff → iconfont.1767614230277.woff} +0 -0
- /package/es/icon/{iconfont.1767491587367.woff2 → iconfont.1767614230277.woff2} +0 -0
- /package/es/{iconfont.1767491587367.ttf → iconfont.1767614230277.ttf} +0 -0
- /package/es/{iconfont.1767491587367.woff → iconfont.1767614230277.woff} +0 -0
- /package/es/{iconfont.1767491587367.woff2 → iconfont.1767614230277.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1767491587367.ttf → iconfont.1767614230277.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1767491587367.woff → iconfont.1767614230277.woff} +0 -0
- /package/lib/icon/style/{iconfont.1767491587367.woff2 → iconfont.1767614230277.woff2} +0 -0
- /package/lib/{iconfont.1767491587367.ttf → iconfont.1767614230277.ttf} +0 -0
- /package/lib/{iconfont.1767491587367.woff → iconfont.1767614230277.woff} +0 -0
- /package/lib/{iconfont.1767491587367.woff2 → iconfont.1767614230277.woff2} +0 -0
|
@@ -106,7 +106,7 @@ export default {
|
|
|
106
106
|
allChecked: '全选',
|
|
107
107
|
total: '{0} / {1}',
|
|
108
108
|
search: '搜索',
|
|
109
|
-
loadingText: '
|
|
109
|
+
loadingText: '加载中...',
|
|
110
110
|
emptyText: '暂无数据',
|
|
111
111
|
maxOpt: '最大可选择的数量不能超过 {0} 个',
|
|
112
112
|
overSizeErr: '已超出最大可选数量 {0} 个,超出部分将被忽略!',
|
|
@@ -539,6 +539,9 @@ export default {
|
|
|
539
539
|
ss: '秒'
|
|
540
540
|
}
|
|
541
541
|
},
|
|
542
|
+
contextMenu: {
|
|
543
|
+
loadingText: '加载中...'
|
|
544
|
+
},
|
|
542
545
|
gantt: {
|
|
543
546
|
tFullFormat: {
|
|
544
547
|
year: '{yyyy}年',
|
|
@@ -106,7 +106,7 @@ export default {
|
|
|
106
106
|
allChecked: '全选',
|
|
107
107
|
total: '{0} / {1}',
|
|
108
108
|
search: '搜索',
|
|
109
|
-
loadingText: '
|
|
109
|
+
loadingText: '加载中...',
|
|
110
110
|
emptyText: '暂无数据',
|
|
111
111
|
maxSize: '最大可选择的数量不能超过 {0} 个',
|
|
112
112
|
overSizeErr: '已超出最大可选数量 {0} 个,超出部分将被忽略!',
|
|
@@ -539,6 +539,9 @@ export default {
|
|
|
539
539
|
ss: '秒'
|
|
540
540
|
}
|
|
541
541
|
},
|
|
542
|
+
contextMenu: {
|
|
543
|
+
loadingText: '加载中...'
|
|
544
|
+
},
|
|
542
545
|
gantt: {
|
|
543
546
|
tFullFormat: {
|
|
544
547
|
year: '{yyyy}年',
|
|
@@ -47,6 +47,10 @@ export default defineVxeComponent({
|
|
|
47
47
|
type: String as PropType<VxePrintPropTypes.CustomStyle>,
|
|
48
48
|
default: () => getConfig().print.customStyle
|
|
49
49
|
},
|
|
50
|
+
styleUrls: {
|
|
51
|
+
type: Array as PropType<VxePrintPropTypes.StyleUrls>,
|
|
52
|
+
default: () => getConfig().print.styleUrls
|
|
53
|
+
},
|
|
50
54
|
beforeMethod: Function as PropType<VxePrintPropTypes.BeforeMethod>
|
|
51
55
|
},
|
|
52
56
|
emits: [] as VxePrintEmits,
|
|
@@ -85,8 +89,27 @@ export default defineVxeComponent({
|
|
|
85
89
|
const printMethods: PrintMethods = {
|
|
86
90
|
dispatchEvent,
|
|
87
91
|
print () {
|
|
92
|
+
const { align, title, headerAlign, footerAlign, showPageNumber, customLayout, pageBreaks, content, headerHtml, footerHtml, leftHtml, rightHtml, showAllPageTitle, pageStyle, customStyle, styleUrls, beforeMethod } = props
|
|
88
93
|
const elem = refElem.value
|
|
89
|
-
return printHtml(Object.assign({},
|
|
94
|
+
return printHtml(Object.assign({}, {
|
|
95
|
+
align,
|
|
96
|
+
title,
|
|
97
|
+
headerAlign,
|
|
98
|
+
footerAlign,
|
|
99
|
+
showPageNumber,
|
|
100
|
+
customLayout,
|
|
101
|
+
pageBreaks,
|
|
102
|
+
content,
|
|
103
|
+
headerHtml,
|
|
104
|
+
footerHtml,
|
|
105
|
+
leftHtml,
|
|
106
|
+
rightHtml,
|
|
107
|
+
showAllPageTitle,
|
|
108
|
+
pageStyle,
|
|
109
|
+
customStyle,
|
|
110
|
+
styleUrls,
|
|
111
|
+
beforeMethod
|
|
112
|
+
}, {
|
|
90
113
|
_pageBreaks: !!reactData.staticPageBreaks.length,
|
|
91
114
|
html: trimHtml(elem ? elem.outerHTML : '') || props.html || props.content || ''
|
|
92
115
|
}))
|
|
@@ -97,8 +97,15 @@ function parsePageStyle (val?: VxePrintPropTypes.PageStyle) {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
+
function createCssLink (urls?: string[]) {
|
|
101
|
+
if (urls) {
|
|
102
|
+
return urls.map(url => `<link rel="stylesheet" href="${url}">`).join('\n')
|
|
103
|
+
}
|
|
104
|
+
return ''
|
|
105
|
+
}
|
|
106
|
+
|
|
100
107
|
function createHtmlPage (opts: VxePrintProps & { _pageBreaks: boolean }, printHtml: string): string {
|
|
101
|
-
const { pageStyle, customStyle } = opts
|
|
108
|
+
const { pageStyle, customStyle, styleUrls } = opts
|
|
102
109
|
const pageStyObj = parsePageStyle(pageStyle)
|
|
103
110
|
const headStyOpts = pageStyObj.header
|
|
104
111
|
const titStyOpts = pageStyObj.title
|
|
@@ -110,6 +117,7 @@ function createHtmlPage (opts: VxePrintProps & { _pageBreaks: boolean }, printHt
|
|
|
110
117
|
'<head>',
|
|
111
118
|
'<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,minimal-ui">',
|
|
112
119
|
`<title>${opts.title || ''}</title>`,
|
|
120
|
+
createCssLink(styleUrls),
|
|
113
121
|
`<style media="print">@page{size:auto;${isPbMode ? 'margin: 0mm;' : ''}}</style>`,
|
|
114
122
|
`<style>body{font-size:${pageStyObj.fontSize || '14px'};color:${pageStyObj.color || defaultFontColor};text-align:${pageStyObj.textAlign || 'left'};}</style>`,
|
|
115
123
|
'<style>',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ref, h, reactive, PropType, computed, VNode, watch,
|
|
1
|
+
import { ref, h, reactive, PropType, computed, VNode, watch, onBeforeUnmount, nextTick, onMounted, provide } from 'vue'
|
|
2
2
|
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
3
|
import { VxeUI, getI18n, createEvent, getIcon, getConfig, useSize, globalEvents, globalResize, renderEmptyElement } from '../../ui'
|
|
4
4
|
import { calcTreeLine, enNodeValue, deNodeValue } from './util'
|
|
@@ -7,8 +7,9 @@ import { getCrossTreeDragNodeInfo } from './store'
|
|
|
7
7
|
import XEUtils from 'xe-utils'
|
|
8
8
|
import { getSlotVNs } from '../../ui/src/vn'
|
|
9
9
|
import { toCssUnit, isScale, getPaddingTopBottomSize, addClass, removeClass, getTpImg, hasControlKey, getEventTargetNode } from '../../ui/src/dom'
|
|
10
|
+
import { isEnableConf } from '../../ui/src/utils'
|
|
10
11
|
import { moveRowAnimateToTb, clearRowAnimate } from '../../ui/src/anime'
|
|
11
|
-
import VxeLoadingComponent from '../../loading
|
|
12
|
+
import VxeLoadingComponent from '../../loading'
|
|
12
13
|
|
|
13
14
|
import type { TreeReactData, VxeTreeEmits, VxeTreePropTypes, TreeInternalData, TreePrivateRef, VxeTreeDefines, VxeTreePrivateComputed, TreePrivateMethods, TreeMethods, ValueOf, VxeTreeConstructor, VxeTreePrivateMethods } from '../../../types'
|
|
14
15
|
|
|
@@ -51,6 +52,25 @@ function createInternalData (): TreeInternalData {
|
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
54
|
|
|
55
|
+
function createReactData ():TreeReactData {
|
|
56
|
+
return {
|
|
57
|
+
parentHeight: 0,
|
|
58
|
+
customHeight: 0,
|
|
59
|
+
customMinHeight: 0,
|
|
60
|
+
customMaxHeight: 0,
|
|
61
|
+
currentNode: null,
|
|
62
|
+
scrollYLoad: false,
|
|
63
|
+
bodyHeight: 0,
|
|
64
|
+
topSpaceHeight: 0,
|
|
65
|
+
selectRadioKey: null,
|
|
66
|
+
treeList: [],
|
|
67
|
+
updateExpandedFlag: 1,
|
|
68
|
+
updateCheckboxFlag: 1,
|
|
69
|
+
dragNode: null,
|
|
70
|
+
dragTipText: ''
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
54
74
|
// let crossTreeDragNodeObj: {
|
|
55
75
|
// $oldTree: VxeTreeConstructor & VxeTreePrivateMethods
|
|
56
76
|
// $newTree: (VxeTreeConstructor & VxeTreePrivateMethods) | null
|
|
@@ -150,6 +170,7 @@ export default defineVxeComponent({
|
|
|
150
170
|
default: () => getConfig().tree.drag
|
|
151
171
|
},
|
|
152
172
|
dragConfig: Object as PropType<VxeTreePropTypes.DragConfig>,
|
|
173
|
+
menuConfig: Object as PropType<VxeTreePropTypes.MenuConfig>,
|
|
153
174
|
showIcon: {
|
|
154
175
|
type: Boolean as PropType<VxeTreePropTypes.ShowIcon>,
|
|
155
176
|
default: true
|
|
@@ -188,7 +209,10 @@ export default defineVxeComponent({
|
|
|
188
209
|
'scroll',
|
|
189
210
|
'node-dragstart',
|
|
190
211
|
'node-dragover',
|
|
191
|
-
'node-dragend'
|
|
212
|
+
'node-dragend',
|
|
213
|
+
'node-expand',
|
|
214
|
+
'node-menu',
|
|
215
|
+
'menu-click'
|
|
192
216
|
] as VxeTreeEmits,
|
|
193
217
|
setup (props, context) {
|
|
194
218
|
const { emit, slots } = context
|
|
@@ -208,24 +232,8 @@ export default defineVxeComponent({
|
|
|
208
232
|
|
|
209
233
|
const crossTreeDragNodeInfo = getCrossTreeDragNodeInfo()
|
|
210
234
|
|
|
211
|
-
const reactData = reactive<TreeReactData>({
|
|
212
|
-
parentHeight: 0,
|
|
213
|
-
customHeight: 0,
|
|
214
|
-
customMinHeight: 0,
|
|
215
|
-
customMaxHeight: 0,
|
|
216
|
-
currentNode: null,
|
|
217
|
-
scrollYLoad: false,
|
|
218
|
-
bodyHeight: 0,
|
|
219
|
-
topSpaceHeight: 0,
|
|
220
|
-
selectRadioKey: enNodeValue(props.checkNodeKey),
|
|
221
|
-
treeList: [],
|
|
222
|
-
updateExpandedFlag: 1,
|
|
223
|
-
updateCheckboxFlag: 1,
|
|
224
|
-
dragNode: null,
|
|
225
|
-
dragTipText: ''
|
|
226
|
-
})
|
|
227
|
-
|
|
228
235
|
const internalData = createInternalData()
|
|
236
|
+
const reactData = reactive(createReactData())
|
|
229
237
|
|
|
230
238
|
const refMaps: TreePrivateRef = {
|
|
231
239
|
refElem
|
|
@@ -302,6 +310,10 @@ export default defineVxeComponent({
|
|
|
302
310
|
return Object.assign({}, getConfig().tree.dragConfig, props.dragConfig)
|
|
303
311
|
})
|
|
304
312
|
|
|
313
|
+
const computeMenuOpts = computed(() => {
|
|
314
|
+
return Object.assign({}, getConfig().tree.menuConfig, props.menuConfig)
|
|
315
|
+
})
|
|
316
|
+
|
|
305
317
|
const computeTreeStyle = computed(() => {
|
|
306
318
|
const { customHeight, customMinHeight, customMaxHeight } = reactData
|
|
307
319
|
const stys: Record<string, string> = {}
|
|
@@ -978,6 +990,33 @@ export default defineVxeComponent({
|
|
|
978
990
|
dispatchEvent('node-dblclick', { node }, evnt)
|
|
979
991
|
}
|
|
980
992
|
|
|
993
|
+
const handleContextmenuEvent = (evnt: MouseEvent, node: any) => {
|
|
994
|
+
const { menuConfig } = props
|
|
995
|
+
const isRowCurrent = computeIsRowCurrent.value
|
|
996
|
+
const menuOpts = computeMenuOpts.value
|
|
997
|
+
if (menuConfig ? isEnableConf(menuOpts) : menuOpts.enabled) {
|
|
998
|
+
const { options, visibleMethod } = menuOpts
|
|
999
|
+
if (!visibleMethod || visibleMethod({ $tree: $xeTree, options, node })) {
|
|
1000
|
+
if (isRowCurrent) {
|
|
1001
|
+
changeCurrentEvent(evnt, node)
|
|
1002
|
+
} else if (reactData.currentNode) {
|
|
1003
|
+
reactData.currentNode = null
|
|
1004
|
+
}
|
|
1005
|
+
if (VxeUI.contextMenu) {
|
|
1006
|
+
VxeUI.contextMenu.openByEvent(evnt, {
|
|
1007
|
+
options,
|
|
1008
|
+
events: {
|
|
1009
|
+
optionClick (eventParams) {
|
|
1010
|
+
dispatchEvent('menu-click', Object.assign({ node }, eventParams), eventParams.$event)
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
})
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
dispatchEvent('node-menu', { node }, evnt)
|
|
1018
|
+
}
|
|
1019
|
+
|
|
981
1020
|
const handleAsyncTreeExpandChilds = (node: any) => {
|
|
982
1021
|
const checkboxOpts = computeCheckboxOpts.value
|
|
983
1022
|
const { loadMethod } = props
|
|
@@ -2386,6 +2425,7 @@ export default defineVxeComponent({
|
|
|
2386
2425
|
onDragstart?: any
|
|
2387
2426
|
onDragend?: any
|
|
2388
2427
|
onDragover?: any
|
|
2428
|
+
onContextmenu?: any
|
|
2389
2429
|
} = {
|
|
2390
2430
|
onMousedown (evnt: MouseEvent) {
|
|
2391
2431
|
handleNodeMousedownEvent(evnt, node)
|
|
@@ -2396,6 +2436,9 @@ export default defineVxeComponent({
|
|
|
2396
2436
|
},
|
|
2397
2437
|
onDblclick (evnt: MouseEvent) {
|
|
2398
2438
|
handleNodeDblclickEvent(evnt, node)
|
|
2439
|
+
},
|
|
2440
|
+
onContextmenu (evnt: MouseEvent) {
|
|
2441
|
+
handleContextmenuEvent(evnt, node)
|
|
2399
2442
|
}
|
|
2400
2443
|
}
|
|
2401
2444
|
// 拖拽行事件
|
|
@@ -2667,7 +2710,7 @@ export default defineVxeComponent({
|
|
|
2667
2710
|
})
|
|
2668
2711
|
|
|
2669
2712
|
onMounted(() => {
|
|
2670
|
-
const { transform, drag } = props
|
|
2713
|
+
const { transform, drag, menuConfig } = props
|
|
2671
2714
|
const dragOpts = computeDragOpts.value
|
|
2672
2715
|
if (drag && !transform) {
|
|
2673
2716
|
errLog('vxe.error.notSupportProp', ['drag', 'transform=false', 'transform=true'])
|
|
@@ -2675,6 +2718,10 @@ export default defineVxeComponent({
|
|
|
2675
2718
|
if (dragOpts.isCrossTreeDrag) {
|
|
2676
2719
|
errLog('vxe.error.notProp', ['drag-config.isCrossTreeDrag'])
|
|
2677
2720
|
}
|
|
2721
|
+
const VxeUIContextMenu = VxeUI.getComponent('VxeContextMenu')
|
|
2722
|
+
if (menuConfig && !VxeUIContextMenu) {
|
|
2723
|
+
errLog('vxe.error.reqComp', ['vxe-context-menu'])
|
|
2724
|
+
}
|
|
2678
2725
|
if (props.autoResize) {
|
|
2679
2726
|
const el = refElem.value
|
|
2680
2727
|
const parentEl = getParentElem()
|
|
@@ -2695,19 +2742,23 @@ export default defineVxeComponent({
|
|
|
2695
2742
|
globalEvents.on($xeTree, 'resize', handleGlobalResizeEvent)
|
|
2696
2743
|
})
|
|
2697
2744
|
|
|
2698
|
-
|
|
2745
|
+
onBeforeUnmount(() => {
|
|
2699
2746
|
const { resizeObserver } = internalData
|
|
2700
2747
|
if (resizeObserver) {
|
|
2701
2748
|
resizeObserver.disconnect()
|
|
2702
2749
|
}
|
|
2703
2750
|
globalEvents.off($xeTree, 'resize')
|
|
2751
|
+
XEUtils.assign(reactData, createReactData())
|
|
2704
2752
|
XEUtils.assign(internalData, createInternalData())
|
|
2705
2753
|
})
|
|
2706
2754
|
|
|
2755
|
+
reactData.selectRadioKey = enNodeValue(props.checkNodeKey)
|
|
2707
2756
|
loadData(props.data || [])
|
|
2708
2757
|
|
|
2709
2758
|
$xeTree.renderVN = renderVN
|
|
2710
2759
|
|
|
2760
|
+
provide('$xeTree', $xeTree)
|
|
2761
|
+
|
|
2711
2762
|
return $xeTree
|
|
2712
2763
|
},
|
|
2713
2764
|
render () {
|
package/packages/ui/index.ts
CHANGED
|
@@ -46,7 +46,8 @@ setConfig({
|
|
|
46
46
|
},
|
|
47
47
|
suffixTooltip: {
|
|
48
48
|
enterable: true
|
|
49
|
-
}
|
|
49
|
+
},
|
|
50
|
+
showDropdownIcon: true
|
|
50
51
|
},
|
|
51
52
|
buttonGroup: {},
|
|
52
53
|
calendar: {
|
|
@@ -79,6 +80,7 @@ setConfig({
|
|
|
79
80
|
}
|
|
80
81
|
},
|
|
81
82
|
collapsePane: {},
|
|
83
|
+
contextMenu: {},
|
|
82
84
|
countdown: {},
|
|
83
85
|
colorPicker: {
|
|
84
86
|
type: 'rgb',
|
|
@@ -672,7 +674,11 @@ setIcon({
|
|
|
672
674
|
SPLIT_RIGHT_ACTION: iconPrefix + 'arrow-right',
|
|
673
675
|
|
|
674
676
|
// backtop
|
|
675
|
-
BACKTOP_TOP: iconPrefix + 'top'
|
|
677
|
+
BACKTOP_TOP: iconPrefix + 'top',
|
|
678
|
+
|
|
679
|
+
// context-menu
|
|
680
|
+
CONTEXT_MENU_OPTION_LOADING: iconPrefix + 'spinner roll',
|
|
681
|
+
CONTEXT_MENU_CHILDREN: iconPrefix + 'arrow-right'
|
|
676
682
|
})
|
|
677
683
|
|
|
678
684
|
export * from '@vxe-ui/core'
|
package/styles/all.scss
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
@use './components/collapse.scss';
|
|
23
23
|
@use './components/collapse-pane.scss';
|
|
24
24
|
@use './components/color-picker.scss';
|
|
25
|
+
@use './components/context-menu.scss';
|
|
25
26
|
@use './components/countdown.scss';
|
|
26
27
|
@use './components/date-panel.scss';
|
|
27
28
|
@use './components/date-picker.scss';
|
|
@@ -43,7 +43,7 @@ $backtopThemeList: (
|
|
|
43
43
|
color: var(--vxe-ui-font-color);
|
|
44
44
|
font-family: var(--vxe-ui-font-family);
|
|
45
45
|
background-color: var(--vxe-ui-layout-background-color);
|
|
46
|
-
border-radius: var(--vxe-ui-base-border-radius)
|
|
46
|
+
border-radius: var(--vxe-ui-base-border-radius);
|
|
47
47
|
transition: all 0.3s;
|
|
48
48
|
cursor: pointer;
|
|
49
49
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3);
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
.vxe-context-menu {
|
|
2
|
+
display: none;
|
|
3
|
+
top: 0;
|
|
4
|
+
left: 0;
|
|
5
|
+
user-select: none;
|
|
6
|
+
&.is--visible {
|
|
7
|
+
display: block;
|
|
8
|
+
}
|
|
9
|
+
&.is--fixed {
|
|
10
|
+
position: fixed;
|
|
11
|
+
}
|
|
12
|
+
&.is--absolute {
|
|
13
|
+
position: absolute;
|
|
14
|
+
}
|
|
15
|
+
&.cp--left {
|
|
16
|
+
.vxe-context-menu--children-wrapper {
|
|
17
|
+
left: calc(-100% + 2px);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
&.cp--right {
|
|
21
|
+
.vxe-context-menu--children-wrapper {
|
|
22
|
+
left: calc(100% - 2px);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.vxe-context-menu--group-wrapper {
|
|
28
|
+
border-top: 1px solid var(--vxe-ui-base-popup-border-color);
|
|
29
|
+
&:first-child {
|
|
30
|
+
border: 0;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.vxe-context-menu--wrapper,
|
|
35
|
+
.vxe-context-menu--children-wrapper {
|
|
36
|
+
padding: 0;
|
|
37
|
+
color: var(--vxe-ui-font-color);
|
|
38
|
+
font-family: var(--vxe-ui-font-family);
|
|
39
|
+
border: 1px solid var(--vxe-ui-base-popup-border-color);
|
|
40
|
+
background-color: var(--vxe-ui-layout-background-color);
|
|
41
|
+
border-radius: var(--vxe-ui-base-border-radius);
|
|
42
|
+
box-shadow: 0 0 12px 0 rgba(0,0,0,0.3);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.vxe-context-menu--children-wrapper {
|
|
46
|
+
display: none;
|
|
47
|
+
position: absolute;
|
|
48
|
+
transform: translateY(-5px);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.vxe-context-menu--item-wrapper {
|
|
52
|
+
position: relative;
|
|
53
|
+
min-width: 12em;
|
|
54
|
+
max-width: 20em;
|
|
55
|
+
user-select: none;
|
|
56
|
+
&.is--active {
|
|
57
|
+
background-color: rgba(0, 0, 0, 0.1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
.vxe-context-menu--first-item {
|
|
61
|
+
&.is--active {
|
|
62
|
+
.vxe-context-menu--children-wrapper {
|
|
63
|
+
display: block;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.vxe-context-menu--item-inner {
|
|
69
|
+
height: var(--vxe-ui-context-menu-option-height);
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
padding: 0 0.8em;
|
|
73
|
+
cursor: pointer;
|
|
74
|
+
&.is--loading {
|
|
75
|
+
opacity: 0.5;
|
|
76
|
+
cursor: progress;
|
|
77
|
+
}
|
|
78
|
+
&.is--disabled {
|
|
79
|
+
color: var(--vxe-ui-font-disabled-color);
|
|
80
|
+
cursor: no-drop;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.vxe-context-menu--item-prefix {
|
|
85
|
+
min-width: 1em;
|
|
86
|
+
text-align: center;
|
|
87
|
+
}
|
|
88
|
+
.vxe-context-menu--item-prefix,
|
|
89
|
+
.vxe-context-menu--item-suffix {
|
|
90
|
+
flex-shrink: 0;
|
|
91
|
+
font-size: 0.9em;
|
|
92
|
+
}
|
|
93
|
+
.vxe-context-menu--item-label {
|
|
94
|
+
font-size: 0.9em;
|
|
95
|
+
padding: 0 0.5em;
|
|
96
|
+
flex-grow: 1;
|
|
97
|
+
overflow: hidden;
|
|
98
|
+
text-overflow: ellipsis;
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.vxe-context-menu {
|
|
103
|
+
font-size: var(--vxe-ui-font-size-default);
|
|
104
|
+
&.size--medium {
|
|
105
|
+
font-size: var(--vxe-ui-font-size-medium);
|
|
106
|
+
}
|
|
107
|
+
&.size--small {
|
|
108
|
+
font-size: var(--vxe-ui-font-size-small);
|
|
109
|
+
}
|
|
110
|
+
&.size--mini {
|
|
111
|
+
font-size: var(--vxe-ui-font-size-mini);
|
|
112
|
+
}
|
|
113
|
+
}
|
package/styles/theme/base.scss
CHANGED
package/types/all.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ import VxeCol from './components/col'
|
|
|
23
23
|
import VxeCollapse from './components/collapse'
|
|
24
24
|
import VxeCollapsePane from './components/collapse-pane'
|
|
25
25
|
import VxeColorPicker from './components/color-picker'
|
|
26
|
+
import VxeContextMenu from './components/context-menu'
|
|
26
27
|
import VxeCountdown from './components/countdown'
|
|
27
28
|
import VxeDatePanel from './components/date-panel'
|
|
28
29
|
import VxeDatePicker from './components/date-picker'
|
|
@@ -134,6 +135,7 @@ interface AllComponents {
|
|
|
134
135
|
VxeCollapse: typeof VxeCollapse
|
|
135
136
|
VxeCollapsePane: typeof VxeCollapsePane
|
|
136
137
|
VxeColorPicker: typeof VxeColorPicker
|
|
138
|
+
VxeContextMenu: typeof VxeContextMenu
|
|
137
139
|
VxeCountdown: typeof VxeCountdown
|
|
138
140
|
VxeDatePanel: typeof VxeDatePanel
|
|
139
141
|
VxeDatePicker: typeof VxeDatePicker
|
|
@@ -254,6 +256,7 @@ export * from './components/col'
|
|
|
254
256
|
export * from './components/collapse'
|
|
255
257
|
export * from './components/collapse-pane'
|
|
256
258
|
export * from './components/color-picker'
|
|
259
|
+
export * from './components/context-menu'
|
|
257
260
|
export * from './components/countdown'
|
|
258
261
|
export * from './components/date-panel'
|
|
259
262
|
export * from './components/date-picker'
|