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

1

上级 d3153c44
vue
\ No newline at end of file
<#-- content -->
<#assign content>
:isSingleSelect="isSingleSelect"
:isSingleSelect="isSingleSelect"
<#if view.getViewType() == 'DEPICKUPGRIDVIEW'>
:selectedData="selectedData"
</#if>
:showBusyIndicator="${ctrl.isShowBusyIndicator()?c}"
<#if view.getViewType() == "DEGRIDVIEW" || view.getViewType() == "DEGRIDVIEW9">
<#if view.getViewType() == "DEGRIDVIEW" || view.getViewType() == "DEGRIDVIEW9">
:isOpenEdit="${view.isRowEditDefault()?c}"
:gridRowActiveMode="gridRowActiveMode"
@save="onSave"
</#if>
</#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>"
loaddraftAction="<#if ctrl.getGetDraftPSControlAction()?? && ctrl.getGetDraftPSControlAction().getPSAppDEMethod()??>${ctrl.getGetDraftPSControlAction().getPSAppDEMethod().getCodeName()}</#if>"
......
......@@ -40,7 +40,7 @@
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected isActivied: boolean = false;
protected isActivied: boolean = true;
/**
* vue 生命周期
......@@ -63,11 +63,15 @@
if (!Object.is(tag, this.name)) {
return;
}
if (!this.isActivied) {
this.$nextTick(() => {
this.isActivied = true;
});
}
<#if view.getPSAppViewEngines()??>
this.$forceUpdate();
<#else>
this.isActivied = false;
this.$nextTick(() => {
this.isActivied = true;
});
</#if>
});
}
}
......
......@@ -2,8 +2,8 @@
<#if ctrl.render??>
${ctrl.render.code}
<#else>
<split class="app-list-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" @on-move-end="onSplitChange">
<div slot='left'>
<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='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">left<#else>top</#if>'>
<#if ctrl.isShowTitleBar()>
<div class='list-exp-bar-header'>
<div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>列表导航栏<#else>${ctrl.getTitle()}</#if></div>
......@@ -38,11 +38,10 @@
</#if>
</div>
</div>
<div slot='right'>
<div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">right<#else>bottom</#if>'>
<component
v-if="selection.view && !Object.is(this.selection.view.viewname, '')"
:is="selection.view.viewname"
:key="$util.createUUID()"
class="viewcontainer2"
:viewDefaultUsage="false"
:viewdata="JSON.stringify(selection.data)">
......@@ -61,7 +60,7 @@
* 视图唯一标识
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() protected viewUID!:string;
......@@ -70,16 +69,41 @@
*
* @protected
* @type {(boolean)}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
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
* @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected searchText:string = "";
......@@ -87,7 +111,7 @@
* 分割宽度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected split: number = 0.5;
......@@ -98,7 +122,7 @@
* 导航视图名称
*
* @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>";
......@@ -106,7 +130,7 @@
* 导航视图参数
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected navViewParam: string = '<#if xDataControl.getNavViewParamJO()??>${xDataControl.getNavViewParamJO()}</#if>';
......@@ -114,7 +138,7 @@
* 导航过滤项
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected navFilter: string = "<#if xDataControl.getNavFilter()??>${xDataControl.getNavFilter()}</#if>";
</#if>
......@@ -123,7 +147,7 @@
* 显示处理提示
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop({ default: true }) protected showBusyIndicator!: boolean;
......@@ -141,7 +165,7 @@
* 获取多项数据
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getDatas(): any[] {
return [];
......@@ -151,7 +175,7 @@
* 获取单项树
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getData(): any {
return null;
......@@ -161,14 +185,14 @@
* 选中数据
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected selection: any = {};
/**
* split值变化事件
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public onSplitChange() {
if(this.split){
......@@ -179,7 +203,7 @@
/**
* Vue声明周期(组件初始化完毕)
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public created() {
this.afterCreated();
......@@ -188,7 +212,7 @@
/**
* 执行created后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterCreated(){
if (this.viewState) {
......@@ -201,16 +225,46 @@
this.viewState.next({ tag: '${xDataControl.getName()}', action: action, data: data });
</#if>
});
}
}
}
/**
* 执行mounted后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterMounted(){
if(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 生命周期
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected destroyed() {
this.afterDestroy();
......@@ -219,7 +273,7 @@
/**
* 执行destroyed后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected afterDestroy() {
if (this.viewStateEvent) {
......@@ -233,7 +287,7 @@
/**
* ${ctrl.name}的选中数据事件
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void {
let data:any = {};
......@@ -254,12 +308,13 @@
this.selection = {};
Object.assign(this.selection, { view: { viewname: this.navViewName }, data:data });
this.$emit('selectionchange',args);
this.$forceUpdate();
}
/**
* ${ctrl.name}的load完成事件
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ${ctrl.name}_load(args:any, tag?: string, $event2?: any){
this.$emit('load',args);
......@@ -268,7 +323,7 @@
/**
* 执行搜索
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected onSearch($event:any) {
<#if ctrl.getPSDEList()??>
......
......@@ -67,6 +67,69 @@
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>
......
......@@ -2,8 +2,8 @@
<#if ctrl.render??>
${ctrl.render.code}
<#else>
<split class="app-dataview-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" @on-move-end="onSplitChange">
<div slot='left'>
<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='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">left<#else>top</#if>'>
<#if ctrl.isShowTitleBar()>
<div class='dataview-exp-bar-header'>
<div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>卡片视图导航栏<#else>${ctrl.getTitle()}</#if></div>
......@@ -38,11 +38,10 @@
</#if>
</div>
</div>
<div slot='right'>
<div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">right<#else>bottom</#if>'>
<component
v-if="selection.view && !Object.is(this.selection.view.viewname, '')"
:is="selection.view.viewname"
:key="$util.createUUID()"
class="viewcontainer2"
:viewDefaultUsage="false"
:viewdata="JSON.stringify(selection.data)">
......@@ -61,7 +60,7 @@
* 视图唯一标识
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() protected viewUID!:string;
......@@ -70,16 +69,41 @@
*
* @protected
* @type {(boolean)}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
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
* @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected searchText:string = "";
......@@ -87,7 +111,7 @@
* 分割宽度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected split: number = 0.5;
......@@ -98,7 +122,7 @@
* 导航视图名称
*
* @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>";
......@@ -106,7 +130,7 @@
* 导航视图参数
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected navViewParam: string = '<#if xDataControl.getNavViewParamJO()??>${xDataControl.getNavViewParamJO()}</#if>';
......@@ -114,7 +138,7 @@
* 导航过滤项
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected navFilter: string = "<#if xDataControl.getNavFilter()??>${xDataControl.getNavFilter()}</#if>";
</#if>
......@@ -123,7 +147,7 @@
* 显示处理提示
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop({ default: true }) protected showBusyIndicator!: boolean;
......@@ -141,7 +165,7 @@
* 获取多项数据
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getDatas(): any[] {
return [];
......@@ -151,7 +175,7 @@
* 获取单项树
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getData(): any {
return null;
......@@ -161,14 +185,14 @@
* 选中数据
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected selection: any = {};
/**
* split值变化事件
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public onSplitChange() {
if(this.split){
......@@ -179,7 +203,7 @@
/**
* Vue声明周期(组件初始化完毕)
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public created() {
this.afterCreated();
......@@ -188,7 +212,7 @@
/**
* 执行created后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterCreated(){
if (this.viewState) {
......@@ -201,16 +225,46 @@
this.viewState.next({ tag: '${dataview.name}', action: action, data: data });
</#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)){
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}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected destroyed() {
this.afterDestroy();
......@@ -219,7 +273,7 @@
/**
* 执行destroyed后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected afterDestroy() {
if (this.viewStateEvent) {
......@@ -237,7 +291,7 @@
* @param {string} [tag]
* @param {*} [$event2]
* @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void {
let data:any = {};
......@@ -258,6 +312,7 @@
this.selection = {};
Object.assign(this.selection, { view: { viewname: this.navViewName }, data:data });
this.$emit('selectionchange',args);
this.$forceUpdate();
}
/**
......@@ -267,7 +322,7 @@
* @param {string} [tag]
* @param {*} [$event2]
* @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ${ctrl.name}_load(args: any[], tag?: string, $event2?: any): void {
this.$emit('load',args);
......@@ -276,7 +331,7 @@
/**
* 执行搜索
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected onSearch() {
<#if ctrl.getPSDEDataView()??>
......
......@@ -67,6 +67,66 @@
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>
......
......@@ -2,24 +2,22 @@
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
/*** BEGIN:potal菜单 ***/
.porlet{
>.app-app-menu{
>.ivu-row{
.ivu-card{
.ivu-card-body{
>p{
>.app-menus{
display: flex;
flex-wrap: wrap;
>div{
width: 100%;
margin-right: 10px;
.ivu-card-body{
>div{
display: flex;
>span{
margin-right: 12px;
}
.app-app-menu{
>.ivu-row{
.ivu-card{
.ivu-card-body{
>p{
>.app-menus{
display: flex;
flex-wrap: wrap;
>div{
width: 100%;
margin-right: 10px;
.ivu-card-body{
>div{
display: flex;
>span{
margin-right: 12px;
}
}
}
......@@ -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 @@
<#if ctrl.render??>
${ctrl.render.code}
<#else>
<split class="app-calendar-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" @on-move-end="onSplitChange">
<div slot='left'>
<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='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">left<#else>top</#if>'>
<#if ctrl.isShowTitleBar()>
<div class='calendar-exp-bar-header'>
<div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>列表导航栏<#else>${ctrl.getTitle()}</#if></div>
......@@ -38,11 +38,10 @@
</#if>
</div>
</div>
<div slot='right'>
<div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">right<#else>bottom</#if>'>
<component
v-if="selection.view && !Object.is(this.selection.view.viewname, '')"
:is="selection.view.viewname"
:key="$util.createUUID()"
class="viewcontainer2"
:viewDefaultUsage="false"
:viewdata="JSON.stringify(selection.data)">
......@@ -61,7 +60,7 @@
* 视图唯一标识
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() protected viewUID!:string;
......@@ -70,16 +69,41 @@
*
* @protected
* @type {(boolean)}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
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
* @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected searchText:string = "";
......@@ -87,7 +111,7 @@
* 分割宽度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected split: number = 0.5;
......@@ -98,7 +122,7 @@
* 导航视图名称
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected navViewName: any = {
<#if xDataControl.getPSSysCalendarItems()??>
......@@ -112,7 +136,7 @@
* 导航视图参数
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected navViewParam: any = {
<#if xDataControl.getPSSysCalendarItems()??>
......@@ -126,7 +150,7 @@
* 导航过滤项
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
</#if>
protected navFilter: any = {
......@@ -141,7 +165,7 @@
* 显示处理提示
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop({ default: true }) protected showBusyIndicator!: boolean;
......@@ -159,7 +183,7 @@
* 获取多项数据
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getDatas(): any[] {
return [];
......@@ -169,7 +193,7 @@
* 获取单项树
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getData(): any {
return null;
......@@ -179,16 +203,27 @@
* 选中数据
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected selection: any = {};
/**
* split值变化事件
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
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){
this.$store.commit("setViewSplit",{viewUID:this.viewUID,viewSplit:this.split});
}
......@@ -197,7 +232,7 @@
/**
* Vue声明周期(组件初始化完毕)
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public created() {
this.afterCreated();
......@@ -206,7 +241,7 @@
/**
* 执行created后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterCreated(){
if (this.viewState) {
......@@ -220,15 +255,45 @@
</#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)){
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}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected destroyed() {
this.afterDestroy();
......@@ -237,7 +302,7 @@
/**
* 执行destroyed后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected afterDestroy() {
if (this.viewStateEvent) {
......@@ -251,7 +316,7 @@
/**
* ${ctrl.name}的选中数据事件
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void {
let data:any = {};
......@@ -277,12 +342,13 @@
this.selection = {};
Object.assign(this.selection, { view: { viewname: this.navViewName[arg.itemType] }, data:data });
this.$emit('selectionchange',args);
this.$forceUpdate();
}
/**
* ${ctrl.name}的load完成事件
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ${ctrl.name}_load(args:any, tag?: string, $event2?: any){
this.$emit('load',args);
......@@ -291,7 +357,7 @@
/**
* 执行搜索
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected onSearch($event:any) {
<#if ctrl.getXDataPSControl()??>
......
......@@ -67,6 +67,69 @@
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>
......
......@@ -7,6 +7,8 @@
class="design-tree"
node-key="id"
lazy
:show-checkbox="!isSingleSelect"
:check-on-click-node="!isSingleSelect"
:default-expanded-keys="expandedKeys"
:props="{
label: 'text',
......@@ -15,6 +17,7 @@
:load="load"
:highlight-current="true"
:expand-on-click-node="false"
@check="onCheck"
@current-change="selectionChange"
:filter-node-method="filterNode"
>
......@@ -54,7 +57,7 @@
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public getDatas(): any[] {
return [this.selectData];
return [this.selectedNodes];
}
/**
......@@ -64,9 +67,17 @@
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
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 @@
protected inited: boolean = false;
/**
* 选中数据
* 已选中数据集合
*
* @type {*}
* @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
......@@ -186,17 +244,43 @@
*
* @private
* @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}')}
*/
private selectionChange(data: any, node: any) {
this.selectData = {};
if (data.disableselect) {
// 禁用项处理
if (data.disabled){
node.isCurrent = false;
this.$emit('selectionchange', []);
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 @@
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected refresh_parent(): void {
if (Object.keys(this.selectData).length === 0) {
if (Object.keys(this.currentselectedNode).length === 0) {
return;
}
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) {
return;
}
......@@ -335,9 +419,9 @@
}
this.nodes = response.data;
resolve([..._items]);
if(this.isSelectFirstDefault){
this.setDefaultSelection(_items, true);
}
let isRoot = Object.is(node.level,0);
let isSelectedAll = node.checked;
this.setDefaultSelection(_items, isRoot, isSelectedAll);
this.$emit("load", _items);
}).catch((response: any) => {
resolve([]);
......@@ -355,10 +439,10 @@
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected refresh(args: any[]): void {
if (Object.keys(this.selectData).length === 0) {
if (Object.keys(this.currentselectedNode).length === 0) {
return;
}
const id: string = this.selectData.id;
const id: string = this.currentselectedNode.id;
const param: any = { srfnodeid: id };
Object.assign(param, this.parentData);
this.refresh_node(param, false);
......@@ -369,7 +453,7 @@
*
* @private
* @param {*} [arg={}]
* @param {boolean} parentnode
* @param {boolean} parentnode 是否是刷新父节点
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
private refresh_node(arg: any = {}, parentnode: boolean): void {
......@@ -386,11 +470,9 @@
const tree: any = this.$refs.${ctrl.name};
tree.updateKeyChildren(id, _items);
if (parentnode) {
this.selectData = {};
}
if(this.isSelectFirstDefault){
this.setDefaultSelection(_items);
this.currentselectedNode = {};
}
this.setDefaultSelection(_items);
}).catch((response: any) => {
if (response && response.status === 401) {
return;
......@@ -400,7 +482,7 @@
}
/**
* 格式化数据
* 默认展开节点
*
* @private
* @param {any[]} items
......@@ -418,35 +500,76 @@
}
/**
* 设置默认选中
*
* @param {any[]} items
* @param {any[]} isRoot 是否是加载根节点
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected setDefaultSelection(items: any[], isRoot:boolean = false): void {
let index = items.findIndex((item: any) => item.selected);
if(index === -1) {
if(isRoot){
index = 0;
}else{
return;
* 设置默认选中,回显数项,选中所有子节点
*
* @param {any[]} items 当前节点所有子节点集合
* @param {boolean} isRoot 是否是加载根节点
* @param {boolean} isSelectedAll 是否选中所有子节点
* @memberof MainTree
*/
protected setDefaultSelection(items: any[], isRoot: boolean = false, isSelectedAll: boolean = false): void {
let defaultData: any;
// 导航中选中第一条配置的默认选中,没有选中第一条
if(this.isSelectFirstDefault){
if(this.isSingleSelect){
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);
this.$emit('selectionchange', [this.selectData]);
// 已选数据的回显
if(this.echoselectedNodes && this.echoselectedNodes.length > 0){
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
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected setTreeNodeHighLight(data: any): void {
this.selectData = {};
Object.assign(this.selectData, data);
const tree: any = this.$refs.${ctrl.name};
tree.setCurrentKey(data.id);
}
......@@ -462,7 +585,7 @@
let content;
if (node && node.data) {
const data: any = node.data;
this.selectData = { ...data };
this.currentselectedNode = { ...data };
const tags: string[] = data.id.split(';');
<#-- <#if ctrl.getPSControls()??>
<#list ctrl.getPSControls() as childCtrl>
......
......@@ -11,6 +11,10 @@
<#if view.getViewType() == 'DETREEEXPVIEW'>
:isSelectFirstDefault="true"
</#if>
<#if view.getViewType() == 'DEPICKUPTREEVIEW'>
:isSingleSelect="isSingleSelect"
:selectedData="selectedData"
</#if>
</#assign>
<#ibizinclude>
../@MACRO/HTML/DEFAULT.html.ftl
......
......@@ -189,7 +189,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
Object.assign(treeNode, { srfmajortext: treeNode.text });
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}' });
strNodeId += this.TREENODE_SEPARATOR;
strNodeId += '${node.getNodeValue()?j_string}';
......@@ -199,13 +199,13 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
strNodeId += filter.realnodeid;
</#if>
<#else>
<#else>
// 没有指定节点值,直接使用父节点值
Object.assign(treeNode, { srfkey: filter.realnodeid });
strNodeId += this.TREENODE_SEPARATOR;
strNodeId += filter.realnodeid;
</#if>
</#if>
Object.assign(treeNode, { id: strNodeId });
<#if node.getPSSysImage()??>
......@@ -222,7 +222,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
</#if>
<#if node.isDisableSelect()>
Object.assign(treeNode, { disableselect: true });
Object.assign(treeNode, { disabled: true });
</#if>
<#if node.isExpanded()>
......@@ -285,7 +285,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
Object.assign(treeNode, { enablecheck: true });
</#if>
<#if node.isDisableSelect()>
Object.assign(treeNode, { disableselect: true });
Object.assign(treeNode, { disabled: true });
</#if>
<#if node.isExpanded()>
<#if node.isExpandFirstOnly()>
......@@ -384,7 +384,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
Object.assign(treeNode, { enablecheck: true });
</#if>
<#if node.isDisableSelect()>
Object.assign(treeNode, { disableselect: true });
Object.assign(treeNode, { disabled: true });
</#if>
<#if node.isExpanded()>
<#if node.isExpandFirstOnly()>
......
......@@ -2,7 +2,7 @@
<#if ctrl.render??>
${ctrl.render.code}
<#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'>
<#if ctrl.isShowTitleBar()>
<div class='tree-exp-bar-header'>
......@@ -30,7 +30,6 @@
<component
v-if="selection.view && !Object.is(this.selection.view.viewname, '')"
:is="selection.view.viewname"
:key="$util.createUUID()"
class="viewcontainer2"
:viewDefaultUsage="false"
:viewdata="JSON.stringify(selection.data)"
......@@ -50,7 +49,7 @@
* 视图唯一标识
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() protected viewUID!:string;
......@@ -58,7 +57,7 @@
* 获取多项数据
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getDatas(): any[] {
return [];
......@@ -68,27 +67,33 @@
* 获取单项树
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getData(): any {
return {};
}
/**
* 选中数据
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected selection: any = {};
/**
* 控件宽度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ctrlWidth:number = <#if ctrl.getWidth()??>${ctrl.getWidth()}<#else>0</#if>;
/**
* 过滤值
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected srfnodefilter: string = '';
......@@ -97,7 +102,7 @@
*
* @private
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
private istLoadDefaultRefView: boolean = false;
......@@ -105,14 +110,14 @@
* 分割宽度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected split: number = 0.2;
/**
* split值变化事件
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public onSplitChange() {
if(this.split){
......@@ -125,7 +130,7 @@
*
* @param {*} [arg={}]
* @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected getExpItemView(arg: any = {}): any {
let expmode = arg.nodetype.toUpperCase();
......@@ -156,7 +161,7 @@
* @param {string} [tag]
* @param {*} [$event2]
* @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void {
if (args.length === 0) {
......@@ -184,6 +189,7 @@
this.selection = {};
Object.assign(this.selection, { view: { viewname: refview.viewname }, data: parentdata });
this.$emit('selectionchange',args);
this.$forceUpdate();
}
/**
......@@ -193,7 +199,7 @@
* @param {string} [tag]
* @param {*} [$event2]
* @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ${ctrl.name}_load(args: any[], tag?: string, $event2?: any): void {
this.$emit('load',args);
......@@ -202,7 +208,7 @@
/**
* 执行搜索
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected onSearch(): void {
<#if ctrl.getPSDETree()??>
......@@ -215,7 +221,7 @@
/**
* vue 声明周期
*
* @memberof @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected created() {
this.afterCreated();
......@@ -224,7 +230,7 @@
/**
* 执行created后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected afterCreated(){
if (this.viewState) {
......@@ -239,15 +245,39 @@
</#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)){
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 生命周期
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected destroyed() {
this.afterDestroy();
......@@ -256,7 +286,7 @@
/**
* 执行destroyed后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected afterDestroy() {
if (this.viewStateEvent) {
......@@ -271,7 +301,7 @@
* 视图数据变化
*
* @param {*} $event
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected onViewDatasChange($event: any): void {
this.$emit('selectionchange', $event);
......@@ -281,7 +311,7 @@
* 视图数据被激活
*
* @param {*} $event
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected viewDatasActivated($event: any): void {
this.$emit('activated', $event);
......@@ -291,7 +321,7 @@
* 视图数据加载完成
*
* @param {*} $event
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected onViewLoad($event: any): void {
this.$emit('load', $event);
......
......@@ -22,8 +22,11 @@
}
}
.search-content {
width: 30%;
height: 48px;
padding: 10px 10px 10px 0;
min-width: 200px;
max-width: 400px;
}
.tree-exp-content {
<#-- 计算高度 -->
......@@ -52,6 +55,9 @@
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';
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
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.fillForm(data,action);
<#if ctrl.getControlType() == 'FORM'>
......
......@@ -68,7 +68,11 @@
<#-- END:前端绘制代码表 -->
<#else>
<#-- 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>
</#if>
<#-- END:常规显示 -->
</#if>
</template>
......
......@@ -17,8 +17,9 @@
:summary-method="getSummaries"
</#if>
<#-- 表格聚合end -->
stripe :height="isEnablePagingBar && items.length > 0 ? 'calc(100% - 50px)' : '100%'"
:height="isEnablePagingBar && items.length > 0 ? 'calc(100% - 50px)' : '100%'"
:highlight-current-row ="isSingleSelect"
:row-class-name="getRowClassName"
@row-click="rowClick($event)"
@select-all="selectAll($event)"
@select="select($event)"
......@@ -270,6 +271,51 @@ import CodeListService from "@service/app/codelist-service";
*/
@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";
if(_this.isSelectFirstDefault){
_this.rowClick(_this.items[0]);
}
if(_this.context.selectedData){
if(_this.selectedData){
const refs: any = _this.$refs;
if (refs.multipleTable) {
refs.multipleTable.clearSelection();
_this.context.selectedData.forEach((selection:any)=>{
JSON.parse(_this.selectedData).forEach((selection:any)=>{
let selectedItem = _this.items.find((item:any)=>{
return Object.is(item.srfkey, selection.srfkey);
});
......@@ -550,7 +596,17 @@ import CodeListService from "@service/app/codelist-service";
} else {
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.selections = [];
resolve(response);
......@@ -643,7 +699,11 @@ import CodeListService from "@service/app/codelist-service";
if (Object.is(data.type, 'maxRowCount')) {
Object.assign(page, { page: 0, size: data.maxRowCount });
} 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;
}
// 设置排序
......@@ -663,7 +723,11 @@ import CodeListService from "@service/app/codelist-service";
this.$Notice.error({ title: '', desc: '数据导出失败,' + response.info });
return;
}
doExport(JSON.parse(JSON.stringify(response.data)));
try {
doExport(JSON.parse(JSON.stringify(response.data)));
} catch (error) {
console.error(error);
}
}).catch((response: any) => {
if (response && response.status === 401) {
return;
......@@ -878,7 +942,7 @@ import CodeListService from "@service/app/codelist-service";
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected rowDBLClick($event: any): void {
if (!$event || this.actualIsOpenEdit) {
if (!$event || this.actualIsOpenEdit || Object.is(this.gridRowActiveMode,0)) {
return;
}
this.selections = [];
......@@ -934,7 +998,7 @@ import CodeListService from "@service/app/codelist-service";
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected rowClick($event: any, ifAlways: boolean = false): void {
if (!ifAlways && (!$event || actualIsOpenEdit)) {
if (!ifAlways && (!$event || this.actualIsOpenEdit)) {
return;
}
if(this.stopRowClick) {
......@@ -958,8 +1022,10 @@ import CodeListService from "@service/app/codelist-service";
if (refs.multipleTable) {
if(this.isSingleSelect){
refs.multipleTable.clearSelection();
refs.multipleTable.setCurrentRow($event);
}else{
refs.multipleTable.toggleRowSelection($event);
}
refs.multipleTable.toggleRowSelection($event);
}
this.$emit('selectionchange', this.selections);
......@@ -1435,6 +1501,19 @@ import CodeListService from "@service/app/codelist-service";
}
</#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>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude>
......
......@@ -2,8 +2,8 @@
<#if ctrl.render??>
${ctrl.render.code}
<#else>
<split class="app-grid-exp-bar <#if ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" v-model="split" @on-move-end="onSplitChange">
<div slot='left'>
<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='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">left<#else>top</#if>'>
<#if ctrl.isShowTitleBar()>
<div class='grid-exp-bar-header'>
<div><icon type='ios-home-outline'/><#if ctrl.getTitle() == ''>表格导航栏<#else>${ctrl.getTitle()}</#if></div>
......@@ -38,11 +38,10 @@
</#if>
</div>
</div>
<div slot='right'>
<div slot='<#if view.getSideBarLayout()?? && view.getSideBarLayout() == "LEFT">right<#else>bottom</#if>'>
<component
v-if="selection.view && !Object.is(this.selection.view.viewname, '')"
:is="selection.view.viewname"
:key="$util.createUUID()"
class="viewcontainer2"
:viewDefaultUsage="false"
:viewdata="JSON.stringify(selection.data)">
......@@ -64,7 +63,7 @@
* 打开新建数据视图
*
* @type {any}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() protected newdata: any;
</#if>
......@@ -73,7 +72,7 @@
* 打开编辑数据视图
*
* @type {any}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() protected opendata: any;
</#if>
......@@ -83,8 +82,8 @@
/**
* 视图唯一标识
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() protected viewUID!:string;
......@@ -93,15 +92,40 @@
*
* @protected
* @type {(boolean)}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
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 {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected selection: any = {};
......@@ -110,7 +134,7 @@
*
* @protected
* @type {(string)}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected searchText:string = "";
......@@ -118,7 +142,7 @@
* 分割宽度
*
* @type {number}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected split: number = 0.5;
<#if ctrl.getXDataPSControl()??>
......@@ -128,7 +152,7 @@
* 导航视图名称
*
* @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>";
......@@ -136,7 +160,7 @@
* 导航视图参数
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected navViewParam: string = '<#if xDataControl.getNavViewParamJO()??>${xDataControl.getNavViewParamJO()}</#if>';
......@@ -144,7 +168,7 @@
* 导航过滤项
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected navFilter: string = "<#if xDataControl.getNavFilter()??>${xDataControl.getNavFilter()}</#if>";
</#if>
......@@ -170,7 +194,7 @@
/**
* split值变化事件
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public onSplitChange() {
if(this.split){
......@@ -182,7 +206,7 @@
* 获取多项数据
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getDatas(): any[] {
return [];
......@@ -192,7 +216,7 @@
* 获取单项树
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getData(): any {
return null;
......@@ -201,7 +225,7 @@
/**
* Vue声明周期(组件初始化完毕)
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public created() {
this.afterCreated();
......@@ -210,7 +234,7 @@
/**
* 执行created后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterCreated(){
if (this.viewState) {
......@@ -224,15 +248,45 @@
</#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)){
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}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected destroyed() {
this.afterDestroy();
......@@ -241,7 +295,7 @@
/**
* 执行destroyed后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected afterDestroy() {
if (this.viewStateEvent) {
......@@ -255,7 +309,7 @@
/**
* 执行搜索
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected onSearch($event:any) {
<#if ctrl.getXDataPSControl()??>
......@@ -269,7 +323,7 @@
/**
* ${ctrl.name}的选中数据事件
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ${ctrl.name}_selectionchange(args: any [], tag?: string, $event2?: any): void {
let data:any = {};
......@@ -290,12 +344,13 @@
this.selection = {};
Object.assign(this.selection, { view: { viewname: this.navViewName }, data:data });
this.$emit('selectionchange',args);
this.$forceUpdate();
}
/**
* ${ctrl.name}的load完成事件
*
* @memberof ${srfclassname('${ctrl.codeName}')}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
protected ${ctrl.name}_load(args:any, tag?: string, $event2?: any){
this.$emit('load',args);
......
......@@ -67,6 +67,66 @@
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>
......
......@@ -3,14 +3,14 @@
<card class='view-card' :dis-hover="true" :padding="0" :bordered="false">
<div class="content-container pickup-view">
<div class="translate-contant">
<div class="center">
<div class="center" :style="{width : !isShowButton ? '100%' : ''}">
<#if view.hasPSControl('pickupviewpanel')>
<@ibizindent blank=20>
${P.getCtrlCode('pickupviewpanel', 'CONTROL.html').code}<#t>
</@ibizindent>
</#if>
</div>
<div class="translate-buttons">
<div v-if="isShowButton" class="translate-buttons">
<div class="buttons">
<i-button type="primary" :title="this.containerModel.view_rightbtn.text"
:disabled="this.containerModel.view_rightbtn.disabled"
......@@ -32,7 +32,7 @@
</i-button>
</div>
</div>
<div class="right">
<div v-if="isShowButton" class="right">
<div class="mpicker-select">
<div v-for="(item, index) in viewSelections" :key="index" :class="item._select ? 'select' : ''" @click="selectionsClick(item)" @dblclick="selectionsDBLClick(item)">
<span>{{item.srfmajortext}}</span>
......@@ -40,7 +40,7 @@
</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' }">
<i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk">{{this.containerModel.view_okbtn.text}}</i-button>
&nbsp;&nbsp;
......
......@@ -7,7 +7,7 @@
${P.getCtrlCode('pickupviewpanel', 'CONTROL.html').code}<#t>
</@ibizindent>
</#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' }">
<i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk">{{this.containerModel.view_okbtn.text}}</i-button>
&nbsp;&nbsp;
......
......@@ -3,7 +3,7 @@
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false">
<#-- 不带数据信息标题 -->
<#if view.isShowCaptionBar()>
<p v-if="ifShowButtons" slot='title'>
<p v-if="isShowButton" slot='title'>
<#if view.getPSSysImage()??>
<#assign viewimg = view.getPSSysImage()/>
<#if viewimg.getImagePath() != "">
......@@ -30,13 +30,6 @@
</div>
</#if>
</@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>
</card>
</div>
\ No newline at end of file
......@@ -8,11 +8,11 @@
:viewparam="viewparam"
:viewDefaultUsage="false"
:isSingleSelect="isSingleSelect"
:ifShowButtons="ifShowButtons"
:selectedData="selectedData"
:isShowButton="isShowButton"
@viewdataschange="onViewDatasChange"
@viewdatasactivated="viewDatasActivated"
@viewload="onViewLoad"
:key="this.$util.createUUID()">
@viewload="onViewLoad">
</component>
</div>
</template>
......@@ -23,7 +23,14 @@ import ${srfclassname('${ctrl.codeName}')}Model from './${srffilepath2(ctrl.code
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl
</#ibizinclude>
/**
* 选中数据字符串
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() protected selectedData?: string;
/**
* 获取多项数据
*
......@@ -77,7 +84,7 @@ import ${srfclassname('${ctrl.codeName}')}Model from './${srffilepath2(ctrl.code
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop({default: true}) protected ifShowButtons!: boolean;
@Prop({default: true}) protected isShowButton!: boolean;
/**
* 是否单选
......
<#-- content -->
<#assign content>
:isSingleSelect="isSingleSelect"
:ifShowButtons="ifShowButtons"
:selectedData="selectedData"
:isShowButton="isShowButton"
</#assign>
<#ibizinclude>
../@MACRO/HTML/DEFAULT.html.ftl
......
<app-image-upload
:multiple="true"
<app-file-upload
:formState="viewState"
:ignorefieldvaluechange="false"
@formitemvaluechange="($event)=>{onGridItemValueChange(row,$event)}"
......@@ -7,7 +6,8 @@
:name='column.property'
:value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:rowPreview="true"
uploadparams='${editor.getEditorParam('uploadparams','')}'
exportparams='${editor.getEditorParam('exportparams','')}'
customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;">
</app-image-upload>
\ No newline at end of file
:customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;">
</app-file-upload>
\ No newline at end of file
<app-image-upload
:multiple="false"
<app-file-upload
:formState="viewState"
:ignorefieldvaluechange="false"
@formitemvaluechange="($event)=>{onGridItemValueChange(row,$event)}"
......@@ -7,7 +6,8 @@
:name='column.property'
:value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:rowPreview="true"
uploadparams='${editor.getEditorParam('uploadparams','')}'
exportparams='${editor.getEditorParam('exportparams','')}'
customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;">
</app-image-upload>
\ No newline at end of file
:customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;">
</app-file-upload>
\ 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 @@
:context="context"
:viewparams="viewparams"
:itemParam=<@getItemParams editor />
<#if editor.getPickupPSAppView().getViewType() == 'DEMPICKUPVIEW'>
:isSingleSelect="false"
</#if>
:disabled="detailsModel.${editor.name}.disabled"
name='${editor.name}'
<#if editor.getPSAppDataEntity?? && editor.getPSAppDataEntity()??>
......
......@@ -7,6 +7,9 @@
:context="context"
:viewparams="viewparams"
: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"
name='${editor.name}'
<#if editor.getPSAppDataEntity?? && editor.getPSAppDataEntity()??>
......
......@@ -6,6 +6,7 @@
:name='column.property'
:value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:rowPreview="true"
uploadparams='${editor.getEditorParam('uploadparams','')}'
exportparams='${editor.getEditorParam('exportparams','')}'
:customparams="<#if editor.getEditorParam('customparams','') != ''>${editor.getEditorParam('customparams','')}<#else>{}</#if>" style="${editor.getEditorCssStyle()}overflow: auto;">
......
......@@ -7,6 +7,7 @@
:name='column.property'
:value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:rowPreview="true"
uploadparams='${editor.getEditorParam('uploadparams','')}'
exportparams='${editor.getEditorParam('exportparams','')}'
: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>
\ No newline at end of file
<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
<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>
\ 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="${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
<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>
\ 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="${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
<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>
\ 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="${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
<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>
\ 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="${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
<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>
\ 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="${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
<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>
\ 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="${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
<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>
\ 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="${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
<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 @@
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected click${item.codeName}(item: any = {}){
this.$Notice.error({ title: '错误', desc: '暂不支持此项操作' });
}
\ No newline at end of file
......@@ -5,5 +5,5 @@
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
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 @@
// 界面行为容器对象 _this
const _this: any = this;
if (xData && xData.save instanceof Function) {
xData.save().then((response: any) => {
if (!response || response.status !== 200) {
return;
}
_this.$emit('viewdataschange', [{ ...response.data }]);
});
xData.save();
} else if (_this.save && _this.save instanceof Function) {
_this.save();
}
......
......@@ -10,12 +10,7 @@
* @memberof ${srfclassname('${view.name}')}Base
*/
protected ${item.getFullCodeName()}(args: any[],contextJO?:any, params?: any, $event?: any, xData?: any,actionContext?:any,srfParentDeName?:string) {
const _view: any = this;
if (_view.viewdata) {
_view.$emit('close');
} else if (_view.$tabPageExp) {
_view.$tabPageExp.onClose(_view.$route.fullPath);
}
this.closeView(args);
if(window.parent){
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 @@
} else if(xData.newRow && xData.newRow instanceof Function) {
xData.newRow([{ ...data }], params, $event, xData);
}else{
_this.$Notice.error({ title: '错误', desc: 'newdata 视图处理逻辑不存在,请添加!' });
_this.$Notice.error({ title: '错误', desc: 'newRow 视图处理逻辑不存在,请添加!' });
}
}
\ No newline at end of file
......@@ -10,5 +10,5 @@
* @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
......@@ -10,5 +10,5 @@
* @memberof ${srfclassname('${view.name}')}Base
*/
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 @@
<#ibizinclude>
./VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude>
/**
* 选中数据字符串
*
* @type {string}
* @memberof ${srfclassname('${view.name}')}
*/
@Prop() protected selectedData?: string;
/**
/**
* 是否单选
*
* @type {boolean}
......
......@@ -155,6 +155,7 @@ export default class ${srfclassname('${view.name}')}Base extends Vue {
onParamData(newVal: any, oldVal: any) {
if(newVal){
Object.assign(this.viewparams, JSON.parse(this.viewparam));
<#if watch_viewparam_block??>${watch_viewparam_block}</#if>
}
}
......
......@@ -2,10 +2,23 @@
../@MACRO/LAYOUTPANEL_VIEW.template.ftl
</#ibizinclude>
<#assign watch_viewparam_block>
if(this.viewparams.selectedData){
this.selectedData = JSON.stringify(this.viewparams.selectedData);
}
</#assign>
<#ibizinclude>
../@MACRO/VIEW_HEADER-BASE.vue.ftl
</#ibizinclude>
<#assign mounted_block>
if(this.viewparams.selectedData){
this.engine.onCtrlEvent('pickupviewpanel', 'selectionchange', this.viewparams.selectedData);
this.onCLickRight();
}
</#assign>
<#ibizinclude>
../@MACRO/VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude>
......@@ -15,7 +28,23 @@
* @type {boolean}
* @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 @@
../@MACRO/LAYOUTPANEL_VIEW.template.ftl
</#ibizinclude>
<#assign watch_viewparam_block>
if(this.viewparams.selectedData){
this.selectedData = JSON.stringify(this.viewparams.selectedData);
}
</#assign>
<#ibizinclude>
../@MACRO/VIEW_HEADER-BASE.vue.ftl
</#ibizinclude>
<#assign mounted_block>
if(this.viewparams.selectedData){
this.engine.onCtrlEvent('pickupviewpanel', 'selectionchange', this.viewparams.selectedData);
}
</#assign>
<#ibizinclude>
../@MACRO/VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude>
/**
* 选中数据的字符串
*
* @type {string}
* @memberof ${srfclassname('${view.name}')}
*/
protected selectedData: string = "";
/**
* 视图选中数据
......@@ -24,7 +43,7 @@
* @type {boolean}
* @memberof ${srfclassname('${view.name}')}Base
*/
@Prop({default: true}) public ifShowButtons!: boolean;
@Prop({default: true}) public isShowButton!: boolean;
/**
* 是否单选
......
......@@ -24,7 +24,7 @@
* @type {boolean}
* @memberof ${srfclassname('${view.name}')}
*/
@Prop({default: true}) public ifShowButtons!: boolean;
@Prop({default: true}) public isShowButton!: boolean;
/**
* 是否单选
......
......@@ -9,20 +9,35 @@
<#ibizinclude>
../@MACRO/VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude>
/**
* 选中数据字符串
*
* @type {string}
* @memberof ${srfclassname('${view.name}')}
*/
@Prop() protected selectedData?: string;
/**
* 是否显示按钮
* 是否单选
*
* @type {boolean}
* @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}
* @memberof ${srfclassname('${view.name}')}
* @memberof ${srfclassname('${view.name}')}Base
*/
public srfnodefilter: string = '';
......@@ -30,7 +45,7 @@
* 快速搜索
*
* @returns {void}
* @memberof ${srfclassname('${view.name}')}
* @memberof ${srfclassname('${view.name}')}Base
*/
public onSearch(): void {
if (!this.viewState) {
......@@ -41,33 +56,6 @@
</#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>
../@MACRO/VIEW_BOTTOM-BASE.vue.ftl
</#ibizinclude>
......
......@@ -64,10 +64,11 @@ export default class ${srfclassname('${item.getCodeName()}')} {
const data = response.data;
resolve(this.doItems(data));
} else {
reject([])
resolve([]);
}
}).catch((response: any) => {
reject([])
console.error(response);
reject(response);
});
});
}
......@@ -108,10 +109,11 @@ export default class ${srfclassname('${item.getCodeName()}')} {
const data = response.data;
resolve(this.doItems(data));
} else {
reject([])
resolve([]);
}
}).catch((response: any) => {
reject([])
console.error(response);
reject(response);
});
});
}
......
......@@ -17,6 +17,63 @@ const mock = MockAdapter.getInstance();
</#macro>
<#-- 日志方法: 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> = [
<#if de.getAllPSDESampleDatas?? && de.getAllPSDESampleDatas()??>
......@@ -165,14 +222,15 @@ mock.onPost(new RegExp(/wf\/${workflow.getCodeName()?lower_case}\/v${wfversion.g
</#list> -->
</#if>
<#-- 实体接口mock数据start -->
<#-- 实体接口mock数据:BEGIN -->
<#if item.getAllPSAppDEMethods?? && item.getAllPSAppDEMethods()??>
<#list item.getAllPSAppDEMethods() as singleAppMethod>
<#if singleAppMethod.getPSDEServiceAPIMethod?? && singleAppMethod.getPSDEServiceAPIMethod()??>
<#assign singleServiceApi = singleAppMethod.getPSDEServiceAPIMethod()/>
</#if>
<#list item.getAllPSAppDEMethods() as singleAppMethod>
<#if singleAppMethod.getPSDEServiceAPIMethod?? && singleAppMethod.getPSDEServiceAPIMethod()??>
<#assign singleServiceApi = singleAppMethod.getPSDEServiceAPIMethod()/>
</#if>
<#-- 应用实体关系路径数大于0 && 拥有实体服务接口方法: BEGIN -->
<#if item.getPSAppDERSPathCount() gt 0 && singleServiceApi??>
<#list 1..item.getPSAppDERSPathCount() as count>
<#list 1..item.getPSAppDERSPathCount() as count>
<#assign path = ''/>
<#assign param = ''/>
<#list item.getPSAppDERSPath(count_index) as deRSPath>
......@@ -183,7 +241,7 @@ mock.onPost(new RegExp(/wf\/${workflow.getCodeName()?lower_case}\/v${wfversion.g
</#if>
</#list>
<#-- 方法类型为SELECT -->
<#-- 方法类型为SELECT: BEGIN -->
<#if singleAppMethod.getMethodType() == "SELECT">
// ${singleAppMethod.getCodeName()}
......@@ -209,7 +267,8 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="_items"/>
return [status, _items];
});
<#-- 方法类型为FETCH -->
<#-- 方法类型为SELECT: END -->
<#-- 方法类型为FETCH: BEGIN -->
<#elseif singleAppMethod.getMethodType() == "FETCH">
// ${singleAppMethod.getCodeName()}
......@@ -251,10 +310,11 @@ mock.onGet(new RegExp(/^\/${path}${srfpluralize(item.codeName)?lower_case}<#if s
<@endLog appMethod=singleAppMethod dataName="items"/>
return [status, items];
});
<#-- 方法类型为FETCH: END -->
<#-- 方法类型为DEACTION: BEGIN -->
<#else>
<#-- 方法类型为DEACTION start -->
<#-- 方法请求不需要参数情况: BEGIN -->
<#if singleServiceApi.getRequestParamType() == "NONE">
<#-- 无参数情况start,如GetDraft -->
// ${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) => {
......@@ -267,9 +327,10 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="{}"/>
return [status, {}];
});
<#-- 无参数情况end -->
<#-- 方法请求不需要参数情况: END -->
<#-- 方法请求参数为指定字段属性值: BEGIN -->
<#elseif singleServiceApi.getRequestParamType() == "FIELD">
<#-- 指定属性情况start -->
<@outputSort 1 'after'>
// ${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) => {
......@@ -294,9 +355,10 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="_items?_items:{}"/>
return [status, _items?_items:{}];
});
<#-- 指定属性情况start -->
</@outputSort>
<#-- 方法请求参数为指定字段属性值: END -->
<#-- 方法请求参数为实体对象数据: BEGIN -->
<#elseif singleServiceApi.getRequestParamType() == "ENTITY">
<#-- 提交对象数据情况start -->
// ${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) => {
......@@ -319,19 +381,20 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="{}"/>
return [status, {}];
});
<#-- 提交对象数据情况start -->
<#-- 方法请求参数为实体对象数据: END -->
<#-- 方法请求参数为URI参数数据: BEGIN -->
<#else>
<#-- URI参数传递情况start -->
// URI参数传递情况未实现
<#-- URI参数传递情况start -->
</#if>
<#-- 方法类型为DEACTION end -->
<#-- 方法请求参数为URI参数数据: END -->
</#if>
</#list>
<#-- 方法类型为DEACTION: END -->
</#list>
</#if>
<#-- 应用实体关系路径数大于0 && 拥有实体服务接口方法: END -->
<#-- 主实体方法: BEGIN -->
<#if item.isMajor()>
<#-- 方法类型为SELECT -->
<#-- 方法类型为SELECT: BEGIN -->
<#if singleAppMethod.getMethodType() == "SELECT">
// ${singleAppMethod.getCodeName()}
......@@ -357,7 +420,8 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="_items"/>
return [status, _items];
});
<#-- 方法类型为FETCH -->
<#-- 方法类型为SELECT: EWND -->
<#-- 方法类型为FETCH: BEGIN -->
<#elseif singleAppMethod.getMethodType() == "FETCH">
// ${singleAppMethod.getCodeName()}
......@@ -371,7 +435,6 @@ mock.onGet(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}<#if singleSe
return [status, mockDatas ? mockDatas : []];
});
// ${singleAppMethod.getCodeName()}
mock.onGet(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>\${singleServiceApi.getRequestPath()}</#if>(\?[\w-./?%&=]*)*$/)).reply((config: any) => {
<@startLog singleAppMethod />
......@@ -401,12 +464,11 @@ mock.onGet(new RegExp(/^\/${srfpluralize(item.codeName)?lower_case}<#if singleSe
<@endLog appMethod=singleAppMethod dataName="records ? records : []"/>
return [status, records ? records : []];
});
<#-- 方法类型为FETCH: END -->
<#-- 方法类型为DEACTION: BEGIN -->
<#else>
<#-- 方法类型为DEACTION start -->
<#-- 方法请求不需要参数情况: BEGIN -->
<#if singleServiceApi.getRequestParamType() == "NONE">
<#-- 无参数情况start -->
// ${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) => {
......@@ -419,9 +481,11 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="{}"/>
return [status, {}];
});
<#-- 无参数情况end -->
<#-- 方法请求不需要参数情况: END -->
<#-- 方法请求参数为指定字段属性值: BEGIN -->
<#elseif singleServiceApi.getRequestParamType() == "FIELD">
<#-- 指定属性情况start -->
<@outputSort 1 'after'>
// ${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) => {
<@startLog singleAppMethod />
......@@ -445,9 +509,10 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
<@endLog appMethod=singleAppMethod dataName="_items?_items:{}"/>
return [status, _items?_items:{}];
});
<#-- 指定属性情况start -->
</@outputSort>
<#-- 方法请求参数为指定字段属性值: END -->
<#-- 方法请求参数为实体对象数据: BEGIN -->
<#elseif singleServiceApi.getRequestParamType() == "ENTITY">
<#-- 提交对象数据情况start -->
// ${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) => {
......@@ -487,15 +552,18 @@ mock.on${srfclassname('${singleServiceApi.getRequestMethod()?lower_case}')}(new
return [status, data];
</#if>
});
<#-- 提交对象数据情况start -->
<#-- 方法请求参数为实体对象数据: END -->
<#-- 方法请求参数为URI参数数据: BEGIN -->
<#else>
<#-- URI参数传递情况start -->
// URI参数传递情况未实现
<#-- URI参数传递情况start -->
</#if>
<#-- 方法类型为DEACTION end -->
<#-- 方法请求参数为URI参数数据: END -->
</#if>
<#-- 方法类型为DEACTION: END -->
</#if>
</#list>
<#-- 主实体方法: END -->
</#list>
</#if>
<#-- 实体接口mock数据end -->
\ No newline at end of file
<#-- 实体接口mock数据end -->
<@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 @@
初始化
#### 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 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册