提交 9166a8d0 编写于 作者: chenxiang@lab.ibiz5.com's avatar chenxiang@lab.ibiz5.com

1

上级 d3153c44
vue
\ No newline at end of file
<#-- content --> <#-- content -->
<#assign content> <#assign content>
:isSingleSelect="isSingleSelect" :isSingleSelect="isSingleSelect"
<#if view.getViewType() == 'DEPICKUPGRIDVIEW'>
:selectedData="selectedData"
</#if>
:showBusyIndicator="${ctrl.isShowBusyIndicator()?c}" :showBusyIndicator="${ctrl.isShowBusyIndicator()?c}"
<#if view.getViewType() == "DEGRIDVIEW" || view.getViewType() == "DEGRIDVIEW9"> <#if view.getViewType() == "DEGRIDVIEW" || view.getViewType() == "DEGRIDVIEW9">
:isOpenEdit="${view.isRowEditDefault()?c}" :isOpenEdit="${view.isRowEditDefault()?c}"
:gridRowActiveMode="gridRowActiveMode"
@save="onSave" @save="onSave"
</#if> </#if>
updateAction="<#if ctrl.getUpdatePSControlAction()?? && ctrl.getUpdatePSControlAction().getPSAppDEMethod()??>${ctrl.getUpdatePSControlAction().getPSAppDEMethod().getCodeName()}</#if>" updateAction="<#if ctrl.getUpdatePSControlAction()?? && ctrl.getUpdatePSControlAction().getPSAppDEMethod()??>${ctrl.getUpdatePSControlAction().getPSAppDEMethod().getCodeName()}</#if>"
removeAction="<#if ctrl.getRemovePSControlAction()?? && ctrl.getRemovePSControlAction().getPSAppDEMethod()??>${ctrl.getRemovePSControlAction().getPSAppDEMethod().getCodeName()}</#if>" removeAction="<#if ctrl.getRemovePSControlAction()?? && ctrl.getRemovePSControlAction().getPSAppDEMethod()??>${ctrl.getRemovePSControlAction().getPSAppDEMethod().getCodeName()}</#if>"
loaddraftAction="<#if ctrl.getGetDraftPSControlAction()?? && ctrl.getGetDraftPSControlAction().getPSAppDEMethod()??>${ctrl.getGetDraftPSControlAction().getPSAppDEMethod().getCodeName()}</#if>" loaddraftAction="<#if ctrl.getGetDraftPSControlAction()?? && ctrl.getGetDraftPSControlAction().getPSAppDEMethod()??>${ctrl.getGetDraftPSControlAction().getPSAppDEMethod().getCodeName()}</#if>"
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
protected isActivied: boolean = false; protected isActivied: boolean = true;
/** /**
* vue 生命周期 * vue 生命周期
...@@ -63,11 +63,15 @@ ...@@ -63,11 +63,15 @@
if (!Object.is(tag, this.name)) { if (!Object.is(tag, this.name)) {
return; return;
} }
if (!this.isActivied) { <#if view.getPSAppViewEngines()??>
this.$nextTick(() => { this.$forceUpdate();
this.isActivied = true; <#else>
}); this.isActivied = false;
} this.$nextTick(() => {
this.isActivied = true;
});
</#if>
}); });
} }
} }
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<#if ctrl.render??> <#if ctrl.render??>
${ctrl.render.code} ${ctrl.render.code}
<#else> <#else>
<split class="app-list-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" @on-move-end="onSplitChange"> <split id="${ctrl.getCodeName()?lower_case}" class="app-list-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" mode="<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">horizontal<#else>vertical</#if>" @on-move-end="onSplitChange">
<div slot='left'> <div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">left<#else>top</#if>'>
<#if ctrl.isShowTitleBar()> <#if ctrl.isShowTitleBar()>
<div class='list-exp-bar-header'> <div class='list-exp-bar-header'>
<div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>列表导航栏<#else>${ctrl.getTitle()}</#if></div> <div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>列表导航栏<#else>${ctrl.getTitle()}</#if></div>
...@@ -38,11 +38,10 @@ ...@@ -38,11 +38,10 @@
</#if> </#if>
</div> </div>
</div> </div>
<div slot='right'> <div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">right<#else>bottom</#if>'>
<component <component
v-if="selection.view && !Object.is(this.selection.view.viewname, '')" v-if="selection.view && !Object.is(this.selection.view.viewname, '')"
:is="selection.view.viewname" :is="selection.view.viewname"
:key="$util.createUUID()"
class="viewcontainer2" class="viewcontainer2"
:viewDefaultUsage="false" :viewDefaultUsage="false"
:viewdata="JSON.stringify(selection.data)"> :viewdata="JSON.stringify(selection.data)">
...@@ -61,7 +60,7 @@ ...@@ -61,7 +60,7 @@
* 视图唯一标识 * 视图唯一标识
* *
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
@Prop() protected viewUID!:string; @Prop() protected viewUID!:string;
...@@ -70,16 +69,41 @@ ...@@ -70,16 +69,41 @@
* *
* @protected * @protected
* @type {(boolean)} * @type {(boolean)}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected isSingleSelect:boolean = true; protected isSingleSelect:boolean = true;
/**
* 呈现模式,可选值:horizontal或者vertical
*
* @protected
* @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected showMode:string ="<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">horizontal<#else>vertical</#if>";
/**
* 控件宽度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ctrlWidth:number = <#if ctrl.getWidth()??>${ctrl.getWidth()}<#else>0</#if>;
/**
* 控件高度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ctrlHeight: number = <#if ctrl.getHeight()??>${ctrl.getHeight()}<#else>0</#if>;
/** /**
* 搜素值 * 搜素值
* *
* @protected * @protected
* @type {(string)} * @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected searchText:string = ""; protected searchText:string = "";
...@@ -87,7 +111,7 @@ ...@@ -87,7 +111,7 @@
* 分割宽度 * 分割宽度
* *
* @type {number} * @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected split: number = 0.5; protected split: number = 0.5;
...@@ -98,7 +122,7 @@ ...@@ -98,7 +122,7 @@
* 导航视图名称 * 导航视图名称
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected navViewName: string = "<#if xDataControl.getNavPSAppView()??><#assign navPSAppView = xDataControl.getNavPSAppView() />${srffilepath2(navPSAppView.getCodeName())}</#if>"; protected navViewName: string = "<#if xDataControl.getNavPSAppView()??><#assign navPSAppView = xDataControl.getNavPSAppView() />${srffilepath2(navPSAppView.getCodeName())}</#if>";
...@@ -106,7 +130,7 @@ ...@@ -106,7 +130,7 @@
* 导航视图参数 * 导航视图参数
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected navViewParam: string = '<#if xDataControl.getNavViewParamJO()??>${xDataControl.getNavViewParamJO()}</#if>'; protected navViewParam: string = '<#if xDataControl.getNavViewParamJO()??>${xDataControl.getNavViewParamJO()}</#if>';
...@@ -114,7 +138,7 @@ ...@@ -114,7 +138,7 @@
* 导航过滤项 * 导航过滤项
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected navFilter: string = "<#if xDataControl.getNavFilter()??>${xDataControl.getNavFilter()}</#if>"; protected navFilter: string = "<#if xDataControl.getNavFilter()??>${xDataControl.getNavFilter()}</#if>";
</#if> </#if>
...@@ -123,7 +147,7 @@ ...@@ -123,7 +147,7 @@
* 显示处理提示 * 显示处理提示
* *
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
@Prop({ default: true }) protected showBusyIndicator!: boolean; @Prop({ default: true }) protected showBusyIndicator!: boolean;
...@@ -141,7 +165,7 @@ ...@@ -141,7 +165,7 @@
* 获取多项数据 * 获取多项数据
* *
* @returns {any[]} * @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public getDatas(): any[] { public getDatas(): any[] {
return []; return [];
...@@ -151,7 +175,7 @@ ...@@ -151,7 +175,7 @@
* 获取单项树 * 获取单项树
* *
* @returns {*} * @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public getData(): any { public getData(): any {
return null; return null;
...@@ -161,14 +185,14 @@ ...@@ -161,14 +185,14 @@
* 选中数据 * 选中数据
* *
* @type {*} * @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected selection: any = {}; protected selection: any = {};
/** /**
* split值变化事件 * split值变化事件
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public onSplitChange() { public onSplitChange() {
if(this.split){ if(this.split){
...@@ -179,7 +203,7 @@ ...@@ -179,7 +203,7 @@
/** /**
* Vue声明周期(组件初始化完毕) * Vue声明周期(组件初始化完毕)
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public created() { public created() {
this.afterCreated(); this.afterCreated();
...@@ -188,7 +212,7 @@ ...@@ -188,7 +212,7 @@
/** /**
* 执行created后的逻辑 * 执行created后的逻辑
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public afterCreated(){ public afterCreated(){
if (this.viewState) { if (this.viewState) {
...@@ -201,16 +225,46 @@ ...@@ -201,16 +225,46 @@
this.viewState.next({ tag: '${xDataControl.getName()}', action: action, data: data }); this.viewState.next({ tag: '${xDataControl.getName()}', action: action, data: data });
</#if> </#if>
}); });
} }
}
/**
* 执行mounted后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterMounted(){
if(this.$store.getters.getViewSplit(this.viewUID)){ if(this.$store.getters.getViewSplit(this.viewUID)){
this.split = this.$store.getters.getViewSplit(this.viewUID); this.split = this.$store.getters.getViewSplit(this.viewUID);
}else{
let containerWidth:number = (document.getElementById("${ctrl.getCodeName()?lower_case}") as any).offsetWidth;
let containerHeight:number = (document.getElementById("${ctrl.getCodeName()?lower_case}") as any).offsetHeight;
if(Object.is(this.showMode,'horizontal')){
if(this.ctrlWidth){
this.split = this.ctrlWidth/containerWidth;
}
}else{
if(this.ctrlHeight){
this.split = this.ctrlHeight/containerHeight;
}
}
this.$store.commit("setViewSplit",{viewUID:this.viewUID,viewSplit:this.split});
} }
} }
/**
* Vue声明周期(组件渲染完毕)
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public mounted() {
this.afterMounted();
}
/** /**
* vue 生命周期 * vue 生命周期
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected destroyed() { protected destroyed() {
this.afterDestroy(); this.afterDestroy();
...@@ -219,7 +273,7 @@ ...@@ -219,7 +273,7 @@
/** /**
* 执行destroyed后的逻辑 * 执行destroyed后的逻辑
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected afterDestroy() { protected afterDestroy() {
if (this.viewStateEvent) { if (this.viewStateEvent) {
...@@ -233,7 +287,7 @@ ...@@ -233,7 +287,7 @@
/** /**
* ${ctrl.name}的选中数据事件 * ${ctrl.name}的选中数据事件
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void { protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void {
let data:any = {}; let data:any = {};
...@@ -254,12 +308,13 @@ ...@@ -254,12 +308,13 @@
this.selection = {}; this.selection = {};
Object.assign(this.selection, { view: { viewname: this.navViewName }, data:data }); Object.assign(this.selection, { view: { viewname: this.navViewName }, data:data });
this.$emit('selectionchange',args); this.$emit('selectionchange',args);
this.$forceUpdate();
} }
/** /**
* ${ctrl.name}的load完成事件 * ${ctrl.name}的load完成事件
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected ${ctrl.name}_load(args:any, tag?: string, $event2?: any){ protected ${ctrl.name}_load(args:any, tag?: string, $event2?: any){
this.$emit('load',args); this.$emit('load',args);
...@@ -268,7 +323,7 @@ ...@@ -268,7 +323,7 @@
/** /**
* 执行搜索 * 执行搜索
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected onSearch($event:any) { protected onSearch($event:any) {
<#if ctrl.getPSDEList()??> <#if ctrl.getPSDEList()??>
......
...@@ -67,6 +67,69 @@ ...@@ -67,6 +67,69 @@
padding-right: 10px; padding-right: 10px;
} }
} }
> .ivu-split-vertical{
> .ivu-split-pane {
> div {
height: 100%;
overflow: auto;
display: flex;
flex-direction: column;
.list-exp-bar-header {
line-height: 50px;
border-bottom: 1px solid #ddd;
>div {
font-size: 18px;
i {
font-size: 20px;
margin-top: -2px;
}
}
}
.container-header{
display: flex;
justify-content: space-between;
align-items: center;
.search-container {
width: 30%;
height: 48px;
padding: 10px 10px 10px 0;
min-width: 200px;
max-width: 400px;
}
.toolbar-container{
padding: 4px;
}
}
.list-exp-bar-content {
<#-- 计算高度 -->
<#if ctrl.isShowTitleBar() && ctrl.isEnableSearch()>
height: calc(100% - 88px);
<#elseif ctrl.isShowTitleBar() && !ctrl.isEnableSearch()>
height: calc(100% - 40px);
<#elseif !ctrl.isShowTitleBar() && ctrl.isEnableSearch()>
height: calc(100% - 38px);
<#else>
height: 100%;
</#if>
overflow: auto;
margin-bottom: 10px;
}
.list-exp-bar-content2 {
height: 100%;
overflow: auto;
flex-grow: 1;
}
}
}
> .top-pane.ivu-split-pane {
> div {
padding-bottom: 10px;
}
}
> .bottom-pane.ivu-split-pane {
padding-top: 10px;
}
}
} }
<#ibizinclude> <#ibizinclude>
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<#if ctrl.render??> <#if ctrl.render??>
${ctrl.render.code} ${ctrl.render.code}
<#else> <#else>
<split class="app-dataview-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" @on-move-end="onSplitChange"> <split id="${ctrl.getCodeName()?lower_case}" class="app-dataview-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" mode="<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">horizontal<#else>vertical</#if>" @on-move-end="onSplitChange">
<div slot='left'> <div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">left<#else>top</#if>'>
<#if ctrl.isShowTitleBar()> <#if ctrl.isShowTitleBar()>
<div class='dataview-exp-bar-header'> <div class='dataview-exp-bar-header'>
<div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>卡片视图导航栏<#else>${ctrl.getTitle()}</#if></div> <div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>卡片视图导航栏<#else>${ctrl.getTitle()}</#if></div>
...@@ -38,11 +38,10 @@ ...@@ -38,11 +38,10 @@
</#if> </#if>
</div> </div>
</div> </div>
<div slot='right'> <div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">right<#else>bottom</#if>'>
<component <component
v-if="selection.view && !Object.is(this.selection.view.viewname, '')" v-if="selection.view && !Object.is(this.selection.view.viewname, '')"
:is="selection.view.viewname" :is="selection.view.viewname"
:key="$util.createUUID()"
class="viewcontainer2" class="viewcontainer2"
:viewDefaultUsage="false" :viewDefaultUsage="false"
:viewdata="JSON.stringify(selection.data)"> :viewdata="JSON.stringify(selection.data)">
...@@ -61,7 +60,7 @@ ...@@ -61,7 +60,7 @@
* 视图唯一标识 * 视图唯一标识
* *
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
@Prop() protected viewUID!:string; @Prop() protected viewUID!:string;
...@@ -70,16 +69,41 @@ ...@@ -70,16 +69,41 @@
* *
* @protected * @protected
* @type {(boolean)} * @type {(boolean)}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected isSingleSelect:boolean = true; protected isSingleSelect:boolean = true;
/**
* 呈现模式,可选值:horizontal或者vertical
*
* @protected
* @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected showMode:string ="<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">horizontal<#else>vertical</#if>";
/**
* 控件宽度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ctrlWidth:number = <#if ctrl.getWidth()??>${ctrl.getWidth()}<#else>0</#if>;
/**
* 控件高度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ctrlHeight: number = <#if ctrl.getHeight()??>${ctrl.getHeight()}<#else>0</#if>;
/** /**
* 搜素值 * 搜素值
* *
* @protected * @protected
* @type {(string)} * @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected searchText:string = ""; protected searchText:string = "";
...@@ -87,7 +111,7 @@ ...@@ -87,7 +111,7 @@
* 分割宽度 * 分割宽度
* *
* @type {number} * @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected split: number = 0.5; protected split: number = 0.5;
...@@ -98,7 +122,7 @@ ...@@ -98,7 +122,7 @@
* 导航视图名称 * 导航视图名称
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected navViewName: string = "<#if xDataControl.getNavPSAppView()??><#assign navPSAppView = xDataControl.getNavPSAppView() />${srffilepath2(navPSAppView.getCodeName())}</#if>"; protected navViewName: string = "<#if xDataControl.getNavPSAppView()??><#assign navPSAppView = xDataControl.getNavPSAppView() />${srffilepath2(navPSAppView.getCodeName())}</#if>";
...@@ -106,7 +130,7 @@ ...@@ -106,7 +130,7 @@
* 导航视图参数 * 导航视图参数
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected navViewParam: string = '<#if xDataControl.getNavViewParamJO()??>${xDataControl.getNavViewParamJO()}</#if>'; protected navViewParam: string = '<#if xDataControl.getNavViewParamJO()??>${xDataControl.getNavViewParamJO()}</#if>';
...@@ -114,7 +138,7 @@ ...@@ -114,7 +138,7 @@
* 导航过滤项 * 导航过滤项
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected navFilter: string = "<#if xDataControl.getNavFilter()??>${xDataControl.getNavFilter()}</#if>"; protected navFilter: string = "<#if xDataControl.getNavFilter()??>${xDataControl.getNavFilter()}</#if>";
</#if> </#if>
...@@ -123,7 +147,7 @@ ...@@ -123,7 +147,7 @@
* 显示处理提示 * 显示处理提示
* *
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
@Prop({ default: true }) protected showBusyIndicator!: boolean; @Prop({ default: true }) protected showBusyIndicator!: boolean;
...@@ -141,7 +165,7 @@ ...@@ -141,7 +165,7 @@
* 获取多项数据 * 获取多项数据
* *
* @returns {any[]} * @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public getDatas(): any[] { public getDatas(): any[] {
return []; return [];
...@@ -151,7 +175,7 @@ ...@@ -151,7 +175,7 @@
* 获取单项树 * 获取单项树
* *
* @returns {*} * @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public getData(): any { public getData(): any {
return null; return null;
...@@ -161,14 +185,14 @@ ...@@ -161,14 +185,14 @@
* 选中数据 * 选中数据
* *
* @type {*} * @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected selection: any = {}; protected selection: any = {};
/** /**
* split值变化事件 * split值变化事件
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public onSplitChange() { public onSplitChange() {
if(this.split){ if(this.split){
...@@ -179,7 +203,7 @@ ...@@ -179,7 +203,7 @@
/** /**
* Vue声明周期(组件初始化完毕) * Vue声明周期(组件初始化完毕)
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public created() { public created() {
this.afterCreated(); this.afterCreated();
...@@ -188,7 +212,7 @@ ...@@ -188,7 +212,7 @@
/** /**
* 执行created后的逻辑 * 执行created后的逻辑
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public afterCreated(){ public afterCreated(){
if (this.viewState) { if (this.viewState) {
...@@ -201,16 +225,46 @@ ...@@ -201,16 +225,46 @@
this.viewState.next({ tag: '${dataview.name}', action: action, data: data }); this.viewState.next({ tag: '${dataview.name}', action: action, data: data });
</#if> </#if>
}); });
} }
}
/**
* Vue声明周期(组件渲染完毕)
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public mounted() {
this.afterMounted();
}
/**
* 执行mounted后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterMounted(){
if(this.$store.getters.getViewSplit(this.viewUID)){ if(this.$store.getters.getViewSplit(this.viewUID)){
this.split = this.$store.getters.getViewSplit(this.viewUID); this.split = this.$store.getters.getViewSplit(this.viewUID);
} }else{
let containerWidth:number = (document.getElementById("${ctrl.getCodeName()?lower_case}") as any).offsetWidth;
let containerHeight:number = (document.getElementById("${ctrl.getCodeName()?lower_case}") as any).offsetHeight;
if(Object.is(this.showMode,'horizontal')){
if(this.ctrlWidth){
this.split = this.ctrlWidth/containerWidth;
}
}else{
if(this.ctrlHeight){
this.split = this.ctrlHeight/containerHeight;
}
}
this.$store.commit("setViewSplit",{viewUID:this.viewUID,viewSplit:this.split});
}
} }
/** /**
* vue 生命周期 * vue 生命周期
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected destroyed() { protected destroyed() {
this.afterDestroy(); this.afterDestroy();
...@@ -219,7 +273,7 @@ ...@@ -219,7 +273,7 @@
/** /**
* 执行destroyed后的逻辑 * 执行destroyed后的逻辑
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected afterDestroy() { protected afterDestroy() {
if (this.viewStateEvent) { if (this.viewStateEvent) {
...@@ -237,7 +291,7 @@ ...@@ -237,7 +291,7 @@
* @param {string} [tag] * @param {string} [tag]
* @param {*} [$event2] * @param {*} [$event2]
* @returns {void} * @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void { protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void {
let data:any = {}; let data:any = {};
...@@ -258,6 +312,7 @@ ...@@ -258,6 +312,7 @@
this.selection = {}; this.selection = {};
Object.assign(this.selection, { view: { viewname: this.navViewName }, data:data }); Object.assign(this.selection, { view: { viewname: this.navViewName }, data:data });
this.$emit('selectionchange',args); this.$emit('selectionchange',args);
this.$forceUpdate();
} }
/** /**
...@@ -267,7 +322,7 @@ ...@@ -267,7 +322,7 @@
* @param {string} [tag] * @param {string} [tag]
* @param {*} [$event2] * @param {*} [$event2]
* @returns {void} * @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected ${ctrl.name}_load(args: any[], tag?: string, $event2?: any): void { protected ${ctrl.name}_load(args: any[], tag?: string, $event2?: any): void {
this.$emit('load',args); this.$emit('load',args);
...@@ -276,7 +331,7 @@ ...@@ -276,7 +331,7 @@
/** /**
* 执行搜索 * 执行搜索
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected onSearch() { protected onSearch() {
<#if ctrl.getPSDEDataView()??> <#if ctrl.getPSDEDataView()??>
......
...@@ -67,6 +67,66 @@ ...@@ -67,6 +67,66 @@
padding-right: 10px; padding-right: 10px;
} }
} }
> .ivu-split-vertical{
> .ivu-split-pane {
> div {
height: 100%;
.dataview-exp-bar-header {
line-height: 50px;
border-bottom: 1px solid #ddd;
>div {
font-size: 18px;
i {
font-size: 20px;
margin-top: -2px;
}
}
}
.container-header{
display: flex;
justify-content: space-between;
align-items: center;
.search-container {
width: 30%;
height: 48px;
padding: 10px 10px 10px 0;
min-width: 200px;
max-width: 400px;
}
.toolbar-container{
padding: 4px;
}
}
.dataview-exp-bar-content {
<#-- 计算高度 -->
<#if ctrl.isShowTitleBar() && ctrl.isEnableSearch()>
height: calc(100% - 88px);
<#elseif ctrl.isShowTitleBar() && !ctrl.isEnableSearch()>
height: calc(100% - 40px);
<#elseif !ctrl.isShowTitleBar() && ctrl.isEnableSearch()>
height: calc(100% - 38px);
<#else>
height: 100%;
</#if>
overflow: auto;
margin-bottom: 10px;
}
.dataview-exp-bar-content2 {
height: 100%;
overflow: auto;
flex-grow: 1;
}
}
}
> .top-pane.ivu-split-pane {
> div {
padding-bottom: 10px;
}
}
> .bottom-pane.ivu-split-pane {
padding-top: 10px;
}
}
} }
<#ibizinclude> <#ibizinclude>
......
...@@ -2,24 +2,22 @@ ...@@ -2,24 +2,22 @@
../@MACRO/CSS/DEFAULT.less.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
/*** BEGIN:potal菜单 ***/ /*** BEGIN:potal菜单 ***/
.porlet{ .app-app-menu{
>.app-app-menu{ >.ivu-row{
>.ivu-row{ .ivu-card{
.ivu-card{ .ivu-card-body{
.ivu-card-body{ >p{
>p{ >.app-menus{
>.app-menus{ display: flex;
display: flex; flex-wrap: wrap;
flex-wrap: wrap; >div{
>div{ width: 100%;
width: 100%; margin-right: 10px;
margin-right: 10px; .ivu-card-body{
.ivu-card-body{ >div{
>div{ display: flex;
display: flex; >span{
>span{ margin-right: 12px;
margin-right: 12px;
}
} }
} }
} }
...@@ -29,4 +27,4 @@ ...@@ -29,4 +27,4 @@
} }
} }
} }
} }
\ No newline at end of file
<#-- 绘图X轴 -->
{
<#if item.getIndex()??>gridIndex:${item.getIndex()},</#if>
position:<#if item.getPosition()?? && item.getPosition() =='bottom'>"bottom"<#else>"top"</#if>,
type:<#if item.getType()??>'${item.getType()}'<#else>'category'</#if>,
name:<#if item.getCaption()??>'${item.getCaption()}'</#if>,
<#if item.getMinValue()??>min:${item.getMinValue()},</#if>
<#if item.getMaxValue()??>max:${item.getMaxValue()},</#if>
}
\ No newline at end of file
<#-- 绘图Y轴 -->
{
<#if item.getIndex()??>gridIndex:${item.getIndex()},</#if>
position:<#if item.getPosition()?? && item.getPosition() =='bottom'>"bottom"<#else>"top"</#if>,
type:<#if item.getType()?? && item.getType() == 'numeric'>'value'<#else>'${item.getType()}'</#if>,
name:<#if item.getCaption()??>'${item.getCaption()}'</#if>,
<#if item.getMinValue()??>min:${item.getMinValue()},</#if>
<#if item.getMaxValue()??>max:${item.getMaxValue()},</#if>
}
\ No newline at end of file
<#-- 绘图网格start -->
{
}
<#-- 绘图网格end -->
\ No newline at end of file
<#-- 柱状图序列start -->
{
name:'折线图',
type:'line',
xAxisIndex:0,
yAxisIndex:0,
encode: {
x: 'amount',
y: 'product'
}
}
<#-- 柱状图序列end -->
\ No newline at end of file
<#-- 折线图序列start -->
{
name:'<#if item.getCaption()??>${item.getCaption()}</#if>',
type:'line',
xAxisIndex:${item.getIndex()},
yAxisIndex:${item.getIndex()},
<#if item.getPSChartDataSet()??>
<#assign dataSet = item.getPSChartDataSet() />
dimensions: [<#if dataSet.getPSChartDataSetFields()??><#list dataSet.getPSChartDataSetFields() as dataSetField>'${dataSetField.getName()?lower_case}'<#if dataSetField_has_next>,</#if></#list></#if>],
</#if>
encode: {
x: '${item.getCatalogField()?lower_case}',
y: '${item.getValueField()?lower_case}'
}
}
<#-- 折线图序列end -->
\ No newline at end of file
<#-- 饼图序列start -->
{
}
<#-- 饼图序列end -->
\ No newline at end of file
<template>
<div class="app-data-chart <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>">
<#if ctrl.render??><#t>
${ctrl.render.code}
<#else><#t>
<div class="app-charts" :id="chartId" style="<#if ctrl.getWidth() gt 0>width: ${ctrl.getWidth()};</#if>height: <#if ctrl.getHeight() gt 0>${ctrl.getHeight()}px<#else>100%</#if>;padding: 6px 0;"></div>
</#if>
</div>
</template>
<#assign import_block>
import echarts from 'echarts';
import { ChartLineSeries } from '@/model/chart-detail';
</#assign>
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl
</#ibizinclude>
/**
* 获取多项数据
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public getDatas(): any[] {
return [];
}
/**
* 获取单项树
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public getData(): any {
return null;
}
/**
* 显示处理提示
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop({ default: true }) protected showBusyIndicator!: boolean;
/**
* 部件行为--fetch
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() protected fetchAction!: string;
/**
* Vue声明周期(组件初始化完毕)
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public created() {
this.afterCreated();
}
/**
* 执行created后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public afterCreated(){
if (this.viewState) {
this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
if (!Object.is(tag, this.name)) {
return;
}
if (Object.is('load', action)) {
this.load(data);
}
});
}
}
/**
* vue 生命周期
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected destroyed() {
this.afterDestroy();
}
/**
* 执行destroyed后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected afterDestroy() {
if (this.viewStateEvent) {
this.viewStateEvent.unsubscribe();
}
<#if destroyed_block??>
${destroyed_block}
</#if>
}
/**
* 图表div绑定的id
*
* @type {}
* @memberof ${srfclassname('${ctrl.name}')}
*/
public chartId:string = this.$util.createUUID();
/**
* echarts图表对象
*
* @type {}
* @memberof ${srfclassname('${ctrl.name}')}
*/
public myChart:any;
/**
* 初始化图表所需参数
*
* @type {}
* @memberof ${srfclassname('${ctrl.name}')}
*/
public chartOption:any = {
<#-- 标题start -->
<#if ctrl.getPSDEChartTitle()??>
<#assign title= ctrl.getPSDEChartTitle() />
title:{
show:<#if title.isShowTitle()>true<#else>false</#if> ,
text:'<#if title.getTitle()??>${title.getTitle()}</#if>',
subtext:'<#if title.getSubTitle()??>${title.getSubTitle()}</#if>'
},
</#if>
<#-- 标题end -->
<#-- 图例start -->
<#if ctrl.getPSDEChartLegend()??>
<#assign legend= ctrl.getPSDEChartLegend() />
legend:{
show:<#if legend.isShowLegend()>true<#else>false</#if>
},
</#if>
<#-- 图例end -->
<#-- 绘图网格start -->
<#if ctrl.getPSChartGrids()??>
grid:[
<@ibizindent blank=8>
<#list ctrl.getPSChartGrids() as chartGrid>
${P.getPartCode(chartGrid).code}<#if chartGrid_has_next>,</#if>
</#list>
</@ibizindent>
],
</#if>
<#-- 绘图网格end -->
<#-- X轴start -->
<#if ctrl.getPSChartXAxises()??>
xAxis: [
<@ibizindent blank=8>
<#list ctrl.getPSChartXAxises() as chartXAxise>
${P.getPartCode(chartXAxise).code}<#if chartXAxise_has_next>,</#if>
</#list>
</@ibizindent>
],
</#if>
<#-- X轴end -->
<#-- Y轴start -->
<#if ctrl.getPSChartYAxises()??>
yAxis:[
<@ibizindent blank=8>
<#list ctrl.getPSChartYAxises() as chartYAxise>
${P.getPartCode(chartYAxise).code}<#if chartYAxise_has_next>,</#if>
</#list>
</@ibizindent>
],
</#if>
<#-- Y轴end -->
<#-- 提示框组件start -->
tooltip:{
show:true
},
<#-- 提示框组件end -->
<#-- 数据集start -->
dataset:{
source:[
['Matcha Latte', 50, 30.4, 65.1, 53.3, 83.8, 98.7],
['Milk Tea', 100, 92.1, 85.7, 83.1, 73.4, 55.1],
['Cheese Cocoa', 50, 67.2, 79.5, 86.4, 65.2, 82.5],
['Walnut Brownie', 50, 67.1, 69.2, 72.4, 53.9, 39.1]
]
},
<#-- 数据集end -->
<#-- 序列start -->
series:[
<@ibizindent blank=8>
<#list ctrl.getPSDEChartSerieses() as chartSeriese>
${P.getPartCode(chartSeriese).code}<#if chartSeriese_has_next>,</#if>
</#list>
</@ibizindent>
]
<#-- 序列end -->
};
/**
* 图表基础配置参数
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.name}')}Service
*/
public defaultConfig: any = {
}
/**
* 刷新
*
* @param {*} [opt={}]
* @memberof ${srfclassname('${ctrl.name}')}
*/
protected refresh(opt: any = {}) {
this.load(opt);
}
/**
* 获取图表数据
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.name}')}
*/
public load(opt?:any) {
let _this = this;
const arg: any = { ...opt };
const parentdata: any = {};
this.$emit('beforeload', parentdata);
Object.assign(arg, parentdata);
Object.assign(arg,{viewparams:this.viewparams});
this.service.search(this.fetchAction,JSON.parse(JSON.stringify(this.context)),arg,this.showBusyIndicator).then((res) => {
if (res) {
console.log(res);
_this.drawCharts();
}
}).catch((error) => {
console.error(error);
});
}
/**
* 绘制图表
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.name}')}
*/
public drawCharts(){
if(!this.myChart){
let element:any = document.getElementById(this.chartId);
this.myChart = echarts.init(element);
}
this.myChart.setOption(this.chartOption);
this.myChart.resize();
}
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/CONTROL/CONTROL-BASE.style.ftl
</#ibizinclude>
\ No newline at end of file
<#assign content>
fetchAction="<#if ctrl.getFetchPSControlAction()?? && ctrl.getFetchPSControlAction().getPSAppDEMethod()??>${ctrl.getFetchPSControlAction().getPSAppDEMethod().getCodeName()}</#if>"
:showBusyIndicator="${ctrl.isShowBusyIndicator()?c}"
</#assign>
<#ibizinclude>
../@MACRO/HTML/DEFAULT.html.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
.app-data-chart {
width: 100%;
height: 100%;
}
\ No newline at end of file
<#ibizinclude>
../@MACRO/CONTROL/CONTROL.vue.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/MODEL/MODEL_HEADER.ts.ftl
</#ibizinclude>
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.getCodeName()}')}${srfclassname('${ctrl.name}')}Mode
*/
public getDataItems(): any[] {
return [
{
name:'query',
prop:'query'
},
]
}
<#ibizinclude>
../@MACRO/MODEL/MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
/**
* 查询数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public search(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise<any> {
const {data:Data,context:Context} = this.handleRequestData(action,context,data,true);
return new Promise((resolve: any, reject: any) => {
const _appEntityService: any = this.appEntityService;
let result: Promise<any>;
if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
result = _appEntityService[action](Context,Data, isloading);
}else{
result =_appEntityService.FetchDefault(Context,Data, isloading);
}
result.then((response) => {
resolve(response);
}).catch(response => {
reject(response);
});
});
}
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=CHART#NEW
\ No newline at end of file
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<#if ctrl.render??> <#if ctrl.render??>
${ctrl.render.code} ${ctrl.render.code}
<#else> <#else>
<split class="app-calendar-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" @on-move-end="onSplitChange"> <split id="${ctrl.getCodeName()?lower_case}" class="app-calendar-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" mode="<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">horizontal<#else>vertical</#if>" @on-move-end="onSplitChange">
<div slot='left'> <div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">left<#else>top</#if>'>
<#if ctrl.isShowTitleBar()> <#if ctrl.isShowTitleBar()>
<div class='calendar-exp-bar-header'> <div class='calendar-exp-bar-header'>
<div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>列表导航栏<#else>${ctrl.getTitle()}</#if></div> <div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>列表导航栏<#else>${ctrl.getTitle()}</#if></div>
...@@ -38,11 +38,10 @@ ...@@ -38,11 +38,10 @@
</#if> </#if>
</div> </div>
</div> </div>
<div slot='right'> <div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">right<#else>bottom</#if>'>
<component <component
v-if="selection.view && !Object.is(this.selection.view.viewname, '')" v-if="selection.view && !Object.is(this.selection.view.viewname, '')"
:is="selection.view.viewname" :is="selection.view.viewname"
:key="$util.createUUID()"
class="viewcontainer2" class="viewcontainer2"
:viewDefaultUsage="false" :viewDefaultUsage="false"
:viewdata="JSON.stringify(selection.data)"> :viewdata="JSON.stringify(selection.data)">
...@@ -61,7 +60,7 @@ ...@@ -61,7 +60,7 @@
* 视图唯一标识 * 视图唯一标识
* *
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
@Prop() protected viewUID!:string; @Prop() protected viewUID!:string;
...@@ -70,16 +69,41 @@ ...@@ -70,16 +69,41 @@
* *
* @protected * @protected
* @type {(boolean)} * @type {(boolean)}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected isSingleSelect:boolean = true; protected isSingleSelect:boolean = true;
/**
* 呈现模式,可选值:horizontal或者vertical
*
* @protected
* @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected showMode:string ="<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">horizontal<#else>vertical</#if>";
/**
* 控件宽度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ctrlWidth:number = <#if ctrl.getWidth()??>${ctrl.getWidth()}<#else>0</#if>;
/**
* 控件高度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ctrlHeight: number = <#if ctrl.getHeight()??>${ctrl.getHeight()}<#else>0</#if>;
/** /**
* 搜素值 * 搜素值
* *
* @protected * @protected
* @type {(string)} * @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected searchText:string = ""; protected searchText:string = "";
...@@ -87,7 +111,7 @@ ...@@ -87,7 +111,7 @@
* 分割宽度 * 分割宽度
* *
* @type {number} * @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected split: number = 0.5; protected split: number = 0.5;
...@@ -98,7 +122,7 @@ ...@@ -98,7 +122,7 @@
* 导航视图名称 * 导航视图名称
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected navViewName: any = { protected navViewName: any = {
<#if xDataControl.getPSSysCalendarItems()??> <#if xDataControl.getPSSysCalendarItems()??>
...@@ -112,7 +136,7 @@ ...@@ -112,7 +136,7 @@
* 导航视图参数 * 导航视图参数
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected navViewParam: any = { protected navViewParam: any = {
<#if xDataControl.getPSSysCalendarItems()??> <#if xDataControl.getPSSysCalendarItems()??>
...@@ -126,7 +150,7 @@ ...@@ -126,7 +150,7 @@
* 导航过滤项 * 导航过滤项
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
</#if> </#if>
protected navFilter: any = { protected navFilter: any = {
...@@ -141,7 +165,7 @@ ...@@ -141,7 +165,7 @@
* 显示处理提示 * 显示处理提示
* *
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
@Prop({ default: true }) protected showBusyIndicator!: boolean; @Prop({ default: true }) protected showBusyIndicator!: boolean;
...@@ -159,7 +183,7 @@ ...@@ -159,7 +183,7 @@
* 获取多项数据 * 获取多项数据
* *
* @returns {any[]} * @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public getDatas(): any[] { public getDatas(): any[] {
return []; return [];
...@@ -169,7 +193,7 @@ ...@@ -169,7 +193,7 @@
* 获取单项树 * 获取单项树
* *
* @returns {*} * @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public getData(): any { public getData(): any {
return null; return null;
...@@ -179,16 +203,27 @@ ...@@ -179,16 +203,27 @@
* 选中数据 * 选中数据
* *
* @type {*} * @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected selection: any = {}; protected selection: any = {};
/** /**
* split值变化事件 * split值变化事件
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public onSplitChange() { public onSplitChange() {
<#if ctrl.getXDataPSControl()??>
<#assign xDataControl = ctrl.getXDataPSControl() />
if(this.$refs.${xDataControl.getName()}){
const calendarContainer:any = this.$refs.${xDataControl.getName()};
if(calendarContainer.$refs.calendar){
const appCalendar: any = calendarContainer.$refs.calendar;
const api = appCalendar.getApi();
api.updateSize();
}
}
</#if>
if(this.split){ if(this.split){
this.$store.commit("setViewSplit",{viewUID:this.viewUID,viewSplit:this.split}); this.$store.commit("setViewSplit",{viewUID:this.viewUID,viewSplit:this.split});
} }
...@@ -197,7 +232,7 @@ ...@@ -197,7 +232,7 @@
/** /**
* Vue声明周期(组件初始化完毕) * Vue声明周期(组件初始化完毕)
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public created() { public created() {
this.afterCreated(); this.afterCreated();
...@@ -206,7 +241,7 @@ ...@@ -206,7 +241,7 @@
/** /**
* 执行created后的逻辑 * 执行created后的逻辑
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public afterCreated(){ public afterCreated(){
if (this.viewState) { if (this.viewState) {
...@@ -220,15 +255,45 @@ ...@@ -220,15 +255,45 @@
</#if> </#if>
}); });
} }
}
/**
* Vue声明周期(组件渲染完毕)
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public mounted() {
this.afterMounted();
}
/**
* 执行mounted后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterMounted(){
if(this.$store.getters.getViewSplit(this.viewUID)){ if(this.$store.getters.getViewSplit(this.viewUID)){
this.split = this.$store.getters.getViewSplit(this.viewUID); this.split = this.$store.getters.getViewSplit(this.viewUID);
} }else{
let containerWidth:number = (document.getElementById("${ctrl.getCodeName()?lower_case}") as any).offsetWidth;
let containerHeight:number = (document.getElementById("${ctrl.getCodeName()?lower_case}") as any).offsetHeight;
if(Object.is(this.showMode,'horizontal')){
if(this.ctrlWidth){
this.split = this.ctrlWidth/containerWidth;
}
}else{
if(this.ctrlHeight){
this.split = this.ctrlHeight/containerHeight;
}
}
this.$store.commit("setViewSplit",{viewUID:this.viewUID,viewSplit:this.split});
}
} }
/** /**
* vue 生命周期 * vue 生命周期
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected destroyed() { protected destroyed() {
this.afterDestroy(); this.afterDestroy();
...@@ -237,7 +302,7 @@ ...@@ -237,7 +302,7 @@
/** /**
* 执行destroyed后的逻辑 * 执行destroyed后的逻辑
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected afterDestroy() { protected afterDestroy() {
if (this.viewStateEvent) { if (this.viewStateEvent) {
...@@ -251,7 +316,7 @@ ...@@ -251,7 +316,7 @@
/** /**
* ${ctrl.name}的选中数据事件 * ${ctrl.name}的选中数据事件
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void { protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void {
let data:any = {}; let data:any = {};
...@@ -277,12 +342,13 @@ ...@@ -277,12 +342,13 @@
this.selection = {}; this.selection = {};
Object.assign(this.selection, { view: { viewname: this.navViewName[arg.itemType] }, data:data }); Object.assign(this.selection, { view: { viewname: this.navViewName[arg.itemType] }, data:data });
this.$emit('selectionchange',args); this.$emit('selectionchange',args);
this.$forceUpdate();
} }
/** /**
* ${ctrl.name}的load完成事件 * ${ctrl.name}的load完成事件
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected ${ctrl.name}_load(args:any, tag?: string, $event2?: any){ protected ${ctrl.name}_load(args:any, tag?: string, $event2?: any){
this.$emit('load',args); this.$emit('load',args);
...@@ -291,7 +357,7 @@ ...@@ -291,7 +357,7 @@
/** /**
* 执行搜索 * 执行搜索
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected onSearch($event:any) { protected onSearch($event:any) {
<#if ctrl.getXDataPSControl()??> <#if ctrl.getXDataPSControl()??>
......
...@@ -67,6 +67,69 @@ ...@@ -67,6 +67,69 @@
padding-right: 10px; padding-right: 10px;
} }
} }
> .ivu-split-vertical{
> .ivu-split-pane {
> div {
height: 100%;
overflow: auto;
display: flex;
flex-direction: column;
.calendar-exp-bar-header {
line-height: 50px;
border-bottom: 1px solid #ddd;
>div {
font-size: 18px;
i {
font-size: 20px;
margin-top: -2px;
}
}
}
.container-header{
display: flex;
justify-content: space-between;
align-items: center;
.search-container {
width: 30%;
height: 48px;
padding: 10px 10px 10px 0;
min-width: 200px;
max-width: 400px;
}
.toolbar-container{
padding: 4px;
}
}
.calendar-exp-bar-content {
<#-- 计算高度 -->
<#if ctrl.isShowTitleBar() && ctrl.isEnableSearch()>
height: calc(100% - 88px);
<#elseif ctrl.isShowTitleBar() && !ctrl.isEnableSearch()>
height: calc(100% - 40px);
<#elseif !ctrl.isShowTitleBar() && ctrl.isEnableSearch()>
height: calc(100% - 38px);
<#else>
height: 100%;
</#if>
overflow: auto;
margin-bottom: 10px;
}
.calendar-exp-bar-content2 {
height: 100%;
overflow: auto;
flex-grow: 1;
}
}
}
> .top-pane.ivu-split-pane {
> div {
padding-bottom: 10px;
}
}
> .bottom-pane.ivu-split-pane {
padding-top: 10px;
}
}
} }
<#ibizinclude> <#ibizinclude>
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
class="design-tree" class="design-tree"
node-key="id" node-key="id"
lazy lazy
:show-checkbox="!isSingleSelect"
:check-on-click-node="!isSingleSelect"
:default-expanded-keys="expandedKeys" :default-expanded-keys="expandedKeys"
:props="{ :props="{
label: 'text', label: 'text',
...@@ -15,6 +17,7 @@ ...@@ -15,6 +17,7 @@
:load="load" :load="load"
:highlight-current="true" :highlight-current="true"
:expand-on-click-node="false" :expand-on-click-node="false"
@check="onCheck"
@current-change="selectionChange" @current-change="selectionChange"
:filter-node-method="filterNode" :filter-node-method="filterNode"
> >
...@@ -54,7 +57,7 @@ ...@@ -54,7 +57,7 @@
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
public getDatas(): any[] { public getDatas(): any[] {
return [this.selectData]; return [this.selectedNodes];
} }
/** /**
...@@ -64,9 +67,17 @@ ...@@ -64,9 +67,17 @@
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
public getData(): any { public getData(): any {
return this.selectData; return this.selectedNodes;
} }
/**
* 是否单选
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop({ default: true }) protected isSingleSelect!: boolean;
/** /**
* 是否默认选中第一条数据 * 是否默认选中第一条数据
* *
...@@ -92,12 +103,59 @@ ...@@ -92,12 +103,59 @@
protected inited: boolean = false; protected inited: boolean = false;
/** /**
* 选中数据 * 已选中数据集合
* *
* @type {*} * @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
protected selectData: any = {}; protected selectedNodes: any = [];
/**
* 当前选中数据项
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected currentselectedNode: any = {};
/**
* 选中数据字符串
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() protected selectedData?: string;
/**
* 选中值变化
*
* @param {*} newVal
* @param {*} oldVal
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Watch('selectedData')
public onValueChange(newVal: any, oldVal: any) {
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;
let AllnodesArray : any[] = [];
for (const key in AllnodesObj) {
if (AllnodesObj.hasOwnProperty(key)) {
AllnodesArray.push(AllnodesObj[key].data);
}
}
this.setDefaultSelection(AllnodesArray);
}
}
/**
* 回显选中数据集合
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected echoselectedNodes:any[] = this.selectedData ? ( this.isSingleSelect ? [JSON.parse(this.selectedData)[0]] : JSON.parse(this.selectedData)) : [];
/** /**
* 部件行为--update * 部件行为--update
...@@ -186,17 +244,43 @@ ...@@ -186,17 +244,43 @@
* *
* @private * @private
* @param {*} data * @param {*} data
* @param {*} data 当前节点对应传入对象
* @param {*} checkedState 树目前选中状态对象
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
private onCheck(data: any, checkedState: any) {
// 处理多选数据
if(!this.isSingleSelect){
let leafNodes = checkedState.checkedNodes.filter((item:any) => item.leaf);
this.selectedNodes = JSON.parse(JSON.stringify(leafNodes));
this.$emit('selectionchange', this.selectedNodes);
}
}
/**
* 选中数据变更事件
*
* @private
* @param {*} data 节点对应传入对象
* @param {*} node 节点对应node对象
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
private selectionChange(data: any, node: any) { private selectionChange(data: any, node: any) {
this.selectData = {}; // 禁用项处理
if (data.disableselect) { if (data.disabled){
node.isCurrent = false; node.isCurrent = false;
this.$emit('selectionchange', []);
return; return;
} }
Object.assign(this.selectData, data); // 只处理最底层子节点
this.$emit('selectionchange', [this.selectData]); if(data.leaf){
this.currentselectedNode = JSON.parse(JSON.stringify(data));
// 单选直接替换
if(this.isSingleSelect){
this.selectedNodes = [this.currentselectedNode];
this.$emit('selectionchange', this.selectedNodes);
}
// 多选用check方法
}
} }
/** /**
...@@ -290,11 +374,11 @@ ...@@ -290,11 +374,11 @@
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
protected refresh_parent(): void { protected refresh_parent(): void {
if (Object.keys(this.selectData).length === 0) { if (Object.keys(this.currentselectedNode).length === 0) {
return; return;
} }
const tree: any = this.$refs.${ctrl.name}; const tree: any = this.$refs.${ctrl.name};
const node: any = tree.getNode(this.selectData.id); const node: any = tree.getNode(this.currentselectedNode.id);
if (!node || !node.parent) { if (!node || !node.parent) {
return; return;
} }
...@@ -335,9 +419,9 @@ ...@@ -335,9 +419,9 @@
} }
this.nodes = response.data; this.nodes = response.data;
resolve([..._items]); resolve([..._items]);
if(this.isSelectFirstDefault){ let isRoot = Object.is(node.level,0);
this.setDefaultSelection(_items, true); let isSelectedAll = node.checked;
} this.setDefaultSelection(_items, isRoot, isSelectedAll);
this.$emit("load", _items); this.$emit("load", _items);
}).catch((response: any) => { }).catch((response: any) => {
resolve([]); resolve([]);
...@@ -355,10 +439,10 @@ ...@@ -355,10 +439,10 @@
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
protected refresh(args: any[]): void { protected refresh(args: any[]): void {
if (Object.keys(this.selectData).length === 0) { if (Object.keys(this.currentselectedNode).length === 0) {
return; return;
} }
const id: string = this.selectData.id; const id: string = this.currentselectedNode.id;
const param: any = { srfnodeid: id }; const param: any = { srfnodeid: id };
Object.assign(param, this.parentData); Object.assign(param, this.parentData);
this.refresh_node(param, false); this.refresh_node(param, false);
...@@ -369,7 +453,7 @@ ...@@ -369,7 +453,7 @@
* *
* @private * @private
* @param {*} [arg={}] * @param {*} [arg={}]
* @param {boolean} parentnode * @param {boolean} parentnode 是否是刷新父节点
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
private refresh_node(arg: any = {}, parentnode: boolean): void { private refresh_node(arg: any = {}, parentnode: boolean): void {
...@@ -386,11 +470,9 @@ ...@@ -386,11 +470,9 @@
const tree: any = this.$refs.${ctrl.name}; const tree: any = this.$refs.${ctrl.name};
tree.updateKeyChildren(id, _items); tree.updateKeyChildren(id, _items);
if (parentnode) { if (parentnode) {
this.selectData = {}; this.currentselectedNode = {};
}
if(this.isSelectFirstDefault){
this.setDefaultSelection(_items);
} }
this.setDefaultSelection(_items);
}).catch((response: any) => { }).catch((response: any) => {
if (response && response.status === 401) { if (response && response.status === 401) {
return; return;
...@@ -400,7 +482,7 @@ ...@@ -400,7 +482,7 @@
} }
/** /**
* 格式化数据 * 默认展开节点
* *
* @private * @private
* @param {any[]} items * @param {any[]} items
...@@ -418,35 +500,76 @@ ...@@ -418,35 +500,76 @@
} }
/** /**
* 设置默认选中 * 设置默认选中,回显数项,选中所有子节点
* *
* @param {any[]} items * @param {any[]} items 当前节点所有子节点集合
* @param {any[]} isRoot 是否是加载根节点 * @param {boolean} isRoot 是否是加载根节点
* @memberof ${srfclassname('${ctrl.codeName}')} * @param {boolean} isSelectedAll 是否选中所有子节点
*/ * @memberof MainTree
protected setDefaultSelection(items: any[], isRoot:boolean = false): void { */
let index = items.findIndex((item: any) => item.selected); protected setDefaultSelection(items: any[], isRoot: boolean = false, isSelectedAll: boolean = false): void {
if(index === -1) { let defaultData: any;
if(isRoot){ // 导航中选中第一条配置的默认选中,没有选中第一条
index = 0; if(this.isSelectFirstDefault){
}else{ if(this.isSingleSelect){
return; let index = items.findIndex((item: any) => item.selected);
if(index === -1) {
if(isRoot){
index = 0;
}else{
return;
}
}
defaultData = items[index];
this.setTreeNodeHighLight(defaultData);
this.currentselectedNode = JSON.parse(JSON.stringify(defaultData));
if(defaultData.leaf){
this.selectedNodes = [this.currentselectedNode];
this.$emit('selectionchange', this.selectedNodes);
}
} }
} }
const data = items[index]; // 已选数据的回显
this.setTreeNodeHighLight(data); if(this.echoselectedNodes && this.echoselectedNodes.length > 0){
this.$emit('selectionchange', [this.selectData]); let checkedNodes = items.filter((item:any)=>{
return this.echoselectedNodes.some((val:any)=> {
if(Object.is(item.srfkey,val.srfkey) && Object.is(item.srfmajortext,val.srfmajortext)){
val.used = true;
return true;
}
});
});
if(checkedNodes.length > 0){
this.echoselectedNodes = this.echoselectedNodes.filter((item:any)=> !item.used);
// 父节点选中时,不需要执行这段,会选中所有子节点
if(!isSelectedAll){
if(this.isSingleSelect){
this.setTreeNodeHighLight(checkedNodes[0]);
this.currentselectedNode = JSON.parse(JSON.stringify(checkedNodes[0]));
this.selectedNodes = [this.currentselectedNode];
}else{
this.selectedNodes = this.selectedNodes.concat(checkedNodes);
const tree: any = this.$refs.treeexpbar_tree;
tree.setCheckedNodes(this.selectedNodes);
}
}
}
}
// 父节点选中时,选中所有子节点
if(isSelectedAll){
let leafNodes = items.filter((item:any) => item.leaf);
this.selectedNodes = this.selectedNodes.concat(leafNodes);
this.$emit('selectionchange', this.selectedNodes);
}
} }
/** /**
* 设置选中 * 设置选中高亮
* *
* @param {*} data * @param {*} data
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
protected setTreeNodeHighLight(data: any): void { protected setTreeNodeHighLight(data: any): void {
this.selectData = {};
Object.assign(this.selectData, data);
const tree: any = this.$refs.${ctrl.name}; const tree: any = this.$refs.${ctrl.name};
tree.setCurrentKey(data.id); tree.setCurrentKey(data.id);
} }
...@@ -462,7 +585,7 @@ ...@@ -462,7 +585,7 @@
let content; let content;
if (node && node.data) { if (node && node.data) {
const data: any = node.data; const data: any = node.data;
this.selectData = { ...data }; this.currentselectedNode = { ...data };
const tags: string[] = data.id.split(';'); const tags: string[] = data.id.split(';');
<#-- <#if ctrl.getPSControls()??> <#-- <#if ctrl.getPSControls()??>
<#list ctrl.getPSControls() as childCtrl> <#list ctrl.getPSControls() as childCtrl>
......
...@@ -11,6 +11,10 @@ ...@@ -11,6 +11,10 @@
<#if view.getViewType() == 'DETREEEXPVIEW'> <#if view.getViewType() == 'DETREEEXPVIEW'>
:isSelectFirstDefault="true" :isSelectFirstDefault="true"
</#if> </#if>
<#if view.getViewType() == 'DEPICKUPTREEVIEW'>
:isSingleSelect="isSingleSelect"
:selectedData="selectedData"
</#if>
</#assign> </#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/HTML/DEFAULT.html.ftl ../@MACRO/HTML/DEFAULT.html.ftl
......
...@@ -189,7 +189,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -189,7 +189,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
Object.assign(treeNode, { srfmajortext: treeNode.text }); Object.assign(treeNode, { srfmajortext: treeNode.text });
let strNodeId: string = '${node.getNodeType()?j_string}'; let strNodeId: string = '${node.getNodeType()?j_string}';
<#if node.getNodeValue()?? && node.getNodeValue()?length gt 0> <#if node.getNodeValue()?? && node.getNodeValue()?length gt 0>
Object.assign(treeNode, { srfkey: '${node.getNodeValue()?j_string}' }); Object.assign(treeNode, { srfkey: '${node.getNodeValue()?j_string}' });
strNodeId += this.TREENODE_SEPARATOR; strNodeId += this.TREENODE_SEPARATOR;
strNodeId += '${node.getNodeValue()?j_string}'; strNodeId += '${node.getNodeValue()?j_string}';
...@@ -199,13 +199,13 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -199,13 +199,13 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
strNodeId += filter.realnodeid; strNodeId += filter.realnodeid;
</#if> </#if>
<#else> <#else>
// 没有指定节点值,直接使用父节点值 // 没有指定节点值,直接使用父节点值
Object.assign(treeNode, { srfkey: filter.realnodeid }); Object.assign(treeNode, { srfkey: filter.realnodeid });
strNodeId += this.TREENODE_SEPARATOR; strNodeId += this.TREENODE_SEPARATOR;
strNodeId += filter.realnodeid; strNodeId += filter.realnodeid;
</#if> </#if>
Object.assign(treeNode, { id: strNodeId }); Object.assign(treeNode, { id: strNodeId });
<#if node.getPSSysImage()??> <#if node.getPSSysImage()??>
...@@ -222,7 +222,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -222,7 +222,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
</#if> </#if>
<#if node.isDisableSelect()> <#if node.isDisableSelect()>
Object.assign(treeNode, { disableselect: true }); Object.assign(treeNode, { disabled: true });
</#if> </#if>
<#if node.isExpanded()> <#if node.isExpanded()>
...@@ -285,7 +285,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -285,7 +285,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
Object.assign(treeNode, { enablecheck: true }); Object.assign(treeNode, { enablecheck: true });
</#if> </#if>
<#if node.isDisableSelect()> <#if node.isDisableSelect()>
Object.assign(treeNode, { disableselect: true }); Object.assign(treeNode, { disabled: true });
</#if> </#if>
<#if node.isExpanded()> <#if node.isExpanded()>
<#if node.isExpandFirstOnly()> <#if node.isExpandFirstOnly()>
...@@ -384,7 +384,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -384,7 +384,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
Object.assign(treeNode, { enablecheck: true }); Object.assign(treeNode, { enablecheck: true });
</#if> </#if>
<#if node.isDisableSelect()> <#if node.isDisableSelect()>
Object.assign(treeNode, { disableselect: true }); Object.assign(treeNode, { disabled: true });
</#if> </#if>
<#if node.isExpanded()> <#if node.isExpanded()>
<#if node.isExpandFirstOnly()> <#if node.isExpandFirstOnly()>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<#if ctrl.render??> <#if ctrl.render??>
${ctrl.render.code} ${ctrl.render.code}
<#else> <#else>
<split class='app-tree-exp-bar' v-model="split" @on-move-end="onSplitChange"> <split id="${ctrl.getCodeName()?lower_case}" class='app-tree-exp-bar' v-model="split" mode="horizontal" @on-move-end="onSplitChange">
<div slot='left'> <div slot='left'>
<#if ctrl.isShowTitleBar()> <#if ctrl.isShowTitleBar()>
<div class='tree-exp-bar-header'> <div class='tree-exp-bar-header'>
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
<component <component
v-if="selection.view && !Object.is(this.selection.view.viewname, '')" v-if="selection.view && !Object.is(this.selection.view.viewname, '')"
:is="selection.view.viewname" :is="selection.view.viewname"
:key="$util.createUUID()"
class="viewcontainer2" class="viewcontainer2"
:viewDefaultUsage="false" :viewDefaultUsage="false"
:viewdata="JSON.stringify(selection.data)" :viewdata="JSON.stringify(selection.data)"
...@@ -50,7 +49,7 @@ ...@@ -50,7 +49,7 @@
* 视图唯一标识 * 视图唯一标识
* *
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
@Prop() protected viewUID!:string; @Prop() protected viewUID!:string;
...@@ -58,7 +57,7 @@ ...@@ -58,7 +57,7 @@
* 获取多项数据 * 获取多项数据
* *
* @returns {any[]} * @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public getDatas(): any[] { public getDatas(): any[] {
return []; return [];
...@@ -68,27 +67,33 @@ ...@@ -68,27 +67,33 @@
* 获取单项树 * 获取单项树
* *
* @returns {*} * @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public getData(): any { public getData(): any {
return {}; return {};
} }
/** /**
* 选中数据 * 选中数据
* *
* @type {*} * @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected selection: any = {}; protected selection: any = {};
/**
* 控件宽度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ctrlWidth:number = <#if ctrl.getWidth()??>${ctrl.getWidth()}<#else>0</#if>;
/** /**
* 过滤值 * 过滤值
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected srfnodefilter: string = ''; protected srfnodefilter: string = '';
...@@ -97,7 +102,7 @@ ...@@ -97,7 +102,7 @@
* *
* @private * @private
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
private istLoadDefaultRefView: boolean = false; private istLoadDefaultRefView: boolean = false;
...@@ -105,14 +110,14 @@ ...@@ -105,14 +110,14 @@
* 分割宽度 * 分割宽度
* *
* @type {number} * @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected split: number = 0.2; protected split: number = 0.2;
/** /**
* split值变化事件 * split值变化事件
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public onSplitChange() { public onSplitChange() {
if(this.split){ if(this.split){
...@@ -125,7 +130,7 @@ ...@@ -125,7 +130,7 @@
* *
* @param {*} [arg={}] * @param {*} [arg={}]
* @returns {*} * @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected getExpItemView(arg: any = {}): any { protected getExpItemView(arg: any = {}): any {
let expmode = arg.nodetype.toUpperCase(); let expmode = arg.nodetype.toUpperCase();
...@@ -156,7 +161,7 @@ ...@@ -156,7 +161,7 @@
* @param {string} [tag] * @param {string} [tag]
* @param {*} [$event2] * @param {*} [$event2]
* @returns {void} * @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void { protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void {
if (args.length === 0) { if (args.length === 0) {
...@@ -184,6 +189,7 @@ ...@@ -184,6 +189,7 @@
this.selection = {}; this.selection = {};
Object.assign(this.selection, { view: { viewname: refview.viewname }, data: parentdata }); Object.assign(this.selection, { view: { viewname: refview.viewname }, data: parentdata });
this.$emit('selectionchange',args); this.$emit('selectionchange',args);
this.$forceUpdate();
} }
/** /**
...@@ -193,7 +199,7 @@ ...@@ -193,7 +199,7 @@
* @param {string} [tag] * @param {string} [tag]
* @param {*} [$event2] * @param {*} [$event2]
* @returns {void} * @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected ${ctrl.name}_load(args: any[], tag?: string, $event2?: any): void { protected ${ctrl.name}_load(args: any[], tag?: string, $event2?: any): void {
this.$emit('load',args); this.$emit('load',args);
...@@ -202,7 +208,7 @@ ...@@ -202,7 +208,7 @@
/** /**
* 执行搜索 * 执行搜索
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected onSearch(): void { protected onSearch(): void {
<#if ctrl.getPSDETree()??> <#if ctrl.getPSDETree()??>
...@@ -215,7 +221,7 @@ ...@@ -215,7 +221,7 @@
/** /**
* vue 声明周期 * vue 声明周期
* *
* @memberof @memberof ${srfclassname('${ctrl.codeName}')} * @memberof @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected created() { protected created() {
this.afterCreated(); this.afterCreated();
...@@ -224,7 +230,7 @@ ...@@ -224,7 +230,7 @@
/** /**
* 执行created后的逻辑 * 执行created后的逻辑
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected afterCreated(){ protected afterCreated(){
if (this.viewState) { if (this.viewState) {
...@@ -239,15 +245,39 @@ ...@@ -239,15 +245,39 @@
</#if> </#if>
}); });
} }
}
/**
* Vue声明周期(组件渲染完毕)
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public mounted() {
this.afterMounted();
}
/**
* 执行mounted后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterMounted(){
if(this.$store.getters.getViewSplit(this.viewUID)){ if(this.$store.getters.getViewSplit(this.viewUID)){
this.split = this.$store.getters.getViewSplit(this.viewUID); this.split = this.$store.getters.getViewSplit(this.viewUID);
} }else{
let containerWidth:number = (document.getElementById("${ctrl.getCodeName()?lower_case}") as any).offsetWidth;
if(this.ctrlWidth){
this.split = this.ctrlWidth/containerWidth;
}
this.$store.commit("setViewSplit",{viewUID:this.viewUID,viewSplit:this.split});
}
} }
/** /**
* vue 生命周期 * vue 生命周期
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected destroyed() { protected destroyed() {
this.afterDestroy(); this.afterDestroy();
...@@ -256,7 +286,7 @@ ...@@ -256,7 +286,7 @@
/** /**
* 执行destroyed后的逻辑 * 执行destroyed后的逻辑
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected afterDestroy() { protected afterDestroy() {
if (this.viewStateEvent) { if (this.viewStateEvent) {
...@@ -271,7 +301,7 @@ ...@@ -271,7 +301,7 @@
* 视图数据变化 * 视图数据变化
* *
* @param {*} $event * @param {*} $event
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected onViewDatasChange($event: any): void { protected onViewDatasChange($event: any): void {
this.$emit('selectionchange', $event); this.$emit('selectionchange', $event);
...@@ -281,7 +311,7 @@ ...@@ -281,7 +311,7 @@
* 视图数据被激活 * 视图数据被激活
* *
* @param {*} $event * @param {*} $event
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected viewDatasActivated($event: any): void { protected viewDatasActivated($event: any): void {
this.$emit('activated', $event); this.$emit('activated', $event);
...@@ -291,7 +321,7 @@ ...@@ -291,7 +321,7 @@
* 视图数据加载完成 * 视图数据加载完成
* *
* @param {*} $event * @param {*} $event
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected onViewLoad($event: any): void { protected onViewLoad($event: any): void {
this.$emit('load', $event); this.$emit('load', $event);
......
...@@ -22,8 +22,11 @@ ...@@ -22,8 +22,11 @@
} }
} }
.search-content { .search-content {
width: 30%;
height: 48px; height: 48px;
padding: 10px 10px 10px 0; padding: 10px 10px 10px 0;
min-width: 200px;
max-width: 400px;
} }
.tree-exp-content { .tree-exp-content {
<#-- 计算高度 --> <#-- 计算高度 -->
...@@ -52,6 +55,9 @@ ...@@ -52,6 +55,9 @@
padding-left: 10px; padding-left: 10px;
} }
} }
> .left-pane.ivu-split-pane {
padding-right: 10px;
}
} }
} }
......
<div style="height:${item.getContentHeight()}px;"><iframe src='${item.getIFrameUrl()}'></iframe></div> <div style="height:${item.getContentHeight()}px"><iframe src='${item.getIFrameUrl()}'></iframe></div>
...@@ -371,6 +371,13 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators'; ...@@ -371,6 +371,13 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
private onFormLoad(data: any = {},action:string): void { private onFormLoad(data: any = {},action:string): void {
<#if de??>
if(Object.is(action,"save") || Object.is(action,"autoSave"))
// 更新context的实体主键
if(data.${appde.getCodeName()?lower_case}){
Object.assign(this.context,{${appde.getCodeName()?lower_case}:data.${appde.getCodeName()?lower_case}})
}
</#if>
this.setFormEnableCond(data); this.setFormEnableCond(data);
this.fillForm(data,action); this.fillForm(data,action);
<#if ctrl.getControlType() == 'FORM'> <#if ctrl.getControlType() == 'FORM'>
......
...@@ -68,7 +68,11 @@ ...@@ -68,7 +68,11 @@
<#-- END:前端绘制代码表 --> <#-- END:前端绘制代码表 -->
<#else> <#else>
<#-- BEGIN:常规显示 --> <#-- BEGIN:常规显示 -->
<#if item.getPSDEGridEditItem()?? && item.getPSDEGridEditItem().getPSEditorType?? && item.getPSDEGridEditItem().getPSEditorType()??>
<app-span editorType="${item.getPSDEGridEditItem().getPSEditorType().getStandardPSEditorType()}" :data="row.${item.getName()?lower_case}"></app-span>
<#else>
<span>{{row.${item.getName()?lower_case}}}</span> <span>{{row.${item.getName()?lower_case}}}</span>
</#if>
<#-- END:常规显示 --> <#-- END:常规显示 -->
</#if> </#if>
</template> </template>
......
...@@ -17,8 +17,9 @@ ...@@ -17,8 +17,9 @@
:summary-method="getSummaries" :summary-method="getSummaries"
</#if> </#if>
<#-- 表格聚合end --> <#-- 表格聚合end -->
stripe :height="isEnablePagingBar && items.length > 0 ? 'calc(100% - 50px)' : '100%'" :height="isEnablePagingBar && items.length > 0 ? 'calc(100% - 50px)' : '100%'"
:highlight-current-row ="isSingleSelect" :highlight-current-row ="isSingleSelect"
:row-class-name="getRowClassName"
@row-click="rowClick($event)" @row-click="rowClick($event)"
@select-all="selectAll($event)" @select-all="selectAll($event)"
@select="select($event)" @select="select($event)"
...@@ -270,6 +271,51 @@ import CodeListService from "@service/app/codelist-service"; ...@@ -270,6 +271,51 @@ import CodeListService from "@service/app/codelist-service";
*/ */
@Prop() protected isSingleSelect?: boolean; @Prop() protected isSingleSelect?: boolean;
/**
* 选中数据字符串
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() protected selectedData?: string;
/**
* 选中值变化
*
* @param {*} newVal
* @param {*} oldVal
* @memberof MainTree
*/
@Watch('selectedData')
public onValueChange(newVal: any, oldVal: any) {
this.selections = [];
if(this.selectedData){
const refs: any = this.$refs;
if (refs.multipleTable) {
refs.multipleTable.clearSelection();
JSON.parse(this.selectedData).forEach((selection:any)=>{
let selectedItem = this.items.find((item:any)=>{
return Object.is(item.srfkey, selection.srfkey);
});
if(selectedItem){
this.rowClick(selectedItem);
}
});
}
}
}
/**
* 表格行数据默认激活模式
* 0 不激活
* 1 单击激活
* 2 双击激活
*
* @type {(number | 0 | 1 | 2)}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop({default: 2}) protected gridRowActiveMode!: number;
/** /**
* 是否开启行编辑 * 是否开启行编辑
* *
...@@ -462,11 +508,11 @@ import CodeListService from "@service/app/codelist-service"; ...@@ -462,11 +508,11 @@ import CodeListService from "@service/app/codelist-service";
if(_this.isSelectFirstDefault){ if(_this.isSelectFirstDefault){
_this.rowClick(_this.items[0]); _this.rowClick(_this.items[0]);
} }
if(_this.context.selectedData){ if(_this.selectedData){
const refs: any = _this.$refs; const refs: any = _this.$refs;
if (refs.multipleTable) { if (refs.multipleTable) {
refs.multipleTable.clearSelection(); refs.multipleTable.clearSelection();
_this.context.selectedData.forEach((selection:any)=>{ JSON.parse(_this.selectedData).forEach((selection:any)=>{
let selectedItem = _this.items.find((item:any)=>{ let selectedItem = _this.items.find((item:any)=>{
return Object.is(item.srfkey, selection.srfkey); return Object.is(item.srfkey, selection.srfkey);
}); });
...@@ -550,7 +596,17 @@ import CodeListService from "@service/app/codelist-service"; ...@@ -550,7 +596,17 @@ import CodeListService from "@service/app/codelist-service";
} else { } else {
this.$Notice.success({ title: '', desc: '删除成功!' }); this.$Notice.success({ title: '', desc: '删除成功!' });
} }
this.load({}); //删除items中已删除的项
console.log(this.items);
_datas.forEach((data: any) => {
this.items.some((item:any,index:number)=>{
if(Object.is(item.srfkey,data.srfkey)){
this.items.splice(index,1);
return true;
}
});
});
this.totalrow -= _datas.length;
this.$emit('remove', null); this.$emit('remove', null);
this.selections = []; this.selections = [];
resolve(response); resolve(response);
...@@ -643,7 +699,11 @@ import CodeListService from "@service/app/codelist-service"; ...@@ -643,7 +699,11 @@ import CodeListService from "@service/app/codelist-service";
if (Object.is(data.type, 'maxRowCount')) { if (Object.is(data.type, 'maxRowCount')) {
Object.assign(page, { page: 0, size: data.maxRowCount }); Object.assign(page, { page: 0, size: data.maxRowCount });
} else if (Object.is(data.type, 'activatedPage')) { } else if (Object.is(data.type, 'activatedPage')) {
doExport(JSON.parse(JSON.stringify(this.items))); try {
doExport(JSON.parse(JSON.stringify(this.items)));
} catch (error) {
console.error(error);
}
return; return;
} }
// 设置排序 // 设置排序
...@@ -663,7 +723,11 @@ import CodeListService from "@service/app/codelist-service"; ...@@ -663,7 +723,11 @@ import CodeListService from "@service/app/codelist-service";
this.$Notice.error({ title: '', desc: '数据导出失败,' + response.info }); this.$Notice.error({ title: '', desc: '数据导出失败,' + response.info });
return; return;
} }
doExport(JSON.parse(JSON.stringify(response.data))); try {
doExport(JSON.parse(JSON.stringify(response.data)));
} catch (error) {
console.error(error);
}
}).catch((response: any) => { }).catch((response: any) => {
if (response && response.status === 401) { if (response && response.status === 401) {
return; return;
...@@ -878,7 +942,7 @@ import CodeListService from "@service/app/codelist-service"; ...@@ -878,7 +942,7 @@ import CodeListService from "@service/app/codelist-service";
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
protected rowDBLClick($event: any): void { protected rowDBLClick($event: any): void {
if (!$event || this.actualIsOpenEdit) { if (!$event || this.actualIsOpenEdit || Object.is(this.gridRowActiveMode,0)) {
return; return;
} }
this.selections = []; this.selections = [];
...@@ -934,7 +998,7 @@ import CodeListService from "@service/app/codelist-service"; ...@@ -934,7 +998,7 @@ import CodeListService from "@service/app/codelist-service";
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
protected rowClick($event: any, ifAlways: boolean = false): void { protected rowClick($event: any, ifAlways: boolean = false): void {
if (!ifAlways && (!$event || actualIsOpenEdit)) { if (!ifAlways && (!$event || this.actualIsOpenEdit)) {
return; return;
} }
if(this.stopRowClick) { if(this.stopRowClick) {
...@@ -958,8 +1022,10 @@ import CodeListService from "@service/app/codelist-service"; ...@@ -958,8 +1022,10 @@ import CodeListService from "@service/app/codelist-service";
if (refs.multipleTable) { if (refs.multipleTable) {
if(this.isSingleSelect){ if(this.isSingleSelect){
refs.multipleTable.clearSelection(); refs.multipleTable.clearSelection();
refs.multipleTable.setCurrentRow($event);
}else{
refs.multipleTable.toggleRowSelection($event);
} }
refs.multipleTable.toggleRowSelection($event);
} }
this.$emit('selectionchange', this.selections); this.$emit('selectionchange', this.selections);
...@@ -1435,6 +1501,19 @@ import CodeListService from "@service/app/codelist-service"; ...@@ -1435,6 +1501,19 @@ import CodeListService from "@service/app/codelist-service";
} }
</#if> </#if>
/**
* 获取对应行class
*
* @param {*} $args row 行数据,rowIndex 行索引
* @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected getRowClassName(args:{row: any,rowIndex: number}){
let isSelected = this.selections.some((item:any)=>{
return Object.is(item.majorentity,args.row.majorentity);
});
return isSelected ? "grid-selected-row" : "";
}
<#ibizinclude> <#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl ../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<#if ctrl.render??> <#if ctrl.render??>
${ctrl.render.code} ${ctrl.render.code}
<#else> <#else>
<split class="app-grid-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" @on-move-end="onSplitChange"> <split id="${ctrl.getCodeName()?lower_case}" class="app-grid-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" mode="<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">horizontal<#else>vertical</#if>" @on-move-end="onSplitChange">
<div slot='left'> <div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">left<#else>top</#if>'>
<#if ctrl.isShowTitleBar()> <#if ctrl.isShowTitleBar()>
<div class='grid-exp-bar-header'> <div class='grid-exp-bar-header'>
<div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>表格导航栏<#else>${ctrl.getTitle()}</#if></div> <div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>表格导航栏<#else>${ctrl.getTitle()}</#if></div>
...@@ -38,11 +38,10 @@ ...@@ -38,11 +38,10 @@
</#if> </#if>
</div> </div>
</div> </div>
<div slot='right'> <div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">right<#else>bottom</#if>'>
<component <component
v-if="selection.view && !Object.is(this.selection.view.viewname, '')" v-if="selection.view && !Object.is(this.selection.view.viewname, '')"
:is="selection.view.viewname" :is="selection.view.viewname"
:key="$util.createUUID()"
class="viewcontainer2" class="viewcontainer2"
:viewDefaultUsage="false" :viewDefaultUsage="false"
:viewdata="JSON.stringify(selection.data)"> :viewdata="JSON.stringify(selection.data)">
...@@ -64,7 +63,7 @@ ...@@ -64,7 +63,7 @@
* 打开新建数据视图 * 打开新建数据视图
* *
* @type {any} * @type {any}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
@Prop() protected newdata: any; @Prop() protected newdata: any;
</#if> </#if>
...@@ -73,7 +72,7 @@ ...@@ -73,7 +72,7 @@
* 打开编辑数据视图 * 打开编辑数据视图
* *
* @type {any} * @type {any}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
@Prop() protected opendata: any; @Prop() protected opendata: any;
</#if> </#if>
...@@ -83,8 +82,8 @@ ...@@ -83,8 +82,8 @@
/** /**
* 视图唯一标识 * 视图唯一标识
* *
* @type {boolean} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
@Prop() protected viewUID!:string; @Prop() protected viewUID!:string;
...@@ -93,15 +92,40 @@ ...@@ -93,15 +92,40 @@
* *
* @protected * @protected
* @type {(boolean)} * @type {(boolean)}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected isSingleSelect:boolean = true; protected isSingleSelect:boolean = true;
/**
* 呈现模式,可选值:horizontal或者vertical
*
* @protected
* @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected showMode:string ="<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">horizontal<#else>vertical</#if>";
/**
* 控件宽度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ctrlWidth:number = <#if ctrl.getWidth()??>${ctrl.getWidth()}<#else>0</#if>;
/**
* 控件高度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ctrlHeight: number = <#if ctrl.getHeight()??>${ctrl.getHeight()}<#else>0</#if>;
/** /**
* 选中数据 * 选中数据
* *
* @type {*} * @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected selection: any = {}; protected selection: any = {};
...@@ -110,7 +134,7 @@ ...@@ -110,7 +134,7 @@
* *
* @protected * @protected
* @type {(string)} * @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected searchText:string = ""; protected searchText:string = "";
...@@ -118,7 +142,7 @@ ...@@ -118,7 +142,7 @@
* 分割宽度 * 分割宽度
* *
* @type {number} * @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected split: number = 0.5; protected split: number = 0.5;
<#if ctrl.getXDataPSControl()??> <#if ctrl.getXDataPSControl()??>
...@@ -128,7 +152,7 @@ ...@@ -128,7 +152,7 @@
* 导航视图名称 * 导航视图名称
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected navViewName: string = "<#if xDataControl.getNavPSAppView()??><#assign navPSAppView = xDataControl.getNavPSAppView() />${srffilepath2(navPSAppView.getCodeName())}</#if>"; protected navViewName: string = "<#if xDataControl.getNavPSAppView()??><#assign navPSAppView = xDataControl.getNavPSAppView() />${srffilepath2(navPSAppView.getCodeName())}</#if>";
...@@ -136,7 +160,7 @@ ...@@ -136,7 +160,7 @@
* 导航视图参数 * 导航视图参数
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected navViewParam: string = '<#if xDataControl.getNavViewParamJO()??>${xDataControl.getNavViewParamJO()}</#if>'; protected navViewParam: string = '<#if xDataControl.getNavViewParamJO()??>${xDataControl.getNavViewParamJO()}</#if>';
...@@ -144,7 +168,7 @@ ...@@ -144,7 +168,7 @@
* 导航过滤项 * 导航过滤项
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected navFilter: string = "<#if xDataControl.getNavFilter()??>${xDataControl.getNavFilter()}</#if>"; protected navFilter: string = "<#if xDataControl.getNavFilter()??>${xDataControl.getNavFilter()}</#if>";
</#if> </#if>
...@@ -170,7 +194,7 @@ ...@@ -170,7 +194,7 @@
/** /**
* split值变化事件 * split值变化事件
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public onSplitChange() { public onSplitChange() {
if(this.split){ if(this.split){
...@@ -182,7 +206,7 @@ ...@@ -182,7 +206,7 @@
* 获取多项数据 * 获取多项数据
* *
* @returns {any[]} * @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public getDatas(): any[] { public getDatas(): any[] {
return []; return [];
...@@ -192,7 +216,7 @@ ...@@ -192,7 +216,7 @@
* 获取单项树 * 获取单项树
* *
* @returns {*} * @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public getData(): any { public getData(): any {
return null; return null;
...@@ -201,7 +225,7 @@ ...@@ -201,7 +225,7 @@
/** /**
* Vue声明周期(组件初始化完毕) * Vue声明周期(组件初始化完毕)
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public created() { public created() {
this.afterCreated(); this.afterCreated();
...@@ -210,7 +234,7 @@ ...@@ -210,7 +234,7 @@
/** /**
* 执行created后的逻辑 * 执行created后的逻辑
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public afterCreated(){ public afterCreated(){
if (this.viewState) { if (this.viewState) {
...@@ -224,15 +248,45 @@ ...@@ -224,15 +248,45 @@
</#if> </#if>
}); });
} }
}
/**
* Vue声明周期(组件渲染完毕)
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public mounted() {
this.afterMounted();
}
/**
* 执行mounted后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterMounted(){
if(this.$store.getters.getViewSplit(this.viewUID)){ if(this.$store.getters.getViewSplit(this.viewUID)){
this.split = this.$store.getters.getViewSplit(this.viewUID); this.split = this.$store.getters.getViewSplit(this.viewUID);
}else{
let containerWidth:number = (document.getElementById("${ctrl.getCodeName()?lower_case}") as any).offsetWidth;
let containerHeight:number = (document.getElementById("${ctrl.getCodeName()?lower_case}") as any).offsetHeight;
if(Object.is(this.showMode,'horizontal')){
if(this.ctrlWidth){
this.split = this.ctrlWidth/containerWidth;
}
}else{
if(this.ctrlHeight){
this.split = this.ctrlHeight/containerHeight;
}
}
this.$store.commit("setViewSplit",{viewUID:this.viewUID,viewSplit:this.split});
} }
} }
/** /**
* vue 生命周期 * vue 生命周期
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected destroyed() { protected destroyed() {
this.afterDestroy(); this.afterDestroy();
...@@ -241,7 +295,7 @@ ...@@ -241,7 +295,7 @@
/** /**
* 执行destroyed后的逻辑 * 执行destroyed后的逻辑
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected afterDestroy() { protected afterDestroy() {
if (this.viewStateEvent) { if (this.viewStateEvent) {
...@@ -255,7 +309,7 @@ ...@@ -255,7 +309,7 @@
/** /**
* 执行搜索 * 执行搜索
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected onSearch($event:any) { protected onSearch($event:any) {
<#if ctrl.getXDataPSControl()??> <#if ctrl.getXDataPSControl()??>
...@@ -269,7 +323,7 @@ ...@@ -269,7 +323,7 @@
/** /**
* ${ctrl.name}的选中数据事件 * ${ctrl.name}的选中数据事件
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void { protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void {
let data:any = {}; let data:any = {};
...@@ -290,12 +344,13 @@ ...@@ -290,12 +344,13 @@
this.selection = {}; this.selection = {};
Object.assign(this.selection, { view: { viewname: this.navViewName }, data:data }); Object.assign(this.selection, { view: { viewname: this.navViewName }, data:data });
this.$emit('selectionchange',args); this.$emit('selectionchange',args);
this.$forceUpdate();
} }
/** /**
* ${ctrl.name}的load完成事件 * ${ctrl.name}的load完成事件
* *
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
protected ${ctrl.name}_load(args:any, tag?: string, $event2?: any){ protected ${ctrl.name}_load(args:any, tag?: string, $event2?: any){
this.$emit('load',args); this.$emit('load',args);
......
...@@ -67,6 +67,66 @@ ...@@ -67,6 +67,66 @@
padding-right: 10px; padding-right: 10px;
} }
} }
> .ivu-split-vertical{
> .ivu-split-pane {
> div {
height: 100%;
.grid-exp-bar-header {
line-height: 50px;
border-bottom: 1px solid #ddd;
>div {
font-size: 18px;
i {
font-size: 20px;
margin-top: -2px;
}
}
}
.container-header{
display: flex;
justify-content: space-between;
align-items: center;
.search-container {
width: 30%;
height: 48px;
padding: 10px 10px 10px 0;
min-width: 200px;
max-width: 400px;
}
.toolbar-container{
padding: 4px;
}
}
.grid-exp-bar-content {
<#-- 计算高度 -->
<#if ctrl.isShowTitleBar() && ctrl.isEnableSearch()>
height: calc(100% - 88px);
<#elseif ctrl.isShowTitleBar() && !ctrl.isEnableSearch()>
height: calc(100% - 40px);
<#elseif !ctrl.isShowTitleBar() && ctrl.isEnableSearch()>
height: calc(100% - 38px);
<#else>
height: 100%;
</#if>
overflow: auto;
margin-bottom: 10px;
}
.grid-exp-bar-content2 {
height: 100%;
overflow: auto;
flex-grow: 1;
}
}
}
> .top-pane.ivu-split-pane {
> div {
padding-bottom: 10px;
}
}
> .bottom-pane.ivu-split-pane {
padding-top: 10px;
}
}
} }
<#ibizinclude> <#ibizinclude>
......
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
<card class='view-card' :dis-hover="true" :padding="0" :bordered="false"> <card class='view-card' :dis-hover="true" :padding="0" :bordered="false">
<div class="content-container pickup-view"> <div class="content-container pickup-view">
<div class="translate-contant"> <div class="translate-contant">
<div class="center"> <div class="center" :style="{width : !isShowButton ? '100%' : ''}">
<#if view.hasPSControl('pickupviewpanel')> <#if view.hasPSControl('pickupviewpanel')>
<@ibizindent blank=20> <@ibizindent blank=20>
${P.getCtrlCode('pickupviewpanel', 'CONTROL.html').code}<#t> ${P.getCtrlCode('pickupviewpanel', 'CONTROL.html').code}<#t>
</@ibizindent> </@ibizindent>
</#if> </#if>
</div> </div>
<div class="translate-buttons"> <div v-if="isShowButton" class="translate-buttons">
<div class="buttons"> <div class="buttons">
<i-button type="primary" :title="this.containerModel.view_rightbtn.text" <i-button type="primary" :title="this.containerModel.view_rightbtn.text"
:disabled="this.containerModel.view_rightbtn.disabled" :disabled="this.containerModel.view_rightbtn.disabled"
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</i-button> </i-button>
</div> </div>
</div> </div>
<div class="right"> <div v-if="isShowButton" class="right">
<div class="mpicker-select"> <div class="mpicker-select">
<div v-for="(item, index) in viewSelections" :key="index" :class="item._select ? 'select' : ''" @click="selectionsClick(item)" @dblclick="selectionsDBLClick(item)"> <div v-for="(item, index) in viewSelections" :key="index" :class="item._select ? 'select' : ''" @click="selectionsClick(item)" @dblclick="selectionsDBLClick(item)">
<span>{{item.srfmajortext}}</span> <span>{{item.srfmajortext}}</span>
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
</div> </div>
</div> </div>
</div> </div>
<card :dis-hover="true" :bordered="false" class="footer"> <card v-if="isShowButton" :dis-hover="true" :bordered="false" class="footer">
<row :style="{ textAlign: 'right' }"> <row :style="{ textAlign: 'right' }">
<i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk">{{this.containerModel.view_okbtn.text}}</i-button> <i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk">{{this.containerModel.view_okbtn.text}}</i-button>
&nbsp;&nbsp; &nbsp;&nbsp;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
${P.getCtrlCode('pickupviewpanel', 'CONTROL.html').code}<#t> ${P.getCtrlCode('pickupviewpanel', 'CONTROL.html').code}<#t>
</@ibizindent> </@ibizindent>
</#if> </#if>
<card v-if="ifShowButtons" :dis-hover="true" :bordered="false" class="footer"> <card v-if="isShowButton" :dis-hover="true" :bordered="false" class="footer">
<row :style="{ textAlign: 'right' }"> <row :style="{ textAlign: 'right' }">
<i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk">{{this.containerModel.view_okbtn.text}}</i-button> <i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk">{{this.containerModel.view_okbtn.text}}</i-button>
&nbsp;&nbsp; &nbsp;&nbsp;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false"> <card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false">
<#-- 不带数据信息标题 --> <#-- 不带数据信息标题 -->
<#if view.isShowCaptionBar()> <#if view.isShowCaptionBar()>
<p v-if="ifShowButtons" slot='title'> <p v-if="isShowButton" slot='title'>
<#if view.getPSSysImage()??> <#if view.getPSSysImage()??>
<#assign viewimg = view.getPSSysImage()/> <#assign viewimg = view.getPSSysImage()/>
<#if viewimg.getImagePath() != ""> <#if viewimg.getImagePath() != "">
...@@ -30,13 +30,6 @@ ...@@ -30,13 +30,6 @@
</div> </div>
</#if> </#if>
</@ibizindent> </@ibizindent>
<card v-if="ifShowButtons" :dis-hover="true" :bordered="false" class="footer">
<row :style="{ textAlign: 'right' }">
<i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk">确定</i-button>
&nbsp;&nbsp;
<i-button @click="onClickCancel">取消</i-button>
</row>
</card>
</div> </div>
</card> </card>
</div> </div>
\ No newline at end of file
...@@ -8,11 +8,11 @@ ...@@ -8,11 +8,11 @@
:viewparam="viewparam" :viewparam="viewparam"
:viewDefaultUsage="false" :viewDefaultUsage="false"
:isSingleSelect="isSingleSelect" :isSingleSelect="isSingleSelect"
:ifShowButtons="ifShowButtons" :selectedData="selectedData"
:isShowButton="isShowButton"
@viewdataschange="onViewDatasChange" @viewdataschange="onViewDatasChange"
@viewdatasactivated="viewDatasActivated" @viewdatasactivated="viewDatasActivated"
@viewload="onViewLoad" @viewload="onViewLoad">
:key="this.$util.createUUID()">
</component> </component>
</div> </div>
</template> </template>
...@@ -23,7 +23,14 @@ import ${srfclassname('${ctrl.codeName}')}Model from './${srffilepath2(ctrl.code ...@@ -23,7 +23,14 @@ import ${srfclassname('${ctrl.codeName}')}Model from './${srffilepath2(ctrl.code
<#ibizinclude> <#ibizinclude>
../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl ../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
/**
* 选中数据字符串
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() protected selectedData?: string;
/** /**
* 获取多项数据 * 获取多项数据
* *
...@@ -77,7 +84,7 @@ import ${srfclassname('${ctrl.codeName}')}Model from './${srffilepath2(ctrl.code ...@@ -77,7 +84,7 @@ import ${srfclassname('${ctrl.codeName}')}Model from './${srffilepath2(ctrl.code
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
@Prop({default: true}) protected ifShowButtons!: boolean; @Prop({default: true}) protected isShowButton!: boolean;
/** /**
* 是否单选 * 是否单选
......
<#-- content --> <#-- content -->
<#assign content> <#assign content>
:isSingleSelect="isSingleSelect" :isSingleSelect="isSingleSelect"
:ifShowButtons="ifShowButtons" :selectedData="selectedData"
:isShowButton="isShowButton"
</#assign> </#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/HTML/DEFAULT.html.ftl ../@MACRO/HTML/DEFAULT.html.ftl
......
<app-image-upload <app-file-upload
:multiple="true"
:formState="viewState" :formState="viewState"
:ignorefieldvaluechange="false" :ignorefieldvaluechange="false"
@formitemvaluechange="($event)=>{onGridItemValueChange(row,$event)}" @formitemvaluechange="($event)=>{onGridItemValueChange(row,$event)}"
...@@ -7,7 +6,8 @@ ...@@ -7,7 +6,8 @@
:name='column.property' :name='column.property'
:value="row[column.property]" :value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:rowPreview="true"
uploadparams='${editor.getEditorParam('uploadparams','')}' uploadparams='${editor.getEditorParam('uploadparams','')}'
exportparams='${editor.getEditorParam('exportparams','')}' exportparams='${editor.getEditorParam('exportparams','')}'
customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;"> :customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;">
</app-image-upload> </app-file-upload>
\ No newline at end of file \ No newline at end of file
<app-image-upload <app-file-upload
:multiple="false"
:formState="viewState" :formState="viewState"
:ignorefieldvaluechange="false" :ignorefieldvaluechange="false"
@formitemvaluechange="($event)=>{onGridItemValueChange(row,$event)}" @formitemvaluechange="($event)=>{onGridItemValueChange(row,$event)}"
...@@ -7,7 +6,8 @@ ...@@ -7,7 +6,8 @@
:name='column.property' :name='column.property'
:value="row[column.property]" :value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:rowPreview="true"
uploadparams='${editor.getEditorParam('uploadparams','')}' uploadparams='${editor.getEditorParam('uploadparams','')}'
exportparams='${editor.getEditorParam('exportparams','')}' exportparams='${editor.getEditorParam('exportparams','')}'
customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;"> :customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;">
</app-image-upload> </app-file-upload>
\ No newline at end of file \ No newline at end of file
<app-input-number v-model="data.${editor.name}" @enter="onEnter($event)" <#if item.getUnitName()??> unit="${item.getUnitName()}"</#if> :disabled="detailsModel.${editor.name}.disabled" type='<#if item.getPSDEField()??><#assign datatype=srfjavatype(item.getPSDEField().getStdDataType())><#if datatype=='BigInteger' || datatype=='Integer' || datatype=='Double' || datatype=='Decimal' || datatype=='Float' || datatype=='BigDecimal'>number<#else>string</#if><#else>string</#if>' <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if> style="${editor.getEditorCssStyle()}"></app-input-number>
\ No newline at end of file
EDITORTYPE=TEXTBOX#NUMBER
\ No newline at end of file
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
:context="context" :context="context"
:viewparams="viewparams" :viewparams="viewparams"
:itemParam=<@getItemParams editor /> :itemParam=<@getItemParams editor />
<#if editor.getPickupPSAppView().getViewType() == 'DEMPICKUPVIEW'>
:isSingleSelect="false"
</#if>
:disabled="detailsModel.${editor.name}.disabled" :disabled="detailsModel.${editor.name}.disabled"
name='${editor.name}' name='${editor.name}'
<#if editor.getPSAppDataEntity?? && editor.getPSAppDataEntity()??> <#if editor.getPSAppDataEntity?? && editor.getPSAppDataEntity()??>
......
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
:context="context" :context="context"
:viewparams="viewparams" :viewparams="viewparams"
:itemParam=<@getItemParams editor /> :itemParam=<@getItemParams editor />
<#if editor.getPickupPSAppView().getViewType() == 'DEMPICKUPVIEW'>
:isSingleSelect="false"
</#if>
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
name='${editor.name}' name='${editor.name}'
<#if editor.getPSAppDataEntity?? && editor.getPSAppDataEntity()??> <#if editor.getPSAppDataEntity?? && editor.getPSAppDataEntity()??>
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
:name='column.property' :name='column.property'
:value="row[column.property]" :value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:rowPreview="true"
uploadparams='${editor.getEditorParam('uploadparams','')}' uploadparams='${editor.getEditorParam('uploadparams','')}'
exportparams='${editor.getEditorParam('exportparams','')}' exportparams='${editor.getEditorParam('exportparams','')}'
:customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;"> :customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;">
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
:name='column.property' :name='column.property'
:value="row[column.property]" :value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:rowPreview="true"
uploadparams='${editor.getEditorParam('uploadparams','')}' uploadparams='${editor.getEditorParam('uploadparams','')}'
exportparams='${editor.getEditorParam('exportparams','')}' exportparams='${editor.getEditorParam('exportparams','')}'
:customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;"> :customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;">
......
<date-picker type="datetime" :transfer="true" format="yyyy-MM-dd HH:mm:ss" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :value="row[column.property]" style="min-width: 150px; ${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1)}"></date-picker> <date-picker type="datetime" :transfer="true" format="yyyy-MM-dd HH:mm:ss" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :value="row[column.property]" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1)}"></date-picker>
\ No newline at end of file \ No newline at end of file
<date-picker type="date" :transfer="true" format="yyyy-MM-dd" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :value="row[column.property]" style="min-width: 150px; ${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1)}"></date-picker> <date-picker type="date" :transfer="true" format="yyyy-MM-dd" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :value="row[column.property]" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1)}"></date-picker>
\ No newline at end of file \ No newline at end of file
<time-picker :value="row[column.property]" :transfer="true" format="mm" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="min-width: 150px; ${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val)}"></time-picker> <time-picker :value="row[column.property]" :transfer="true" format="mm" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val)}"></time-picker>
\ No newline at end of file \ No newline at end of file
<time-picker :value="row[column.property]" :transfer="true" format="HH" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="min-width: 150px; ${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val)}"></time-picker> <time-picker :value="row[column.property]" :transfer="true" format="HH" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val)}"></time-picker>
\ No newline at end of file \ No newline at end of file
<date-picker type="date" :transfer="true" format="yyyy-MM-dd" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :value="row[column.property]" style="min-width: 150px; ${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1)}"></date-picker> <date-picker type="date" :transfer="true" format="yyyy-MM-dd" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :value="row[column.property]" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1)}"></date-picker>
\ No newline at end of file \ No newline at end of file
<time-picker :value="row[column.property]" :transfer="true" format="HH:mm:ss" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="min-width: 150px; ${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val)}"></time-picker> <time-picker :value="row[column.property]" :transfer="true" format="HH:mm:ss" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val)}"></time-picker>
\ No newline at end of file \ No newline at end of file
<time-picker :value="row[column.property]" :transfer="true" format="HH:mm" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="min-width: 150px; ${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val)}"></time-picker> <time-picker :value="row[column.property]" :transfer="true" format="HH:mm" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val)}"></time-picker>
\ No newline at end of file \ No newline at end of file
<time-picker :value="row[column.property]" :transfer="true" format="ss" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="min-width: 150px; ${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val)}"></time-picker> <time-picker :value="row[column.property]" :transfer="true" format="ss" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val)}"></time-picker>
\ No newline at end of file \ No newline at end of file
<div style="${editor.getEditorCssStyle()}">
<app-switch :value="this.data.${editor.name}" @change="($event)=>{this.data.${editor.name} = $event} " :disabled="detailsModel.${editor.name}.disabled"></app-switch>
</div>
\ No newline at end of file
<div style="${item.getEditorCssStyle()}"><checkbox :value=" !row[column.property] ? false : true" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" @on-change="($event) => {$event ? row[column.property] = 1 : row[column.property] = 0; gridEditItemChange(row, column.property, $event)}" ></checkbox></div>
\ No newline at end of file
EDITORTYPE=CHECKBOX#SWITCH
\ No newline at end of file
<div style="${editor.getEditorCssStyle()}">
<app-rate :value="this.data.${editor.name}" @change="($event)=>{this.data.${editor.name} = $event} " :disabled="detailsModel.${editor.name}.disabled"></app-rate>
</div>
\ No newline at end of file
<div style="${item.getEditorCssStyle()}"><checkbox :value=" !row[column.property] ? false : true" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" @on-change="($event) => {$event ? row[column.property] = 1 : row[column.property] = 0; gridEditItemChange(row, column.property, $event)}" ></checkbox></div>
\ No newline at end of file
EDITORTYPE=CHECKBOX#RATE
\ No newline at end of file
...@@ -5,5 +5,5 @@ ...@@ -5,5 +5,5 @@
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
protected click${item.codeName}(item: any = {}){ protected click${item.codeName}(item: any = {}){
this.$Notice.error({ title: '错误', desc: '暂不支持此项操作' });
} }
\ No newline at end of file
...@@ -5,5 +5,5 @@ ...@@ -5,5 +5,5 @@
* @memberof ${srfclassname('${ctrl.codeName}')} * @memberof ${srfclassname('${ctrl.codeName}')}
*/ */
protected click${item.codeName}(item: any = {}){ protected click${item.codeName}(item: any = {}){
this.$Notice.error({ title: '错误', desc: '暂不支持此项操作' });
} }
\ No newline at end of file
/**
* ${item.getCaption()}
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof ${srfclassname('${view.name}')}Base
*/
protected ${item.getFullCodeName()}(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
this.$Notice.error({ title: '错误', desc: '保存所有行未支持' });
}
\ No newline at end of file
LOGICTYPE=SYS#SAVEALLEDITROW
\ No newline at end of file
...@@ -13,12 +13,7 @@ ...@@ -13,12 +13,7 @@
// 界面行为容器对象 _this // 界面行为容器对象 _this
const _this: any = this; const _this: any = this;
if (xData && xData.save instanceof Function) { if (xData && xData.save instanceof Function) {
xData.save().then((response: any) => { xData.save();
if (!response || response.status !== 200) {
return;
}
_this.$emit('viewdataschange', [{ ...response.data }]);
});
} else if (_this.save && _this.save instanceof Function) { } else if (_this.save && _this.save instanceof Function) {
_this.save(); _this.save();
} }
......
...@@ -10,12 +10,7 @@ ...@@ -10,12 +10,7 @@
* @memberof ${srfclassname('${view.name}')}Base * @memberof ${srfclassname('${view.name}')}Base
*/ */
protected ${item.getFullCodeName()}(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) { protected ${item.getFullCodeName()}(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
const _view: any = this; this.closeView(args);
if (_view.viewdata) {
_view.$emit('close');
} else if (_view.$tabPageExp) {
_view.$tabPageExp.onClose(_view.$route.fullPath);
}
if(window.parent){ if(window.parent){
window.parent.postMessage([{ ...args }],'*'); window.parent.postMessage([{ ...args }],'*');
} }
......
/**
* ${item.getCaption()}
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof ${srfclassname('${view.name}')}Base
*/
protected ${item.getFullCodeName()}(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
xData.actualIsOpenEdit = false;
}
\ No newline at end of file
/**
* ${item.getCaption()}
*
* @param {any[]} args 当前数据
* @param {any} contextJO 行为附加上下文
* @param {*} [params] 附加参数
* @param {*} [$event] 事件源
* @param {*} [xData] 执行行为所需当前部件
* @param {*} [actionContext] 执行行为上下文
* @memberof ${srfclassname('${view.name}')}Base
*/
protected ${item.getFullCodeName()}(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
xData.actualIsOpenEdit = true;
}
\ No newline at end of file
...@@ -17,6 +17,6 @@ ...@@ -17,6 +17,6 @@
} else if(xData.newRow && xData.newRow instanceof Function) { } else if(xData.newRow && xData.newRow instanceof Function) {
xData.newRow([{ ...data }], params, $event, xData); xData.newRow([{ ...data }], params, $event, xData);
}else{ }else{
_this.$Notice.error({ title: '错误', desc: 'newdata 视图处理逻辑不存在,请添加!' }); _this.$Notice.error({ title: '错误', desc: 'newRow 视图处理逻辑不存在,请添加!' });
} }
} }
\ No newline at end of file
...@@ -10,5 +10,5 @@ ...@@ -10,5 +10,5 @@
* @memberof ${srfclassname('${view.name}')}Base * @memberof ${srfclassname('${view.name}')}Base
*/ */
protected ${item.getFullCodeName()}(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) { protected ${item.getFullCodeName()}(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
this.$Notice.error({ title: '错误', desc: '暂不支持此项操作' });
} }
\ No newline at end of file
...@@ -10,5 +10,5 @@ ...@@ -10,5 +10,5 @@
* @memberof ${srfclassname('${view.name}')}Base * @memberof ${srfclassname('${view.name}')}Base
*/ */
protected ${item.getFullCodeName()}(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) { protected ${item.getFullCodeName()}(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
xData.isOpenEdit = !xData.isOpenEdit; xData.actualIsOpenEdit = !xData.actualIsOpenEdit;
} }
\ No newline at end of file
...@@ -9,8 +9,15 @@ ...@@ -9,8 +9,15 @@
<#ibizinclude> <#ibizinclude>
./VIEW_CONTENT-BASE.vue.ftl ./VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
/**
* 选中数据字符串
*
* @type {string}
* @memberof ${srfclassname('${view.name}')}
*/
@Prop() protected selectedData?: string;
/** /**
* 是否单选 * 是否单选
* *
* @type {boolean} * @type {boolean}
......
...@@ -155,6 +155,7 @@ export default class ${srfclassname('${view.name}')}Base extends Vue { ...@@ -155,6 +155,7 @@ export default class ${srfclassname('${view.name}')}Base extends Vue {
onParamData(newVal: any, oldVal: any) { onParamData(newVal: any, oldVal: any) {
if(newVal){ if(newVal){
Object.assign(this.viewparams, JSON.parse(this.viewparam)); Object.assign(this.viewparams, JSON.parse(this.viewparam));
<#if watch_viewparam_block??>${watch_viewparam_block}</#if>
} }
} }
......
...@@ -2,10 +2,23 @@ ...@@ -2,10 +2,23 @@
../@MACRO/LAYOUTPANEL_VIEW.template.ftl ../@MACRO/LAYOUTPANEL_VIEW.template.ftl
</#ibizinclude> </#ibizinclude>
<#assign watch_viewparam_block>
if(this.viewparams.selectedData){
this.selectedData = JSON.stringify(this.viewparams.selectedData);
}
</#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_HEADER-BASE.vue.ftl ../@MACRO/VIEW_HEADER-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#assign mounted_block>
if(this.viewparams.selectedData){
this.engine.onCtrlEvent('pickupviewpanel', 'selectionchange', this.viewparams.selectedData);
this.onCLickRight();
}
</#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_CONTENT-BASE.vue.ftl ../@MACRO/VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
...@@ -15,7 +28,23 @@ ...@@ -15,7 +28,23 @@
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${view.name}')} * @memberof ${srfclassname('${view.name}')}
*/ */
@Prop({default: true}) public ifShowButtons!: boolean; @Prop({default: true}) public isShowButton!: boolean;
/**
* 选中数据的字符串
*
* @type {string}
* @memberof ${srfclassname('${view.name}')}
*/
protected selectedData: string = "";
/**
* 是否初始化已选中项
*
* @type {any[]}
* @memberof ${srfclassname('${view.name}')}
*/
isInitSelected:boolean = false;
/** /**
* 视图选中数据 * 视图选中数据
......
...@@ -2,13 +2,32 @@ ...@@ -2,13 +2,32 @@
../@MACRO/LAYOUTPANEL_VIEW.template.ftl ../@MACRO/LAYOUTPANEL_VIEW.template.ftl
</#ibizinclude> </#ibizinclude>
<#assign watch_viewparam_block>
if(this.viewparams.selectedData){
this.selectedData = JSON.stringify(this.viewparams.selectedData);
}
</#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_HEADER-BASE.vue.ftl ../@MACRO/VIEW_HEADER-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#assign mounted_block>
if(this.viewparams.selectedData){
this.engine.onCtrlEvent('pickupviewpanel', 'selectionchange', this.viewparams.selectedData);
}
</#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_CONTENT-BASE.vue.ftl ../@MACRO/VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
/**
* 选中数据的字符串
*
* @type {string}
* @memberof ${srfclassname('${view.name}')}
*/
protected selectedData: string = "";
/** /**
* 视图选中数据 * 视图选中数据
...@@ -24,7 +43,7 @@ ...@@ -24,7 +43,7 @@
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${view.name}')}Base * @memberof ${srfclassname('${view.name}')}Base
*/ */
@Prop({default: true}) public ifShowButtons!: boolean; @Prop({default: true}) public isShowButton!: boolean;
/** /**
* 是否单选 * 是否单选
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${view.name}')} * @memberof ${srfclassname('${view.name}')}
*/ */
@Prop({default: true}) public ifShowButtons!: boolean; @Prop({default: true}) public isShowButton!: boolean;
/** /**
* 是否单选 * 是否单选
......
...@@ -9,20 +9,35 @@ ...@@ -9,20 +9,35 @@
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_CONTENT-BASE.vue.ftl ../@MACRO/VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
/**
* 选中数据字符串
*
* @type {string}
* @memberof ${srfclassname('${view.name}')}
*/
@Prop() protected selectedData?: string;
/** /**
* 是否显示按钮 * 是否单选
* *
* @type {boolean} * @type {boolean}
* @memberof ${srfclassname('${view.name}')} * @memberof ${srfclassname('${view.name}')}
*/ */
@Prop({default: true}) public ifShowButtons!: boolean; @Prop() protected isSingleSelect?: boolean;
/**
* 是否显示按钮
*
* @type {boolean}
* @memberof ${srfclassname('${view.name}')}Base
*/
@Prop({default: true}) public isShowButton!: boolean;
/** /**
* 节点过滤值 * 节点过滤值
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${view.name}')} * @memberof ${srfclassname('${view.name}')}Base
*/ */
public srfnodefilter: string = ''; public srfnodefilter: string = '';
...@@ -30,7 +45,7 @@ ...@@ -30,7 +45,7 @@
* 快速搜索 * 快速搜索
* *
* @returns {void} * @returns {void}
* @memberof ${srfclassname('${view.name}')} * @memberof ${srfclassname('${view.name}')}Base
*/ */
public onSearch(): void { public onSearch(): void {
if (!this.viewState) { if (!this.viewState) {
...@@ -41,33 +56,6 @@ ...@@ -41,33 +56,6 @@
</#if> </#if>
} }
/**
* 视图选中数据
*
* @type {any[]}
* @memberof ENTITYTEST1PickupView
*/
public viewSelections:any[] = [];
/**
* 确定
*
* @memberof ENTITYTEST1PickupView
*/
public onClickOk(): void {
this.$emit('viewdataschange', this.viewSelections);
this.$emit('close', null);
}
/**
* 取消
*
* @memberof ENTITYTEST1PickupView
*/
public onClickCancel(): void {
this.$emit('close', null);
}
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_BOTTOM-BASE.vue.ftl ../@MACRO/VIEW_BOTTOM-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
......
...@@ -64,10 +64,11 @@ export default class ${srfclassname('${item.getCodeName()}')} { ...@@ -64,10 +64,11 @@ export default class ${srfclassname('${item.getCodeName()}')} {
const data = response.data; const data = response.data;
resolve(this.doItems(data)); resolve(this.doItems(data));
} else { } else {
reject([]) resolve([]);
} }
}).catch((response: any) => { }).catch((response: any) => {
reject([]) console.error(response);
reject(response);
}); });
}); });
} }
...@@ -108,10 +109,11 @@ export default class ${srfclassname('${item.getCodeName()}')} { ...@@ -108,10 +109,11 @@ export default class ${srfclassname('${item.getCodeName()}')} {
const data = response.data; const data = response.data;
resolve(this.doItems(data)); resolve(this.doItems(data));
} else { } else {
reject([]) resolve([]);
} }
}).catch((response: any) => { }).catch((response: any) => {
reject([]) console.error(response);
reject(response);
}); });
}); });
} }
......
...@@ -17,6 +17,63 @@ const mock = MockAdapter.getInstance(); ...@@ -17,6 +17,63 @@ const mock = MockAdapter.getInstance();
</#macro> </#macro>
<#-- 日志方法: END --> <#-- 日志方法: END -->
<#-- 输出排序方法: BEGIN -->
<#-- 排序宏 -->
<#macro outputSort priority position>
<#assign outputSort_nested><#nested></#assign>
<#if !outputSort_maxPriority?has_content>
<#assign outputSort_maxPriority = priority>
<#else>
<#if priority gt outputSort_maxPriority >
<#assign outputSort_maxPriority = priority>
</#if>
</#if>
<#assign outputSort_template>${
"<#if position == 'before'>
<#assign outputSort_param"+priority+">
"+r"${outputSort_nested}<#t>"+"
<#if outputSort_param"+priority+"?has_content>"+r"${outputSort_param"+priority+"}</#if><#t>
</#assign>
</#if>
<#if position== 'after'>
<#assign outputSort_param"+priority+">
<#if outputSort_param"+priority+"?has_content>"+r"${outputSort_param"+priority+"}</#if><#t>
"+r"${outputSort_nested}<#t>"+"
</#assign>
</#if>"
}</#assign>
<@outputSort_template?interpret />
</#macro>
<#-- 输出宏 -->
<#macro outputSort_print>
<#if outputSort_maxPriority?has_content && outputSort_maxPriority?is_number>
<#list 0..outputSort_maxPriority as i >
<#assign outputSort_template>${
"<#if outputSort_param"+i+"?has_content>"
+r"${outputSort_param"+i+"}<#t>"
+"</#if>"
}</#assign>
<@outputSort_template?interpret />
</#list>
</#if>
</#macro>
<#-- 重置变量 -->
<#macro outputSort_clear>
<#if outputSort_maxPriority?has_content && outputSort_maxPriority?is_number>
<#list 0..outputSort_maxPriority as i >
<#assign outputSort_template>${
"<#if outputSort_param"+i+"?has_content>"
+r"<#assign outputSort_param"+i+r"=''/>"
+"</#if>"
}</#assign>
<@outputSort_template?interpret />
</#list>
<#assign outputSort_maxPriority='' />
</#if>
</#macro>
<#-- 输出排序方法: END -->
<@outputSort_clear />
// 模拟数据 // 模拟数据
const mockDatas: Array<any> = [ const mockDatas: Array<any> = [
<#if de.getAllPSDESampleDatas?? && de.getAllPSDESampleDatas()??> <#if de.getAllPSDESampleDatas?? && de.getAllPSDESampleDatas()??>
...@@ -165,14 +222,15 @@ mock.onPost(new RegExp(/wf\/${workflow.getCodeName()?lower_case}\/v${wfversion.g ...@@ -165,14 +222,15 @@ mock.onPost(new RegExp(/wf\/${workflow.getCodeName()?lower_case}\/v${wfversion.g
</#list> --> </#list> -->
</#if> </#if>
<#-- 实体接口mock数据start --> <#-- 实体接口mock数据:BEGIN -->
<#if item.getAllPSAppDEMethods?? && item.getAllPSAppDEMethods()??> <#if item.getAllPSAppDEMethods?? && item.getAllPSAppDEMethods()??>
<#list item.getAllPSAppDEMethods() as singleAppMethod> <#list item.getAllPSAppDEMethods() as singleAppMethod>
<#if singleAppMethod.getPSDEServiceAPIMethod?? && singleAppMethod.getPSDEServiceAPIMethod()??> <#if singleAppMethod.getPSDEServiceAPIMethod?? && singleAppMethod.getPSDEServiceAPIMethod()??>
<#assign singleServiceApi = singleAppMethod.getPSDEServiceAPIMethod()/> <#assign singleServiceApi = singleAppMethod.getPSDEServiceAPIMethod()/>
</#if> </#if>
<#-- 应用实体关系路径数大于0 && 拥有实体服务接口方法: BEGIN -->
<#if item.getPSAppDERSPathCount() gt 0 && singleServiceApi??> <#if item.getPSAppDERSPathCount() gt 0 && singleServiceApi??>
<#list 1..item.getPSAppDERSPathCount() as count> <#list 1..item.getPSAppDERSPathCount() as count>
<#assign path = ''/> <#assign path = ''/>
<#assign param = ''/> <#assign param = ''/>
<#list item.getPSAppDERSPath(count_index) as deRSPath> <#list item.getPSAppDERSPath(count_index) as deRSPath>
...@@ -183,7 +241,7 @@ mock.onPost(new RegExp(/wf\/${workflow.getCodeName()?lower_case}\/v${wfversion.g ...@@ -183,7 +241,7 @@ mock.onPost(new RegExp(/wf\/${workflow.getCodeName()?lower_case}\/v${wfversion.g
</#if> </#if>
</#list> </#list>
<#-- 方法类型为SELECT --> <#-- 方法类型为SELECT: BEGIN -->
<#if singleAppMethod.getMethodType() == "SELECT"> <#if singleAppMethod.getMethodType() == "SELECT">
// ${singleAppMethod.getCodeName()} // ${singleAppMethod.getCodeName()}
...@@ -209,7 +267,8 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new ...@@ -209,7 +267,8 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="_items"/> <@endLog appMethod=singleAppMethod dataName="_items"/>
return [status, _items]; return [status, _items];
}); });
<#-- 方法类型为FETCH --> <#-- 方法类型为SELECT: END -->
<#-- 方法类型为FETCH: BEGIN -->
<#elseif singleAppMethod.getMethodType() == "FETCH"> <#elseif singleAppMethod.getMethodType() == "FETCH">
// ${singleAppMethod.getCodeName()} // ${singleAppMethod.getCodeName()}
...@@ -251,10 +310,11 @@ mock.onGet(new RegExp(/^\/${path}${srfpluralize(item.codeName)?lower_case}<#if s ...@@ -251,10 +310,11 @@ mock.onGet(new RegExp(/^\/${path}${srfpluralize(item.codeName)?lower_case}<#if s
<@endLog appMethod=singleAppMethod dataName="items"/> <@endLog appMethod=singleAppMethod dataName="items"/>
return [status, items]; return [status, items];
}); });
<#-- 方法类型为FETCH: END -->
<#-- 方法类型为DEACTION: BEGIN -->
<#else> <#else>
<#-- 方法类型为DEACTION start --> <#-- 方法请求不需要参数情况: BEGIN -->
<#if singleServiceApi.getRequestParamType() == "NONE"> <#if singleServiceApi.getRequestParamType() == "NONE">
<#-- 无参数情况start,如GetDraft -->
// ${singleAppMethod.getCodeName()} // ${singleAppMethod.getCodeName()}
mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${path}${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => { mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${path}${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => {
...@@ -267,9 +327,10 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new ...@@ -267,9 +327,10 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="{}"/> <@endLog appMethod=singleAppMethod dataName="{}"/>
return [status, {}]; return [status, {}];
}); });
<#-- 无参数情况end --> <#-- 方法请求不需要参数情况: END -->
<#-- 方法请求参数为指定字段属性值: BEGIN -->
<#elseif singleServiceApi.getRequestParamType() == "FIELD"> <#elseif singleServiceApi.getRequestParamType() == "FIELD">
<#-- 指定属性情况start --> <@outputSort 1 'after'>
// ${singleAppMethod.getCodeName()} // ${singleAppMethod.getCodeName()}
mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${path}${srfpluralize(item.codeName)?lower_case}\/([a-zA-Z0-9\-\;]{1,35})<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => { mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${path}${srfpluralize(item.codeName)?lower_case}\/([a-zA-Z0-9\-\;]{1,35})<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => {
...@@ -294,9 +355,10 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new ...@@ -294,9 +355,10 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="_items?_items:{}"/> <@endLog appMethod=singleAppMethod dataName="_items?_items:{}"/>
return [status, _items?_items:{}]; return [status, _items?_items:{}];
}); });
<#-- 指定属性情况start --> </@outputSort>
<#-- 方法请求参数为指定字段属性值: END -->
<#-- 方法请求参数为实体对象数据: BEGIN -->
<#elseif singleServiceApi.getRequestParamType() == "ENTITY"> <#elseif singleServiceApi.getRequestParamType() == "ENTITY">
<#-- 提交对象数据情况start -->
// ${singleAppMethod.getCodeName()} // ${singleAppMethod.getCodeName()}
mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${path}${srfpluralize(item.codeName)?lower_case}\/([a-zA-Z0-9\-\;]{1,35})<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => { mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${path}${srfpluralize(item.codeName)?lower_case}\/([a-zA-Z0-9\-\;]{1,35})<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => {
...@@ -319,19 +381,20 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new ...@@ -319,19 +381,20 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="{}"/> <@endLog appMethod=singleAppMethod dataName="{}"/>
return [status, {}]; return [status, {}];
}); });
<#-- 提交对象数据情况start --> <#-- 方法请求参数为实体对象数据: END -->
<#-- 方法请求参数为URI参数数据: BEGIN -->
<#else> <#else>
<#-- URI参数传递情况start -->
// URI参数传递情况未实现 // URI参数传递情况未实现
<#-- URI参数传递情况start -->
</#if> </#if>
<#-- 方法类型为DEACTION end --> <#-- 方法请求参数为URI参数数据: END -->
</#if> </#if>
</#list> <#-- 方法类型为DEACTION: END -->
</#list>
</#if> </#if>
<#-- 应用实体关系路径数大于0 && 拥有实体服务接口方法: END -->
<#-- 主实体方法: BEGIN -->
<#if item.isMajor()> <#if item.isMajor()>
<#-- 方法类型为SELECT: BEGIN -->
<#-- 方法类型为SELECT -->
<#if singleAppMethod.getMethodType() == "SELECT"> <#if singleAppMethod.getMethodType() == "SELECT">
// ${singleAppMethod.getCodeName()} // ${singleAppMethod.getCodeName()}
...@@ -357,7 +420,8 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new ...@@ -357,7 +420,8 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="_items"/> <@endLog appMethod=singleAppMethod dataName="_items"/>
return [status, _items]; return [status, _items];
}); });
<#-- 方法类型为FETCH --> <#-- 方法类型为SELECT: EWND -->
<#-- 方法类型为FETCH: BEGIN -->
<#elseif singleAppMethod.getMethodType() == "FETCH"> <#elseif singleAppMethod.getMethodType() == "FETCH">
// ${singleAppMethod.getCodeName()} // ${singleAppMethod.getCodeName()}
...@@ -371,7 +435,6 @@ mock.onGet(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}<#if singleSe ...@@ -371,7 +435,6 @@ mock.onGet(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}<#if singleSe
return [status, mockDatas ? mockDatas : []]; return [status, mockDatas ? mockDatas : []];
}); });
// ${singleAppMethod.getCodeName()} // ${singleAppMethod.getCodeName()}
mock.onGet(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>(\?[\w-./?%&=]*)*$/)).reply((config: any) => { mock.onGet(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>(\?[\w-./?%&=]*)*$/)).reply((config: any) => {
<@startLog singleAppMethod /> <@startLog singleAppMethod />
...@@ -401,12 +464,11 @@ mock.onGet(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}<#if singleSe ...@@ -401,12 +464,11 @@ mock.onGet(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}<#if singleSe
<@endLog appMethod=singleAppMethod dataName="records ? records : []"/> <@endLog appMethod=singleAppMethod dataName="records ? records : []"/>
return [status, records ? records : []]; return [status, records ? records : []];
}); });
<#-- 方法类型为FETCH: END -->
<#-- 方法类型为DEACTION: BEGIN -->
<#else> <#else>
<#-- 方法类型为DEACTION start --> <#-- 方法请求不需要参数情况: BEGIN -->
<#if singleServiceApi.getRequestParamType() == "NONE"> <#if singleServiceApi.getRequestParamType() == "NONE">
<#-- 无参数情况start -->
// ${singleAppMethod.getCodeName()} // ${singleAppMethod.getCodeName()}
mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => { mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => {
...@@ -419,9 +481,11 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new ...@@ -419,9 +481,11 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="{}"/> <@endLog appMethod=singleAppMethod dataName="{}"/>
return [status, {}]; return [status, {}];
}); });
<#-- 无参数情况end --> <#-- 方法请求不需要参数情况: END -->
<#-- 方法请求参数为指定字段属性值: BEGIN -->
<#elseif singleServiceApi.getRequestParamType() == "FIELD"> <#elseif singleServiceApi.getRequestParamType() == "FIELD">
<#-- 指定属性情况start --> <@outputSort 1 'after'>
// ${singleAppMethod.getCodeName()} // ${singleAppMethod.getCodeName()}
mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}\/([a-zA-Z0-9\-\;]{1,35})<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => { mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}\/([a-zA-Z0-9\-\;]{1,35})<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => {
<@startLog singleAppMethod /> <@startLog singleAppMethod />
...@@ -445,9 +509,10 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new ...@@ -445,9 +509,10 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="_items?_items:{}"/> <@endLog appMethod=singleAppMethod dataName="_items?_items:{}"/>
return [status, _items?_items:{}]; return [status, _items?_items:{}];
}); });
<#-- 指定属性情况start --> </@outputSort>
<#-- 方法请求参数为指定字段属性值: END -->
<#-- 方法请求参数为实体对象数据: BEGIN -->
<#elseif singleServiceApi.getRequestParamType() == "ENTITY"> <#elseif singleServiceApi.getRequestParamType() == "ENTITY">
<#-- 提交对象数据情况start -->
// ${singleAppMethod.getCodeName()} // ${singleAppMethod.getCodeName()}
mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}\/?([a-zA-Z0-9\-\;]{0,35})<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => { mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}\/?([a-zA-Z0-9\-\;]{0,35})<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>$/)).reply((config: any) => {
...@@ -487,15 +552,18 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new ...@@ -487,15 +552,18 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
return [status, data]; return [status, data];
</#if> </#if>
}); });
<#-- 提交对象数据情况start --> <#-- 方法请求参数为实体对象数据: END -->
<#-- 方法请求参数为URI参数数据: BEGIN -->
<#else> <#else>
<#-- URI参数传递情况start -->
// URI参数传递情况未实现 // URI参数传递情况未实现
<#-- URI参数传递情况start -->
</#if> </#if>
<#-- 方法类型为DEACTION end --> <#-- 方法请求参数为URI参数数据: END -->
</#if> </#if>
<#-- 方法类型为DEACTION: END -->
</#if> </#if>
</#list> <#-- 主实体方法: END -->
</#list>
</#if> </#if>
<#-- 实体接口mock数据end --> <#-- 实体接口mock数据end -->
\ No newline at end of file
<@outputSort_print />
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_APPMENU
</#ibiztemplate>
${P.getCtrlCode('CONTROL-BASE.vue').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_APPMENU
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_APPMENU
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_APPMENU
</#ibiztemplate>
${P.getCtrlCode('CONTROL.less').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_APPMENU
</#ibiztemplate>
${P.getCtrlCode('CONTROL.vue').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DASHBOARD
</#ibiztemplate>
${P.getCtrlCode('CONTROL-BASE.vue').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DASHBOARD
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DASHBOARD
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DASHBOARD
</#ibiztemplate>
${P.getCtrlCode('CONTROL.less').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_DASHBOARD
</#ibiztemplate>
${P.getCtrlCode('CONTROL.vue').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_PORTLET
</#ibiztemplate>
${P.getCtrlCode('CONTROL-BASE.vue').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_PORTLET
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_PORTLET
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_PORTLET
</#ibiztemplate>
${P.getCtrlCode('CONTROL.less').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_PORTLET
</#ibiztemplate>
${P.getCtrlCode('CONTROL.vue').code}
\ No newline at end of file
...@@ -2,3 +2,12 @@ ...@@ -2,3 +2,12 @@
初始化 初始化
#### bug修复
- 支持表格激活模式配置,可以禁止双击
- 模板:表格视图、表格部件视图给表格部件传递参数,表格内部双击功能加判断([#841270c8](http://172.16.180.229/wangxiang1/VUE_R7_FTL/commit/841270c8b7781ad4b8541873654ce7778fa5a2e5) by @lxm)
- 行编辑日期类编辑器宽度过宽调整
- 模板:去除行编辑日期类最小宽度的样式([#80100810](http://172.16.180.229/wangxiang1/VUE_R7_FTL/commit/80100810d7fcb1f8bfa3081386dd10209820e292) by @lxm)
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册