import { Subject, Subscription } from 'rxjs'; import { DataPanelEngine, EditViewEngine, LogUtil, ModelTool, ViewState, EditViewInterface } from '@ibizstudio/runtime'; import { MainViewBase } from './mainview-base'; import { IPSAppDEEditView, IPSDEForm } from '@ibizstudio/runtime'; import { AppCenterService } from '../app-service'; /** * 编辑视图基类 * * @export * @class EditViewBase * @extends {MainViewBase} * @implements {EditViewInterface} */ export class EditViewBase extends MainViewBase implements EditViewInterface { /** * 视图实例 * * @memberof ViewBase */ declare viewInstance: IPSAppDEEditView; /** * 视图引擎 * * @public * @type {Engine} * @memberof EditViewBase */ engine: EditViewEngine = new EditViewEngine(); /** * 视图引擎 * * @public * @type {Engine} * @memberof AccountInfoBase */ datapanel: DataPanelEngine = new DataPanelEngine(); /** * 编辑表单实例 * * @public * @type {IBizFormModel} * @memberof EditViewBase */ editFormInstance!: IPSDEForm; /** * 标题头信息表单部件实例 * * @public * @type {IBizFormModel} * @memberof EditViewBase */ dataPanelInstance!: IPSDEForm; /** * 多编辑面板状态 * * @public * @type {Subject} * @memberof EditViewBase */ panelState?: Subject; /** * 状态事件 * * @public * @type {(Subscription | undefined)} * @memberof ViewBase */ panelStateStateEvent: Subscription | undefined; /** * 监听视图静态参数变化 * * @memberof EditViewBase */ onStaticPropsChange(newVal: any, oldVal: any) { if (newVal.panelState) { this.panelState = newVal.panelState; } super.onStaticPropsChange(newVal, oldVal); } /** * 视图初始化 * * @memberof EditViewBase */ viewInit() { super.viewInit(); if (this.panelState) { this.panelStateStateEvent = this.panelState.subscribe(({ tag, action, data }: any) => { if (!Object.is(tag, this.viewInstance.name)) { return; } if (action == 'save') { this.viewState.next({ tag: this.editFormInstance.name, action: 'save', data: data }); } if (action == 'remove') { this.viewState.next({ tag: this.editFormInstance.name, action: 'remove', data: data }); } }); } } /** * 引擎初始化 * * @public * @memberof EditViewBase */ engineInit(): void { if (this.Environment && this.Environment.isPreviewMode) { return; } this.engine.init({ view: this, parentContainer: this.$parent, form: (this.$refs[this.editFormInstance.name] as any).ctrl, p2k: '0', isLoadDefault: this.viewInstance.loadDefault, keyPSDEField: this.appDeCodeName.toLowerCase(), majorPSDEField: this.appDeMajorFieldName.toLowerCase(), }); if (this.dataPanelInstance) { this.datapanel.init({ view: this, parentContainer: this.$parent, datapanel: (this.$refs[this.dataPanelInstance?.name] as any).ctrl, p2k: '0', isLoadDefault: this.viewInstance.loadDefault, keyPSDEField: this.appDeCodeName.toLowerCase(), majorPSDEField: this.appDeMajorFieldName.toLowerCase(), }); } } /** * 初始化编辑视图实例 * * @memberof EditViewBase */ async viewModelInit() { await super.viewModelInit(); this.editFormInstance = ModelTool.findPSControlByName('form', this.viewInstance.getPSControls()) as IPSDEForm; this.dataPanelInstance = ModelTool.findPSControlByName('datapanel', this.viewInstance.getPSControls()) as IPSDEForm; } /** * 渲染视图标题头信息表单部件 * * @memberof EditViewBase */ renderDataPanelInfo() { if (!this.dataPanelInstance) { return null; } let { targetCtrlName, targetCtrlParam, targetCtrlEvent } = this.computeTargetCtrlData(this.dataPanelInstance); return this.$createElement(targetCtrlName, { slot: 'datapanel', props: targetCtrlParam, ref: this.dataPanelInstance?.name, on: targetCtrlEvent }); } /** * 渲染视图主体内容区 * * @memberof EditViewBase */ renderMainContent() { if (!this.editFormInstance) { return null; } let { targetCtrlName, targetCtrlParam, targetCtrlEvent } = this.computeTargetCtrlData(this.editFormInstance); return this.$createElement(targetCtrlName, { slot: 'default', props: targetCtrlParam, ref: this.editFormInstance?.name, on: targetCtrlEvent }); } /** * 将抄送任务标记为已读 * * @param data 业务数据 * @memberof EditViewBase */ readTask(data: any) { this.appEntityService .ReadTask(this.context, data) .then((response: any) => { if (!response || response.status !== 200) { LogUtil.warn(this.$t('app.editor.error')); return; } AppCenterService.notifyMessage({ name: this.appDeCodeName, action: 'appRefresh', data: data }); }) .catch((error: any) => { LogUtil.warn(this.$t('app.editor.error')); }); } /** * 视图销毁 * * @memberof EditViewBase */ viewDestroyed() { super.viewDestroyed(); if (this.panelStateStateEvent) { this.panelStateStateEvent.unsubscribe(); } } }