Vue3第十一篇:后台管理系统-菜单、头部导航、Tab

1.新建菜单组件NavMenu.vue,从element-plus官网复制一个菜单模板如下:

 

<template>
  <el-radio-group v-model="isCollapse" style="margin-bottom: 20px">
    <el-radio-button :label="false">expand</el-radio-button>
    <el-radio-button :label="true">collapse</el-radio-button>
  </el-radio-group>
  <el-menu
    default-active="2"
    class="el-menu-vertical-demo"
    :collapse="isCollapse"
    @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>
import { ref } from 'vue'
import {
  Document,
  Menu as IconMenu,
  Location,
  Setting,
} from '@element-plus/icons-vue'

const isCollapse = ref(true)
const handleOpen = (key: string, keyPath: string[]) => {
  console.log(key, keyPath)
}
const handleClose = (key: string, keyPath: string[]) => {
  console.log(key, keyPath)
}
</script>

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

2.新建导航组件NavHeader.vue,从element-plus官网复制一份模板如下:

<template>
  <el-menu
    :default-active="activeIndex"
    class="el-menu-demo"
    mode="horizontal"
    :ellipsis="false"
    @select="handleSelect"
  >
    <el-menu-item index="0">LOGO</el-menu-item>
    <div class="flex-grow" />
    <el-menu-item index="1">Processing Center</el-menu-item>
    <el-sub-menu index="2">
      <template #title>Workspace</template>
      <el-menu-item index="2-1">item one</el-menu-item>
      <el-menu-item index="2-2">item two</el-menu-item>
      <el-menu-item index="2-3">item three</el-menu-item>
      <el-sub-menu index="2-4">
        <template #title>item four</template>
        <el-menu-item index="2-4-1">item one</el-menu-item>
        <el-menu-item index="2-4-2">item two</el-menu-item>
        <el-menu-item index="2-4-3">item three</el-menu-item>
      </el-sub-menu>
    </el-sub-menu>
  </el-menu>
</template>

<script lang="ts" setup>
import { ref } from 'vue'

const activeIndex = ref('1')
const handleSelect = (key: string, keyPath: string[]) => {
  console.log(key, keyPath)
}
</script>

<style>
.flex-grow {
  flex-grow: 1;
}
</style>

 3.新建Tab组件NavTab.vue,从vue.draggable的github上复制了一份模板,改造成setup语法糖版本,文档连接如下:vue.draggable中文文档 - itxst.comVue.Draggable是一款基于Sortable.js实现的vue拖拽插件。支持移动设备、拖拽和选择文本、智能滚动,可以在不同列表间拖拽、不依赖jQuery为基础、vue 2过渡动画兼容、支持撤销操作,总之是一款非常优秀的vue拖拽组件。https://www.itxst.com/vue-draggable/tutorial.html

GitHub - SortableJS/Vue.Draggable: Vue drag-and-drop component based on Sortable.jsVue drag-and-drop component based on Sortable.js. Contribute to SortableJS/Vue.Draggable development by creating an account on GitHub.https://github.com/SortableJS/Vue.Draggable 

<template>
    <div>
        <draggable class="wrapper" v-model="state.list" @start="state.drag = true" @end="state.drag = false" item-key="index">
            <template #item="{ element }">
                <div class="item">
                    <el-button type="primary">{{ element }}</el-button>
                </div>
            </template>
        </draggable>
    </div>
</template>
  
<script setup>
import { reactive } from 'vue'
import draggable from 'vuedraggable'


const state = reactive({
    drag: false,
    list: [1, 2, 3, 4, 5, 6]
})


</script>
  
<style scoped>
/* 弹性盒子居左对其 */
.wrapper {
    display: flex;
    justify-content: start;
}
/* 间隔10px */
.item {
    margin-left: 10px;
}
</style>

4.views文件夹下新建home文件夹,再新建一个Home.vue组件,内容如下:

<script setup lang='ts'>

</script>

<template>
    <div>
        欢迎回来!
    </div>
</template>

<style lang='less' scoped>
</style>

