vue elementui实现管理后台
Vue + ElementUI 实现管理后台
环境准备
确保已安装 Node.js(建议版本 14+)和 npm/yarn。使用 Vue CLI 创建项目:
vue create admin-demo
cd admin-demo
安装 ElementUI 和依赖:
vue add element
npm install axios vue-router vuex --save
项目结构
典型管理后台目录结构:
src/
├── api/ # 接口封装
├── assets/ # 静态资源
├── components/ # 公共组件
├── router/ # 路由配置
├── store/ # Vuex状态管理
├── utils/ # 工具函数
├── views/ # 页面组件
├── App.vue # 根组件
└── main.js # 入口文件
基础配置
在 main.js 中引入 ElementUI:
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)
布局实现
使用 ElementUI 的布局组件构建框架:
<template>
<el-container>
<el-aside width="200px">
<el-menu router>
<el-submenu index="1">
<template slot="title">系统管理</template>
<el-menu-item index="/user">用户管理</el-menu-item>
</el-submenu>
</el-menu>
</el-aside>
<el-container>
<el-header>Header</el-header>
<el-main>
<router-view></router-view>
</el-main>
</el-container>
</el-container>
</template>
路由配置
在 router/index.js 中配置动态路由:
const routes = [
{
path: '/',
component: Layout,
children: [
{
path: '/user',
component: () => import('@/views/UserManage'),
meta: { title: '用户管理' }
}
]
}
]
API 封装
在 api/user.js 中封装接口:
import request from '@/utils/request'
export function getUsers(params) {
return request({
url: '/api/users',
method: 'get',
params
})
}
表格组件
用户管理页示例:
<template>
<div>
<el-table :data="userList">
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="role" label="角色"></el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page"
:page-sizes="[10, 20, 50]"
:page-size="size"
layout="total, sizes, prev, pager, next"
:total="total">
</el-pagination>
</div>
</template>
<script>
import { getUsers } from '@/api/user'
export default {
data() {
return {
userList: [],
page: 1,
size: 10,
total: 0
}
},
created() {
this.fetchData()
},
methods: {
fetchData() {
getUsers({
page: this.page,
size: this.size
}).then(res => {
this.userList = res.data.list
this.total = res.data.total
})
},
handleSizeChange(val) {
this.size = val
this.fetchData()
},
handleCurrentChange(val) {
this.page = val
this.fetchData()
}
}
}
</script>
权限控制
通过路由守卫实现权限验证:
router.beforeEach((to, from, next) => {
const hasToken = localStorage.getItem('token')
if (to.path === '/login') {
next()
} else {
hasToken ? next() : next('/login')
}
})
主题定制
修改 ElementUI 主题色:
- 安装主题生成工具:
npm install element-theme -g npm install element-theme-chalk -D - 初始化变量文件:
et -i ./src/element-variables.scss - 修改变量后编译:
et - 在
main.js中引入自定义主题:import '../theme/index.css'
优化建议
- 使用动态路由配合后端权限数据
- 封装高阶组件处理重复逻辑
- 添加全局 loading 状态管理
- 实现多标签页功能
- 集成国际化方案
- 使用 keep-alive 缓存页面状态
通过以上步骤可以快速搭建基于 Vue 和 ElementUI 的管理后台系统,具体实现可根据实际需求调整架构和功能模块。







