Vue-element-admin开发指南 - 教程

news/2025/9/30 16:05:30/文章来源:https://www.cnblogs.com/lxjshuju/p/19121331

环境准备

确保本地已安装 Node.js(建议版本 ≥14)和 npm/yarn。可通过以下命令检查版本:

node -v
npm -v

克隆项目

从 GitHub 克隆

 模板项目:

git clone https://github.com/PanJiaChen/vue-element-admin.git
cd vue-element-admin

安装依赖

使用 npm 或 yarn 安装依赖包:

npm install
# 或
yarn install

运行开发环境

启动本地开发服务器,默认访问 http://localhost:9528

npm run dev
# 或
yarn dev

配置修改

根据需求调整项目配置:

  • 接口代理:修改 vue.config.js 中的 proxyTable 指向后端 API 地址。
  • 全局变量:编辑 .env 文件设置环境变量(如 VUE_APP_BASE_API)。

构建生产环境

生成优化后的静态文件,输出至 dist 目录:

npm run build:prod
# 或
yarn build:prod

自定义主题

通过修改 src/styles/variables.scss 中的 SCSS 变量调整主题色、字体等样式。

路由与权限

  • 路由配置:在 src/router/index.js 中添加或修改路由。
  • 权限控制:基于 src/permission.js 实现动态路由和角色权限校验。

部署上线

dist 目录内容部署至 Nginx 或 Apache 服务器,需配置路由重定向(History 模式):

location / {try_files $uri $uri/ /index.html;
}

vue-element-admin 常用方法

vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统解决方案,提供了丰富的功能和组件。以下是一些常用的方法和技巧:


路由配置与权限控制

src/router/index.js 中配置动态路由,结合 src/permission.js 实现权限控制。
使用 router.addRoutes 动态添加路由,根据用户角色过滤路由表。

// 示例:动态路由过滤
const accessedRoutes = asyncRoutes.filter(route => {if (hasPermission(roles, route)) {if (route.children) {route.children = route.children.filter(child => {return hasPermission(roles, child);});}return true;}return false;
});


API 请求封装

src/utils/request.js 封装了 Axios 请求,支持拦截器和错误处理。
常用方法包括:

  • request.get(url, params)
  • request.post(url, data)
  • request.put(url, data)
  • request.delete(url, params)
// 示例:获取用户列表
export function getUserList(params) {return request({url: '/user/list',method: 'get',params});
}


状态管理(Vuex)

src/store 中管理全局状态,常用模块包括:

  • user.js:用户信息、登录状态
  • permission.js:路由权限
  • tagsView.js:页面标签导航
// 示例:用户登录 Action
login({ commit }, userInfo) {return new Promise((resolve, reject) => {login(userInfo).then(response => {const { data } = response;commit('SET_TOKEN', data.token);resolve();}).catch(error => {reject(error);});});
}


组件封装与复用

常用封装组件包括:

  1. 表格组件:基于 el-table 封装分页和搜索功能。
  2. 表单组件:动态生成表单,支持验证规则。
  3. 图表组件:集成 ECharts,封装常用图表类型。
// 示例:动态表单验证规则
rules: {username: [{ required: true, message: '请输入用户名', trigger: 'blur' },{ min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }]
}


主题与样式定制

通过修改 src/styles/variables.scss 定制主题色和样式。
支持动态切换主题,使用 vue-element-admin 提供的 themePicker 组件。

// 示例:修改主题色
$--color-primary: #1890ff;
$--menu-background: #304156;


国际化支持

src/lang 目录下配置多语言文件(如中文 zh.js 和英文 en.js)。
使用 vue-i18n 切换语言:

// 示例:切换语言
this.$i18n.locale = 'zh';


工具函数

src/utils 提供常用工具函数:

  • parseTime:时间格式化
  • download:文件下载
  • deepClone:深拷贝
// 示例:时间格式化
parseTime(new Date(), '{y}-{m}-{d} {h}:{i}:{s}');


部署与构建

  • 使用 npm run build 打包项目。
  • 通过 nginx 配置代理和静态资源路径。
  • 修改 vue.config.js 调整构建配置。
// 示例:配置代理
devServer: {proxy: {'/api': {target: 'http://localhost:8080',changeOrigin: true}}
}

以上是 vue-element-admin 的常用方法和实践,可根据实际需求进一步扩展和优化。

vue-element-admin 的鉴权管理

vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统解决方案,其鉴权管理主要通过路由守卫、权限角色控制和动态路由实现。

路由守卫控制访问权限

路由守卫是 Vue Router 提供的功能,用于在路由跳转前进行权限验证。在 src/permission.js 中,通过 beforeEach 钩子实现全局路由守卫。

