import { IconLabel, Label, NodeButton } from "@/base"; import { shortcut, extend, VerticalAdaptLayout, isKey, compact, SIZE_CONSANTS } from "@/core"; import { TreeNodeSwitcher } from "@/case"; @shortcut() export class BasicTreeNode extends NodeButton { static xtype = "bi.tree_node"; _defaultConfig(props) { const conf = super._defaultConfig.apply(this, arguments); return extend(conf, { baseCls: `${conf.baseCls || ""} bi-tree-node ${props.selectable ? "bi-list-item-active" : "bi-list-item"}`, id: "", pId: "", open: false, height: 24, readonly: true, isFirstNode: false, isLastNode: false, switcherIcon: {}, selectable: true, disabled: false, // disabled不会影响展开收起功能 }); } render() { const { open, layer, height, hgap, textHgap, textVgap, textLgap, textRgap, text, value, isFirstNode, isLastNode, keyword, iconWrapperWidth, iconCls, switcherIcon, selectable, } = this.options; const checkbox = { type: TreeNodeSwitcher.xtype, ref: _ref => { this.switcher = _ref; }, iconHeight: height, iconWidth: iconWrapperWidth || height, open, isFirstNode, isLastNode, layer, ...switcherIcon, stopPropagation: selectable, mounted() { this.setEnable(true); }, listeners: [ { eventName: "EVENT_CHANGE", action: () => { if (!this.isEnabled() || selectable) { this.isOpened() ? this.triggerCollapse() : this.triggerExpand(); } }, } ], }; // const indent = { // el: { // type: Layout.xtype, // height, // width: height, // cls: this.getLineCls(), // }, // lgap: layer * SIZE_CONSANTS.LIST_ITEM_HEIGHT / 2, // 偏移公式为每一层的偏移量为节点高度的一半 // width: "", // }; const icon = isKey(iconCls) ? { el: { type: IconLabel.xtype, // iconWidth, // iconHeight, cls: iconCls, }, // width: 24, } : null; return { type: VerticalAdaptLayout.xtype, items: compact([ { el: checkbox, lgap: layer * SIZE_CONSANTS.LIST_ITEM_HEIGHT / 2, // 偏移公式为每一层的偏移量为节点高度的一半 width: iconWrapperWidth || height, }, icon, { el: { type: Label.xtype, ref: _ref => { this.text = _ref; }, textAlign: "left", whiteSpace: "nowrap", textHeight: height, height, hgap: hgap || textHgap, vgap: textVgap, lgap: textLgap, rgap: textRgap, text, value, keyword, }, width: "fill", } ]), }; } doRedMark() { this.text.doRedMark(...arguments); } unRedMark() { this.text.unRedMark(...arguments); } doClick() { if (this.options.selectable) { return; } super.doClick(...arguments); } setOpened(v) { super.setOpened(...arguments); this.switcher.setOpened(v); } setValue() { super.setValue(...arguments); } } @shortcut() export class FirstPlusGroupNode extends BasicTreeNode { static xtype = "bi.first_plus_group_node"; _defaultConfig() { const conf = super._defaultConfig(...arguments); return extend(conf, { baseCls: `${conf.baseCls || ""} bi-first-plus-group-node`, isFirstNode: true, isLastNode: false, }); } } @shortcut() export class MidPlusGroupNode extends BasicTreeNode { static xtype = "bi.mid_plus_group_node"; _defaultConfig() { const conf = super._defaultConfig(...arguments); return extend(conf, { baseCls: `${conf.baseCls || ""} bi-mid-plus-group-node`, isFirstNode: false, isLastNode: false, }); } } @shortcut() export class LastPlusGroupNode extends BasicTreeNode { static xtype = "bi.last_plus_group_node"; _defaultConfig() { const conf = super._defaultConfig(...arguments); return extend(conf, { baseCls: `${conf.baseCls || ""} bi-last-plus-group-node`, isFirstNode: false, isLastNode: true, }); } }