84 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
| <template>
 | |
|   <template v-for="menu in props.menus" :key="menu.path">
 | |
|     <!--            没有二级导航-->
 | |
|     <el-menu-item
 | |
|       v-if="fnIsShowMenuItem(menu)"
 | |
|       :index="fnMenuItemIndex(menu)"
 | |
|       :route="fnMenuItemRoute(menu)"
 | |
|       @click="resetQueryCriteria"
 | |
|     >
 | |
|       <component
 | |
|         :is="'icon-' + menu.meta?.icon"
 | |
|         v-if="menu.meta?.icon"
 | |
|         theme="filled"
 | |
|         fill="#a5b2c2"
 | |
|         size="18"
 | |
|         :stroke-width="3"
 | |
|         style="margin-right: 15px"
 | |
|       />
 | |
|       <span>{{ menu.meta?.title }}</span>
 | |
|     </el-menu-item>
 | |
|     <!--            有二级导航-->
 | |
|     <el-sub-menu v-else-if="fnIsShowSubmenu(menu)" :index="menu.path">
 | |
|       <template #title>
 | |
|         <component
 | |
|           :is="'icon-' + menu.meta?.icon"
 | |
|           v-if="menu.meta?.icon"
 | |
|           theme="filled"
 | |
|           fill="#bfcbd9"
 | |
|           size="18"
 | |
|           :stroke-width="3"
 | |
|           style="margin-right: 10px"
 | |
|         />
 | |
|         <span>{{ menu.meta?.title }}</span>
 | |
|       </template>
 | |
|       <!--                递归调用当前组件生成导航-->
 | |
|       <layout-menu :menus="menu.children" />
 | |
|     </el-sub-menu>
 | |
|   </template>
 | |
| </template>
 | |
| 
 | |
| <script setup>
 | |
| import { resetQueryCriteria } from "../../hooks/useQueryCriteria/index.js";
 | |
| import { ElMenuItem, ElSubMenu } from 'element-plus'
 | |
| import "element-plus/es/components/menu-item/style/css";
 | |
| import "element-plus/es/components/sub-menu/style/css";
 | |
| 
 | |
| defineOptions({
 | |
|   name: "LayoutMenu",
 | |
| });
 | |
| const props = defineProps({
 | |
|   menus: { type: Array, default: () => [] },
 | |
| });
 | |
| const fnIsShowMenuItem = (menu) => {
 | |
|   if (menu.meta?.isMenu === false) {
 | |
|     return false;
 | |
|   }
 | |
|   if (menu.meta?.isSubMenu === false) {
 | |
|     return true;
 | |
|   } else {
 | |
|     return !menu.children || menu.children.length === 0;
 | |
|   }
 | |
| };
 | |
| const fnIsShowSubmenu = (menu) => {
 | |
|   if (menu.meta?.isMenu === false) {
 | |
|     return false;
 | |
|   }
 | |
|   if (menu.meta?.isSubMenu === false) {
 | |
|     return false;
 | |
|   } else {
 | |
|     return menu.children && menu.children.length > 0;
 | |
|   }
 | |
| };
 | |
| const fnMenuItemIndex = (menu) => {
 | |
|   if (menu.name && menu.props) return menu.name;
 | |
|   return menu.path;
 | |
| };
 | |
| const fnMenuItemRoute = (menu) => {
 | |
|   if (menu.name && menu.props) return { name: menu.name };
 | |
|   return { path: menu.path };
 | |
| };
 | |
| </script>
 | |
| 
 | |
| <style scoped lang="scss"></style>
 |