提交 6e40f7c5 编写于 作者: ibizdev's avatar ibizdev

初始化项目

上级
# General
*.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
vue
\ No newline at end of file
<#ibizinclude>
./MODEL_HEADER.ts.ftl
</#ibizinclude>
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}Model
*/
public getDataItems(): any[] {
return [
<#-- 主实体所有属性 -->
<#if ctrl.getPSAppDataEntity()??>
<#assign appDataEntity = ctrl.getPSAppDataEntity() />
<#if appDataEntity.getAllPSAppDEFields?? && appDataEntity.getAllPSAppDEFields()??>
<#list appDataEntity.getAllPSAppDEFields() as defield>
{
<#if defield.isKeyField()>
name: '${appDataEntity.getCodeName()?lower_case}',
prop: '${defield.getCodeName()?lower_case}',
<#else>
name: '${defield.getCodeName()?lower_case}',
</#if>
},
</#list>
</#if>
</#if>
<#-- 关联主实体的主键 -->
<#if ctrl.getPSAppDataEntity()??>
<#assign appDataEntity = ctrl.getPSAppDataEntity() />
<#if appDataEntity.isMajor() == false && appDataEntity.getMinorPSAppDERSs()??>
<#list appDataEntity.getMinorPSAppDERSs() as minorAppDERSs>
<#if minorAppDERSs.getMajorPSAppDataEntity()??>
<#assign majorAppDataEntity = minorAppDERSs.getMajorPSAppDataEntity() />
{
name: '${majorAppDataEntity.getCodeName()?lower_case}',
prop: '${majorAppDataEntity.getKeyPSAppDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#list>
</#if>
</#if>
]
}
<#ibizinclude>
./MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
./MODEL_HEADER.ts.ftl
</#ibizinclude>
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}Model
*/
public getDataItems(): any[] {
return [
<#-- 表单项 -->
<#if ctrl.getPSDEFormItems()??>
<#list ctrl.getPSDEFormItems() as dataitem>
{
name: '${dataitem.getName()}',
<#if dataitem.getPSDEField()??>
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: '${dataitem.getPSDEField().getDataType()}',
</#if>
},
</#list>
</#if>
<#-- 关联主实体的主键 -->
<#if ctrl.getPSAppDataEntity()??>
<#assign appDataEntity = ctrl.getPSAppDataEntity() />
<#if appDataEntity.isMajor() == false && appDataEntity.getMinorPSAppDERSs()??>
<#list appDataEntity.getMinorPSAppDERSs() as minorAppDERSs>
<#if minorAppDERSs.getMajorPSAppDataEntity()??>
<#assign majorAppDataEntity = minorAppDERSs.getMajorPSAppDataEntity() />
{
name: '${majorAppDataEntity.getCodeName()?lower_case}',
prop: '${majorAppDataEntity.getKeyPSAppDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#list>
</#if>
</#if>
<#-- 界面主键标识 -->
<#if ctrl.getPSDEFormItems()??>
<#list ctrl.getPSDEFormItems() as dataitem>
<#if dataitem.getPSAppDEField()?? && dataitem.getPSAppDEField().isKeyField() == true>
<#if !P.exists("importService1", dataitem.getPSAppDEField().getId(), "")>
{
name: '${ctrl.getPSAppDataEntity().getCodeName()?lower_case}',
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#if>
</#list>
</#if>
]
}
<#ibizinclude>
./MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
}
// 默认导出
export default ${srfclassname('${ctrl.codeName}')}Model;
\ No newline at end of file
/**
* ${srfclassname('${ctrl.codeName}')} 部件模型
*
* @export
* @class ${srfclassname('${ctrl.codeName}')}Model
*/
export class ${srfclassname('${ctrl.codeName}')}Model {
\ No newline at end of file
<#ibizinclude>
./SERVICE_HEADER.ts.ftl
</#ibizinclude>
/**
* 获取跨实体数据集合
*
* @param {string} serviceName 服务名称
* @param {string} interfaceName 接口名称
* @param {*} [context]
* @param {*} [data]
* @param {boolean} [isLoading]
* @returns {Promise<any[]>}
* @memberof ${srfclassname(ctrl.codeName)}Service
*/
public async getItems(serviceName: string, interfaceName: string, context?: any, data?: any, isLoading?: boolean): Promise<any[]> {
<#list ctrl.getPSDEFormItems() as deItem>
<#if deItem.getPSEditor()?? && deItem.getPSEditor().getPSAppDataEntity?? && deItem.getPSEditor().getPSAppDataEntity()?? && deItem.getPSEditor().getPSAppDEDataSet?? && deItem.getPSEditor().getPSAppDEDataSet()??>
<#assign _appde = deItem.getPSEditor().getPSAppDataEntity()/>
<#assign deDataSet = deItem.getPSEditor().getPSAppDEDataSet()/>
<#if !P.exists("importService4", _appde.getId() + deDataSet.getCodeName(), "")>
<#if _appde.getId() == appde.getId()>
if (Object.is(serviceName, '${srfclassname(_appde.getCodeName())}Service') && Object.is(interfaceName, '${deDataSet.getCodeName()}')) {
await this.onBeforeAction(interfaceName, context, data, isLoading);
const response: any = await this.service.${deDataSet.getCodeName()}(data);
await this.onAfterAction(interfaceName, context, response);
return this.doItems(response);
}
<#else>
if (Object.is(serviceName, '${srfclassname(_appde.getCodeName())}Service') && Object.is(interfaceName, '${deDataSet.getCodeName()}')) {
const service: any = await this.getService('${_appde.getCodeName()?lower_case}');
await this.onBeforeAction(interfaceName, context, data, isLoading);
const response: any = await service.${deDataSet.getCodeName()}(data);
await this.onAfterAction(interfaceName, context, response);
return this.doItems(response);
}
</#if>
</#if>
</#if>
</#list>
return [];
}
/**
* 合并配置的默认值
*
* @protected
* @param {*} [response={}]
* @memberof ${srfclassname(ctrl.codeName)}Service
*/
public mergeDefaults(response:any = {}): void {
if (response.data) {
<#list ctrl.getAllPSDEFormDetails() as formdetail><#t>
<#if formdetail.getCreateDV?? && formdetail.getCreateDV()??><#t>
<#if !(formdetail.getCreateDV() == '')><#t>
Object.assign(response.data, { '${formdetail.getCodeName()?lower_case}': '${formdetail.getCreateDV()}' });
</#if>
</#if>
</#list>
}
}
<#ibizinclude>
./SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
}
// 默认导出
export default ${srfclassname('${ctrl.codeName}')}Service;
\ No newline at end of file
import { <#if extendsClass??>${extendsClass}</#if> } from '@/ibiz-core';
import { Util, HttpResponse } from '@/ibiz-core/utils';
import { ${srfclassname(ctrl.codeName)}Model } from '@/app-core/ctrl-model/<#if ctrl.getPSAppDataEntity?? && ctrl.getPSAppDataEntity()??>${srffilepath2(ctrl.getPSAppDataEntity().getCodeName())}<#else>app</#if>/${srffilepath2(ctrl.getCodeName())}-${ctrl.getControlType()?lower_case}-model';
<#if import_block??>${import_block}</#if>
/**
* ${srfclassname(ctrl.codeName)} 部件服务对象
*
* @export
* @class ${srfclassname(ctrl.codeName)}Service
* @extends {<#if extendsClass??>${extendsClass}</#if>}
*/
export class ${srfclassname(ctrl.codeName)}Service extends <#if extendsClass??>${extendsClass}</#if> {
/**
* 部件模型
*
* @protected
* @type {${srfclassname(ctrl.codeName)}Model}
* @memberof ControlServiceBase
*/
protected model: ${srfclassname(ctrl.codeName)}Model = new ${srfclassname(ctrl.codeName)}Model();
<#if view.isPSDEView()?? && view.getTempMode?? && view.getTempMode()?? && view.getTempMode() == 2>
/**
* 是否为从数据临时模式
*
* @protected
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}Service
*/
protected isTempMode: boolean = true;
</#if>
<#if appde??>
/**
* 应用实体名称
*
* @protected
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}Service
*/
protected appDEName: string = '${appde.getCodeName()?lower_case}';
/**
* 当前应用实体主键标识
*
* @protected
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}Service
*/
protected appDeKey: string = '${appde.getKeyPSAppDEField().getCodeName()?lower_case}';
</#if>
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>TabExpServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=TABEXPPANEL
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>TabViewPanelServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=TABVIEWPANEL
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/MODEL_HEADER.ts.ftl
</#ibizinclude>
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.getCodeName()}')}${srfclassname('${ctrl.name}')}Mode
*/
public getDataItems(): any[] {
return [
<#-- 列表数据项 -->
<#if ctrl.getPSListDataItems()??>
<#list ctrl.getPSListDataItems() as dataitem>
{
name: '${dataitem.getName()}',
<#if dataitem.getPSDEField()??>
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: '${dataitem.getPSDEField().getDataType()}',
</#if>
},
</#list>
</#if>
<#-- 关联主实体的主键 -->
<#if ctrl.getPSAppDataEntity()??>
<#assign appDataEntity = ctrl.getPSAppDataEntity() />
<#if appDataEntity.isMajor() == false && appDataEntity.getMinorPSAppDERSs()??>
<#list appDataEntity.getMinorPSAppDERSs() as minorAppDERSs>
<#if minorAppDERSs.getMajorPSAppDataEntity()??>
<#assign majorAppDataEntity = minorAppDERSs.getMajorPSAppDataEntity() />
{
name: '${majorAppDataEntity.getCodeName()?lower_case}',
prop: '${majorAppDataEntity.getKeyPSAppDEField().getCodeName()?lower_case}'
},
</#if>
</#list>
</#if>
<#if ctrl.getPSListDataItems()??>
<#list ctrl.getPSListDataItems() as dataitem>
<#-- 界面主键标识 -->
<#if dataitem.getPSDEField?? && dataitem.getPSDEField()??>
<#if !P.exists("importService", dataitem.getPSDEField().getId(), "")>
<#if dataitem.getPSDEField().isKeyDEField() == true>
{
name: '${appDataEntity.getCodeName()?lower_case}',
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#if>
</#if>
</#list>
</#if>
</#if>
{
name:'size',
prop:'size'
},
{
name:'query',
prop:'query'
},
{
name:'page',
prop:'page'
}
]
}
<#ibizinclude>
../@MACRO/MODEL/MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>ListServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=LIST
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>WizardPanelServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=WIZARDPANEL
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>MultiEditViewPanelServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=MULTIEDITVIEWPANEL
\ No newline at end of file
{
id: '${item.getId()?j_string}',
name: '${item.getName()?j_string}',
text: '${item.getText()?j_string}',
type: '<#if item.getItemType()??>${item.getItemType()?j_string}<#else></#if>',
counterid: '<#if item.getCounterId()??>${item.getCounterId()?j_string}<#else></#if>',
tooltip: '<#if item.getTooltip()??>${item.getTooltip()?j_string}</#if>',
expanded: <#if item.isExpanded()>true<#else>false</#if>,
separator: <#if item.isSeperator()>true<#else>false</#if>,
hidden: <#if item.isHidden()>true<#else>false</#if>,
hidesidebar: <#if item.isHideSideBar()>true<#else>false</#if>,
opendefault: <#if item.isOpenDefault()>true<#else>false</#if>,
<#if item.getPSSysImage()??>
iconcls: '${item.getPSSysImage().getCssClass()}',
icon: '${item.getPSSysImage().getImagePath()}',
<#else>
iconcls: '',
icon: '',
</#if>
<#if item.getPSSysCss()??>
textcls: '${item.getPSSysCss().getCssName()}',
<#else>
textcls: '',
</#if>
<#if item.getPSAppFunc()??>
appfunctag: '${item.getPSAppFunc().codeName}',
<#else>
appfunctag: '',
</#if>
resourcetag: '<#if item.getAccessKey()??>${item.getAccessKey()}</#if>',
<#if item.getPSAppMenuItems()??>
items: [
<#list item.getPSAppMenuItems() as child>
${P.getPartCode(child,"ITEM").code},
</#list>
],
</#if>
}
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/MODEL_HEADER.ts.ftl
</#ibizinclude>
/**
* 菜单项集合
*
* @private
* @type {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}Model
*/
private items: any[] = [
<#list ctrl.getPSAppMenuItems() as child>
${P.getPartCode(child,"ITEM").code},
</#list>
];
/**
* 应用功能集合
*
* @private
* @type {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}Model
*/
private funcs: any[] = [
<#if view.isDefaultPage?? && view.isDefaultPage()>
<#list ctrl.getPSAppFuncs() as appFuncs>
{
appfunctag: '${appFuncs.getCodeName()}',
appfuncyype: '${appFuncs.getAppFuncType()}',
<#if appFuncs.getAppFuncType() == 'APPVIEW'>
<#assign dataview = appFuncs.getPSAppView()/>
openmode: '${dataview.getOpenMode()}',
componentname: '${srffilepath2(dataview.getCodeName())}',
codename: '${dataview.getCodeName()?lower_case}',
deResParameters: [],
<#-- BEGIN:是否应用实体视图 -->
<#if dataview.isPSDEView()>
<#assign appDataEntity = dataview.getPSAppDataEntity()/>
routepath: '/${view.getCodeName()?lower_case}/:${view.getCodeName()?lower_case}?/${srfpluralize(appDataEntity.codeName)?lower_case}/:${appDataEntity.getCodeName()?lower_case}?/${dataview.getPSDEViewCodeName()?lower_case}/:${dataview.getPSDEViewCodeName()?lower_case}?',
parameters: [
{ pathName: '${srfpluralize(appDataEntity.codeName)?lower_case}', parameterName: '${appDataEntity.getCodeName()?lower_case}' },
{ pathName: '${dataview.getPSDEViewCodeName()?lower_case}', parameterName: '${dataview.getPSDEViewCodeName()?lower_case}' },
],
<#else>
routepath: '/${view.getCodeName()?lower_case}/:${view.getCodeName()?lower_case}?/${dataview.getCodeName()?lower_case}/:${dataview.getCodeName()?lower_case}?',
parameters: [
{ pathName: '${dataview.getCodeName()?lower_case}', parameterName: '${dataview.getCodeName()?lower_case}' },
],
</#if>
<#-- END:是否应用实体视图 -->
</#if>
},
</#list>
</#if>
];
/**
* 获取所有菜单项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}Model
*/
public getAppMenuItems(): any[] {
return this.items;
}
/**
* 获取所有应用功能集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}Model
*/
public getAppFuncs(): any[] {
return this.funcs;
}
<#ibizinclude>
../@MACRO/MODEL/MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>AppMenuServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
/**
* 获取数据
*
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public get(params: any = {}): Promise<any> {
return this.http.get('v7/${srffilepath2(ctrl.codeName)}${ctrl.getControlType()?lower_case}', params);
}
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=APPMENU
\ No newline at end of file
<#assign extendsClass>SearchFormServiceBase</#assign>
<#ibizinclude>
../@MACRO/MODEL/FORM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#-- 表单项 -->
<#if ctrl.getPSDEFormItems()??>
<#list ctrl.getPSDEFormItems() as dataitem>
{
name: '${dataitem.getName()}',
<#if dataitem.getPSDEField()??>
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: '${dataitem.getPSDEField().getDataType()}',
</#if>
},
</#list>
</#if>
<#-- 关联主实体的主键 -->
<#if ctrl.getPSAppDataEntity()??>
<#assign appDataEntity = ctrl.getPSAppDataEntity() />
<#if appDataEntity.isMajor() == false && appDataEntity.getMinorPSAppDERSs()??>
<#list appDataEntity.getMinorPSAppDERSs() as minorAppDERSs>
<#if minorAppDERSs.getMajorPSAppDataEntity()??>
<#assign majorAppDataEntity = minorAppDERSs.getMajorPSAppDataEntity() />
{
name: '${majorAppDataEntity.getCodeName()?lower_case}',
prop: '${majorAppDataEntity.getKeyPSAppDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#list>
</#if>
</#if>
<#-- 界面主键标识 -->
<#if ctrl.getPSDEFormItems()??>
<#list ctrl.getPSDEFormItems() as dataitem>
<#if dataitem.getPSAppDEField()?? && dataitem.getPSAppDEField().isKeyField() == true>
<#if !P.exists("importService1", dataitem.getPSAppDEField().getId(), "")>
{
name: '${ctrl.getPSAppDataEntity().getCodeName()?lower_case}',
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#if>
</#list>
</#if>
\ No newline at end of file
<#assign extendsClass>SearchFormServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/FORM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=SEARCHFORM
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>DrTabServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=DRTAB
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>DrBarServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=DRBAR
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/MODEL_HEADER.ts.ftl
</#ibizinclude>
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.getCodeName()}')}${srfclassname('${ctrl.name}')}Mode
*/
public getDataItems(): any[] {
return [
{
name:'query',
prop:'query'
},
]
}
<#ibizinclude>
../@MACRO/MODEL/MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>ChartServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#-- 暂只支持第一个序列 -->
<#list ctrl.getPSDEChartSerieses() as series>
<#if series_index == 0>
<#assign chartSeries = series/>
</#if>
</#list>
/**
* 生成图表数据
*
* @param {string} action
* @param {*} response
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public handleResponse(action: string, response: any): any {
const chartOption: any = {};
<#-- 获取x轴的分类属性字段 -->
const catalogFields: any = [<#rt>
<#if chartSeries.getCatalogField?? && chartSeries.getCatalogField()??>
<#assign catalogField = chartSeries.getCatalogField()>
<#list catalogField?split(";") as field>
"${field?lower_case}",<#t>
</#list>
</#if>
];<#lt>
<#-- 获取y轴值属性字段和中文名称 -->
const valueFields: any = [<#rt>
<#if chartSeries.getValueField?? && chartSeries.getValueField()??>
<#assign valueField = chartSeries.getValueField()>
<#list valueField?split(";") as field>
[ "${field?lower_case}", "${de.getPSDEField(field).getLogicName()}" ],<#t>
</#list>
</#if>
];<#lt>
// 数据按分类属性分组处理
const xFields:any = [];
const yFields:any = [];
valueFields.forEach((field: any, index: number) => {
yFields[index] = [];
});
response.data.forEach((item:any) => {
if(xFields.indexOf(item[catalogFields[0]]) > -1){
const num = xFields.indexOf(item[catalogFields[0]]);
valueFields.forEach((field: any,index: number) => {
yFields[index][num] += item[field[0]];
});
}else{
xFields.push(item[catalogFields[0]]);
valueFields.forEach((field: any,index: number) => {
yFields[index].push(item[field[0]]);
});
}
});
<#-- 折线图和柱状图需要配置xAxis,饼图不需要 -->
<#if chartSeries.getSeriesType() == 'line' || chartSeries.getSeriesType() == 'bar'>
chartOption.xAxis = { data: xFields };
</#if>
<#-- 配置series -->
const series: any = [];
valueFields.forEach((field: any,index: number) => {
const yData: any = [];
xFields.forEach((item:any, num: number) => {
<#if chartSeries.getSeriesType() == 'line' || chartSeries.getSeriesType() == 'bar'>
yData.push(yFields[index][num]);
<#elseif chartSeries.getSeriesType() == 'pie'>
yData.push({value: yFields[index][num], name: item});
</#if>
});
yData.sort(function (a:any, b:any) { return a.value - b.value; });
series.push({
name: field[1],
type: "${chartSeries.getSeriesType()}",
data: yData,
<#-- 饼图额外配置 -->
<#if chartSeries.getSeriesType() == 'pie'>
top:"40px",
left: (100 / valueFields.length) * index + "%",
right: (100 / valueFields.length) * (valueFields.length - index - 1) + "%",
animationType: 'scale',
animationEasing: 'elasticOut',
animationDelay: function (idx: any) {
return Math.random() * 200;
}
</#if>
});
});
chartOption.series = series;
return new HttpResponse(response.status, chartOption);
}
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=CHART
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>DashboardServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=DASHBOARD
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/MODEL_HEADER.ts.ftl
</#ibizinclude>
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.getCodeName()}')}${srfclassname('${ctrl.name}')}Mode
*/
public getDataItems(): any[] {
return [
<#-- 数据视图数据项 -->
<#if ctrl.getPSDEDataViewDataItems()??>
<#list ctrl.getPSDEDataViewDataItems() as dataitem>
{
name: '${dataitem.getName()}',
<#if dataitem.getPSDEField()??>
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: '${dataitem.getPSDEField().getDataType()}',
</#if>
},
</#list>
</#if>
<#-- 关联主实体的主键 -->
<#if ctrl.getPSAppDataEntity()??>
<#assign appDataEntity = ctrl.getPSAppDataEntity() />
<#if appDataEntity.isMajor() == false && appDataEntity.getMinorPSAppDERSs()??>
<#list appDataEntity.getMinorPSAppDERSs() as minorAppDERSs>
<#if minorAppDERSs.getMajorPSAppDataEntity()??>
<#assign majorAppDataEntity = minorAppDERSs.getMajorPSAppDataEntity() />
{
name: '${majorAppDataEntity.getCodeName()?lower_case}',
prop: '${majorAppDataEntity.getKeyPSAppDEField().getCodeName()?lower_case}'
},
</#if>
</#list>
</#if>
</#if>
<#if ctrl.getPSDEDataViewDataItems()??>
<#list ctrl.getPSDEDataViewDataItems() as dataitem>
<#-- 界面主键标识 -->
<#if dataitem.getPSDEField?? && dataitem.getPSDEField()?? && dataitem.getPSDEField().isKeyDEField() == true>
<#if !P.exists("importService", dataitem.getPSDEField().getId(), "")>
{
name: '${ctrl.getPSAppDataEntity().getCodeName()?lower_case}',
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#if>
</#list>
</#if>
<#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'MODEL_CONTENT.ts').code}
</#if>
{
name:'size',
prop:'size'
},
{
name:'query',
prop:'query'
},
{
name:'sort',
prop:'sort'
},
{
name:'page',
prop:'page'
},
{
name:'srfparentdata',
prop:'srfparentdata'
}
]
}
<#ibizinclude>
../@MACRO/MODEL/MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>DataViewServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=DATAVIEW
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/MODEL_HEADER.ts.ftl
</#ibizinclude>
/**
* 日历项类型
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.getCodeName()}')}${srfclassname('${ctrl.name}')}Mode
*/
public itemType: string = "";
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.getCodeName()}')}${srfclassname('${ctrl.name}')}Mode
*/
public getDataItems(): any[] {
let dataItems: any = [
<#-- 关联主实体的主键 -->
<#if ctrl.getPSAppDataEntity()??>
<#assign appDataEntity = ctrl.getPSAppDataEntity() />
<#if appDataEntity.isMajor() == false && appDataEntity.getMinorPSAppDERSs()??>
<#list appDataEntity.getMinorPSAppDERSs() as minorAppDERSs>
<#if minorAppDERSs.getMajorPSAppDataEntity()??>
<#assign majorAppDataEntity = minorAppDERSs.getMajorPSAppDataEntity() />
{
name: '${majorAppDataEntity.getCodeName()?lower_case}',
prop: '${majorAppDataEntity.getKeyPSAppDEField().getCodeName()?lower_case}'
},
</#if>
</#list>
</#if>
</#if>
{
name: 'queryStart',
prop: 'start'
},
{
name: 'queryEnd',
prop: 'end'
},
{
name: 'color',
},
{
name: 'textColor',
},
{
name: 'itemType',
},
];
switch (this.itemType) {
<#-- 日历项实体映射 -->
<#if ctrl.getPSSysCalendarItems()??>
<#list ctrl.getPSSysCalendarItems() as calendarItem>
<#if calendarItem.getPSAppDataEntity()??>
<#assign appDataEntity = calendarItem.getPSAppDataEntity() />
case "${calendarItem.getItemType()?lower_case}":
dataItems = [...dataItems,
{
name: '${appDataEntity.getCodeName()?lower_case}',
prop: '${appDataEntity.getKeyPSAppDEField().getCodeName()?lower_case}'
},
{
name: 'title',
prop: '${appDataEntity.getMajorPSAppDEField().getCodeName()?lower_case}'
},
{
name:'start',
prop:'${calendarItem.getBeginTimePSDEField().getCodeName()?lower_case}'
},
{
name:'end',
prop:'${calendarItem.getEndTimePSDEField().getCodeName()?lower_case}'
},
];
break;
</#if>
</#list>
</#if>
}
return dataItems;
}
<#ibizinclude>
../@MACRO/MODEL/MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>CalendarServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
/**
* 事件配置集合
*
* @protected
* @type {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected eventsConfig: any = {
<#if ctrl.getPSSysCalendarItems()??>
<#list ctrl.getPSSysCalendarItems() as calendarItem>
<#if calendarItem.getPSAppDataEntity()?? && calendarItem.getPSDEDataSet()??>
'${calendarItem.getItemType()?lower_case}': {
itemName : '${calendarItem.getName()}',
itemType : '${calendarItem.getItemType()?lower_case}',
color : '${calendarItem.getBKColor()}',
textColor : '${calendarItem.getColor()}',
},
</#if>
</#list>
</#if>
};
/**
* 查询数据
*
* @param {string} itemType
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isLoading]
* @returns {Promise<HttpResponse>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public async search(itemType: string, context: any = {}, data: any = {}, isLoading?: boolean): Promise<HttpResponse> {
let item: any = {};
let action: string = '';
this.model.itemType = itemType;
try {
switch (itemType) {
<#if ctrl.getPSSysCalendarItems()??>
<#list ctrl.getPSSysCalendarItems() as calendarItem>
<#if calendarItem.getPSAppDataEntity()?? && calendarItem.getPSDEDataSet()??>
<#assign _appde = calendarItem.getPSAppDataEntity() />
<#assign deDataSet = calendarItem.getPSDEDataSet() />
case "${calendarItem.getItemType()?lower_case}":
action = 'Fetch${deDataSet.getCodeName()}';
data = this.handleRequestData(action, context, data);
await this.onBeforeAction(action, context, data, isLoading);
<#if _appde.getId() == appde.getId()>
item = {
...{ ${calendarItem.getItemType()?lower_case}: await this.loadDEDataSet(action, context, data, '${calendarItem.getItemType()?lower_case}') },
};
<#else>
item = {
...{ ${calendarItem.getItemType()?lower_case}: await this.loadDEDataSet(action, context, data, '${calendarItem.getItemType()?lower_case}', '${_appde.getCodeName()?lower_case}') },
};
</#if>
break;
</#if>
</#list>
</#if>
};
} catch (response) {
await this.onAfterAction(action, context, response);
return new HttpResponse(response.status);
}
await this.onAfterAction(action, context);
return new HttpResponse(200, item);
}
/**
* 修改数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isLoading]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public async update(itemType: string, context: any = {}, data: any = {}, isLoading?: boolean): Promise<any> {
await this.onBeforeAction('', context, data, isLoading);
data = this.handleRequestData('', context, data);
let response: any;
switch (itemType) {
<#if ctrl.getPSSysCalendarItems()??>
<#list ctrl.getPSSysCalendarItems() as calendarItem>
<#if calendarItem.getPSAppDataEntity()??>
<#assign _appde = calendarItem.getPSAppDataEntity() />
<#if _appde.getId() == appde.getId()>
case "${calendarItem.getItemType()}":
response = await this.service.Update(context, data);
break;
<#else>
case "${calendarItem.getItemType()}":
response = await this.getService('${_appde.getCodeName()?lower_case}').then((s: any) => s.Update(context, data));
break;
</#if>
</#if>
</#list>
</#if>
}
if (!response.isError()) {
response = this.handleResponse("", response);
}
await this.onAfterAction('', context, response);
return new HttpResponse(response.status, response.data);
}
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=CALENDAR
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>TreeViewServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#if ctrl.getPSDETreeNodes()??>
<#list ctrl.getPSDETreeNodes() as node>
/**
* ${node.getName()}节点标识
*
* @protected
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}Service
*/
protected TREENODE_${node.getNodeType()?upper_case}: string = '${node.getNodeType()?j_string}';
</#list>
</#if>
/**
* 获取节点数据
*
* @param {string} action
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<HttpResponse>}
* @memberof ${srfclassname(ctrl.codeName)}Service
*/
public async getNodes(context:any = {}, data: any = {}, isloading?: boolean): Promise<HttpResponse> {
const { srfparentkey, srfcat, srfnodeid, query }: any = data;
const srfnodefilter: any = query || data.srfnodefilter;
const list: any[] = [];
const filter: any = {};
<#-- BEGIN:逻辑代码 -->
if (!srfnodeid || Object.is(srfnodeid, '#')) {
<#if ctrl.isRootVisible()>
await this.fill${srfclassname(ctrl.getRootPSDETreeNode().getNodeType()?lower_case)}Nodes(context, filter, list);
return new HttpResponse(200, { records: list });
<#else>
srfnodeid = this.TREENODE_${ctrl.getRootPSDETreeNode().getNodeType()?upper_case};
</#if>
}
let strTreeNodeId: string = srfnodeid;
let strRealNodeId: string = '';
let bRootSelect: boolean = false;
let strNodeType: string | null = null;
let strRootSelectNode: string = '';
if (Object.is(strTreeNodeId, this.TREENODE_${ctrl.getRootPSDETreeNode().getNodeType()?upper_case})) {
strNodeType = this.TREENODE_${ctrl.getRootPSDETreeNode().getNodeType()?upper_case};
if (srfparentkey) {
strRealNodeId = srfparentkey;
}
} else {
let nPos = strTreeNodeId.indexOf(this.TREENODE_SEPARATOR);
if (nPos === -1) {
return new HttpResponse(200, null, { code: 100, message: '树节点 ' + strTreeNodeId + ' 标识无效' });
}
strNodeType = strTreeNodeId.substring(0, nPos);
strRealNodeId = strTreeNodeId.substring(nPos + 1);
}
Object.assign(filter,
{
srfparentkey: srfparentkey,
srfcat: srfcat,
srfnodefilter: srfnodefilter,
strRealNodeId: strRealNodeId,
srfnodeid: srfnodeid,
strNodeType: strNodeType
}
);
// 分解节点标识
const nodeid: string[] = strRealNodeId.split(this.TREENODE_SEPARATOR);
for (let i = 0; i < nodeid.length; i++) {
switch (i) {
case 0:
Object.assign(filter, { nodeid: nodeid[0] });
break;
case 1:
Object.assign(filter, { nodeid2: nodeid[1] });
break;
case 2:
Object.assign(filter, { nodeid3: nodeid[2] });
break;
case 3:
Object.assign(filter, { nodeid4: nodeid[3] });
break;
default:
break;
}
}
<#if ctrl.getPSDETreeNodes()??>
<#list ctrl.getPSDETreeNodes() as node>
if (Object.is(strNodeType, this.TREENODE_${node.getNodeType()?upper_case})) {
await this.fill${srfclassname(node.getNodeType()?lower_case)}NodeChilds(context, filter, list);
return new HttpResponse(200, { records: list });
}
</#list>
</#if>
<#-- END:逻辑代码 -->
return new HttpResponse(500, null, { code: 100, message: '树节点' + strTreeNodeId + ' 标识无效' });
}
<#-- BEGIN:填充代码 -->
<#if ctrl.getPSDETreeNodes()??>
<#list ctrl.getPSDETreeNodes() as node>
<#assign filtername="">
<#assign entityname="">
/**
* 填充 树视图节点[${node.getName()}]
*
* @protected
* @param {any{}} context
* @param {*} filter
* @param {any[]} list
* @returns {Promise<any>}
* @memberof ${srfclassname(ctrl.codeName)}Service
*/
protected async fill${srfclassname(node.getNodeType()?lower_case)}Nodes(context: any = {}, filter: any, list: any[]): Promise<any> {
<#if node.getTreeNodeType() == 'STATIC'>
const treeNode: any = {};
Object.assign(treeNode, { text: '${node.getText()?j_string}' });
<#if node.isEnableQuickSearch()>
if (treeNode.srfnodefilter) {
if (treeNode.text().toUpperCase().indexOf(filter.srfnodefilter.toUpperCase()) === -1) {
return;
}
}
</#if>
Object.assign(treeNode, { srfmajortext: treeNode.text });
let strNodeId: string = '${node.getNodeType()?j_string}';
<#if node.getNodeValue()?? && node.getNodeValue()?length gt 0>
Object.assign(treeNode, { srfkey: '${node.getNodeValue()?j_string}' });
strNodeId += this.TREENODE_SEPARATOR;
strNodeId += '${node.getNodeValue()?j_string}';
<#if node.isAppendPNodeId()>
strNodeId += this.TREENODE_SEPARATOR;
strNodeId += filter.realnodeid;
</#if>
<#else>
// 没有指定节点值,直接使用父节点值
Object.assign(treeNode, { srfkey: filter.realnodeid });
strNodeId += this.TREENODE_SEPARATOR;
strNodeId += filter.realnodeid;
</#if>
Object.assign(treeNode, { id: strNodeId });
<#if node.getPSSysImage()??>
<#if node.getPSSysImage().getCssClass()?? && node.getPSSysImage().getCssClass()?length gt 0>
Object.assign(treeNode, { iconcls: '${node.getPSSysImage().getCssClass()}' });
<#else>
Object.assign(treeNode, { icon: '${node.getPSSysImage().getImagePath()}' });
</#if>
</#if>
<#if node.isEnableCheck()>
Object.assign(treeNode, { enablecheck: true });
</#if>
<#if node.isDisableSelect()>
Object.assign(treeNode, { disableselect: true });
</#if>
<#if node.isExpanded()>
Object.assign(treeNode, { expanded: true });
<#else>
Object.assign(treeNode, { expanded: filter.isAutoexpand });
</#if>
<#if node.hasPSDETreeNodeRSs()>
Object.assign(treeNode, { leaf: false });
<#else>
Object.assign(treeNode, { leaf: true });
</#if>
list.push(treeNode);
</#if>
<#if node.getTreeNodeType() == 'CODELIST' && node.getPSCodeList()??>
<#if node.getPSCodeList().getCodeListType()?? && node.getPSCodeList().getCodeListType() == 'STATIC'>
const codeListIems: any[] = await this.codeListService.getItems('${node.getPSCodeList().codeName}');
<#elseif node.getPSCodeList().getCodeListType()?? && node.getPSCodeList().getCodeListType() == 'DYNAMIC'>
const response: any = await this.codeListService.getItems('${node.getPSCodeList().codeName}');
if (response.status === 200) {
const codeListIems: any[] = response.data || [];
let bFirst: boolean = true;
codeListIems.forEach((item:any) => {
const treeNode: any = {};
Object.assign(treeNode, { text: item.text });
<#if node.isEnableQuickSearch()>
if(filter.srfnodefilter){
if(treeNode.getText().toUpperCase().indexOf(filter.getSrfnodefilter().toUpperCase())==-1)
continue;
}
</#if>
Object.assign(treeNode, { srfmajortext: treeNode.text });
let strNodeId: string = "${srfjavastring(node.getNodeType())}";
Object.assign(treeNode, { srfkey: item.value });
strNodeId += this.TREENODE_SEPARATOR;
strNodeId += item.value;
<#if node.isAppendPNodeId()>
strNodeId += TREENODE_SEPARATOR;
strNodeId += filter.getRealnodeid();
</#if>
Object.assign(treeNode, { id: strNodeId });
<#if node.getPSSysImage()??>
<#if node.getPSSysImage().getCssClass()?? && node.getPSSysImage().getCssClass()?length gt 0>
Object.assign(treeNode, { iconcls: '${node.getPSSysImage().getCssClass()}' });
<#else>
Object.assign(treeNode, { icon: '${node.getPSSysImage().getImagePath()}' });
</#if>
</#if>
<#if node.isEnableCheck()>
Object.assign(treeNode, { enablecheck: true });
</#if>
<#if node.isDisableSelect()>
Object.assign(treeNode, { disableselect: true });
</#if>
<#if node.isExpanded()>
<#if node.isExpandFirstOnly()>
Object.assign(treeNode, { expanded: bFirst });
<#else>
Object.assign(treeNode, { expanded: true });
</#if>
<#else>
Object.assign(treeNode, { expanded: filter.isautoexpand });
</#if>
<#if node.hasPSDETreeNodeRSs()>
Object.assign(treeNode, { leaf: false });
<#else>
Object.assign(treeNode, { leaf: true });
</#if>
list.push(treeNode);
bFirst = false;
});
}
</#if>
</#if>
<#if node.getTreeNodeType() == 'DE' && node.getPSDataEntity()??>
<#assign filtername>${node.getPSDataEntity().codeName}SearchFilter</#assign>
<#assign entityname>${node.getPSDataEntity().codeName}</#assign>
const searchFilter: any = {};
<#list ctrl.getPSDETreeNodeRSs() as noders>
<#if noders.getChildPSDETreeNode().id == node.id>
<#if noders.getParentFilter()?? && noders.getParentFilter()?length gt 0>
<#assign pickupfield=noders.getParentFilter()>
if (Object.is(filter.nodetype, this.TREENODE_${noders.getParentPSDETreeNode().getNodeType()?upper_case})) {
Object.assign(searchFilter, { n_${pickupfield?lower_case}_eq: filter.nodeid<#if noders.getParentValueLevel() gt 1>${noders.getParentValueLevel()?c}</#if> });
}
<#elseif noders.getParentPSDER1N()??>
<#assign pickupfield=noders.getParentPSDER1N().getPSPickupDEField()>
if (Object.is(filter.nodetype, this.TREENODE_${noders.getParentPSDETreeNode().getNodeType()?upper_case})) {
Object.assign(searchFilter, { n_${pickupfield.getName()?lower_case}_eq: filter.nodeid<#if noders.getParentValueLevel() gt 1>${noders.getParentValueLevel()?c}</#if> });
}
</#if>
</#if>
</#list>
Object.assign(searchFilter, { total: false });
Object.assign(searchFilter, { nodeid: filter.nodeid });
<#if node.isEnableQuickSearch()>
Object.assign(searchFilter, { query: filter.srfnodefilter });
<#else>
// 节点不支持搜索
</#if>
let bFirst: boolean = true;
const response: any = await this.search${srfclassname(node.getNodeType()?lower_case)}(context, searchFilter, filter);
if (response.status === 200 && response.data) {
const records: any[] = response.data || [];
records.forEach((entity: any) => {
const treeNode: any = {};
const strId: string = entity.${node.getPSAppDataEntity().getKeyPSAppDEField().codeName?lower_case};
<#if node.getTextPSDEField()??>
const strText: string = entity.${node.getTextPSDEField().codeName?lower_case};
<#else>
const strText: string = entity.${node.getPSAppDataEntity().getMajorPSAppDEField().codeName?lower_case};
</#if>
Object.assign(treeNode, { srfkey: strId });
Object.assign(treeNode, { text: strText, srfmajortext: strText });
let strNodeId: string = '${node.getNodeType()?j_string}';
strNodeId += this.TREENODE_SEPARATOR;
strNodeId += strId;
<#if node.isAppendPNodeId()>
strNodeId += this.TREENODE_SEPARATOR;
strNodeId += filter.realnodeid;
</#if>
Object.assign(treeNode, { id: strNodeId });
<#if node.getPSSysImage()??>
<#if node.getPSSysImage().getCssClass()?? && node.getPSSysImage().getCssClass()?length gt 0>
Object.assign(treeNode, { iconcls: '${node.getPSSysImage().getCssClass()}' });
<#else>
Object.assign(treeNode, { icon: '${node.getPSSysImage().getImagePath()}' });
</#if>
</#if>
<#if node.isEnableCheck()>
Object.assign(treeNode, { enablecheck: true });
</#if>
<#if node.isDisableSelect()>
Object.assign(treeNode, { disableselect: true });
</#if>
<#if node.isExpanded()>
<#if node.isExpandFirstOnly()>
Object.assign(treeNode, { expanded: bFirst });
<#else>
Object.assign(treeNode, { expanded: true });
</#if>
<#else>
Object.assign(treeNode, { expanded: filter.isautoexpand });
</#if>
<#if node.hasPSDETreeNodeRSs()>
Object.assign(treeNode, { leaf: false });
<#else>
Object.assign(treeNode, { leaf: true });
</#if>
<#if node.getLeafFlagPSDEField()??>
let objLeafFlag = entity.${node.getLeafFlagPSDEField().codeName?lower_case};
if (objLeafFlag != null ) {
let strLeafFlag: string = objLeafFlag.toString().toLowerCase();
if (Object.is(strLeafFlag, '1') || Object.is(strLeafFlag, 'true')){
Object.assign(treeNode, { leaf: true });
}
}
</#if>
<#if node.getPSDETreeNodeDataItems()??>
<#list node.getPSDETreeNodeDataItems() as dataitem>
<#if dataitem.getPSDEField()??>
Object.assign(treeNode, { ${dataitem.name?lower_case}: entity.${dataitem.getPSDEField().codeName?lower_case} });
</#if>
</#list>
</#if>
list.push(treeNode);
bFirst = false;
});
}
</#if>
return list;
}
<#if (filtername?length gt 0) && (entityname?length gt 0)>
/**
* 获取查询集合
*
* @protected
* @param {*} [context={}]
* @param {*} searchFilter
* @param {*} filter
* @returns {any[]}
* @memberof TestEnetityDatasService
*/
protected async search${srfclassname(node.getNodeType()?lower_case)}(context: any = {}, searchFilter: any, filter: any): Promise<any> {
await this.onBeforeAction('', context, null, false);
if (!searchFilter.page) {
Object.assign(searchFilter, { page: 0 });
}
if (!searchFilter.size) {
Object.assign(searchFilter, { size: 9999 });
}
<#if appde?? && appde.getId() != node.getPSAppDataEntity().getId()>
const service: any = await this.getService('${node.getPSAppDataEntity().codeName?lower_case}');
<#else>
const service: any = this.service;
</#if>
if (Util.isFunction(service['${node.getPSAppDEDataSet().getCodeName()}'])) {
const response: HttpResponse = await service['${node.getPSAppDEDataSet().getCodeName()}'](context, searchFilter, false);
if (response.status !== 200) {
return response;
}
await this.onAfterAction('', context, response);
return new HttpResponse(200, response.data || []);
}
await this.onAfterAction('', context);
return new HttpResponse(500, null, { code: 100, message: '数据加载异常,${node.getPSAppDEDataSet().getCodeName()}行为不存在' });
}
</#if>
/**
* 填充 树视图节点[${node.getName()}]子节点
*
* @private
* @param {any{}} context
* @param {*} filter
* @param {any[]} list
* @returns {Promise<any>}
* @memberof ${srfclassname(ctrl.codeName)}Service
*/
private async fill${srfclassname(node.getNodeType()?lower_case)}NodeChilds(context: any = {}, filter: any, list: any[]): Promise<any> {
<#if ctrl.getPSDETreeNodeRSs()??>
if (!filter.srfnodefilter) {
<#list ctrl.getPSDETreeNodeRSs() as noders>
<#if noders.getParentPSDETreeNode().id == node.id>
<#if noders.getSearchMode() == 1 || noders.getSearchMode() == 3>
// 填充${noders.getChildPSDETreeNode().getName()}
await this.fill${srfclassname(noders.getChildPSDETreeNode().getNodeType()?lower_case)}Nodes(context, filter, list);
</#if>
</#if>
</#list>
} else {
<#list ctrl.getPSDETreeNodeRSs() as noders>
<#if noders.getParentPSDETreeNode().id == node.id>
<#if noders.getSearchMode() == 2 || noders.getSearchMode() == 3>
// 填充${noders.getChildPSDETreeNode().getName()}
await this.fill${srfclassname(noders.getChildPSDETreeNode().getNodeType()?lower_case)}Nodes(context, filter, list);
</#if>
</#if>
</#list>
}
</#if>
<#if node.isRootNode()>
if (list.length > 0) {
Object.assign(list[0], { selected: true })
}
return list;
</#if>
}
</#list>
</#if>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=TREEVIEW
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>TreeExpBarServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=TREEEXPBAR
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>WFExpBarServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=WFEXPBAR
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/MODEL_HEADER.ts.ftl
</#ibizinclude>
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.getCodeName()}')}${srfclassname('${ctrl.name}')}Model
*/
public getDataItems(): any[] {
return [
<#-- 表格数据项 -->
<#if ctrl.getPSListDataItems?? && ctrl.getPSListDataItems()??>
<#list ctrl.getPSListDataItems() as dataitem>
{
name: '${dataitem.getName()}',
<#if dataitem.getPSDEField()??>
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: '${dataitem.getPSDEField().getDataType()}',
</#if>
},
</#list>
</#if>
<#-- 关联主实体的主键 -->
<#if ctrl.getPSAppDataEntity()??>
<#assign appDataEntity = ctrl.getPSAppDataEntity() />
<#if appDataEntity.isMajor() == false && appDataEntity.getMinorPSAppDERSs()??>
<#list appDataEntity.getMinorPSAppDERSs() as minorAppDERSs>
<#if minorAppDERSs.getMajorPSAppDataEntity()??>
<#assign majorAppDataEntity = minorAppDERSs.getMajorPSAppDataEntity() />
{
name: '${majorAppDataEntity.getCodeName()?lower_case}',
prop: '${majorAppDataEntity.getKeyPSAppDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#list>
</#if>
</#if>
<#if ctrl.getPSListDataItems?? && ctrl.getPSListDataItems()??>
<#list ctrl.getPSListDataItems() as dataitem>
<#-- 界面主键标识 -->
<#if dataitem.getPSDEField?? && dataitem.getPSDEField()??>
<#if !P.exists("importService", dataitem.getPSDEField().getId(), "")>
<#if dataitem.getPSDEField().isKeyDEField() == true>
{
name: '${ctrl.getPSAppDataEntity().getCodeName()?lower_case}',
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#if>
</#if>
</#list>
</#if>
<#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'MODEL_CONTENT.ts').code}
</#if>
{
name:'size',
prop:'size'
},
{
name:'query',
prop:'query'
},
{
name:'page',
prop:'page'
},
{
name:'sort',
prop:'sort'
},
{
name:'srfparentdata',
prop:'srfparentdata'
}
]
}
<#ibizinclude>
../@MACRO/MODEL/MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>MdServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=MOBMDCTRL
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/FORM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>FormServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/FORM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=FORM
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/MODEL_HEADER.ts.ftl
</#ibizinclude>
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.getCodeName()}')}${srfclassname('${ctrl.name}')}Model
*/
public getDataItems(): any[] {
return [
<#-- 表格数据项 -->
<#if ctrl.getPSDEGridDataItems()??>
<#list ctrl.getPSDEGridDataItems() as dataitem>
{
name: '${dataitem.getName()}',
<#if dataitem.getPSDEField()??>
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: '${dataitem.getPSDEField().getDataType()}',
</#if>
},
</#list>
</#if>
<#-- 关联主实体的主键 -->
<#if ctrl.getPSAppDataEntity()??>
<#assign appDataEntity = ctrl.getPSAppDataEntity() />
<#if appDataEntity.isMajor() == false && appDataEntity.getMinorPSAppDERSs()??>
<#list appDataEntity.getMinorPSAppDERSs() as minorAppDERSs>
<#if minorAppDERSs.getMajorPSAppDataEntity()??>
<#assign majorAppDataEntity = minorAppDERSs.getMajorPSAppDataEntity() />
{
name: '${majorAppDataEntity.getCodeName()?lower_case}',
prop: '${majorAppDataEntity.getKeyPSAppDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#list>
</#if>
</#if>
<#if ctrl.getPSDEGridDataItems()??>
<#list ctrl.getPSDEGridDataItems() as dataitem>
<#-- 界面主键标识 -->
<#if dataitem.getPSDEField?? && dataitem.getPSDEField()??>
<#if !P.exists("importService", dataitem.getPSDEField().getId(), "")>
<#if dataitem.getPSDEField().isKeyDEField() == true>
{
name: '${ctrl.getPSAppDataEntity().getCodeName()?lower_case}',
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#if>
</#if>
</#list>
</#if>
<#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'MODEL_CONTENT.ts').code}
</#if>
{
name:'size',
prop:'size'
},
{
name:'query',
prop:'query'
},
{
name:'page',
prop:'page'
},
{
name:'sort',
prop:'sort'
},
{
name:'srfparentdata',
prop:'srfparentdata'
}
]
}
<#ibizinclude>
../@MACRO/MODEL/MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>GridServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#assign import_block>
<#if ctrl.getAggMode() == "ALL" && ctrl.getAggPSAppDataEntity()??>
<#assign aggAppDataEntity = ctrl.getAggPSAppDataEntity() >
import ${srfclassname('${aggAppDataEntity.getCodeName()}')}Service from '@/service/${srffilepath2(aggAppDataEntity.getCodeName())}/${srffilepath2(aggAppDataEntity.getCodeName())}-service';
</#if>
</#assign>
/**
* 合并配置的默认值
*
* @protected
* @param {*} [response={}]
* @memberof ${srfclassname(ctrl.codeName)}Service
*/
public mergeDefaults(response:any = {}): void {
if (response.data) {
<#list ctrl.getPSDEGridEditItems() as edititem><#t>
<#if edititem.getCreateDV?? && edititem.getCreateDV()??><#t>
<#if !(edititem.getCreateDV() == '')><#t>
Object.assign(response.data, { '${edititem.getCodeName()?lower_case}': '${edititem.getCreateDV()}' });
</#if>
</#if>
</#list>
}
}
<#if ctrl.getAggMode() == "ALL" && ctrl.getAggPSAppDataEntity()??>
<#assign aggAppDataEntity = ctrl.getAggPSAppDataEntity() >
/**
* 表格聚合加载数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isLoading]
* @returns {Promise<HttpResponse>}
* @memberof ${srfclassname(ctrl.codeName)}Service
*/
public async getAggData(action: string, context: any = {}, data: any = {}, isLoading?: boolean): Promise<HttpResponse> {
await this.onBeforeAction(action, context, data, isLoading);
data = this.handleRequestData(action, context, data);
const service: any = await this.getService('${aggAppDataEntity.getCodeName()?lower_case}');
let response: HttpResponse;
if (Util.isFunction(service[action])) {
response = await this.service[action](context, data);
} else {
response = null;
}
if (response.status === 200) {
response = this.handleResponse(action, response);
}
await this.onAfterAction(action, context, response);
return response;
}
</#if>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=GRID
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>PickupViewPanelServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=PICKUPVIEWPANEL
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>PortletServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=PORTLET
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/DEFAULT.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign extendsClass>ListServiceBase</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=PANEL
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
[
<#list app.getAllPSAppCodeLists() as codelist>
{
<#if codelist.getCodeListType() == "STATIC" && codelist.getAllPSCodeItems()??>
"srfkey": "${codelist.codeName}",
"emptytext": "${codelist.getEmptyText()}",
"codelisttype":"static",
"items": [
<#if codelist.getAllPSCodeItems()??>
<#list codelist.getAllPSCodeItems() as codeitem>
<#if codeitem_index gt 0>,</#if> {
"id": "${codeitem.getValue()?j_string}",
"label": "${codeitem.getText()?j_string}",
"text": "${codeitem.getText()?j_string}",
<#comment>判断是否为数值代码项</#comment>
<#if codelist.isCodeItemValueNumber?? && codelist.isCodeItemValueNumber()>
"value": ${codeitem.getValue()?j_string},
<#else>
"value": "${codeitem.getValue()?j_string}",
</#if>
"disabled": <#if codeitem.isDisableSelect()>true<#else>false</#if>
}
</#list>
</#if>
]
<#else>
"srfkey": "${codelist.codeName}",
"emptytext": "${codelist.getEmptyText()}",
"codelisttype":"dynamic",
"appdataentity":"<#if codelist.getPSAppDataEntity?? && codelist.getPSAppDataEntity()??>${codelist.getPSAppDataEntity().codeName}</#if>",
"appdedataset":"<#if codelist.getPSAppDEDataSet?? && codelist.getPSAppDEDataSet()??>${codelist.getPSAppDEDataSet().codeName}</#if>",
"items": []
</#if>
}<#if codelist_has_next>,</#if>
</#list>
]
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPCODELIST
</#ibiztemplate>
import { CodeListBase } from '@/ibiz-core/code-list/code-list-base';
import { HttpResponse } from '@/ibiz-core/utils';
/**
* 代码表--${item.getName()}
*
* @export
* @class ${srfclassname('${item.getCodeName()}')}
* @extends {CodeListBase}
*/
export class ${srfclassname('${item.getCodeName()}')} extends CodeListBase {
<#if item.getPSAppDataEntity?? && item.getPSAppDataEntity()?? && item.getPSAppDEDataSet?? && item.getPSAppDEDataSet()??>
/**
* 代码表项主键标识
*
* @protected
* @type {string}
* @memberof CodeListBase
*/
protected idKey: string = '<#if item.getValuePSAppDEField()??>${item.getValuePSAppDEField().getCodeName()?lower_case}<#else>${item.getPSAppDataEntity().getKeyPSAppDEField().codeName?lower_case}</#if>';
/**
* 代码表项值项标识
*
* @protected
* @type {string}
* @memberof CodeListBase
*/
protected valueKey: string = '<#if item.getValuePSAppDEField()??>${item.getValuePSAppDEField().getCodeName()?lower_case}<#else>${item.getPSAppDataEntity().getKeyPSAppDEField().codeName?lower_case}</#if>';
/**
* 代码表项文本标识
*
* @protected
* @type {string}
* @memberof CodeListBase
*/
protected textKey: string = '<#if item.getTextPSAppDEField()??>${item.getTextPSAppDEField().getCodeName()?lower_case}<#else>${item.getPSAppDataEntity().getMajorPSAppDEField().codeName?lower_case}</#if>';
</#if>
<#-- 不为子系统代码表 -->
<#if item.isSubSysCodeList() == false>
<#if item.getPSAppDataEntity?? && item.getPSAppDataEntity()?? && item.getPSAppDEDataSet?? && item.getPSAppDEDataSet()??>
/**
* 获取数据项
*
* @param {*} [context={}] 上下文
* @param {*} [data={}] 参数
* @returns {Promise<any>}
* @memberof ${srfclassname('${item.getCodeName()}')}
*/
public async getItems(context: any = {}, data: any = {}): Promise<any> {
const service: any = await this.getService('${item.getPSAppDataEntity().codeName?lower_case}');
const response: any = await service.${item.getPSAppDEDataSet().codeName}(context, data);
if (response && response.status === 200 && response.data) {
return new HttpResponse(200, this.doItems(response.data));
}
return new HttpResponse(200, []);
}
</#if>
<#else>
<#if item.getPSAppDataEntity?? && item.getPSAppDataEntity()?? && item.getPSAppDEDataSet?? && item.getPSAppDEDataSet()??>
<#if item.getPSAppDataEntity().codeName == "CodeItem">
/**
* 获取数据项
*
* @param {*} [context={}] 上下文
* @param {*} [data={}] 参数
* @returns {Promise<any>}
* @memberof ${srfclassname('${item.getCodeName()}')}
*/
public async getItems(context: any = {}, data: any = {}): Promise<any> {
const service: any = await this.getService('${item.getPSAppDataEntity().codeName?lower_case}');
const response: any = await service.${item.getPSAppDEDataSet().codeName}(context, { ...data, codelistid: '${item.id}' });
if (response && response.status === 200 && response.data) {
return new HttpResponse(200, this.doItems(response.data));
}
return new HttpResponse(200, []);
}
</#if>
</#if>
</#if>
}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPCOUNTER
</#ibiztemplate>
import { CounterServiceBase } from '@/ibiz-core';
/**
* ${item.getName()}计数器服务对象基类
*
* @export
* @class ${item.getCodeName()}CounterServiceBase
* @extends {CounterServiceBase}
*/
export class ${srfclassname('${item.getCodeName()}')}CounterServiceBase extends CounterServiceBase { }
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPCOUNTER
</#ibiztemplate>
import { ${srfclassname('${item.getCodeName()}')}CounterServiceBase } from './${srffilepath2(item.getCodeName())}-counter-base';
/**
* ${item.getName()}计数器服务对象
*
* @export
* @class ${item.getCodeName()}CounterService
* @extends {${srfclassname('${item.getCodeName()}')}CounterServiceBase}
*/
export class ${srfclassname('${item.getCodeName()}')}CounterService extends ${srfclassname('${item.getCodeName()}')}CounterServiceBase { }
// 默认导出
export default ${srfclassname('${item.getCodeName()}')}CounterService;
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
import { ServiceConstructorBase } from '@/ibiz-core/service/service-constructor-base';
/**
* 计数器服务注册中心
*
* @export
* @class CounterServiceConstructor
* @extends {ServiceConstructorBase}
*/
export class CounterServiceConstructor extends ServiceConstructorBase {
/**
* 初始化
*
* @protected
* @memberof CounterServiceConstructor
*/
protected init(): void {
<#if app.getAllPSAppCounters()??>
<#list app.getAllPSAppCounters() as counter>
this.allService.set('${counter.codeName?lower_case}', () => import('@/app-core/counter/${srffilepath2(counter.getCodeName())}/${srffilepath2(counter.getCodeName())}-counter'));
</#list>
</#if>
}
}
/**
* 计数器服务构造器
*/
export const counterServiceConstructor: CounterServiceConstructor = new CounterServiceConstructor();
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_APPMENU
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_CALENDAR
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_CHART
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DASHBOARD
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DATAVIEW
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DRBAR
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DRTAB
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_FORM
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_GRID
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_LIST
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_MOBMDCTRL
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_MULTIEDITVIEWPANEL
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_PANEL
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_PICKUPVIEWPANEL
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_PORTLET
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_SEARCHFORM
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_TABEXPPANEL
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_TABVIEWPANEL
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_TREEEXPBAR
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_TREEVIEW
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_WFEXPBAR
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_WIZARDPANEL
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_APPMENU
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_CALENDAR
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_CHART
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DASHBOARD
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DATAVIEW
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DRBAR
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DRTAB
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_FORM
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_GRID
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_LIST
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_MOBMDCTRL
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_MULTIEDITVIEWPANEL
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_PANEL
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_PICKUPVIEWPANEL
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_PORTLET
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_SEARCHFORM
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_TABEXPPANEL
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_TABVIEWPANEL
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_TREEEXPBAR
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_TREEVIEW
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_WFEXPBAR
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_WIZARDPANEL
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPDELOGIC
</#ibiztemplate>
import { Util, Verify } from '@/ibiz-core/utils';
import { EntityLogicBase } from '@/ibiz-core';
<#-- 设置参数 -->
<#macro setParam logicNode>
<#if logicNode.getPSDELogicNodeParams()??>
<#list logicNode.getPSDELogicNodeParams() as logicparam>
<#if logicparam.getSrcFieldName()?? && logicparam.getDstFieldName()??>
<#if logicparam.getSrcFieldName() != "">
Object.assign(params, { ${logicparam.getDstFieldName()?lower_case}: params.${logicparam.getSrcFieldName()?lower_case} });
</#if>
<#if logicparam.getDstPSDELogicParam?? && logicparam.getDstPSDELogicParam()?? && logicparam.getDstPSDELogicParam().getParamPSAppDataEntity()??>
<#if logicparam.getSrcFieldName()?lower_case?contains("id") >
Object.assign(context, { ${logicparam.getDstPSDELogicParam().getParamPSAppDataEntity().getCodeName()?lower_case} : params.${logicparam.getSrcFieldName()?lower_case} });
</#if>
</#if>
</#if>
</#list>
</#if>
</#macro>
<#-- 调用下一节点处理逻辑 -->
<#macro executeNext logicNode>
<#if logicNode.getPSDELogicLinks()??>
<#list logicNode.getPSDELogicLinks() as logiclink>
<#if logiclink.getDstPSDELogicNode()??>
<#assign nextnode = logiclink.getDstPSDELogicNode() />
<#list item.getPSDELogicLinks() as curLink>
<#if curLink.getId() == logiclink.getId() && curLink.getPSDELogicLinkGroupCond()??>
<#assign curIndex = curLink_index/>
</#if>
</#list>
<#if curIndex??>
if (this.compute${curIndex}Cond(params)) {
return this.execute${nextnode.codeName}(context, params);
}
<#else>
return this.execute${nextnode.codeName}(context, params);
</#if>
</#if>
</#list>
<#else>
return params;
</#if>
</#macro>
<#-- 获取判断条件 -->
<#macro getCond item><#if item.getLogicType() == 'GROUP'><#if item.isNotMode()>!(</#if><#if item.getPSDELogicLinkConds()??><#list item.getPSDELogicLinkConds() as subLogic><#if subLogic_index gt 0><#if item.getGroupOP() == 'AND'> && </#if><#if item.getGroupOP() == 'OR'> || </#if></#if><@getCond subLogic /></#list></#if><#if item.isNotMode()>)</#if><#elseif item.getLogicType() == 'SINGLE'>Verify.testCond(params.${item.getDstFieldName()?lower_case}, '${item.getCondOP()}', '${item.getValue()}')</#if></#macro>
/**
* ${item.name}处理逻辑基类
*
* @export
* @class ${item.codeName}LogicBase
* @extends {EntityLogicBase}
*/
export class ${item.codeName}LogicBase extends EntityLogicBase {
/**
* 名称
*
* @protected
* @memberof ${item.codeName}LogicBase
*/
protected name:string ="${item.codeName}";
/**
* 唯一标识
*
* @protected
* @memberof ${item.codeName}LogicBase
*/
protected id:string = "${item.id}";
/**
* 默认参数名称
*
* @protected
* @memberof ${item.codeName}LogicBase
*/
protected defaultParamName:string = "${item.getDefaultParamName()}";
<#if item.getPSDELogicLinks()??>
<#list item.getPSDELogicLinks() as curLink>
<#if curLink.getPSDELogicLinkGroupCond()??>
/**
* 计算${curLink_index}节点结果
*
* @param params 传入上下文参数
* @returns {boolean}
* @memberof ${item.codeName}LogicBase
*/
public compute${curLink_index}Cond(params: any): boolean {
<#assign linkCond = curLink.getPSDELogicLinkGroupCond() />
if (<@getCond linkCond />) {
return true;
}
return false;
}
</#if>
</#list>
</#if>
/**
* 执行逻辑
*
* @param context 应用上下文
* @param params 传入参数
* @returns {Promise<any>}
* @memberof ${item.codeName}LogicBase
*/
public onExecute(context: any, params: any): Promise<any> {
return this.execute${item.getStartPSDELogicNode().codeName}(context, params);
}
<#if item.getPSDELogicNodes()??>
<#list item.getPSDELogicNodes() as delogicNode>
<#-- 开始节点 -->
<#if delogicNode.getLogicNodeType()?? && delogicNode.getLogicNodeType() == "BEGIN">
/**
* ${delogicNode.getName()}
*
* @protected
* @param params 传入参数
* @returns {Promise<any>}
* @memberof ${item.codeName}LogicBase
*/
protected async execute${delogicNode.codeName}(context: any, params: any): Promise<any> {
//开始节点
<@setParam delogicNode />
<@executeNext delogicNode />
}
<#-- 行为处理节点 -->
<#elseif delogicNode.getLogicNodeType()?? && delogicNode.getLogicNodeType() == "DEACTION">
/**
* ${delogicNode.getName()}
*
* @protected
* @param context 应用上下文
* @param params 传入参数
* @returns {Promise<any>}
* @memberof ${item.codeName}LogicBase
*/
protected async execute${delogicNode.codeName}(context: any, params: any): Promise<any> {
// 行为处理节点
<@setParam delogicNode />
<#if delogicNode.getDstPSAppDataEntity()?? && delogicNode.getDstPSAppDEAction()??>
<#assign targetEntity = delogicNode.getDstPSAppDataEntity() />
<#assign deAction = delogicNode.getDstPSAppDEAction() />
let result: any;
// ${targetEntity.getCodeName()}服务
const targetService: any = await this.getService('${targetEntity.getCodeName()}');
if (Util.isFunction(targetService['${deAction.getCodeName()}'])) {
result = await targetService['${deAction.getCodeName()}'](context, params);
}
if(result && result.status == 200){
Object.assign(params, result.data);
<@executeNext delogicNode />
}
</#if>
}
<#-- 准备参数节点 -->
<#elseif delogicNode.getLogicNodeType()?? && delogicNode.getLogicNodeType() == "PREPAREPARAM">
/**
* ${delogicNode.getName()}
*
* @protected
* @param context 应用上下文
* @param params 传入参数
* @returns {Promise<any>}
* @memberof ${item.codeName}LogicBase
*/
protected async execute${delogicNode.codeName}(context: any, params: any): Promise<any> {
// 准备参数节点
<@setParam delogicNode />
<@executeNext delogicNode />
}
<#-- 开始流程节点 -->
<#elseif delogicNode.getLogicNodeType()?? && delogicNode.getLogicNodeType() == "STARTWF">
/**
* ${delogicNode.getName()}
*
* @protected
* @param context 应用上下文
* @param params 传入参数
* @returns {Promise<any>}
* @memberof ${item.codeName}LogicBase
*/
protected async execute${delogicNode.codeName}(context: any, params: any): Promise<any> {
throw new Error('开始流程节点暂未支持');
}
<#-- 异常捕获节点 -->
<#elseif delogicNode.getLogicNodeType()?? && delogicNode.getLogicNodeType() == "THROWEXCEPTION">
/**
* ${delogicNode.getName()}
*
* @protected
* @param context 应用上下文
* @param params 传入参数
* @returns {Promise<any>}
* @memberof ${item.codeName}LogicBase
*/
protected async execute${delogicNode.codeName}(context: any, params: any): Promise<any> {
throw new Error('异常捕获节点暂未支持');
}
<#-- 前端插件 -->
<#elseif delogicNode.getLogicNodeType()?? && delogicNode.getLogicNodeType() == "PFPLUGIN">
/**
* ${delogicNode.getName()}
*
* @protected
* @param context 应用上下文
* @param params 传入参数
* @returns {Promise<any>}
* @memberof ${item.codeName}LogicBase
*/
protected async execute${delogicNode.codeName}(context: any, params: any): Promise<any> {
throw new Error('前端插件暂未支持');
}
<#else>
/**
* ${delogicNode.getName()}
*
* @protected
* @param context 应用上下文
* @param params 传入参数
* @returns {Promise<any>}
* @memberof ${item.codeName}LogicBase
*/
protected async execute${delogicNode.codeName}(context: any, params: any): Promise<any> {
throw new Error('${delogicNode.getLogicNodeType()}暂未支持');
}
</#if>
</#list>
</#if>
}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPDELOGIC
</#ibiztemplate>
import { ${item.codeName}LogicBase } from './${srffilepath2(item.getCodeName())}-logic-base';
/**
* ${item.name}处理逻辑
*
* @export
* @class ${item.codeName}Logic
* @extends {${item.codeName}LogicBase}
*/
export class ${item.codeName}Logic extends ${item.codeName}LogicBase { }
// 默认导出
export default ${item.codeName}Logic;
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPDATAENTITY
</#ibiztemplate>
<#assign item_code_name = srfpluralize(item.codeName)?lower_case/>
<#macro appDerPath singleAppMethod singleServiceApi='ERROR'>
<#-- getPSAppDERSPathCount:应用实体关系路径数量 -->
<#if item.getPSAppDERSPathCount() gt 0 && singleServiceApi != 'ERROR'>
<#assign requestMethodName>${singleServiceApi.getRequestMethod()?lower_case}</#assign>
<#list 1..item.getPSAppDERSPathCount() as count>
<#assign path = ''/>
<#assign condition = ''/>
<#list item.getPSAppDERSPath(count_index) as deRSPath>
<#if deRSPath.getMajorPSAppDataEntity?? && deRSPath.getMajorPSAppDataEntity()??>
<#assign _dataEntity = deRSPath.getMajorPSAppDataEntity()/>
<#assign condition><#if condition != ''> && </#if>${condition}context.${_dataEntity.getCodeName()?lower_case}</#assign>
<#assign path>${path}${srfpluralize(_dataEntity.codeName)?lower_case}/<#noparse>$</#noparse>{context.${_dataEntity.getCodeName()?lower_case}}/</#assign>
</#if>
</#list>
<#-- 方法类型为SELECT -->
<#if singleAppMethod.getMethodType() == "SELECT">
if (${condition} && context.${item.getCodeName()?lower_case}) {
<#if singleServiceApi.getRequestMethod() == 'PUT' || singleServiceApi.getRequestMethod() == 'POST'>
return await this.http.${requestMethodName}(`/${path}${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`, data);
<#else>
return await this.http.${requestMethodName}(`/${path}${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`);
</#if>
}
<#-- 方法类型为FETCH -->
<#elseif singleAppMethod.getMethodType() == "FETCH">
if (${condition}) {
return await this.http.${requestMethodName}(`/${path}${item_code_name}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`, data);
}
<#-- 方法类型为FETCHTEMP -->
<#elseif singleAppMethod.getMethodType() == "FETCHTEMP">
if (${condition}) {
return await this.http.${requestMethodName}(`/${path}${item_code_name}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`, data);
}
<#else>
<#-- 方法类型为DEACTION start -->
<#if singleServiceApi.getRequestParamType() == "NONE">
<#-- 无参数情况start -->
if (${condition}) {
return await this.http.${requestMethodName}(`/${path}${item_code_name}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`);
}
<#-- 无参数情况end -->
<#elseif singleServiceApi.getRequestParamType() == "FIELD">
<#-- 指定属性情况start -->
if (${condition} && context.${item.getCodeName()?lower_case}) {
return await this.http.${requestMethodName}(`/${path}${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`);
}
<#-- 指定属性情况start -->
<#elseif singleServiceApi.getRequestParamType() == "ENTITY">
<#-- 提交对象数据情况start -->
<#if singleAppMethod.getCodeName() == 'Create'>
if (${condition}) {
return await this.http.${requestMethodName}(`/${path}${item_code_name}`, data);
}
<#else>
if (${condition} && context.${item.getCodeName()?lower_case}) {
return await this.http.${requestMethodName}(`/${path}${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`, data);
}
</#if>
<#-- 提交对象数据情况start -->
<#else>
<#-- URI参数传递情况start -->
throw new Error('URI参数传递情况未实现');
<#-- URI参数传递情况start -->
</#if>
<#-- 方法类型为DEACTION end -->
</#if>
</#list>
</#if>
</#macro>
<#macro major singleAppMethod singleServiceApi='ERROR'>
<#-- existAppMethodDeAction:是否存在前端逻辑 -->
<#if item.isMajor() && singleServiceApi != 'ERROR'>
<#assign requestMethodName>${singleServiceApi.getRequestMethod()?lower_case}</#assign>
<#-- 方法类型为SELECT -->
<#if singleAppMethod.getMethodType() == "SELECT">
<#if singleServiceApi.getRequestMethod() == 'PUT' || singleServiceApi.getRequestMethod() == 'POST'>
return await this.http.${requestMethodName}(`/${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`, data);
<#else>
return await this.http.${requestMethodName}(`/${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`);
</#if>
<#-- 方法类型为FETCH -->
<#elseif singleAppMethod.getMethodType() == "FETCH">
return await this.http.${requestMethodName}(`/${item_code_name}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`, data);
<#-- 方法类型为FETCHTEMP -->
<#elseif singleAppMethod.getMethodType() == "FETCHTEMP">
return await this.http.${requestMethodName}(`/${item_code_name}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`, data);
<#else>
<#-- 方法类型为DEACTION start -->
<#if singleServiceApi.getRequestParamType() == "NONE">
<#-- 无参数情况start -->
const res: any = await this.http.${requestMethodName}(`/${item_code_name}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`);
res.data.${item.getCodeName()?lower_case} = context.${item.getCodeName()?lower_case};
<@setStore appEntity = item />
return res;
<#-- 无参数情况end -->
<#elseif singleServiceApi.getRequestParamType() == "FIELD">
<#-- 指定属性情况start -->
<#-- GET -->
<#if singleServiceApi.getRequestMethod() == "GET">
const res: any = await this.http.${requestMethodName}(`/${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`);
<@setStore appEntity = item />
return res;
<#elseif singleServiceApi.getRequestMethod() == "POST">
<#-- REMOVE -->
return await this.http.${requestMethodName}(`/${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`, data);
<#else>
return await this.http.${requestMethodName}(`/${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`);
</#if>
<#-- 指定属性情况start -->
<#elseif singleServiceApi.getRequestParamType() == "ENTITY">
<#-- 提交对象数据情况start -->
<#if singleAppMethod.getCodeName() == 'Update'>
<@getStore appEntity = item />
const res: any = await this.http.${requestMethodName}(`/${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`, data);
<@setStore appEntity = item />
return res;
<#elseif singleAppMethod.getCodeName() == 'Save'>
<@getStore appEntity = item />
const res: any = await this.http.${requestMethodName}(`/${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`, data);
<@setStore appEntity = item />
return res;
<#elseif singleAppMethod.getCodeName() == 'Create'>
<@getStore appEntity = item />
data.${item.getCodeName()?lower_case} = null;
const res: any = await this.http.${requestMethodName}(`/${item_code_name}`, data);
await this.setMinorLocalCache(context, res.data);
return res;
<#else>
return await this.http.${requestMethodName}(`/${item_code_name}/<#noparse>$</#noparse>{context.${item.getCodeName()?lower_case}}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`, data);
</#if>
<#-- 提交对象数据情况start -->
<#else>
<#-- URI参数传递情况start -->
throw new Error('URI参数传递情况未实现');
<#-- URI参数传递情况start -->
</#if>
<#-- 方法类型为DEACTION end -->
</#if>
</#if>
</#macro>
<#macro notMajor singleAppMethod singleServiceApi='ERROR'>
<#if item.isMajor() == false && singleServiceApi == 'ERROR'>
<#if singleAppMethod.getMethodType() == "SELECT">
// ${singleAppMethod.getCodeName()} ---SELECT
<#-- 方法类型为FETCH -->
<#elseif singleAppMethod.getMethodType() == "FETCH">
// ${singleAppMethod.getCodeName()} ---FETCH
<#if item.getMinorPSAppDERSs()??>
<#list item.getMinorPSAppDERSs() as singleDeRs>
<#assign majorEntity = singleDeRs.getMajorPSAppDataEntity()/>
const result: any = await this.getLocalCache(context);
if (result) {
return new HttpResponse(200, result, null, { 'x-page': 1, 'x-per-page': 1000, 'x-total': result.length });
}
return new HttpResponse(200, []);
</#list>
</#if>
<#elseif singleAppMethod.getMethodType() == "FETCHTEMP">
// ${singleAppMethod.getCodeName()} ---FETCHTEMP
<#if item.getMinorPSAppDERSs()??>
<#list item.getMinorPSAppDERSs() as singleDeRs>
<#assign majorEntity = singleDeRs.getMajorPSAppDataEntity()/>
const result: any = await this.getLocalCache(context);
if (result) {
return new HttpResponse(200, result, null, { 'x-page': 1, 'x-per-page': 1000, 'x-total': result.length });
}
return new HttpResponse(200, []);
</#list>
</#if>
<#else>
<#if singleAppMethod.getCodeName() == "Save">
throw new Error('从实体Save行为暂未实现');
<#elseif singleAppMethod.getCodeName() == "Remove">
<#if item.getMinorPSAppDERSs()??>
<#list item.getMinorPSAppDERSs() as singleDeRs>
<#assign majorEntity = singleDeRs.getMajorPSAppDataEntity()/>
const result: any = await this.getLocalCache(context);
if (result) {
const tempResult: any = result.filter((item: any) => {
return !Object.is(item.${item.getCodeName()?lower_case}, context.${item.getCodeName()?lower_case});
});
if (await this.setLocalCache(context, tempResult)) {
return new HttpResponse(200, data);
}
}
return new HttpResponse(200, null, { code: 100, message: '从数据${item_code_name}删除失败' });
</#list>
</#if>
<#elseif singleAppMethod.getCodeName() == "Update">
<#if item.getMinorPSAppDERSs()??>
<#list item.getMinorPSAppDERSs() as singleDeRs>
<#assign majorEntity = singleDeRs.getMajorPSAppDataEntity()/>
cosnt result: any[] = await this.getLocalCache(context);
const tempData: Array<any> = [];
if (result && result.length > 0) {
result.forEach((item:any) => {
const singleData: any = {};
if (Object.is(item.${item.getCodeName()?lower_case}, context.${item.getCodeName()?lower_case})) {
Object.keys(item).forEach((field: any) =>{
singleData[field] = data[field] ? data[field] : item[field];
})
}
if (Object.keys(singleData).length > 0) {
tempData.push(singleData);
} else {
tempData.push(item);
}
});
if (await this.setLocalCache(context, tempData)) {
return new HttpResponse(200, tempData);
}
}
return new HttpResponse(200, null, { code: 100 });
</#list>
</#if>
<#elseif singleAppMethod.getCodeName() == "GetDraft">
const tempData = { ${item.getCodeName()?lower_case}: context.${item.getCodeName()?lower_case}, srfsessionkey: data.srfsessionkey };
<#if item.getMinorPSAppDERSs()??>
<#list item.getMinorPSAppDERSs() as singleDeRs>
<#assign majorEntity = singleDeRs.getMajorPSAppDataEntity()/>
Object.assign(tempData, { ${majorEntity.getCodeName()?lower_case}: context.${majorEntity.getCodeName()?lower_case} });
</#list>
</#if>
return new HttpResponse(200, tempData);
<#elseif singleAppMethod.getCodeName() == "Create">
<#if item.getMinorPSAppDERSs()??>
<#list item.getMinorPSAppDERSs() as singleDeRs>
<#assign majorEntity = singleDeRs.getMajorPSAppDataEntity()/>
cosnt ${item_code_name}: any[] = await this.getLocalCache(context);
if (${item_code_name}) {
data.${item.getCodeName()?lower_case} = null;
${item_code_name}.push(data);
if (await this.setLocalCache(context, ${item_code_name})) {
return new HttpResponse(200, data);
}
}
return new HttpResponse(200, null, { code: 100, message: '数据创建失败' });
</#list>
</#if>
<#elseif singleAppMethod.getCodeName() == "CheckKey">
<#if item.getMinorPSAppDERSs()??>
<#list item.getMinorPSAppDERSs() as singleDeRs>
<#assign majorEntity = singleDeRs.getMajorPSAppDataEntity()/>
if(context.srfsessionkey && !Object.is(this.tempStorage.getItem(context.srfsessionkey+'_${item_code_name}'),'undefined')){
let result:any = JSON.parse(this.tempStorage.getItem(context.srfsessionkey+'_${item_code_name}') as any);
if (result) {
let flag: boolean = false;
result.forEach((item:any) => {
if(Object.is(item.${item.getCodeName()?lower_case}, context.${item.getCodeName()?lower_case})){
flag = true;
}
});
}
return new HttpResponse(200, false);
}
</#list>
</#if>
<#elseif singleAppMethod.getCodeName() == "Get">
<#if item.getMinorPSAppDERSs()??>
<#list item.getMinorPSAppDERSs() as singleDeRs>
<#assign majorEntity = singleDeRs.getMajorPSAppDataEntity()/>
const result: any[] = await this.getLocalCache(context);
if (result) {
const tempResult: any = result.find((item:any) => {
return Object.is(item.${item.getCodeName()?lower_case}, context.${item.getCodeName()?lower_case});
})
return new HttpResponse(200, tempResult || data);
}
return new HttpResponse(200, null, { code: 5001 });
</#list>
</#if>
<#else>
<#list 1..item.getPSAppDERSPathCount() as count>
<#assign path = ''/>
<#assign condition = ''/>
<#list item.getPSAppDERSPath(count_index) as deRSPath>
<#if deRSPath.getMajorPSAppDataEntity?? && deRSPath.getMajorPSAppDataEntity()??>
<#assign _dataEntity = deRSPath.getMajorPSAppDataEntity()/>
<#assign condition>${condition}context.${_dataEntity.getCodeName()?lower_case} && </#assign>
<#assign path>${path}${srfpluralize(_dataEntity.codeName)?lower_case}/<#noparse>$</#noparse>{context.${_dataEntity.getCodeName()?lower_case}}/</#assign>
</#if>
</#list>
if (${condition}) {
return await this.http.post(`${path}${item_code_name}/${singleAppMethod.getCodeName()?lower_case}`, data);
}
</#list>
</#if>
</#if>
</#if>
</#macro>
import { EntityServiceBase } from '@/ibiz-core';
import { HttpResponse } from '@/ibiz-core/utils';
<#if item.getAllPSAppDELogics()??>
<#list item.getAllPSAppDELogics() as singleLogic>
<#if !P.exists("importService", singleLogic.getId(), "")>
<#if singleLogic.getLogicHolder() == 2 || singleLogic.getLogicHolder() == 3>
import { ${singleLogic.codeName}Logic } from '@/app-core/service/${srffilepath2(singleLogic.getPSAppDataEntity().getCodeName())}/${srffilepath2(singleLogic.getCodeName())}-logic';
</#if>
</#if>
</#list>
</#if>
<#-- 设置本地缓存 -->
<#macro setStore appEntity>
await this.setMinorLocalCache(context, res.data);
</#macro>
<#-- 获取本地缓存 -->
<#macro getStore appEntity>
Object.assign(data, await this.getMinorLocalCache(context));
</#macro>
/**
* ${de.getLogicName()}服务对象基类
*
* @export
* @class ${srfclassname(item.getCodeName())}ServiceBase
* @extends {EntityServiceBase}
*/
export class ${srfclassname(item.getCodeName())}ServiceBase extends EntityServiceBase {
/**
* 当前实体主键标识
*
* @protected
* @type {(string)}
* @memberof ${srfclassname(item.getCodeName())}ServiceBase
*/
protected readonly key: string = '${item.getKeyPSAppDEField().getCodeName()?lower_case}';
/**
* 当前实体名称
*
* @protected
* @type {(string)}
* @memberof ${srfclassname(item.getCodeName())}ServiceBase
*/
protected readonly dePath: string = '${item_code_name}';
<#if item.getMajorPSAppDEField?? && item.getMajorPSAppDEField()??>
/**
* 当前实体主信息标识
*
* @protected
* @type {(string)}
* @memberof ${srfclassname(item.getCodeName())}ServiceBase
*/
protected readonly text: string = '${item.getMajorPSAppDEField().getCodeName()?lower_case}';
</#if>
/**
* 请求根路径
*
* @protected
* @type {string}
* @memberof ${srfclassname(item.getCodeName())}ServiceBase
*/
protected readonly rootUrl: string = '';
/**
* 所有从实体
*
* @protected
* @type {*}
* @memberof ${srfclassname(item.getCodeName())}ServiceBase
*/
protected allMinorAppEntity: any = {<#if item.getMajorPSAppDERSs()??>
<#list item.getMajorPSAppDERSs() as deReRs>
<#-- 主实体 -->
<#assign majorPSAppDataEntity = deReRs.getMajorPSAppDataEntity() />
<#-- 从实体 -->
<#assign minorPSAppDataEntity = deReRs.getMinorPSAppDataEntity() />
'${srfpluralize(minorPSAppDataEntity.codeName)?lower_case}': {
name: '${minorPSAppDataEntity.codeName?lower_case}'
},
</#list>
</#if>
};
/**
* Creates an instance of Crm_leadServiceBase.
* @memberof Crm_leadServiceBase
*/
constructor() {
super('${item.codeName?lower_case}');
}
<#-- 工作流相关Start -->
<#if de.getAllPSDEWFs()??>
<#list de.getAllPSDEWFs() as dewf>
<#assign workflow=dewf.getPSWorkflow() >
<#if workflow.getPSWFVersions()??>
<#list workflow.getPSWFVersions() as wfversion>
<#if wfversion.getPSWFProcesses()??>
<#list wfversion.getPSWFProcesses() as process>
<#if (process.getWFProcessType()=='INTERACTIVE') >
/**
*
*
* @param {*} [context={}]
* @param {*} [data]
* @returns {Promise<any>}
* @memberof ${srfclassname(item.getCodeName())}ServiceBase
*/
public get${process.getWFStepValue()}(context: any = {}, data?: any): Promise<any> {
return await this.http.post('/wf/${workflow.getCodeName()?lower_case}/v${wfversion.getWFVersion()}/${process.getWFStepValue()?lower_case}/', data);
}
</#if>
</#list>
</#if>
<#if wfversion.getPSWFUIActions()??>
<#list wfversion.getPSWFUIActions() as wfuiaction>
/**
* ${workflow.getName()} v${wfversion.getWFVersion()} ${wfuiaction.getName()}
*
* @param {*} [context={}]
* @param {*} [data]
* @returns {Promise<any>}
* @memberof ${srfclassname(item.getCodeName())}ServiceBase
*/
public ${wfuiaction.getFullCodeName()}(context: any = {}, data?: any): Promise<any> {
return await this.http.post('/wf/${workflow.getCodeName()?lower_case}/v${wfversion.getWFVersion()}/${wfuiaction.getCodeName()?lower_case}/' + context.srfkey, data);
}
</#list>
</#if>
</#list>
</#if>
</#list>
</#if>
<#-- 工作流相关End -->
<#-- 实体接口调用start -->
<#if item.getAllPSAppDEMethods?? && item.getAllPSAppDEMethods()??>
<#list item.getAllPSAppDEMethods() as singleAppMethod>
<#-- 是否存在实体服务接口方法Start -->
<#if singleAppMethod.getPSDEServiceAPIMethod?? && singleAppMethod.getPSDEServiceAPIMethod()??>
<#assign singleServiceApi = singleAppMethod.getPSDEServiceAPIMethod()/>
</#if>
<#-- 是否存在实体服务接口方法End -->
<#if singleAppMethod.render??>
${singleAppMethod.render.code}
<#else>
<#if singleAppMethod.isBuiltinMethod() == false>
/**
* ${singleAppMethod.getCodeName()}接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @returns {Promise<HttpResponse>}
* @memberof ${srfclassname(item.getCodeName())}ServiceBase
*/
public async ${singleAppMethod.getCodeName()}(context: any = {}, data: any = {}): Promise<HttpResponse> {
try {
<#-- 定义变量:是否存在前端处理逻辑 -->
<#assign existAppMethodDeAction = (singleAppMethod.getPSDEAction?? && singleAppMethod.getPSDEAction()??)/>
<#if existAppMethodDeAction>
<#assign appdeAction = singleAppMethod.getPSDEAction() />
</#if>
<#if existAppMethodDeAction && appdeAction.getPSDELogic?? && appdeAction.getPSDELogic()?? && (appdeAction.getActionHolder() == 2 || appdeAction.getActionHolder() == 3) >
<#assign appdelogic = appdeAction.getPSDELogic() />
const appLogic: ${appdelogic.codeName}Logic = new ${appdelogic.codeName}Logic();
const result = await appLogic.onExecute(context, data);
return new HttpResponse(200, result);
<#else>
<#if singleServiceApi??>
<@appDerPath singleAppMethod = singleAppMethod singleServiceApi = singleServiceApi/>
<@major singleAppMethod = singleAppMethod singleServiceApi = singleServiceApi/>
<@notMajor singleAppMethod = singleAppMethod singleServiceApi = singleServiceApi/>
<#elseif singleAppMethod??>
<@appDerPath singleAppMethod = singleAppMethod/>
<@major singleAppMethod = singleAppMethod/>
<@notMajor singleAppMethod = singleAppMethod/>
</#if>
</#if>
} catch (res) {
return new HttpResponse(res.status, null);
}
}
</#if>
</#if>
</#list>
</#if>
<#-- 实体接口调用end -->
}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPDATAENTITY
</#ibiztemplate>
import { ${srfclassname(item.getCodeName())}ServiceBase } from './${srffilepath2(item.getCodeName())}-service-base';
/**
* ${de.getLogicName()}服务对象
*
* @export
* @class ${srfclassname(item.getCodeName())}Service
* @extends {${srfclassname(item.getCodeName())}ServiceBase}
*/
export class ${srfclassname(item.getCodeName())}Service extends ${srfclassname(item.getCodeName())}ServiceBase { }
// 默认导出
export default ${srfclassname(item.getCodeName())}Service;
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
import { ServiceConstructorBase } from '@/ibiz-core/service/service-constructor-base';
/**
* 应用实体服务
*
* @export
* @class AppEntityServiceConstructor
* @extends {ServiceConstructorBase}
*/
export class AppEntityServiceConstructor extends ServiceConstructorBase {
<#if app.getAllPSAppDataEntities?? && app.getAllPSAppDataEntities()??>
/**
* 初始化
*
* @protected
* @memberof AppEntityServiceConstructor
*/
protected init(): void {
<#list app.getAllPSAppDataEntities() as appEntity>
this.allService.set('${appEntity.getCodeName()?lower_case}', () => import('@/app-core/service/${srffilepath2(appEntity.getCodeName())}/${srffilepath2(appEntity.getCodeName())}-service'));
</#list>
}
</#if>
}
/**
* 应用实体服务构造器
*/
export const appEntityServiceConstructor: AppEntityServiceConstructor = new AppEntityServiceConstructor();
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
import { HttpResponse } from '@/ibiz-core/utils';
<#if app.getAllPSAppCodeLists()??>
<#list app.getAllPSAppCodeLists() as codelist>
<#if codelist.getCodeListType() == "DYNAMIC">
import { ${srfclassname(codelist.codeName)} } from '@/app-core/code-list/${srffilepath2(codelist.codeName)}';
</#if>
</#list>
</#if>
/**
* 动态代码表服务类
*
* @export
* @class CodeListService
*/
export class CodeListService {
/**
* 唯一实例
*
* @private
* @static
* @type {CodeListService}
* @memberof CodeListService
*/
private static readonly instance: CodeListService = new CodeListService();
/**
* Creates an instance of CodeListService.
* @memberof CodeListService
*/
constructor() {
if (CodeListService.instance) {
return CodeListService.instance;
}
}
/**
* 所有代码表
*
* @protected
* @type {any[]}
* @memberof CodeListService
*/
protected allCodeList: any = {
<#if app.getAllPSAppCodeLists()??>
<#list app.getAllPSAppCodeLists() as codelist>
<#if codelist.getCodeListType() == "DYNAMIC">
// ${codelist.getName()}
${codelist.codeName}: new ${srfclassname(codelist.codeName)}(),
</#if>
</#list>
</#if>
};
/**
* 代码表缓存
*
* @protected
* @type {Map<string, HttpResponse>}
* @memberof CodeListService
*/
protected codeListCache: Map<string, HttpResponse> = new Map();
/**
* 获取动态代码表
*
* @param {string} tag 代码表标识
* @param {boolean} [isCache] 是否缓存
* @param {*} [context] 上下文
* @param {*} [data] 参数
* @returns {(Promise<any | HttpResponse>)}
* @memberof CodeListService
*/
public async getItems(tag: string, isCache?: boolean, context?: any, data?: any): Promise<any | HttpResponse> {
if (!this.allCodeList[tag]) {
return new HttpResponse(200, []);
}
if (isCache && this.codeListCache.has(tag)) {
return this.codeListCache.get(tag);
}
const response = await this.allCodeList[tag].getItems(context, data);
this.codeListCache.set(tag, response);
return response;
}
/**
* 获取实例
*
* @static
* @returns {CodeListService}
* @memberof CodeListService
*/
public static getInstance(): CodeListService {
return this.instance;
}
}
// 默认导出
export default CodeListService;
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPDEUILOGIC
</#ibiztemplate>
import { UILogicBase } from '@/ibiz-core';
/**
* ${item.name}界面逻辑基类
*
* @export
* @class ${item.codeName}UILogicBase
* @extends {UILogicBase}
*/
export class ${item.codeName}UILogicBase extends UILogicBase { }
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPDEUILOGIC
</#ibiztemplate>
import { ${item.codeName}UILogicBase } from './${srffilepath2(item.getCodeName())}-ui-logic-base';
/**
* ${item.name}界面逻辑
*
* @export
* @class ${item.codeName}UILogic
* @extends {UILogicBase}
*/
export class ${item.codeName}UILogic extends ${item.codeName}UILogicBase { }
// 默认导出
export default ${item.codeName}UILogic;
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPWFVER
</#ibiztemplate>
import { WFUIActionBase } from '@/ibiz-core';
import { Subject } from 'rxjs';
/**
* ${item.getPSWFVersion().name}WFUI服务对象基类
*
* @export
* @class ${srfclassname(item.getPSWFVersion().getCodeName())}WFUIActionBase
* @extends {WFUIActionBase}
*/
export class ${srfclassname(item.getPSWFVersion().getCodeName())}WFUIActionBase extends WFUIActionBase {
<#if item.getPSAppWFUIActions()??>
<#list item.getPSAppWFUIActions() as wfUIAction>
<#if wfUIAction.getUIActionMode() != "SYS">
${P.getLogicCode(wfUIAction, "LOGIC.vue").code}
</#if>
</#list>
</#if>
}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPWFVER
</#ibiztemplate>
import ${srfclassname(item.getPSWFVersion().getCodeName())}UIServiceBase from './${item.getPSWFVersion().getCodeName()}-ui-service-base';
/**
* ${item.getName()}UI服务对象
*
* @export
* @class ${srfclassname(item.getPSWFVersion().getCodeName())}WFUIAction
* @extends {${srfclassname(item.getPSWFVersion().getCodeName())}WFUIActionBase}
*/
export class ${srfclassname(item.getPSWFVersion().getCodeName())}WFUIAction extends ${srfclassname(item.getPSWFVersion().getCodeName())}WFUIActionBase { }
// 默认导出
export default ${srfclassname(item.getPSWFVersion().getCodeName())}WFUIAction;
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
import { IndexedDBServiceBase } from './indexeddb-service-base';
/**
* IndexedDB数据库服务
*
* @export
* @class IndexedDBService
* @extends {IndexedDBServiceBase}
*/
export class IndexedDBService extends IndexedDBServiceBase {
/**
* 唯一实例
*
* @private
* @static
* @type {IndexedDBService}
* @memberof IndexedDBService
*/
private static readonly instance: IndexedDBService = new IndexedDBService();
/**
* Creates an instance of IndexedDBService.
* @memberof IndexedDBService
*/
protected constructor() {
if (IndexedDBService.instance) {
return IndexedDBService.instance;
}
super('${.now?date}');
}
/**
* 实体配置初始化
*
* @protected
* @memberof IndexedDBServiceBase
*/
protected entityConfigInit(): void {
<#list app.getAllPSAppDataEntities() as appEntity>
this.entityConfigs.push({ name: '${appEntity.getCodeName()?lower_case}', keyPath: 'srfsessionkey' });
</#list>
}
/**
* 获取实例
*
* @returns {IndexedDBService}
* @memberof IndexedDBService
*/
public static getInstance(): IndexedDBService {
return IndexedDBService.instance;
}
}
\ No newline at end of file
{
id: '${item.getId()?j_string}',
name: '${item.getName()?j_string}',
text: '${item.getText()?j_string}',
type: '<#if item.getItemType()??>${item.getItemType()?j_string}<#else></#if>',
counterid: '<#if item.getCounterId()??>${item.getCounterId()?j_string}<#else></#if>',
tooltip: '<#if item.getTooltip()??>${item.getTooltip()?j_string}</#if>',
expanded: <#if item.isExpanded()>true<#else>false</#if>,
separator: <#if item.isSeperator()>true<#else>false</#if>,
hidden: <#if item.isHidden()>true<#else>false</#if>,
hidesidebar: <#if item.isHideSideBar()>true<#else>false</#if>,
opendefault: <#if item.isOpenDefault()>true<#else>false</#if>,
<#if item.getPSSysImage()??>
iconcls: '${item.getPSSysImage().getCssClass()}',
icon: '${item.getPSSysImage().getImagePath()}',
<#else>
iconcls: '',
icon: '',
</#if>
<#if item.getPSSysCss()??>
textcls: '${item.getPSSysCss().getCssName()}',
<#else>
textcls: '',
</#if>
<#if item.getPSAppFunc()??>
appfunctag: '${item.getPSAppFunc().codeName}',
<#else>
appfunctag: '',
</#if>
resourcetag: '<#if item.getAccessKey()??>${item.getAccessKey()}</#if>',
<#if item.getPSAppMenuItems()??>
items: [
<#list item.getPSAppMenuItems() as child>
${P.getPartCode(child,"ITEM").code},
</#list>
],
</#if>
}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_APPMENU
</#ibiztemplate>
import { MockAdapter } from '@/mock/mock-adapter';
const mock = MockAdapter.getInstance();
import Mock from 'mockjs'
const Random = Mock.Random;
// 获取应用数据
mock.onGet('v7/${srffilepath2(ctrl.codeName)}${ctrl.getControlType()?lower_case}').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
return [status, {
name: '${ctrl.getName()?j_string}',
<#if ctrl.getPSAppMenuItems()??>
items: [
<#list ctrl.getPSAppMenuItems() as child>
${P.getPartCode(child,"ITEM").code},
</#list>
],
</#if>
}];
});
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
import { MockAdapter } from '../mock-adapter';
const mock = MockAdapter.getInstance();
import Mock from 'mockjs'
const datas: Array<any> = [
<#if app.getAllPSAppCodeLists()??>
<#list app.getAllPSAppCodeLists() as codelist>
{
<#if codelist.getCodeListType() == "STATIC" && codelist.getAllPSCodeItems()??>
srfkey: '${codelist.codeName}',
emptytext: '${codelist.getEmptyText()}',
"codelisttype":"static",
items: [
<#if codelist.getAllPSCodeItems()??>
<#list codelist.getAllPSCodeItems() as codeitem>
{
id: '${codeitem.getValue()?j_string}',
label: '${codeitem.getText()?j_string}',
text: '${codeitem.getText()?j_string}',
<#comment>判断是否为数值代码项</#comment>
<#if codelist.isCodeItemValueNumber?? && codelist.isCodeItemValueNumber()>
value: ${codeitem.getValue()?j_string},
<#else>
value: '${codeitem.getValue()?j_string}',
</#if>
disabled: <#if codeitem.isDisableSelect()>true<#else>false</#if>,
},
</#list>
</#if>
]
<#else>
"srfkey": "${codelist.codeName}",
"emptytext": "${codelist.getEmptyText()}",
"codelisttype":"dynamic",
"appdataentity":"<#if codelist.getPSAppDataEntity?? && codelist.getPSAppDataEntity()??>${codelist.getPSAppDataEntity().codeName}</#if>",
"appdedataset":"<#if codelist.getPSAppDEDataSet?? && codelist.getPSAppDEDataSet()??>${codelist.getPSAppDEDataSet().codeName}</#if>",
"items": []
</#if>
}<#if codelist_has_next>,</#if>
</#list>
</#if>
];
// 获取全部数组
mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
return [status, datas, config.headers, config];
});
<#ibiztemplate>
TARGET=PSAPPDATAENTITY
</#ibiztemplate>
import { MockAdapter } from '@/mock/mock-adapter';
import { Util } from '@/ibiz-core/utils';
const mock = MockAdapter.getInstance();
// 模拟数据
const mockDatas: Array<any> = [
<#if de.getAllPSDESampleDatas?? && de.getAllPSDESampleDatas()??>
<#list de.getAllPSDESampleDatas() as data>
${data.getDataJO().toString()}<#if data_has_next>,</#if>
</#list>
</#if>
];
/**
* 解析参数
*
* @param paramArray 参数数组
* @param regStr 路径正则
* @param url 访问路径
*/
const parsingParameters = (paramArray: Array<string>, regStr: RegExp, url: string): any => {
let params: any = {};
const matchArray: any = new RegExp(regStr).exec(url);
if (matchArray && matchArray.length > 1 && paramArray && paramArray.length > 0) {
paramArray.forEach((item: any, index: number) => {
Object.defineProperty(params, item, {
enumerable: true,
value: matchArray[index + 1],
});
});
}
return params;
};
/**
* 排队路径参数是否存在 null、undefined 或者空字符串等异常情况
*
* @param paramArray
* @param params
*/
const judgmentParametersException = (paramArray: Array<string>, params: any): boolean => {
let isParametersException = false;
if (paramArray.length > 0) {
let state = paramArray.some((key: string) => {
let _value = params[key];
if (!_value || Object.is(_value, '')) {
return true;
}
return false;
});
if (state) {
isParametersException = true;;
}
}
return isParametersException;
};
<#assign isCurWFDE = false>
<#if app.getAppMode()?? && app.getAppMode() == "WFAPP" && app.getAllPSAppWFs()??>
<#list app.getAllPSAppWFs() as appwf>
<#if appwf.getPSWorkflow().getWFProxyMode() == 3 && appwf.getPSWorkflow().getPSWFDEs()??>
<#list appwf.getPSWorkflow().getPSWFDEs() as wfde>
<#if wfde.getWFProxyMode() == 2 && wfde.getCodeName() == de.getCodeName()>
<#assign isCurWFDE = true>
<#break>
</#if>
</#list>
<#if isCurWFDE>
<#break>
</#if>
</#if>
</#list>
</#if>
<#assign isClientWFDE = false>
<#if de.hasPSDEWF() && de.getAllPSDEWFs()??>
<#list de.getAllPSDEWFs() as wfde>
<#if wfde.getWFProxyMode() == 1 >
<#assign isClientWFDE = true>
<#break>
</#if>
</#list>
</#if>
<#assign keyCNLC = "id">
<#assign itemCodeName = item.getCodeName()>
<#assign itemCodeNameLC = itemCodeName?lower_case>
<#-- 主实体 start -->
<#if item.isMajor()>
<#assign parentPath = "" >
<#assign selfPath="\\/" + srfpluralize(itemCodeNameLC) >
<#assign parentParams = "">
<#assign parentSearchParams = "" >
<#assign parentParams2 = "">
<#assign parentParams3 = "">
<#assign idParams = "">
<#assign authParams = "">
<#assign idParams2 = "">
<#assign idParams3 = "">
<#assign etParams = "">
<#assign etParams2 = "">
<#assign etParams3 = "">
<#assign id_etParams = "">
<#assign id_etParams2 = "">
<#assign id_etParams3 = "">
<#assign etParams = etParams + "@RequestBody " + itemCodeName + " " + itemCodeNameLC + "">
<#assign etParams2 = etParams2 + itemCodeName + " " + itemCodeNameLC + "">
<#assign etParams3 = etParams3 + "">
<#assign idParams = idParams + "@PathVariable(\"" + itemCodeNameLC + keyCNLC + "\") " + srfjavatype(de.getKeyPSDEField().stdDataType) + " " + itemCodeNameLC + keyCNLC >
<#assign authParams = "#" + itemCodeNameLC + keyCNLC + ",">
<#assign idParams2 = idParams2 + " " + srfjavatype(de.getKeyPSDEField().stdDataType) + " " + itemCodeNameLC + keyCNLC >
<#assign idParams3 = idParams3 + "'" + itemCodeNameLC + keyCNLC + "'" >
<#assign id_etParams = id_etParams + "@PathVariable(\"" + itemCodeNameLC + keyCNLC + "\") " + srfjavatype(de.getKeyPSDEField().stdDataType) + " " + itemCodeNameLC + keyCNLC + ", @RequestBody " + itemCodeName + " " + itemCodeNameLC + "" >
<#assign id_etParams2 = id_etParams2 + "" + srfjavatype(de.getKeyPSDEField().stdDataType) + " " + itemCodeNameLC + keyCNLC + ", " + itemCodeName + " " + itemCodeNameLC + "," >
<#assign id_etParams3 = id_etParams3 + "'" + itemCodeNameLC + keyCNLC + "'" >
<#assign fullPath = parentPath + selfPath>
<#if item.getAllPSAppDEMethods()??>
<#list item.getAllPSAppDEMethods() as appMethod>
<#if appMethod.getPSDEServiceAPIMethod()??>
<#assign reqMtd = appMethod.getPSDEServiceAPIMethod().getRequestMethod()>
<#if appMethod.getMethodType()=='DEACTION'>
<#assign deaction = appMethod.getPSDEAction()>
<#assign deactionName = deaction.getName()>
<#assign deactionCodeName = deaction.getCodeName()>
<#assign oppriv = "">
<#if deaction.getPSDEOPPriv()??>
<#assign oppriv = deaction.getPSDEOPPriv().getName() >
</#if>
<#if deaction.codeName == 'Create'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check('${oppriv}')")
public ResponseEntity<${item.getCodeName()}> ${appMethod.getCodeName()?uncap_first}(${etParams}) {
${item.getCodeName()} ${item.getCodeName()?lower_case}2 = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}(${etParams3});
return ResponseEntity.status(HttpStatus.OK).body(${itemCodeName?lower_case}2);
} -->
//${deactionCodeName}
mock.on${reqMtd?lower_case?cap_first}(new RegExp(/^${fullPath}$/)).reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
// ${etParams3}
let paramArray: Array<string> = [${etParams3}];
let regStr: RegExp = /^${fullPath}$/;
let url = config.url;
let params = parsingParameters(paramArray, regStr, url);
console.log(params);
let state = judgmentParametersException(paramArray, params);
if (state) {
return [403, null, config.headers, config];
}
let data: any = JSON.parse(config.data);
mockDatas.push(Object.assign({}, data, { ${itemCodeNameLC}${keyCNLC}: Util.createUUID() }))
return [status, mockDatas[mockDatas.length - 1], config.headers, config];
});
<#elseif deaction.codeName == 'Update'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check(${authParams}'${oppriv}')")
public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}(${id_etParams}) {
${itemCodeName} ${itemCodeName?lower_case}2 = ${itemCodeName?lower_case}service.${deactionCodeName?uncap_first}(${id_etParams3});
return ResponseEntity.status(HttpStatus.OK).body(${itemCodeName?lower_case}2);
} -->
//${deactionCodeName}
mock.on${reqMtd?lower_case?cap_first}(new RegExp(/^${fullPath}\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => {
<#-- mock.on${reqMtd?lower_case?cap_first}('${fullPath}/{${itemCodeNameLC + keyCNLC}}').reply((config: any) => { -->
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
// ${id_etParams3}
let paramArray: Array<string> = [${id_etParams3}];
let regStr: RegExp = /^${fullPath}\/([a-zA-Z0-9\-\;]{1,35})$/;
let url = config.url;
let params = parsingParameters(paramArray, regStr, url);
console.log(params);
let state = judgmentParametersException(paramArray, params);
if (state) {
return [403, null, config.headers, config];
}
// 遍历键值,获取数据
let items: Array<any> = [];
items = Util.deepCopy(mockDatas);
let state2 = Object.keys(params).some((key: string) => {
let _value = params[key];
let _items = items.filter((data: any) => Object.is(data[key], _value));
if (_items.length === 0) {
return true;
}
items = [];
items = Util.deepCopy(_items);
return false;
});
if (state2) {
return [403, null, config.headers, config];
}
let et_id = Object.keys(params)[Object.keys(params).length - 1]
let et_id_value = params[et_id];
let index = mockDatas.findIndex((data: any) => Object.is(data[et_id], et_id_value));
let data: any = JSON.parse(config.data);
Object.keys(mockDatas[index]).forEach((key: string) => {
if (data.hasOwnProperty(key)) {
Object.assign(mockDatas[index], { [key]: data[key] })
}
});
return [status, mockDatas[index], config.headers, config];
});
<#elseif deaction.codeName == 'Get'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check(${authParams}'${oppriv}')")
public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}(${idParams}) {
${itemCodeName} ${itemCodeName?lower_case} = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}(${idParams3});
return ResponseEntity.status(HttpStatus.OK).body(${itemCodeName?lower_case});
} -->
//${deactionCodeName}
mock.on${reqMtd?lower_case?cap_first}(new RegExp(/^${fullPath}\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
// ${idParams3}
let paramArray: Array<string> = [${idParams3}];
let regStr: RegExp = /^${fullPath}\/([a-zA-Z0-9\-\;]{1,35})$/;
let url = config.url;
let params = parsingParameters(paramArray, regStr, url);
console.log(params);
let state = judgmentParametersException(paramArray, params);
if (state) {
return [403, null, config.headers, config];
}
// 遍历键值,获取数据
let items: Array<any> = [];
items = Util.deepCopy(mockDatas);
let state2 = Object.keys(params).some((key: string) => {
let _value = params[key];
let _items = items.filter((data: any) => Object.is(data[key], _value));
if (_items.length === 0) {
return true;
}
items = [];
items = Util.deepCopy(_items);
return false;
});
if (state2) {
return [403, null, config.headers, config];
}
return [status, items[0], config.headers, config];
});
<#elseif deaction.codeName == 'GetDraft'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/${deactionCodeName?lower_case}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check('${oppriv}')")
public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}() {
//${itemCodeName} ${itemCodeName?lower_case} = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}(${idParams3});
return ResponseEntity.status(HttpStatus.OK).body(new ${itemCodeName}());
} -->
//${deactionCodeName}
mock.on${reqMtd?lower_case?cap_first}(new RegExp(/^${fullPath}\/${deactionCodeName?lower_case}$/)).reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
// ${idParams3}
<#-- let paramArray: Array<string> = [${idParams3}]; -->
let paramArray: Array<string> = [];
let regStr: RegExp = /^${fullPath}\/${deactionCodeName?lower_case}$/;
let url = config.url;
let params = parsingParameters(paramArray, regStr, url);
console.log(params);
let state = judgmentParametersException(paramArray, params);
if (state) {
return [403, null, config.headers, config];
}
return [status, {}, config.headers, config];
});
<#elseif deaction.codeName == 'Remove'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check(${authParams}'${oppriv}')")
public ResponseEntity<Boolean> ${deactionCodeName?uncap_first}(${idParams}) {
boolean b = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}(${idParams3});
return ResponseEntity.status(HttpStatus.OK).body(b);
} -->
//${deactionCodeName}
mock.on${reqMtd?lower_case?cap_first}(new RegExp(/^${fullPath}\/([a-zA-Z0-9\-\;]{1,35})$/)).reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
// ${idParams3}
let paramArray: Array<string> = [${idParams3}];
let regStr: RegExp = /^${fullPath}\/([a-zA-Z0-9\-\;]{1,35})$/;
let url = config.url;
let params = parsingParameters(paramArray, regStr, url);
console.log(params);
let state = judgmentParametersException(paramArray, params);
if (state) {
return [403, null, config.headers, config];
}
let et_id = Object.keys(params)[Object.keys(params).length - 1]
let et_id_value = params[et_id];
let index = mockDatas.findIndex((data: any) => Object.is(data[et_id], et_id_value));
mockDatas.splice(index, 1);
return [status, null, config.headers, config];
});
<#elseif deaction.codeName == 'CheckKey'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/${deactionCodeName?lower_case}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check('${oppriv}')")
public ResponseEntity<Boolean> ${deactionCodeName?uncap_first}(${etParams}) {
boolean b = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}(${etParams3});
return ResponseEntity.status(HttpStatus.OK).body(b);
} -->
//${deactionCodeName}
mock.on${reqMtd?lower_case?cap_first}(new RegExp(/^${fullPath}\/${deactionCodeName?lower_case}$/)).reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
// ${etParams3}
let paramArray: Array<string> = [${etParams3}];
let regStr: RegExp = /^${fullPath}\/${deactionCodeName?lower_case}$/;
let url = config.url;
let params = parsingParameters(paramArray, regStr, url);
console.log(params);
let state = judgmentParametersException(paramArray, params);
if (state) {
return [403, null, config.headers, config];
}
return [status, {
}];
});
<#else>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/${deactionCodeName?lower_case}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check(${authParams}'${oppriv}')")
public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}(${id_etParams}) {
${itemCodeName} ${itemCodeName?lower_case}2 = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}(${id_etParams3});
return ResponseEntity.status(HttpStatus.OK).body(${itemCodeName?lower_case}2);
} -->
//${deactionCodeName}
mock.on${reqMtd?lower_case?cap_first}(new RegExp(/^${fullPath}\/([a-zA-Z0-9\-\;]{1,35})\/${deactionCodeName?lower_case}$/)).reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
// ${id_etParams3}
let paramArray: Array<string> = [${id_etParams3}];
let regStr: RegExp = /^${fullPath}\/([a-zA-Z0-9\-\;]{1,35})\/${deactionCodeName?lower_case}$/;
let url = config.url;
let params = parsingParameters(paramArray, regStr, url);
console.log(params);
let state = judgmentParametersException(paramArray, params);
if (state) {
return [403, null, config.headers, config];
}
return [status, {
}];
});
</#if>
<#elseif appMethod.getMethodType()=='FETCH'>
<#assign deds = appMethod.getPSDEDataSet()>
<#assign oppriv = "">
<#if deds.getPSDEOPPriv()??>
<#assign oppriv = deds.getPSDEOPPriv().getName() >
</#if>
<#-- @RequestMapping(method= RequestMethod.${reqMtd} , value="${fullPath}/fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check('${oppriv}')")
public ResponseEntity<List<${itemCodeName}>> ${appMethod.getCodeName()?uncap_first}(<#if parentParams!="">${parentParams},</#if>${itemCodeName}SearchContext searchContext,Pageable pageable) {
${parentSearchParams}
Page<${itemCodeName}> page = ${item.getCodeName()?lower_case}service.fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()}<#else>${deds.getCodeName()}</#if>(<#if parentParams != "">${parentParams3} , </#if>searchContext);
return ResponseEntity.status(HttpStatus.OK)
.header("x-page", String.valueOf(pageable.getPageNumber()))
.header("x-per-page", String.valueOf(pageable.getPageSize()))
.header("x-total", String.valueOf(page.getTotalElements()))
.body(page.getContent());
} -->
//fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()}<#else>${deds.getCodeName()}</#if>
mock.on${reqMtd?lower_case?cap_first}(new RegExp(/^${fullPath}\/fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>(\?[\w-./?%&=]*)*$/)).reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
// ${parentParams3}
let paramArray: Array<string> = [${parentParams3}];
let regStr: RegExp = /^${fullPath}\/fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>(\?[\w-./?%&=]*)*$/;
let url = config.url;
let params = parsingParameters(paramArray, regStr, url);
console.log(params);
let state = judgmentParametersException(paramArray, params);
if (state) {
return [403, null, config.headers, config];
}
let { headers } = config;
let xTotal = mockDatas.length;
let records: Array<any> = [];
if (config.url.includes('page')) {
let url = config.url;
let xPage = url.split('page=')[1];
let xPerPage = url.split('size=')[1].split('&')[0];
Object.assign(headers, { 'x-page': xPage + '', 'x-per-page': xPerPage + '', 'x-total': xTotal + '' });
let start = xTotal - (xPage * xPerPage);
records = mockDatas.slice(xPage * xPerPage, xPerPage);
} else {
records = [...mockDatas];
}
return [status, records, config.headers, config];
});
</#if>
<#else>
<#if appMethod.getMethodType()=='DEACTION'>
<#assign deaction = appMethod.getPSDEAction()>
<#assign deactionName = deaction.getName()>
<#assign deactionCodeName = deaction.getCodeName()>
<#if deaction.codeName == 'Create'>
<#-- public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}(${etParams}) {
return null;
} -->
<#elseif deaction.codeName == 'Update'>
<#-- public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}(${id_etParams}) {
return null;
} -->
<#elseif deaction.codeName == 'Get'>
<#-- public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}(${idParams}) {
return null;
} -->
<#elseif deaction.codeName == 'GetDraft'>
<#-- public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}() {
return null;
} -->
<#elseif deaction.codeName == 'Remove'>
<#-- public ResponseEntity<Boolean> ${deactionCodeName?uncap_first}(${idParams}) {
return null;
} -->
<#elseif deaction.codeName == 'CheckKey'>
<#-- public ResponseEntity<Boolean> ${deactionCodeName?uncap_first}(${etParams}) {
return null;
} -->
<#else>
<#-- public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}(${id_etParams}) {
return null;
} -->
</#if>
<#elseif appMethod.getMethodType()=='FETCH'>
<#assign deds = appMethod.getPSDEDataSet()>
<#-- public ResponseEntity<List<${itemCodeName}>> ${appMethod.getCodeName()?uncap_first}() {
return null;
} -->
</#if>
</#if>
</#list>
</#if>
</#if>
<#-- 主实体 end -->
<#-- 关系接口 start -->
<#if item.getPSAppDERSPathCount() gt 0>
<#list 0..1000 as x>
<#if x gte item.getPSAppDERSPathCount()>
<#break>
<#else>
<#assign parentPath = "" >
<#assign selfPath="/" + srfpluralize(itemCodeNameLC) >
<#assign parentParams = "">
<#assign byParams = "By">
<#assign parentSearchParams = "" >
<#assign parentParams2 = "">
<#assign parentParams3 = "">
<#assign parentAuthParams = "">
<#assign parentAuthParams2 = "">
<#assign idParams = "">
<#assign authParams = "">
<#assign idParams2 = "">
<#assign idParams3 = "">
<#assign etParams = "">
<#assign etParams2 = "">
<#assign etParams3 = "">
<#assign id_etParams = "">
<#assign id_etParams2 = "">
<#assign id_etParams3 = "">
<#list item.getPSAppDERSPath(x) as rs>
<#assign rsMainAppDe = rs.getMajorPSAppDataEntity()>
<#assign rsMainDe = rsMainAppDe.getPSDataEntity()>
<#assign rsMainAppDeCN = rsMainAppDe.codeName >
<#assign rsMainAppDeCNLC = rsMainAppDeCN?lower_case >
<#assign rsMainDePKCN = rsMainDe.getKeyPSDEField().codeName >
<#assign rsMainDePKCNLC = rsMainDePKCN?lower_case >
<#assign rsMainDePKDataType = rsMainDe.getKeyPSDEField().stdDataType >
<#assign parentPath += "/" + srfpluralize(rsMainAppDeCNLC)?lower_case + "/{" + rsMainAppDeCNLC + keyCNLC + "}" >
<#if x != 0>
<#assign parentParams += ", ">
</#if>
<#assign parentParams += "@PathVariable(\"" + rsMainAppDeCNLC + keyCNLC + "\") " + srfjavatype(rsMainDePKDataType) + " " + rsMainAppDeCNLC + keyCNLC >
<#assign byParams += rsMainAppDeCN >
<#assign parentAuthParams = parentAuthParams + "#" + rsMainAppDeCNLC + keyCNLC + ",">
<#assign parentAuthParams2 = parentAuthParams2 + "#" + rsMainAppDeCNLC + keyCNLC + ",">
<#if rs.getPSDER1N()??>
<#assign parentSearchParams += "searchContext.setN_" + rs.getPSDER1N().getPSPickupDEField().getCodeName()?lower_case + "_eq("+ rsMainAppDeCNLC + keyCNLC +");" >
</#if>
<#assign parentParams2 += "" + srfjavatype(rsMainDePKDataType) + " " + rsMainAppDeCNLC + keyCNLC >
<#assign parentParams3 += "" + rsMainAppDeCNLC + keyCNLC >
<#if parentParams != "" >
<#assign idParams = parentParams + ", ">
<#assign idParams2 = parentParams2 + ", ">
<#assign idParams3 = parentParams3 + ", ">
<#assign etParams = parentParams + ", ">
<#assign etParams2 = parentParams2 + ", ">
<#assign etParams3 = parentParams3 + ", ">
<#assign id_etParams = parentParams + ", ">
<#assign id_etParams2 = parentParams2 + ", ">
<#assign id_etParams3 = parentParams3 + ", ">
</#if>
</#list>
<#assign etParams = etParams + "@RequestBody " + itemCodeName + " " + itemCodeNameLC + "">
<#assign etParams2 = etParams2 + itemCodeName + " " + itemCodeNameLC + "">
<#assign etParams3 = etParams3 + itemCodeNameLC + "">
<#assign idParams = idParams + "@PathVariable(\"" + itemCodeNameLC + keyCNLC + "\") " + srfjavatype(de.getKeyPSDEField().stdDataType) + " " + itemCodeNameLC + keyCNLC >
<#assign authParams = "#" + itemCodeNameLC + keyCNLC + ",">
<#assign idParams2 = idParams2 + " " + srfjavatype(de.getKeyPSDEField().stdDataType) + " " + itemCodeNameLC + keyCNLC >
<#assign idParams3 = idParams3 + " " + itemCodeNameLC + keyCNLC >
<#assign id_etParams = id_etParams + "@PathVariable(\"" + itemCodeNameLC + keyCNLC + "\") " + srfjavatype(de.getKeyPSDEField().stdDataType) + " " + itemCodeNameLC + keyCNLC + ", @RequestBody " + itemCodeName + " " + itemCodeNameLC + "" >
<#assign id_etParams2 = id_etParams2 + "" + srfjavatype(de.getKeyPSDEField().stdDataType) + " " + itemCodeNameLC + keyCNLC + ", " + itemCodeName + " " + itemCodeNameLC + "" >
<#assign id_etParams3 = id_etParams3 + "" + itemCodeNameLC + keyCNLC + ", " + itemCodeNameLC + "" >
<#assign fullPath = parentPath + selfPath>
<#if item.getAllPSAppDEMethods()??>
<#list item.getAllPSAppDEMethods() as appMethod>
<#if appMethod.getPSDEServiceAPIMethod()??>
<#assign reqMtd = appMethod.getPSDEServiceAPIMethod().getRequestMethod()>
<#if appMethod.getMethodType()=='DEACTION'>
<#assign deaction = appMethod.getPSDEAction()>
<#assign deactionName = deaction.getName()>
<#assign deactionCodeName = deaction.getCodeName()>
<#assign oppriv = "">
<#if deaction.getPSDEOPPriv()??>
<#assign oppriv = deaction.getPSDEOPPriv().getName() >
</#if>
<#if deaction.codeName == 'Create'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check${byParams}(${parentAuthParams2}'${oppriv}')")
public ResponseEntity<${item.getCodeName()}> ${appMethod.getCodeName()?uncap_first}${byParams}(${etParams}) {
${item.getCodeName()} ${item.getCodeName()?lower_case}2 = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}${byParams}(${etParams3});
return ResponseEntity.status(HttpStatus.OK).body(${itemCodeName?lower_case}2);
} -->
//${deaction.codeName}
mock.on${reqMtd?lower_case?cap_first}('${fullPath}').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
return [status, {
}];
});
<#elseif deaction.codeName == 'Update'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check${byParams}(${parentAuthParams}${authParams}'${oppriv}')")
public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}${byParams}(${id_etParams}) {
${itemCodeName} ${itemCodeName?lower_case}2 = ${itemCodeName?lower_case}service.${deactionCodeName?uncap_first}${byParams}(${id_etParams3});
return ResponseEntity.status(HttpStatus.OK).body(${itemCodeName?lower_case}2);
} -->
//${deaction.codeName}
mock.on${reqMtd?lower_case?cap_first}('${fullPath}/{${itemCodeNameLC + keyCNLC}').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
return [status, {
}];
});
<#elseif deaction.codeName == 'Get'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check${byParams}(${parentAuthParams}${authParams}'${oppriv}')")
public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}${byParams}(${idParams}) {
${itemCodeName} ${itemCodeName?lower_case} = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}${byParams}(${idParams3});
return ResponseEntity.status(HttpStatus.OK).body(${itemCodeName?lower_case});
} -->
//${deaction.codeName}
mock.on${reqMtd?lower_case?cap_first}('${fullPath}/{${itemCodeNameLC + keyCNLC}').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
return [status, {
}];
});
<#elseif deaction.codeName == 'GetDraft'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/${deactionCodeName?lower_case}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check${byParams}(${parentAuthParams2}'${oppriv}')")
public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}${byParams}() {
//${itemCodeName} ${itemCodeName?lower_case} = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}${byParams}(${idParams3});
return ResponseEntity.status(HttpStatus.OK).body(new ${itemCodeName}());
} -->
//${deaction.codeName}
mock.on${reqMtd?lower_case?cap_first}('${fullPath}/${deactionCodeName?lower_case}').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
return [status, {
}];
});
<#elseif deaction.codeName == 'Remove'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check${byParams}(${parentAuthParams}${authParams}'${oppriv}')")
public ResponseEntity<Boolean> ${deactionCodeName?uncap_first}${byParams}(${idParams}) {
boolean b = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}${byParams}(${idParams3});
return ResponseEntity.status(HttpStatus.OK).body(b);
} -->
//${deaction.codeName}
mock.on${reqMtd?lower_case?cap_first}('${fullPath}/{${itemCodeNameLC + keyCNLC}}').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
return [status, {
}];
});
<#elseif deaction.codeName == 'CheckKey'>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/${deactionCodeName?lower_case}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check${byParams}(${parentAuthParams2}'${oppriv}')")
public ResponseEntity<Boolean> ${deactionCodeName?uncap_first}${byParams}(${etParams}) {
boolean b = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}${byParams}(${etParams3});
return ResponseEntity.status(HttpStatus.OK).body(b);
} -->
//${deaction.codeName}
mock.on${reqMtd?lower_case?cap_first}('${fullPath}/${deactionCodeName?lower_case}').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
return [status, {
}];
});
<#else>
<#-- @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/${deactionCodeName?lower_case}")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check${byParams}(${parentAuthParams}${authParams}'${oppriv}')")
public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}${byParams}(${id_etParams}) {
${itemCodeName} ${itemCodeName?lower_case}2 = ${item.getCodeName()?lower_case}service.${deactionCodeName?uncap_first}${byParams}(${id_etParams3});
return ResponseEntity.status(HttpStatus.OK).body(${itemCodeName?lower_case}2);
} -->
//${deaction.codeName}
mock.on${reqMtd?lower_case?cap_first}('${fullPath}/{${itemCodeNameLC + keyCNLC}}/${deactionCodeName?lower_case}').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
return [status, {
}];
});
</#if>
<#elseif appMethod.getMethodType()=='FETCH'>
<#assign deds = appMethod.getPSDEDataSet()>
<#if deds.getPSDEOPPriv()??>
<#assign oppriv = deds.getPSDEOPPriv().getName() >
</#if>
<#-- @RequestMapping(method= RequestMethod.${reqMtd} , value="${fullPath}/fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>")
@PreAuthorize("@${item.getCodeName()?lower_case}_pms.check${byParams}(${parentAuthParams2}'${oppriv}')")
public ResponseEntity<List<${itemCodeName}>> ${appMethod.getCodeName()?uncap_first}${byParams}(<#if parentParams!="">${parentParams},</#if>${itemCodeName}SearchContext searchContext,Pageable pageable) {
${parentSearchParams}
Page<${itemCodeName}> page = ${item.getCodeName()?lower_case}service.fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()}<#else>${deds.getCodeName()}</#if>${byParams}(<#if parentParams != "">${parentParams3} , </#if>searchContext);
return ResponseEntity.status(HttpStatus.OK)
.header("x-page", String.valueOf(pageable.getPageNumber()))
.header("x-per-page", String.valueOf(pageable.getPageSize()))
.header("x-total", String.valueOf(page.getTotalElements()))
.body(page.getContent());
} -->
//${deaction.codeName}
mock.on${reqMtd?lower_case?cap_first}('${fullPath}/fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
if (status !== 200) {
return [status, null];
}
return [status, {
}];
});
</#if>
<#else>
<#if appMethod.getMethodType()=='DEACTION'>
<#assign deaction = appMethod.getPSDEAction()>
<#assign deactionName = deaction.getName()>
<#assign deactionCodeName = deaction.getCodeName()>
<#if deaction.codeName == 'Create'>
<#-- public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}${byParams}(${etParams}) {
return null;
} -->
<#elseif deaction.codeName == 'Update'>
<#-- public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}${byParams}(${id_etParams}) {
return null;
} -->
<#elseif deaction.codeName == 'Get'>
<#-- public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}${byParams}(${idParams}) {
return null;
} -->
<#elseif deaction.codeName == 'GetDraft'>
<#-- public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}${byParams}() {
return null;
} -->
<#elseif deaction.codeName == 'Remove'>
<#-- public ResponseEntity<Boolean> ${deactionCodeName?uncap_first}${byParams}(${idParams}) {
return null;
} -->
<#elseif deaction.codeName == 'CheckKey'>
<#-- public ResponseEntity<Boolean> ${deactionCodeName?uncap_first}${byParams}(${etParams}) {
return null;
} -->
<#else>
<#-- public ResponseEntity<${itemCodeName}> ${appMethod.getCodeName()?uncap_first}${byParams}(${id_etParams}) {
return null;
} -->
</#if>
<#elseif appMethod.getMethodType()=='FETCH'>
<#assign deds = appMethod.getPSDEDataSet()>
<#-- public ResponseEntity<List<${itemCodeName}>> ${appMethod.getCodeName()?uncap_first}${byParams}() {
return null;
} -->
</#if>
</#if>
</#list>
</#if>
</#if>
</#list>
</#if>
<#-- 关系接口 end -->
<#assign isCurWFDE = false>
<#if app.getAppMode()?? && app.getAppMode() == "WFAPP" && app.getAllPSAppWFs()??>
<#list app.getAllPSAppWFs() as appwf>
<#if appwf.getPSWorkflow().getWFProxyMode() == 3 && appwf.getPSWorkflow().getPSWFDEs()??>
<#list appwf.getPSWorkflow().getPSWFDEs() as wfde>
<#if wfde.getWFProxyMode() == 2 && wfde.getCodeName() == de.getCodeName()>
<#assign isCurWFDE = true>
<#break>
</#if>
</#list>
<#if isCurWFDE>
<#break>
</#if>
</#if>
</#list>
</#if>
<#if isCurWFDE>
<#assign itemPKParam = itemCodeNameLC + keyCNLC>
<#assign wfFuncParams = "@PathVariable(\"" + itemCodeNameLC + keyCNLC + "\") " + srfjavatype(de.getKeyPSDEField().stdDataType) + " " + itemPKParam + ", @RequestBody JSONObject data">
<#assign wfFuncParams2 = itemPKParam + ", data">
/** 工作流行为 **/
/**
* 开始流程【WFStart】
*/
<#-- @RequestMapping(method = RequestMethod.POST, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/wfstart")
public ResponseEntity<JSONObject> wfStart(${wfFuncParams}) {
if (${item.getCodeName()?lower_case}service.wfStart(${wfFuncParams2})) {
return ResponseEntity.status(HttpStatus.OK).body(data);
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(data);
}
} -->
/**
* 流程处理【WFSubmit】
*/
<#-- @RequestMapping(method = RequestMethod.POST, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/wfsubmit")
public ResponseEntity<JSONObject> wfSubmit(${wfFuncParams}) {
if (${item.getCodeName()?lower_case}service.wfSubmit(${wfFuncParams2})) {
return ResponseEntity.status(HttpStatus.OK).body(data);
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(data);
}
} -->
/**
* 流程结束【WFClose】
*/
<#-- @RequestMapping(method = RequestMethod.POST, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/wfclose")
public ResponseEntity<JSONObject> wfClose(${wfFuncParams}) {
if (${item.getCodeName()?lower_case}service.wfClose(${wfFuncParams2})) {
return ResponseEntity.status(HttpStatus.OK).body(data);
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(data);
}
} -->
/**
* 流程跳转【WFGoto】
*/
<#-- @RequestMapping(method = RequestMethod.POST, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/wfgoto")
public ResponseEntity<JSONObject> wfGoto(${wfFuncParams}) {
if (${item.getCodeName()?lower_case}service.wfGoto(${wfFuncParams2})) {
return ResponseEntity.status(HttpStatus.OK).body(data);
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(data);
}
} -->
/**
* 流程重启【WFRestart】
*/
<#-- @RequestMapping(method = RequestMethod.POST, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/wfrestart")
public ResponseEntity<JSONObject> wfRestart(${wfFuncParams}) {
if (${item.getCodeName()?lower_case}service.wfRestart(${wfFuncParams2})) {
return ResponseEntity.status(HttpStatus.OK).body(data);
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(data);
}
} -->
/**
* 流程撤回【WFRollback】
*/
<#-- @RequestMapping(method = RequestMethod.POST, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/wfrollback")
public ResponseEntity<JSONObject> wfRollback(${wfFuncParams}) {
if (${item.getCodeName()?lower_case}service.wfRollback(${wfFuncParams2})) {
return ResponseEntity.status(HttpStatus.OK).body(data);
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(data);
}
} -->
/**
* 流程退回【WFSendBack】
*/
<#-- @RequestMapping(method = RequestMethod.POST, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/wfsendback")
public ResponseEntity<JSONObject> wfSendBack(${wfFuncParams}) {
if (${item.getCodeName()?lower_case}service.wfSendBack(${wfFuncParams2})) {
return ResponseEntity.status(HttpStatus.OK).body(data);
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(data);
}
} -->
/**
* 流程重新分配【WFReassign】
*/
<#-- @RequestMapping(method = RequestMethod.POST, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/wfreassign")
public ResponseEntity<JSONObject> wfReassign(${wfFuncParams}) {
if (${item.getCodeName()?lower_case}service.wfReassign(${wfFuncParams2})) {
return ResponseEntity.status(HttpStatus.OK).body(data);
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(data);
}
} -->
/**
* 流程标记已读【WFMarkRead】
*/
<#-- @RequestMapping(method = RequestMethod.POST, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/wfmarkread")
public ResponseEntity<JSONObject> wfMarkRead(${wfFuncParams}) {
if (${item.getCodeName()?lower_case}service.wfMarkRead(${wfFuncParams2})) {
return ResponseEntity.status(HttpStatus.OK).body(data);
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(data);
}
} -->
</#if>
<#-- 客户端 流程 实体 启动 -->
<#if isClientWFDE>
<#-- @RequestMapping(method= RequestMethod.GET , value="${fullPath}/wfstart")
public ResponseEntity<JSONObject> wfStart() {
return ResponseEntity.status(HttpStatus.OK).body(${item.getCodeName()?lower_case}service.wfStart());
} -->
</#if>
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
// 预置 api 接口对象
import './appdata/appdata';
import './codelist/codelist';
import './login/login';
import './upload/upload';
<#--
// 应用级部件接口对象
<#list app.getAllPSAppMenuModels() as menu>
import './app/${srffilepath2(menu.codeName)}-${menu.getControlType()?lower_case}/${srffilepath2(menu.codeName)}-${menu.getControlType()?lower_case}';
</#list> -->
// 实体级接口对象
<#list app.getAllPSAppDataEntities() as dataEntitey>
import './entity/${srffilepath2(dataEntitey.getCodeName())}s/${srffilepath2(dataEntitey.getCodeName())}s';
</#list>
\ No newline at end of file
MIT License
Copyright (c) 2020 iBiz-R7前端标准模板
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册