iview 可编辑table的 DatePicker 组件踩坑

iview 可编辑table的 DatePicker 组件踩坑
需求:
在这里插入图片描述
双击日期 cell 变为DatePicker 编辑日期。
在这里插入图片描述
DatePicker 组件没有blur事件,导致 cell 失去焦点后 不会 恢复原样。
所以只能将 open直接为true,直接打开,又导致点击多个会出现遮挡,设置变量控制只能同时打开一个,因为on-change 的执行时间在 on-open-change之后,所以如果在
on-open-change 方法中恢复cell,选择的数据就会拿不到,所以只能等选择完数据在恢复。
完整代码:

<template>
  <Row>
    <Col span="12">
      <i-table
        border
        :columns="columns1"
        :data="data1"
        highlight-row
        @on-row-click="handleSele"
        @on-row-dblclick="dbhandel"
      ></i-table>
    </Col>
    <Col span="12">
      <Card :dis-hover="true">
        <p slot="title">权限</p>
        <Tree :data="baseData" refs="show-checkbox"></Tree>
      </Card>
    </Col>
  </Row>
</template>>
<script>
  export default {
    methods: {
      handleSele(row, index) {
        row.$Edit = true
        console.log(row, index)
      },
      dbhandel(row, col, index) {},
      addTreeCheck() {
        if (this.data1.length == 0) {
          let res = ''

          for (let i = 0; i < 100; i++) {
            res += '0'
          }
          this.treeIsCheck[0] = res
        } else {
          for (let i = 0; i < this.data1.length; i++) {
            this.treeIsCheck[i] = this.data1[i].fRole
          }
        }
        console.log(this.treeIsCheck[this.selectTableRow][0] === '1')
      },
      tt(index) {
        return this.treeIsCheck[this.selectTableRow][index] === '1'
      },
      initdatalist() {
        this.data1.map(item => {
          //  item.$isEdit = false
        })
      }
    },
    mounted() {
      this.addTreeCheck(), this.initdatalist()
    },
    data() {
      return {
        f: false,

        selectTableRow: 0,
        treeIsCheck: [],
        treeIsCheck2: true,
        baseData: [
          {
            title: '考勤',

            children: [
              {
                title: '考勤管理',

                //              checked: this.treeIsCheck[this.selectTableRow][1] == '1',
                children: [
                  {
                    title: '异常考勤'
                    //                    checked: this.treeIsCheck[this.selectTableRow][2] == '1'
                  }
                ]
              },
              {
                title: '考勤管理2',
                //               checked: this.treeIsCheck[this.selectTableRow][3] == '1',
                children: [
                  {
                    title: '异常考勤2'
                    //                   checked: this.treeIsCheck[this.selectTableRow][4] == '1'
                  }
                ]
              }
            ]
          }
        ],
        columns1: [
          {
            title: '姓名',
            key: 'name'
          },
          {
            title: '日期',
            key: 'date',
            render: (h, params) => {
              if (params.row.$isEdit) {
                return h('div', [
                  h('DatePicker', {
                    props: {
                      type: 'date',
                      placeholder: 'Select date',
                      placement: 'top',
                      value: params.row.date,
                      transfer: true,
                      size: 'small',
                      editable: false,
                      open: true,
                      clearable: false
                    },

                    on: {
                      'on-change': date => {
                        params.row.date = date
                        this.data1[params.index] = date

                        this.$set(params.row, '$isEdit', false)
                        this.f = false
                      }
                    }
                  })
                ])
              } else {
                return h(
                  'div',

                  {
                    on: {
                      dblclick: () => {
                        if (!this.f) {
                          this.f = true
                          this.$set(params.row, '$isEdit', true)
                        }
                      }
                    }
                  },
                  params.row.date
                )
              }
            }
          },
          {
            title: '地址',
            key: 'address'
          }
        ],
        data1: [
          {
            name: '王小明',
            date: '2020-07-18',
            address: '北京市朝阳区芍药居',
            fRole: '0000000000000000000000000000000000000000000000000'
          },
          {
            name: '张小刚',
            date: '2020-07-18',
            address: '北京市海淀区西二旗',
            fRole: '0100000000000000000000000000000000000000000000000'
          },
          {
            name: '李小红',
            date: '2020-07-18',
            address: '上海市浦东新区世纪大道',
            fRole: '0020000000000000000000000000000000000000000000000'
          },
          {
            name: '周小伟',
            date: '2020-07-18',
            address: '深圳市南山区深南大道',
            fRole: '000100000000000000000000000000000000000000000000'
          }
        ]
      }
    }
  }
</script>

3.4.0版本后 iview 新加了 on-clickoutside 方法,点击外部关闭下拉菜单时触发 event。
这下可以直接相等于失去焦点事件了。

{
            title: '日期',
            key: 'date',
            render: (h, params) => {
              if (params.row.$isEdit) {
                return h('div', [
                  h('DatePicker', {
                    props: {
                      type: 'date',
                      placeholder: 'Select date',
                      placement: 'top',
                      value: params.row.date,
                      transfer: true,
                      size: 'small',
                      editable: false,
                      open: true,
                      clearable: false
                    },

                    on: {
                      'on-change': date => {
                        params.row.date = date
                        this.data1[params.index] = date

                        this.$set(params.row, '$isEdit', false)
                        this.f = false
                      },
                      'on-clickoutside': e =>{
                         this.f = false
                         this.$set(params.row, '$isEdit', false)
                      }
                    }
                  })
                ])
              } else {
                return h(
                  'div',

                  {
                    on: {
                      dblclick: () => {
                        if (!this.f) {
                          this.f = true
                          this.$set(params.row, '$isEdit', true)
                        }
                      }
                    }
                  },
                  params.row.date
                )
              }
            }
          },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值