【六.1】 后台菜单,展开与折叠 vue3 + ts + element-plus 项目实战 (后台管理系统)

845 阅读1分钟

1 创建菜单组件。

<template>

  <el-menu
      default-active="1"
      class="el-menu-vertical-demo"
      background-color="$menuBg"
      text-color="#fff"
      @open="handleOpen"
      @close="handleClose"
  >
   <!--将样式,文字颜色进行调整-->
    <el-sub-menu index="1">
      <template #title>
        <el-icon><location /></el-icon>
        <span>Navigator One</span>
      </template>
      <el-menu-item-group>
        <template #title><span>Group One</span></template>
        <el-menu-item index="1-1">item one</el-menu-item>
        <el-menu-item index="1-2">item two</el-menu-item>
      </el-menu-item-group>
      <el-menu-item-group title="Group Two">
        <el-menu-item index="1-3">item three</el-menu-item>
      </el-menu-item-group>
      <el-sub-menu index="1-4">
        <template #title><span>item four</span></template>
        <el-menu-item index="1-4-1">item one</el-menu-item>
      </el-sub-menu>
    </el-sub-menu>
    <el-menu-item index="2">
      <el-icon><icon-menu /></el-icon>
      <template #title>Navigator Two</template>
    </el-menu-item>
    <el-menu-item index="3" disabled>
      <el-icon><document /></el-icon>
      <template #title>Navigator Three</template>
    </el-menu-item>
    <el-menu-item index="4">
      <el-icon><setting /></el-icon>
      <template #title>Navigator Four</template>
    </el-menu-item>
  </el-menu>
</template>

<script lang="ts" setup>

</script>

<style>
.el-menu-vertical-demo:not(.el-menu--collapse) {
  width: 200px;
  min-height: 400px;
}
</style>

效果如图。 image.png

2 展开与隐藏按钮。

2.1 按钮处理。并将 collapsed 传至菜单组件。


<template>


<Menu :collapsed="collapsed"></Menu>


....
<el-row style="font-size: 20px; cursor: pointer" @click="()=>(collapsed= !collapsed)">
  <el-icon>  <component :is="collapsed ? Expand:Fold"></component>  </el-icon>
</el-row>
...
<template>

<script setup lang="ts">
import {computed, ref} from 'vue'
import {Expand, Fold} from '@element-plus/icons-vue'
  ...
 const collapsed = ref(false);
 ...

2.2 菜单组件的collapse 由父组件的 collapsed 来控制


<el-menu
    default-active="1"
    class="el-menu-vertical-demo"
    background-color="$menuBg"
    text-color="#fff"
    :collapse="collapsed"
    

<script setup lang="ts">
//通过defindProps  进行父传子
defineProps({
  collapsed:{
    type:Boolean
  }
})

</script>
  
    

2.3 布局的aside宽,由 callapsed 控制。


<template>
<el-aside :style="'width:'+autoWidth">
</template>

<script setup lang="ts">

const autoWidth = computed(()=>{
   if( collapsed.value && isMobile()) {
     return "0px";
   }  else if( collapsed.value ) {
     return "64px";
   } else {
     return "200px"
   }
}) ;
</script>

image.png

image.png