当前位置:首页 > VUE

vue elementui实现管理后台

2026-01-21 18:55:48VUE

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:

vue 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 中封装接口:

vue elementui实现管理后台

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 主题色:

  1. 安装主题生成工具:
    npm install element-theme -g
    npm install element-theme-chalk -D
  2. 初始化变量文件:
    et -i ./src/element-variables.scss
  3. 修改变量后编译:
    et
  4. main.js 中引入自定义主题:
    import '../theme/index.css'

优化建议

  • 使用动态路由配合后端权限数据
  • 封装高阶组件处理重复逻辑
  • 添加全局 loading 状态管理
  • 实现多标签页功能
  • 集成国际化方案
  • 使用 keep-alive 缓存页面状态

通过以上步骤可以快速搭建基于 Vue 和 ElementUI 的管理后台系统,具体实现可根据实际需求调整架构和功能模块。

标签: 后台vue
分享给朋友:

相关文章

vue实现头像剪切

vue实现头像剪切

Vue 实现头像剪切的实现方法 使用 vue-cropperjs 库 vue-cropperjs 是一个基于 cropperjs 的 Vue 组件,专门用于图片裁剪。安装方式如下: npm inst…

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 html2canvas是一个流行的JavaScript库,可以将DOM元素转换为Canvas图像。在Vue项目中安装html2canvas: npm insta…

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue 实现过滤

vue 实现过滤

Vue 实现过滤的方法 在 Vue 中实现过滤功能可以通过多种方式完成,包括使用计算属性、自定义过滤器、第三方库等。以下是几种常见的实现方法: 使用计算属性进行过滤 计算属性是 Vue 中最常用的过…

vue实现cs

vue实现cs

Vue 实现 CS(Client-Side)渲染的常见方法 Vue.js 是一个用于构建用户界面的渐进式框架,默认采用客户端渲染(CSR)。以下是几种常见的实现方式: 使用 Vue CLI 创建项目…

vue实现selectable

vue实现selectable

Vue 实现可选择的 Select 组件 在 Vue 中实现一个可选择的 Select 组件,可以通过以下几种方式: 使用原生 HTML select 元素 <template> &…