import { Subscription } from 'rxjs'; import { CtrlLoadingService } from '..'; import { ControlBase } from './control-base'; import { MainControlInterface, ModelTool, UIServiceHelp, Util } from 'ibiz-core'; import { IPSAppDataEntity, IPSAppDEField } from '@ibiz/dynamic-model-api'; /** * 实体部件基础公共基类 * * @export * @class MainControlBase * @extends {ControlBase} */ export class MainControlBase extends ControlBase implements MainControlInterface { /** * 编辑视图 * * @type {*} * @memberof MainControlBase */ public opendata?: any; /** * 新建视图 * * @type {*} * @memberof MainControlBase */ public newdata?: any; /** * 视图loading服务 * * @type {*} * @memberof MainControlBase */ public viewLoadingService: any; /** * 布局面板loading服务 * * @type {*} * @memberof MainControlBase */ public layoutLoadingService: any; /** * 加载服务 * * @type {AppLoading} * @memberof MainControlBase */ public ctrlLoadingService!: CtrlLoadingService; /** * 应用状态事件 * * @public * @type {(Subscription | undefined)} * @memberof MainControlBase */ public appStateEvent: Subscription | undefined; /** * 界面UI服务对象 * * @type {*} * @memberof MainControlBase */ public appUIService: any; /** * 界面行为模型 * * @type {*} * @memberof MainControlBase */ public actionModel: any = {}; /** * 应用实体codeName * * @readonly * @memberof MainControlBase */ get appDeCodeName() { return this.controlInstance?.getPSAppDataEntity?.()?.codeName || ''; } /** * 应用实体映射实体名称 * * @readonly * @memberof MainControlBase */ get deName() { return this.controlInstance?.getPSAppDataEntity()?.getPSDEName() || ''; } /** * 应用实体主键属性codeName * * @readonly * @memberof MainControlBase */ get appDeKeyFieldName() { return (ModelTool.getAppEntityKeyField(this.controlInstance?.getPSAppDataEntity() as IPSAppDataEntity) as IPSAppDEField)?.codeName || ''; } /** * 应用实体主信息属性codeName * * @readonly * @memberof MainControlBase */ get appDeMajorFieldName() { return (ModelTool.getAppEntityMajorField(this.controlInstance?.getPSAppDataEntity() as IPSAppDataEntity) as IPSAppDEField)?.codeName || ''; } /** * 监听静态参数变化 * * @param {*} newVal * @param {*} oldVal * @memberof MainControlBase */ public onStaticPropsChange(newVal: any, oldVal: any) { this.newdata = newVal.newdata; this.opendata = newVal.opendata; super.onStaticPropsChange(newVal, oldVal); this.viewLoadingService = newVal.viewLoadingService; this.layoutLoadingService = newVal.layoutLoadingService; } /** * 部件模型数据初始化 * * @memberof MainControlBase */ public async ctrlModelInit(args?: any) { await super.ctrlModelInit(); this.initCtrlActionModel(); this.appUIService = await UIServiceHelp.getInstance().getService(this.controlInstance.getPSAppDataEntity(), { context: this.context }); if (this.appUIService) { await this.appUIService.loaded(); } } /** * 初始化界面行为模型 * * @type {*} * @memberof MainControlBase */ public initCtrlActionModel() { } /** * 部件初始化 * * @param {*} [args] * @memberof MainControlBase */ public ctrlInit(args?: any) { super.ctrlInit(args); // 构造部件加载服务 this.ctrlLoadingService = new CtrlLoadingService(this.viewLoadingService, this.layoutLoadingService); } /** * 部件销毁 * * @memberof MainControlBase */ public ctrlDestroyed() { super.ctrlDestroyed(); if (this.appStateEvent) { this.appStateEvent.unsubscribe(); } } /** * 部件刷新数据 * * @param {*} args * @memberof MainControlBase */ public refresh(args?: any): void { } /** * 开始加载 * * @memberof MainControlBase */ public ctrlBeginLoading() { this.ctrlLoadingService.beginLoading(this.controlId); } /** * 结束加载 * * @memberof MainControlBase */ public ctrlEndLoading() { this.ctrlLoadingService.endLoading(); } /** * 处理部件UI请求 * * @param {string} action 行为名称 * @param {*} context 上下文 * @param {*} viewparam 视图参数 * @memberof MainControlBase */ public onControlRequset(action: string, context: any, viewparam: any) { this.ctrlBeginLoading(); } /** * 处理部件UI响应 * * @param {string} action 行为 * @param {*} response 响应对象 * @memberof MainControlBase */ public onControlResponse(action: string, response: any) { this.ctrlEndLoading(); if (response && response.status && response.status == 403) { this.enableControlUIAuth = false; this.ctrlEvent({ controlname: this.controlInstance.name, action: 'authlimit', data: response, }); } } /** * 转化数据 * * @param {*} args 数据 * @memberof MainControlBase */ public transformData(args: any) { let _this: any = this; if (!_this.appDeCodeName) { return; } if (_this.service && _this.service.handleRequestData instanceof Function && _this.service.handleRequestData('transform', Util.deepCopy(_this.context), args)) { return _this.service.handleRequestData('transform', Util.deepCopy(_this.context), args)['data']; } } /** * 获取视图逻辑标识(拼合逻辑:部件标识_列标识_成员标识_click) * * @param {*} args * @memberof MainControlBase */ public getViewLogicTag(ctrlTag: string, columnTag: any, detailTag: string) { return `${ctrlTag}_${columnTag}_${detailTag}_click`; } }