过滤机构树,vue3+ant tree
<InputSearch v-model:value="searchValue" @change="filterOrg" style="margin-bottom: 8px"
placeholder="搜索" />
<Tree autoExpandParent v-model:checkedKeys="sendForm.checkedKeys" checkable :tree-data="treeOrg"
:replaceFields="{children:'sysOrgList', title:'name', key:'id'}"
@check="handleCheck">
<template #title="{ name }">
<span v-if="name.indexOf(searchValue) > -1">
{{ name.substr(0, name.indexOf(searchValue)) }}
<span style="color: #f50">{{ searchValue }}</span>
{{ name.substr(name.indexOf(searchValue) + searchValue.length) }}
</span>
<span v-else>{{ name }}</span>
</template>
</Tree>
const changeTree = (arr) => {
arr.forEach(item => {
if (Boolean(item.sysOrgList?.length)) {
item.sysOrgList = [...item.sysOrgList, ...item.sysUserList]
changeTree(item.sysOrgList)
} else {
if (Boolean(item?.sysUserList)) {
item.sysOrgList = [...item.sysUserList]
}
}
})
}
const treeOrg: any = ref([])
async function selectRole() {
let res = await listSysOrgAndUserVO()
treeData.value = res.filter((item) => { return item.name === "公司" })
changeTree(treeData.value)
treeOrg.value = [...treeData.value]
}
const filterOrg=()=> {
let arr: any = []
let orgArray:any = JSON.parse(JSON.stringify(treeData.value))//进行深拷贝
orgArray.forEach(item => {
if (Boolean(item.sysOrgList?.length)) {
item.sysOrgList = filterTreeNodeFun(item.sysOrgList, searchValue.value)
if (item.sysOrgList.length) {
arr.push(item)
}
} else
if (item.name.indexOf(searchValue.value) > -1) {
arr.push(item)
}
})
if (arr[0]?.sysOrgList.length) {
treeOrg.value = [...arr]
} else {
treeOrg.value = []
}
}
const filterTreeNodeFun = (arrList, value) => {
let arr: any = []
arrList.forEach(item => {
if (Boolean(item.sysOrgList?.length)) {
item.sysOrgList = filterTreeNodeFun(item.sysOrgList, value)
if (item.sysOrgList.length) {
arr.push(item)
}
} else
if (item.name.indexOf(value) > -1) {
arr.push(item)
}
})
return arr
};