fineui是帆软报表和BI产品线所使用的前端框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

109 lines
2.8 KiB

import {
shortcut,
extend,
i18nText,
each,
createWidget,
Controller,
isArray, isNotEmptyArray, UUID, defaults, Tree, VerticalLayout
} from "@/core";
import { Pane } from "@/base";
import { BasicTreeItem, BasicTreeNode, LevelTree, TreeExpander } from "@/case";
@shortcut()
export class SelectTreePopup extends Pane {
static xtype = "bi.select_level_tree";
static EVENT_CHANGE = "EVENT_CHANGE";
_defaultConfig() {
return extend(super._defaultConfig(...arguments), {
baseCls: "bi-select-level-tree",
tipText: i18nText("BI-No_Selected_Item"),
items: [],
value: "",
});
}
_formatItems(nodes, layer, pNode) {
const self = this;
each(nodes, (i, node) => {
const extend = {
layer,
isFirstNode: i === 0,
isLastNode: i === nodes.length - 1,
height: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT,
pNode,
};
node.id = node.id || UUID();
if (
node.isParent === true ||
node.parent === true ||
isNotEmptyArray(node.children)
) {
extend.type = BasicTreeNode.xtype;
extend.selectable = true;
defaults(node, extend);
self._formatItems(node.children, layer + 1, node);
} else {
extend.type = BasicTreeItem.xtype;
defaults(node, extend);
}
});
return nodes;
}
_init() {
super._init(...arguments);
const self = this,
o = this.options;
this.tree = createWidget({
type: LevelTree.xtype,
expander: {
type: TreeExpander.xtype,
// isDefaultInit: true,
selectable: true,
},
items: this._formatItems(Tree.transformToTreeFormat(o.items), 0),
value: o.value,
chooseType: Selection.Single,
});
createWidget({
type: VerticalLayout.xtype,
element: this,
vgap: 5,
items: [this.tree],
});
this.tree.on(Controller.EVENT_CHANGE, function () {
self.fireEvent(Controller.EVENT_CHANGE, arguments);
});
this.tree.on(LevelTree.EVENT_CHANGE, () => {
self.fireEvent(SelectTreePopup.EVENT_CHANGE);
});
this.check();
}
getValue() {
return this.tree.getValue();
}
setValue(v) {
v = isArray(v) ? v : [v];
this.tree.setValue(v);
}
populate(items) {
super.populate(...arguments);
this.tree.populate(
this._formatItems(Tree.transformToTreeFormat(items))
);
}
}