资讯详情

element 树形表格 列内全选、input同步更改、筛选

需求:树形表格、列内全选/反选。input同步更改数据,筛选数据

效果图:

eebf60fe8da66171a7cf595d83f2be30.png

table组件

style="width: 100%;"

@filter-change="filterChange"

:tree-props="{children: 'children', hasChildren: 'hasChildren'}"

:row-style="{height: '50px'}"

:cell-style="{padding: '0'}"

:header-cell-style="headeRrowStyle"

:indent="20"

:header-row-style="{'border-radius':'10px'}"

@selection-change="selectionChange"

>

:indeterminate="childScope.row.indeterminate[childScope.column.property]"

v-model="childScope.row.checked[childScope.column.property]"

@change="checkChange(childScope)">{ {}}

{ {childScope.row[childScope.column.property]}}

{ {childScope.row[childScope.column.property]}}

{ {childScope.row[childScope.column.property]}}

style="color:#fff"

v-model="allChecked[item.prop]"

@change="allSelect(item.prop)"

>{ {item.name}}

{ {}}

{ {childScope.row[scope.column.property]}}

{ {scope.row[scope.column.property]}}

{ {scope.row[scope.column.property]}}

export default {

name: "l-TableCompont",

data() {

return {

arrFin:{jg:[],ll:[],qt:[],kcts:[]}

};

},

props: {

tableData: {

type: Array,

default () {

return [

{

id: 1,

date: "2016-05-02",

name: "王小虎",

province: "山西",

city: "平遥",

indeterminate:{name:false,address:false,province:false,city:false},

checked:{name:false,address:false,province:false,city:false},pid:null,

address: "上海普陀区金沙江路 1518 弄",zip: 200333,

speed:"30%"

},

{

id: 2,

date: "2016-05-04",

province: "山东",

city: "济南",

indeterminate:{name:false,address:false,province:false,city:false},

name: "王小虎",checked:{name:false,address:false,province:false,city:false},pid:null,

address: "上海普陀区金沙江路 1517 弄",zip: 200333,speed:"30%"

},

{

id: 3,

date: "2016-05-01",

province: "四川",

city: "成都",

indeterminate:{name:false,address:false,province:false,city:false},

name: "王小虎",checked:{name:false,address:false,province:false,city:false},pid:null,

address: "上海普陀区金沙江路 1519 弄",zip: 200333,speed:"30%",

children: [

{

id: 31,

date: "2016-05-099",

pid:3,

province: "天津",

city: "滨海",

indeterminate:{name:false,address:false,province:false,city:false},

name: "王小虎",checked:{name:false,address:false,province:false,city:false},

address: "上海普陀区金沙江路 1519 弄",zip: 200333,speed:"30%",

children:[

{

id: 311,

date: "2016-05-0999",

pid:31,

indeterminate:{name:false,address:false,province:false,city:false},

province: "北京",

city: "朝阳",

name: "王小虎",checked:{name:false,address:false,province:false,city:false},

address: "上海普陀区金沙江路 1519 弄",zip: 200333,speed:"30%"

}

]

},

{

id: 32,

date: "2016-05-098",

pid:3,

province: "南京",

city: "普陀",

indeterminate:{name:false,address:false,province:false,city:false},

name: "王小虎",checked:{name:false,address:false,province:false,city:false},

address: "上海普陀区金沙江路 1519 弄",zip: 200333,speed:"30%"

},

],

},

{

id: 4,

date: "2016-05-03",

indeterminate:{name:false,address:false,province:false,city:false},

name: "王小虎",checked:{name:false,address:false,province:false,city:fals},pid:null,

address: "上海市普陀区金沙江路 1516 弄",

zip: 200333,

province: "南京",

city: "普陀",speed:"30%"

},

{

id:54,

date: "2016-05-08",

name: "王小虎",

province: "上海",

indeterminate:{name:false,address:false,province:false,city:false},

city: "普陀区",checked:{name:false,address:false,province:false,city:false},pid:null,

address: "上海市普陀区金沙江路 1518 弄",

zip: 200333,speed:"30%",

children: [

{

id: 51,

date: "2016-05-099",

pid:3,

province: "天津",

city: "滨海",

indeterminate:{name:false,address:false,province:false,city:false},

name: "王小虎",checked:{name:false,address:false,province:false,city:false},

address: "上海市普陀区金沙江路 1519 弄",zip: 200333,speed:"30%",

children:[

{

id: 511,

date: "2016-05-0999",

pid:31,

indeterminate:{name:false,address:false,province:false,city:false},

province: "北京",

city: "朝阳",speed:"30%",

name: "王小虎",checked:{name:false,address:false,province:false,city:false},

address: "上海市普陀区金沙江路 1519 弄",zip: 200333,

}

]

},

],

},

{

id:45,

date: "2016-05-06",

indeterminate:{name:false,address:false,province:false,city:false},

name: "王小虎",checked:{name:false,address:false,province:false,city:false},pid:null,

province: "上海",

city: "普陀区",

address: "上海市普陀区金沙江路 1518 弄",

zip: 200333,

},

{

id:44,

date: "2016-05-07",

indeterminate:{name:false,address:false,province:false,city:false},

name: "王小虎",checked:{name:false,address:false,province:false,city:false},pid:null,

province: "上海",

city: "普陀区",

address: "上海市普陀区金沙江路 1518 弄",

zip: 200333,

},

]

}

},

colData:{

type:Array,

default(){

return [

{ name: "日期", prop: "date" },

{ name: "姓名", prop: "name" },

{ name: "地址", prop: "address",

children:[

{ name: "省份", prop: "province" },

{ name: "城市", prop: "city" },

{ name: "环比增速", prop: "speed" },

]},

{ name: "zip", prop: "zip" },

]

},

},

// arrFin:{

// type:Object,

// default(){

// return {name:[],address:[],date:[],province:[],city:[]}

// }

// },

allChecked:{

type:Object,

default(){

return {jg:false,ll:false,qt:false,kcts:false}

}

},

},

computed: {

},

mounted() {

this.setParentForLeaves(this.tableData)

},

beforeDestroy() {

window.removeEventListener("resize", () => {

clearTimeout(this.timer);

});

},

watch:{

// tableData:{

// handler(newval){

// console.log(newval,"tableData--newval")

// },

// deep:true,

// immediate:true

// },

},

methods: {

selectionChange(select){

console.log(select,"selectselectselect")

},

filterChange(filters,a){

console.log(filters,a,"filters")

// this.$emit("filtersChange",filters)

for(let i in this.allChecked){

this.allallall(this.tableData,i,false)

}

this.arrFin = {jg:[],ll:[],qt:[],kcts:[]}

},

// 表头全选框

allSelect(val){

console.log(val,"allSelect--val")

this.allallall(this.tableData,val,this.allChecked[val])

this.tableData.forEach(item=>{

let obj={row:item,column:{property:val}}

this.checkChange(obj,true)

})

},

headeRrowStyle({row, column, rowIndex, columnIndex}){

// console.log(row, column, rowIndex, columnIndex,"row, column, rowIndex, columnIndex")

if(column.children)return "background:#3965C2;border:0;font-size:14px;color:#fff;font-weight:bold;"

if(rowIndex == 0)return 'background:#3965C2;font-size:14px;color:#fff;font-weight:bold;border:0'

if(rowIndex == 1)return 'background:#3965C2;font-size:12px;color:#fff;padding:2px 0;border:0'

return ""

},

checkedShow(scope){

if(scope.row.checked[scope.column.property] == undefined)return false

return true

},

speedShow(scope){

return scope.column.label.toString().indexOf('速')!=-1

},

// 表头全选

allallall(root,val,bool){

let innerLoop = (item) => {

this.$set(item.checked,val,bool);

if (item.children instanceof Array) {

item.children.forEach((child) => {

this.$set(child.checked,val,bool);

innerLoop(child);

});

}

};

root.forEach(item=>innerLoop(item))

return root

},

// 关联父子元素

setParentForLeaves(root) {

// 递归改变所有子节点的值

let innerLoop = (item) => {

if (item.children instanceof Array) {

item.children.forEach((child) => {

this.$set(child, "parent", item);

innerLoop(child);

});

}

};

root.forEach(item=>innerLoop(item))

return root

},

//

inputHandler(scope){

let property = scope.column.property

if(!scope.row.checked[property])return

console.log(this.arrFin,"this.arrFin")

let arr = this.arrFin[property]

for(let i in arr){

if(arr[i] && !arr[i].length){

arr[i][property]=scope.row[property]

}

if(arr[i] && arr[i].children){

for(let j in arr[i].children){

arr[i].children[j][property]=scope.row[property]

}

}

}

},

// 查找一级表格是否全选

searchAllcheck(property){

return this.tableData.every(item=>{

return item.checked[property]==true

})

},

checkChange(scope,bool){

console.log(scope,"scope------------")

let paramProperty = scope.column.property

// // 取消表头全选

// if(!bool)this.allChecked[paramProperty]=false

// // 设置表头全选

// if(this.searchAllcheck(paramProperty))this.allChecked[paramProperty]=true

let arr = this.arrFin[paramProperty]

let children = scope.row.children

let checkeds = scope.row.checked[paramProperty]

//选中子集

if(scope.row.children){

var cb = function(list,checked){

arr.indexOf(list)==-1? arr.push(list):arr.splice(arr.indexOf(list),1)

for(var i =0;i

list[i].indeterminate[paramProperty] = false

list[i].checked[paramProperty] = checked

arr.indexOf(list[i])==-1? arr.push(list[i]):arr.splice(arr.indexOf(list[i]),1)

if(list[i].children){

cb(list[i].children,checked)

}

}

}

cb(children,checkeds);

}

scope.row.indeterminate[paramProperty] = false

arr.indexOf(scope.row)==-1? arr.push(scope.row):arr.splice(arr.indexOf(scope.row),1)

this.selectAllParent(scope.row,paramProperty,arr)

},

// 父级全选/反选

selectAllParent(node,property,arr) {

if(!node.parent || property==undefined)return;

let selectedItems = node.parent.children.filter(item=>(item.checked[property]!==false)).length

if(selectedItems === node.parent.children.length){

node.parent.checked[property] = true

arr.indexOf(node.parent)==-1? arr.push(node.parent):arr.splice(arr.indexOf(node.parent),1)

if(node.parent.parent){

arr.indexOf(node.parent.parent)==-1? arr.push(node.parent.parent):arr.splice(arr.indexOf(node.parent.parent),1)

}

// console.log(this.arrFin,"vvvvvv")

}else{

node.parent.checked[property] = false

arr.splice(arr.indexOf(node.parent),1)

}

// }

// 半选择中间态

if(selectedItems0){

node.parent.indeterminate[property] = true

}else{

node.parent.indeterminate[property] = false

}

if(node.parent.parent){

this.selectAllParent(node.parent,property,arr)

}

},

},

};

