diff --git a/src/views/vab/contextmenu.vue b/src/views/vab/contextmenu.vue
index 1f7f03d5..e01efe13 100644
--- a/src/views/vab/contextmenu.vue
+++ b/src/views/vab/contextmenu.vue
@@ -17,6 +17,7 @@
+
contextmenu
@@ -24,16 +25,36 @@
-
+
@@ -68,48 +89,104 @@
},
methods: {
+ fun(){
+ return false;
+ },
openMenu(e) {
- console.log(e);
- this.visible = true;
- this.left = e.clientX + 1;
- this.top = e.clientY + 1;
+ this.visible = true
+ this.left = e.clientX + 1
+ this.top = e.clientY + 1
+
+ this.$nextTick(() => {
+ var ex = e.clientX + 1
+ var ey = e.clientY + 1
+ var innerWidth = window.innerWidth
+ var innerHeight = window.innerHeight
+ var menuHeight = this.$refs.contextmenu.offsetHeight
+ var menuWidth = this.$refs.contextmenu.offsetWidth
+ //位置修正公示
+ //left = (当前点击X + 菜单宽度 > 可视区域宽度 ? 可视区域宽度 - 菜单宽度 : 当前点击X)
+ //top = (当前点击Y + 菜单高度 > 可视区域高度 ? 当前点击Y - 菜单高度 : 当前点击Y)
+ this.left = ex + menuWidth > innerWidth ? innerWidth - menuWidth : ex
+ this.top = ey + menuHeight > innerHeight ? ey - menuHeight : ey
+ })
+
},
closeMenu() {
this.visible = false;
+ },
+ openSubmenu(e){
+ var menu = e.target.querySelector('ul')
+ menu.style.display = 'inline-block'
+ var rect = menu.getBoundingClientRect()
+ var menuX = rect.left
+ var menuY = rect.top
+ var innerWidth = window.innerWidth
+ var innerHeight = window.innerHeight
+ var menuHeight = menu.offsetHeight
+ var menuWidth = menu.offsetWidth
+ if(menuX + menuWidth > innerWidth){
+ menu.style.left = 'auto'
+ menu.style.right = '100%'
+ }
+ if(menuY + menuHeight > innerHeight){
+ menu.style.top = 'auto'
+ menu.style.bottom = '0'
+ }
+ },
+ closeSubmenu(e){
+ var menu = e.target.querySelector('ul')
+ menu.removeAttribute("style")
+ menu.style.display = 'none'
}
}
}