• [vue3] 使用ElementPlus页面布局搭建架子


     ✨✨个人主页:沫洺的主页

    📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 

                               📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏

                               📖Docker专栏📖Reids专栏📖MQ专栏📖SpringCloud专栏     

    💖💖如果文章对你有所帮助请留下三连✨✨

    💖前言

    实现如下效果图需要结合vue3专栏从第一篇文章到此文章的准备工作

    前期准备,在模拟接口中多写一些信息,单纯为了好看,可以忽略🙃

    饿了么Plus:网址

    Fast Mock:网址

    💖效果图

    💫先看效果图

    🍂实现内容

    • 🎫ElementPuls页面布局(本章)
    • 🎫动态菜单显示(本章)
    • 🎫实现菜单折叠效果(下一章)
    • 🎫实现部分页面不使用整体框架(下一章)
    • 🎫统一页面导航标签(下一章)

    🍂ElementPuls页面布局

    1. class="common-layout">
    2. <el-container>
    3. <el-header>Headerel-header>
    4. <el-container>
    5. <el-aside width="200px">Asideel-aside>
    6. <el-main>Mainel-main>
    7. el-container>
    8. el-container>
  • 📍使用上图布局容器,复制代码到App.vue中,可将原来的代码注释

    📍布局就是下图所示的布局,因为没有样式,所以大概就是所画的这个样子

     📍接下来给Header设置Layout 布局和样式

    1. "20">
    2. <el-col :span="4"><div class="grid-content ep-bg-purple" />el-col>
    3. <el-col :span="16"><div class="grid-content ep-bg-purple" />el-col>
    4. <el-col :span="4"><div class="grid-content ep-bg-purple" />el-col>

    📍将代码加到Header位置,为了直观的看到效果,随便写一些内容

    📍原理就是将页面竖着切成24份,4/16/4分为三部分 

    📍接下来添加样式,首先是背景颜色,内容居中,然后在第一部分,加个logo,第二部分写某某系统,第三部分整个下拉框

    📍新建添加一个logo图片public/images/logo.png,在第一部分引入logo,并设置大小,可以去网上扒一个logo图片

    📍改第一部分 

    "/images/logo.png" class="logo" alt="管理系统" />

     📍改第二部分

    📍改第三部分

    📍添加一个下拉菜单

    📍代码我做了一些修改,可参考一下

    1. <span class="el-dropdown-link">
    2. <el-icon><UserFilled />el-icon>游客
    3. <el-icon class="el-icon--right">
    4. <arrow-down />
    5. el-icon>
    6. span>
    7. <template #dropdown>
    8. <el-dropdown-menu>
    9. <el-dropdown-item>菜单一el-dropdown-item>
    10. <el-dropdown-item>菜单二el-dropdown-item>
    11. <el-dropdown-item>菜单三el-dropdown-item>
    12. <el-dropdown-item divided>退出系统el-dropdown-item>
    13. el-dropdown-menu>
    14. template>
    1. .userinfo {
    2. text-align: right;
    3. }
    4. .el-dropdown-link {
    5. color: white;
    6. }

    📍到这里Header部分完事

    📍接下来整Aside部分

    🍂动态菜单显示

    📍这里需要整一个Menu菜单

    📍同样的代码我做了一些改动,可参考 

    1. default-active="1" class="el-menu-vertical-demo">
    2. <el-sub-menu index="1">
    3. <template #title>
    4. <el-icon>
    5. <location />
    6. el-icon>
    7. <span>一级菜单span>
    8. template>
    9. <el-menu-item index="1-1">二级菜单el-menu-item>
    10. <el-menu-item index="1-2">二级菜单el-menu-item>
    11. el-sub-menu>
    12. <el-menu-item index="2">
    13. <el-icon>
    14. <icon-menu />
    15. el-icon>
    16. <span>普通菜单span>
    17. el-menu-item>
    1. import {
    2. Document,
    3. Menu as IconMenu,
    4. Location,
    5. Setting,
    6. } from '@element-plus/icons-vue'

    📍Aside部分添加的Menu菜单作为一个组件,可以抽成一个独立的vue页面,然后只需要在Aside中引用即可

    📍新建components/Menu.vue

    📍注意路径使用了别名@(前面文章提过)

    📍然后给它加个背景颜色

    📍接下来解决menu菜单代码写死的问题

    📍准备工作,新建vues/order/Index.vue,List.vue,Add.vue

    📍添加路由

    📍 关联router

    📍 开启router属性,默认开启首页路径对应,循环遍历

    📍设置关联属性

    1. import { createRouter, createWebHistory } from "vue-router";
    2. const routes = [
    3. {
    4. path: '/home',
    5. name: 'home',
    6. component: () => import("@/views/Home.vue"),
    7. meta: { title: "首页" }
    8. },
    9. {
    10. path: '/poduct',
    11. name: 'poduct',
    12. component: () => import("@/views/poduct/Index.vue"),
    13. meta: { title: "商品管理" },
    14. children: [
    15. {
    16. path: '/poduct/list',
    17. name: 'poduct-list',
    18. component: () => import("@/views/poduct/List.vue"),
    19. meta: { title: "商品列表" }
    20. },
    21. {
    22. path: '/poduct/add',
    23. name: 'poduct-add',
    24. component: () => import("@/views/poduct/Add.vue"),
    25. meta: { title: "添加商品" }
    26. }
    27. ]
    28. },
    29. {
    30. path: '/editor',
    31. name: 'editor',
    32. component: () => import("@/views/Editor.vue"),
    33. meta: { title: "富文本" }
    34. },
    35. {
    36. path: '/order',
    37. name: 'order',
    38. component: () => import("@/views/order/Index.vue"),
    39. meta: { title: "订单管理" },
    40. children: [
    41. {
    42. path: '/order/list',
    43. name: 'order-list',
    44. component: () => import("@/views/order/List.vue"),
    45. meta: { title: "订单列表" }
    46. },
    47. {
    48. path: '/order/add',
    49. name: 'order-add',
    50. component: () => import("@/views/order/Add.vue"),
    51. meta: { title: "添加订单" }
    52. }
    53. ]
    54. },
    55. ]
    56. const router = createRouter({
    57. history: createWebHistory(),
    58. routes
    59. })
    60. export default router

    📍启用关联 :router="true"

    📍 分情况进行遍历

    📍 添加唯一标识

     

    📍那么为什么要加唯一标识呢?

    📍如果不加唯一标识,当你点击任意一个一级菜单,由于没有区别,就会默认将所有的一级菜单,当成一部分进行响应,有点牵一发而动全身的感觉,同理二级菜单也是,所有通过添加唯一标识就可以避免此问题,以为每一个菜单都设置了自己的path或者name属性,通过path和name就可以进行区分.

    1. <script setup lang="ts">
    2. import {
    3. Document,
    4. Menu as IconMenu,
    5. Location,
    6. Setting,
    7. } from '@element-plus/icons-vue'
    8. script>
    9. <style scoped>
    10. .el {
    11. background-color: #b2b6b6;
    12. }
    13. style>

    📍添加图标

    📍 可自定义

    📍 动态设置图标(可做可不做,仅供参考)

    📍在router中添加一个icon属性

    📍最后设置Main部分

    📍要实现的效果就是我们点击Aside部分中的菜单,在Main部分显示出来

    📍只需要改一个地方即可

     📍然后会出现一个bug,就是当你点击二级菜单后再次点击普通菜单时会出现找不到路径的问题

    📍解决办法(什么原因,我也不知道😥)

     📍之后就可以自由切换餐单了

    🍂总结说明

    💝💖内容比较杂,需要结合之前的vue3文章,很多细节的地方在图片中都有相关的说明解释,这一篇主要解决了ElementPuls页面布局,动态菜单显示这俩部分,其他部分放到下一篇

  • 相关阅读:
    PostgreSQL -public schema
    k8s---特殊操作(修改hostname)
    什么蓝牙耳机佩戴舒适?佩戴舒适的蓝牙耳机推荐
    小黑leetcode之旅,然后要和学长吃串串香啦:876. 链表的中间结点
    OpenNebula的配置与应用(一)
    Linux 提权-Capabilities
    OC-NSNumber和NSValue一般用来装箱拆箱
    vim快捷键的使用案例
    通用后台管理系统前端界面Ⅹ——前端数据表格的删除、查找
    12张图告诉你MySQL的主键查询为什么这么快
  • 原文地址:https://blog.csdn.net/HeyVIrBbox/article/details/126896677