TS+VUE2的el-table表格默认勾选

1.首先获取表格数据,把需要的数据过滤出来放到新数组里

  private async loadParams() {
    let res = await GetAllEquTagsById(this.flowmeterId)
    this.defaultChoose = res.filter((item) => {
      return item.paramCode == 'Presetvalue_W_01' || item.paramCode == 'Flowrate_01' || item.paramCode == 'Sum_low_01' || item.paramCode == 'Realvalue_01'
    })
  }

2.点击按钮,打开组件,调用方法,把处理好的带着数据的新数组传过去

 private async chooseParams() {
    await this.loadParams()
    if (this.params.length === 0) {
      this.params = this.defaultChoose
    }
    await (this.$refs.paramDialog as chooseFlowmeterParams).showDialog(this.flowmeterId, this.params)
  }

3.子页面的方法(需要默认勾选的组件页面)

  public async showDialog(flowmeterId: string, defaultParams: any[]) {
    this.flowmeterId = flowmeterId
    this.dialogVisible = true
    await this.loadParams()
    await this.$nextTick()
    // window.console.log('showDialog:', this.allParams, defaultParams)
    //如果没有勾选的数据
    if (defaultParams.length < 1) {
      this.allParams.forEach((element: TagParamEntity) => {
        //parameCodeList就是需要默认勾选的一些数据的关键词
        //进行匹配
        let findInDefault = this.parameCodeList.find((o) => o === element.paramCode)
        // console.log('没有默认选择paramName', findInDefault)
        //根据条件 让某些行选中
        if (findInDefault) {
          ;(this.$refs.multipleTable as any).toggleRowSelection(element)
        }
      })
    } else {
      //如果有传来的数据,遍历数据源
      //this.allParams是展示表格用的接口的数据
      this.allParams.forEach((element: TagParamEntity) => {
        //根据传来的数据的id和数据源里的id匹配
        let findInDefault = defaultParams.find((o) => o.id === element.id)
        //找到匹配的数据了
        if (findInDefault) {
          //调用toggleRowSelection方法,勾选上
          ;(this.$refs.multipleTable as any).toggleRowSelection(element)
        }
      })
    }
  }

//具体实现方法:

//父组件
<chooseFlowmeterParams @onSure="onChooseParams" :params="params" @onCancel="onCancelChooseParams" ref="paramDialog" />

下面全是子组件: 

  <!--当选择项发生变化时会触发该事件 selection-change -->

  <!--当某一行被点击时会触发该事件 row-click -->

 <el-table size="small" ref="multipleTable" header-row-class-name="monitorTable" stripe :data="tableData" height="340" highlight-current-row @selection-change="tableChooseChange" @select-all="onSelectAll" @row-click="rowFinanceChecked" tooltip-effect="dark" border style="width: 100%">
        <!-- 选择框 -->
        <el-table-column type="selection" width="55"></el-table-column>
        <!-- 内容 -->
        <el-table-column prop="paramName" :label="$t('i18n.param')"></el-table-column>
      </el-table>


  @Prop({
    default: () => {
      return []
    }
  })
  params: any[]

@Watch('params', { deep: true, immediate: true })
  private async watchParamsChange(val: any) {
    this.allSelectedArr = val
  }
  private allSelectedArr: any[] = []


  private async rowFinanceChecked(e) {
    //如果有 勾选的数据源 
    if (this.allSelectedArr.length != 0) {
       //如果 勾选的数据源中有一个选项 和 点击的行数据相同
      if (this.allSelectedArr.findIndex((item) => item.id == e.id) > -1) {
        //相同的勾选的数据 删掉
        this.allSelectedArr.splice(this.allSelectedArr.findIndex((item) => item.id == e.id), 1)
      } else {
         //如果 勾选的数据源中有一个选项 和 点击的行数据 不匹配,就是没有,并且小于6条
        if (this.allSelectedArr.length < 6) {
          //把点击的塞进allSelectedArr
          this.allSelectedArr.push(e)
            //然后勾选
          ;(this.$refs.multipleTable as any).toggleRowSelection(e)
        } else {
          this.$message({
            message: '参数最多选择6个',
            type: 'warning'
          })
        }
      }
    } else {
        //如果 之前没有默认勾选的数据源
        //往allSelectedArr这个数组里加进去
      this.allSelectedArr.push(e)
        //然后点击的全勾上
      ;(this.$refs.multipleTable as any).toggleRowSelection(e)
    }
  }
  private async tableChooseChange(val: any) {
     //val是点击的行的数据的集合,[ {},{} ] 勾了几个数据,都会村存里面
    if (val.length > 6) {
      this.$message({
        message: '参数最多选择6个',
        type: 'warning'
      })
      ;(this.$refs.multipleTable as any).toggleRowSelection(val[val.length - 1])
    }
        //存放数据
      this.currentSelectedRows = val
    }
  }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值