1、最终实现效果:
文章图片
Users.vue:
首页
用户管理
用户列表
gutter="20":间隔为20
el-col->span="8":长度为8
-->
添加用户
slot="footer" class="dialog-footer">
取 消
确 定
带边框,stripe->使用带斑马纹的表格,type="index"->索引列-->
slot="footer" class="dialog-footer">
取 消
确定
>
export default {
data() {
// 验证添加用户邮箱的规则
const checkEmail = (rule, value, cb) => {
// 验证邮箱的正则表达式
const regEmail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/
if (regEmail.test(value)) {
return cb()
}
cb(new Error('请输入合法的邮箱'))
}
// 验证添加用户手机的规则
const checkMoblie = (rule, value, cb) => {
// 验证手机的正则表达式
const regMobile =
/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/
if (regMobile.test(value)) {
return cb()
}
cb(new Error('请输入合法的手机号码'))
}return {
// 获取用户列表参数
queryInfo: {
query: '',
// 当前页数
pagenum: 1,
// 当前每页显示多少条数据
pagesize: 2,
},
userList: [],
total: 0,
// 控制添加用户对话框的显示与隐藏
addDialogVisible: false,// 添加用户的表单数据
addUserForm: {
username: '',
password: '',
email: '',
mobile: '',
},// 添加用户的表单规则
addUserFormRules: {
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' },
],
mobile: [
{ required: true, message: '请输入合法的手机号码', trigger: 'blur' },
{ validator: checkMoblie, trigger: 'blur' },
],
},
// 控制修改用户对话框的显示与隐藏
editDialogVisible: false,
// 修改用户的表单数据
editUserForm: {},
// 修改表单的验证规则对象
editUserFormRules: {
email: [
{ required: true, message: '请输入合法的邮箱', trigger: 'blur' },
{ validator: checkEmail, trigger: 'blur' },
],
mobile: [
{ required: true, message: '请输入合法的手机号码', trigger: 'blur' },
{ validator: checkMoblie, trigger: 'blur' },
],
},
}
},
created() {
this.getUserList()
},
methods: {
// 获取用户列表数据
async getUserList() {
const { data: res } = await this.$http.get('users', {
params: this.queryInfo,
})
if (res.meta.status !== 200) return this.$message.error('数据获取失败')
this.userList = res.data.users
this.total = res.data.total
console.log(res)
},
// 监听pageSize改变的事件
handleSizeChange(newSize) {
console.log(newSize)
this.queryInfo.pagesize = newSize
this.getUserList()
},
// 监听page页码值改变的事件
handleCurrentChange(newPage) {
console.log(newPage)
this.queryInfo.pagenum = newPage
this.getUserList()
},
// 监听switch开头状态的改变
async userStateChange(userInfor) {
console.log(userInfor)
const { data: res } = await this.$http.put(
`users/${userInfor.id}/state/${userInfor.mg_state}`
)
if (res.meta.status !== 200) {
userInfor.mg_state = !userInfor.mg_state
return this.$message.error('更新用户失败!')
}
this.$message.success('更新用户成功!')
},
// 监听添加用户对话框的:close关闭事件,清除数据(resetFields)
addDialogClosed() {
this.$refs.addUserFormRef.resetFields()
},
// 点击按钮,添加用户,validate(预校验)
addUser() {
this.$refs.addUserFormRef.validate(async (valid) => {
if (!valid) return
// 成功后向api发出添加用户的网络请求
const { data: res } = await this.$http.post('users', this.addUserForm)
if (res.meta.status !== 201) {
this.$message.error('添加用户失败!')
}
this.$message.success('添加用户成功!')
// 隐藏添加用户的对话框
this.addDialogVisible = false
// 重新获取用户列表
this.getUserList()
})
},
// 展示编辑用户数据的对话框
async showEditDialog(id) {
const { data: res } = await this.$http.get('users/' + id)
if (res.meta.status !== 200) return this.$message.error('查询失败!')
this.editDialogVisible = true
this.editUserForm = res.data
},
// 监听修改用户对话框关闭事件,resetFields重置数据
editDialogClosed() {
this.$refs.editUserFormRef.resetFields()
},
// 修改用户信息并发出请求
editUserInfo() {
this.$refs.editUserFormRef.validate(async (valid) => {
if (!valid) return
// 发出修改用户信息的数据请求
const { data: res } = await this.$http.put(
'users/' + this.editUserForm.id,
{ email: this.editUserForm.email, mobile: this.editUserForm.mobile }
)
if (res.meta.status !== 200) {
return this.$message.error('更新用户信息失败!')
}
// 关闭修改信息对话框
this.editDialogVisible = false
// 刷新数据列表
this.getUserList()
// 提示修改成功
this.$message.success('更新用户信息成功!')
})
},
// 根据Id删除用户
async removeUserById(id) {
const confirmRes = await this.$confirm(
'此操作将永久删除该用户, 是否继续?',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).catch((err) => err)
// 如果用户确认删除,返回confirm
// 如果用户取消删除,返回cancel
if (confirmRes !== 'confirm') {
return this.$message.info('已取消删除')
}
const { data: res } = await this.$http.delete('users/' + id)
if (res.meta.status !== 200) {
return this.$message.error('删除用户失败!')
}
this.$message.success('删除用户成功!')
this.getUserList()
},
},
}
lang="less" scoped>
2、首先我们把基本的页面先设置好 【前端VUE|Vue用户管理(增删改查)功能详情】
文章图片
user.vue:
首页
用户管理
用户列表
>
export default {
data() {
return {}
},
created() {},
methods: {},
}
lang="less" scoped>
3、第一步:通过API接口,查询数据信息,把数据渲染到HTML中
文章图片
user.vue:
首页
用户管理
用户列表
>
export default {
data() {
return {
// 定义获取用户列表参数(queryInfo),query:查询,pagenum:当前页数,pagesize:当前每页显示多少条数据
queryInfo: {
query: '',
pagenum: 1,
pagesize: 2,
},
// 获取用户列表数据,存放到userList中,查询条数放到total中
userList: [],
total: 0,
}
},
created() {
this.getUserList()
},
methods: {
// 获取用户列表数据(getUserList)
async getUserList() {
const { data: res } = await this.$http.get('users', {
params: this.queryInfo,
})
if (res.meta.status !== 200) return this.$message.error('数据获取失败')
this.userList = res.data.users
this.total = res.data.total
console.log(res)
},
},
}
lang="less" scoped>
文章图片
4、第二步:把状态(Boolean)做成开头效果
文章图片
首页
用户管理
用户列表
>
export default {
data() {
return {
// 定义获取用户列表参数(queryInfo),query:查询,pagenum:当前页数,pagesize:当前每页显示多少条数据
queryInfo: {
query: '',
pagenum: 1,
pagesize: 2,
},
// 获取用户列表数据,存放到userList中,查询条数放到total中
userList: [],
total: 0,
}
},
created() {
this.getUserList()
},
methods: {
// 获取用户列表数据(getUserList)
async getUserList() {
const { data: res } = await this.$http.get('users', {
params: this.queryInfo,
})
if (res.meta.status !== 200) return this.$message.error('数据获取失败')
this.userList = res.data.users
this.total = res.data.total
console.log(res)
},
},
}
lang="less" scoped>
文章图片
5、第四步:在操作中添加(修改、删除、设置)按钮
文章图片
6、第五步:添加用户列表搜索查询功能
文章图片
首页
用户管理
用户列表
gutter="20":间隔为20,el-col->span="8":长度为8------------>
添加用户
>
export default {
data() {
return {
// 定义获取用户列表参数(queryInfo),query:查询,pagenum:当前页数,pagesize:当前每页显示多少条数据
queryInfo: {
query: '',
pagenum: 1,
pagesize: 2,
},
// 获取用户列表数据,存放到userList中,查询条数放到total中
userList: [],
total: 0,
}
},
created() {
this.getUserList()
},
methods: {
// 获取用户列表数据(getUserList)
async getUserList() {
const { data: res } = await this.$http.get('users', {
params: this.queryInfo,
})
if (res.meta.status !== 200) return this.$message.error('数据获取失败')
this.userList = res.data.users
this.total = res.data.total
console.log(res)
},
},
}
lang="less" scoped>
文章图片
7、第六步:添加(增加用户对话框)
文章图片
首页
用户管理
用户列表
gutter="20":间隔为20,el-col->span="8":长度为8------------>
添加用户
slot="footer" class="dialog-footer">
取 消
确 定
>
export default {
data() {
return {
// 定义获取用户列表参数(queryInfo),query:查询,pagenum:当前页数,pagesize:当前每页显示多少条数据
queryInfo: {
query: '',
pagenum: 1,
pagesize: 2,
},
// 获取用户列表数据,存放到userList中,查询条数放到total中
userList: [],
total: 0,
// 控制添加用户对话框的显示与隐藏
addDialogVisible: false,
}
},
created() {
this.getUserList()
},
methods: {
// 获取用户列表数据(getUserList)
async getUserList() {
const { data: res } = await this.$http.get('users', {
params: this.queryInfo,
})
if (res.meta.status !== 200) return this.$message.error('数据获取失败')
this.userList = res.data.users
this.total = res.data.total
console.log(res)
},
// 监听添加用户对话框的:close关闭事件,清除数据(resetFields)
addDialogClosed() {
this.$refs.addUserFormRef.resetFields()
},
},
}
lang="less" scoped>
8、第7步:添加分页功能
文章图片
文章图片
首页
用户管理
用户列表
gutter="20":间隔为20,el-col->span="8":长度为8------------>
添加用户
slot="footer" class="dialog-footer">
取 消
确 定
>
export default {
data() {
return {
// 定义获取用户列表参数(queryInfo),query:查询,pagenum:当前页数,pagesize:当前每页显示多少条数据
queryInfo: {
query: '',
pagenum: 1,
pagesize: 1,
},
// 获取用户列表数据,存放到userList中,查询条数放到total中
userList: [],
total: 0,
// 控制添加用户对话框的显示与隐藏
addDialogVisible: false,
}
},
created() {
this.getUserList()
},
methods: {
// 获取用户列表数据(getUserList)
async getUserList() {
const { data: res } = await this.$http.get('users', {
params: this.queryInfo,
})
if (res.meta.status !== 200) return this.$message.error('数据获取失败')
this.userList = res.data.users
this.total = res.data.total
console.log(res)
},
// 监听pageSize改变的事件
handleSizeChange(newSize) {
console.log(newSize)
this.queryInfo.pagesize = newSize
this.getUserList()
},
// 监听page页码值改变的事件
handleCurrentChange(newPage) {
console.log(newPage)
this.queryInfo.pagenum = newPage
this.getUserList()
},
},
}
lang="less" scoped>
9、第八步:修改用户状态
文章图片
首页
用户管理
用户列表
gutter="20":间隔为20,el-col->span="8":长度为8------------>
添加用户
slot="footer" class="dialog-footer">
取 消
确 定
>
export default {
data() {
return {
// 定义获取用户列表参数(queryInfo),query:查询,pagenum:当前页数,pagesize:当前每页显示多少条数据
queryInfo: {
query: '',
pagenum: 1,
pagesize: 1,
},
// 获取用户列表数据,存放到userList中,查询条数放到total中
userList: [],
total: 0,
// 控制添加用户对话框的显示与隐藏
addDialogVisible: false,
}
},
created() {
this.getUserList()
},
methods: {
// 获取用户列表数据(getUserList)
async getUserList() {
const { data: res } = await this.$http.get('users', {
params: this.queryInfo,
})
if (res.meta.status !== 200) return this.$message.error('数据获取失败')
this.userList = res.data.users
this.total = res.data.total
console.log(res)
},
// 监听pageSize改变的事件
handleSizeChange(newSize) {
console.log(newSize)
this.queryInfo.pagesize = newSize
this.getUserList()
},
// 监听page页码值改变的事件
handleCurrentChange(newPage) {
console.log(newPage)
this.queryInfo.pagenum = newPage
this.getUserList()
},
// 监听switch开头状态的改变
async userStateChange(userInfor) {
console.log(userInfor)
const { data: res } = await this.$http.put(
`users/${userInfor.id}/state/${userInfor.mg_state}`
)
if (res.meta.status !== 200) {
userInfor.mg_state = !userInfor.mg_state
return this.$message.error('更新用户失败!')
}
this.$message.success('更新用户成功!')
},
},
}
lang="less" scoped>
10、第九步:添加用户对话框实现校验规则(跟登陆校验差不多)
文章图片
首页
用户管理
用户列表
gutter="20":间隔为20,el-col->span="8":长度为8------------>
添加用户
slot="footer" class="dialog-footer">
取 消
确 定
>
export default {
data() {
// 验证添加用户邮箱的规则
const checkEmail = (rule, value, cb) => {
// 验证邮箱的正则表达式
const regEmail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/
if (regEmail.test(value)) {
return cb()
}
cb(new Error('请输入合法的邮箱'))
}
// 验证添加用户手机的规则
const checkMoblie = (rule, value, cb) => {
// 验证手机的正则表达式
const regMobile =
/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/
if (regMobile.test(value)) {
return cb()
}
cb(new Error('请输入合法的手机号码'))
}
return {
// 定义获取用户列表参数(queryInfo),query:查询,pagenum:当前页数,pagesize:当前每页显示多少条数据
queryInfo: {
query: '',
pagenum: 1,
pagesize: 1,
},
// 获取用户列表数据,存放到userList中,查询条数放到total中
userList: [],
total: 0,
// 控制添加用户对话框的显示与隐藏
addDialogVisible: false,
// 添加用户的表单数据
addUserForm: {
username: '',
password: '',
email: '',
mobile: '',
},// 添加用户的表单规则
addUserFormRules: {
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' },
],
mobile: [
{ required: true, message: '请输入合法的手机号码', trigger: 'blur' },
{ validator: checkMoblie, trigger: 'blur' },
],
},
}
},
created() {
this.getUserList()
},
methods: {
// 获取用户列表数据(getUserList)
async getUserList() {
const { data: res } = await this.$http.get('users', {
params: this.queryInfo,
})
if (res.meta.status !== 200) return this.$message.error('数据获取失败')
this.userList = res.data.users
this.total = res.data.total
console.log(res)
},
// 监听pageSize改变的事件
handleSizeChange(newSize) {
console.log(newSize)
this.queryInfo.pagesize = newSize
this.getUserList()
},
// 监听page页码值改变的事件
handleCurrentChange(newPage) {
console.log(newPage)
this.queryInfo.pagenum = newPage
this.getUserList()
},
// 监听switch开头状态的改变
async userStateChange(userInfor) {
console.log(userInfor)
const { data: res } = await this.$http.put(
`users/${userInfor.id}/state/${userInfor.mg_state}`
)
if (res.meta.status !== 200) {
userInfor.mg_state = !userInfor.mg_state
return this.$message.error('更新用户失败!')
}
this.$message.success('更新用户成功!')
},
// 监听添加用户对话框的:close关闭事件,清除数据(resetFields)
addDialogClosed() {
this.$refs.addUserFormRef.resetFields()
},
},
}
lang="less" scoped>
11、第十步:用户添加功能(终于到添加用户了,真是好多功能要考虑,/(ㄒoㄒ)/~~)
推荐阅读
- 密码学|触碰密码世界的大门
- 面试|初到深圳面试分享(下)
- JavaSE|Day3.变量、常量、运算符、package及JavaDoc
- js 30分钟倒计时
- 工作记录|formJson说明
- 前端相关|【前端兼容性】常见的浏览器兼容问题及解决方案
- 程序员|ios微信抓https包提示证书安全警告解决办法
- javascript|微信H5页面前端开发,大多数人都会遇到的几个兼容性坑
- Linux操作系统|服务器如何部署并启动前后端分离(springboot+vue)的web项目