提交 193c7b56 编写于 作者: Mosher's avatar Mosher

upadte:更新

上级 0620abbc
<#ibiztemplate>
TARGET=PSAPPDEUILOGIC
</#ibiztemplate>
import { ILogicNode } from "@/interface/logic";
import {
UIActionContext,
UILogicAppendParamNode,
UILogicBeginNode,
UILogicBindParamNode,
UILogicCopyParamNode,
UILogicDataSetNode,
UILogicDeActionNode,
UILogicDebugParamNode,
UILogicDeLogicNode,
UILogicDeUIActionNode,
UILogicEndNode,
UILogicMsgboxNode,
UILogicPrepareParamNode,
UILogicRawCodeNode,
UILogicReNewParamNode,
UILogicResetParamNode,
UILogicSortParamNode,
UILogicThrowExceptionNode,
UILogicViewctrlFireEventNode,
UILogicViewctrlInvokeNode
} from "@/logic/ui-logic";
<#ibizinclude>
../@MACRO/ui-logic-node.ftl
</#ibizinclude>
/**
* ${item.name}
*
......@@ -86,67 +65,6 @@ export default class ${srfclassname('${item.getCodeName()}')}UILogicBase {
</#if>
];
/**
* 逻辑节点
*
* @protected
* @type {ILogicNode[]}
* @memberof ${srfclassname('${item.getCodeName()}')}UILogicBase
*/
protected logicNodes: ILogicNode[] = [
<#if item.getPSDEUILogicNodes?? && item.getPSDEUILogicNodes()??>
<#list item.getPSDEUILogicNodes() as logicNode>
<#assign node>
codeName: '${logicNode.codeName}',
name: '${logicNode.name}',
logicNodeType: '${logicNode.getLogicNodeType()}',
<#if logicNode.getDstPSDEUILogicParam?? && logicNode.getDstPSDEUILogicParam()??>
dstParam: '${logicNode.getDstPSDEUILogicParam().codeName}',
</#if>
<#if logicNode.getDstIndex?? && logicNode.getDstIndex()??>
dstIndex: '${logicNode.getDstIndex()?c}',
</#if>
<#if logicNode.getSrcPSDEUILogicParam?? && logicNode.getSrcPSDEUILogicParam()??>
srcParam: '${logicNode.getSrcPSDEUILogicParam().codeName}',
</#if>
<#if logicNode.getSrcFieldName?? && logicNode.getSrcFieldName()??>
srcFieldName: '${logicNode.getSrcFieldName()}',
</#if>
<#if logicNode.getSrcIndex?? && logicNode.getSrcIndex()??>
srcIndex: '${logicNode.getSrcIndex()?c}',
</#if>
<#if logicNode.getSrcSize?? && logicNode.getSrcSize()??>
srcSize: '${logicNode.getSrcSize()?c}',
</#if>
<#if logicNode.getReturnParam?? && logicNode.getReturnParam()??>
returnParam: '${logicNode.getReturnParam().codeName}',
</#if>
<#if logicNode.getReturnType?? && logicNode.getReturnType()??>
returnType: '${logicNode.getReturnType()}',
</#if>
<#if logicNode.getRawValue?? && logicNode.getRawValue()??>
returnRawValue: '${logicNode.getRawValue()}',
</#if>
<#if logicNode.getPSDEUILogicLinks?? && logicNode.getPSDEUILogicLinks()??>
logicLinks: [
<#list logicNode.getPSDEUILogicLinks() as link>
{
name: '${link.name}',
dstLogicNode: '${link.getDstPSDEUILogicNode().codeName}',
<#if link.getPSDEUILogicLinkGroupCond?? && link.getPSDEUILogicLinkGroupCond()??>
// 逻辑连接暂未支持
linkGroupCond: [],
</#if>
}
</#list>
]
</#if>
</#assign>
<@compress single_line=true>{ ${node} },</@compress>
</#list>
</#if>
];
/**
* 执行前
*
......@@ -180,133 +98,21 @@ export default class ${srfclassname('${item.getCodeName()}')}UILogicBase {
async execute(args: any[], context:any = {} ,params: any = {}, $event?: any, xData?: any, actioncontext?: any, srfParentDeName?: string) {
try {
const actionContext = this.beforeExecute(args, context, params, $event, xData, actioncontext, srfParentDeName);
if (!this.startLogicNode) {
throw new Error('没有开始节点');
}
await this.executeNode(this.startLogicNode, actionContext);
<#if item.getStartPSDEUILogicNode?? && item.getStartPSDEUILogicNode()??>
await this.execute_${item.getStartPSDEUILogicNode().codeName}_node(actionContext);
<#else>
throw new Error('没有开始节点');
</#if>
return actionContext.getResult();
} catch (error: any) {
<#noparse>throw new Error(`${error && error.message ? error.message : '发生未知错误!'}`);</#noparse>
}
}
/**
* 执行节点
*
* @param {ILogicNode} logicNode
* @param {UIActionContext} actionContext
* @memberof ${srfclassname('${item.getCodeName()}')}UILogicBase
*/
async executeNode(logicNodeName: string, actionContext: UIActionContext) {
const logicNode = this.logicNodes.find((node: ILogicNode) => node.codeName === logicNodeName) as ILogicNode;
if (!logicNode) {
<#noparse>console.log(`未找到 ${logicNodeName} 节点`);</#noparse>
}
let result: any = { actionContext };
try {
switch (logicNode.logicNodeType) {
// 开始节点
case 'BEGIN':
result = await new UILogicBeginNode().executeNode(logicNode, actionContext);
break;
// 准备参数节点
case 'PREPAREJSPARAM':
result = await new UILogicPrepareParamNode().executeNode(logicNode, actionContext);
break;
// 重置参数节点
case 'RESETPARAM':
result = await new UILogicResetParamNode().executeNode(logicNode, actionContext);
break;
// 拷贝参数
case 'COPYPARAM':
result = await new UILogicCopyParamNode().executeNode(logicNode, actionContext);
break;
// 绑定参数
case 'BINDPARAM':
result = await new UILogicBindParamNode().executeNode(logicNode, actionContext);
break;
// 重新建立参数
case 'RENEWPARAM':
result = await new UILogicReNewParamNode().executeNode(logicNode, actionContext);
break;
// 调用实体界面行为
case 'DEUIACTION':
result = await new UILogicDeUIActionNode().executeNode(logicNode, actionContext);
break;
// 行为处理节点
case 'DEACTION':
result = await new UILogicDeActionNode().executeNode(logicNode, actionContext);
break;
// 实体处理逻辑
case 'DELOGIC':
result = await new UILogicDeLogicNode().executeNode(logicNode, actionContext);
break;
// 实体数据集
case 'DEDATASET':
result = await new UILogicDataSetNode().executeNode(logicNode, actionContext);
break;
// 附加到数组参数
case 'APPENDPARAM':
result = await new UILogicAppendParamNode().executeNode(logicNode, actionContext);
break;
// 排序数组参数
case 'SORTPARAM':
result = await new UILogicSortParamNode().executeNode(logicNode, actionContext);
break;
// 视图部件调用
case 'VIEWCTRLINVOKE':
result = await new UILogicViewctrlInvokeNode().executeNode(logicNode, actionContext);
break;
// 视图部件事件触发
case 'VIEWCTRLFIREEVENT':
result = await new UILogicViewctrlFireEventNode().executeNode(logicNode, actionContext);
break;
// 调试逻辑参数
case 'DEBUGPARAM':
result = await new UILogicDebugParamNode().executeNode(logicNode, actionContext);
break;
// 消息弹窗
case 'MSGBOX':
result = await new UILogicMsgboxNode().executeNode(logicNode, actionContext);
break;
// 前端代码
case 'RAWJSCODE':
result = await new UILogicRawCodeNode().executeNode(logicNode, actionContext);
break;
// 异常处理
case 'THROWEXCEPTION':
result = await new UILogicThrowExceptionNode().executeNode(logicNode, actionContext);
break;
// 结束
case 'END':
result = await new UILogicEndNode().executeNode(logicNode, actionContext);
break;
default:
<#noparse>console.log(`${logicNode.logicNodeType}暂未支持`);</#noparse>
}
// 有后续节点时继续递归,反之返回,抛异常无返回值
if (result && result.nextNodes && result.nextNodes.length > 0) {
await this.executeNextNodes(result.nextNodes, actionContext);
}
} catch (error: any) {
<#noparse>throw new Error(`${error && error.message ? error.message : '发生未知错误!'}`);</#noparse>
}
}
/**
* 执行后续节点集合
*
* @param {any[]} nextNodes
* @param {UIActionContext} actionContext
* @memberof ${srfclassname('${item.getCodeName()}')}UILogicBase
*/
public async executeNextNodes(nextNodes: any[], actionContext: UIActionContext) {
if (nextNodes && (nextNodes.length > 0)) {
for (let nextNode of nextNodes) {
await this.executeNode(nextNode, actionContext);
}
}
}
<#if item.getPSDEUILogicNodes?? && item.getPSDEUILogicNodes()??>
<#list item.getPSDEUILogicNodes() as logicNode>
<@executenode logicNode/>
</#list>
</#if>
}
\ No newline at end of file
<#-- START: 计算下一节点 -->
<#macro computeNextNode logicNode>
<#if logicNode.getPSDEUILogicLinks?? && logicNode.getPSDEUILogicLinks()??>
<#list logicNode.getPSDEUILogicLinks() as link>
<#if link.getDstPSDEUILogicNode?? && link.getDstPSDEUILogicNode()??>
<#if link.getPSDEUILogicLinkGroupCond?? && link.getPSDEUILogicLinkGroupCond()??>
// 暂未支持连接条件
</#if>
await this.execute_${link.getDstPSDEUILogicNode().codeName?lower_case}_node(actionContext);
</#if>
</#list>
</#if>
</#macro>
<#-- END: 计算下一节点 -->
<#-- START: 开始节点 -->
<#macro beginNode logicNode>
actionContext.setResult(actionContext.defaultParam.getReal());
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 开始节点 -->
<#-- START: 准备处理参数节点 -->
<#macro prepareParamNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 准备处理参数节点 -->
<#-- START: 重置参数节点 -->
<#macro resetParamNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 重置参数节点 -->
<#-- START: 拷贝参数节点 -->
<#macro copyParamNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 拷贝参数节点 -->
<#-- START: 绑定参数节点 -->
<#macro bindParamNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 绑定参数节点 -->
<#-- START: 重新建立参数节点 -->
<#macro renewParamNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 重新建立参数节点 -->
<#-- START: 调用实体界面行为节点 -->
<#macro deUIActionNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 调用实体界面行为节点 -->
<#-- START: 行为处理节点 -->
<#macro deActionNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 行为处理节点 -->
<#-- START: 实体处理逻辑节点 -->
<#macro deLogicNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 实体处理逻辑节点 -->
<#-- START: 实体数据集节点 -->
<#macro deDataSetNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 实体数据集节点 -->
<#-- START: 附加到数组参数节点 -->
<#macro appendParamNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 附加到数组参数节点 -->
<#-- START: 排序数组参数节点 -->
<#macro sortParamNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 排序数组参数节点 -->
<#-- START: 视图部件调用节点 -->
<#macro viewCtrlInvokeNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 视图部件调用节点 -->
<#-- START: 视图部件事件触发节点 -->
<#macro viewCtrlFireEventNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 视图部件事件触发节点 -->
<#-- START: 调试逻辑参数节点 -->
<#macro debugParamNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 调试逻辑参数节点 -->
<#-- START: 消息弹窗节点 -->
<#macro msgBoxNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 消息弹窗节点 -->
<#-- START: 前端代码节点 -->
<#macro rawJSCoreNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 前端代码节点 -->
<#-- START: 异常处理节点 -->
<#macro throwExceptionNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 异常处理节点 -->
<#-- START: 结束节点 -->
<#macro endNode logicNode>
// TODO 等待补充
console.log('已完成执行 ${logicNode.name} 节点');
</#macro>
<#-- END: 结束节点 -->
<#-- 执行节点 -->
<#macro executenode logicNode>
/**
* 处理参数
*
* @param {UIActionContext} actionContext 界面逻辑上下文
*/
protected async execute_${logicNode.codeName?lower_case}_node(actionContext: UIActionContext) {
// <#if item?? && item.name??>${item.name}</#if>
<#if logicNode.getLogicNodeType() == 'BEGIN'>
<#-- 开始节点 -->
<@beginNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'PREPAREJSPARAM'>
<#-- 准备参数节点 -->
<@prepareParamNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'RESETPARAM'>
<#-- 重置参数节点 -->
<@resetParamNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'COPYPARAM'>
<#-- 拷贝参数节点 -->
<@copyParamNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'BINDPARAM'>
<#-- 绑定参数节点 -->
<@bindParamNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'RENEWPARAM'>
<#-- 重新建立参数节点 -->
<@renewParamNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'DEUIACTION'>
<#-- 调用实体界面行为节点 -->
<@deUIActionNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'DEACTION'>
<#-- 行为处理节点 -->
<@deActionNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'DELOGIC'>
<#-- 实体处理逻辑节点 -->
<@deLogicNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'DEDATASET'>
<#-- 实体数据集节点 -->
<@deDataSetNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'APPENDPARAM'>
<#-- 附加到数组参数节点 -->
<@appendParamNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'SORTPARAM'>
<#-- 排序数组参数节点 -->
<@sortParamNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'VIEWCTRLINVOKE'>
<#-- 视图部件调用节点 -->
<@viewCtrlInvokeNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'VIEWCTRLFIREEVENT'>
<#-- 视图部件事件触发节点 -->
<@viewCtrlFireEventNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'DEBUGPARAM'>
<#-- 调试逻辑参数节点 -->
<@debugParamNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'MSGBOX'>
<#-- 消息弹窗节点 -->
<@msgBoxNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'RAWJSCODE'>
<#-- 前端代码节点 -->
<@rawJSCoreNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'THROWEXCEPTION'>
<#-- 异常处理节点 -->
<@throwExceptionNode logicNode/>
<#elseif logicNode.getLogicNodeType() == 'END'>
<#-- 结束节点 -->
<@endNode logicNode/>
<#else>
console.log('${logicNode.getLogicNodeType()}暂未支持');
</#if>
<@computeNextNode logicNode/>
}
</#macro>
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册