Vue后台开发实例教程(七)用户管理模块实现代码
本实例教程是.net core 系列实例开发教程-权限管理系统前端开发教程,使用PanJiaChen写的Vue后台模板。
本文源码下载地址:http://www.80cxy.com/Blog/ResourceView?arId=202403191532545995NAAqJh
系列教程地址:http://www.80cxy.com/Blog/ArticleView?arId=202403191517574161ay3s5V
本文实现前端用户管理的相关操作,如添加用户、修改用户、为用户分配角色等功能。页面如下:
一、接口代码
/***********用户管理************/ //获取用户列表 export const GetUserList = (data) => request({ url: '/api/System/GetUserList', method: 'post', data }) //保存添加、修改用户信息 export const reqAddOrUpdateUser = (data) => { // 带给服务器数据携带ID--修改 if (data.id) { return request({ url: '/api/System/EditUser', method: 'put', data: data }) } else { return request({ url: '/api/System/AddUser', method: 'post', data: data }) } } //删除用户信息 export const reqDeleteUser = (id) => { return request({ url: `/api/System/DeleteUser?id=${id}`, method: 'delete' }) } //批量删除用户信息 export const reqDeleteUserRange = (ids) => { return request({ url: '/api/System/DeleteUserRange', method: 'delete', data: ids }) } //保存为用户分配的角色信息 export const reqSetUserRole = (userId, roleId) => { return request({ url: '/api/System/SetUserRole', method: 'post', params: { userId, roleId } }) }
二、组件代码
<template> <div class="app-container" style="margin: 20px 0"> <el-form inline> <el-form-item> <el-input v-model="search.username" placeholder="用户名"></el-input> </el-form-item> <el-button type="primary" icon="el-icon-search" @click="searchHandler" >查询</el-button > <el-button type="default" @click="resetSearch">清空</el-button> </el-form> <div style="margin-bottom: 20px"> <el-button type="primary" @click="showAddUser">添加</el-button> <el-button type="danger" @click="removeUsers" :disabled="selectedIds.length === 0" >批量删除</el-button > </div> <el-table border stripe v-loading="listLoading" :data="list" @selection-change="handleSelectionChange" > <el-table-column type="selection" width="55" align="center" ></el-table-column> <el-table-column type="index" label="序号" width="80" align="center" ></el-table-column> <el-table-column label="用户名" width="150" prop="userName" align="center" ></el-table-column> <el-table-column label="用户昵称" prop="realName" align="center" ></el-table-column> <el-table-column label="角色" prop="roleName" align="center" ></el-table-column> <el-table-column label="操作" align="center"> <template slot-scope="{ row }"> <el-button type="info" size="mini" icon="el-icon-user-solid" title="分配角色" @click="showAssignRole(row)" ></el-button> <el-button type="primary" size="mini" icon="el-icon-edit" title="修改用户" @click="editUser(row)" ></el-button> <el-popconfirm :title="`确定删除${row.userName}吗?`" @onConfirm="removeUser(row.id)" > <el-button style="margin-left: 10px" slot="reference" type="danger" size="mini" icon="el-icon-delete" title="删除用户" ></el-button> </el-popconfirm> </template> </el-table-column> </el-table> <!--分页器--> <el-pagination style="margin-top: 20px; textalign: center" :current-page="pageIndex" :total="total" :page-size="pageSize" :page-sizes="[10, 50, 100]" @current-change="getPageList" @size-change="handleSizeChange" layout="prev,pager,next,jumper,->,sizes,total" ></el-pagination> <el-dialog :title="user.id ? '修改用户' : '添加用户'" :visible.sync="dialogFormVisible" > <el-form ref="userForm" :model="user" :rules="fromRules" label-width="120px" > <el-form-item label="用户名" prop="userName"> <el-input v-model="user.userName" placeholder="请输入用户名" /> </el-form-item> <el-form-item label="用户密码" prop="userName" v-show="!user.id"> <el-input v-model="user.password" placeholder="请输入用户密码" /> </el-form-item> <el-form-item label="真实姓名" prop="realName"> <el-input v-model="user.realName" placeholder="请输入真实姓名" ></el-input> </el-form-item> <el-form-item label="用户头像" prop="photoPath"> <el-input v-model="user.photoPath" placeholder="请输入头像路径" /> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="cancel">取消</el-button> <el-button type="primary" :loading="loading" @click="addOrUpdate" >确 定</el-button > </div> </el-dialog> <el-dialog title="设置角色" :visible.sync="dialogRoleVisible"> <el-form label-width="80px"> <el-form-item label="用户名"> <el-input disabled v-model="user.userName" placeholder=""></el-input> </el-form-item> <el-form-item label="角色列表"> <el-radio-group v-model="user.roleId"> <el-radio v-for="role in allRoles" :key="role.id" :label="role.id" >{{ role.name }}</el-radio > </el-radio-group> </el-form-item> </el-form> <div slot="footer"> <el-button :loading="loading" type="primary" @click="assignRole" >保存</el-button > <el-button @click="resetRoleData">取消</el-button> </div> </el-dialog> </div> </template> <script> import cloneDeep from "lodash/cloneDeep"; // 添加校验的规则 const createRules = { userName: [{ required: true, message: "用户名必须输入" }], password: [{ required: true, message: "用户密码必须输入" }], realName: [{ required: true, message: "真实姓名必须输入" }], }; // 修改校验的规则 const editRules = { userName: [{ required: true, message: "用户名必须输入" }], realName: [{ required: true, message: "真实姓名必须输入" }], }; export default { name: "user", data() { return { pageIndex: 1, //显示第几页 pageSize: 10, //每页显示条数 total: 0, //数据总条数 list: [], //返回数据 wheres: "[]", //查询条件 listLoading: false, // 是否显示列表加载的提示 loading: false, // 是否正在提交请求中 //查询条件 search: { username: "", }, dialogFormVisible: false, user: {}, //添加、修改form数据 selectedIds: [], //批量删除用户Id列表 dialogRoleVisible: false, //权限分配 allRoles: [], // 所有角色列表 }; }, mounted() { //获取数据列表方法 this.getPageList(); }, methods: { //获取数据列表 async getPageList(pager = 1) { this.pageIndex = pager; const { pageIndex, pageSize } = this; this.listLoading = true; let result = await this.$API.system.GetUserList({ pageIndex: pageIndex, pageSize: pageSize, wheres: this.wheres, sort: "id", order: "desc", }); if (result.code == 200) { this.total = result.data.total; this.list = result.data.rows; } this.listLoading = false; }, //获取权限分配菜单数据 async getRoles() { let result = await this.$API.system.GetRoleList(); if (result.code == 200) { this.allRoles = result.data.rows; } }, //搜索 searchHandler() { if (this.search.username != "") { this.wheres = '[{"name":"userName","value":"' + this.search.username + '","option":"LIKE"}]'; } this.getPageList(); }, //重置搜索条件 resetSearch() { this.search = { username: "", }; this.wheres = "[]"; this.getPageList(); }, //添加用户 showAddUser() { this.user = {}; this.dialogFormVisible = true; this.$nextTick(() => this.$refs.userForm.clearValidate()); }, //修改用户信息 editUser(row) { this.dialogFormVisible = true; this.user = cloneDeep(row); }, //删除用户 async removeUser(id) { let result = await this.$API.system.reqDeleteUser(id); if (result.code == 200) { //点击确定按钮 this.$message({ type: "success", message: "删除成功!", }); this.getPageList( this.list.length === 1 ? this.pageIndex - 1 : this.pageIndex ); } }, //取消添加、修改 cancel() { this.dialogFormVisible = false; this.user = {}; }, //保存添加、修改用户信息 async addOrUpdate() { this.$refs.userForm.validate(async (valid) => { if (valid) { try { let result = await this.$API.system.reqAddOrUpdateUser(this.user); if (result.code == 200) { //点击确定按钮 this.$message({ type: "success", message: "操作成功!", }); this.getPageList(); this.dialogFormVisible = false; } } catch (err) { console.log("程序错误:" + err); } } }); }, //当分页器某一页需要展示条数发生变化时触发 handleSizeChange(pageSize) { this.pageSize = pageSize; this.getPageList(); }, //显示角色配置面板 showAssignRole(row) { this.user = row; this.dialogRoleVisible = true; this.getRoles(); }, //批量删除用户 removeUsers() { this.$confirm("确定删除吗?", { confirmButtonText: "确定", cancelButtonText: "取消", }) .then(async () => { await this.$API.system.reqDeleteUserRange(this.selectedIds); this.$message.success("删除成功"); this.getPageList( this.list.length === 1 ? this.pageIndex - 1 : this.pageIndex ); }) .catch(() => { this.$message.info("取消删除"); }); }, //复选框选择事件 handleSelectionChange(selection) { this.selectedIds = selection.map((item) => item.id); }, //为用户分配权限 async assignRole() { const userId = this.user.id; const roleId = this.user.roleId; this.loading = true; const result = await this.$API.system.reqSetUserRole(userId, roleId); if (result.code == 200) { //点击确定按钮 this.$message({ type: "success", message: "分配角色成功!", }); this.dialogRoleVisible = false; this.getPageList(this.pageIndex); } this.loading = false; }, //重置权限分配 resetRoleData() { this.dialogRoleVisible = false; this.allRoles = []; }, }, computed: { //计算表单验证规则 fromRules() { return this.user.id ? editRules : createRules; }, }, }; </script> <style> </style>
学习交流
猜您可能还喜欢
- CERT_HAS_EXPIRED错误如何解决(2245)
- Js异步async、await关键字详细介绍(lambda表达式中使用async和await关键字)(2188)
- Vue 2.x + Element后台模板开发教程(三)后台首页模板设计(1213)
- vuex中 this.$store.dispatch() 与 this.$store.commit()方法的区别(1190)
- vuejs中如何使用axios调用后台接口(1025)
- Vue 2.x + Element后台模板开发教程(一)(1020)
- Error: Cannot find module ‘chokidar‘ 解决方法(1009)
- Vue后台开发实例教程(二)Title修改及左侧菜单修改(901)
- vue.js初探(一)vue.js全家桶介绍(825)
- vue.js初探(三)vue页面结构(820)
评论列表
发表评论
文章分类
文章归档
- 2025年3月 (1)
- 2024年6月 (2)
- 2024年5月 (2)
- 2024年4月 (4)
- 2024年3月 (30)
- 2024年1月 (4)
- 2023年12月 (2)
- 2023年11月 (4)
- 2023年10月 (4)
- 2023年9月 (6)
- 2023年3月 (2)
- 2023年2月 (1)
- 2023年1月 (1)
- 2022年12月 (1)
- 2022年9月 (21)
- 2022年8月 (10)
- 2022年7月 (3)
- 2022年4月 (1)
- 2022年3月 (13)
- 2021年8月 (1)
- 2021年3月 (1)
- 2020年12月 (42)
- 2020年11月 (7)
- 2020年10月 (5)
- 2020年8月 (1)
- 2020年6月 (1)
- 2020年3月 (2)
- 2019年12月 (8)
- 2019年11月 (3)
- 2019年9月 (1)
- 2019年4月 (1)
- 2019年3月 (6)
- 2019年2月 (1)
- 2018年7月 (7)
阅读排行
- 1.asp.net mvc内微信pc端、H5、JsApi支付方式总结(5702)
- 2.各大搜索网站网站收录提交入口地址(3201)
- 3.Windows 10休眠文件更改存储位置(3163)
- 4.ECharts仪表盘实例及参数使用详解(3095)
- 5.windows 10安装myeclipse 10破解补丁cracker.jar、run.bat闪退解决办法(2991)
- 6.HTML5 WebSocket与C#建立Socket连接实现代码(2866)
- 7.华为鸿蒙系统清除微信浏览器缓存方法(2779)
- 8.CERT_HAS_EXPIRED错误如何解决(2245)
- 9.Js异步async、await关键字详细介绍(lambda表达式中使用async和await关键字)(2188)
- 10.HBuilder编辑器格式化代码(2118)