【项目实践】使用Vue.js和ElementUI快速实现后台管理系统的界面布局

news/2024/7/10 1:52:35 标签: Vue, Element, 后台管理系统, 路由, 界面

前言

大家都知道,后台管理界面不需要很酷炫的动画效果,也不需要花里胡哨的界面布局,只需要简洁易用、清爽明了的界面以便于管理数据。而现在普遍的后台管理系统界面布局都差不多,上中下结构,然后左边是导航栏。随便贴两个Bootstrap的主题模板就是这样的:

Vuemhlbi5hbGl5dW5jcy5jb20vYmxvZy8yMDIwMDIyMzExNTU1OC5wbmc?x-oss-process=image/format,png" alt="" />

这其中难的不是布局,而是如何点击左侧导航栏来渲染中央显示界面路由)。在这里我会用Vue.js和ElementUI来快速搭建起这样的后台管理界面布局!

准备

本文搭建项目时的工具以及版本号如下:

node.js – v12.16.1

npm – 6.13.4

@vue/cli – 4.2.2

版本有差异也没有事情,变化不会太大。

首先,通过Vue-cli工具来快速搭建起一个Vue的项目(这里就不讲解怎么用Vue-cli搭建项目了,文末有项目的github演示地址,下载下来即可运行)

项目搭建好后呢,接下来要导入我们要用的组件,我在这里会用到ElementUI和font-awesome图标(当然也可以直接使用ElementUI中的图标)。
使用npm来安装两个工具:
npm install element-ui
npm install font-awesome
安装完毕后,在main.js里导入两个工具,这样才能在项目中使用:

import Vue from 'vue'
import App from './App.vue'
import router from './router'

// 导入ElementUI
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
// 导入font-awesome(导入就可以直接用了)
import 'font-awesome/scss/font-awesome.scss'

// 使用ElementUI
Vue.use(ElementUI); 

Vue.config.productionTip = false

new Vue({
    router,
    render: h => h(App)
}).$mount('#app')

配置路由

所有都准备好了后,我们来修改App.vue文件,这个是整个项目的界面入口,所以我们在这里定义好最基本的视图:

<template>
    <div id="app">
        <!--主路由视图-->
        <router-view/>
    </div>
</template>

<style lang="scss">
    // 整体布局样式,让整个视图都铺满
    html, body, #app {
        height: 100%;
        width: 100%;
        margin: 0;
        padding: 0;
    }
</style>

视图配置好后,接下来要配置路由设置,我们先新建四个页面组件:Main.vue,Index.Vue,Setting.vue,404.vue。这个等下都要用的,其中Index.Vue和Setting.vue都是Main.vue的嵌套路由,这里为了做演示,Index.vue和Setting.vue里面就只写一个简单的一级标题。此时我们的项目结构如下:

Vuemhlbi5hbGl5dW5jcy5jb20vYmxvZy8yMDIwMDIyMzEyMjIzNS5wbmc?x-oss-process=image/format,png" alt="" />

然后我们在router的js文件里开始配置路由,注意看注释:

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
    {
        // 重定向,用来指向一打开网页就跳转到哪个路由
        path: '/',
        redirect: '/main'
    },
    {
        // 首页
        path: '/main',
        name: 'Main',
        component: () => import('../views/Main.vue'),
        children:[// 开始嵌套路由,这下面的所有路由都是Main路由的子路由
            {
                path:'/', // 嵌套路由里默认是哪个网页
                redirect: '/index'
            },
            {
                path:'/index', // 首页的路由
                name:'Index',
                component:() => import('../views/Index.vue')
            },
            {
                path:'/setting', // 设置页面的路由
                name:'Setting',
                component:() => import('../views/Setting.vue')
            }
        ]
    },
    {
        path:'/*', // 注意,这里不是嵌套路由了,这是为了设置404页面,一定要放在最后面,这样当服务器找不到页面的时候就会全部跳转到404
        name:'404',
        component: () => import('../views/404.vue')
    }
]

const router = new VueRouter({
    mode: 'history',
    base: process.env.BASE_URL,
    routes
})

export default router

路由是配置好了,接下来就是最重要的Main.vue里的布局

布局

我们先在Main.vue里布置最基本的结构,即上中下,中间又分左右:

