vue element ui树形结构table级联选择问题

vue element ui树形结构table级联选择问题
一个树形结构table,想勾选子级的时候父级的选择框被半勾选上,像全选框那样,子级选中父级被勾选上的操作已经实现,应该如何修改成半选,感谢各位

 <el-table

ref="multipleTable"

:data="helpData"

:header-cell-style="{ 'text-align': 'center' }"

:cell-style="{ 'text-align': 'center' }"

:height="tableHeight"

style="max-height: 528px;"

v-loading="helpDataStatus"

highlight-current-row

@select="handleSelect"

@select-all="handleSelectAll"

@row-click="handleCurrentHelpTable"

@selection-change="handleSelectionChange"

row-key="id"

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

>

所有的级联操作

// 全选操作

handleSelectAll() {

const isAllSelected = this.$refs.multipleTable.store.states.isAllSelected;

var _handleSelectAll = (data) => {

data.forEach(item => {

this.$refs.multipleTable.toggleRowSelection(item, isAllSelected)

_handleSelectAll(item.children || [])

})

}

_handleSelectAll(this.helpData)

},

// 勾选数据事件

handleSelect(selection, current) {

// 判断selection中是否存在current,若是存在那么就代表是被勾选上了,若是不存在代表是取消勾选了

const isChecked = !!selection.find((item) => item.id === current.id)

if (!isChecked) {

// 那么其所有的祖先也应该被取消勾选

this.uncheckedParents(selection, current)

// 那么其所有的后代也应该被取消勾选

this.toggleCheckedChildrens(selection, current, false)

} else {

// 如果当前项被勾选

// 那么若同一组的元素都被勾选了,那么父元素将也被勾选,依次往上类推

// this.checkedParents(selection)

// 那么其所有的后代都要被勾选

this.toggleCheckedChildrens(selection, current, true)

}

console.log(selection, current, 'selection,current')

},

// 勾选子级

toggleCheckedChildrens(selection, item, isChecked) {

var _toggleCheckedChildrens = (data) => {

data.find((element) => {

this.$refs.multipleTable.toggleRowSelection(element, isChecked)

if (isChecked && !selection.find((item) => item.id === element.id)) {

selection.push(element)

} else if (

!isChecked &&

selection.find((item) => item.id === element.id)

) {

for (let i = selection.length - 1; i >= 0; i--) {

if (selection[i].id === element.id) {

selection.splice(i, 1)

break

}

}

}

_toggleCheckedChildrens(element.children || [])

})

}

_toggleCheckedChildrens(item.children || [])

},

// 选中子级,勾选父级

checkedParents(selection) {

var _checkedParents = (element) => {

const children = element.children

if (children && children.length) {

// 如果某一条子级被选中,返回

const anyChildrenChecked = children.some((child) => {

return _checkedParents(child)

})

// 如果所有子级被选中,返回

const allChildrenChecked = children.every((child) => {

return _checkedParents(child)

})

// 如果所有子节点被选中,父节点也被选中

if (allChildrenChecked) {

this.$refs.multipleTable.toggleRowSelection(element, true)

if (!selection.find((item) => item.id === element.id)) {

selection.push(element)

}

}

// 如果任意一个子节点被选中,父节点也被选中

if (anyChildrenChecked) {

console.log(element,'-=-=-=-=-=-=-=')

this.$refs.multipleTable.toggleRowSelection(element, true)

if (!selection.find((item) => item.id === element.id)) {

selection.push(element)

}

}

}

return selection.find((item) => item.id === element.id)

}

this.helpData.forEach((element) => {

// 导入每一条数据

_checkedParents(element)

})

},

uncheckedParents(selection, item) {

var _uncheckedParents = (data) => {

return data.find((element) => {

if (element.id === item.id) {

return true

} else if (_uncheckedParents(element.children || [])) {

this.$refs.multipleTable.toggleRowSelection(element, false)

for (let i = selection.length - 1; i >= 0; i--) {

if (selection[i].id === element.id) {

selection.splice(i, 1)

break

}

}

return true

} else {

return false

}

})

}

_uncheckedParents(selection)

},

以上是 vue element ui树形结构table级联选择问题 的全部内容, 来源链接: utcz.com/p/937102.html

回到顶部