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
    评论
好的,我来为你具体介绍下springboot+vue实现el-table显示数据的逻辑。 1. 后端逻辑 在后端,我们需要使用Spring Boot框架来实现数据的处理和接口的实现。具体逻辑如下: (1) 定义实体类 首先,我们需要定义实体类来映射数据库表中的数据。例如,我们定义一个User实体类来映射数据库表中的用户数据: ```java public class User { private Long id; private String name; private Integer age; private String address; // getter和setter方法省略 } ``` (2) 定义数据访问接口 接下来,我们需要定义一个数据访问接口来访问数据库中的用户数据。可以使用MyBatis或者Hibernate等ORM框架来实现。例如,在使用MyBatis的情况下,我们可以在Mapper接口中定义一个查询所有用户数据的方法: ```java public interface UserMapper { List<User> getAllUsers(); } ``` (3) 实现数据访问接口 然后,我们需要实现数据访问接口来访问数据库中的用户数据。例如,在使用MyBatis的情况下,我们可以使用Mapper XML文件来实现查询所有用户数据的方法: ```xml <select id="getAllUsers" resultType="User"> SELECT id, name, age, address FROM user </select> ``` (4) 定义控制器 最后,我们需要定义一个控制器来处理前端的数据请求。例如,我们可以定义一个UserController类来处理前端请求获取所有用户数据的方法: ```java @RestController @RequestMapping("/api") public class UserController { @Autowired private UserMapper userMapper; @GetMapping("/users") public List<User> getAllUsers() { return userMapper.getAllUsers(); } } ``` 2. 前端逻辑 在前端,我们需要使用Vue框架来实现页面的渲染和数据的展示。具体逻辑如下: (1) 安装element-ui组件库 我们可以使用npm命令来安装element-ui组件库: ``` npm install element-ui --save ``` (2) 引入el-table组件 在Vue组件中引入el-table组件,并使用axios库从后端接口获取数据。例如: ```vue <template> <div> <el-table :data="users"> <el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> <el-table-column prop="address" label="Address"></el-table-column> </el-table> </div> </template> <script> import axios from 'axios'; export default { data() { return { users: [] } }, mounted() { axios.get('/api/users').then(response => { this.users = response.data; }); } } </script> ``` 其中,`:data="users"`绑定了数据源,`el-table-column`定义了要展示的列。在`mounted()`方法中使用axios库从后端接口获取数据,并将数据赋值给`users`变量。 至此,我们就完成了基于Spring Boot和Vueel-table数据展示功能的实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值