Element(4) 增删改查 案例

桃扇骨 2023-10-11 09:24 88阅读 0赞

分享一个Vue增删改查小案例demo吧,主要是常见的crud,编辑时表单回显处理,提交表单时数据格式校验,列表分页处理…等

温馨小提示:案例源码附文章最后了,有需要的朋友可参考

一、先上效果图吧

分页列表:

其中角色名称作模糊查询
在这里插入图片描述

新增:

在这里插入图片描述

编辑:

在这里插入图片描述

二、代码实现

  1. <template>
  2. <div class="app-container">
  3. <cus-wraper>
  4. <cus-filter-wraper>
  5. <el-input v-model="listQuery.name" placeholder="请输入角色名称" style="width:200px" clearable></el-input>
  6. <el-button type="primary" @click="getList" icon="el-icon-search" v-waves>{
  7. { $t('table.search') }}</el-button>
  8. <el-button v-has="'sys:role:add'" type="primary" @click="handleCreate" icon="el-icon-plus" v-waves>{
  9. { $t('table.add') }}</el-button>
  10. </cus-filter-wraper>
  11. <div class="table-container">
  12. <el-table v-loading="listLoading" :data="list" size="mini" element-loading-text="Loading" fit border highlight-current-row>
  13. <el-table-column label="ID" prop="id" align="center"></el-table-column>
  14. <el-table-column label="角色编码" prop="code" align="center"></el-table-column>
  15. <el-table-column label="角色名称" prop="name" align="center"></el-table-column>
  16. <el-table-column label="备注" prop="remarks" align="center"></el-table-column>
  17. <el-table-column label="是否已关联系统用户" align="center">
  18. <template slot-scope="scope">
  19. <el-tag :type="scope.row.isRelatedSysUser == 1 ? 'success' : 'danger'" hit>
  20. {
  21. { scope.row.isRelatedSysUser == 1 ? ' 是 ' : ' 否 ' }}
  22. </el-tag>
  23. </template>
  24. </el-table-column>
  25. <el-table-column label="是否已关联系统资源" align="center">
  26. <template slot-scope="scope">
  27. <el-tag :type="scope.row.isRelatedSysMenu == 1 ? 'success' : 'danger'" hit>
  28. {
  29. { scope.row.isRelatedSysMenu == 1 ? ' 是 ' : ' 否 ' }}
  30. </el-tag>
  31. </template>
  32. </el-table-column>
  33. <el-table-column label='是否已关联微信账号' align="center">
  34. <template slot-scope="scope">
  35. <el-tag :type="scope.row.isRelatedWxAccount == 1 ? 'success' : 'danger'" hit>
  36. {
  37. { scope.row.isRelatedWxAccount == 1 ? ' 是 ' : ' 否 ' }}
  38. </el-tag>
  39. </template>
  40. </el-table-column>
  41. <el-table-column v-if="this.global_checkBtnPermission(['sys:role:edit','roleSetting','sys:role:delete'])" :label="$t('table.actions')" align="center">
  42. <template slot-scope="scope">
  43. <el-button v-has="'sys:role:edit'" size="mini" type="primary" @click="handleUpdate(scope.row)" icon="el-icon-edit" plain v-waves> {
  44. { $t('table.edit') }}</el-button>
  45. <router-link :to="'/systemManage/roleSetting/'+scope.row.id">
  46. <el-button v-has="'roleSetting'" type="primary" size="mini" style="width: 100px;margin-left: 10px;margin-right: 10px;" icon="el-icon-setting" plain>
  47. 权限设置
  48. </el-button>
  49. </router-link>
  50. <cus-del-btn v-has="'sys:role:delete'" @ok="handleDelete(scope.row)"></cus-del-btn>
  51. </template>
  52. </el-table-column>
  53. </el-table>
  54. <!-- 分页 -->
  55. <cus-pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList"/>
  56. </div>
  57. <!-- 新增、编辑form弹出框 -->
  58. <el-dialog :title="titleMap[dialogStatus]" :visible.sync="dialogVisible" width="40%" @close="handleDialogClose">
  59. <el-form ref="dataForm" :model="form" :rules="rules" label-width="100px" class="demo-ruleForm">
  60. <el-form-item label="角色编码:" prop="code">
  61. <el-input v-model="form.code"></el-input>
  62. </el-form-item>
  63. <el-form-item label="角色名称:" prop="name">
  64. <el-input v-model="form.name"></el-input>
  65. </el-form-item>
  66. <el-form-item label="角色描述:" prop="remarks">
  67. <el-input v-model="form.remarks" type="textarea" :rows="7"></el-input>
  68. </el-form-item>
  69. </el-form>
  70. <span slot="footer" class="dialog-footer">
  71. <el-button @click="dialogVisible = false" v-waves> {
  72. { $t('table.cancel') }}</el-button>
  73. <el-button type="primary" @click="submitForm" v-waves>{
  74. { $t('table.confirm') }}</el-button>
  75. </span>
  76. </el-dialog>
  77. </cus-wraper>
  78. </div>
  79. </template>
  80. <script> import { getRolePage, saveOrUpdateRole, deleteRole} from '@/api/system/role' export default { data() { return { tableKey: 0, list: null, total: 0, listLoading: true, listQuery: { page: 1, limit: 10, name: undefined }, showReviewer: false, form: { id: undefined, //主键ID code: undefined, //角色编码 name: undefined, //角色名称 remarks: undefined, //角色描述 isRelatedSysUser: undefined, //是否已关联系统用户 isRelatedSysMenu: undefined, //是否已关联系统资源 isRelatedWxAccount: undefined //是否已关联微信账号 }, dialogVisible: false, dialogStatus: '', titleMap: { update: '编辑', create: '创建' }, rules: { name: [ { required: true, message: '请输入角色名', trigger: 'blur'}, { min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur'} ], remarks: [ { max: 200, message: '长度最多200个字符', trigger: 'blur'} ] } } }, created() { this.getList() }, methods: { getList() { this.listLoading = true; getRolePage(this.listQuery).then(response => { this.list = response.data.records; this.total = response.data.total; this.listLoading = false; }) }, handleCreate() { this.resetForm(); this.dialogStatus = 'create'; this.dialogVisible = true; }, handleUpdate(row) { this.form = Object.assign({ }, row); this.form.isRelatedSysMenu = undefined; this.form.isRelatedSysUser = undefined; this.form.isRelatedWxAccount = undefined; this.dialogStatus = "update"; this.dialogVisible = true; console.log(this.dialogStatus); }, handleDelete(row) { if (row.isRelatedSysUser == '1' || row.isRelatedSysMenu == '1' || row.isRelatedWxAccount == '1') { this.$message({ message: '请先解除关联', type: 'warning'}); return false } deleteRole(row.id).then(response => { if (response.code === 200) { this.getList(); this.submitOk(response.message); } else { this.submitFail(response.message); } }); }, submitForm() { this.$refs['dataForm'].validate(valid => { if (valid) { saveOrUpdateRole(this.form).then(response => { if (response.code == 200) { this.getList(); this.submitOk(response.message); this.dialogVisible = false; } else { this.submitFail(response.message); } }).catch(err => { console.log(err); }); } }); }, resetForm() { this.form = { id: undefined, //主键ID code: undefined, //角色编码 name: undefined, //角色名称 remarks: undefined //角色描述 } }, // 监听dialog关闭时的处理事件 handleDialogClose() { if (this.$refs['dataForm']) { this.$refs['dataForm'].clearValidate(); // 清除整个表单的校验 } } } } </script>

其中axios请求

  1. import request from '@/utils/request';
  2. export function getRolePage(query) {
  3. return request({
  4. url: '/api/system/role/listPage',
  5. method: 'post',
  6. data: query
  7. });
  8. }
  9. export function saveOrUpdateRole(form) {
  10. return request({
  11. url: '/api/system/role/saveOrUpdate',
  12. method: 'post',
  13. data: form
  14. });
  15. }
  16. export function deleteRole(id) {
  17. return request({
  18. url: '/api/system/role/delete',
  19. method: 'post',
  20. data: { 'id': id }
  21. });
  22. }

三、总结

分页列表显示,前端发送请求参数要与后端对应
在这里插入图片描述
后端处理返回封装数据,比如小编这里是将数据封装到了datarecords
在这里插入图片描述
像其它的新增和编辑类似,只要和后端参数对应上即可


案例demo源码

GitHub地址码云地址

发表评论

表情:
评论列表 (有 0 条评论,88人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JDBC增删案例讲解

    JDBC增删改查案例讲解 简介:这是一个网上非常常见的,JDBC的练习题,系统大家通过本文的讲解,熟悉JDBC的增删改查。 推荐学习路线:[JDBC数据库的连接][JD

    相关 Element(4) 增删 案例

    分享一个Vue增删改查小案例demo吧,主要是常见的crud,编辑时表单回显处理,提交表单时数据格式校验,列表分页处理…等 > 温馨小提示:案例源码附文章最后了,有需要的朋友