Vue3+Element-Plus实现表单中⽤户状态修改同步到数据库的
功能三四
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 列表中状态改造
接着实现该事件处理函数
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>
const的作用<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="_state" @change="w)" />
</template>
</el-table-column>
<el-table-column label="操作" width="180px">
<template v-slot="scope">
<!-- 修改按钮 -->
<el-button type="primary" v-model="w.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-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 () {
},
methods: {
async getUserList () {
const { data: res } = await this.$('users', {
params: this.queryInfo
})
if (a.status !== 200) return this.$('获取⽤户列表失败')
this.userlist = res.data.users
console.log(res)
},
// 监听 page size 改变的事件
handleSizeChange (newSize) {
this.queryInfo.pagesize = newSize
},
/
/ 监听页码值改变的事件
handleCurrentChange (newPage) {
this.queryInfo.pagenum = newPage
},
// 监听 switch 开头状态的改变
async userStateChanged (userinfo) {
const { data: res } = await this.$http.put(`users/${userinfo.id}/state/${_state}`)
if (a.status !== 200) {
<_state = !_state
return this.$('更新⽤户状态失败')
}
this.$message.success('更新⽤户状态成功')
}
}
}
</script>
<style lang="less" scoped>
</style>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论