vxe-pc-ui
Version:
A vue based PC component library
55 lines (48 loc) • 1.61 kB
text/typescript
import { App } from 'vue'
import { VxeUI } from '@vxe-ui/core'
import VxeContextMenuComponent from './src/context-menu'
import { dynamicApp, dynamicStore, checkDynamic } from '../dynamics'
import type { VxeContextMenuDefines } from '../../types'
export const VxeContextMenu = Object.assign({}, VxeContextMenuComponent, {
install (app: App) {
app.component(VxeContextMenuComponent.name as string, VxeContextMenuComponent)
}
})
function openMenu (opts: VxeContextMenuDefines.ContextMenuOpenOptions, x: number, y :number) {
dynamicStore.globalContextMenu = {
modelValue: true,
options: opts.options,
className: opts.className,
size: opts.size,
zIndex: opts.zIndex,
x,
y,
position: 'fixed',
destroyOnClose: true,
transfer: false,
events: opts.events
}
checkDynamic()
}
export const ContextMenuController = {
open (options: VxeContextMenuDefines.ContextMenuOpenOptions) {
const opts = Object.assign({ x: 0, y: 0 }, options)
openMenu(opts, opts.x, opts.y)
},
openByEvent (evnt: MouseEvent, options: VxeContextMenuDefines.ContextMenuEventOpenOptions) {
evnt.preventDefault()
evnt.stopPropagation()
const opts = Object.assign({}, options)
const x = evnt.clientX + 1
const y = evnt.clientY + 1
openMenu(opts, x, y)
},
close () {
dynamicStore.globalContextMenu = null
}
}
dynamicApp.use(VxeContextMenu)
VxeUI.component(VxeContextMenuComponent)
VxeUI.contextMenu = ContextMenuController
export const ContextMenu = VxeContextMenu
export default VxeContextMenu