import { IPSAppDataEntity, IPSAppDECustomView, IPSAppDEField, IPSAppViewEngine, IPSControl, IPSDEToolbar, IPSDEToolbarItem } from '@ibizstudio/runtime'; import { CommonViewEngine, CustomViewInterface, throttle, ModelTool } from '@ibizstudio/runtime'; import { MainViewBase } from "./mainview-base"; /** * 自定义视图基类 * * @export * @class CustomViewBase * @extends {MainViewBase} * @implements {CustomViewInterface} */ export class CustomViewBase extends MainViewBase implements CustomViewInterface { /** * 视图实例 * * @memberof CustomViewBase */ declare viewInstance: IPSAppDECustomView; /** * 视图引擎 * * @public * @type {CommonViewEngine} * @memberof CustomViewBase */ engine: CommonViewEngine = new CommonViewEngine(); /** * 初始化图表视图实例 * * @param opts * @memberof CustomViewBase */ async viewModelInit() { await super.viewModelInit(); } /** * 初始化工具栏数据 * * @memberof MainViewBase */ initViewToolBar() { const targetViewToolbarItems: any[] = []; const viewToolBar: IPSDEToolbar = ModelTool.findPSControlByName('toolbar', this.viewInstance.getPSControls()); if (viewToolBar && viewToolBar.getPSDEToolbarItems()) { viewToolBar.getPSDEToolbarItems()?.forEach((toolbarItem: IPSDEToolbarItem) => { targetViewToolbarItems.push(this.initToolBarItems(toolbarItem)); }); } this.toolbarModels = targetViewToolbarItems; } /** * 绘制目标部件 * * @memberof CustomViewBase */ renderTargetControl(control: IPSControl) { if (Object.is(control.controlType, 'TOOLBAR')) { const viewToolBar: IPSDEToolbar = control as IPSDEToolbar; const targetViewToolbarItems: any[] = []; if (viewToolBar && viewToolBar.getPSDEToolbarItems()) { viewToolBar.getPSDEToolbarItems()?.forEach((toolbarItem: IPSDEToolbarItem) => { targetViewToolbarItems.push(this.initToolBarItems(toolbarItem)); }); } return ( { throttle(this.handleItemClick, [data, $event], this); }} > ); } else { let { targetCtrlName, targetCtrlParam, targetCtrlEvent } = this.computeTargetCtrlData(control); if (Object.is(control.controlType, 'SEARCHFORM') || Object.is(control.controlType, 'SEARCHBAR')) { Object.assign(targetCtrlParam.dynamicProps, { isExpandSearchForm: true }); } return this.$createElement(targetCtrlName, { slot: `layout-${control.name}`, props: targetCtrlParam, ref: control?.name, on: targetCtrlEvent }); } } /** * 引擎初始化 * * @param {*} [opts={}] 引擎参数 * @memberof ChartViewBase */ engineInit(opts: any = {}): void { if (this.Environment && this.Environment.isPreviewMode) { return; } const engineOptions: any = { view: this, parentContainer: this.$parent, keyPSDEField: (ModelTool.getViewAppEntityCodeName(this.viewInstance) as string).toLowerCase(), majorPSDEField: (ModelTool.getAppEntityMajorField(this.viewInstance.getPSAppDataEntity() as IPSAppDataEntity) as IPSAppDEField)?.codeName.toLowerCase() }; if (this.viewInstance.getPSControls() && (this.viewInstance.getPSControls() as IPSControl[]).length > 0) { const ctrlArray: Array = []; (this.viewInstance.getPSControls() as IPSControl[]).forEach((item: IPSControl) => { if (!Object.is(item.controlType, 'TOOLBAR')) { ctrlArray.push({ name: item.name, ctrl: (this.$refs[item.name] as any).ctrl }); } }) Object.assign(engineOptions, { ctrl: ctrlArray }); } if (this.viewInstance.getPSAppViewEngines() && (this.viewInstance.getPSAppViewEngines() as IPSAppViewEngine[]).length > 0) { const engineArray: Array = []; (this.viewInstance.getPSAppViewEngines() as IPSAppViewEngine[]).forEach((item: IPSAppViewEngine) => { if (Object.is(item.engineCat, 'CTRL')) { engineArray.push(item.M); } }) Object.assign(engineOptions, { engine: engineArray }); } this.engine.init(engineOptions); } }