封装el-table 可搜索字段,点击行可勾选,搜索字段否选不消失

文章展示了如何在Vue.js应用中实现一个带有搜索输入框的表格组件。表格具有选择、点击和重复数据检查功能。handleSelectionChange函数用于检测选中项中是否有重复的fieldName,handleRowClick函数处理行点击事件,动态管理选中行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

//搜索输入框
        <el-input @input="searchFeildtable"
                  v-model="searchFeild"
                  placeholder="搜索字段"></el-input>
                  //表格
        <el-table ref="multipleTable"
                  :data="tableFeildCopy"
                  :select-on-indeterminate="true"
                  row-key="key"
                  @selection-change="handleSelectionChange"
                  @select="handleSelect"
                  @row-click="handleRowClick">
          <el-table-column type="selection"
                           align="center" />
          <el-table-column prop="fieldName"
                           label="字段名称">
          </el-table-column>
          <el-table-column prop="sourceColumnCname"
                           label="字段注释">
          </el-table-column>
          <el-table-column prop="tableName"
                           label="表名">
          </el-table-column>
          <el-table-column prop="sourceTableCname"
                           label="表注释">
          </el-table-column>

        </el-table>

handleSelectionChange函数是 校验勾选中有字段重复的函数
handleSelect 赋值给勾选数组
handleRowClick 点击行勾选当前行

    handleSelectionChange(value) {
      // this.checkList ={}
      this.repetitionList = arrayFn.repetitionArray(this.checkTableList, 'fieldName')
      //   console.log(this.checkList, 'value')
      //   this.checkList = value
    },
    handleSelect(value) {
      this.checkTableList = value
    },
    // 选中字段表格
    handleRowClick(row, column, event) {
      console.log(row)
      if (this.checkTableList.findIndex((ele) => ele.key == row.key) != -1) {
        this.$refs.multipleTable.toggleRowSelection(row, false)
        arrayFn.deleteArray(
          this.checkTableList,
          this.checkTableList.findIndex((ele) => ele.key == row.key)
        )
      } else {
        this.checkTableList.push(row)
        this.$refs.multipleTable.toggleRowSelection(row, true)
      }
      console.log(this.checkTableList)
    },
### 实现 Vue 表格勾选项的合计 为了实现在 `Vue` 项目中对表格勾选项进合计计算的功能,可以采用如下方式: #### 封装 el-table 组件并传递参数 通过封装 `el-table` 列表组件,能够更灵活地控制其为。对于普通列表而言,可以直接定义所需的相关参数;而对于复杂需求,则可以通过属性的形式向组件内部传入配置项[^2]。 ```javascript // 定义 props 接收外部传参 props: { tableData: Array, summaryList: Array, // 要处理列的信息数组 } ``` #### 使用 summary-method 处理表尾 利用 `el-table` 提供的 `summary-method` 属性来自定义汇总逻辑。此函数接收四个参数:`(param)`,其中包含了当前页数据、总记录数等信息。可以根据这些信息动态调整展示内容。 ```javascript methods: { getSummaries(param) { const { columns, data } = param; let sums = []; this.summaryList.forEach((item, index) => { if (index === 0 || !this.showSecondRow) { sums[index] = '总计'; } if (data.length) { switch(item.prop){ case 'selectedTotal': var selectedItems = data.filter(o=>o.selected); sums[index] = selectedItems.reduce((prev, curr) => prev + Number(curr[item.prop]), 0).toFixed(2); break; default: sums[index]='N/A'; } }else{ sums[index]='无数据'; } }); return sums; }, }, ``` 在此基础上增加一个布尔类型的变量 `showSecondRow` 来判断是显示第二统计数据,并且当只有一时隐藏必要的部分。 #### 添加多框监听事件更新状态 为了让用户可以择特定来进求和操作,在每一前添加一个多框(`type="selection"`)[^1]。每当用户的取发生变化时触发相应的钩子函数 (`@selection-change`) 更新视图上的统计数值。 ```html <template> <el-table :data="tableData" @selection-change="handleSelectionChange"> <!-- ... --> <el-table-column type="selection"></el-table-column> <!-- 其他列定义 --> <el-table-column label="操作"> <template slot-scope="scope"> <el-button size="mini">编辑</el-button> </template> </el-table-column> <el-table-column fixed="right" align="center" width="80px"> <span v-if="!showSecondRow">{{ total }}</span> <div class="two-line-summary" v-else> <p>{{ firstLineSummary }}</p> <p>{{ secondLineSummary }}</p> </div> </el-table-column> </el-table> </template> ``` 上述代码片段展示了如何构建带有择器和支持双摘要样式的表格结构。 #### 计算属性维护实时变化的数据 最后一步是创建一些计算属性来跟踪所项目的数量以及它们对应字段值的累加结果。这使得界面能即时反映出最新的更改情况而无需手动刷新页面。 ```javascript computed:{ total(){ return this.tableData.filter(row=>row.selected).reduce((acc,item)=> acc+=parseFloat(item.amount),0); }, showSecondRow() { return this.total !== null && Object.keys(this.secondLineSummary).length > 0; }, firstLineSummary(){ return `${this.total}笔`; }, secondLineSummary(){ return `金额:${this.total}`; } } ``` 综上所述,通过对 `el-table` 的定制化开发,实现了基于用户交互的择性统计功能,仅提高了用户体验还增强了系统的灵活性与可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值