• Vue3 从零开始 搭建 简单 干净 的 后台管理系统


    前言:

    记得自己大二时(2017年),想搭建一个后台管理系统,当时头脑想的是用原生JS写的。我肯定干不出来,后来乖乖用了当时比较流行的layui,就算现在也真的难以做下去。

    这几天,有了需要后端管理系统的需求,我本想接着随便找一个框架改改算了。后来又改变主意了,决定自己从头搭建一个。

    (1)长期考虑,以后确实很多时候,都需要一个干净的、简单的后端管理系统

    (2)理解UI框架的搭建过程,尤其是知道细节,我讨厌模模糊糊的感觉

    一、下图就是系统首页框架结构:跟主流后台管理系统框架结构差不多

    二、项目完整代码在gitee上已经公开

    下面连接就是项目源码地址

    https://gitee.com/tyx_0/simpleVue3Admin

    三、具体搭建过程

    现在我们从零开始,讲如何来搭建这样的一个前端页面框架,主要用到 VUE3 + Element-plus

    1. 生成项目

    这里使用 vite生成项目,理由就是vite比webpack编译项目更快

    1. # npm 7+, extra double-dash is needed:
    2. npm create vite@latest my-vue-app -- --template vue

    2. 导入Elment-plus

    这里是官网地址:Element-plus 官网地址

    npm install element-plus --save

    然后我们打开修改/src/main.js文件,引入 element-plus

    1. import { createApp } from 'vue'
    2. import App from './App.vue'
    3. //导入路由
    4. import router from './router/index'
    5. //全局导入Element plus
    6. import ElementPlus from 'element-plus'
    7. import 'element-plus/dist/index.css'
    8. const app = createApp(App);
    9. app.use(router);
    10. app.use(ElementPlus);
    11. app.mount('#app'

    3. 使用Container布局组件(element-plus里面的)

    使用Container组件搭建结构

     

    最后,具体搭建成的如下图

     

    具体代码如下

    1. <template>
    2. <div class="common-layout">
    3. <el-container class="box">
    4. <!-- 左侧菜单栏 -->
    5. <el-aside class="el-aside">
    6. <h1 class="logoBox">VUE-ADMIN</h1>
    7. </el-aside>
    8. <el-container>
    9. <!-- header头部菜单 -->
    10. <el-header class="header"> </el-header>
    11. <!-- main主体模块:标签页 + 当前路由内容 -->
    12. <el-main class="el-main"> </el-main>
    13. </el-container>
    14. </el-container>
    15. </div>
    16. </template>
    17. <style scoped>
    18. .logoBox {
    19. position: absolute;
    20. top: 18px;
    21. left: 30px;
    22. font-size: 24px;
    23. color: #fff;
    24. }
    25. .box {
    26. width: 100vw;
    27. height: 100vh;
    28. }
    29. .header {
    30. padding: 0;
    31. height: 58px;
    32. background-color: #545c64;
    33. }
    34. /* 去除默认的边框样式 */
    35. .el-header .el-menu {
    36. border-bottom: none;
    37. }
    38. .el-aside .el-menu {
    39. border-right: none;
    40. }
    41. .el-main {
    42. background-color: #e9eef3;
    43. }
    44. .el-aside {
    45. width: 240px;
    46. background: #545c64;
    47. padding-top: 58px;
    48. }
    49. </style>

    4. 在Aside左侧部分添加 导航菜单

    具体在Element-plus里面,如下图

     

    我做出来的效果图如下

     

    思路:

    1. 要自己配置一个菜单结构项目

    //左侧菜单选项配置

          asideMenu: [

            {

              title: "用户",

              index: "user",

            },

            {

              title: "文章",

              subs: [

                {

                  title: "文章列表",

                  index: "articleList",

                },

              ],

            },

            {

              title: "测试",

              index: "test",

            },

     ]

    2. 根据菜单结构关键字,区分是否有二级菜单,,进行不同的渲染

    代码如下(上面的代码我就不重复,只粘贴新增的)

    1. <!-- 左侧菜单栏 -->
    2. <el-aside class="el-aside">
    3. <h1 class="logoBox">VUE-ADMIN</h1>
    4. <el-menu
    5. active-text-color="#ffd04b"
    6. background-color="#545c64"
    7. class="el-menu-vertical-demo"
    8. default-active="2"
    9. text-color="#fff"
    10. :router="true"
    11. >
    12. <template v-for="item in asideMenu">
    13. <!-- 两级菜单 -->
    14. <template v-if="item.subs">
    15. <el-sub-menu :index="item.title" :key="item.title">
    16. <!-- 一级菜单标题 -->
    17. <template #title>
    18. <el-icon><document /></el-icon>
    19. <span>{{ item.title }}</span>
    20. </template>
    21. <!-- 二级菜单标题 -->
    22. <template v-for="subItem in item.subs" :key="subItem.index">
    23. <el-menu-item
    24. :index="subItem.index"
    25. @click="() => handleMenuItem(subItem)"
    26. >{{ subItem.title }}</el-menu-item
    27. >
    28. </template>
    29. </el-sub-menu>
    30. </template>
    31. <!-- 一级菜单 -->
    32. <template v-else>
    33. <el-menu-item
    34. :index="item.index"
    35. :key="item.title"
    36. @click="() => handleMenuItem(item)"
    37. >
    38. <el-icon><document /></el-icon>
    39. <span>{{ item.title }}</span>
    40. </el-menu-item>
    41. </template>
    42. </template>
    43. </el-menu>
    44. </el-aside>

    5.  main里面放标签页

     

    思路,源代码里,我让首页是固定,就是不可删除的

    6. 最关键的逻辑部分是 标签页和导航菜单 都可以 控制路由

    详细的看完整的代码吧

  • 相关阅读:
    Kubernetes Helm的应用
    is_sorted()函数的练习
    Windows安装nginx
    C++——stack和queue的使用和OJ练习题
    Python 3.14 将比 C++ 更快
    0基础2小时搭建自己的网站
    数据治理-数据仓库和商务智能-部分内容
    基于GRU的 电影评论情感分析 - python 深度学习 情感分类 计算机竞赛
    Vue或React项目配置@路径别名及智能提示方案
    基于Docker搭建ELK(Elasticsearch、Logstash、Kibana)日志框架
  • 原文地址:https://blog.csdn.net/tengyuxin/article/details/124912497