5.将各个功能组件,放到布局组件中:修改LayoutMain.vue如下:

<script setup>
 import NavMenuVue from './NavMenu.vue';
 import NavHeaderVue from './NavHeader.vue';
 import NavTabVue from './NavTab.vue';
 import HomeVue from '../../views/home/Home.vue';
</script>
 
<template>
    <!-- 容器 -->
    <div class="root-container">
        <!-- 左半边 -->
        <div class="left">
            <!-- LOGO区 -->
            <div class="left-logo"></div>
            <!-- 菜单区 -->
            <div class="left-menu">
                <NavMenuVue></NavMenuVue>
            </div>
        </div>
        <!-- 右半边 -->
        <div class="right">
            <!-- 页头区 -->
            <div class="right-header">
                <NavHeaderVue></NavHeaderVue>
            </div>
            <!-- Tab区 -->
            <div class="right-tab">
                <NavTabVue></NavTabVue>
            </div>
            <!-- 主显示区 -->
            <div class="right-main">
                <component :is="HomeVue"></component>
            </div>
        </div>
    </div>
</template>
 
<style lang="less" scoped>
/* 容器满屏 */
.root-container {
    background-color: white;
    height: 100%;
    width: 100%;
    // 弹性盒子模型
    display: flex;
    // 盒子左右排列
    flex-direction: row;
    // 水平对齐
    justify-content: start;
    // 垂直对齐
    align-items: center;
}
 
.left {
    background-color: gray;
    width: 200px;
    height: 100%;
 
    .left-logo {
        background-color: #6d6b6b;
        width: 100%;
        height: 85px;
    }
 
    .left-menu {
        width: 100%;
        height: calc(100% - 85px);
    }
}
 
.right {
    background-color: rgb(209, 205, 205);
    // 使用计算占满剩余宽度
    width: calc(100% - 200px);
    height: 100%;
 
    .right-header {
        background-color: #f5f4f4;
        width: 100%;
        height: 58px;
    }
 
    .right-tab {
        background-color: #e0dcdc;
        width: 100%;
        height: 35px;
    }
 
    .right-main {
        background-color: white;
        width: 100%;
        // 使用计算占满剩余高度
        height: calc(100% - 58px - 35px);
    }
}
</style>

6.预览,开始有点样子了

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue3 后台管理系统菜单管理是指在后台管理系统中对菜单进行配置和管理的功能。通过菜单管理,可以动态地添加、修改和删除菜单,以实现对系统功能的灵活控制。 在Vue3 后台管理系统中,菜单管理通常包括以下几个方面的功能: 1. 菜单列表:通过菜单列表展示所有已配置的菜单,包括菜单名称、图标、路径等信息。管理员可以轻松地查看和管理所有菜单。 2. 菜单添加:管理员可以通过菜单添加功能添加新的菜单项。在添加菜单时,可以设置菜单的名称、图标、路径和权限等属性,以便后续的菜单控制和权限管理。 3. 菜单编辑:管理员可以对已有菜单进行编辑,包括修改菜单的名称、图标、路径和权限。通过菜单编辑功能,可以实现对已有菜单的灵活调整和优化。 4. 菜单删除:如果某个菜单不再需要或者有需要重新配置时,管理员可以通过菜单删除功能将其删除。删除菜单时,会同时删除该菜单下的所有子菜单,以保证系统的结构清晰和统一。 5. 菜单排序:管理员可以对菜单进行排序,以自定义菜单在系统中的显示顺序。通过菜单排序功能,可以将常用或者重要的菜单放在前面,方便用户的使用。 6. 菜单权限控制:菜单管理还需要与权限管理功能结合,实现对用户的菜单访问权限控制。只有具有相应权限的用户才能看到和使用对应的菜单项,增加了系统的安全性和稳定性。 总之,Vue3 后台管理系统菜单管理功能通过配置和管理菜单,实现了对系统功能的灵活控制,提升了系统的易用性和管理效率。同时,菜单权限控制功能也实现了对系统的访问权限的精细管理,保证了系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文子阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值