提交 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>
......
......@@ -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);
});
});
}
......
<#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
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册