<template>
    <el-container>
        <!--顶部-->
        <el-header></el-header>

        <!--中央区域-->
        <el-main>
            <el-container>
                <!--左侧导航栏-->
                <el-aside></el-aside>
                <!--主内容显示区域,数据内容都是在这里面渲染的-->
                <el-main></el-main>
            </el-container>
        </el-main>

        <!--底部-->
        <el-footer></el-footer>
    </el-container>
</template>

这样最基本的布局就好了,我们接下来只需要在对应的区域渲染好内容就行,这里最主要的就是使用ElementUI其中的路由功能。

我们将Main.vue里的内容完整给写好,注意看注释:

<template>
    <el-container>
        <!--顶部-->
        <el-header style="border-bottom: 1px solid gray;">
            <el-row style="margin: 10px 15px">
                <el-col :span="1">
                    <!--收缩条-->
                    <a href="#" @click="changeCollapse" style="font-size: 25px;color:#909399;"><i
                            :class="collpaseIcon"></i></a>
                </el-col>
            </el-row>
        </el-header>
        <!--中央区域-->
        <el-main>
            <el-container>
                <!--左侧导航栏-->
                <el-aside :style="{width:collpaseWidth}">
                    <!--default-active代表导航栏默认选中哪个index, :collapse决定导航栏是否展开,为boolean类型
                    :router决定导航栏是否开启路由模式,即在菜单item上设置路由是否生效,值为boolean类型-->
                    <el-menu
                            default-active="0"
                            class="el-menu-vertical-demo"
                            :collapse="isCollapse"
                            :router="true"
                    >
                        <!--index设置当前item的下标,:route则是传一个对象进行,指定路由-->
                        <el-menu-item index="0" :route="{name:'Index'}">
                            <i class="fa fa-magic"></i>
                            <span slot="title"> 首页</span>
                        </el-menu-item>

                        <el-submenu index="1">
                            <template slot="title">
                                <i class="fa fa-cogs"></i><span> 系统管理</span>
                            </template>

                            <el-menu-item index="/Setting" :route="{name:'Setting'}"><i class="fa fa-cog"></i> 网站设置
                            </el-menu-item>
                            <el-menu-item index="1-2"><i class="fa fa-user-circle-o"></i> 角色管理</el-menu-item>
                            <el-menu-item index="1-2"><i class="fa fa-object-group"></i> 店铺模板</el-menu-item>
                        </el-submenu>

                        <el-submenu index="2">
                            <template slot="title">
                                <i class="fa fa-users"></i>
                                <span> 会员管理</span>
                            </template>

                            <el-menu-item index="2-1" :route="{name:'Customer'}"><i class="fa fa-address-card-o"></i>
                                会员列表
                            </el-menu-item>
                            <el-menu-item index="2-2"><i class="fa fa-envelope-o"></i> 会员通知</el-menu-item>
                        </el-submenu>


                    </el-menu>

                </el-aside>
                <!--主内容显示区域-->
                <el-main>
                    <!--路由渲染-->
                    <router-view></router-view>
                </el-main>
            </el-container>
        </el-main>
        <!--底部-->
        <el-footer style="border-top: 1px solid gray"></el-footer>
    </el-container>
</template>

<script>
    // 这一大段JS就是为了做收缩/展开导航栏而用的!
    export default {
        name: "Main",
        data: function () {
            return {
                isCollapse: false, // 决定左侧导航栏是否展开
            }
        },
        computed: {
            collpaseIcon: function () { // 左侧导航栏是否展开状态的图标
                // 如果是展开状态就图标向右,否则图标向左
                return this.isCollapse ? 'el-icon-s-fold' : 'el-icon-s-unfold';
            },
            collpaseWidth: function () { // 左侧导航栏是否展开状态的宽度
                // 如果是展开状态就导航栏宽度为65px,否则200px
                return this.isCollapse ? '65px' : '200px';
            }
        },
        methods: {
            changeCollapse: function () { // 更改左侧导航栏展示状态
                this.isCollapse = !this.isCollapse;
            }
        }
    }
</script>

