iview 表格选中后对某一列数据加input

项目要求是这样的:

勾选某一行数据,合格数量,不合格数量变为输入框

遇到的问题:在使用iview的table组件,里面有个on-selection-change事件,只要按照以下以下就可以正常使用

<Row>
        <Table
          :loading="loading"
          border
          :columns="columns"
          :data="data"
          :height="tableHeight"
          sortable="custom"
          @on-sort-change="changeSort"
          ref="table"
        >
</table>
</Row>

换成自己的事件和自己的方法,然后方法返回的是已选中的数据,然后我就遍历选中数据,比较选中数据的uuid和表格数据data 的uuid 是否相同,是就直接将登记数量赋予给合格数量,但是在这个过程中,只要加了对data 的循环,就会导致勾选了三条数据,但是on-selection-change事件返回的只是当前点击的数据,并且勾选框会时不时的失效,点了之后勾勾还在

以下是之前的代码

// //选择数据
    selectData(selection) {
     this.changeData = []
      this.changeData = selection
      let uuids  = this.changeData.map(item => item.uuid)
      this.data.forEach(item => {
        var qualifiedAmount = '';
        let uuid = item.uuid;
        if(uuids.some(i => i==uuid)){
          qualifiedAmount = 100;
        }
        this.$set(item, "qualifiedAmount",qualifiedAmount)
      });
    },

然后在不停的踩坑,踩坑之后(试过了table的其他事件结合使用:,然后还试了偷梁换柱,将表格数据的data 换掉,也没办法赋值)但都不行

后来就想了另外一种办法

将勾选框改为checkBox 自定义,在export default {}中定义表格数据的时候

 

 在methods: {}中进行重写

 

下面是全选

 

  // 多选Checkbox
    checkBoxRender(h, params, key) {
      if (!key) {
        key = 'uuid'
      }
      if (params.row['_checked'] == undefined) {
        this.$set(params.row, '_checked', false)
      }
      let self = this
      return h('div', [
        h('Checkbox', {
          props: {
            value: params.row['_checked'],
          },
          on: {
            'on-change': value => {
              if (value) {
                self.data[params.row['_index']].qualifiedAmount = params.row['totalCount'] //设置合格数
                self.data[params.row['_index']].unqualifiedAmount = 0 //设置不合格数
                console.log(self.data)
                self.changeData.push(self.data[params.row['_index']]) //将选中的数据加入到返回数据中
              } else {
                self.data[params.row['_index']].qualifiedAmount = '' //设置合格数
                self.data[params.row['_index']].unqualifiedAmount = '' //设置不合格数
                self.changeData.forEach((item, index) => {
                  if (params.row['uuid'] == item['uuid']) {
                    //将选中的数据移除
                    self.changeData.splice(index, 1)
                  }
                  console.log('self.changeData')
                  console.log(self.changeData)
                })
              }
            },
          },
        }),
      ])
    },
    checkBoxHeaderRender(h, params, key) {
      let self = this
      return h('div', [
        h('Checkbox', {
          props: {
            value: false,
          },
          on: {
            'on-change': value => {
              if (value) {
                self.data.forEach(row => {
                  row._checked = true
                  row.qualifiedAmount = row.totalCount
                  row.unqualifiedAmount = 0

                  self.changeData.push(row)
                  console.log(self.changeData)
                })
              } else {
                self.data.forEach(row => {
                  row._checked = false
                  row.qualifiedAmount = ''
                  row.unqualifiedAmount = ''
                  self.changeData = []
                  console.log(self.changeData)
                })
              }
            },
          },
        }),
      ])
    },

因为自己比较菜,罗里吧嗦说了一堆,希望有所帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值