不会还有人连增删改查还不熟练吧?一篇增删改查业务总结交给你

265 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情

增加业务

1.点击新增按钮弹出对话框表单

2.填写表单,表单数据绑定到data,表单校验

3.点击对话框的确定按钮触发兜底校验,

校验成功发送新增请求,关闭对话框,重新发请求数据渲染界面

注意:

1.对话框显示与隐藏使用一个变量

<el-dialog :visible.sync="dialogVisible" />//data中dialogVisible默认为false

2.表单项变量名由接口文档决定

3.表单校验如果复杂可以设定自定义校验规则

 // 自定义校验规则
    const validCode = (rule, value, callback) => {
      // (1)传入的value编码不能和其他编码重复
      // (2)得到一个编码数组
      const existCodeList = this.originList.map(item => item.code)
      // (3)如果编码数组中没有value则校验通过,否则不通过
      existCodeList.some(item => item === value) ? callback(new Error(`编码${value}已经存在`)) : callback()
      // existCodeList.includes(value) ? callback(new Error('编码' + value + '已经存在')) : callback()
    }

4.增加与修改共用一个表单时

设定一个是否编辑的变量:isEdit,点击编辑时把isEdit赋值为true,点击新增时把isEdit赋值为false,

  • 根据isEdit的值,
  • 来显示对话框的标题是新增还是编辑,
  • 来确定点击确定是走新增还是保存修改的ajax

删除业务

1.点击删除按钮注册点击事件

通过作用域插槽传过来的scope的得到当前删除项的id

传递id给事件

2.methods中删除事件通过传过来的id,

发送ajax请求删除具体的某一个选择项,

删除成功重新请求数据渲染界面

注意:

删除时刻添加确认框 this.$confirm
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          this.$message({
            type: 'success',
            message: '删除成功!'
          });
        }).catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除'
          });          
        });

修改业务

1.点击修改按钮注册点击事件

显示对话框

使用作用域插槽传过来的scope的得到当前选择项的id传给注册的事件

2.对话框表单数据回填

根据点击按钮传过来的id,然后发送ajax请求获得当前选项的数据

然后数据回填到对话框的表单项(ajax返回数据绑定到data,v-model绑定data)

数据回填,this.roleForm=row。对象的赋值容易出现,浅拷贝的问题:改一个另一个也变

    // 绑定数据到data 避免编辑时表格中数据也变
      this.roleForm = { ...row }

3.修改表单数据

修改数据为需要的数据

单独表单校验,点击确定兜底校验

 this.$refs.deptForm.validate(valid => {
        if (valid) {
          // 如果是编辑 则走调编辑方法,否则调新增
          this.isEdit ? this.doEdit() : this.doAdd()
        }
      })

4.点击确定修改兜底校验

兜底校验通过后,根据后端接口发送ajax请求

修改成功关闭对话框

提示修改成功

重新加载页面

增加与修改共用一个表单时

设定一个是否编辑的变量:isEdit,点击编辑时把isEdit赋值为true,点击新增时把isEdit赋值为false,

  • 根据isEdit的值,
  • 来显示对话框的标题是新增还是编辑,
  • 来确定点击确定是走新增还是保存修改的ajax

查询业务

1.页面打开加载数据

created钩子最早获取到数据,在这里面发送请求数据

得到数据绑定到data,把data数据渲染到页面上

2.分页查询

分页组件 绑定总页数total,页码大小,页码变化事件,页码一页大小变化事件

<el-pagination layout="total, sizes, prev, pager, next, jumper"
:page-sizes="[5,10,15,20]"
:page-size="size"
:total="total"
@size-change="hSizeChange"
@current-change="hCurrentChange" />

变化页码数

把传递过来的当前页码数绑定到data中的page请求参数

根据新的参数重新发请求渲染界面

变换页码一页大小

把传递过来的当前页码一页大小数绑定到data中的pagesize请求参数

根据新的参数重新发请求渲染界面

注意点:

1.删除最后一条数据的时候,页码--

        if (this.roles.length === 1) {
          let page = this.pageParams.page
          page--
          // 页码不能减是0
          // if (this.pageParams.page === 0) {
          //   this.pageParams.page = 1
          // }
          page = Math.max(1, page)
          this.pageParams.page = page
        }

2.添加数据,要显示添加之后的效果:跳转到最后一页

       this.total++// 总数加1
        // 跳转到最后一页
        this.pageParams.page = Math.ceil((this.total) / this.pageParams.pagesize)

总结

以上每一个ajax请求都要包裹在try,catch中

避免请求错误影响整个页面无法加载

例如:

    async doAdd() {
      try {
        const res = await addPermission(this.formData)
        this.showDialog = false
        this.loadPermissionList()
        this.$message.success('添加成功')
      } catch (err) {
        console.log(err)
        this.$message.error('添加失败')
      }
    },