router.beforeEach(async (to, from, next) => {const hasToken = getToken()if (hasToken) {if (to.path === '/login') {next({ path: '/' })} else {const hasRoles = store.getters.roles && store.getters.roles.length > 0if (hasRoles) {next()} else {try {const { roles } = await store.dispatch('user/getInfo')const accessRoutes = await store.dispatch('permission/generateRoutes', roles)router.addRoutes(accessRoutes)next({ ...to, replace: true })} catch (error) {await store.dispatch('user/resetToken')next(`/login?redirect=${to.path}`)}}}} else {if (whiteList.indexOf(to.path) !== -1) {next()} else {next(`/login?redirect=${to.path}`)}}
})

权限角色管理

权限角色存储在 Vuex 中,通过 src/store/modules/user.jssrc/store/modules/permission.js 管理。用户登录后获取角色信息,并根据角色生成可访问的路由。

// user.js
const actions = {getInfo({ commit }) {return new Promise((resolve, reject) => {getInfo().then(response => {const { data } = responsecommit('SET_ROLES', data.roles)resolve(data)}).catch(error => {reject(error)})})}
}

动态路由生成

动态路由通过角色权限过滤生成。在 src/store/modules/permission.js 中,generateRoutes 方法根据角色过滤路由。

// permission.js
const actions = {generateRoutes({ commit }, roles) {return new Promise(resolve => {let accessedRoutesif (roles.includes('admin')) {accessedRoutes = asyncRoutes || []} else {accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)}commit('SET_ROUTES', accessedRoutes)resolve(accessedRoutes)})}
}

按钮级权限控制

按钮级权限通过自定义指令 v-permission 实现。在 src/directive/permission/permission.js 中定义指令,判断用户是否有权限显示按钮。

function checkPermission(el, binding) {const { value } = bindingconst roles = store.getters && store.getters.rolesif (value && value instanceof Array) {if (value.length > 0) {const permissionRoles = valueconst hasPermission = roles.some(role => {return permissionRoles.includes(role)})if (!hasPermission) {el.parentNode && el.parentNode.removeChild(el)}}} else {throw new Error(`need roles! Like v-permission="['admin','editor']"`)}
}

路由配置

路由分为常量路由和动态路由。常量路由如登录页、404 页等,动态路由根据权限动态添加。在 src/router/index.js 中配置基本路由。

export const constantRoutes = [{path: '/login',component: () => import('@/views/login/index'),hidden: true},{path: '/404',component: () => import('@/views/404'),hidden: true}
]

权限验证流程

  1. 用户登录后获取 token 和角色信息。
  2. 根据角色信息生成可访问的路由。
  3. 通过路由守卫验证每次路由跳转的权限。
  4. 动态添加路由到路由器。
  5. 按钮级权限通过自定义指令控制显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年国内工作服厂家最新推荐排行榜:聚焦工艺设计与服务,精选权威榜单助企业采购冬季/春季/工人/车间/防静电/餐饮/劳保工作服厂家推荐

当前工作服市场产品质量参差不齐,部分产品面料不达标、耐用性差,且多数供应商缺乏个性化定制能力,难以满足不同行业企业的特殊需求,如医疗行业的抗菌需求、户外作业的防水保暖需求等。同时,企业采购时还常面临交付…

邯郸做网站的公司wordpress表情按钮

高维高斯分布基础 多位高斯分布的几何理解 多维高斯分布表达式为: p(x∣μ,Σ)1(2π)p/2∣Σ∣1/2e−12(x−μ)TΣ−1(x−μ)p(x|\mu,\Sigma)\frac{1}{(2\pi)^{p/2}|\Sigma|^{1/2}}e^{-\frac{1}{2}(x-\mu)^{T}\Sigma^{-1}(x-\mu)} p(x∣μ,Σ)(2π)p/2∣Σ∣1/21​…

ClickHouse 窗口函数使用详解(一) - 若

ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) 详解 一句话概括 "在每个部门内部,按工资从高到低给员工编号" 逐词解析 1. ROW_NUMBER()作用:生成顺序编号特点:从1开始,连续不重复…

学做网站容易吗源代码下载

一、文件读取 Client向NameNode发起RPC请求,来确定请求文件block所在的位置;NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode 都会返回含有该 block 副本的 DataNode 地址; 这些返回的 DN 地…

在 Vue 3 的 script setup 语法中,定义组件名称(name)

在 Vue 3 的单文件组件(SFC)中,使用 <script setup> 语法糖时,我们通常需要为组件指定一个名称(name),这在调试和递归组件中很有用。然而,由于 <script setup> 是一种编译时语法糖,它默认不提供直…

2025 年杀虫公司联系方式推荐 天津万康:靶向消杀 + 1 年质保 300 + 政企认可的虫害防控专家

行业背景随着公众健康意识提升与商业场景卫生标准升级,有害生物防制(PCO)行业迎来规范化发展新阶段。数据显示,国内餐饮、医疗、食品加工等领域因虫害问题引发的合规风险事件年均增长 12%,传统 “一次性消杀” 模…

即墨网站优化网站建设平台信息