<style scoped>
    /*整体显示区域布局样式*/
    .el-container {
        height: 100%;
    }

    .el-header, .el-main {
        padding: 0;
    }

    /*左边导航栏具体样式*/
    .el-menu-vertical-demo.el-menu {
        padding-left: 20px;
        text-align: left;
        height: 100%;
        padding: 0;
    }

    el-container > .el-menu-vertical-demo.el-menu {
        padding: 0;
    }

    .el-submenu .el-menu-item, .el-menu-item {
        min-width: 50px;
    }

    .el-menu-item {
        padding: 0;
    }
</style>

这时候页面就已经做好了,我们来看下效果:

Vuemhlbi5hbGl5dW5jcy5jb20vYmxvZy8yMDIwMDIyMzEyNDExNS5naWY" alt="" />

项目github地址如下:

https://github.com/RudeCrab/rude-java

clone到本地即可运行,如果对你有帮助请在github上点个star,我还会继续更新更多【项目实践】哦!

博客、Github、微信公众号都是:RudeCrab,欢迎关注!如果对你有帮助可以收藏、点赞、star、在看、分享~~ 你的支持,就是我写文的最大动力

微信上转载请联系公众号开启白名单,其他地方转载请标明原地址、原作者!


http://www.niftyadmin.cn/n/1864906.html

相关文章

DNN 汉化中的一个问题???

因为在第一次运行DNN时&#xff0c;你可以指定一个空的数据库给它&#xff0c;他会自动生成缺省的数据库&#xff0c;当然都是英文! 现在我想当我第一次运行它时&#xff0c;想让它生成的缺省数据库中的一些表里的内容显示成中文&#xff08;这样站点中的一些页标题等内容也就…

理解 XML Schema:XML Schema 初步 (II)

理解 XML Schema:XML Schema 初步 (II) 内容&#xff1a; 匿名类型定义 元素内容 从简单类型到复合类型 混合内容 空内容 anyType 注释 构造内容模型 属性组 空值(Nil) 小结 参考资料 作者简介 相关内容&#xff1a; 第一部分 柴晓路 (fenniveluddi-china.org)Chief System A…

设计模式随笔-锦囊妙计

请参考我的文章《设计模式随笔&#xff0d;锦囊妙计》转载于:https://www.cnblogs.com/zhenyulu/archive/2004/12/08/74454.html

linux系统下安装sysstat,linux 安装 sysstat包(iostat、mpstat、sar、sa)

在RedHat Linux EL4上安装sysstat包&#xff0c;在第四张盘上[rootnanjing mnt]# umount /mnt/iso[rootnanjing mnt]# mount -t iso9660 /mnt/hda6/RHEL4-i386-AS-disc4.iso /mnt/iso-o loop[rootnanjing mnt]# find /mnt/iso -name "*stat*"/mnt/iso/RedHat/RPMS/li…

NDuiker项目第3天

今天是周六了&#xff0c;原本以为是很轻松的一天&#xff0c;结果只有到了这个时候才能将今天的Blog写上去。 昨天NDuiker项目进展的不是很好&#xff0c;^_^&#xff0c;其实刚刚开始嘛。 现在总结一下遇到的技术问题&#xff1a; 在测试执行文件为Dos、16位、32位程序的时候…

【项目实践】图文并茂讲解SSM整合

以项目驱动学习&#xff0c;以实践检验真知 前言 现在使用Java后端开发使用的技术栈基本上比较统一&#xff1a;Spring SpringMVC Mybatis&#xff0c;即大家常说的SSM。虽然现在流行的做法是使用SpringBoot来快速搭建、配置好SSM项目&#xff0c;但还是有必要知道如何不用S…

计算机系统结构实验报告Linux,计算机系统结构实验报告西安交通大学.docx

计算机系统结构课内实验》实验报告班级&#xff1a;计算机 15 班 姓名 &#xff1a;高君宇 学号&#xff1a; 2110505112 日期&#xff1a; 2014.5.7动态分支预测实验一、实验目的及要求了解掌握动态分支与推断执行技术对流水线性能的改进效果了解动态分支预测的基本技术&#…

SPS2003的工作流管理和实现OA,以及BizTalk Server 2004 的流程管理

昨天休假在家&#xff01;10点钟起来&#xff0c;把BizTalk Server 2004 安装起了&#xff01;晕&#xff01;没安装去VS。NET 2003&#xff01;BizTalk Server 2004 这个软件对其它的依赖性很强。微软的野心暴露无疑了&#xff01;要实现BizTalk Server 2004 的功能需要安装的…