提交 f9cc17d5 编写于 作者: tony001's avatar tony001

Merge branch '2020.08.09-667' of...

Merge branch '2020.08.09-667' of http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7 into 2020.08.09-667
......@@ -8,6 +8,7 @@
<#if view.getViewType() == "DEGRIDVIEW" || view.getViewType() == "DEGRIDVIEW9">
:isOpenEdit="${view.isRowEditDefault()?c}"
:gridRowActiveMode="gridRowActiveMode"
:isformDruipart="isformDruipart"
@save="onSave"
</#if>
updateAction="<#if ctrl.getUpdatePSControlAction()?? && ctrl.getUpdatePSControlAction().getPSAppDEMethod()??>${ctrl.getUpdatePSControlAction().getPSAppDEMethod().getCodeName()}</#if>"
......
......@@ -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>
......
......@@ -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) => {
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) => {
if(isWorkflow){
resolve(response);
}else{
this.handleResponse(action, response);
resolve(response);
}
}).catch(response => {
reject(response);
});
......
......@@ -6,7 +6,7 @@
<div class='tabviewpanel<#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>' style="height:100%;">
<tabs :value="tabValue" :animated="false" class='tabexppanel' name='${ctrl.getCodeName()?lower_case}' @on-click="tabPanelClick">
<#list ctrl.getPSControls() as tabviewpanel>
<tab-pane :index="${tabviewpanel_index}" name='${tabviewpanel.name}' tab='${ctrl.getCodeName()?lower_case}' class='<#if tabviewpanel.getPSSysCss?? && tabviewpanel.getPSSysCss()??>${tabviewpanel.getPSSysCss().getCssName()}</#if>'
<tab-pane :index="${tabviewpanel_index}" name='${tabviewpanel.name}' tab='${ctrl.getCodeName()?lower_case}' class='<#if tabviewpanel.getPSSysCss?? && tabviewpanel.getPSSysCss()??>${tabviewpanel.getPSSysCss().getCssName()}</#if>' v-if="computedAuthorizedPanel('${tabviewpanel.name}')"
:label="(h) =>{
return h('div', [
<#if tabviewpanel.getPSSysImage()??>
......@@ -43,9 +43,21 @@
</div>
</#if>
</template>
<#assign import_block>
import ${srfclassname('${appde.getCodeName()}')}AuthService from '@/authservice/${srffilepath2(appde.getCodeName())}/${srffilepath2(appde.getCodeName())}-auth-service';
import { Environment } from '@/environments/environment';
</#assign>
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl
</#ibizinclude>
/**
* 实体权限服务对象
*
* @type {${appde.getCodeName()}AuthService}
* @memberof TabExpViewtabexppanelBase
*/
public appAuthService: ${appde.getCodeName()}AuthService = new ${appde.getCodeName()}AuthService();
/**
* 是否初始化
*
......@@ -107,6 +119,15 @@
*/
public action:any = '';
/**
* 分页面板统一资源存储对象
*
* @public
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public authResourceObject:any = {<#list ctrl.getPSControls() as tabviewpanel>'${tabviewpanel.name}':<#if tabviewpanel.getEmbeddedPSAppDEView()?? && tabviewpanel.getEmbeddedPSAppDEView().getAccessKey()??>'${tabviewpanel.getEmbeddedPSAppDEView().getAccessKey()}'<#else>null</#if><#if tabviewpanel_has_next>,</#if></#list>};
/**
* 被激活的分页面板
*
......@@ -115,6 +136,42 @@
*/
public activiedTabViewPanel: string = '<#list ctrl.getPSControls() as tabviewpanel><#if tabviewpanel_index==0>${tabviewpanel.name}</#if></#list>';
/**
* 计算激活分页面板
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public computedActiviedPanel(){
if(Environment.enablePermissionValid){
if(Object.keys(this.authResourceObject).length >0){
let targetResult:Array<any> = [];
Object.keys(this.authResourceObject).forEach((item:any) =>{
if(this.computedAuthorizedPanel(item))
targetResult.push(item);
})
if(targetResult.length >0){
this.activiedTabViewPanel = targetResult[0];
this.tabPanelClick(targetResult[0]);
}
}
}
}
/**
* 计算分页面板是否显示
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public computedAuthorizedPanel(name:string){
if(!Environment.enablePermissionValid)
return true;
if(!this.authResourceObject[name])
return true;
return this.appAuthService.getResourcePermission(this.authResourceObject[name]);
}
/**
* 分页视图面板数据变更
*
......@@ -147,6 +204,7 @@
Object.assign(this.context,{srfparentdename:'${appDataEntity.getCodeName()}',srfparentkey:this.context.${appDataEntity.getCodeName()?lower_case}})
}
</#if>
this.computedActiviedPanel();
if (this.viewState) {
this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
if (!Object.is(tag, this.name)) {
......
......@@ -15,7 +15,7 @@ ${ctrl.render.code}
<#list ctrl.getPSDEEditForms() as form>
<#assign handler = form.getPSAjaxControlHandler() />
<view_${form.getName()}
v-if="activeForm == '${form.getName()}'"
v-show="activeForm == '${form.getName()}'"
:key="'${form.name}'"
:viewState='wizardState'
:context="context"
......@@ -70,6 +70,22 @@ ${ctrl.render.code}
*/
@Prop({ default: true }) public showBusyIndicator?: boolean;
/**
* 状态属性
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public stateField: string = '<#if ctrl.getStatePSAppDEField?? && ctrl.getStatePSAppDEField()??>${ctrl.getStatePSAppDEField().getCodeName()?lower_case}</#if>';
/**
* 步骤标识集合
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public stepTags: any = {};
/**
* 获取多项数据
*
......@@ -159,7 +175,7 @@ ${ctrl.render.code}
*/
public created(): void {
this.regFormActions();
if(this.activeForm) {
if(this.activeForm && !this.stateField) {
this.historyForms.push(this.activeForm);
}
if (this.viewState) {
......@@ -195,7 +211,7 @@ ${ctrl.render.code}
public regFormActions() {
<#if ctrl.getPSDEWizard()?? && ctrl.getPSDEWizard().getPSDEWizardForms()??>
<#list ctrl.getPSDEWizard().getPSDEWizardForms() as form>
this.regFormAction('${ctrl.name}_form_${form.getFormTag()}', [<#if form.getStepActions()??><#list form.getStepActions() as action><#if action_index gt 0>,</#if>'${action}'</#list></#if>]);
this.regFormAction('${ctrl.name}_form_${form.getFormTag()}',{<#if form.getLoadPSDEAction?? && form.getLoadPSDEAction()??>loadAction:"${form.getLoadPSDEAction().getCodeName()}",</#if><#if form.getGoBackPSDEAction?? && form.getGoBackPSDEAction()??>preAction:'${form.getGoBackPSDEAction().getCodeName()}',</#if><#if form.getSavePSDEAction?? && form.getSavePSDEAction()??>saveAction:'${form.getSavePSDEAction().getCodeName()}',</#if><#if form.getStepActions()??>actions:[<#list form.getStepActions() as action><#if action_index gt 0>,</#if>'${action}'</#list>]</#if>},<#if form.getPSDEWizardStep()?? && form.getPSDEWizardStep().getStepTag()??>'${form.getPSDEWizardStep().getStepTag()}'<#else>null</#if>);
</#list>
</#if>
}
......@@ -205,8 +221,9 @@ ${ctrl.render.code}
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public regFormAction(name: string, actions: Array<string>) {
this.stepActions[name] = actions;
public regFormAction(name: string, actionParams: any,stepTag:any) {
this.stepActions[name] = actionParams;
this.stepTags[name] = stepTag;
this.wizardForms.push(name);
}
......@@ -227,7 +244,7 @@ ${ctrl.render.code}
if(response.data.${ctrl.getPSAppDataEntity().getCodeName()?lower_case}){
Object.assign(this.context,{${ctrl.getPSAppDataEntity().getCodeName()?lower_case}:response.data.${ctrl.getPSAppDataEntity().getCodeName()?lower_case}})
}
this.formLoad();
this.formLoad(this.formParam);
}
}).catch((response: any) => {
if (response && response.status === 401) {
......@@ -243,9 +260,28 @@ ${ctrl.render.code}
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public formLoad() {
public formLoad(data:any) {
if(this.stateField) this.computedActiveForm(data);
if(this.activeForm) {
this.wizardState.next({ tag: this.activeForm, action: 'load', data: this.formParam });
this.wizardState.next({ tag: this.activeForm, action:'panelaction',data: {action:this.stepActions[this.activeForm].loadAction,emitAction:'load',data:this.formParam} });
}
}
/**
* 根据状态获取当前激活表单
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public computedActiveForm(data:any){
if(data && data[this.stateField]){
if(Object.keys(this.stepTags).length >0){
Object.keys(this.stepTags).forEach((name:string) =>{
if(this.stepTags[name] === data[this.stateField]){
this.activeForm = name;
return;
}
})
}
}
}
......@@ -300,14 +336,26 @@ ${ctrl.render.code}
Object.assign(this.formParam, args);
if(Object.is(this.curState, 'NEXT')) {
this.historyForms.push(name);
if(!this.stateField){
if (this.getNextForm()) {
this.activeForm = this.getNextForm();
setTimeout(() => {
this.formLoad();
this.formLoad(this.formParam);
}, 1);
} else {
this.doFinish();
}
}else{
setTimeout(() => {
this.formLoad(this.formParam);
}, 1);
}
}else if(Object.is(this.curState, 'PREV')) {
if(this.stateField){
setTimeout(() => {
this.formLoad(this.formParam);
}, 1);
}
}else if(Object.is(this.curState, 'FINISH')) {
this.doFinish();
}
......@@ -335,15 +383,33 @@ ${ctrl.render.code}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public onClickPrev() {
if(!this.stateField){
const length = this.historyForms.length;
if(length > 1) {
this.curState = 'PREV';
this.activeForm = this.historyForms[length - 1];
setTimeout(() => {
this.formLoad();
this.formLoad(this.formParam);
}, 1);
this.historyForms.splice(length - 1, 1);
}
}else{
if(this.activeForm) {
if(this.$refs && this.$refs[this.activeForm]){
let form: any = this.$refs[this.activeForm];
if(form.formValidateStatus()) {
this.curState = 'PREV';
if(!this.stepActions[this.activeForm].preAction){
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc:this.$t('app.wizardPanel.preactionmessage') as string });
return;
}
this.wizardState.next({ tag: this.activeForm, action:'panelaction',data: {action:this.stepActions[this.activeForm].preAction,emitAction:'save',data:this.formParam} });
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: (this.$t('app.commonWords.rulesException') as string) });
}
}
}
}
}
/**
......@@ -357,7 +423,7 @@ ${ctrl.render.code}
let form: any = this.$refs[this.activeForm];
if(form.formValidateStatus()) {
this.curState = 'NEXT';
this.wizardState.next({ tag: this.activeForm, action: 'save', data: this.formParam });
this.wizardState.next({ tag: this.activeForm, action:'panelaction',data: {action:this.stepActions[this.activeForm].saveAction,emitAction:'save',data:this.formParam} });
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: (this.$t('app.commonWords.rulesException') as string) });
}
......@@ -376,7 +442,7 @@ ${ctrl.render.code}
let form: any = this.$refs[this.activeForm];
if(form.formValidateStatus()) {
this.curState = 'FINISH';
this.wizardState.next({ tag: this.activeForm, action: 'save', data: this.formParam });
this.wizardState.next({ tag: this.activeForm, action:'panelaction',data: {action:this.stepActions[this.activeForm].saveAction,emitAction:'save',data:this.formParam} });
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: (this.$t('app.commonWords.rulesException') as string) });
}
......@@ -391,7 +457,7 @@ ${ctrl.render.code}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public isDisabled(type: string) {
const actions: Array<string> = this.stepActions[this.activeForm]
const actions: Array<string> = this.stepActions[this.activeForm].actions;
if(actions && actions.indexOf(type) < 0) {
return true;
}
......
......@@ -239,11 +239,12 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
*
* @public
* @param {*} [data={}]
* @param {string} [action]
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public onFormLoad(data: any = {}): void {
public onFormLoad(data: any = {},action:string): void {
this.setFormEnableCond(data);
this.fillForm(data);
this.fillForm(data,action);
<#if ctrl.getControlType() == 'FORM'>
this.oldData = {};
Object.assign(this.oldData, JSON.parse(JSON.stringify(this.data)));
......@@ -256,15 +257,19 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
* 值填充
*
* @param {*} [_datas={}]
* @param {string} [action]
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public fillForm(_datas: any = {}): void {
public fillForm(_datas: any = {},action:string): void {
this.ignorefieldvaluechange = true;
Object.keys(_datas).forEach((name: string) => {
if (this.data.hasOwnProperty(name)) {
this.data[name] = _datas[name];
}
});
if(Object.is(action,'loadDraft')){
this.createDefault();
}
this.$nextTick(function () {
this.ignorefieldvaluechange = false;
})
......@@ -287,6 +292,44 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
});
}
/**
* 新建默认值
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public createDefault(){
<#list ctrl.getAllPSDEFormDetails() as formdetail><#t>
<#if formdetail.getCreateDV?? && formdetail.getCreateDV()??><#t>
<#if !(formdetail.getCreateDV() == '') || formdetail.getCreateDVT() == 'CURTIME'><#t>
if (this.data.hasOwnProperty('${formdetail.getCodeName()?lower_case}')) {
<#-- 网页请求 -->
<#if formdetail.getCreateDVT() == 'CONTEXT'>
this.data['${formdetail.getCodeName()?lower_case}'] = this.viewparams['${formdetail.getCreateDV()}'];
<#-- 用户全局对象 -->
<#elseif formdetail.getCreateDVT() == 'SESSION'>
this.data['${formdetail.getCodeName()?lower_case}'] = this.context['${formdetail.getCreateDV()}'];
<#-- 当前应用数据 -->
<#elseif formdetail.getCreateDVT() == 'APPDATA'>
this.data['${formdetail.getCodeName()?lower_case}'] = this.context['${formdetail.getCreateDV()}'];
<#-- 当前操作用户(名称) -->
<#elseif formdetail.getCreateDVT() == 'OPERATORNAME'>
this.data['${formdetail.getCodeName()?lower_case}'] = this.context['srfusername'];
<#-- 当前操作用户(编号) -->
<#elseif formdetail.getCreateDVT() == 'OPERATOR'>
this.data['${formdetail.getCodeName()?lower_case}'] = this.context['srfuserid'];
<#-- 当前时间 -->
<#elseif formdetail.getCreateDVT() == 'CURTIME'>
this.data['${formdetail.getCodeName()?lower_case}'] = this.$util.dateFormat(new Date());
<#else>
<#-- 默认值 -->
<#assign datatype=srfjavatype(formdetail.getStdDataType())>
this.data['${formdetail.getCodeName()?lower_case}'] = <#if datatype=='BigInteger' || datatype=='Integer' || datatype=='Double' || datatype=='Decimal' || datatype=='Float' || datatype=='BigDecimal'>${formdetail.getCreateDV()}<#else>'${formdetail.getCreateDV()}'</#if>;
</#if>
}
</#if>
</#if>
</#list>
}
/**
* 重置草稿表单状态
*
......@@ -618,7 +661,6 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
get.then((response: any) => {
if (response && response.status === 200) {
const data = response.data;
this.onFormLoad(data);
this.$emit('load', data);
this.$nextTick(() => {
this.formState.next({ type: 'load', data: data });
......@@ -662,7 +704,7 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
const data = response.data;
this.resetDraftFormStates();
this.onFormLoad(data);
this.onFormLoad(data,'loadDraft');
setTimeout(() => {
const form: any = this.$refs.form;
if (form) {
......
......@@ -33,8 +33,22 @@ ${ctrl.render.code}
placement="top">
<context-menu :contextMenuStyle="{width: '100%'}" :data="item" :renderContent="renderContextMenu">
<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>
......@@ -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'});
}
/**
* 搜索获取日程事件
*
......
......@@ -18,6 +18,7 @@
:load="loadTreeNode"
:tree-props="{ children: 'children', hasChildren: 'leaf' }"
:select-on-indeterminate="isSingleSelect"
:highlight-current-row="isSingleSelect"
@current-change="select"
>
<#if ctrl.getPSDETreeColumns()??>
......@@ -271,7 +272,7 @@
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getData(): any {
return null;
return this.selections.length > 0 ? this.selections[0] : null;
}
/**
......@@ -326,6 +327,31 @@
this.$emit('selectionchange', this.selections);
}
/**
* 打开编辑数据
*
* @returns
* @memberof TreeTableBase
*/
public opendata(args: any) {
if(this.selections.length === 0) {
return;
}
<#if ctrl.getPSDETreeNodes()??>
<#list ctrl.getPSDETreeNodes() as node>
if(Object.is(this.selections[0].id.split(';')[0], '${srfjavastring(node.getNodeType())}')) {
<#if node.getPSAppViewRefs()??>
<#list node.getPSAppViewRefs() as viewRefs>
<#if viewRefs.name == "EDITDATA">
this.${srfjavastring(node.getNodeType())}_opendata(args);
</#if>
</#list>
</#if>
}
</#list>
</#if>
}
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude>
......
......@@ -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;
}
});
......
......@@ -6,7 +6,7 @@
${item.render.code}
<#else>
<@badge item>
<i-button type="primary" @click="${item.getName()}_click($event)"<#if item.getPSSysCss?? && item.getPSSysCss()??> class="${item.getPSSysCss().getCssName()}"</#if>
<i-button type="primary" :disabled="detailsModel.${item.getName()}.disabled" @click="${item.getName()}_click($event)"<#if item.getPSSysCss?? && item.getPSSysCss()??> class="${item.getPSSysCss().getCssName()}"</#if>
style="<#if item.getHeight() gt 0>height: ${item.getHeight()?c}px;</#if><#if item.getWidth() gt 0>width: ${item.getWidth()?c}px;</#if>">
<#if item.getPSSysImage()??><#assign img=item.getPSSysImage()><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)><i class="${img.getCssClass()}" style="margin-right: 2px;"></i></#if></#if>
<#if item.isShowCaption()><span ><#if item.getCaptionItemName()?? && item.getCaptionItemName()?length gt 0>{{data.${item.getCaptionItemName()}}}<#else><#if langbase??>{{$t('${langbase}.details.${item.name}')}}<#else>${item.getCaption()}</#if></#if></span></#if>
......
......@@ -3,8 +3,8 @@
</#ibizinclude>
<#assign detail>caption: '${item.getCaption()}', detailType: '${item.getDetailType()}', name: '${item.getName()}', visible: <#if item.getPSDEFDGroupLogic('PANELVISIBLE')??>false<#else>true</#if>, isShowCaption: ${item.isShowCaption()?c}, form: this, isControlledContent: <#if item.getShowMoreMode?? && item.getShowMoreMode()?? && item.getShowMoreMode() == 1>true<#else>false</#if> </#assign>
<#if item.getDetailType() == 'BUTTON'>
new FormButtonModel({ ${detail}<#if item.getPSUIAction()??><#assign uiaction=item.getPSUIAction()>, uiaction: { type: '${uiaction.getUIActionType()}',
tag: '${uiaction.getUIActionTag()}'<#if (uiaction.getActionTarget()!="")>, actiontarget: '${uiaction.getActionTarget()}'</#if> }</#if> })
new FormButtonModel({ ${detail},disabled: false<#if item.getPSUIAction()??><#assign uiaction=item.getPSUIAction()>, uiaction: { type: '${uiaction.getUIActionType()}',
tag: '${uiaction.getUIActionTag()}'<#if (uiaction.getActionTarget()!="")>,actiontarget: '${uiaction.getActionTarget()}'</#if><#if uiaction.getNoPrivDisplayMode(view)??>,noprivdisplaymode:${uiaction.getNoPrivDisplayMode(view)}</#if><#if uiaction.getDataAccessAction()??>,dataaccaction:'${uiaction.getDataAccessAction()}'</#if>,visabled: true,disabled: false}</#if> })
<#elseif item.getDetailType() == 'DRUIPART'>
new FormDRUIPartModel({ ${detail} })
<#elseif item.getDetailType() == 'FORMITEM'>
......@@ -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'>
......
......@@ -383,6 +383,9 @@ import schema from 'async-validator';
if(!falg.hasOwnProperty("isPast")){
falg.isPast = true;
}
if(!this.data[name]){
falg.isPast = true;
}
return falg;
}
......@@ -727,6 +730,26 @@ import schema from 'async-validator';
this.data[name] = value;
}
/**
* 计算表单按钮权限状态
*
* @param {*} [data] 传入数据
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public computeButtonState(data:any){
let targetData:any = this.transformData(data);
if(this.detailsModel && Object.keys(this.detailsModel).length >0){
Object.keys(this.detailsModel).forEach((name:any) =>{
if(this.detailsModel[name] && this.detailsModel[name].uiaction && this.detailsModel[name].uiaction.dataaccaction && Object.is(this.detailsModel[name].detailType,"BUTTON")){
let tempUIAction:any = JSON.parse(JSON.stringify(this.detailsModel[name].uiaction));
ViewTool.calcActionItemAuthState(targetData,[tempUIAction],this.appUIService);
this.detailsModel[name].visible = tempUIAction.visabled;
this.detailsModel[name].disabled = tempUIAction.disabled;
}
})
}
}
<#list ctrl.getAllPSDEFormDetails() as formdetail>
<#if formdetail.getDetailType?? && formdetail.getDetailType() == 'BUTTON'>
<#if formdetail.getActionType?? && formdetail.getActionType()??>
......@@ -901,6 +924,9 @@ import schema from 'async-validator';
if (Object.is('refresh', action)) {
this.refresh(data);
}
if (Object.is('panelaction', action)) {
this.panelAction(data.action,data.emitAction,data);
}
});
}
this.dataChang
......@@ -1018,6 +1044,7 @@ import schema from 'async-validator';
const data = response.data;
this.onFormLoad(data,'load');
this.$emit('load', data);
this.computeButtonState(data);
this.$nextTick(() => {
this.formState.next({ type: 'load', data: data });
});
......@@ -1068,6 +1095,7 @@ import schema from 'async-validator';
</#list>
data.${appde.getCodeName()?lower_case} = null;
this.$emit('load', data);
this.computeButtonState(data);
this.$nextTick(() => {
this.formState.next({ type: 'load', data: data });
});
......@@ -1125,6 +1153,7 @@ import schema from 'async-validator';
const data = response.data;
this.onFormLoad(data,'autoSave');
this.$emit('save', data);
this.computeButtonState(data);
<#if ctrl.getControlType() == 'FORM'>
AppCenterService.notifyMessage({name:"${ctrl.getPSAppDataEntity().getCodeName()}",action:'appRefresh',data:data});
</#if>
......@@ -1211,6 +1240,7 @@ import schema from 'async-validator';
const data = response.data;
this.onFormLoad(data,'save');
this.$emit('save', data);
this.computeButtonState(data);
<#if ctrl.getControlType() == 'FORM'>
AppCenterService.notifyMessage({name:"${ctrl.getPSAppDataEntity().getCodeName()}",action:'appRefresh',data:data});
</#if>
......@@ -1298,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) => {
......@@ -1357,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);
......@@ -1374,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});
......@@ -1425,6 +1484,50 @@ import schema from 'async-validator';
}
</#if>
/**
* 面板行为
*
* @param {string} [action] 调用的实体行为
* @param {string} [emitAction] 抛出行为
* @param {*} [data={}] 传入数据
* @param {boolean} [showloading] 是否显示加载状态
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public panelAction(action:string,emitAction:string,data:any ={},showloading?:boolean):void{
if (!action || (action && Object.is(action, ''))) {
return;
}
const arg: any = { ...data };
const formdata = this.getValues();
Object.assign(arg, formdata);
Object.assign(arg,this.viewparams);
const post: Promise<any> = this.service.frontLogic(action,JSON.parse(JSON.stringify(this.context)),arg, showloading);
post.then((response: any) => {
if (!response.status || response.status !== 200) {
if (response.data) {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: response.data.message });
}
return;
}
const data = response.data;
this.onFormLoad(data,emitAction);
this.$emit(emitAction, data);
this.$nextTick(() => {
this.formState.next({ type: emitAction, data: data });
});
}).catch((response: any) => {
if (response && response.status && response.data) {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: response.data.message });
return;
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: (this.$t('app.commonWords.sysException') as string) });
return;
}
});
}
/**
* 表单项更新
*
......
......@@ -86,7 +86,7 @@
<#if !uiactionDetail.isShowCaption()>
<tooltip :transfer="true" :max-width="600">
</#if>
<a v-show="scope.row.${uiaction.getUIActionTag()}.visabled" <#if !preUIAction??>:class="{'grid-first-uiaction':scope.row.${uiaction.getUIActionTag()}.visabled && scope.row.${uiaction.getUIActionTag()}.visabled}"</#if> <#if preUIAction??>:class="{'grid-uiaction-divider':scope.row.${preUIAction.getUIActionTag()}.visabled && scope.row.${uiaction.getUIActionTag()}.visabled}"</#if> :style="{'pointer-events':scope.row.${uiaction.getUIActionTag()}.disabled?'none':'auto'}" @click="uiAction(scope.row, '${uiaction.getUIActionTag()}', $event)">
<a v-show="scope.row.${uiaction.getUIActionTag()}.visabled" <#if !preUIAction??>:class="{'grid-first-uiaction':scope.row.${uiaction.getUIActionTag()}.visabled && scope.row.${uiaction.getUIActionTag()}.visabled}"</#if> <#if preUIAction??>:class="{'grid-uiaction-divider':scope.row.${preUIAction.getUIActionTag()}.visabled && scope.row.${uiaction.getUIActionTag()}.visabled}"</#if> :style="{'pointer-events':scope.row.${uiaction.getUIActionTag()}.disabled?'none':'auto','color':scope.row.${uiaction.getUIActionTag()}.disabled?'#7b7979':'#2d8cf0'}" @click="uiAction(scope.row, '${uiaction.getUIActionTag()}', $event)">
<#-- 取消分割线标签,使用样式替代分割线 end -->
<#if uiactionDetail.isShowIcon()><i class='<#if uiaction.getIconCls?? && uiaction.getIconCls()??>${uiaction.getIconCls()}</#if>'></i></#if>
<#if uiactionDetail.isShowCaption()>{{<#if langbase??>$t('${langbase}.uiactions.${uiaction.getFullCodeName()?lower_case}')<#else>'${uiaction.getCaption()}'</#if>}}</#if>
......
......@@ -21,7 +21,11 @@ ${ctrl.render.code}
:highlight-current-row ="isSingleSelect"
:row-class-name="getRowClassName"
:cell-class-name="getCellClassName"
:height="isEnablePagingBar && items.length > 0 ? 'calc(100% - 50px)' : '100%'"
<#if ctrl.isEnablePagingBar()>
max-height="items.length > 0 ? 'calc(100%-50px)' : '100%'"
<#else>
max-height="100%"
</#if>
@row-click="rowClick($event)"
@select-all="selectAll($event)"
@select="select($event)"
......@@ -106,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>
/**
......@@ -133,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>', actiontarget: '${item.getActionTarget()}'}<#if item_has_next>,</#if>
</#list>
</#if>
};
......@@ -190,6 +197,14 @@ import { FormItemModel } from '@/model/form-detail';
</#list>
</#if>
/**
* 是否嵌入关系界面
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop({default:false}) public isformDruipart?: boolean;
/**
* 显示处理提示
*
......@@ -406,7 +421,7 @@ import { FormItemModel } from '@/model/form-detail';
* 选中行数据
*
* @type {any[]}
* @memberof Main
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public selections: any[] = [];
......@@ -414,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">
/**
* 表格聚合行为
......@@ -495,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>,
util: '${column.getWidthUnit()}',
unit: '${column.getWidthUnit()}',
<#-- BEGIN:是否支持行编辑 -->
<#if ctrl.isEnableRowEdit() && column.isEnableRowEdit()>
isEnableRowEdit: true,
......@@ -548,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()}: [
......@@ -566,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>
......@@ -1457,7 +1510,7 @@ import { FormItemModel } from '@/model/form-detail';
</#list>
</#if>
} else {
sums[index] = 'N/A';
sums[index] = '';
}
});
return sums;
......@@ -1473,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}')){
......@@ -1599,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.util, 'STAR'));
return !this.allColumns.find((column: any) => column.show && Object.is(column.unit, 'STAR'));
}
/**
......@@ -1662,7 +1715,7 @@ import { FormItemModel } from '@/model/form-detail';
}
this.$emit('save', successItems);
this.refresh([]);
if(errorItems.length === 0){
if(errorItems.length === 0 && successItems.length >0 && !this.isformDruipart){
this.$Notice.success({ title: '', desc: (this.$t('app.commonWords.saveSuccess') as string) });
}else{
errorItems.forEach((item:any,index:number)=>{
......@@ -1747,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>
......@@ -1916,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>
......
......@@ -36,7 +36,7 @@
height: 100%;
display:flex;
flex-direction: column;
justify-content: start;
justify-content: flex-start;
.el-table__row{
.grid-uiaction-divider {
padding:0 10px 0 10px;
......@@ -67,13 +67,14 @@
}
}
.el-table__header-wrapper{
display: contents;
}
.el-table__body-wrapper{
height: auto !important;
min-height: 45px;
max-height: 100px;
height: auto;
}
.el-table__footer-wrapper{
display: contents;
min-height: 45px;
max-height: 100px;
height: auto;
}
}
.grid-pagination {
......
......@@ -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];
}
}
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if> <#if view.getViewStyle() != 'DEFAULT'>${view.getViewStyle()?lower_case}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#ibizinclude>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#ibizinclude>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :bordered="false">
<#ibizinclude>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<#if view.hasPSControl('toolbar')>
......
......@@ -54,7 +54,7 @@ ${P.getCtrlCode('grid', 'CONTROL.html').code}
</#if>
</#assign>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude>
......
......@@ -9,6 +9,6 @@
<span class='caption-image'><img src='${viewimg.getImagePath()}'/></span>
</#if>
</#if>
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
<span class='caption-info'>{{$t(model.srfCaption)}}</span>
</div>
</#if>
\ No newline at end of file
......@@ -10,7 +10,7 @@
<span class='caption-image'><img src='${viewimg.getImagePath()}'/></span>
</#if>
</#if>
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
<span class='caption-info'>{{$t(model.srfCaption)}}</span>
</#if>
<#if view.hasPSControl('toolbar')>
<#if selfToolbarRender??>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover='true' :padding='0' :bordered='false'>
<#ibizinclude>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
</div>
\ No newline at end of file
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
......
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<#ibizinclude>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :bordered="false" :dis-hover="true" >
<#ibizinclude>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :bordered="false" :dis-hover="true" >
<div class='content-container'>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<#ibizinclude>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :bordered="false" :dis-hover="true" >
<#ibizinclude>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :bordered="false" :dis-hover="true" >
<#ibizinclude>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<div class="content-container">
<iframe :src="iframeUrl" height="100%" width="100%" seamless="seamless" frameborder="0" scrolling="auto"></iframe>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<div class="content-container">
<iframe :src="iframeUrl" height="100%" width="100%" seamless="seamless" frameborder="0" scrolling="auto"></iframe>
......
......@@ -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
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION.vue.ftl
</#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">
......
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
.${view.getViewType()?lower_case}{
>.view-card{
.ivu-card-extra{
top: 6px;
}
}
}
\ No newline at end of file
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION.vue.ftl
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION.vue.ftl
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' dis-hover :padding="0" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :padding="0" :bordered="false">
<div class="content-container pickup-view">
<div class="translate-contant">
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if> <#if view.getViewStyle() != 'DEFAULT'>${view.getViewStyle()?lower_case}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#ibizinclude>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if> <#if view.getViewStyle() != 'DEFAULT'>${view.getViewStyle()?lower_case}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#ibizinclude>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<div class='content-container'>
<#assign MDContent>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :padding="0" :bordered="false">
<div class="content-container pickup-view">
<#if view.hasPSControl('pickupviewpanel')>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#if view.hasPSControl('toolbar')>
<#assign toolbarCtrl = view.getPSControl('toolbar')>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
</div>
\ No newline at end of file
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<#ibizinclude>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :bordered="false" :dis-hover="true" >
<#ibizinclude>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :bordered="false" :dis-hover="true" >
<div class='content-container'>
......
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude>
......
......@@ -24,7 +24,7 @@
</#if>
</#assign>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<#ibizinclude>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<div class='content-container'>
<#assign MDContent>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#if view.hasPSControl('toolbar')>
<#assign toolbarCtrl = view.getPSControl('toolbar')>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#ibizinclude>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<#if view.hasPSControl('toolbar')>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#if view.hasPSControl('toolbar')>
<#assign toolbarCtrl = view.getPSControl('toolbar')>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<#ibizinclude>
......
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<div class='content-container'>
<#-- 搜索框: BEGIN -->
......
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<div class='content-container pickup-grid-view'>
<@ibizindent blank=12>
......
<div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' dis-hover :padding="0" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude>
......
<div class="app-redirect-view ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
</div>
\ No newline at end of file
<div class="app-wfredirect-view ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
</div>
\ No newline at end of file
<div class="${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
</div>
\ No newline at end of file
<div class="${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
</div>
\ No newline at end of file
<div class="${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
</div>
\ No newline at end of file
<div class="app-logout-view ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<img class="logout-bg" src="/assets/img/logout_bg.png"/>
<div class="logout-container">
{{ $t('app.viewLayoutPanel.appLogoutView.prompt1') }} <a>{{this.countdown}}</a> {{ $t('app.viewLayoutPanel.appLogoutView.prompt2') }} <a @click="gotoLoginView">{{ $t('app.viewLayoutPanel.appLogoutView.loginpage') }}</a>!
......
<div class="${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<div>{{$t('app.viewLayoutPanel.appWfstepTraceView.title')}}</div>
</div>
\ No newline at end of file
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' dis-hover :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION.vue.ftl
......
<div class="app-login-view ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<img class="login-bg" src="/assets/img/login_bg.png"/>
<div class="login-container">
<div class="login-title">{{$t(model.srfTitle)}}</div>
<div class="login-title">{{$t(model.srfCaption)}}</div>
<i-form class="login-form">
<form-item>
<i-input type="text" v-model="formData.loginname" :placeholder="$t('app.viewLayoutPanel.appLoginView.username')" clearable>
......
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if> <#if view.getViewStyle() != 'DEFAULT'>${view.getViewStyle()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' dis-hover :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION.vue.ftl
......
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if> <#if view.getViewStyle() != 'DEFAULT'>${view.getViewStyle()?lower_case}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' dis-hover :bordered="false">
<div class='content-container'>
<div class='view-top-messages'>
......
......@@ -39,6 +39,8 @@
<app-lang style='font-size: 15px;padding: 0 10px;'></app-lang>
<app-orgsector></app-orgsector>
<app-user></app-user>
<app-lock-scren />
<app-full-scren />
<app-theme style="width:45px;display: flex;justify-content: center;"></app-theme>
</div>
</header>
......
......@@ -208,8 +208,9 @@ import { Environment } from '@/environments/environment';
<#assign counter = uiaction.getPSAppCounter() />
counterService:this.${srfclassname('${counter.getCodeName()}')}counterservice,
<#if uiaction.getCounterId()??>counterId:"${uiaction.getCounterId()}",</#if>
noprivdisplaymode:'<#if uiaction.getNoPrivDisplayMode(view)??>${uiaction.getNoPrivDisplayMode(view)}</#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>
......
......@@ -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
<#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
<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
<#ibizinclude>../@MACRO/PANEL/DEFAULT.vue.ftl</#ibizinclude>
\ No newline at end of file
EDITORTYPE=MDROPDOWNLIST#CRONEDITOR
\ No newline at end of file
<action-timeline :service="appEntityService" :context="JSON.parse(JSON.stringify(context))" :viewparams="JSON.parse(JSON.stringify(viewparams))"></action-timeline>
\ No newline at end of file
<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
<#ibizinclude>../@MACRO/PANEL/DEFAULT.vue.ftl</#ibizinclude>
\ No newline at end of file
EDITORTYPE=TEXTAREA#WFAPPROVALTIMELINE
\ No newline at end of file
......@@ -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
......@@ -198,11 +198,11 @@ ${front_block}
<#assign nextPSUIAction = item.getNextPSUIAction()/>
<#if !(nextPSUIAction.getPSAppDataEntity?? && nextPSUIAction.getPSAppDataEntity()??)>
if (_this.${nextPSUIAction.getFullCodeName()} && _this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
_this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context,params, $event, xData,actionContext);
_this.${nextPSUIAction.getFullCodeName()}(result.datas,context,params, $event, xData,actionContext);
}
<#else>
if (this.${nextPSUIAction.getFullCodeName()} && this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context,params, $event, xData,actionContext);
this.${nextPSUIAction.getFullCodeName()}(result.datas,context,params, $event, xData,actionContext);
}
</#if>
</#if>
......@@ -229,11 +229,11 @@ ${front_block}
<#assign nextPSUIAction = item.getNextPSUIAction()/>
<#if !(nextPSUIAction.getPSAppDataEntity?? && nextPSUIAction.getPSAppDataEntity()??)>
if (_this.${nextPSUIAction.getFullCodeName()} && _this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
_this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context,params, $event, xData,actionContext);
_this.${nextPSUIAction.getFullCodeName()}(result.datas,context,params, $event, xData,actionContext);
}
<#else>
if (this.${nextPSUIAction.getFullCodeName()} && this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context,params, $event, xData,actionContext);
this.${nextPSUIAction.getFullCodeName()}(result.datas,context,params, $event, xData,actionContext);
}
</#if>
</#if>
......@@ -261,11 +261,11 @@ ${front_block}
<#assign nextPSUIAction = item.getNextPSUIAction()/>
<#if !(nextPSUIAction.getPSAppDataEntity?? && nextPSUIAction.getPSAppDataEntity()??)>
if (_this.${nextPSUIAction.getFullCodeName()} && _this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
_this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context,params, $event, xData,actionContext);
_this.${nextPSUIAction.getFullCodeName()}(result.datas,context,params, $event, xData,actionContext);
}
<#else>
if (this.${nextPSUIAction.getFullCodeName()} && this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context,params, $event, xData,actionContext);
this.${nextPSUIAction.getFullCodeName()}(result.datas,context,params, $event, xData,actionContext);
}
</#if>
</#if>
......@@ -295,11 +295,11 @@ ${front_block}
<#assign nextPSUIAction = item.getNextPSUIAction()/>
<#if !(nextPSUIAction.getPSAppDataEntity?? && nextPSUIAction.getPSAppDataEntity()??)>
if (_this.${nextPSUIAction.getFullCodeName()} && _this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
_this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context,params, $event, xData,actionContext);
_this.${nextPSUIAction.getFullCodeName()}(result.datas,context,params, $event, xData,actionContext);
}
<#else>
if (this.${nextPSUIAction.getFullCodeName()} && this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context,params, $event, xData,actionContext);
this.${nextPSUIAction.getFullCodeName()}(result.datas,context,params, $event, xData,actionContext);
}
</#if>
</#if>
......@@ -427,11 +427,11 @@ ${front_block}
<#assign nextPSUIAction = item.getNextPSUIAction()/>
<#if !(nextPSUIAction.getPSAppDataEntity?? && nextPSUIAction.getPSAppDataEntity()??)>
if (_this.${nextPSUIAction.getFullCodeName()} && _this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
_this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context, params, $event, xData,actionContext);
_this.${nextPSUIAction.getFullCodeName()}(result.datas,context, params, $event, xData,actionContext);
}
<#else>
if (this.${nextPSUIAction.getFullCodeName()} && this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context, params, $event, xData,actionContext);
this.${nextPSUIAction.getFullCodeName()}(result.datas,context, params, $event, xData,actionContext);
}
</#if>
</#if>
......@@ -470,11 +470,11 @@ ${front_block}
<#assign nextPSUIAction = item.getNextPSUIAction()/>
<#if !(nextPSUIAction.getPSAppDataEntity?? && nextPSUIAction.getPSAppDataEntity()??)>
if (_this.${nextPSUIAction.getFullCodeName()} && _this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
_this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context,params, $event, xData,actionContext);
_this.${nextPSUIAction.getFullCodeName()}(result.datas,context,params, $event, xData,actionContext);
}
<#else>
if (this.${nextPSUIAction.getFullCodeName()} && this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context,params, $event, xData,actionContext);
this.${nextPSUIAction.getFullCodeName()}(result.datas,context,params, $event, xData,actionContext);
}
</#if>
</#if>
......@@ -514,11 +514,11 @@ ${front_block}
<#assign nextPSUIAction = item.getNextPSUIAction()/>
<#if !(nextPSUIAction.getPSAppDataEntity?? && nextPSUIAction.getPSAppDataEntity()??)>
if (_this.${nextPSUIAction.getFullCodeName()} && _this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
_this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context, params, $event, xData,actionContext);
_this.${nextPSUIAction.getFullCodeName()}(result.datas,context, params, $event, xData,actionContext);
}
<#else>
if (this.${nextPSUIAction.getFullCodeName()} && this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context, params, $event, xData,actionContext);
this.${nextPSUIAction.getFullCodeName()}(result.datas,context, params, $event, xData,actionContext);
}
</#if>
</#if>
......@@ -556,11 +556,11 @@ ${front_block}
<#assign nextPSUIAction = item.getNextPSUIAction()/>
<#if !(nextPSUIAction.getPSAppDataEntity?? && nextPSUIAction.getPSAppDataEntity()??)>
if (_this.${nextPSUIAction.getFullCodeName()} && _this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
_this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context, params, $event, xData,actionContext);
_this.${nextPSUIAction.getFullCodeName()}(result.datas,context, params, $event, xData,actionContext);
}
<#else>
if (this.${nextPSUIAction.getFullCodeName()} && this.${nextPSUIAction.getFullCodeName()} instanceof Function) {
this.${nextPSUIAction.getFullCodeName()}(result.datas[0],context, params, $event, xData,actionContext);
this.${nextPSUIAction.getFullCodeName()}(result.datas,context, params, $event, xData,actionContext);
}
</#if>
</#if>
......
......@@ -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() == ''>
......
......@@ -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()});
......@@ -236,7 +233,7 @@
*/
public initNavDataWithRoute(data:any = null, isNew:boolean = false, isAlways:boolean = false){
if( isAlways || (this.viewDefaultUsage && Object.is(this.navModel,"route")) ){
this.navDataService.addNavData({id:'${srffilepath2(view.getCodeName())}',tag:this.viewtag,srfkey:isNew ? null : <#if appde??>this.context.${appde.getCodeName()?lower_case}<#else>null</#if>,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'${srffilepath2(view.getCodeName())}',tag:this.viewtag,srfkey:isNew ? null : <#if appde??>this.context.${appde.getCodeName()?lower_case}<#else>null</#if>,title:this.$t(this.model.srfCaption),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -247,7 +244,7 @@
*/
public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true, isAlways:boolean = false){
if( isAlways || (this.viewDefaultUsage && !Object.is(this.navModel,"route")) ){
this.navDataService.addNavDataByOnly({id:'${srffilepath2(view.getCodeName())}',tag:this.viewtag,srfkey:<#if appde??>this.context.${appde.getCodeName()?lower_case}<#else>null</#if>,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd);
this.navDataService.addNavDataByOnly({id:'${srffilepath2(view.getCodeName())}',tag:this.viewtag,srfkey:<#if appde??>this.context.${appde.getCodeName()?lower_case}<#else>null</#if>,title:this.$t(this.model.srfCaption),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd);
}
}
......
......@@ -16,12 +16,12 @@
Object.assign(this.model, { dataInfo: _data.${appDataEntity.getMajorPSAppDEField().getCodeName()?lower_case} });
if(this.$tabPageExp){
let _this:any = this;
this.$tabPageExp.setCurPageCaption(_this.$t(this.model.srfTitle), _this.$t(this.model.srfTitle), _this.model.dataInfo);
this.$tabPageExp.setCurPageCaption(_this.$t(this.model.srfCaption), _this.$t(this.model.srfCaption), _this.model.dataInfo);
}
if(this.$route){
this.$route.meta.info = this.model.dataInfo;
}
<#noparse>Object.assign(this.model, { srfTitle: `${this.$t(this.model.srfTitle)} - ${this.model.dataInfo}` });</#noparse>
<#noparse>Object.assign(this.model, { srfCaption: `${this.$t(this.model.srfCaption)} - ${this.model.dataInfo}` });</#noparse>
}
})
}
......
......@@ -61,10 +61,19 @@
if (response && response.status === 200) {
this.wfStepModel = response.data;
if(this.wfStepModel && this.wfStepModel.length > 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);
}
resolve(response.data);
}
}).catch((response: any) => {
......
......@@ -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>
......
......@@ -21,12 +21,12 @@ this.$forceUpdate();
Object.assign(this.model, { dataInfo: _data.${appDataEntity.getMajorPSAppDEField().getCodeName()?lower_case} });
if(this.$tabPageExp){
let _this:any = this;
this.$tabPageExp.setCurPageCaption(_this.$t(this.model.srfTitle), _this.$t(this.model.srfTitle), _this.model.dataInfo);
this.$tabPageExp.setCurPageCaption(_this.$t(this.model.srfCaption), _this.$t(this.model.srfCaption), _this.model.dataInfo);
}
if(this.$route){
this.$route.meta.info = this.model.dataInfo;
}
<#noparse>Object.assign(this.model, { srfTitle: `${this.$t(this.model.srfTitle)} - ${this.model.dataInfo}` });</#noparse>
<#noparse>Object.assign(this.model, { srfCaption: `${this.$t(this.model.srfCaption)} - ${this.model.dataInfo}` });</#noparse>
}
})
}
......
......@@ -21,12 +21,12 @@ this.$forceUpdate();
Object.assign(this.model, { dataInfo: _data.${appDataEntity.getMajorPSAppDEField().getCodeName()?lower_case} });
if(this.$tabPageExp){
let _this:any = this;
this.$tabPageExp.setCurPageCaption(_this.$t(this.model.srfTitle), _this.$t(this.model.srfTitle), _this.model.dataInfo);
this.$tabPageExp.setCurPageCaption(_this.$t(this.model.srfCaption), _this.$t(this.model.srfCaption), _this.model.dataInfo);
}
if(this.$route){
this.$route.meta.info = this.model.dataInfo;
}
<#noparse>Object.assign(this.model, { srfTitle: `${this.$t(this.model.srfTitle)} - ${this.model.dataInfo}` });</#noparse>
<#noparse>Object.assign(this.model, { srfCaption: `${this.$t(this.model.srfCaption)} - ${this.model.dataInfo}` });</#noparse>
}
})
}
......
......@@ -31,12 +31,12 @@ this.$forceUpdate();
Object.assign(this.model, { dataInfo: _data.${appDataEntity.getMajorPSAppDEField().getCodeName()?lower_case} });
if(this.$tabPageExp){
let _this:any = this;
this.$tabPageExp.setCurPageCaption(_this.$t(this.model.srfTitle), _this.$t(this.model.srfTitle), _this.model.dataInfo);
this.$tabPageExp.setCurPageCaption(_this.$t(this.model.srfCaption), _this.$t(this.model.srfCaption), _this.model.dataInfo);
}
if(this.$route){
this.$route.meta.info = this.model.dataInfo;
}
<#noparse>Object.assign(this.model, { srfTitle: `${this.$t(this.model.srfTitle)} - ${this.model.dataInfo}` });</#noparse>
<#noparse>Object.assign(this.model, { srfCaption: `${this.$t(this.model.srfCaption)} - ${this.model.dataInfo}` });</#noparse>
}
})
}
......
......@@ -31,12 +31,12 @@ this.$forceUpdate();
Object.assign(this.model, { dataInfo: _data.${appDataEntity.getMajorPSAppDEField().getCodeName()?lower_case} });
if(this.$tabPageExp){
let _this:any = this;
this.$tabPageExp.setCurPageCaption(_this.$t(this.model.srfTitle), _this.$t(this.model.srfTitle), _this.model.dataInfo);
this.$tabPageExp.setCurPageCaption(_this.$t(this.model.srfCaption), _this.$t(this.model.srfCaption), _this.model.dataInfo);
}
if(this.$route){
this.$route.meta.info = this.model.dataInfo;
}
<#noparse>Object.assign(this.model, { srfTitle: `${this.$t(this.model.srfTitle)} - ${this.model.dataInfo}` });</#noparse>
<#noparse>Object.assign(this.model, { srfCaption: `${this.$t(this.model.srfCaption)} - ${this.model.dataInfo}` });</#noparse>
}
})
}
......
<#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("未查找到重定向视图")
}
......
......@@ -10,6 +10,17 @@
../@MACRO/VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude>
/**
* 打开编辑数据
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public opendata(args: any[],params?: any, $event?: any, xData?: any) {
if(xData && xData.opendata instanceof Function) {
xData.opendata(args);
}
}
<#ibizinclude>
../@MACRO/VIEW_BOTTOM-BASE.vue.ftl
</#ibizinclude>
......
......@@ -51,10 +51,14 @@ Vue.use(UserComponent);
Vue.use(PortletComponent);
router.beforeEach((to: any, from: any, next: any) => {
if(sessionStorage.getItem('lockState') && to.path != '/lock'){
next({ path: '/lock'});
}else{
if (to.meta && !to.meta.ignoreAddPage) {
router.app.$store.commit('addPage', to);
}
next();
}
});
Interceptors.getInstance(router,store);
......
......@@ -12,8 +12,9 @@ Vue.use(Router);
{
path: '<#if !isIncludeIndex>/</#if>appdataredirectview/:appdataredirectview?',
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.title<#else>app.views.${subView.getCodeName()?lower_case}.title</#if>',
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()}',
......@@ -31,8 +32,9 @@ Vue.use(Router);
{
path: '<#if !isIncludeIndex>/</#if>appwfdataredirectview/:appwfdataredirectview?',
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.title<#else>app.views.${subView.getCodeName()?lower_case}.title</#if>',
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()}',
......@@ -50,8 +52,9 @@ Vue.use(Router);
{
path: '<#if !isIncludeIndex>/</#if>${subView.getViewType()?lower_case}/:${subView.getViewType()?lower_case}?',
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.title<#else>app.views.${subView.getCodeName()?lower_case}.title</#if>',
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,13 +67,36 @@ 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 -->
{
path: '<#if !isIncludeIndex>/</#if>${subView.getCodeName()?lower_case}/:${subView.getCodeName()?lower_case}?',
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.title<#else>app.views.${subView.getCodeName()?lower_case}.title</#if>',
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()}',
......@@ -106,7 +132,7 @@ Vue.use(Router);
path: '/${path}${srfpluralize(appDataEntity.codeName)?lower_case}/:${appDataEntity.getCodeName()?lower_case}?/${subView.getPSDEViewCodeName()?lower_case}/:${subView.getPSDEViewCodeName()?lower_case}?',
<#-- 嵌入关系路由未设置name属性 -->
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.title<#else>app.views.${subView.getCodeName()?lower_case}.title</#if>',
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:'',
<#if subView.getPSSysImage()??>
imgPath: '${subView.getPSSysImage().getImagePath()}',
......@@ -130,7 +156,7 @@ Vue.use(Router);
{
path: '/${srfpluralize(appDataEntity.codeName)?lower_case}/:${appDataEntity.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}.title<#else>app.views.${subView.getCodeName()?lower_case}.title</#if>',
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:'',
<#if subView.getPSSysImage()??>
imgPath: '${subView.getPSSysImage().getImagePath()}',
......@@ -148,7 +174,7 @@ Vue.use(Router);
{
path: '/${subView.getCodeName()?lower_case}/:${subView.getCodeName()?lower_case}?',
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.title<#else>app.views.${subView.getCodeName()?lower_case}.title</#if>',
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:'',
<#if subView.getPSSysImage()??>
imgPath: '${subView.getPSSysImage().getImagePath()}',
......@@ -189,7 +215,7 @@ const router = new Router({
});
},
meta: {
caption: '<#if view.isPSDEView()>entities.${view.getPSAppDataEntity().getCodeName()?lower_case}.views.${view.getPSDEViewCodeName()?lower_case}.title<#else>app.views.${view.getCodeName()?lower_case}.title</#if>',
caption: '<#if view.isPSDEView()>entities.${view.getPSAppDataEntity().getCodeName()?lower_case}.views.${view.getPSDEViewCodeName()?lower_case}.caption<#else>app.views.${view.getCodeName()?lower_case}.caption</#if>',
info:'',
viewType: 'APPINDEX',
<#if view.getPSSysImage()??>
......@@ -220,7 +246,7 @@ const router = new Router({
{
path: '${path}${srfpluralize(appDataEntity.codeName)?lower_case}/:${appDataEntity.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}.title<#else>app.views.${subView.getCodeName()?lower_case}.title</#if>',
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:'',
<#if subView.getPSSysImage()??>
imgPath: '${subView.getPSSysImage().getImagePath()}',
......@@ -245,7 +271,7 @@ const router = new Router({
{
path: '${srfpluralize(appDataEntity.codeName)?lower_case}/:${appDataEntity.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}.title<#else>app.views.${subView.getCodeName()?lower_case}.title</#if>',
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:'',
<#if subView.getPSSysImage()??>
imgPath: '${subView.getPSSysImage().getImagePath()}',
......@@ -264,7 +290,7 @@ const router = new Router({
{
path: '${subView.getCodeName()?lower_case}/:${subView.getCodeName()?lower_case}?',
meta: {
caption: '<#if subView.isPSDEView()>entities.${subView.getPSAppDataEntity().getCodeName()?lower_case}.views.${subView.getPSDEViewCodeName()?lower_case}.title<#else>app.views.${subView.getCodeName()?lower_case}.title</#if>',
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:'',
<#if subView.getPSSysImage()??>
imgPath: '${subView.getPSSysImage().getImagePath()}',
......@@ -308,6 +334,20 @@ const router = new Router({
},
component: () => import('@components/login/login.vue'),
},
{
path: '/lock',
name: 'lock',
meta: {
caption: '锁屏',
viewType: 'lock',
requireAuth: false,
ignoreAddPage: true,
},
beforeEnter: (to: any, from: any, next: any) => {
next();
},
component: () => import('@components/app-lock/app-lock.vue'),
},
{
path: '/404',
component: () => import('@components/404/404.vue')
......@@ -322,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;
......@@ -30,10 +30,17 @@ export default class ${srfclassname('${item.getCodeName()}')}AuthServiceBase ext
* @memberof ${srfclassname('${item.getCodeName()}')}AuthServiceBase
*/
public getOPPrivs(mainSateOPPrivs:any):any{
let curDefaultOPPrivs:any = JSON.parse(JSON.stringify(this.defaultOPPrivs));
let curDefaultOPPrivs:any = this.getSysOPPrivs();
let copyDefaultOPPrivs:any = JSON.parse(JSON.stringify(curDefaultOPPrivs));
if(mainSateOPPrivs){
Object.assign(curDefaultOPPrivs,mainSateOPPrivs);
}
// 统一资源优先
Object.keys(curDefaultOPPrivs).forEach((name:string) => {
if(this.sysOPPrivsMap.get(name) && copyDefaultOPPrivs[name] === 0){
curDefaultOPPrivs[name] = copyDefaultOPPrivs[name];
}
});
return curDefaultOPPrivs;
}
......
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
import store from '@/store';
/**
* 实体权限服务
*
* @export
* @class AuthService
*/
export default class AuthService {
/**
* Vue 状态管理器
*
* @public
* @type {(any | null)}
* @memberof AuthService
*/
public $store: any;
/**
* 系统操作标识映射统一资源Map
*
* @public
* @type {Map<string,any>}
* @memberof AuthService
*/
public sysOPPrivsMap:Map<string,any> = new Map();
/**
* 默认操作标识
*
* @public
* @type {(any)}
* @memberof AuthService
*/
public defaultOPPrivs: any = {<#if sys.getAllPSDEOPPrivs()??><#list sys.getAllPSDEOPPrivs() as sysOPPrivs>${sysOPPrivs.getName()}: 1<#if sysOPPrivs_has_next>,</#if></#list></#if>};
/**
* Creates an instance of AuthService.
*
* @param {*} [opts={}]
* @memberof AuthService
*/
constructor(opts: any = {}) {
this.$store = store;
this.registerSysOPPrivs();
}
/**
* 获取状态管理器
*
* @returns {(any | null)}
* @memberof AuthService
*/
public getStore(): any {
return this.$store;
}
/**
* 获取计算统一资源之后的系统操作标识
*
* @returns {}
* @memberof AuthService
*/
public getSysOPPrivs(){
let copySysOPPrivs:any = JSON.parse(JSON.stringify(this.defaultOPPrivs));
if(Object.keys(copySysOPPrivs).length === 0) return {};
Object.keys(copySysOPPrivs).forEach((name:any) =>{
if(this.sysOPPrivsMap.get(name)){
copySysOPPrivs[name] = this.getResourcePermission(this.sysOPPrivsMap.get(name))?1:0;
}
})
return copySysOPPrivs;
}
/**
* 获取实体权限服务
*
* @param {string} name 实体名称
* @returns {Promise<any>}
* @memberof AuthService
*/
public getService(name: string): Promise<any> {
return (window as any)['authServiceRegister'].getService(name);
}
/**
* 注册系统操作标识统一资源
*
* @param {string} name 实体名称
* @returns {Promise<any>}
* @memberof AuthService
*/
public registerSysOPPrivs(){
<#if sys.getAllPSDEOPPrivs()??>
<#list sys.getAllPSDEOPPrivs() as sysOPPrivs>
<#if sysOPPrivs.getMapPSSysUniRes()??>
this.sysOPPrivsMap.set('${sysOPPrivs.getName()}','${sysOPPrivs.getMapPSSysUniRes().getResCode()}');
</#if>
</#list>
</#if>
}
/**
* 根据当前数据获取实体操作标识
*
* @param {string} name 实体名称
* @returns {any}
* @memberof AuthService
*/
public getOPPrivs(data: any): any {
return null;
}
/**
* 根据菜单项获取菜单权限
*
* @param {*} item 菜单标识
* @returns {boolean}
* @memberof AuthService
*/
public getMenusPermission(item: any): boolean {
return this.$store.getters['authresource/getAuthMenu'](item);
}
/**
* 根据统一资源标识获取统一资源权限
*
* @param {*} tag 统一资源标识
* @returns {boolean}
* @memberof AuthService
*/
public getResourcePermission(tag: any): boolean {
return this.$store.getters['authresource/getResourceData'](tag);
}
}
\ No newline at end of file
......@@ -27,7 +27,7 @@ export default class ${srfclassname('${item.getCodeName()}')} {
* @type any
* @memberof ${srfclassname('${item.getCodeName()}')}
*/
public expirationTime:any;
public static expirationTime:any;
/**
* 预定义类型
......@@ -43,7 +43,7 @@ export default class ${srfclassname('${item.getCodeName()}')} {
* @type any
* @memberof ${srfclassname('${item.getCodeName()}')}
*/
public cacheTimeout:any = ${item.getCacheTimeout()};
public cacheTimeout:any = ${item.getCacheTimeout()?c};
/**
* 代码表模型对象
......@@ -55,6 +55,26 @@ export default class ${srfclassname('${item.getCodeName()}')} {
codelistid:"${item.getCodeName()}"
};
/**
* 获取过期时间
*
* @type any
* @memberof ${srfclassname('${item.getCodeName()}')}
*/
public getExpirationTime(){
return ${srfclassname('${item.getCodeName()}')}.expirationTime;
}
/**
* 设置过期时间
*
* @type any
* @memberof ${srfclassname('${item.getCodeName()}')}
*/
public setExpirationTime(value:any){
${srfclassname('${item.getCodeName()}')}.expirationTime = value;
}
/**
* 自定义参数集合
*
......
......@@ -211,6 +211,7 @@ export default {
back: "Back",
next: "Next",
complete: "Complete",
preactionmessage:"The calculation of the previous behavior is not configured"
},
viewLayoutPanel: {
appLogoutView: {
......
......@@ -210,6 +210,7 @@ export default {
back: "上一步",
next: "下一步",
complete: "完成",
preactionmessage:"未配置计算上一步行为"
},
viewLayoutPanel: {
appLogoutView: {
......
......@@ -534,9 +534,9 @@ import ${srfclassname('${singleLogic.getCodeName()}')}Logic from '@/service/${sr
<#list appdeAction.getAfterPSDEActionLogics() as afterlogic>
<#if afterlogic.getPSDELogic()?? && afterlogic.getPSDELogic().getLogicHolder?? && afterlogic.getPSDELogic().getLogicHolder()?? && (afterlogic.getPSDELogic().getLogicHolder() == 2 || afterlogic.getPSDELogic().getLogicHolder() == 3)>
<#assign singleLogic = afterlogic.getPSDELogic() />
<@compress single_line=true>let ${singleLogic.getCodeName()?lower_case}:${srfclassname('${singleLogic.getCodeName()}')}Logic = new ${srfclassname('${singleLogic.getCodeName()}')}Logic({context:JSON.parse(JSON.stringify(context)),data:JSON.parse(JSON.stringify(res))});</@compress>
<@compress single_line=true>let returndata:any = await ${singleLogic.getCodeName()?lower_case}.onExecute(context,res.data,isloading?true:false);</@compress>
res ={status:200,data:returndata};
<@compress single_line=true>let ${singleLogic.getCodeName()?lower_case}:${srfclassname('${singleLogic.getCodeName()}')}Logic = new ${srfclassname('${singleLogic.getCodeName()}')}Logic({context:JSON.parse(JSON.stringify(context)),data:JSON.parse(JSON.stringify(res)).data});</@compress>
<@compress single_line=true>let ${singleLogic.getCodeName()?lower_case}Data:any = await ${singleLogic.getCodeName()?lower_case}.onExecute(context,res.data,isloading?true:false);</@compress>
res ={status:200,data:${singleLogic.getCodeName()?lower_case}Data};
</#if>
</#list>
</#if>
......
<#ibiztemplate>
TARGET=PSAPPDATAENTITY
</#ibiztemplate>
<#macro getMainStateOPPrivs mainState dataEntity>
<#macro getMainStateOPPrivs mainState >
<#compress>
<#if dataEntity.getAllPSDEOPPrivs?? && dataEntity.getAllPSDEOPPrivs()??>
<#if mainState.getPSDEMainStateOPPrivs?? && mainState.getPSDEMainStateOPPrivs()??>
{<#list mainState.getPSDEMainStateOPPrivs() as stateOPPriv><#if stateOPPriv.getPSDEOPPriv()?? && !stateOPPriv.getPSDEOPPriv().getPSDataEntity()??>'${stateOPPriv.getName()}':<#if mainState.isOPPrivAllowMode()>1<#else>0</#if>,</#if></#list><#list dataEntity.getAllPSDEOPPrivs() as mainStateOPPriv>'${mainStateOPPriv.getName()}':<#list mainState.getPSDEMainStateOPPrivs() as stateOPPriv><#if stateOPPriv.getName() == mainStateOPPriv.getName()><#assign iscurState = true/></#if></#list><#if iscurState?? && iscurState ><#if mainState.isOPPrivAllowMode()>1<#else>0</#if><#else><#if mainState.isOPPrivAllowMode()>0<#else>1</#if></#if><#assign iscurState = false/><#if mainStateOPPriv_has_next>,</#if></#list>}
{<#list mainState.getPSDEMainStateOPPrivs() as stateOPPriv><#if stateOPPriv.getPSDEOPPriv()??>'${stateOPPriv.getName()}':<#if mainState.isOPPrivAllowMode()>1<#else>0</#if>,</#if></#list>}
<#else>
{}
</#if>
</#compress>
</#macro>
<#macro getDataEntityMainStateOPPrivs mainState dataEntity>
<#compress>
<#if dataEntity.getAllPSDEOPPrivs?? && dataEntity.getAllPSDEOPPrivs()??>
{<#list dataEntity.getAllPSDEOPPrivs() as mainStateOPPriv>'${mainStateOPPriv.getName()}':<#if mainState.isOPPrivAllowMode()>0<#else>1</#if><#if mainStateOPPriv_has_next>,</#if></#list>}
<#else>
{}
</#if>
......@@ -155,7 +162,7 @@ export default class ${srfclassname('${item.getCodeName()}')}UIServiceBase exten
<#if item.getPSDataEntity?? && item.getPSDataEntity()?? && item.getPSDataEntity().getAllPSDEMainStates()??>
<#list item.getPSDataEntity().getAllPSDEMainStates() as demState>
<#if demState.getMSTag()??>
this.allDeMainStateOPPrivsMap.set('${demState.getMSTag()}',<@getMainStateOPPrivs mainState=demState dataEntity=item.getPSDataEntity() />);
this.allDeMainStateOPPrivsMap.set('${demState.getMSTag()}',Object.assign(<@getDataEntityMainStateOPPrivs mainState=demState dataEntity=item.getPSDataEntity() />,<@getMainStateOPPrivs mainState=demState />));
</#if>
</#list>
</#if>
......@@ -239,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)){
......
## 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 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册