(二)用户管理模块
1. 用户列表
1.1 通过路由的形式展示用户列表组件
- 新建用户列表组件 components/user/Users.vue
- 在router.js中导入子级路由组件Users.vue,并设置路由规则
import Users from '../components/user/Users.vue'
const routes = [
{
path: '/home',
component: Home,
redirect: '/welcome',
children: [{ path: '/welcome', component: Welcome },
{ path: '/users', component: Users }]
}
]
1.2 在sessionStorage中保存左侧菜单的激活状态
- 当点击二级菜单的时候,被点击的二级子菜单并没有高亮,我们需要正在被使用的功能高亮显示,我们可以通过设置el-menu的default-active属性来设置当前激活菜单的index
<el-menu :default-active="activePath">
复制代码
- 但是default-active属性也不能写死,固定为某个菜单值
所以我们可以先给所有的二级菜单添加点击事件,并将path值作为方法的参数
<!-- 二级菜单 -->
<el-menu-item @click="saveNavState('/'+subItem.path)">
复制代码
- 在saveNavState方法中将path保存到sessionStorage中
- 然后在数据中添加一个activePath绑定数据,并将el-menu的default-active属性设置为activePath
- 最后在created中将sessionStorage中的数据赋值给activePath
data() {
return {
// 被激活的链接地址
activePath: ''
}
},
created() {
this.activePath = window.sessionStorage.getItem('activePath')
},
methods: {
// 保存链接的激活状态
saveNavState(activePath) {
window.sessionStorage.setItem('activePath', activePath)
this.activePath = activePath
}
}
1.3绘制用户列表组件的基础布局
- 使用element-ui面包屑组件完成顶部导航路径
<!-- 面包屑导航区域 -->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>用户管理</el-breadcrumb-item>
<el-breadcrumb-item>用户列表</el-breadcrumb-item>
</el-breadcrumb>
- 使用element-ui卡片组件完成主体表格,再使用element-ui输入框完成搜索框及搜索按钮,此时我们需要使用栅格布局来划分结构(复制卡片组件代码,在element.js中导入组件Row,Col),然后再使用el-button制作添加用户按钮
<!-- 卡片视图区域 -->
<el-card>
<!-- 搜索与添加区域 -->
<el-row :gutter="20">
<el-col :span="8">
<el-input placeholder="请输入搜索的内容" >
<el-button slot="append" icon="el-icon-search"></el-button>
</el-input>
</el-col>
<el-col :span="4">
<el-button type="primary">添加用户</el-button>
</el-col>
</el-row>
</el-card>
- 在global.css中添加样式
.el-breadcrumb {
font-size: 12px;
margin-bottom: 15px;
}
.el-card {
box-shadow: 0 1px 1px rgba(0,0,0,0.15)!important;
}
1.4 获取用户列表数据
data() {
return {
// 获取用户列表的参数对象
queryInfo: {
query: '',
// 当前页数
pagenum: 1,
// 当前每页显示多少条数据
pagesize: 2
},
userList: [],
total: 0,
}
},
created() {
this.getUserList()
},
methods: {
async getUserList() {
const { data: result } = await this.$http.get('users', {
params: this.queryInfo
})
if (result.meta.status !== 200) return this.$message.error('获取用户列表失败!')
this.userList = result.data.users
this.total = result.data.total
console.log(result)
},
1.5 使用el-table组件渲染基本的用户列表
响应数据
{
"data": {
"totalpage": 5,
"pagenum": 4,
"users": [
{
"id": 25,
"username": "tige117",
"mobile": "18616358651",
"type": 1,
"email": "tige112@163.com",
"create_time": "2017-11-09T20:36:26.000Z",
"mg_state": true, // 当前用户的状态
"role_name": "炒鸡管理员"
}
]
},
"meta": {
"msg": "获取成功",
"status": 200
}
}
复制代码
- 使用表格来展示用户列表数据,使用element-ui表格组件完成列表展示数据
<!-- 用户列表区域 -->
<el-table :data="userList" border stripe>
<el-table-column type="index"> </el-table-column>
<el-table-column prop="username" label="姓名"> </el-table-column>
<el-table-column prop="email" label="邮箱"> </el-table-column>
<el-table-column prop="mobile" label="电话"></el-table-column>
<el-table-column prop="role_name" label="角色"> </el-table-column>
<el-table-column label="状态">
</el-table>
全局样式添加
.el-table {
margin-top: 15px;
font-size: 12px;
}
1.6 自定义状态列的显示效果
- 在渲染展示状态时,会使用作用域插槽获取每一行的数据 (scope.row就是行内的数据)
- 使用switch开关组件展示状态信息
<el-table-column label="状态">
<!-- 作用域插槽 会覆盖prop -->
<template slot-scope="scope">
<el-switch v-model="scope.row.mg_state">
</el-switch>
</template>
</el-table-column>
1.7 通过作用域插槽渲染操作列
<el-table-column label="操作">
<template slot-scope="scope">
{{scope.row.id}}
<!-- 修改按钮 -->
<el-button type="primary" icon="el-icon-edit" size="mini" circle></el-button>
<!-- 删除按钮 -->
<el-button type="danger" icon="el-icon-delete" size="mini" circle></el-button>
<!-- 分配角色按钮 添加消息提示 -->
<el-tooltip effect="dark" content="分配角色" placement="top" :enterable="false">
<el-button type="warning" icon="el-icon-setting" size="mini" circle></el-button>
</el-tooltip>
</template>
</el-table-column>
1.8 实现分页效果
- 使用表格来展示用户列表数据,可以使用分页组件完成列表分页展示数据
- 更改组件中的绑定数据
- @size-change (pagesize改变时触发)
- @current-change (页码发生改变时触发)
- :current-page (设置当前页码)
- :page-size (设置每页的数据条数)
- :total (设置总页数)
<!-- 分页区域 -->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="queryInfo.pagenum"
:page-sizes="[1, 2, 5, 10]"
:page-size="queryInfo.pagesize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
复制代码
- 添加两个事件的事件处理函数 @size-change,@current-change
// 监听 pagesize 改变的事件
handleSizeChange(newSize) {
// console.log(newSize)
this.queryInfo.pagesize = newSize
this.getUserList()
},
// 监听页码值改变的事件
handleCurrentChange(newPage) {
// console.log(newPage)
this.queryInfo.pagenum = newPage
this.getUserList()
},
1.9 修改用户状态
当用户点击列表中的switch组件时,用户的状态应该跟随发生改变
- 首先监听用户点击switch组件的事件,并将作用域插槽的数据当做事件参数进行传递
<el-switch v-model="scope.row.mg_state" @change="userStateChanged(scope.row)"></el-switch>
复制代码
- 在事件中发送请求完成状态的更改(查看API)
// 监听switch开关状态的改变
async userStateChange(userinfo) {
console.log(userinfo.mg_state)
// 发送请求进行状态修改
const { data: result } = await this.$http.put(`users/${userinfo.id}/state/${userinfo.mg_state}`)
if (result.meta.status !== 200) {
userinfo.mg_state = !userinfo.mg_state
return this.$message.error('更新用户状态失败')
}
this.$message.success('更新用户状态成功')
}
1.10 实现搜索功能
- 添加数据绑定,添加搜索按钮的点击事件(当用户点击搜索按钮的时候,调用getUserList方法根据文本框内容重新请求用户列表数据)
- 当我们在输入框中输入内容并点击搜索之后,会按照搜索关键字搜索,我们希望能够提供一个X删除搜索关键字并重新获取所有的用户列表数据,只需要给文本框添加clearable属性并添加clear事件,在clear事件中重新请求数据即可
<el-input placeholder="请输入搜索的内容" v-model="queryInfo.query" clearable @clear="getUserList">
<el-button slot="append" icon="el-icon-search" @click="getUserList"></el-
2. 添加用户
2.1 渲染添加用户对话框
- 当我们点击添加用户按钮的时候,弹出一个对话框(Dialog组件)来实现添加用户的功能
<!-- 添加用户的对话框 -->
<el-dialog
title="添加用户"
:visible.sync="addDialogVisible"
width="50%">
<!-- 内容主体区域 -->
<!-- 底部区域 -->
<span slot="footer" class="dialog-footer">
<el-button @click="addDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="addDialogVisible = false">确 定</el-button>
</span>
</el-dialog>
2. 添加用户
2.1 渲染添加用户对话框
- 当我们点击添加用户按钮的时候,弹出一个对话框(Dialog组件)来实现添加用户的功能
<!-- 添加用户的对话框 -->
<el-dialog
title="添加用户"
:visible.sync="addDialogVisible"
width="50%">
<!-- 内容主体区域 -->
<!-- 底部区域 -->
<span slot="footer" class="dialog-footer">
<el-button @click="addDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="addDialogVisible = false">确 定</el-button>
</span>
</el-dialog>
复制代码
data() {
return {
// 控制对话框显示与隐藏
addDialogVisible: false
}
}
复制代码
- 接下来我们要为“添加用户”按钮添加点击事件,在事件中将addDialogVisible设置为true,即显示对话框
<el-button type="primary" @click="addDialogVisible=true">添加用户</el-button>
复制代码
2.2 渲染添加用户的表单
- 更改Dialog组件中的内容
<!-- 内容主体区域 -->
<el-form :model="addForm" :rules="addFormRules" ref="addFormRef" label-width="70px">
<el-form-item label="用户名" prop="username">
<el-input v-model="addForm.username"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="addForm.password"></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="addForm.email"></el-input>
</el-form-item>
<el-form-item label="手机号 " prop="mobile">
<el-input v-model="addForm.mobile"></el-input>
</el-form-item>
</el-form>
复制代码
- 添加数据绑定和校验规则
data() {
return {
// 添加用户的表单数据
addForm: {
username: '',
password: '',
email: '',
mobile: ''
},
// 添加表单的验证规则对象
addFormRules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 3, max: 10, message: '用户名的长度在3-10个字符之间', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, max: 15, message: '密码的长度在6-15个字符之间', trigger: 'blur' }
],
email: [
{ required: true, message: '请输入邮箱', trigger: 'blur' },
{ min: 6, max: 15, message: '密码的长度在6-15个字符之间', trigger: 'blur' }
],
mobile: [
{ required: true, message: '请输入手机号', trigger: 'blur' }
]
}
}
}
复制代码
2.3 自定义邮箱和手机号校验规则
export default {
data() {
// 验证邮箱的规则
// var checkEmail = (rule, value, callback) => {
// // 验证邮箱的正则表达式
// const regEmail = /^([a-zA-Z0-9_-])+@(a-zA-Z0-9_-])+(\.a-zA-Z0-9_-)+/
// if (regEmail.test(value)) {
// // 合法的邮箱
// return callback()
// }
// callback(new Error('请输入合法的邮箱'))
// }
// 验证手机号的规则
var checkMoblie = (rule, value, callback) => {
// 验证手机号的正则表达式
const regMoblie = /^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/
if (regMoblie.test(value)) {
return callback()
}
callback(new Error('请输入合法的手机号'))
}
return {
// 添加表单的验证规则对象
addFormRules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 3, max: 10, message: '用户名的长度在3-10个字符之间', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, max: 15, message: '密码的长度在6-15个字符之间', trigger: 'blur' }
],
email: [
{ required: true, message: '请输入邮箱', trigger: 'blur' },
// { validator: checkEmail, trigger: 'blur' },
{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
],
mobile: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{ validator: checkMoblie, trigger: 'blur' }
]
}
}
}
}
复制代码
2.4 添加表单的重置操作
当关闭对话框时,重置表单 给el-dialog添加@close事件,在事件中添加重置表单的代码
<!-- 添加用户的对话框 -->
<el-dialog @close="addDialogClosed">
复制代码
// 监听添加用户对话框的关闭事件
addDialogClosed() {
this.$refs.addFormRef.resetFields()
}
复制代码
2.5 添加用户前的表单预校验 调用API完成添加用户
- 点击对话框中的确定按钮,发送请求完成添加用户的操作
- 首先给确定按钮添加点击事件,在点击事件中完成业务逻辑代码
<el-button type="primary" @click="addUser">确 定</el-button>
复制代码
// 点击按钮,添加新用户
addUser() {
this.$refs.addFormRef.validate(async valid => {
// console.log(valid)
if (!valid) return
// 发起添加用户的网路请求
const { data: result } = await this.$http.post('users', this.addForm)
if (result.meta.status !== 201) {
this.$message.error('添加用户失败!')
}
this.$message.success('添加用户成功!')
// 隐藏添加用户的对话框
this.addDialogVisible = false
// 重新获取列表数据
this.getUserList()
})
}
3. 修改用户
3.1 展示修改用户的对话框
<!-- 修改按钮 -->
<el-button type="primary" icon="el-icon-edit" size="mini" circle @click="showEditDialog()"></el-button>
复制代码
<!-- 修改用户的对话框 -->
<el-dialog
title="修改用户"
:visible.sync="editDialogVisible"
width="50%">
<!-- 内容主体区域 -->
<!-- 底部区域 -->
<span slot="footer" class="dialog-footer">
<el-button @click="editDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="editDialogVisible = false">确 定</el-button>
</span>
</el-dialog>
复制代码
data() {
return {
// 控制修改用户对话框的显示与隐藏
editDialogVisible: false
}
methods: {
// 展示编辑用户的对话框
showEditDialog(){
this.editDialogVisible = true
}
}
复制代码
3.2 根据id查询对应的用户信息
<!-- 修改按钮 -->
<el-button type="primary" icon="el-icon-edit" size="mini" circle @click="showEditDialog(scope.row.id)"></el-button>
复制代码
data() {
return {
// 查询到的用户的信息对象
editForm: {}
}
methods: {
// 展示编辑用户的对话框
async showEditDialog(id){
this.editDialogVisible = true
const {data: result} = await this.$http.get('users/' + id)
if(result.meta.status !== 200) {
return this.$message('查询用户信息失败!')
}
this.editForm = result.data
}
}
复制代码
3.3 渲染修改用户的表单
<!-- 内容主体区域 -->
<el-form :model="editForm" :rules="addFormRules" ref="editFormRef" label-width="70px">
<el-form-item label="用户名">
<el-input v-model="editForm.username" disabled></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="editForm.email"></el-input>
</el-form-item>
<el-form-item label="手机号 " prop="mobile">
<el-input v-model="editForm.mobile"></el-input>
</el-form-item>
</el-form>
复制代码
3.4 修改用户表单的重置操作
<!-- 修改用户的对话框 -->
<el-dialog title="修改用户" :visible.sync="editDialogVisible" width="50%" @close="editDialogClosed">
复制代码
// 监听修改用户对话框的关闭事件
editDialogClosed() {
this.$refs.editFormRef.resetFields()
}
复制代码
3.5 提交表单预验证及完成用户信息的修改
<el-button type="primary" @click="editUserInfo">确 定</el-button>
复制代码
// 修改用户信息,并提交
editUserInfo() {
this.$refs.editFormRef.validate(async valid => {
// console.log(valid)
if (!valid) return
// 发起修改用户信息的数据请求
const { data: result } = await this.$http.put('users/' + this.editForm.id, { email: this.editForm.email, mobile: this.editForm.mobile })
if (result.meta.status !== 200) return this.$message.error('更新用户失败')
// 关闭对话框
this.editDialogVisible = false
// 重新获取用户列表
this.getUserList()
// 提示修改成功
this.$message.success('更新用户信息成功')
})
}
4. 删除用户
4.1 弹框询问用户是否确认删除
在点击删除按钮的时候,我们应该跳出提示信息框,让用户确认要进行删除操作。如果想要使用确认取消提示框,我们需要先将提示信息框挂载到vue中。
- 导入MessageBox组件,并将MessageBox组件挂载到实例。
import { MessageBox } from 'element-ui'
Vue.prototype.$confirm = MessageBox.confirm
复制代码
- 给用户列表中的删除按钮添加事件,并在事件处理函数中弹出确定取消窗,最后再根据id发送删除用户的请求
<!-- 删除按钮 -->
<el-button @click="removeUserById(scope.row.id)"></el-button>
复制代码
// 根据id删除对应的用户信息
async removeUserById(id) {
// 弹框提示用户是否删除数据
const confirmResult = await this.$confirm('此操作将永久删除该用户,是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).catch(error => error)
// console.log(confirmResult) // 确定:'confirm' 取消:报错:cancel catch之后就是'canel'
if (confirmResult !== 'confirm') {
return this.$message.info('已经取消删除')
}
console.log('确认了删除')
}
4.2 调用API完成删除用户操作
// console.log('确认了删除')
const { data: result } = await this.$http.delete('users/' + id)
if (result.meta.status !== 200) {
return this.$message.error('删除用户失败')
}
this.$message.success('删除用户成功')
this.getUserList()
5. Users.vue完整代码
<template>
<div>
<!-- 面包屑导航区域 -->
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>用户管理</el-breadcrumb-item>
<el-breadcrumb-item>用户列表</el-breadcrumb-item>
</el-breadcrumb>
<!-- 卡片视图 -->
<el-card>
<!-- 搜索与添加区域 -->
<el-row :gutter="20">
<el-col :span="8">
<el-input placeholder="请输入搜索的内容" v-model="queryInfo.query" clearable @clear="getUserList">
<el-button slot="append" icon="el-icon-search" @click="getUserList"></el-button>
</el-input>
</el-col>
<el-col :span="4">
<el-button type="primary" @click="addDialogVisible=true">添加用户</el-button>
</el-col>
</el-row>
<!-- 用户列表区域 -->
<el-table :data="userList" style="width: 100%" border stripe>
<el-table-column type="index"> </el-table-column>
<el-table-column prop="username" label="姓名"> </el-table-column>
<el-table-column prop="email" label="邮箱"> </el-table-column>
<el-table-column prop="mobile" label="电话"></el-table-column>
<el-table-column prop="role_name" label="角色"> </el-table-column>
<el-table-column label="状态">
<!-- 作用域插槽 会覆盖prop -->
<template slot-scope="scope">
<el-switch
v-model="scope.row.mg_state"
@change="userStateChange(scope.row)">
</el-switch>
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<!-- 修改按钮 -->
<el-button type="primary" icon="el-icon-edit" size="mini" circle @click="showEditDialog(scope.row.id)"></el-button>
<!-- 删除按钮 -->
<el-button type="danger" icon="el-icon-delete" size="mini" circle @click="removeUserById(scope.row.id)"></el-button>
<!-- 分配角色按钮 添加消息提示 -->
<el-tooltip effect="dark" content="分配角色" placement="top" :enterable="false">
<el-button type="warning" icon="el-icon-setting" size="mini" circle></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<!-- 分页区域 -->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="queryInfo.pagenum"
:page-sizes="[1, 2, 5, 10]"
:page-size="queryInfo.pagesize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</el-card>
<!-- 添加用户的对话框 -->
<el-dialog
title="添加用户"
:visible.sync="addDialogVisible"
width="50%"
@close="addDialogClosed">
<!-- 内容主体区域 -->
<el-form :model="addForm" :rules="addFormRules" ref="addFormRef" label-width="70px">
<el-form-item label="用户名" prop="username">
<el-input v-model="addForm.username"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="addForm.password"></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="addForm.email"></el-input>
</el-form-item>
<el-form-item label="手机号 " prop="mobile">
<el-input v-model="addForm.mobile"></el-input>
</el-form-item>
</el-form>
<!-- 底部区域 -->
<span slot="footer" class="dialog-footer">
<el-button @click="addDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="addUser">确 定</el-button>
</span>
</el-dialog>
<!-- 修改用户的对话框 -->
<el-dialog
title="修改用户"
:visible.sync="editDialogVisible"
width="50%" @close="editDialogClosed">
<!-- 内容主体区域 -->
<el-form :model="editForm" :rules="addFormRules" ref="editFormRef" label-width="70px">
<el-form-item label="用户名">
<el-input v-model="editForm.username" disabled></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="editForm.email"></el-input>
</el-form-item>
<el-form-item label="手机号 " prop="mobile">
<el-input v-model="editForm.mobile"></el-input>
</el-form-item>
</el-form>
<!-- 底部区域 -->
<span slot="footer" class="dialog-footer">
<el-button @click="editDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="editUserInfo">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
// 验证邮箱的规则
// var checkEmail = (rule, value, callback) => {
// // 验证邮箱的正则表达式
// const regEmail = /^([a-zA-Z0-9_-])+@(a-zA-Z0-9_-])+(\.a-zA-Z0-9_-)+/
// if (regEmail.test(value)) {
// // 合法的邮箱
// return callback()
// }
// callback(new Error('请输入合法的邮箱'))
// }
// 验证手机号的规则
var checkMoblie = (rule, value, callback) => {
// 验证手机号的正则表达式
const regMoblie = /^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/
if (regMoblie.test(value)) {
return callback()
}
callback(new Error('请输入合法的手机号'))
}
return {
// 获取用户列表的参数对象
queryInfo: {
query: '',
// 当前页数
pagenum: 1,
// 当前每页显示多少条数据
pagesize: 2
},
userList: [],
total: 0,
// 控制对话框显示与隐藏
addDialogVisible: false,
// 添加用户的表单数据
addForm: {
username: '',
password: '',
email: '',
mobile: ''
},
// 添加表单的验证规则对象
addFormRules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 3, max: 10, message: '用户名的长度在3-10个字符之间', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, max: 15, message: '密码的长度在6-15个字符之间', trigger: 'blur' }
],
email: [
{ required: true, message: '请输入邮箱', trigger: 'blur' },
// { validator: checkEmail, trigger: 'blur' },
{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
],
mobile: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{ validator: checkMoblie, trigger: 'blur' }
// { type: 'mobliephone', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
]
},
// 控制修改用户对话框的显示与隐藏
editDialogVisible: false,
// 查询到的用户的信息对象
editForm: {}
// 修改表单的验证规则对象
// editFormRules
}
},
created() {
this.getUserList()
},
methods: {
async getUserList() {
const { data: result } = await this.$http.get('users', {
params: this.queryInfo
})
if (result.meta.status !== 200) return this.$message.error('获取用户列表失败!')
this.userList = result.data.users
this.total = result.data.total
console.log(result)
},
// 监听 pagesize 改变的事件
handleSizeChange(newSize) {
// console.log(newSize)
this.queryInfo.pagesize = newSize
this.getUserList()
},
// 监听页码值改变的事件
handleCurrentChange(newPage) {
// console.log(newPage)
this.queryInfo.pagenum = newPage
this.getUserList()
},
// 监听switch开关状态的改变
async userStateChange(userinfo) {
console.log(userinfo.mg_state)
// 发送请求进行状态修改
const { data: result } = await this.$http.put(`users/${userinfo.id}/state/${userinfo.mg_state}`)
if (result.meta.status !== 200) {
userinfo.mg_state = !userinfo.mg_state
return this.$message.error('更新用户状态失败')
}
this.$message.success('更新用户状态成功')
},
// 监听添加用户对话框的关闭事件
addDialogClosed() {
this.$refs.addFormRef.resetFields()
},
// 点击按钮,添加新用户
addUser() {
this.$refs.addFormRef.validate(async valid => {
// console.log(valid)
if (!valid) return
// 发起添加用户的网路请求
const { data: result } = await this.$http.post('users', this.addForm)
if (result.meta.status !== 201) {
this.$message.error('添加用户失败!')
}
this.$message.success('添加用户成功!')
// 隐藏添加用户的对话框
this.addDialogVisible = false
// 重新获取列表数据
this.getUserList()
})
},
// 展示编辑用户的对话框
async showEditDialog(id) {
this.editDialogVisible = true
const { data: result } = await this.$http.get('users/' + id)
if (result.meta.status !== 200) {
return this.$message('查询用户信息失败!')
}
this.editForm = result.data
},
// 监听修改用户对话框的关闭事件
editDialogClosed() {
this.$refs.editFormRef.resetFields()
},
// 修改用户信息,并提交
editUserInfo() {
this.$refs.editFormRef.validate(async valid => {
// console.log(valid)
if (!valid) return
// 发起修改用户信息的数据请求
const { data: result } = await this.$http.put('users/' + this.editForm.id, { email: this.editForm.email, mobile: this.editForm.mobile })
if (result.meta.status !== 200) return this.$message.error('更新用户失败')
// 关闭对话框
this.editDialogVisible = false
// 重新获取用户列表
this.getUserList()
// 提示修改成功
this.$message.success('更新用户信息成功')
})
},
// 根据id删除对应的用户信息
async removeUserById(id) {
// 弹框提示用户是否删除数据
const confirmResult = await this.$confirm('此操作将永久删除该用户,是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).catch(error => error)
// console.log(confirmResult) // 确定:'confirm' 取消:报错:cancel catch之后就是'canel'
if (confirmResult !== 'confirm') {
return this.$message.info('已经取消删除')
}
// console.log('确认了删除')
const { data: result } = await this.$http.delete('users/' + id)
if (result.meta.status !== 200) {
return this.$message.error('删除用户失败')
}
this.$message.success('删除用户成功')
this.getUserList()
}
}
}
</script>
<style scoped>
</style>
最后提交上gitee。
阅读剩余
版权声明:
作者:chun
链接:https://chun53.top/1141.html
文章版权归作者所有,未经允许请勿转载。
THE END