Vue3+Element-Plus 实现表单中用户状态修改同步到数据库的功能 三四
1. 把表单用户状态的修改同步到数据库中保存2. 实现步骤2.1 首先,监听el-switch 开关状态的改变,从而获取到最新的状态2.1.1 如何监听 el-switch 开关状态的改变通过 Events (事件)进行监听,当 switch 状态发生变化时,会调用 change 事件,在 chagne 回调函数中,会返回 switch 开关最新的状态值Switch 开关 | Element Pl
·
1. 把表单用户状态的修改同步到数据库中保存
2. 实现步骤
2.1 首先,监听 el-switch 开关状态的改变,从而获取到最新的状态
2.1.1 如何监听 el-switch 开关状态的改变
- 通过 Events (事件)进行监听,当 switch 状态发生变化时,会调用 change 事件,在 chagne 回调函数中,会返回 switch 开关最新的状态值
2.1.2 如何使用 el-switch 开关
- 首先给 switch 绑定 change 事件处理函数,并把用户信息传入该事件处理函数中
说明:switch 通过 v-model 指令双向绑定到当前行数据 mg_state 属性身上,所以只要switch 状态发改生改变时, mg_state 也会跟着发生改变。所以在这里直接把 当前行(用户)的数据传入事件处理函数中
参考: 使用 v-slot 作用域来渲染 switch 开关,参考该文章中 2.3.5 列表中状态改造
Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一_码侬人生-CSDN博客
- 接着实现该事件处理函数
2.2 其次,调用对应的API 接口,把最新的状态保存到数据库中
2.2.1 根据文档,调用相对应的接口进行修改用户的状态
动态传参uId 、type说明:
1. uId 表示动态传入修改的用户Id。
2. type 表示需要传入 switch 最新的状态。
2.2.2 调用接口,发起请求,修改用户状态
注意事项:为了拼接动态参数,需要把单引号修改成 模板字符串(反引号)
2.2.3 调用接口后,进行解构赋值
- 由于每次调用接口,都会返回一个 promise 对象,所以为了简化 promise 对象,需要给当前 调用的方法添加 async 和 await ,接着进行解构赋值
2.2.4 最后的效果
2.3 组件代码
2.3.1 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="请输入内容" >
<template #append>
<el-icon><search /></el-icon>
</template>
</el-input>
</el-col>
<el-col :span="4">
<el-button type="primary">添加用户</el-button>
</el-col>
</el-row>
<!-- 用户列表区域 -->
<el-table :data="userlist" border stripe>
<el-table-column type="index"></el-table-column>
<el-table-column label="姓名" prop="username"></el-table-column>
<el-table-column label="邮箱" prop="email"></el-table-column>
<el-table-column label="电话" prop="mobile"></el-table-column>
<el-table-column label="角色" prop="role_name"></el-table-column>
<el-table-column label="状态" prop="mg_state">
<template v-slot="scope">
<el-switch v-model="scope.row.mg_state" @change="userStateChanged(scope.row)" />
</template>
</el-table-column>
<el-table-column label="操作" width="180px">
<template v-slot="scope">
<!-- 修改按钮 -->
<el-button type="primary" v-model="scope.row.Id" size="mini"><el-icon><edit /></el-icon></el-button>
<!-- 删除按钮 -->
<el-button type="danger" size="mini"><el-icon><delete /></el-icon></el-button>
<!-- 分配角色按钮 -->
<el-tooltip effect="dark" content="分配角色" placement="top" :enterable="false">
<el-button type="warning" size="mini"><el-icon><setting /></el-icon></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<!-- 页面区域 -->
<el-pagination :current-page="queryInfo.pagenum" :page-sizes="[1, 2, 5, 10]"
:page-size="queryInfo.pagesize" layout="total, sizes, prev, pager, next, jumper"
:total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange"
>
</el-pagination>
</el-card>
</div>
</template>
<script >
export default {
data () {
return {
// 获取用户列表的参数对象
queryInfo: {
query: '', // 查询参数
pagenum: 1, // 当前页码
pagesize: 2 // 每页显示条数
},
// 用户列表
userlist: [],
// 总数据条数
total: 0
}
},
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)
},
// 监听 page size 改变的事件
handleSizeChange (newSize) {
this.queryInfo.pagesize = newSize
this.getUserList()
},
// 监听 页码值 改变的事件
handleCurrentChange (newPage) {
this.queryInfo.pagenum = newPage
this.getUserList()
},
// 监听 switch 开头状态的改变
async userStateChanged (userinfo) {
const { data: res } = await this.$http.put(`users/${userinfo.id}/state/${userinfo.mg_state}`)
if (res.meta.status !== 200) {
userinfo.mg_state = !userinfo.mg_state
return this.$message.error('更新用户状态失败')
}
this.$message.success('更新用户状态成功')
}
}
}
</script>
<style lang="less" scoped>
</style>
更多推荐
已为社区贡献27条内容
所有评论(0)