当前位置: 首页 > web >正文

Vue3 + Element Plus 实现用户管理模块

本文介绍一个使用 Vue3 + Element Plus 实现的用户与小组管理模块,支持用户的增删改查(CRUD)和分页管理,以及小组的新增和删除功能,适用于管理后台系统中的用户权限管理场景。

一、项目简介

该模块具备以下功能:

  • 用户信息展示(用户名、姓名、所属小组、角色)
  • 用户新增、编辑、删除
  • 小组新增、删除管理
  • 分页支持
  • 弹窗式表单对话框设计

二、效果图展示

以下为模块实际界面截图:

  • 用户列表页效果图
    在这里插入图片描述

  • 新增/编辑弹窗效果图
    在这里插入图片描述
    在这里插入图片描述

提示:以上截图请替换为项目实际 UI 效果图,可展示页面布局与交互样式。

三、核心逻辑(JavaScript 部分)

用户数据通过接口异步获取,分页参数传入后台,返回记录与总数。

const fetchUserList = async () => {const response = await queryUserPages({currentPage: pagination.value.currentPage,pageSize: pagination.value.pageSize});userList.value = response.data.records;pagination.value.total = response.data.total;
};

表单提交支持区分新增与编辑场景:

const handleSubmit = async (formData) => {dialogVisible.value = false;if (currentUser.value) {await updateUser(formData);} else {await addUser(formData);}fetchUserList();
};

支持用户删除操作,删除前通过消息框确认:

const confirmDeleteUser = (user) => {ElMessageBox.confirm(`确定要删除用户 "${user.userName}" 吗?`, '删除确认', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {deleteUser(user.uuid);});
};const deleteUser = async (userId) => {await deleteUserById({ uuid: userId });fetchUserList();
};

四、小组管理功能

小组弹窗支持新增与删除操作。

新增小组逻辑如下:

const handleAdd = async () => {if (!form.branchname) {ElMessage.warning('请输入小组名称');return;}const response = await request({url: '/role/addBranch',method: 'post',data: form});if (response.code === 200) {ElMessage.success('小组添加成功');resetForm();emit('refresh');}
};

删除小组逻辑如下:

const handleDelete = (id) => {ElMessageBox.confirm('确定要删除这个小组吗?', '警告', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(async () => {await request({url: '/role/deleteBranchById',method: 'post',data: { uuid: id }});emit('refresh');});
};

五、样式说明

主要样式逻辑如下:

  • .box-card:布局容器,使用 Flex 垂直布局
  • .card-header:顶部区域,用于标题与按钮排列
  • .pagination-container:分页器底部区域,右对齐展示
.box-card {height: 100%;display: flex;flex-direction: column;overflow: auto;
}.card-header {display: flex;justify-content: space-between;align-items: center;padding: 0 10px;flex-shrink: 0;
}.user-table {flex: 1 1 auto;overflow: hidden;
}.pagination-container {padding: 10px 0;display: flex;justify-content: flex-end;background-color: #fff;flex-shrink: 0;
}
:deep(.el-card__body){height: calc(100% - 120px);padding: 20px 20px 0px 20px;
}

样式清爽、结构明确,便于组件复用和样式统一。

http://www.xdnf.cn/news/9014.html

相关文章:

  • 计算机网络学习(八)——MAC
  • 3560. 木材运输的最小成本
  • 时序模型上——ARIMA/MA/AR
  • GaussDB资源冻结与解冻:精细化资源管理的实践与策略
  • Webpack和Vite构建工具有什么区别?各自的优缺点是什么
  • 华为OD机试真题——虚拟理财游戏(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • 华为OD机试真题——数据分类(2025B卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • 162. 寻找峰值
  • 【芯片设计中的跨时钟域信号处理:攻克亚稳态的终极指南】
  • Rust 1.0 发布十周年,梦想再度扬帆起航!
  • Class ‘AlibabaCloud\Tea\Utils\Utils\RuntimeOptions‘ not found
  • 人脸识别备案快速高效服务
  • 有效的字母异位符--LeetCode
  • 2025年5月架构真题回忆
  • SQL连接字符串的差异造成远程服务器不能正常连接
  • 数据库入门教程:以商品订单系统为例
  • 篇章四 数据结构——顺序表
  • 代码随想录算法训练营第60期第四十八天打卡
  • 010501上传下载_反弹shell-渗透命令-基础入门-网络安全
  • 《棒球百科》国家一级运动员和二级运动员的区别·棒球1号位
  • 【bug排查记录】由Redission配置引发的Satoken血案
  • Nginx 核心功能深度解析:负载均衡、缓存加速与安全防护
  • Structure-Revealing Low-Light Image Enhancement Via Robust Retinex Model论文阅读
  • 如何最简单、通俗地理解Pytorch?神经网络中的“梯度”是怎么自动求出来的?PyTorch的动态计算图是如何实现即时执行的?
  • 重构开发范式!飞算JavaAI革新Spring Cloud分布式系统开发
  • 图像分割技术的实现与比较分析
  • Windows计算机管理:定时调用指定的可执行程序(.exe)
  • DHCPig:使用 scapy 网络库的 DHCP 耗尽脚本!全参数详细教程!Kali Linux教程!
  • 数据治理进阶:数据治理基础概念解释【附全文阅读】
  • sqli-labs第二十六关——Trick with commentspace