import { IPSDEPickupViewPanel } from "@ibiz/dynamic-model-api"; import { PickUpViewPanelControlInterface, Util } from "ibiz-core"; import { Subscription } from "rxjs"; import { MainControlBase } from './main-control-base'; /** * 选择视图面板部件基类 * * @export * @class PickUpViewPanelControlBase * @extends {MainControlBase} */ export class PickUpViewPanelControlBase extends MainControlBase implements PickUpViewPanelControlInterface { /** * 部件模型实例对象 * * @type {*} * @memberof PickUpViewPanelControlBase */ public declare controlInstance: IPSDEPickupViewPanel; /** * 选中数据字符串 * * @type {string} * @memberof PickUpViewPanelControlBase */ public selectedData?: string; /** * 视图模式 * 0: 默认模式(选择视图,多项数据选择视图) * 1:左右关系(选择视图[左右关系], 多项数据选择视图[左右关系]) * 2: 分页关系(选择视图[分页关系], 多项数据选择视图[分页关系]) * * @type {string} * @memberof PickUpViewPanelControlBase */ public viewMode: number = 0; /** * 视图名称 * * @type {*} * @memberof PickUpViewPanelControlBase */ public view: any = { viewName: '', data: {}, } /** * 局部上下文 * * @type {*} * @memberof PickUpViewPanelControlBase */ public localContext: any = ""; /** * 局部视图参数 * * @type {*} * @memberof PickUpViewPanelControlBase */ public localViewParam: any = ""; /** * 视图数据 * * @type {*} * @memberof PickUpViewPanelControlBase */ public viewdata: string = JSON.stringify(this.context); /** * 视图参数 * * @type {*} * @memberof PickUpViewPanelControlBase */ public viewparam: string = JSON.stringify(this.viewparams); /** * 是否显示按钮 * * @type {boolean} * @memberof PickUpViewPanelControlBase */ public isShowButton!: boolean; /** * 是否单选 * * @type {boolean} * @memberof PickUpViewPanelControlBase */ public isSingleSelect?: boolean; /** * 初始化完成 * * @type {boolean} * @memberof PickUpViewPanelControlBase */ public inited: boolean = false; /** * @description 选择视图部件事件 * @type {(Subscription | undefined)} * @memberof PickUpViewPanelControlBase */ public pickupControlEvent: Subscription | undefined; /** * 嵌入视图类型 * * @readonly * @type {string} * @memberof PickUpViewPanelControlBase */ get embedViewType(): string { return this.controlInstance.getEmbeddedPSAppDEView()?.viewType || ''; } /** * 监听部件动态参数变化 * * @param {*} newVal * @param {*} oldVal * @memberof PickUpViewPanelControlBase */ public onDynamicPropsChange(newVal: any, oldVal: any) { super.onDynamicPropsChange(newVal, oldVal); if (newVal?.selectedData && newVal.selectedData != oldVal?.selectedData) { this.selectedData = newVal.selectedData; } } /** * 监听部件参数变化 * * @param {*} newVal * @param {*} oldVal * @memberof PickUpViewPanelControlBase */ public onStaticPropsChange(newVal: any, oldVal: any) { this.isShowButton = newVal.isShowButton; this.isSingleSelect = newVal.isSingleSelect; this.viewMode = newVal.viewMode || 0; super.onStaticPropsChange(newVal, oldVal) } /** * 初始化面板部件实例 * * @memberof PickUpViewPanelControlBase */ public async ctrlModelInit() { super.ctrlModelInit(); this.view.viewName = 'app-view-shell'; } /** * 部件初始化 * * @memberof PickUpViewPanelControlBase */ public ctrlInit() { this.initNavParam(); if (this.viewState) { this.pickupControlEvent = this.viewState.subscribe(({ tag, action, data }: any) => { if (!Object.is(tag, this.name)) { return; } if (Object.is('load', action)) { this.viewdata = JSON.stringify(this.context); this.viewparam = JSON.stringify(this.viewparams); this.inited = true; } }); } } /** * 选中全部 * * @param {*} [datas=[]] * @memberof PickUpViewPanelControlBase */ public selectAll(datas: any = []) { const embedView = this.controlInstance.getEmbeddedPSAppDEView() as any; if (embedView) { const view: any = (this.$refs[embedView.name] as any)?.$children?.[0]; if (view) { view.selectAll(datas); } } } /** * 初始化导航参数 * * @memberof PickUpViewPanelControlBase */ public initNavParam() { if (this.localContext && Object.keys(this.localContext).length > 0) { let _context: any = Util.computedNavData({}, this.context, this.viewparams, this.localContext); Object.assign(this.context, _context); } if (this.localViewParam && Object.keys(this.localViewParam).length > 0) { let _param: any = Util.computedNavData({}, this.context, this.viewparams, this.localViewParam); Object.assign(this.viewparams, _param); } this.viewdata = JSON.stringify(this.context); this.viewparam = JSON.stringify(this.viewparams); } /** * 视图数据变化 * * @param {*} $event * @memberof PickUpViewPanelControlBase */ public onViewDatasChange($event: any): void { if ($event.length > 0) { $event.forEach((item: any, index: any) => { let srfmajortext = item.srfmajortext ? item.srfmajortext : item[this.appDeMajorFieldName.toLowerCase()]; if (srfmajortext) { Object.assign($event[index], { srfmajortext: srfmajortext }); } }); } this.handleCtrlEvents('onselectionchange', { action: 'selectionchange', data: $event }).then((res: boolean) => { if (res) { this.$emit("ctrl-event", { controlname: "pickupviewpanel", action: "selectionchange", data: $event }); } }) } /** * 获取多项数据 * * @returns {any[]} * @memberof PickUpViewPanelControlBase */ public getDatas(): any[] { return []; } /** * 获取单项数据 * * @returns {*} * @memberof PickUpViewPanelControlBase */ public getData(): any { return {}; } /** * @description 部件销毁 * @memberof PickUpViewPanelControlBase */ public ctrlDestroyed(){ super.ctrlDestroyed() if(this.pickupControlEvent){ this.pickupControlEvent.unsubscribe(); } } }