#l-tableCompont {

flex:1;

.el-input{

flex:1;

.el-input__inner{

border:0;

border-radius:20px;

background:#F9F3F3;

width:100%

}

}

.el-checkbox__input{

// line-height:41px

}

/deep/.el-icon-arrow-right:before {

content: "\e6d9";

font-size:14px;

// font-weight: bold;

}

/deep/.el-table__expand-icon--expanded .el-icon-arrow-right:before{

content: "\e6d8"!important;

font-size:14px;

// font-weight: bold;

}

/deep/.el-table__expand-icon--expanded {

-webkit-transform: rotate(0deg);

transform: rotate(0deg);

}

/deep/.el-table__expand-icon {

padding:0;

}

.el-table__footer-wrapper, .el-table__header-wrapper{

border-radius:10px 10px 0 0;

}

.el-table__fixed{

border-radius:10px 0 0 0

}

.el-table--border, .el-table--group{

border:0

}

.el-checkbox__input.is-checked+.el-checkbox__label{

color:#fff

}

}

父组件

//数据中必须有以下两个属性,对象内属性为有 选择框的 属性名

//indeterminate:{jg:false,ll:false,qt:false,kcts:false},

//checked:{jg:false,ll:false,qt:false,kcts:false},

:tableData="tableData"

:colData="colData" @filtersChange="filtersChange" :temFilterData="temFilterData">

