refactor: 重构TabView和ContextMenu的部分逻辑

1. 提取并修改getPageKey函数,表意更明确
2. 修复ContextMenu点击失败的bug(菜单项之间有margin缝隙)
3. 其他个别代码格式(基于eslint)调整
This commit is contained in:
秦旭洋
2020-07-13 17:54:15 +08:00
parent 255f68709e
commit 0f7f73fd1a
2 changed files with 64 additions and 62 deletions

View File

@@ -1,7 +1,14 @@
<template>
<a-menu :style="style" class="contextmenu" v-show="visible" @click="handleClick" :selectedKeys="selectedKeys">
<a-menu
v-show="visible"
class="contextmenu"
:style="style"
:selectedKeys="selectedKeys"
@click="handleClick"
>
<a-menu-item :key="item.key" v-for="item in itemList">
<a-icon role="menuitemicon" v-if="item.icon" :type="item.icon" />{{item.text}}
<a-icon v-if="item.icon" :type="item.icon" />
<span>{{ item.text }}</span>
</a-menu-item>
</a-menu>
</template>
@@ -38,23 +45,27 @@ export default {
}
},
created () {
window.addEventListener('mousedown', e => this.closeMenu(e))
window.addEventListener('contextmenu', e => this.setPosition(e))
const clickHandler = () => this.closeMenu()
const contextMenuHandler = e => this.setPosition(e)
window.addEventListener('click', clickHandler)
window.addEventListener('contextmenu', contextMenuHandler)
this.$emit('hook:beforeDestroy', () => {
window.removeEventListener('click', clickHandler)
window.removeEventListener('contextmenu', contextMenuHandler)
})
},
methods: {
closeMenu (e) {
if (['menuitemicon', 'menuitem'].indexOf(e.target.getAttribute('role')) < 0) {
this.$emit('update:visible', false)
}
closeMenu () {
this.$emit('update:visible', false)
},
setPosition (e) {
this.left = e.clientX
this.top = e.clientY
this.target = e.target
},
handleClick ({key}) {
handleClick ({ key }) {
this.$emit('select', key, this.target)
this.$emit('update:visible', false)
this.closeMenu()
}
}
}
@@ -63,9 +74,11 @@ export default {
<style lang="less" scoped>
.contextmenu{
position: fixed;
z-index: 1;
z-index: 1000;
border-radius: 4px;
box-shadow: -4px 4px 16px 1px @shadow-color !important;
}
.ant-menu-item {
margin: 0 !important // 菜单项之间的缝隙会影响点击
}
</style>