在系统中缓存最常用的策略是&#xff1a;服务端需要同时维护DB和cache&#xff0c;并且是以DB的结果为准–Cache-Aside Pattern&#xff08;缓存分离模式、旁路缓存&#xff09; 读数据 单纯的读数据是不会产生数据不一致&#xff0c;只有并发下读和写才会存在数据不一致。 写…

2025 年最新 1688 代运营公司推荐榜单:助力企业突破电商困境,精选优质服务商阿里巴巴国际站代运营/新店起量代运营/数据分析代运营/爆款打造代运营公司推荐

在数字经济持续深化的 2025 年,1688 平台依旧是企业拓展线上销路、提升市场份额的核心阵地。但当前众多企业在 1688 店铺运营中,仍面临专业团队缺失、平台规则更迭应对不及时、流量获取与转化难、视觉营销效果不佳等…

ClickHouse 窗口函数详解:告别 GROUP BY 的局限性,实现灵活数据分析 - 若

什么是窗口函数? 窗口函数是 SQL 中一种强大的分析功能,它允许在对每一行进行计算时,能够访问到与当前行相关的多行数据。与 GROUP BY 不同,窗口函数不会将多行合并为一行,而是保留所有原始行,同时添加计算列。 …

简单WEB网站

第一步:创建项目结构 在PyCharm中创建以下目录结构 my_web_app/ ├── backend/ # Flask后端代码 ├── frontend/ # Vue前端代码 ├── venv/ # Python虚拟环境(可选) └──requirements.…

dhru商城网站建设wordpress注册logo

目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜…

2025 年窗帘杆源头厂家最新推荐榜单:包含支架 / 环 / 全自动 / 可伸缩等多类产品及配件,帮助选到品质与交期双优的优质厂家

当前家居窗饰市场中,窗帘杆产品品质参差不齐、定制能力不足、供货效率低下等问题频发,让消费者和采购商在选择时倍感困扰。众多小型厂家缺乏专业研发团队,产品款式单一,无法满足家庭、写字楼、酒店等不同场景的个性…

大庆建设网站首页优化大师官方下载

1.链表的概念 对于顺序存储的结构最大的缺点就是插入和排序的时候需要移动大量的元素&#xff0c;所以链表的出生由此而来 先上代码&#xff1a; // 链表 public class LinkedList<T extends Comparable> {// 结点类class Node {T ele; // 当前结点上的元素内容Node ne…

2025 年电动窗帘厂家推荐榜单:聚焦国内优质企业定制实力与口碑,为采购者提供最新选择参考电动窗帘系统/电机/轨道/配件/智能电动窗帘厂家推荐

当下智能家居行业蓬勃发展,电动窗帘作为提升居住与办公舒适度的关键产品,市场需求持续攀升。然而,行业乱象却给采购者带来诸多困扰:部分品牌原材料选用不规范,劣质材料导致产品稳定性差、使用寿命短;定制服务能力…

网站推广的技巧wordpress 代码压缩

1.set和map存在的意义 &#xff08;1&#xff09;set和map的底层都是二叉搜索树&#xff0c;可以达到快速排序&#xff08;当我们按照迭代器的顺序来遍历set和map&#xff0c;其实是按照中序来遍历的&#xff0c;是排过序的&#xff09;、去重、搜索的目的。 &#xff08;2&a…

淘宝首页网站怎么做手机短视频制作软件app

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 输入 共2行&#xff0c;第1行是被减数a&#xff0c;第2行是减数b(a > b)。每个大整数不超过200位&#xff0c;不会有多余的前导零。 输出 一行&#xff0c;即所求的差。 样例输入1…

网站建设公司业务望京做网站

目录频率域滤波基础频率域的其他特性频率域滤波基础知识频率域滤波步骤小结空间域和频率域滤波之间的对应关系频率域滤波基础 频率域的其他特性 频率域中的滤波过程如下&#xff1a; 首先修改傅里叶变换以在到特定目的然后计算IDFT&#xff0c;返回到空间域 # 频率域中的其…

专业微网站开发wordpress 用户登陆后跳转到首页

register_shutdown_function注册一个会在php中止时执行的函数&#xff0c;注册一个 callback &#xff0c;它会在脚本执行完成或者 exit() 后被调用。error_get_last获取最后发生的错误&#xff0c;包含type(错误类型)&#xff0c;message(错误消息)&#xff0c;file(发生错误所…

java类加载内存分析

java类加载内存分析加载内存分析 1.加载到内存(方法区(即特殊的堆)存放原始类,加载完成后会产生一个类对应java.lang.class对象代表不同的类存放到堆中,最后在栈中开始main()链接 2.链接,连接结束后静态变量默认…

Vue3 使用注意事项

1.script-setup语法糖下// 获取 emit,注意需要直接在setup范围下,放在具体方法里,可能会因作用域导致获取不到defineEmitsconst emit = defineEmits([quanping-comp]);