/* * treeId:节点树ID * keyword:模糊查询输入框的id,如:“#keyword” * notSearchType:不参与查询的节点类型 * typeSonNode:不参与查询的节点的子孙节点是否也不参与匹配,默认为false,即子节点参与匹配 * */ window.newFuzzySearch = function ( treeId, keyword, notSearchType = [], typeSonNode = false, dispatch = '' ) { //获取所有节点数据 let zTreeObj = $.fn.zTree.getZTreeObj(treeId) let idKey = zTreeObj.setting.data.simpleData.idKey let nodes = zTreeObj.getNodes() //过滤掉不要的 function getCustomNodes(allNodes) { // let allNode = JSON.parse(JSON.stringify(allNodes)) let notSearchTypeNodesIds = [] if (notSearchType.length) { allNodes.forEach((allNodeItem) => { if (notSearchType.includes(allNodeItem.sourceType)) { notSearchTypeNodesIds.push(allNodeItem[idKey]) } }) //typeSonNode为true时,循环notSearchType类型的节点,找出其子节点 let res = [] if (typeSonNode) { notSearchTypeNodesIds.forEach((id, index) => { let nodes = zTreeObj.transformToArray(zTreeObj.getNodeByParam(idKey, id, null)) nodes.forEach((item) => { res.push(item[idKey]) }) }) notSearchTypeNodesIds = res } } let res = [] allNodes.forEach((item, index) => { if (!notSearchTypeNodesIds.includes(item[idKey])) { // console.log(index) res.push(item) } }) allNodes = res return allNodes } /*let allNodes = zTreeObj.transformToArray(nodes); let nodeChildren = getCustomNodes(allNodes)*/ // console.log("nodeChildren", nodeChildren) // console.log("allNodes", allNodes) //隐藏所有节点 function hideAllNode(allNodes) { if (!allNodes || !Array.isArray(allNodes)) { console.warn('hideAllNode: allNodes 参数无效') return } let nodeChildren = getCustomNodes(allNodes) if (nodeChildren && nodeChildren.length > 0) { zTreeObj.hideNodes(nodeChildren) } } //模糊匹配所有符合的节点 function search(contrast, allNodes) { if (!allNodes || !Array.isArray(allNodes)) { console.warn('search: allNodes 参数无效') return } let nodeChildren = getCustomNodes(allNodes) if (!nodeChildren) { return } hideAllNode(allNodes) nodeChildren.forEach((item) => { if (item.oldname) { item.sourceName = item.oldname zTreeObj.updateNode(item) } if (contrast) { if ((item.sourceName || '').indexOf(contrast) > -1) { console.log('sourceName包含关键字') console.log(item) console.log(item.sourceName) item.oldname = item.sourceName item.highlight = true let F = new RegExp(contrast, 'gi') item.sourceName = item.oldname.replace(F, function (h) { let str = '' + h + '' return str }) // let a = item.name // a = '' + a + "" // item.name = a zTreeObj.setting.view.nameIsHTML = true item.checked = true // zTreeObj.setting.view.fontCss["color"] = "#8B0000" zTreeObj.updateNode(item) zTreeObj.showNode(item) showNodePath(item) } /*zTreeObj.updateNode(item); zTreeObj.showNode(item); showNodePath(item)*/ } }) /*let searchNodes = zTreeObj.getNodesByParamFuzzy('name', contrast); console.log('searchNodes', searchNodes) searchNodes.forEach(function (node) { node.checked = true zTreeObj.showNode(node); showNodePath(node) })*/ zTreeObj.expandAll(true) } //将查找到的节点父节点按路径设置为显示 function showNodePath(node) { let parrentNodes = node.getPath() parrentNodes && parrentNodes.forEach(function (node) { zTreeObj.showNode(node) }) } window.treeSearchCb = (value = undefined) => { let inputValue = value || '' // console.log("搜索值", inputValue) nodes = zTreeObj.getNodes() let allNodes = zTreeObj.transformToArray(nodes) let nodeChildren = getCustomNodes(allNodes) console.log('nodeChildren', nodeChildren) search(inputValue, allNodes) //当查询条件为空时,显示所有节点 console.log('inputValue', inputValue) if ((inputValue == null || inputValue === '') && nodeChildren.length >= 0) { nodeChildren.forEach(function (node) { // node.checked = false zTreeObj.showNode(node) }) // zTreeObj.expandAll(false); } } if (dispatch == '') { //input框值改变时 $(keyword).bind('input propertychange', treeSearchCb) } else { // $(dispatch).bind('click', treeSearchCb) } }