v-for="(item,index) in colData1"

:key="item.prop+''+ index "

:prop="item.prop"

:label="item.name"

:column-key="item.prop"

:filters="[{text: '桂格', value: '桂格'}, {text: '不知道', value: '不知道'},{text: '嗯', value: '嗯'}]"

:filter-method="filterHandler"

fixed

align="center"

width="90"

show-overflow-tooltip

>

//

tableData:[{

id:1,

brand: '桂格',

child:"INSTANT",

spec:"70g",

SKU:"10 1478g",

city:"北京",

day:"180",

ycjx:"180",

jg:"30,10;25,20",

ll:"80",

qt:"23",

xs:200,

tbzs:30,

hbzs:20,

kcts:15,

fdjg:100,

ck15:100,

ck7:100,

sjkcl:100,

tjfhl:100,

bsdqk:50,

ztl:50,

wcl:100,

indeterminate:{jg:false,ll:false,qt:false,kcts:false},

checked:{jg:false,ll:false,qt:false,kcts:false},

},{

brand: '不知道',

child:"INSTANT1",

spec:"70g",

SKU:"10 1478g",

city:"北京",

day:"180",

ycjx:"180",

jg:"30,10;25,20",

ll:"80",

qt:"23",

xs:200,

tbzs:30,

hbzs:20,

kcts:15,

fdjg:100,

ck15:100,

ck7:100,

sjkcl:100,

tjfhl:100,

bsdqk:50,

ztl:50,

wcl:100,

indeterminate:{jg:false,ll:false,qt:false,kcts:false},

checked:{jg:false,ll:false,qt:false,kcts:false},

children:[{

brand: '不知道',

child:"INSTANT1",

spec:"70g",

SKU:"10 1478g",

city:"北京",

day:"180",

ycjx:"180",

jg:"30,10;25,20",

ll:"80",

qt:"23",

xs:200,

tbzs:30,

hbzs:20,

kcts:15,

fdjg:100,

ck15:100,

ck7:100,

sjkcl:100,

tjfhl:100,

bsdqk:50,

ztl:50,

wcl:100,

indeterminate:{jg:false,ll:false,qt:false,kcts:false},

checked:{jg:false,ll:false,qt:false,kcts:false}

},{

brand: '不知道',

child:"INSTANT1",

spec:"70g",

SKU:"10 1478g",

city:"北京",

day:"180",

ycjx:"180",

jg:"30,10;25,20",

ll:"80",

qt:"23",

xs:200,

tbzs:30,

hbzs:20,

kcts:15,

fdjg:100,

ck15:100,

ck7:100,

sjkcl:100,

tjfhl:100,

bsdqk:50,

ztl:50,

wcl:100,

indeterminate:{jg:false,ll:false,qt:false,kcts:false},

checked:{jg:false,ll:false,qt:false,kcts:false}

}]

},

{

brand: '嗯',

child:"INSTANT2",

spec:"70g",

SKU:"10 1478g",

city:"北京",

day:"180",

ycjx:"180",

jg:"30,10;25,20",

ll:"80",

qt:"23",

xs:200,

tbzs:30,

hbzs:20,

kcts:15,

fdjg:100,

ck15:100,

ck7:100,

sjkcl:100,

tjfhl:100,

bsdqk:50,

ztl:50,

wcl:100,

indeterminate:{jg:false,ll:false,qt:false,kcts:false},

checked:{jg:false,ll:false,qt:false,kcts:false}

}],

