Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
I
iBiz4jVue
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
ibiz4jteam
iBiz4jVue
提交
5113ae67
提交
5113ae67
编写于
8月 23, 2020
作者:
tony001
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'dev'
上级
cc3f6fe0
93983e2c
变更
32
隐藏空白字符变更
内嵌
并排
正在显示
32 个修改的文件
包含
407 行增加
和
63 行删除
+407
-63
FORM.ts.ftl
@CONTROL/@MACRO/MODEL/FORM.ts.ftl
+5
-0
FORM.ts.ftl
@CONTROL/@MACRO/SERVICE/FORM.ts.ftl
+17
-7
CONTROL-BASE.vue.ftl
@CONTROL/日历部件/CONTROL-BASE.vue.ftl
+37
-4
CONTROL-BASE.vue.ftl
@CONTROL/树视图/CONTROL-BASE.vue.ftl
+3
-1
CONTROL-BASE.vue#DETAIL_MODEL.ftl
@CONTROL/表单/CONTROL-BASE.vue#DETAIL_MODEL.ftl
+1
-1
CONTROL-BASE.vue.ftl
@CONTROL/表单/CONTROL-BASE.vue.ftl
+37
-8
CONTROL-BASE.vue.ftl
@CONTROL/表格/CONTROL-BASE.vue.ftl
+113
-7
SERVICE.ts.ftl
@CONTROL/表格/SERVICE.ts.ftl
+1
-1
VIEW.less.ftl
@CONTROL/视图布局面板/实体工作流动态导航表格视图/VIEW.less.ftl
+12
-5
VIEW.vue.ftl
@CONTROL/视图布局面板/实体工作流动态导航表格视图/VIEW.vue.ftl
+6
-1
VIEW.less.ftl
@CONTROL/视图布局面板/实体工作流动态编辑视图/VIEW.less.ftl
+9
-2
CONTROL-BASE.vue.ftl
@CONTROL/门户部件/CONTROL-BASE.vue.ftl
+1
-0
DEFAULT.vue.ftl
@EDITOR/@MACRO/PANEL/DEFAULT.vue.ftl
+1
-1
EDITOR.less.ftl
@EDITOR/下拉列表框(cron表达式)/EDITOR.less.ftl
+0
-0
EDITOR.vue.ftl
@EDITOR/下拉列表框(cron表达式)/EDITOR.vue.ftl
+5
-0
GRIDEIDTOR.vue.ftl
@EDITOR/下拉列表框(cron表达式)/GRIDEIDTOR.vue.ftl
+15
-0
PANELEDITOR.vue.ftl
@EDITOR/下拉列表框(cron表达式)/PANELEDITOR.vue.ftl
+2
-0
template.properties
@EDITOR/下拉列表框(cron表达式)/template.properties
+2
-0
EDITOR.less.ftl
@EDITOR/多行输入框 (工作流审批意见控件时光轴样式)/EDITOR.less.ftl
+0
-0
EDITOR.vue.ftl
@EDITOR/多行输入框 (工作流审批意见控件时光轴样式)/EDITOR.vue.ftl
+2
-0
GRIDEIDTOR.vue.ftl
@EDITOR/多行输入框 (工作流审批意见控件时光轴样式)/GRIDEIDTOR.vue.ftl
+4
-0
PANELEDITOR.vue.ftl
@EDITOR/多行输入框 (工作流审批意见控件时光轴样式)/PANELEDITOR.vue.ftl
+2
-0
template.properties
@EDITOR/多行输入框 (工作流审批意见控件时光轴样式)/template.properties
+2
-0
PANELEDITOR.vue.ftl
@EDITOR/数据选择(请求数据)/PANELEDITOR.vue.ftl
+2
-1
LOGIC.vue.ftl
@LOGIC/@VIEWLOGIC/编辑/LOGIC.vue.ftl
+3
-2
VIEW_CONTENT-BASE.vue.ftl
@VIEW/@MACRO/VIEW_CONTENT-BASE.vue.ftl
+3
-6
VIEW-BASE.vue.ftl
@VIEW/实体工作流动态导航表格视图/VIEW-BASE.vue.ftl
+12
-3
VIEW-BASE.vue.ftl
@VIEW/实体数据多项选择视图/VIEW-BASE.vue.ftl
+1
-0
VIEW-BASE.vue.ftl
@VIEW/实体数据重定向视图/VIEW-BASE.vue.ftl
+7
-7
ROUTER.ts.ftl
@VIEW/应用首页视图/ROUTER.ts.ftl
+32
-1
%DE_PKGPATH%-ui-service-base.ts.ftl
...iservice/%DE_PKGPATH%/%DE_PKGPATH%-ui-service-base.ts.ftl
+4
-5
CHANGELOG.md
CHANGELOG.md
+66
-0
未找到文件。
@CONTROL/@MACRO/MODEL/FORM.ts.ftl
浏览文件 @
5113ae67
...
...
@@ -31,6 +31,11 @@
<#if dataitem.getPSDEField()??>
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: '${dataitem.getPSDEField().getDataType()}',
<#else>
<#-- 表单项无属性且界面显示类型(供开始流程、提交流程使用) -->
<#if dataitem.getEditorType() != "HIDDEN">
dataType:'FORMITEM',
</#if>
</#if>
},
</#list>
...
...
@CONTROL/@MACRO/SERVICE/FORM.ts.ftl
浏览文件 @
5113ae67
...
...
@@ -106,7 +106,7 @@ import ${srfclassname('${_appde.getCodeName()}')}Service from '@/service/${srffi
*/
@Errorlog
public wfstart(action: string,context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise<any> {
data = this.handleWFData(data);
data = this.handleWFData(data
,true
);
context = this.handleRequestData(action,context,data).context;
return new Promise((resolve: any, reject: any) => {
let result: Promise<any>;
...
...
@@ -164,11 +164,12 @@ import ${srfclassname('${_appde.getCodeName()}')}Service from '@/service/${srffi
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @param {boolean} [isWorkflow] 是否在工作流中添加数据
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
public add(action: string, context: any = {},data: any = {}, isloading?: boolean
,isWorkflow?:boolean
): Promise<any> {
const {data:Data,context:Context} = this.handleRequestData(action,context,data);
<#-- 手动修改数据主键的情况start -->
<#list ctrl.getPSDEFormItems() as formitem>
...
...
@@ -188,8 +189,12 @@ import ${srfclassname('${_appde.getCodeName()}')}Service from '@/service/${srffi
result = this.appEntityService.Create(Context,Data, isloading);
}
result.then((response) => {
this.handleResponse(action, response);
resolve(response);
if(isWorkflow){
resolve(response);
}else{
this.handleResponse(action, response);
resolve(response);
}
}).catch(response => {
reject(response);
});
...
...
@@ -232,11 +237,12 @@ import ${srfclassname('${_appde.getCodeName()}')}Service from '@/service/${srffi
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @param {boolean} [isWorkflow] 是否在工作流中修改数据
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
public update(action: string, context: any = {},data: any = {}, isloading?: boolean
,isWorkflow?:boolean
): Promise<any> {
const {data:Data,context:Context} = this.handleRequestData(action,context,data);
return new Promise((resolve: any, reject: any) => {
let result: Promise<any>;
...
...
@@ -247,8 +253,12 @@ import ${srfclassname('${_appde.getCodeName()}')}Service from '@/service/${srffi
result = this.appEntityService.Update(Context,Data, isloading);
}
result.then((response) => {
this.handleResponse(action, response);
resolve(response);
if(isWorkflow){
resolve(response);
}else{
this.handleResponse(action, response);
resolve(response);
}
}).catch(response => {
reject(response);
});
...
...
@CONTROL/日历部件/CONTROL-BASE.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -32,10 +32,24 @@ ${ctrl.render.code}
:timestamp="item.start"
placement="top">
<context-menu :contextMenuStyle="{width: '100%'}" :data="item" :renderContent="renderContextMenu">
<el-card @click.native="onEventClick(item,true,$event)" :class="item.className">
<h4>{{item.title}}</h4>
<p>{{$t('app.calendar.from')}} {{item.start}} {{$t('app.calendar.to')}} {{item.end}}</p>
</el-card>
<el-card @click.native="onEventClick(item,true,$event)" :class="item.className">
<#if ctrl.getPSSysCalendarItems()?? >
<#list ctrl.getPSSysCalendarItems() as calendarItem>
<div v<#if calendarItem_index != 0>-else</#if>-if="<#if calendarItem.getPSLayoutPanel()??>true<#else>false</#if> && item.itemType == '${calendarItem.getItemType()}'">
<#if calendarItem.getPSLayoutPanel()??>
<#assign panel = calendarItem.getPSLayoutPanel()>
<@ibizindent blank=18>
${P.getCtrlCode(panel, 'CONTROL.html').code}
</@ibizindent>
</#if>
</div>
</#list>
<div v-else>
<h4>{{item.title}}</h4>
<p>{{$t('app.calendar.from')}} {{item.start}} {{$t('app.calendar.to')}} {{item.end}}</p>
</div>
</#if>
</el-card>
</context-menu>
</el-timeline-item>
</el-timeline>
...
...
@@ -150,6 +164,14 @@ FullCalendar,
*/
public calendarClass: string = "calendar";
/**
* this引用
*
* @type {any}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public thisRef: any = this;
/**
* 选中事件element元素
*
...
...
@@ -355,6 +377,17 @@ FullCalendar,
*/
public searchArgCache: any = {};
/**
* 面板数据变化处理事件
* @param {any} item 当前数据
* @param {any} $event 面板事件数据
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public onPanelDataChange(item:any,$event:any) {
Object.assign(item, $event, {rowDataState:'update'});
}
/**
* 搜索获取日程事件
*
...
...
@CONTROL/树视图/CONTROL-BASE.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -148,7 +148,7 @@
*/
@Watch('selectedData')
public onValueChange(newVal: any, oldVal: any) {
this.echoselectedNodes = newVal ? this.isSingleSelect ?
JSON.parse(newVal)[0
] : JSON.parse(newVal) : [];
this.echoselectedNodes = newVal ? this.isSingleSelect ?
[JSON.parse(newVal)[0]
] : JSON.parse(newVal) : [];
this.selectedNodes = [];
if(this.echoselectedNodes.length > 0){
let AllnodesObj = (this.$refs.treeexpbar_tree as any).store.nodesMap;
...
...
@@ -610,6 +610,8 @@
return this.echoselectedNodes.some((val:any)=> {
if(Object.is(item.srfkey,val.srfkey) && Object.is(item.srfmajortext,val.srfmajortext)){
val.used = true;
this.selectedNodes.push(val);
this.$emit('selectionchange', this.selectedNodes);
return true;
}
});
...
...
@CONTROL/表单/CONTROL-BASE.vue#DETAIL_MODEL.ftl
浏览文件 @
5113ae67
...
...
@@ -14,7 +14,7 @@ new FormPageModel({ ${detail} })
<#elseif item.getDetailType() == 'FORMPART'>
new FormPartModel({ ${detail} })
<#elseif item.getDetailType() == 'GROUPPANEL'>
new FormGroupPanelModel({ ${detail}, uiActionGroup: { caption: '<#if item.getPSUIActionGroup()??>${item.getPSUIActionGroup().getName()}</#if>', langbase: '<#if langbase??>${langbase}</#if>', extractMode: '<#if item.getActionGroupExtractMode?? && item.getActionGroupExtractMode()??>${item.getActionGroupExtractMode()}<#else>ITEM</#if>', details: [<#if item.getPSUIActionGroup()??><#list item.getPSUIActionGroup().getPSUIActionGroupDetails() as uadetails><#if uadetails_index gt 0>, </#if>{ name: '${item.getName()}_${uadetails.getName()}', caption: '${uadetails.getPSUIAction().getCaption()}',disabled: false, visabled: true, noprivdisplaymode:<#if uadetails.getPSUIAction()?? && uadetails.getPSUIAction().getNoPrivDisplayMode(view)??>${uadetails.getPSUIAction().getNoPrivDisplayMode(view)}</#if>,dataaccaction: '<#if uadetails.getPSUIAction()?? && uadetails.getPSUIAction().getDataAccessAction()??>${uadetails.getPSUIAction().getDataAccessAction()}</#if>',uiactiontag: '<#if uadetails.getPSUIAction().getPSAppDataEntity?? && uadetails.getPSUIAction().getPSAppDataEntity()??>${uadetails.getPSUIAction().getPSAppDataEntity().getCodeName()?lower_case}_</#if>${uadetails.getPSUIAction().getUIActionTag()?lower_case}'<#if uadetails.getPSUIAction().getPSSysImage()??>, <#assign viewimg=uadetails.getPSUIAction().getPSSysImage()/><#if viewimg.getCssClass() != ''>icon: '${viewimg.getCssClass()}'<#else>img: '${viewimg.getImagePath()}'</#if></#if>,isShowCaption:${uadetails.isShowCaption()?c},isShowIcon:${uadetails.isShowIcon()?c} }</#list></#if>] }, isManageContainer: <#if item.getShowMoreMode?? && item.getShowMoreMode()?? && item.getShowMoreMode() == 2>true<#else>false</#if>, showMoreModeItems: [<#if item.getPSDEFormDetails()??><#list item.getPSDEFormDetails() as moreItem><#if moreItem.getShowMoreMode?? && moreItem.getShowMoreMode()?? && moreItem.getShowMoreMode() == 1>'${moreItem.getName()}',</#if></#list></#if>] })
new FormGroupPanelModel({ ${detail}, uiActionGroup: { caption: '<#if item.getPSUIActionGroup()??>${item.getPSUIActionGroup().getName()}</#if>', langbase: '<#if langbase??>${langbase}</#if>', extractMode: '<#if item.getActionGroupExtractMode?? && item.getActionGroupExtractMode()??>${item.getActionGroupExtractMode()}<#else>ITEM</#if>', details: [<#if item.getPSUIActionGroup()??><#list item.getPSUIActionGroup().getPSUIActionGroupDetails() as uadetails><#if uadetails_index gt 0>, </#if>{ name: '${item.getName()}_${uadetails.getName()}', caption: '${uadetails.getPSUIAction().getCaption()}',disabled: false, visabled: true, noprivdisplaymode:<#if uadetails.getPSUIAction()?? && uadetails.getPSUIAction().getNoPrivDisplayMode(view)??>${uadetails.getPSUIAction().getNoPrivDisplayMode(view)}</#if>,
actiontarget: '<#if uadetails.getPSUIAction()?? && uadetails.getPSUIAction().getActionTarget()??>${uadetails.getPSUIAction().getActionTarget()}</#if>',
dataaccaction: '<#if uadetails.getPSUIAction()?? && uadetails.getPSUIAction().getDataAccessAction()??>${uadetails.getPSUIAction().getDataAccessAction()}</#if>',uiactiontag: '<#if uadetails.getPSUIAction().getPSAppDataEntity?? && uadetails.getPSUIAction().getPSAppDataEntity()??>${uadetails.getPSUIAction().getPSAppDataEntity().getCodeName()?lower_case}_</#if>${uadetails.getPSUIAction().getUIActionTag()?lower_case}'<#if uadetails.getPSUIAction().getPSSysImage()??>, <#assign viewimg=uadetails.getPSUIAction().getPSSysImage()/><#if viewimg.getCssClass() != ''>icon: '${viewimg.getCssClass()}'<#else>img: '${viewimg.getImagePath()}'</#if></#if>,isShowCaption:${uadetails.isShowCaption()?c},isShowIcon:${uadetails.isShowIcon()?c} }</#list></#if>] }, isManageContainer: <#if item.getShowMoreMode?? && item.getShowMoreMode()?? && item.getShowMoreMode() == 2>true<#else>false</#if>, showMoreModeItems: [<#if item.getPSDEFormDetails()??><#list item.getPSDEFormDetails() as moreItem><#if moreItem.getShowMoreMode?? && moreItem.getShowMoreMode()?? && moreItem.getShowMoreMode() == 1>'${moreItem.getName()}',</#if></#list></#if>] })
<#elseif item.getDetailType() == 'IFRAME'>
new FormIFrameModel({ ${detail} })
<#elseif item.getDetailType() == 'RAWITEM'>
...
...
@CONTROL/表单/CONTROL-BASE.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -1328,13 +1328,37 @@ import schema from 'async-validator';
public async wfstart(data: any,localdata?:any): Promise<any> {
return new Promise((resolve: any, reject: any) => {
const _this: any = this;
const post: Promise<any> = _this.save({},false);
const formData:any = this.getData();
const copyData:any = Util.deepCopy(formData);
const post: Promise<any> = Object.is(formData.srfuf, '1')?this.service.update(this.updateAction, JSON.parse(JSON.stringify(this.context)),formData, this.showBusyIndicator,true):this.service.add(this.createAction,JSON.parse(JSON.stringify(this.context)),formData, this.showBusyIndicator,true);
post.then((response:any) =>{
const arg:any = response.data;
const responseData:any = response.data;
let tempResponseData:any = Util.deepCopy(response);
this.service.handleResponse('save', tempResponseData);
const arg:any = tempResponseData.data;
// 保存完成UI处理
this.onFormLoad(arg,'save');
this.$emit('save', arg);
<#if ctrl.getControlType() == 'FORM'>
AppCenterService.notifyMessage({name:"${ctrl.getPSAppDataEntity().getCodeName()}",action:'appRefresh',data:data});
</#if>
this.$nextTick(() => {
this.formState.next({ type: 'save', data: arg });
});
// 准备工作流数据,填充未存库数据
Object.assign(arg,this.getData());
Object.assign(arg,copyData);
// 准备提交参数
if(this.viewparams){
Object.assign(arg,{viewparams:this.viewparams});
let copyViewParams:any = Util.deepCopy(this.viewparams);
if(copyViewParams.w){
delete copyViewParams.w;
}
Object.assign(responseData,copyViewParams);
}
Object.assign(arg,{viewparams:responseData});
// 强制补充srfwfmemo
if(this.srfwfmemo){
Object.assign(arg,{srfwfmemo:this.srfwfmemo});
}
const result: Promise<any> = this.service.wfstart(_this.WFStartAction, JSON.parse(JSON.stringify(this.context)),arg, this.showBusyIndicator,localdata);
result.then((response: any) => {
...
...
@@ -1387,13 +1411,17 @@ import schema from 'async-validator';
return new Promise((resolve: any, reject: any) => {
const _this: any = this;
const arg: any = data[0];
const copyData:any = Util.deepCopy(arg);
Object.assign(arg,{viewparams:this.viewparams});
if (!arg.${ctrl.getPSAppDataEntity().getCodeName()?lower_case} || Object.is(arg.${ctrl.getPSAppDataEntity().getCodeName()?lower_case}, '')) {
return;
}
const post: Promise<any> = Object.is(arg.srfuf, '1')?this.service.update(this.updateAction, JSON.parse(JSON.stringify(this.context)),arg, this.showBusyIndicator
):this.service.add(this.createAction,JSON.parse(JSON.stringify(this.context)),arg, this.showBusyIndicator
);
const post: Promise<any> = Object.is(arg.srfuf, '1')?this.service.update(this.updateAction, JSON.parse(JSON.stringify(this.context)),arg, this.showBusyIndicator
,true):this.service.add(this.createAction,JSON.parse(JSON.stringify(this.context)),arg, this.showBusyIndicator,true
);
post.then((response:any) =>{
const arg:any = response.data;
const responseData:any = response.data;
let tempResponseData:any = Util.deepCopy(response);
this.service.handleResponse('save', tempResponseData);
const arg:any = tempResponseData.data;
// 保存完成UI处理
this.onFormLoad(arg,'save');
this.$emit('save', arg);
...
...
@@ -1404,11 +1432,12 @@ import schema from 'async-validator';
this.formState.next({ type: 'save', data: arg });
});
// 准备工作流数据,填充未存库数据
Object.assign(arg,
this.getData()
);
Object.assign(arg,
copyData
);
// 准备提交参数
if(this.viewparams){
Object.assign(
arg,{viewparams:this.viewparams}
);
Object.assign(
responseData,this.viewparams
);
}
Object.assign(arg,{viewparams:responseData});
// 强制补充srfwfmemo
if(this.srfwfmemo){
Object.assign(arg,{srfwfmemo:this.srfwfmemo});
...
...
@CONTROL/表格/CONTROL-BASE.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -110,6 +110,9 @@ import { FormItemModel } from '@/model/form-detail';
</#assign>
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../../@MACRO/LANG_FUN.ftl
</#ibizinclude>
/**
...
...
@@ -137,7 +140,7 @@ import { FormItemModel } from '@/model/form-detail';
public ActionModel:any ={
<#if ctrl.getPSUIActions()??>
<#list ctrl.getPSUIActions() as item>
${item.getUIActionTag()}: { name: '${item.getUIActionTag()}',disabled: false, visabled: true,noprivdisplaymode:<#if item.getNoPrivDisplayMode(view)??>${item.getNoPrivDisplayMode(view)}</#if>,dataaccaction: '<#if item.getDataAccessAction()??>${item.getDataAccessAction()}</#if>', target: '${item.getActionTarget()}'}<#if item_has_next>,</#if>
${item.getUIActionTag()}: { name: '${item.getUIActionTag()}',disabled: false, visabled: true,noprivdisplaymode:<#if item.getNoPrivDisplayMode(view)??>${item.getNoPrivDisplayMode(view)}</#if>,dataaccaction: '<#if item.getDataAccessAction()??>${item.getDataAccessAction()}</#if>',
action
target: '${item.getActionTarget()}'}<#if item_has_next>,</#if>
</#list>
</#if>
};
...
...
@@ -418,7 +421,7 @@ import { FormItemModel } from '@/model/form-detail';
* 选中行数据
*
* @type {any[]}
* @memberof
Main
* @memberof
${srfclassname('${ctrl.codeName}')}Base
*/
public selections: any[] = [];
...
...
@@ -426,10 +429,18 @@ import { FormItemModel } from '@/model/form-detail';
* 拦截行选中
*
* @type {boolean}
* @memberof
Main
* @memberof
${srfclassname('${ctrl.codeName}')}Base
*/
public stopRowClick: boolean = false;
/**
* 当前编辑行数据
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public curEditRowData:any;
<#if ctrl.getAggMode() == "ALL">
/**
* 表格聚合行为
...
...
@@ -507,7 +518,7 @@ import { FormItemModel } from '@/model/form-detail';
label: '${column.getCaption()}',
langtag: '<#if langbase??>${langbase}.columns.${column.getName()?lower_case}</#if>',
show: <#if column.isHideDefault()>false<#else>true</#if>,
u
til
: '${column.getWidthUnit()}',
u
nit
: '${column.getWidthUnit()}',
<#-- BEGIN:是否支持行编辑 -->
<#if ctrl.isEnableRowEdit() && column.isEnableRowEdit()>
isEnableRowEdit: true,
...
...
@@ -560,6 +571,30 @@ import { FormItemModel } from '@/model/form-detail';
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public deRules:any = {
<#if ctrl.getPSDEGridEditItemVRs?? && ctrl.getPSDEGridEditItemVRs()??>
<#list ctrl.getPSDEGridEditItemVRs() as fideValueRule>
<#if fideValueRule.getCheckMode?? && fideValueRule.getCheckMode()?? && fideValueRule.getCheckMode() != 2 && fideValueRule.getPSDEFValueRule?? && fideValueRule.getPSDEFValueRule()??>
<#assign deRule = fideValueRule.getPSDEFValueRule()/>
<#if fideValueRule.getPSDEGridEditItemName?? && fideValueRule.getPSDEGridEditItemName()??>
${fideValueRule.getPSDEGridEditItemName()}:[
<#if deRule.getPSDEFVRGroupCondition?? && deRule.getPSDEFVRGroupCondition()?? && deRule.getPSDEFVRGroupCondition().getPSDEFVRConditions?? && deRule.getPSDEFVRGroupCondition().getPSDEFVRConditions()??>
<#list deRule.getPSDEFVRGroupCondition().getPSDEFVRConditions() as condItem>
<@getDeRule condItem />
</#list>
</#if>],
</#if>
</#if>
</#list>
</#if>
};
/**
* 值规则集合
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public rules: any = {
<#list ctrl.getPSDEGridEditItems() as edititem>
${edititem.getName()}: [
...
...
@@ -578,6 +613,12 @@ import { FormItemModel } from '@/model/form-detail';
</#if>
</#if>
</#if>
<#if fideValueRule.getPSDEFValueRule()??>
<#assign valueRule = fideValueRule.getPSDEFValueRule()/>
<#if fideValueRule.getPSDEGridEditItemName?? && fideValueRule.getPSDEGridEditItemName()??>
{validator:(rule:any, value:any, callback:any)=>{return this.verifyDeRules("${fideValueRule.getPSDEGridEditItemName()}",this.deRules,"AND",value).isPast},message: "<#if valueRule.getRuleInfo()??>${valueRule.getRuleInfo()}</#if>", trigger: 'blur' },
</#if>
</#if>
</#if>
</#list>
</#if>
...
...
@@ -1469,7 +1510,7 @@ import { FormItemModel } from '@/model/form-detail';
</#list>
</#if>
} else {
sums[index] = '
N/A
';
sums[index] = '';
}
});
return sums;
...
...
@@ -1485,7 +1526,7 @@ import { FormItemModel } from '@/model/form-detail';
return;
}else{
<#if ctrl.getPSDEGridColumns()??>
sums[index] = '
N/A
';
sums[index] = '';
<#list ctrl.getPSDEGridColumns() as singleColumn>
<#if singleColumn.getAggMode() != "NONE">
if(Object.is(column.property,'${singleColumn.getCodeName()?lower_case}')){
...
...
@@ -1611,7 +1652,7 @@ import { FormItemModel } from '@/model/form-detail';
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
get adaptiveState(): boolean {
return !this.allColumns.find((column: any) => column.show && Object.is(column.u
til
, 'STAR'));
return !this.allColumns.find((column: any) => column.show && Object.is(column.u
nit
, 'STAR'));
}
/**
...
...
@@ -1759,6 +1800,7 @@ import { FormItemModel } from '@/model/form-detail';
row.hasUpdated = true;
}
}
this.curEditRowData = row;
this.validate(property,row,rowIndex);
<#if ctrl.getPSDEGridEditItems()??>
<#list ctrl.getPSDEGridEditItems() as editItem>
...
...
@@ -1928,6 +1970,70 @@ import { FormItemModel } from '@/model/form-detail';
</#if>
</#list>
}
/**
* 校验属性值规则
*
* @public
* @param {{ name: string }} { name }
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public verifyDeRules(name:string,rule:any = this.deRules,op:string = "AND",value:any) :{isPast:boolean}{
let falg:any = {};
if(!rule || !rule[name]){
return falg;
}
let opValue = op == 'AND'? true :false;
let startOp = (val:boolean)=>{
if(falg.isPast){
if(opValue){
falg.isPast = falg && val;
}else{
falg.isPast = falg || val;
}
}else{
falg.isPast = val;
}
}
rule[name].forEach((item:any) => {
// 常规规则
if(item.type == 'SIMPLE'){
startOp(!this.$verify.checkFieldSimpleRule(value,item.condOP,item.paramValue,item.ruleInfo,item.paramType,this.curEditRowData,item.isKeyCond));
}
// 数值范围
if(item.type == 'VALUERANGE2'){
startOp( !this.$verify.checkFieldValueRangeRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 正则式
if (item.type == "REGEX") {
startOp(!this.$verify.checkFieldRegExRule(value,item.regExCode,item.ruleInfo,item.isKeyCond));
}
// 长度
if (item.type == "STRINGLENGTH") {
startOp(!this.$verify.checkFieldStringLengthRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 系统值规则
if(item.type == "SYSVALUERULE") {
startOp(!this.$verify.checkFieldSysValueRule(value,item.sysRule.regExCode,item.ruleInfo,item.isKeyCond));
}
// 分组
if(item.type == 'GROUP'){
falg = this.verifyDeRules('group',item,"AND",value)
if(item.isNotMode){
falg.isPast = !falg.isPast;
}
}
});
if(!falg.hasOwnProperty("isPast")){
falg.isPast = true;
}
if(!value){
falg.isPast = true;
}
return falg;
}
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude>
...
...
@CONTROL/表格/SERVICE.ts.ftl
浏览文件 @
5113ae67
...
...
@@ -406,7 +406,7 @@ import ${srfclassname('${aggAppDataEntity.getCodeName()}')}Service from '@/servi
requestData[item.prop] = context[item.name];
}
}else{
if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0)) ){
if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0)
|| Object.is(data[item.name],"")
) ){
requestData[item.prop] = data[item.name];
}
}
...
...
@CONTROL/视图布局面板/实体工作流动态导航表格视图/VIEW.less.ftl
浏览文件 @
5113ae67
...
...
@@ -15,6 +15,7 @@
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
padding-left: 12px;
}
}
}
...
...
@@ -27,10 +28,6 @@
border-left: solid transparent;
}
.el-tree-node__label {
font-size: 15px;
font-family: "Microsoft YaHei";
}
.el-tree-node {
margin-top: 10px;
}
...
...
@@ -38,7 +35,16 @@
margin-top: 0px;
}
.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
background-color: #
f0f7ff
;
background-color: #
e4ecf5
;
border-color: #1890ff6e;
}
.custom-tree-node{
.tree-node-label{
font-size: 15px;
font-family: "Microsoft YaHei";
}
.tree-node-count{
margin-left: 4px;
}
}
}
\ No newline at end of file
@CONTROL/视图布局面板/实体工作流动态导航表格视图/VIEW.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -6,7 +6,12 @@
</#ibizinclude>
<split id="${view.getCodeName()?lower_case}" v-model="split" mode="horizontal">
<div slot='left'>
<el-tree ref="tree" :data="wfStepModel" node-key="userTaskId" :highlight-current="true" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
<el-tree ref="tree" :data="wfStepModel" node-key="userTaskId" :highlight-current="true" :props="defaultProps" @node-click="handleNodeClick">
<span class="custom-tree-node" slot-scope="{ node, data }">
<span class="tree-node-label">{{data.userTaskName}}</span>
<span class="tree-node-count"><badge :count="data.cnt"></badge></span>
</span>
</el-tree>
</div>
<div slot="right">
<div class="content-container">
...
...
@CONTROL/视图布局面板/实体工作流动态编辑视图/VIEW.less.ftl
浏览文件 @
5113ae67
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
</#ibizinclude>
.${view.getViewType()?lower_case}{
>.view-card{
.ivu-card-extra{
top: 6px;
}
}
}
\ No newline at end of file
@CONTROL/门户部件/CONTROL-BASE.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -210,6 +210,7 @@ import { Environment } from '@/environments/environment';
<#if uiaction.getCounterId()??>counterId:"${uiaction.getCounterId()}",</#if>
noprivdisplaymode:<#if uiaction.getNoPrivDisplayMode(view)??>${uiaction.getNoPrivDisplayMode(view)}<#else>''</#if>,
dataaccaction:'<#if uiaction.getDataAccessAction()??>${uiaction.getDataAccessAction()}</#if>',
actiontarget:'<#if uiaction.getActionTarget()??>${uiaction.getActionTarget()}</#if>',
visabled:true,disabled:false
</#if>
</#if>
...
...
@EDITOR/@MACRO/PANEL/DEFAULT.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -10,6 +10,6 @@
type="text"
<#if item.getUnitName?? && item.getUnitName()??>unit="${item.getUnitName()}"</#if>
<#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if>
@change="($event)=>{panelEditItemChange(data,
${editor.getName()?lower_case}
, $event)}">
@change="($event)=>{panelEditItemChange(data,
'${editor.getName()?lower_case}'
, $event)}">
</input-box>
</#if>
\ No newline at end of file
@EDITOR/下拉列表框(cron表达式)/EDITOR.less.ftl
0 → 100644
浏览文件 @
5113ae67
@EDITOR/下拉列表框(cron表达式)/EDITOR.vue.ftl
0 → 100644
浏览文件 @
5113ae67
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<cron-editor
:disabled="detailsModel.${editor.name}.disabled"
placeholder=<#if item.getPlaceHolder()??>'${item.getPlaceHolder()}'<#else>'请选择...'</#if> />
\ No newline at end of file
@EDITOR/下拉列表框(cron表达式)/GRIDEIDTOR.vue.ftl
0 → 100644
浏览文件 @
5113ae67
<dropdown-list-mpicker
v-model="row[column.property]"
:itemParam="<#if item.getEditorParam('ITEMPARAM','') != ''>${item.getEditorParam('ITEMPARAM','')}<#else>{}</#if>"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
<#if item.getPSCodeList()??>
<#assign codelist=editor.getPSCodeList()>
tag='${codelist.codeName}'
codelistType='${codelist.getCodeListType()}'
<#if codelist.valueSeparator?has_content>valueSeparator="${codelist.valueSeparator}"</#if>
</#if>
placeholder=<#if item.getPlaceHolder()??>'${item.getPlaceHolder()}'<#else>'请选择...'</#if>
@change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"
style="${item.getEditorCssStyle()}">
</dropdown-list-mpicker>
\ No newline at end of file
@EDITOR/下拉列表框(cron表达式)/PANELEDITOR.vue.ftl
0 → 100644
浏览文件 @
5113ae67
<#ibizinclude>../@MACRO/PANEL/DEFAULT.vue.ftl</#ibizinclude>
\ No newline at end of file
@EDITOR/下拉列表框(cron表达式)/template.properties
0 → 100644
浏览文件 @
5113ae67
EDITORTYPE
=
MDROPDOWNLIST#CRONEDITOR
\ No newline at end of file
@EDITOR/多行输入框 (工作流审批意见控件时光轴样式)/EDITOR.less.ftl
0 → 100644
浏览文件 @
5113ae67
@EDITOR/多行输入框 (工作流审批意见控件时光轴样式)/EDITOR.vue.ftl
0 → 100644
浏览文件 @
5113ae67
<action-timeline :service="appEntityService" :context="JSON.parse(JSON.stringify(context))" :viewparams="JSON.parse(JSON.stringify(viewparams))"></action-timeline>
\ No newline at end of file
@EDITOR/多行输入框 (工作流审批意见控件时光轴样式)/GRIDEIDTOR.vue.ftl
0 → 100644
浏览文件 @
5113ae67
<div class="ivu-input-wrapper ivu-input-wrapper-default ivu-input-type">
<textarea class="ivu-input" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" v-model="row[column.property]" style="${item.getEditorCssStyle()}" <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if> @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></textarea>
</div>
\ No newline at end of file
@EDITOR/多行输入框 (工作流审批意见控件时光轴样式)/PANELEDITOR.vue.ftl
0 → 100644
浏览文件 @
5113ae67
<#ibizinclude>../@MACRO/PANEL/DEFAULT.vue.ftl</#ibizinclude>
\ No newline at end of file
@EDITOR/多行输入框 (工作流审批意见控件时光轴样式)/template.properties
0 → 100644
浏览文件 @
5113ae67
EDITORTYPE
=
TEXTAREA#WFAPPROVALTIMELINE
\ No newline at end of file
@EDITOR/数据选择(请求数据)/PANELEDITOR.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -45,7 +45,7 @@
:value="data.${editor.name}"
editortype="dropdown"
style="${editor.getEditorCssStyle()}"
@formitemvaluechange="
onFormItemValueChange
">
@formitemvaluechange="
($event)=>{onPanelItemValueChange(data,$event)}
">
<@getItemRender editor />
</app-upicker>
</#if>
\ No newline at end of file
@LOGIC/@VIEWLOGIC/编辑/LOGIC.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -52,7 +52,7 @@
</#if>
<#-- END:导航参数 -->
<#-- BEGIN:准备参数 -->
<#if dataview.isRedirectView()>
<#if dataview.isRedirectView()
&& dataview.getViewType() != "DEREDIRECTVIEW"
>
const deResParameters: any[] = [];
const parameters: any[] = [];
<#else>
...
...
@@ -150,7 +150,8 @@
<#-- 应用全局流程工作重定向视图and实体全局流程数据重定向视图end -->
<#else>
<#-- 实体数据重定向视图start -->
// todo 实体数据重定向视图
const routePath = this.$viewTool.buildUpRoutePath(this.$route, tempContext, deResParameters, parameters, args, data);
this.$router.push(routePath);
<#-- 实体数据重定向视图end -->
</#if>
<#elseif dataview.getOpenMode() == 'INDEXVIEWTAB' || dataview.getOpenMode() == ''>
...
...
@VIEW/@MACRO/VIEW_CONTENT-BASE.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -104,6 +104,9 @@
for(let key in this.context){
delete this.context[key];
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
if (!this.viewDefaultUsage && this.viewdata && !Object.is(this.viewdata, '')) {
Object.assign(this.context, JSON.parse(this.viewdata));
if(this.context && this.context.srfparentdename){
...
...
@@ -112,9 +115,6 @@
if(this.context && this.context.srfparentkey){
Object.assign(this.viewparams,{srfparentkey:this.context.srfparentkey});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
this.handleCustomViewData();
<#if self_viewparam??>
${self_viewparam}
...
...
@@ -138,9 +138,6 @@
Object.assign(this.context,{'${appde.getCodeName()?lower_case}':inputvalue});
}
</#if>
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
<#if view.isPSDEView()>
//初始化视图唯一标识
Object.assign(this.context,{srfsessionid:this.$util.createUUID()});
...
...
@VIEW/实体工作流动态导航表格视图/VIEW-BASE.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -61,10 +61,19 @@
if (response && response.status === 200) {
this.wfStepModel = response.data;
if(this.wfStepModel && this.wfStepModel.length > 0){
this.curSelectedNode = this.wfStepModel[0];
if(!this.curSelectedNode){
this.curSelectedNode = this.wfStepModel[0];
}else{
let tempCopySelectedNode:any = Util.deepCopy(this.curSelectedNode);
this.curSelectedNode = this.wfStepModel.find((item:any) =>{
return item.userTaskId === tempCopySelectedNode.userTaskId && item.processDefinitionKey === tempCopySelectedNode.processDefinitionKey;
})
}
}
if(this.curSelectedNode){
Object.assign(this.viewparams,{'userTaskId':this.curSelectedNode['userTaskId'],'processDefinitionKey':this.curSelectedNode['processDefinitionKey']});
this.setTreeNodeHighLight(this.curSelectedNode);
}
Object.assign(this.viewparams,{'userTaskId':this.curSelectedNode['userTaskId'],'processDefinitionKey':this.curSelectedNode['processDefinitionKey']});
this.setTreeNodeHighLight(this.curSelectedNode);
resolve(response.data);
}
}).catch((response: any) => {
...
...
@VIEW/实体数据多项选择视图/VIEW-BASE.vue.ftl
浏览文件 @
5113ae67
...
...
@@ -5,6 +5,7 @@
<#assign watch_viewparam_block>
if(this.viewparams.selectedData){
this.selectedData = JSON.stringify(this.viewparams.selectedData);
this.viewSelections = this.viewparams.selectedData;
}
</#assign>
...
...
@VIEW/实体数据重定向视图/VIEW-BASE.vue.ftl
浏览文件 @
5113ae67
<#assign import_block>
import UIService from '@/uiservice/ui-service';
import qs from 'qs';
import { ViewTool } from '@/utils';
</#assign>
<#assign created_block>
this.viewInit();
...
...
@@ -11,13 +12,12 @@ import UIService from '@/uiservice/ui-service';
* @memberof ${srfclassname('${view.name}')}Base
*/
public async viewInit(){
const {srfkey:srfkey,srfappde:srfappde} = this.viewparams;
const uiService:UIService = new UIService();
const targetService:any = await uiService.getService(srfappde.toLowerCase());
targetService.getRDAppView(srfkey,${view.isEnableWorkflow()?c}).then((res:any) =>{
let srfkey:any = this.context.${appde.getCodeName()?lower_case};
this.appUIService.getRDAppView(srfkey,false).then((res:any) =>{
if(res && res.viewname && res.srfappde){
const path:string =<#noparse>`/${res.srfappde}/${srfkey}/${res.viewname}`</#noparse>;
this.$router.push({path:path});
let indexPath:string = ViewTool.getIndexRoutePath(this.$route);
<#noparse>const path:string =`${indexPath}/${res.srfappde}/${srfkey}/${res.viewname}?${qs.stringify(this.viewparams, { delimiter: ';' })}`;</#noparse>
this.$router.replace({path:path});
}else{
console.error("未查找到重定向视图")
}
...
...
@VIEW/应用首页视图/ROUTER.ts.ftl
浏览文件 @
5113ae67
...
...
@@ -14,6 +14,7 @@ Vue.use(Router);
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.caption<#else>app.views.${subView.getCodeName()?lower_case}.caption</#if>',
info:'',
viewType: 'REDIRECTVIEW',
<#if subView.getPSSysImage()??>
imgPath: '${subView.getPSSysImage().getImagePath()}',
iconCls: '${subView.getPSSysImage().getCssClass()}',
...
...
@@ -33,6 +34,7 @@ Vue.use(Router);
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.caption<#else>app.views.${subView.getCodeName()?lower_case}.caption</#if>',
info:'',
viewType: 'REDIRECTVIEW',
<#if subView.getPSSysImage()??>
imgPath: '${subView.getPSSysImage().getImagePath()}',
iconCls: '${subView.getPSSysImage().getCssClass()}',
...
...
@@ -52,6 +54,7 @@ Vue.use(Router);
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.caption<#else>app.views.${subView.getCodeName()?lower_case}.caption</#if>',
info:'',
viewType: 'REDIRECTVIEW',
<#if subView.getPSSysImage()??>
imgPath: '${subView.getPSSysImage().getImagePath()}',
iconCls: '${subView.getPSSysImage().getCssClass()}',
...
...
@@ -64,6 +67,28 @@ Vue.use(Router);
component: () => import('@pages/${srffilepath2(subView.getPSAppModule().getCodeName())}/${srffilepath2(subView.getCodeName())}/${srffilepath2(subView.getCodeName())}.vue'),
},
<#-- 实体全局重定向视图end -->
<#elseif subView.getViewType() == "DEREDIRECTVIEW">
<#-- 实体数据重定向视图start -->
{
path: '<#if !isIncludeIndex>/</#if>${srfpluralize(subView.getPSAppDataEntity().codeName)?lower_case}/:${subView.getPSAppDataEntity().getCodeName()?lower_case}?/${subView.getPSDEViewCodeName()?lower_case}/:${subView.getPSDEViewCodeName()?lower_case}?',
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.caption<#else>app.views.${subView.getCodeName()?lower_case}.caption</#if>',
info:'',
viewType: 'REDIRECTVIEW',
<#if subView.getPSSysImage()??>
imgPath: '${subView.getPSSysImage().getImagePath()}',
iconCls: '${subView.getPSSysImage().getCssClass()}',
</#if>
parameters: [
{ pathName: '${view.getCodeName()?lower_case}', parameterName: '${view.getCodeName()?lower_case}' },
{ pathName: '${srfpluralize(subView.getPSAppDataEntity().codeName)?lower_case}', parameterName: '${subView.getPSAppDataEntity().getCodeName()?lower_case}' },
{ pathName: '${subView.getPSDEViewCodeName()?lower_case}', parameterName: '${subView.getPSDEViewCodeName()?lower_case}' },
],
requireAuth: <#if subView.getAccUserMode?? && subView.getAccUserMode()?? && (subView.getAccUserMode() == 1 || subView.getAccUserMode() == 3)>false<#else>true</#if>,
},
component: () => import('@pages/${srffilepath2(subView.getPSAppModule().getCodeName())}/${srffilepath2(subView.getCodeName())}/${srffilepath2(subView.getCodeName())}.vue'),
},
<#-- 实体数据重定向视图end -->
<#else>
<#-- 其他重定向视图start -->
{
...
...
@@ -71,6 +96,7 @@ Vue.use(Router);
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.caption<#else>app.views.${subView.getCodeName()?lower_case}.caption</#if>',
info:'',
viewType: 'REDIRECTVIEW',
<#if subView.getPSSysImage()??>
imgPath: '${subView.getPSSysImage().getImagePath()}',
iconCls: '${subView.getPSSysImage().getCssClass()}',
...
...
@@ -336,5 +362,10 @@ const router = new Router({
},
],
});
// 解决路由跳转路由重复时报错
const originalPush = Router.prototype.push
Router.prototype.push = function push(location: any) {
let result: any = originalPush.call(this, location);
return result.catch((err: any) => err);
}
export default router;
APP/src/uiservice/%DE_PKGPATH%/%DE_PKGPATH%-ui-service-base.ts.ftl
浏览文件 @
5113ae67
...
...
@@ -246,15 +246,14 @@ ${P.getLogicCode(appdeUIAction, "LOGIC.vue").code}
</#if>
}
//多表单,todo
const isEnableMultiForm:boolean = false;
const multiFormDEField:string|null =null;
const multiFormDEField:string|null =<#if de.getFormTypePSDEField()??>"${de.getFormTypePSDEField().getCodeName()?lower_case}"<#else>null</#if>;
if (
isEnableMultiForm &&
multiFormDEField) {
if (multiFormDEField) {
const objFormValue:string = curData[multiFormDEField];
if(!Environment.isAppMode){
return 'MOBEDITVIEW'+objFormValue;
return 'MOBEDITVIEW
:
'+objFormValue;
}
return 'EDITVIEW'+objFormValue;
return 'EDITVIEW
:
'+objFormValue;
}
if(!Environment.isAppMode){
if(this.getDEMainStateTag(curData)){
...
...
CHANGELOG.md
浏览文件 @
5113ae67
## v7.0.0-alpha.18 [2020-8-23]
### Bug修复
修复后续界面行为异常问题
修复表格合计行去掉N/A字样
修复树表跳转页面逻辑
修复嵌入表格保存提示信息重复问题
修复表格表格值清空保存问题
### 功能新增及优化
#### 模板
新增向导面板支持状态属性
新增应用全屏功能和应用锁屏功能
新增搜索表单新建默认值逻辑
新增实体表格值规则
新增动态工作流导航视图计数器
新增工作流审批意见控件时光轴样式组件和cron表达式组件
新增支持日历部件项布局面板
优化视图标题问题
优化表单属性值规则,无值的时候不校验
优化表单按钮、表单分组界面行为、表格操作列、工具栏、操作列权限控制
优化实体数据多项选择视图选中效果
优化动态代码表本地缓存逻辑
优化合入应用级上下文时机
优化实体数据重定向视图逻辑
优化表单开始流程和提交流程逻辑
#### 基础文件
修复表格滑动条表头与内容不齐
修复数据选择(嵌入视图)抛值异常问题
优化权限服务基类菜单权限和统一资源权限
优化动态工作流导航视图引擎
优化表单按钮、表单分组界面行为、表格操作列、工具栏、操作列权限控制
优化表单项增加padding
新增应用全屏组件和应用锁屏组件
新增工作流审批意见控件时光轴样式组件和cron表达式组件
## v7.0.0-alpha.17 [2020-8-9]
### Bug修复
...
...
编辑
预览
Markdown
格式
0%
请重试
or
添加新附件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录