import { Util, throttle } from '@ibizstudio/runtime';
import { TreeControlBase } from '../../../widgets';
import { IPSDETreeNode, IPSDEContextMenu } from '@ibizstudio/runtime';
/**
* 树视图部件基类
*
* @export
* @class AppTreeViewBase
* @extends {TreeControlBase}
*/
export class AppTreeViewBase extends TreeControlBase {
/**
* 绘制右击菜单
*
* @param {*} node
* @returns
* @memberof AppTreeViewBase
*/
renderContextMenu(node: any) {
if (node && node.data) {
const data: any = JSON.parse(JSON.stringify(node.data));
this.currentselectedNode = { ...data };
const tags: string[] = data.id.split(';');
let treeNodes = this.controlInstance.getPSDETreeNodes() || [];
let treeNode = treeNodes.find((node: IPSDETreeNode) => tags[0] == node.nodeType) as IPSDETreeNode;
let contextMenu = treeNode.getPSDEContextMenu() as IPSDEContextMenu;
if (contextMenu && contextMenu.controlType == 'CONTEXTMENU') {
let { targetCtrlName, targetCtrlParam, targetCtrlEvent }: { targetCtrlName: string; targetCtrlParam: any; targetCtrlEvent: any } = this.computeTargetCtrlData(contextMenu);
targetCtrlParam.dynamicProps.contextMenuActionModel = this.copyActionModel;
Object.assign(targetCtrlEvent, {
'ctrl-event': ({ controlname, action, data }: { controlname: string; action: string; data: any }) => {
this.onCtrlEvent(controlname, action, data, Util.deepCopy(this.currentselectedNode));
},
});
return this.$createElement(targetCtrlName, { props: targetCtrlParam, ref: contextMenu.name, on: targetCtrlEvent });
}
}
return null;
}
/**
* 绘制内容
*
* @returns
* @memberof AppTreeViewBase
*/
renderNode({ node, data }: any): any {
// 绘制图标
let iconElement = null;
if (data.iconCustomCode) {
let icon = '';
if (data.iconScriptCode.indexOf('return') !== -1) {
data.iconScriptCode = data.iconScriptCode.replace(new RegExp('return', 'g'), `icon =`);
}
eval(data.iconScriptCode);
iconElement = ;
} else if (data.iconcls) {
iconElement = ;
} else if (data.icon) {
iconElement =