使用ElementUI的el-tab+vxe-table表格+复选框选择

这篇具有很好参考价值的文章主要介绍了使用ElementUI的el-tab+vxe-table表格+复选框选择。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果:使用ElementUI的el-tab+vxe-table表格+复选框选择,elementui,vxe-table

功能:首先进来是全部清空的状态的

  1. 点击左边选择不同项右边会实时发送接口获取数据填充表格

  2. 复选的内容可以保留显示,比如A的1勾选后切换到B再切换回来A的1仍然是勾选状态

说实话官网的setCheckboxRow方法我实现不了,这里就是纯蠢蠢的办法实现,在这里做个记录,能用咱就用着,有更好的办法就下次一定

适用el-tabs来实现该样式,关键点是:checkbox-config="{ checkField: 'checked', checkRowKey: 'checked' }"这个配置 ,vxe-table表格会根据checked的状态来判断是否给勾选状态

(我加了checkField这个后会默认给每个行添加字段checked,如果表格的数据没有这一项只需要在获取第一个表格数据的时候手动添加checked这个属性,例如后面我在init函数中加的)

<el-tabs tab-position="left" @tab-click="handleClick">
	<el-tab-pane v-for="(item, index)  in tabs" :key="item.testItemCode" :label="item.testGroupName">
      <vxe-table :ref="'table' + index" :data="testItemData" auto-resize align="center"  :checkbox-config="{ trigger: 'row', checkField: 'checked', checkRowKey: 'checked' }" @checkbox-all="selectAllEvent" @checkbox-change="selectChangeEvent">
		<vxe-table-column type="checkbox" width="50">
		<vxe-table-column type="checkbox" width="50"></vxe-table-column>
      	<vxe-table-column type="seq" title="序号" width="50"></vxe-table-column>
    	<vxe-table-column field="testItemName" title="测试项"></vxe-table-column>
     	<vxe-table-column field="testItemCode" title="测试项编码"></vxe-table-column>
     	<vxe-table-column field="testTypeName" title="测试类型"></vxe-table-column>
  	  </vxe-table>
	</el-tab-pane>
