iview多列指标筛选的表格

前言:

想要实现Iview UI专业版的多列指标筛选的表格不是梦,就像这样与表格联动实现筛选列功能

1、首先可以先看看iview免费版的多列指标筛选的表格(https://www.iviewui.com/components/table

2、代码案例

        1)先做点击出现列设置的icon

<Dropdown trigger="custom" :visible="visible" ref="dropRef">
   <Tooltip content="列设置" placement="top" style="margin-left: 2px" >
       <Icon type="md-options" size='17' @click="visible = !visible" class="oeration-data-bomactionbox-icon"/>
   </Tooltip>
   <DropdownMenu slot="list">
      <div class="rowset-title">列展示</div>
      <DropdownItem v-for="item in columnDisplay" :key="item.id" >
         <CheckboxGroup v-model="tableColumnsChecked" @on-change="changeTableColumns" >
           <Checkbox :label="item.label">{{item.text}}</Checkbox>
         </CheckboxGroup> 
      </DropdownItem>
   </DropdownMenu>
</Dropdown>

 先用了一下下拉菜单组件把最上面的icon和下面展示的复选框都括在一起,Dropdown 的为什么选择custom触发而不选择click是因为如果选择click触发那么点击一次下拉菜单就会缩回,如果用custom触发就不会缩回给我们一直选择想筛选的列设置,并用:visible="visible"控制下拉框的显示。 (css就不放了哦)

        2)data数据初始化化

data () {
   return {
        visible:false,
        columnDisplay:
           {id:0,label:"id",text:'id'},
           {id:1,label:"name",text:'用户名'},
           {id:2,label:"number",text:'手机号'},
           {id:3,label:"age",text:'年龄'},
           {id:4,label:"email",text:'邮箱'},
           {id:5,label:"sex",text:'性别'},
           {id:6,label:"state",text:'状态'},
           {id:7,label:"date",text:'创建时间'},
           {id:8,label:"action",text:'操作'},
        tableColumnsChecked:                    ["id","name","number","age","email","sex","state","date","action"],
//tableColumnsChecked设置的是复选框初始选中项也是初始哪些表格列可以展示
        
   }
}

 3)在methods中添加方法

            // 多列指标筛选的表格
            changeTableColumns () {
                this.columns = this.getTableColumns();
                //注1:这里的columns是我表格列的名字要换成你们自己
            },
            getTableColumns () {
                const tableColumnList = {
                    //注2:这里所有的列名都要和复选框的名字对应要不是表格就不显示了
                    selection: {
                        type: 'selection',
                        align: 'center',
                        width:60
                    },
                    id: {
                        title: 'id',
                        key: 'id',
                        align: 'center',
                        width:80
                    },
                    name:{
                        title: '用户名',
                        key: 'name',
                        align: 'center',
                    },
                    number:{
                        title: '手机号',
                        key: 'number',
                        align: 'center',
                    },
                    age:{
                        title: '年龄',
                        key: 'age',
                        align: 'center',
                    },
                    email:{
                        title: '邮箱',
                        key: 'email',
                        align: 'center',
                    },
                    sex:{
                        title: '性别',
                        key: 'sex',
                        align: 'center',
                    },
                    state:{
                        title: '状态',
                        key: 'state',
                        align: 'center',
                        slot:'state'
                    },
                    date:{
                        title: '创建时间',
                        key: 'date',
                        align: 'center',
                    },
                    action:{
                        title: '操作',
                        key: 'action',
                        align: 'center',
                        fixed: 'right',
                        slot:'action'
                    }
                };
                let data = [tableColumnList.selection];
                this.tableColumnsChecked.forEach(col => data.push(tableColumnList[col]));
                return data;
                //这三行是iview官网抄的
            },
            handleDrop(){
                 this.visible=!this.visible
            },
            outClick(e){
                let dropRef= this.$refs.dropRef.$el
                if(!dropRef.contains(e.target)&&this.visible){
                    this.visible=false
                }
            },
            //handleDrop()函数和outClick()函数都是设置当点击下拉菜单本身的时候不实现缩回,当点击除自身以外的时候缩回下拉菜单

4)mounted钩子函数

        设置初始化页面完成后,添加点击事件this.outClick和this.changeTableColumns数据初始化

mounted:function(){
            document.addEventListener('click',this.outClick);
            this.changeTableColumns();
        },

5)销毁监听事件

destroyed(){
            document.removeEventListener('click',this.outClick)
        }

最后就完成啦--看看效果

 点击下拉菜单不缩回的方法也是我和一个前辈学的,如果哪里说的不对或者还不懂得欢迎大家评论和批评指正

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会写代码的单人青

耶耶耶!!!感谢你的打赏!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值