你們都知道,後臺管理界面不須要很酷炫的動畫效果,也不須要花裏胡哨的界面佈局,只須要簡潔易用、清爽明瞭的界面以便於管理數據。而如今廣泛的後臺管理系統的界面佈局都差很少,上中下結構,而後左邊是導航欄。隨便貼兩個Bootstrap的主題模板就是這樣的:javascript
這其中難的不是佈局,而是如何點擊左側導航欄來渲染中央顯示界面(路由)。在這裏我會用Vue.js和ElementUI來快速搭建起這樣的後臺管理界面佈局!css
本文搭建項目時的工具以及版本號以下:html
node.js -- v12.16.1vue
npm -- 6.13.4java
@vue/cli -- 4.2.2node
版本有差別也沒有事情,變化不會太大。git
首先,經過Vue-cli工具來快速搭建起一個Vue的項目(這裏就不講解怎麼用Vue-cli搭建項目了,文末有項目的github演示地址,下載下來便可運行)github
項目搭建好後呢,接下來要導入咱們要用的組件,我在這裏會用到ElementUI和font-awesome圖標(固然也能夠直接使用ElementUI中的圖標)。 使用npm來安裝兩個工具: npm install element-ui
npm install font-awesome
安裝完畢後,在main.js
裏導入兩個工具,這樣才能在項目中使用:vue-router
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文件,這個是整個項目的界面入口,因此咱們在這裏定義好最基本的視圖:npm
<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裏面就只寫一個簡單的一級標題。此時咱們的項目結構以下:
而後咱們在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>
複製代碼
這時候頁面就已經作好了,咱們來看下效果:
項目github地址以下:
clone到本地便可運行,若是對你有幫助請在github上點個star,我還會繼續更新更多【項目實踐】哦!