| | |
| | | </template> |
| | | |
| | | <script> |
| | | import * as $ from "jquery"; |
| | | import { Loading } from "element-ui"; |
| | | import * as $ from "jquery" |
| | | import { Loading } from "element-ui" |
| | | |
| | | if (!window.jQuery) { |
| | | window.jQuery = $; |
| | | window.jQuery = $ |
| | | } |
| | | |
| | | // require("@ztree/ztree_v3/js/jquery.ztree.all"); |
| | | require("./ztree_v3/jquery.ztree.all"); |
| | | require("./ztree_v3/jquery.ztree.exhide"); |
| | | require("./ztree_v3/jquery.ztree.all") |
| | | require("./ztree_v3/jquery.ztree.exhide") |
| | | |
| | | export default { |
| | | props: { |
| | |
| | | type: Object, |
| | | require: false, |
| | | default: function () { |
| | | return {}; |
| | | }, |
| | | return {} |
| | | } |
| | | }, |
| | | nodes: { |
| | | type: Array, |
| | | require: true, |
| | | default: function () { |
| | | return []; |
| | | }, |
| | | }, |
| | | return [] |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | showLine: true, |
| | | showIcon: true, // default to hide icon |
| | | addHoverDom: this.addHoverDom, |
| | | removeHoverDom: this.removeHoverDom, |
| | | removeHoverDom: this.removeHoverDom |
| | | }, |
| | | check: { |
| | | chkboxType: { Y: "", N: "" }, |
| | | enable: this.showCheckbox, |
| | | enable: this.showCheckbox |
| | | }, |
| | | callback: { |
| | | onAsyncError: (...arg) => { |
| | | this.$emit("onAsyncError", ...arg); |
| | | this.$emit("onAsyncError", ...arg) |
| | | }, |
| | | onAsyncSuccess: (...arg) => { |
| | | this.$emit("onAsyncSuccess", ...arg); |
| | | this.$emit("onAsyncSuccess", ...arg) |
| | | }, |
| | | onCheck: (...arg) => { |
| | | this.$emit("onCheck", ...arg); |
| | | this.$emit("onCheck", ...arg) |
| | | }, |
| | | onClick: (...arg) => { |
| | | this.$emit("onClick", ...arg); |
| | | this.removeHoverIcon(...arg); |
| | | this.$emit("onClick", ...arg) |
| | | this.removeHoverIcon(...arg) |
| | | }, |
| | | onCollapse: (...arg) => { |
| | | this.$emit("onCollapse", ...arg); |
| | | this.$emit("onCollapse", ...arg) |
| | | }, |
| | | onDblClick: (...arg) => { |
| | | this.$emit("onDblClick", ...arg); |
| | | this.$emit("onDblClick", ...arg) |
| | | }, |
| | | onDrag: (...arg) => { |
| | | this.$emit("onDrag", ...arg); |
| | | this.$emit("onDrag", ...arg) |
| | | }, |
| | | onDragMove: (...arg) => { |
| | | this.$emit("onDragMove", ...arg); |
| | | this.$emit("onDragMove", ...arg) |
| | | }, |
| | | onDrop: (...arg) => { |
| | | this.$emit("onDrop", ...arg); |
| | | this.$emit("onDrop", ...arg) |
| | | }, |
| | | onExpand: (...arg) => { |
| | | this.$emit("onExpand", ...arg); |
| | | this.$emit("onExpand", ...arg) |
| | | }, |
| | | onMouseDown: (...arg) => { |
| | | this.$emit("onMouseDown", ...arg); |
| | | this.$emit("onMouseDown", ...arg) |
| | | }, |
| | | onMouseUp: (...arg) => { |
| | | this.$emit("onMouseUp", ...arg); |
| | | this.$emit("onMouseUp", ...arg) |
| | | }, |
| | | onRemove: (...arg) => { |
| | | this.$emit("onRemove", ...arg); |
| | | this.$emit("onRemove", ...arg) |
| | | }, |
| | | onRename: (...arg) => { |
| | | this.$emit("onRename", ...arg); |
| | | this.$emit("onRename", ...arg) |
| | | }, |
| | | onRightClick: (...arg) => { |
| | | this.$emit("onRightClick", ...arg); |
| | | }, |
| | | }, |
| | | this.$emit("onRightClick", ...arg) |
| | | } |
| | | } |
| | | }, |
| | | keyWord: "", |
| | | options: { |
| | | target: "", |
| | | }, |
| | | }; |
| | | target: "" |
| | | } |
| | | } |
| | | }, |
| | | watch: { |
| | | nodes: { |
| | | handler: function (nodes) { |
| | | this.list = nodes; |
| | | this.list = nodes |
| | | |
| | | // update tree |
| | | if (this.ztreeObj) { |
| | | this.ztreeObj.destroy(); |
| | | this.ztreeObj.destroy() |
| | | } |
| | | this.$nextTick(() => { |
| | | this.ztreeObj = $.fn.zTree.init( |
| | | $("#" + this.ztreeId), |
| | | Object.assign({}, this.ztreeSetting, this.setting), |
| | | this.list |
| | | ); |
| | | console.log("---------"); |
| | | this.fuzzySearch(this.ztreeObj, "#key", null, true); //初始化模糊搜索方法 |
| | | this.$emit("onCreated", this.ztreeObj); |
| | | }); |
| | | ) |
| | | this.fuzzySearch(this.ztreeObj, "#key", null, true) //初始化模糊搜索方法 |
| | | this.$emit("onCreated", this.ztreeObj) |
| | | }) |
| | | }, |
| | | deep: true, |
| | | immediate: true, |
| | | immediate: true |
| | | }, |
| | | showCheckbox: { |
| | | handler: function () { |
| | | let top = $("#" + this.ztreeId) |
| | | .parent() |
| | | .scrollTop(); |
| | | .scrollTop() |
| | | |
| | | this.ztreeSetting.check.enable = this.showCheckbox; |
| | | this.ztreeSetting.check.enable = this.showCheckbox |
| | | |
| | | if (this.ztreeObj) { |
| | | this.list = this.ztreeObj.getNodes(); |
| | | this.ztreeObj.destroy(); |
| | | this.list = this.ztreeObj.getNodes() |
| | | this.ztreeObj.destroy() |
| | | } |
| | | this.$nextTick(() => { |
| | | this.ztreeObj = $.fn.zTree.init( |
| | | $("#" + this.ztreeId), |
| | | Object.assign({}, this.ztreeSetting, this.setting), |
| | | this.list |
| | | ); |
| | | ) |
| | | $("#" + this.ztreeId) |
| | | .parent() |
| | | .scrollTop(top); |
| | | this.$emit("onCreated", this.ztreeObj); |
| | | }); |
| | | .scrollTop(top) |
| | | this.$emit("onCreated", this.ztreeObj) |
| | | }) |
| | | }, |
| | | immediate: true, |
| | | }, |
| | | immediate: true |
| | | } |
| | | }, |
| | | methods: { |
| | | addHoverDom(treeid, treeNode) { |
| | | let _vue = this; |
| | | const item = document.getElementById(`${treeNode.tId}_a`); |
| | | let _vue = this |
| | | const item = document.getElementById(`${treeNode.tId}_a`) |
| | | |
| | | // 文件夹新增按钮 |
| | | if ( |
| | |
| | | !this.readonly && |
| | | !this.gb28181 |
| | | ) { |
| | | const btn = document.createElement("i"); |
| | | btn.id = `${treeid}_${treeNode.id}_btn`; |
| | | btn.classList.add("el-icon-circle-plus-outline"); |
| | | btn.classList.add("primary"); |
| | | const btn = document.createElement("i") |
| | | btn.id = `${treeid}_${treeNode.id}_btn` |
| | | btn.classList.add("el-icon-circle-plus-outline") |
| | | btn.classList.add("primary") |
| | | // btn.innerText = '删除'; |
| | | btn.addEventListener("click", (e) => { |
| | | e.stopPropagation(); |
| | | e.stopPropagation() |
| | | // this.clickRemove(treeNode) |
| | | _vue.$emit("onAddNode", treeNode); |
| | | }); |
| | | _vue.$emit("onAddNode", treeNode) |
| | | }) |
| | | |
| | | item.appendChild(btn); |
| | | item.appendChild(btn) |
| | | } |
| | | |
| | | // 文件夹删除按钮 |
| | |
| | | !treeNode.children && |
| | | !this.gb28181 |
| | | ) { |
| | | const btn = document.createElement("i"); |
| | | btn.id = `${treeid}_${treeNode.id}_btn`; |
| | | btn.classList.add("el-icon-remove-outline"); |
| | | btn.classList.add("danger"); |
| | | const btn = document.createElement("i") |
| | | btn.id = `${treeid}_${treeNode.id}_btn` |
| | | btn.classList.add("el-icon-remove-outline") |
| | | btn.classList.add("danger") |
| | | // btn.innerText = '删除'; |
| | | btn.addEventListener("click", (e) => { |
| | | e.stopPropagation(); |
| | | e.stopPropagation() |
| | | // this.clickRemove(treeNode) |
| | | _vue.$emit("onRemoveNode", treeNode); |
| | | }); |
| | | _vue.$emit("onRemoveNode", treeNode) |
| | | }) |
| | | |
| | | item.appendChild(btn); |
| | | item.appendChild(btn) |
| | | } |
| | | |
| | | // 文件夹编辑按钮 |
| | | if ( |
| | | item && |
| | | !item.querySelector(".el-icon-edit") && |
| | | treeNode.isParent && |
| | | !this.readonly |
| | | ) { |
| | | const btn = document.createElement("i"); |
| | | btn.id = `${treeid}_${treeNode.id}_btn`; |
| | | btn.classList.add("el-icon-edit"); |
| | | btn.classList.add("primary"); |
| | | if (item && !item.querySelector(".el-icon-edit") && treeNode.isParent && !this.readonly) { |
| | | const btn = document.createElement("i") |
| | | btn.id = `${treeid}_${treeNode.id}_btn` |
| | | btn.classList.add("el-icon-edit") |
| | | btn.classList.add("primary") |
| | | // btn.innerText = '删除'; |
| | | btn.addEventListener("click", (e) => { |
| | | e.stopPropagation(); |
| | | e.stopPropagation() |
| | | // this.clickRemove(treeNode) |
| | | _vue.$emit("onRenameNode", treeNode); |
| | | }); |
| | | _vue.$emit("onRenameNode", treeNode) |
| | | }) |
| | | |
| | | item.appendChild(btn); |
| | | item.appendChild(btn) |
| | | } |
| | | |
| | | // 添加摄像机按钮 |
| | | if ( |
| | | item && |
| | | !item.querySelector(".iconshishishipin") && |
| | | treeNode.isParent && |
| | | !this.readonly && |
| | | !this.gb28181 |
| | | ) { |
| | | const btn = document.createElement("i"); |
| | | btn.id = `${treeid}_${treeNode.id}_btn`; |
| | | btn.classList.add("iconfont"); |
| | | btn.classList.add("iconshishishipin"); |
| | | btn.classList.add("primary"); |
| | | btn.classList.add("icon-fix"); |
| | | if (item && !item.querySelector(".iconshishishipin") && treeNode.isParent && !this.readonly && !this.gb28181) { |
| | | const btn = document.createElement("i") |
| | | btn.id = `${treeid}_${treeNode.id}_btn` |
| | | btn.classList.add("iconfont") |
| | | btn.classList.add("iconshishishipin") |
| | | btn.classList.add("primary") |
| | | btn.classList.add("icon-fix") |
| | | // btn.innerText = '删除'; |
| | | btn.addEventListener("click", (e) => { |
| | | e.stopPropagation(); |
| | | e.stopPropagation() |
| | | // this.clickRemove(treeNode) |
| | | _vue.$emit("onAddDevice", treeNode.id); |
| | | }); |
| | | _vue.$emit("onAddDevice", treeNode.id) |
| | | }) |
| | | |
| | | item.appendChild(btn); |
| | | item.appendChild(btn) |
| | | } |
| | | |
| | | // 导入摄像机按钮 |
| | | if ( |
| | | item && |
| | | !item.querySelector(".icondaoru") && |
| | | treeNode.isParent && |
| | | !this.readonly && |
| | | !this.gb28181 |
| | | ) { |
| | | const btn = document.createElement("i"); |
| | | btn.id = `${treeid}_${treeNode.id}_btn`; |
| | | btn.classList.add("iconfont"); |
| | | btn.classList.add("icondaoru"); |
| | | btn.classList.add("primary"); |
| | | btn.classList.add("icon-fix"); |
| | | if (item && !item.querySelector(".icondaoru") && treeNode.isParent && !this.readonly && !this.gb28181) { |
| | | const btn = document.createElement("i") |
| | | btn.id = `${treeid}_${treeNode.id}_btn` |
| | | btn.classList.add("iconfont") |
| | | btn.classList.add("icondaoru") |
| | | btn.classList.add("primary") |
| | | btn.classList.add("icon-fix") |
| | | // btn.innerText = '删除'; |
| | | btn.addEventListener("click", (e) => { |
| | | e.stopPropagation(); |
| | | e.stopPropagation() |
| | | // this.clickRemove(treeNode) |
| | | _vue.$emit("onImport", treeNode.id); |
| | | }); |
| | | _vue.$emit("onImport", treeNode.id) |
| | | }) |
| | | |
| | | item.appendChild(btn); |
| | | item.appendChild(btn) |
| | | } |
| | | |
| | | // 查看底图按钮 |
| | | if ( |
| | | item && |
| | | !item.querySelector(".icontupian1") && |
| | | treeNode.type == "camera" |
| | | ) { |
| | | const btn = document.createElement("i"); |
| | | btn.id = `${treeid}_${treeNode.id}_btn`; |
| | | btn.classList.add("iconfont"); |
| | | btn.classList.add("icontupian1"); |
| | | btn.classList.add("primary"); |
| | | btn.classList.add("icon-fix"); |
| | | if (item && !item.querySelector(".icontupian1") && treeNode.type == "camera") { |
| | | const btn = document.createElement("i") |
| | | btn.id = `${treeid}_${treeNode.id}_btn` |
| | | btn.classList.add("iconfont") |
| | | btn.classList.add("icontupian1") |
| | | btn.classList.add("primary") |
| | | btn.classList.add("icon-fix") |
| | | // btn.innerText = '删除'; |
| | | btn.addEventListener("click", (e) => { |
| | | e.stopPropagation(); |
| | | e.stopPropagation() |
| | | // this.clickRemove(treeNode) |
| | | _vue.$emit("onShowPic", treeNode); |
| | | }); |
| | | _vue.$emit("onShowPic", treeNode) |
| | | }) |
| | | |
| | | item.appendChild(btn); |
| | | item.appendChild(btn) |
| | | } |
| | | }, |
| | | removeHoverIcon(evt, treeId, item) { |
| | | this.removeHoverDom(treeId, item); |
| | | this.removeHoverDom(treeId, item) |
| | | }, |
| | | removeHoverDom(treeid, treeNode) { |
| | | const item = document.getElementById(`${treeNode.tId}_a`); |
| | | const item = document.getElementById(`${treeNode.tId}_a`) |
| | | if (item) { |
| | | let btn = item.querySelector(".el-icon-circle-plus-outline"); |
| | | let btn = item.querySelector(".el-icon-circle-plus-outline") |
| | | if (btn) { |
| | | item.removeChild(item.querySelector(".el-icon-circle-plus-outline")); |
| | | item.removeChild(item.querySelector(".el-icon-circle-plus-outline")) |
| | | } |
| | | |
| | | btn = item.querySelector(".el-icon-remove-outline"); |
| | | btn = item.querySelector(".el-icon-remove-outline") |
| | | if (btn) { |
| | | item.removeChild(item.querySelector(".el-icon-remove-outline")); |
| | | item.removeChild(item.querySelector(".el-icon-remove-outline")) |
| | | } |
| | | |
| | | btn = item.querySelector(".el-icon-edit"); |
| | | btn = item.querySelector(".el-icon-edit") |
| | | if (btn) { |
| | | item.removeChild(item.querySelector(".el-icon-edit")); |
| | | item.removeChild(item.querySelector(".el-icon-edit")) |
| | | } |
| | | |
| | | btn = item.querySelector(".iconshishishipin"); |
| | | btn = item.querySelector(".iconshishishipin") |
| | | if (btn) { |
| | | item.removeChild(item.querySelector(".iconshishishipin")); |
| | | item.removeChild(item.querySelector(".iconshishishipin")) |
| | | } |
| | | |
| | | btn = item.querySelector(".icondaoru"); |
| | | btn = item.querySelector(".icondaoru") |
| | | if (btn) { |
| | | item.removeChild(item.querySelector(".icondaoru")); |
| | | item.removeChild(item.querySelector(".icondaoru")) |
| | | } |
| | | |
| | | btn = item.querySelector(".icontupian1"); |
| | | btn = item.querySelector(".icontupian1") |
| | | if (btn) { |
| | | item.removeChild(item.querySelector(".icontupian1")); |
| | | item.removeChild(item.querySelector(".icontupian1")) |
| | | } |
| | | } |
| | | }, |
| | | fuzzySearch(zTreeObj, searchField, isHighLight, isExpand) { |
| | | const _this = this; |
| | | const _this = this |
| | | |
| | | if (!zTreeObj) { |
| | | alert("fail to get ztree object"); |
| | | alert("fail to get ztree object") |
| | | } |
| | | var nameKey = zTreeObj.setting.data.key.name; //get the key of the node name |
| | | isHighLight = isHighLight === false ? false : true; //default true, only use false to disable highlight |
| | | isExpand = isExpand ? true : false; // not to expand in default |
| | | zTreeObj.setting.view.nameIsHTML = isHighLight; //allow use html in node name for highlight use |
| | | var nameKey = zTreeObj.setting.data.key.name //get the key of the node name |
| | | isHighLight = isHighLight === false ? false : true //default true, only use false to disable highlight |
| | | isExpand = isExpand ? true : false // not to expand in default |
| | | zTreeObj.setting.view.nameIsHTML = isHighLight //allow use html in node name for highlight use |
| | | |
| | | var metaChar = "[\\[\\]\\\\^\\$\\.\\|\\?\\*\\+\\(\\)]"; //js meta characters |
| | | var rexMeta = new RegExp(metaChar, "gi"); //regular expression to match meta characters |
| | | var metaChar = "[\\[\\]\\\\^\\$\\.\\|\\?\\*\\+\\(\\)]" //js meta characters |
| | | var rexMeta = new RegExp(metaChar, "gi") //regular expression to match meta characters |
| | | |
| | | // keywords filter function |
| | | function ztreeFilter(zTreeObj, _keywords, callBackFunc) { |
| | | if (!_keywords) { |
| | | _keywords = ""; //default blank for _keywords |
| | | _keywords = "" //default blank for _keywords |
| | | } |
| | | |
| | | // function to find the matching node |
| | | function filterFunc(node) { |
| | | if (node && node.oldname && node.oldname.length > 0) { |
| | | node[nameKey] = node.oldname; //recover oldname of the node if exist |
| | | node[nameKey] = node.oldname //recover oldname of the node if exist |
| | | } |
| | | zTreeObj.updateNode(node); //update node to for modifications take effect |
| | | zTreeObj.updateNode(node) //update node to for modifications take effect |
| | | if (_keywords.length == 0) { |
| | | //return true to show all nodes if the keyword is blank |
| | | zTreeObj.showNode(node); |
| | | zTreeObj.expandNode(node, isExpand); |
| | | return true; |
| | | zTreeObj.showNode(node) |
| | | zTreeObj.expandNode(node, isExpand) |
| | | return true |
| | | } |
| | | //transform node name and keywords to lowercase |
| | | if ( |
| | | node[nameKey] && |
| | | node[nameKey].toLowerCase().indexOf(_keywords.toLowerCase()) != -1 |
| | | ) { |
| | | if (node[nameKey] && node[nameKey].toLowerCase().indexOf(_keywords.toLowerCase()) != -1) { |
| | | if (isHighLight) { |
| | | //highlight process |
| | | //a new variable 'newKeywords' created to store the keywords information |
| | |
| | | //process the meta characters in _keywords thus the RegExp can be correctly used in str.replace |
| | | var newKeywords = _keywords.replace(rexMeta, function (matchStr) { |
| | | //add escape character before meta characters |
| | | return "\\" + matchStr; |
| | | }); |
| | | node.oldname = node[nameKey]; //store the old name |
| | | var rexGlobal = new RegExp(newKeywords, "gi"); //'g' for global,'i' for ignore case |
| | | return "\\" + matchStr |
| | | }) |
| | | node.oldname = node[nameKey] //store the old name |
| | | var rexGlobal = new RegExp(newKeywords, "gi") //'g' for global,'i' for ignore case |
| | | //use replace(RegExp,replacement) since replace(/substr/g,replacement) cannot be used here |
| | | node[nameKey] = node.oldname.replace( |
| | | rexGlobal, |
| | | function (originalText) { |
| | | node[nameKey] = node.oldname.replace(rexGlobal, function(originalText) { |
| | | //highlight the matching words in node name |
| | | var highLightText = |
| | | '<span style="color: whitesmoke;background-color: darkred;">' + |
| | | originalText + |
| | | "</span>"; |
| | | return highLightText; |
| | | '<span style="color: whitesmoke;background-color: darkred;">' + originalText + "</span>" |
| | | return highLightText |
| | | }) |
| | | zTreeObj.updateNode(node) //update node for modifications take effect |
| | | } |
| | | ); |
| | | zTreeObj.updateNode(node); //update node for modifications take effect |
| | | } |
| | | zTreeObj.showNode(node); //show node with matching keywords |
| | | return true; //return true and show this node |
| | | zTreeObj.showNode(node) //show node with matching keywords |
| | | return true //return true and show this node |
| | | } |
| | | |
| | | zTreeObj.hideNode(node); // hide node that not matched |
| | | return false; //return false for node not matched |
| | | zTreeObj.hideNode(node) // hide node that not matched |
| | | return false //return false for node not matched |
| | | } |
| | | |
| | | var nodesShow = zTreeObj.getNodesByFilter(filterFunc); //get all nodes that would be shown |
| | | processShowNodes(nodesShow, _keywords); //nodes should be reprocessed to show correctly |
| | | var nodesShow = zTreeObj.getNodesByFilter(filterFunc) //get all nodes that would be shown |
| | | processShowNodes(nodesShow, _keywords) //nodes should be reprocessed to show correctly |
| | | } |
| | | |
| | | /** |
| | |
| | | //process the ancient nodes if _keywords is not blank |
| | | if (_keywords.length > 0) { |
| | | $.each(nodesShow, function (n, obj) { |
| | | var pathOfOne = obj.getPath(); //get all the ancient nodes including current node |
| | | var pathOfOne = obj.getPath() //get all the ancient nodes including current node |
| | | if (pathOfOne && pathOfOne.length > 0) { |
| | | //i < pathOfOne.length-1 process every node in path except self |
| | | for (var i = 0; i < pathOfOne.length - 1; i++) { |
| | | zTreeObj.showNode(pathOfOne[i]); //show node |
| | | zTreeObj.expandNode(pathOfOne[i], true); //expand node |
| | | zTreeObj.showNode(pathOfOne[i]) //show node |
| | | zTreeObj.expandNode(pathOfOne[i], true) //expand node |
| | | } |
| | | } |
| | | }); |
| | | }) |
| | | } else { |
| | | //show all nodes when _keywords is blank and expand the root nodes |
| | | var rootNodes = zTreeObj.getNodesByParam("level", "0"); //get all root nodes |
| | | var rootNodes = zTreeObj.getNodesByParam("level", "0") //get all root nodes |
| | | $.each(rootNodes, function (n, obj) { |
| | | zTreeObj.expandNode(obj, true); //expand all root nodes |
| | | }); |
| | | zTreeObj.expandNode(obj, true) //expand all root nodes |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | |
| | | //listen to change in input element |
| | | $(searchField).bind("click", function () { |
| | | _this.options.target = document.querySelector( |
| | | "#" + _this.ztreeId |
| | | ).parentNode.parentNode; |
| | | console.log(_this.options.target); |
| | | let loadingInstance = Loading.service(_this.options); |
| | | console.log(_this.keyWord); |
| | | _this.options.target = document.querySelector("#" + _this.ztreeId).parentNode.parentNode |
| | | // console.log(_this.options.target); |
| | | let loadingInstance = Loading.service(_this.options) |
| | | // console.log(_this.keyWord); |
| | | // var _keywords = $(this).val(); |
| | | searchNodeLazy(_this.keyWord); //call lazy load |
| | | loadingInstance.close(); |
| | | }); |
| | | searchNodeLazy(_this.keyWord) //call lazy load |
| | | loadingInstance.close() |
| | | }) |
| | | |
| | | var timeoutId = null; |
| | | var lastKeyword = ""; |
| | | var timeoutId = null |
| | | var lastKeyword = "" |
| | | // excute lazy load once after input change, the last pending task will be cancled |
| | | function searchNodeLazy(_keywords) { |
| | | if (timeoutId) { |
| | | //clear pending task |
| | | clearTimeout(timeoutId); |
| | | clearTimeout(timeoutId) |
| | | } |
| | | timeoutId = setTimeout(function () { |
| | | if (lastKeyword === _keywords) { |
| | | return; |
| | | return |
| | | } |
| | | ztreeFilter(zTreeObj, _keywords); //lazy load ztreeFilter function |
| | | ztreeFilter(zTreeObj, _keywords) //lazy load ztreeFilter function |
| | | // $(searchField).focus();//focus input field again after filtering |
| | | lastKeyword = _keywords; |
| | | }, 500); |
| | | lastKeyword = _keywords |
| | | }, 500) |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style > |
| | |
| | | } |
| | | .ztree li ul.line { |
| | | /* background: url(./img/line_conn.gif) 0 0 repeat-y; */ |
| | | background: url(data:image/gif;base64,R0lGODlhCQACAIAAAMzMzP///yH5BAEAAAEALAAAAAAJAAIAAAIEjI9pUAA7) |
| | | 0 0 repeat-y; |
| | | background: url(data:image/gif;base64,R0lGODlhCQACAIAAAMzMzP///yH5BAEAAAEALAAAAAAJAAIAAAIEjI9pUAA7) 0 0 repeat-y; |
| | | } |
| | | |
| | | .ztree li a { |