import { IPSDEUILogicParam, IPSDEUIMsgBoxLogic } from '@ibiz/dynamic-model-api'; import { Subject } from 'rxjs'; import { LogUtil } from 'ibiz-core'; import { AppMessageBoxService } from '../../../app-service'; import { UIActionContext } from '../uiaction-context'; import { AppUILogicNodeBase } from './logic-node-base'; /** * 消息弹窗节点 * * @export * @class AppUILogicMsgboxNode */ export class AppUILogicMsgboxNode extends AppUILogicNodeBase { constructor() { super(); } /** * 执行节点 * * @param {IPSDEUIMsgBoxLogic} logicNode 逻辑节点模型数据 * @param {UIActionContext} actionContext 界面逻辑上下文 * @memberof AppUILogicMsgboxNode */ public async executeNode(logicNode: IPSDEUIMsgBoxLogic, actionContext: UIActionContext) { try { return new Promise<void>((resolve) => { let msgBoxParam: any = actionContext.getParam((logicNode.getMsgBoxParam() as IPSDEUILogicParam)?.codeName); const options = { type: logicNode.msgBoxType?.toLowerCase(), title: msgBoxParam?.title ? msgBoxParam.title : logicNode.title, content: msgBoxParam?.message ? msgBoxParam.message : logicNode.message, buttonType: logicNode.buttonsType?.toLowerCase(), showMode: logicNode.showMode?.toLowerCase(), showClose: false, mask: true, maskClosable: true }; const subject: Subject<any> | null = AppMessageBoxService.getInstance().open(options); const subscription = subject?.subscribe((result: any) => { resolve(this.handleResponse(logicNode, actionContext, options, result)); subscription!.unsubscribe(); subject.complete(); }) }); } catch (error: any) { LogUtil.error(`逻辑节点${logicNode.name}${error?.message ? error?.message : '发生未知错误!'}`); } } /** * 处理响应 * * @param {IPSDEUIMsgBoxLogic} logicNode 逻辑节点模型数据 * @param {UIActionContext} actionContext 界面逻辑上下文 * @param {string} result 响应结果 * @memberof AppUILogicMsgboxNode */ public handleResponse(logicNode: IPSDEUIMsgBoxLogic, actionContext: UIActionContext, options: any, result: string) { const { buttonsType } = logicNode; if (!Object.is(buttonsType, 'YESNO') && !Object.is(buttonsType, 'YESNOCANCEL') && !Object.is(buttonsType, 'OK') && !Object.is(buttonsType, 'OKCANCEL')) { throw new Error(`${buttonsType}未实现`); } let msgBoxParam: any = actionContext.getParam((logicNode.getMsgBoxParam() as IPSDEUILogicParam)?.codeName); if (msgBoxParam){ msgBoxParam.bind(result); } actionContext.bindLastReturnParam(result); return this.computeNextNodes(logicNode, actionContext); } }