<template>
<el-select
v-model="selectList"
placeholder="请选择"
multiple
@change="selectChange">
<el-option :value="selectValue" style="height: auto" disabled>
<el-input
size="mini"
placeholder="搜索区域"
v-model="filterText">
</el-input>
<el-tree
:data="regionOptions"
show-checkbox
node-key="oid"
ref="tree1111"
highlight-current
:props="defaultProps"
:filter-node-method="filterNode"
@check-change="handleCheckChange">
</el-tree>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
defaultProps: {
label: 'thisName',
children: 'children',
key:'oid',
value:'oid'
},
selectList: [],
selectValue: [],
filterText: ""
};
},
mounted () {
this.$on('change', function() {
this.handleCheckChange()
})
},
watch: {
filterText(val) {
this.$refs.tree1111.filter(val);
}
},
methods: {
// select框值改变时候触发的事件
selectChange(e) {
var arrNew = []
var dataLength = this.selectValue.length
var eleng = e.length
for (let i = 0; i < dataLength; i++) {
for (let j = 0; j < eleng; j++) {
if (e[j] === this.selectValue[i].thisName) {
arrNew.push(this.selectValue[i])
}
}
}
this.$refs.tree1111.setCheckedNodes(arrNew) //设置勾选的值
},
// tree1111选择改变时候触发的事件
handleCheckChange() {
let res = this.getSimpleCheckedNodes(this.$refs.tree1111)
let arrLabel = []
let arr = []
res.forEach((item) => {
arrLabel.push(item.thisName)
arr.push(item)
});
this.selectValue = arr
this.selectList = arrLabel
},
// tree1111搜索
filterNode(value, data) {
if (!value) return true
return data.thisName.indexOf(value) !== -1
},
getSimpleCheckedNodes(store) {
const checkedNodes = [];
const traverse = function(node) {
const childNodes = node.root ? node.root.childNodes : node.childNodes;
childNodes.forEach(child => {
if (child.checked) {
checkedNodes.push(child.data);
}
if (child.indeterminate) {
traverse(child);
}
});
};
traverse(store)
return checkedNodes;
},
}
}
</script>
el-select嵌套el-tree子节点全选只返回父节点方案
最新推荐文章于 2025-07-13 12:26:32 发布