colData:[

// {name:"品牌",prop:"brand"},

// {name:"子品牌",prop:"child"},

// {name:"规格",prop:"spec"},

// {name:"SKU",prop:"SKU"},

// {name:"城市",prop:"city"},

{name:"过去30天销量参考",prop:"day"},

{name:"预测基线",

children:[{name:"(箱数)",prop:"ycjx"}]

},

{name:"价格/促销",prop:"jg"},

{name:"流量",prop:"ll"},

{name:"其他",prop:"qt"},

{name:"预测调整结果",

children:[

{name:"箱数",prop:"xs"},

{name:"同比增速",prop:"tbzs"},

{name:"环比增速",prop:"hbzs"}

]

},

{name:"安全库存天数",prop:"kcts"},

{name:"推荐KA库存量",

children:[

{name:"浮动结果",prop:"fdjg"},

{name:"15天参考",prop:"ck15"},

{name:"7天参考",prop:"ck7"}

]

},

{name:"实际KA库存量",prop:"sjkcl"},

{name:"推荐发货量",prop:"tjfhl"},

{name:"百事当前库存",prop:"bsdql"},

{name:"在途量",prop:"ztl"},

{name:"预期完成率",prop:"wcl"},

],

colData1:[

{name:"品牌",prop:"brand"},

{name:"子品牌",prop:"child"},

{name:"规格",prop:"spec"},

{name:"SKU",prop:"SKU"},

{name:"城市",prop:"city"},

],

标签: 开关三极管3ck15a

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台