import { Listasynctree } from "./listasynctree"; import { shortcut, extend, Events, delay } from "@/core"; import { TreeView } from "../treeview"; import $ from "jquery"; /** * guy * 局部树,两个请求树, 第一个请求构造树,第二个请求获取节点 * @class ListPartTree * @extends AsyncTree */ @shortcut() export class ListPartTree extends Listasynctree { static xtype = "bi.list_part_tree"; _loadMore() { const self = this, o = this.options; const op = extend({}, o.paras, { type: TreeView.REQ_TYPE_INIT_DATA, times: ++this.times, }); this.tip.setLoading(); o.itemsCreator(op, d => { const hasNext = !!d.hasNext, nodes = d.items || []; o.paras.lastSearchValue = d.lastSearchValue; if (self._stop === true) { return; } if (!hasNext) { self.tip.setEnd(); } else { self.tip.setLoaded(); } if (nodes.length > 0) { self.nodes.addNodes(null, self._dealWidthNodes(nodes)); } }); } _initTree(setting, keyword) { const self = this, o = this.options; this.times = 1; const tree = this.tree; tree.empty(); self.tip.setVisible(false); this.loading(); const op = extend({}, o.paras, { type: TreeView.REQ_TYPE_INIT_DATA, times: this.times, }); function complete(d) { if (self._stop === true || keyword !== o.paras.keyword) { return; } const hasNext = !!d.hasNext, nodes = d.items || []; o.paras.lastSearchValue = d.lastSearchValue; // 没有请求到数据也要初始化空树, 如果不初始化, 树就是上一次构造的树, 节点信息都是过期的 callback(nodes.length > 0 ? self._dealWidthNodes(nodes) : []); self.setTipVisible(nodes.length <= 0); self.loaded(); if (!hasNext) { self.tip.invisible(); } else { self.tip.setLoaded(); } self.fireEvent(Events.AFTERINIT); } function callback(nodes) { if (self._stop === true) { return; } self.nodes = $.fn.zTree.init(tree.element, setting, nodes); } delay(() => { o.itemsCreator(op, complete); }, 100); } // 生成树方法 stroke(config) { const o = this.options; delete o.paras.keyword; extend(o.paras, config); delete o.paras.lastSearchValue; const setting = this._configSetting(); this._initTree(setting, o.paras.keyword); } }