菜单搜索

menu_style
zhangdi 3 months ago
parent b0d68803c8
commit 9d06607ebb
  1. 84
      src/page/index/sidebar/index.vue

@ -1,7 +1,9 @@
<template> <template>
<el-menu unique-opened :default-active="activeMenu" :mode="setting.sidebar" :collapse="isCollapse" <el-menu unique-opened :default-active="activeMenu" :mode="setting.sidebar" :collapse="isCollapse"
v-if="setting.styleRadio == '1'"> v-if="setting.styleRadio == '1'">
<sidebar-item :menu="menu"></sidebar-item> <el-input v-model="input1" class="w-50 m-2" size="large" placeholder="请输入" suffix-icon="Search"
style="width:90%;margin-left:5%;" clearable />
<sidebar-item :menu="filteredMenu"></sidebar-item>
</el-menu> </el-menu>
<el-menu unique-opened :default-active="activeMenu" :mode="setting.sidebar" :collapse="isCollapse" <el-menu unique-opened :default-active="activeMenu" :mode="setting.sidebar" :collapse="isCollapse"
@ -11,23 +13,25 @@
<left-menu :menulist="menu" v-if="setting.styleRadio == '2'"></left-menu> <left-menu :menulist="menu" v-if="setting.styleRadio == '2'"></left-menu>
<leftMenuSec :menulist="menu" v-if="setting.styleRadio == '5'"></leftMenuSec> <leftMenuSec :menulist="menu" v-if="setting.styleRadio == '5'"></leftMenuSec>
<div class="left_menu_box" :class="leftMenu[selectIndex].children ? 'right_box' : ''" style="display: flex;height: 100%;background: #fff;" <div class="left_menu_box" :class="leftMenu[selectIndex].children ? 'right_box' : ''"
v-if="setting.styleRadio == '3'"> style="display: flex;height: 100%;background: #fff;" v-if="setting.styleRadio == '3'">
<div :class="leftMenu.find(item => item.children) ? 'children' : 'no_child'"> <div :class="leftMenu.find(item => item.children) ? 'children' : 'no_child'">
<!-- <div class="top_title">{{ this.menu.find(item => item.id == this.leftMenu[selectIndex].parentId).name }}</div> --> <!-- <div class="top_title">{{ this.menu.find(item => item.id == this.leftMenu[selectIndex].parentId).name }}</div> -->
<div class="left_menu" @click="clickItem(item, index)" v-for="(item, index) in leftMenu" :key="item.id" @mouseenter="mouseEnter(item,index)" <div class="left_menu" @click="clickItem(item, index)" v-for="(item, index) in leftMenu" :key="item.id"
:class="index == selectIndex ? 'active' : ''"> @mouseenter="mouseEnter(item, index)" :class="index == selectIndex ? 'active' : ''">
<div class="left_menu_item"> <div class="left_menu_item">
<i :class="item.source"></i> <i :class="item.source"></i>
<span class="name_text">{{ item.name.substring(0, 4) }}</span> <span class="name_text">{{ item.name.substring(0, 4) }}</span>
</div> </div>
</div> </div>
</div> </div>
<div style="flex: 1;height: 100%;background: #fff;" v-show="leftMenu[selectIndex].children" @mouseleave="mouseleave(leftMenu[selectIndex])"> <div style="flex: 1;height: 100%;background: #fff;" v-show="leftMenu[selectIndex].children"
@mouseleave="mouseleave(leftMenu[selectIndex])">
<div <div
v-if="leftMenu && leftMenu.length != 0 && leftMenu[selectIndex].children && leftMenu[selectIndex].children.length != 0"> v-if="leftMenu && leftMenu.length != 0 && leftMenu[selectIndex].children && leftMenu[selectIndex].children.length != 0">
<div class="left_top">{{ leftMenu[selectIndex].name }} </div> <div class="left_top">{{ leftMenu[selectIndex].name }} </div>
<div class="right_menu" v-for="item in leftMenu[selectIndex].children" :key="item.id" @mouseenter="mounseEnter(item)" @mouseleave="mounseLeave(leftMenu[selectIndex],item)"> <div class="right_menu" v-for="item in leftMenu[selectIndex].children" :key="item.id"
@mouseenter="mounseEnter(item)" @mouseleave="mounseLeave(leftMenu[selectIndex], item)">
<div class="right_menu_item"> <div class="right_menu_item">
<el-popover placement="right-start" :show-arrow="false" :offset="0" :hide-after='0' <el-popover placement="right-start" :show-arrow="false" :offset="0" :hide-after='0'
popper-class="log-popover" popper-class="log-popover"
@ -42,16 +46,20 @@
</div> </div>
</template> </template>
<template #default> <template #default>
<div class="third_box" v-if="item.children && item.children.length != 0 && !item.children.find(item1 => item1.children)"> <div class="third_box"
<div class="third_box_item" v-for="third in item.children" :key="third.id" @click="handleClick(third)"> v-if="item.children && item.children.length != 0 && !item.children.find(item1 => item1.children)">
<div class="third_box_item" v-for="third in item.children" :key="third.id"
@click="handleClick(third)">
{{ third.name }} {{ third.name }}
</div> </div>
</div> </div>
<div class="four_box" v-if="item.children && item.children.length != 0 && item.children.find(item1 => item1.children)"> <div class="four_box"
v-if="item.children && item.children.length != 0 && item.children.find(item1 => item1.children)">
<div class="four_box_item" v-for="third in item.children" :key="third.id"> <div class="four_box_item" v-for="third in item.children" :key="third.id">
<div class="third_name" @click="handleClick(third)"><span></span>{{ third.name }}</div> <div class="third_name" @click="handleClick(third)"><span></span>{{ third.name }}</div>
<div class="four_con_box" v-if="third.children"> <div class="four_con_box" v-if="third.children">
<div class="four_con_item" v-for="four in third.children" :key="four.id" @click="handleClick(four)"> <div class="four_con_item" v-for="four in third.children" :key="four.id"
@click="handleClick(four)">
{{ four.name }} {{ four.name }}
</div> </div>
</div> </div>
@ -66,16 +74,17 @@
</div> </div>
<div v-if="setting.styleRadio == '6'" class="left_menu_box six"> <div v-if="setting.styleRadio == '6'" class="left_menu_box six">
<div class="left_menu six_menu"> <div class="left_menu six_menu">
<div class="left_menu_item" v-for="(item,index) in menu" :key="item.id" @click="clickMenu(item,index)" :class="activeIndex == index ? 'hover' : ''"> <div class="left_menu_item" v-for="(item, index) in menu" :key="item.id" @click="clickMenu(item, index)"
:class="activeIndex == index ? 'hover' : ''">
<i :class="item.source" style="font-size: 20px;"></i> <i :class="item.source" style="font-size: 20px;"></i>
<span class="name_text">{{ item.name.substring(0, 2) }}</span> <span class="name_text">{{ item.name.substring(0, 2) }}</span>
</div> </div>
</div> </div>
<div style="flex: 1;height: 100%;" v-show="menu[activeIndex].children" @mouseleave="mouseleave(menu[activeIndex])"> <div style="flex: 1;height: 100%;" v-show="menu[activeIndex].children" @mouseleave="mouseleave(menu[activeIndex])">
<div <div v-if="menu && menu.length != 0 && menu[activeIndex].children && menu[activeIndex].children.length != 0">
v-if="menu && menu.length != 0 && menu[activeIndex].children && menu[activeIndex].children.length != 0">
<div class="left_top">{{ menu[activeIndex].name }} </div> <div class="left_top">{{ menu[activeIndex].name }} </div>
<div class="right_menu" v-for="item in menu[activeIndex].children" :key="item.id" @mouseenter="mounseEnter(item)" @mouseleave="mounseLeave(menu[activeIndex],item)"> <div class="right_menu" v-for="item in menu[activeIndex].children" :key="item.id"
@mouseenter="mounseEnter(item)" @mouseleave="mounseLeave(menu[activeIndex], item)">
<div class="right_menu_item"> <div class="right_menu_item">
<el-popover placement="right-start" :show-arrow="false" :offset="0" :hide-after='0' <el-popover placement="right-start" :show-arrow="false" :offset="0" :hide-after='0'
popper-class="log-popover" popper-class="log-popover"
@ -90,16 +99,20 @@
</div> </div>
</template> </template>
<template #default> <template #default>
<div class="third_box" v-if="item.children && item.children.length != 0 && !item.children.find(item1 => item1.children)"> <div class="third_box"
<div class="third_box_item" v-for="third in item.children" :key="third.id" @click="handleClick(third)"> v-if="item.children && item.children.length != 0 && !item.children.find(item1 => item1.children)">
<div class="third_box_item" v-for="third in item.children" :key="third.id"
@click="handleClick(third)">
{{ third.name }} {{ third.name }}
</div> </div>
</div> </div>
<div class="four_box" v-if="item.children && item.children.length != 0 && item.children.find(item1 => item1.children)"> <div class="four_box"
v-if="item.children && item.children.length != 0 && item.children.find(item1 => item1.children)">
<div class="four_box_item" v-for="third in item.children" :key="third.id"> <div class="four_box_item" v-for="third in item.children" :key="third.id">
<div class="third_name" @click="handleClick(third)"><span></span>{{ third.name }}</div> <div class="third_name" @click="handleClick(third)"><span></span>{{ third.name }}</div>
<div class="four_con_box" v-if="third.children"> <div class="four_con_box" v-if="third.children">
<div class="four_con_item" v-for="four in third.children" :key="four.id" @click="handleClick(four)"> <div class="four_con_item" v-for="four in third.children" :key="four.id"
@click="handleClick(four)">
{{ four.name }} {{ four.name }}
</div> </div>
</div> </div>
@ -129,6 +142,7 @@ export default {
isCollapse: false, isCollapse: false,
showRight: false, showRight: false,
activeIndex: 0, activeIndex: 0,
input1: '',
// selectIndex:0 // selectIndex:0
} }
}, },
@ -143,9 +157,12 @@ export default {
} }
return path; return path;
}, },
filteredMenu(){
return this.input1 ? this.searchMenu(this.menu, this.input1) : this.menu; //
},
}, },
mounted() { mounted() {
console.log('left--------------------------',this.leftMenu)
console.log('menu--------------------------', this.menu) console.log('menu--------------------------', this.menu)
console.log('selectIndex--------------------------', this.selectIndex) console.log('selectIndex--------------------------', this.selectIndex)
if (this.setting.styleRadio == '3') { if (this.setting.styleRadio == '3') {
@ -155,6 +172,25 @@ export default {
} }
}, },
methods: { methods: {
menuInput(value) {
console.log(999, value)
console.log('menu--------------------------', this.searchMenu(this.menu, value), this.menu)
this.menu = this.searchMenu(this.menu, value)
},
searchMenu(items, searchText) {
const result = [];
items.forEach(item => {
if (item.name.includes(searchText)) {
result.push(item); //
} else if (item.children && item.children.length > 0) { //
const childrenResult = this.searchMenu(item.children, searchText); //
if (childrenResult.length > 0) { //
result.push({ ...item, children: childrenResult }); //
}
}
});
return result;
},
clickMenu(item, index) { clickMenu(item, index) {
this.activeIndex = index this.activeIndex = index
}, },
@ -242,9 +278,7 @@ export default {
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.left_menu_box_six{ .left_menu_box_six {}
}
.left_menu_box { .left_menu_box {
width: 70px !important; width: 70px !important;
@ -261,6 +295,7 @@ export default {
height: 100%; height: 100%;
} }
} }
.no_child { .no_child {
width: 70px; width: 70px;
} }
@ -274,6 +309,7 @@ export default {
box-shadow: 5px 5px 30px #afaeae; box-shadow: 5px 5px 30px #afaeae;
} }
} }
.top_title { .top_title {
font-size: 14px; font-size: 14px;
font-family: Microsoft YaHei-Bold, Microsoft YaHei; font-family: Microsoft YaHei-Bold, Microsoft YaHei;
@ -452,7 +488,6 @@ export default {
} }
} }
</style> </style>
<style lang="scss"> <style lang="scss">
.third_box { .third_box {
@ -516,6 +551,7 @@ export default {
} }
} }
.four_con_box { .four_con_box {
display: flex; display: flex;
flex-direction: column; flex-direction: column;

Loading…
Cancel
Save