</el-tabs>        
  • 在Init初始化的时候就都给一个默认的属性checked = false,每次点击勾选的时候就把它存起来,取消勾选就把这一项删除,这里用curSelectedList来存储选中项的
  • tab-click点击事件中也就是切换tab时发送不同的请求获取表格数据,如果该数据在curSelectedList中的话我们就把他的``checked属性设置为true`,就实现了选中的状态
  • 最后确认的时候就把curSelectedList的数据传出去就好了,也就是选中的项
// 页面刚进来的时候就获取第一组数据
 init() {
       this.tabs = this.testGroupNameList
       this.getTestItemData(this.tabs[0].testGroupCode)
 },
// 获取测试项
async getTestItemData(testGroupCode) {
     this.testItemData = await getItemCodesOfGroup({
          testNo: this.testNo,
          testGroupCode,
          entityCode: this.entityCode
     })
     //🛑上面的就是获取数据,这里比较关键,不写的话进来第一次就会勾选不了
     this.testItemData.forEach(i => i.checked = false)
},  
async handleClick(tab) {
            // 先通过左边的选择获取相应的表格数据,这里也是获取数据
            await this.getTestItemData(this.tabs.find(v => v.testGroupName == tab.label).testGroupCode)
            //🛑 这里比较关键,如果在已选择的列表内,就设置为选中状态
            if (this.curSelectedList.length) {
                this.testItemData.forEach(item => {
                    this.curSelectedList.forEach(item2 => {
                        if (item.testItemName == item2.testItemName) {
                            item.checked = true
                        }
                    })
                })
            }
        },
// 复选框事件
 selectChangeEvent(selection) {
            // 选中时保存选中项
      if (selection.checked) {
           this.curSelectedList.push(selection.row)
           this.curSelectedList = this.unique(this.curSelectedList, 'testItemName')
     } else {
          // 取消时删除选中项
          this.curSelectedList = this.curSelectedList.filter(item => item.testItemName != selection.row.testItemName)
      }
},
     // vxe复选框当前页全选中方法
 selectAllEvent(selection) {
            // 选中时保存选中项
       if (selection.checked) {
           this.curSelectedList.push(...selection.records)
           this.curSelectedList = this.unique(this.curSelectedList, 'testItemName')
     } else {
                // 取消时删除选中项
      selection.$table.tableData.forEach(item => {
          this.curSelectedList = this.curSelectedList.filter(item2 => item2.testItemName != item.testItemName)
         })
    }
},  
// 通过testItemName去重函数 ,testItemCode不是唯一的
unique(arr, attr) {
     const map = new Map()
     const result = []
     for (const item of arr) {
          if (!map.has(item[attr])) {
               map.set(item[attr], true)
               result.push(item)
          }
     }
     return result
},  
// 确认选择测试项,这里就是把当前选中项传给父组件的
doChoose() {
     this.curSelectedList = this.unique(this.curSelectedList, 'testItemName')
     this.$emit('getTestItemList', this.curSelectedList)
     this.closeDialog()
 },

肯定有更简单的方法,也有更加简洁的方法,我这个就比较冗余然后就是为了实现功能,大家仅供参考文章来源地址https://www.toymoban.com/news/detail-798372.html

到了这里,关于使用ElementUI的el-tab+vxe-table表格+复选框选择的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vxe-table 小众但功能齐全的vue表格组件

    一个基于 vue 的 PC 端表格组件,除了一般表格支持的增删改查、排序、筛选、对比、树形结构、数据分页等,它还支持虚拟滚动、懒加载、打印导出、虚拟列表、虚拟滚动、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等,特别是能支持类似excel表格操作方式

    2024年02月08日
    浏览(34)
  • vxe-table中<vxe-grid>组件中表格数据排序问题sort-change

    问题描述,首先使用vxe-grid虚拟列表为了同时渲染大批量数据的,但是从iview ui里的table和element ui 里table都是只能渲染少量数据,达不到大批量数据渲染,所以改用vxe-grid。 但是有个排序的问题在iview ui和element ui 里table都不会存在排序混乱的问题,而vxe-grid里的排序会有问题,

    2024年02月16日
    浏览(33)
  • elementUI如何给el-tabs/el-tab-pane添加图标

    原始的el-tabs 添加图标后的样式 ps:红色是因为添加了额外的css 在此不做描述 html部分的代码 给 el-tabs 添加 stretch 属性,使得tabs平铺满整个页面; 通过 v-if 控制选中时图标的颜色更改(其实就是换个图标); style部分的代码 由于用的是自定义的图标,所以需要在background中引

    2024年02月13日
    浏览(29)
  • elementui的el-tabs标签页样式修改

    1.去掉下划线 效果:   代码: 2.改变下划线颜色 效果:    代码: 3.改变选中文字/鼠标滑过时文字颜色 效果:  代码: 4.设置未选中时文字颜色 效果:   代码:

    2024年02月11日
    浏览(21)
  • 前端基础(Element、vxe-table组件库的使用)

    前言:在前端项目中,实际上,会用到组件库里的很多组件,本博客主要介绍Element、vxe-table这两个组件如何使用。 目录 Element 引入element 使用组件的步骤 使用对话框的示例代码 效果展示  vxe-table 引入vxe-table 成果展示 总结 官网地址 Button 按钮 | Element Plus (element-plus.org) 在m

    2024年02月10日
    浏览(27)
  • Thinkphp 6 + Vue 2 + ElementUI + Vxe-table 前后端分离的,一键生成代码和API接口的,通用后台管理系统 快速开发框架,开发小程序和APP的推荐框架!

    Thinkphp 6 + Vue 2 + ElementUI + Vxe-table 前后端分离的,一键生成代码和API接口的,通用后台管理系统 快速开发框架,开发小程序和APP的推荐框架! RdsAdmin是一款PHP语言开发的,基于Thinkphp 6 + Vue 2 + ElementUI + Vxe-table 等开源框架精心打造的,前后端分离的,一键生成功能菜单的,快速

    2024年02月14日
    浏览(42)
  • vxe-table中树形结构

    如图,同事让帮忙实现一个需求  从二级树节点开始,同时选中的只能有一个二级树节点,选中的二级树节点之下的子节点都可以被选中。否则不能被选中 直接上代码 需要注意的是,文中树状图传递的数据是打平的数据,设置代码是下图,而不是树状图!!  上述的这一点非常

    2024年02月10日
    浏览(34)
  • 关于vxe-table全局引入的问题

    主要讲解一下vxe-table全局引入然后使用碰到的问题 0:vxe-table的官网地址 1:基本环境 (1):vue版本为3.x以上(我的是3.2.13) (2): 依赖库:xe-utils 注意:这篇博客的是vue3的脚手架搭建的,如果需要看低版本,请点击这里 2:使用npm安装 3:package.json文件里面就会有以下内

    2024年02月11日
    浏览(31)
  • element UI el-tabs组件使用

    使用 Elemenet UI 框架中的 el-tabs 组件 平时在做项目时,tab切换效果几乎是必不可少的,下来整理一个最近做的一个小功能:el-tabs    说明: v-model:当前选中项 :tab-position:tab栏显示方向 @tab-click:切换tab栏的事件 JS:

    2024年02月11日
    浏览(30)
  • vue最强table vxe-table 虚拟滚动列表 前端导出

    最近遇到个问题。后台一次性返回2万条列表数据。 并且需求要求所有数据必须全部展示,不能做假分页(不能优化了)。 这些数据的直接来源就是CS客户端。 他们做CS客户端就是一次性加载几万条数据不分页(说这是客户的要求)。 我体验了一把CS客户端,数万条数据放在

    2024年02月12日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包