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

2020.4.30 模板初始化

上级 7419a602
# General
*.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
<#assign deuiaction=item.getPSUIAction()> <#assign deuiaction=item.getPSUIAction()>
<#assign icon><#if item.getPSSysImage()??><#assign image = item.getPSSysImage()><#if image.getCssClass()??>, iconcls: '${image.getCssClass()}'</#if><#if image.getImagePath()??>, icon: '${image.getImagePath()}'</#if></#if></#assign>
<#if deuiaction.getUIActionTag() == 'ExportExcel'> <#if deuiaction.getUIActionTag() == 'ExportExcel'>
${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', <#if item.isShowCaption()>caption: '${item.caption}',</#if> disabled: false, type: '${item.getItemType()}', visabled: true, dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' }<#if view.hasPSControl("GRID")><#assign gridhandler = view.getPSControl("GRID").getPSAjaxControlHandler()>, MaxRowCount: <#if gridhandler?? && gridhandler.getPSDEDataExport()??>${gridhandler.getPSDEDataExport().getMaxRowCount()?c}<#elseif sys.getDEDataExportMaxRowCount() gt 0>${sys.getDEDataExportMaxRowCount()?c}<#else>10000</#if></#if> }, ${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', caption: '${item.caption}','isShowCaption':${item.isShowCaption()?c},'isShowIcon':${item.isShowIcon()?c}, tooltip: '${item.getTooltip()}'${icon}, disabled: false, type: '${item.getItemType()}', visabled: true, dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' }<#if view.hasPSControl("GRID")><#assign gridhandler = view.getPSControl("GRID").getPSAjaxControlHandler()>, MaxRowCount: <#if gridhandler?? && gridhandler.getPSDEDataExport()??>${gridhandler.getPSDEDataExport().getMaxRowCount()?c}<#elseif sys.getDEDataExportMaxRowCount() gt 0>${sys.getDEDataExportMaxRowCount()?c}<#else>10000</#if></#if> },
<#elseif deuiaction.getUIActionTag() == 'ToggleRowEdit'> <#elseif deuiaction.getUIActionTag() == 'ToggleRowEdit'>
${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', <#if item.isShowCaption()>caption: '${item.caption}', </#if>disabled: false, type: '${item.getItemType()}', visabled: true, dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' } }, ${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', caption: '${item.caption}','isShowCaption':${item.isShowCaption()?c},'isShowIcon':${item.isShowIcon()?c}, tooltip: '${item.getTooltip()}'${icon}, disabled: false, type: '${item.getItemType()}', visabled: true, dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' } },
<#else> <#else>
${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', <#if item.isShowCaption()>caption: '${item.caption}', </#if>disabled: false, type: '${item.getItemType()}', visabled: true, dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' } }, ${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', caption: '${item.caption}','isShowCaption':${item.isShowCaption()?c},'isShowIcon':${item.isShowIcon()?c}, tooltip: '${item.getTooltip()}'${icon}, disabled: false, type: '${item.getItemType()}', visabled: true, dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' } },
</#if> </#if>
\ No newline at end of file
<#macro badge item>
<#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSAppCounter?? && item.getPSUIAction().getPSAppCounter()??>
<#assign uiaction = item.getPSUIAction() />
<#assign counter = uiaction.getPSAppCounter() />
<Badge type="primary" :count="${srfclassname('${counter.getCodeName()}')}counterservice.counterData.<#if uiaction.getCounterId()??>${uiaction.getCounterId()}</#if>">
<#nested>
</Badge>
<#else>
<#nested>
</#if>
</#macro>
\ No newline at end of file
<#-- content --> <view_${ctrl.getName()}
<#assign content> viewState={this.viewState}
:showBusyIndicator="${ctrl.isShowBusyIndicator()?c}" viewparams={this.viewparams}
v-model="collapseChange" context={this.context}
:mode="mode" showBusyIndicator={${ctrl.isShowBusyIndicator()?c}}
:selectTheme="selectTheme" on-menus-change={(menus: any[]) => this.appMenusChange(menus)}
:isDefaultPage="isDefaultPage" name="${ctrl.name}"
:defPSAppView="defPSAppView" ref="${ctrl.name}"
</#assign> />
<#ibizinclude> \ No newline at end of file
../@MACRO/HTML/DEFAULT.html.ftl
</#ibizinclude>
\ No newline at end of file
/*** BRGIN:菜单样式 ***/
.app-app-menu { .app-app-menu {
overflow-y: auto; height: 100%;
overflow-x: hidden; width: 100%;
height: calc(100% - 58px);
.ivu-divider{
background-color: #b3b3b3;
height: 2px;
}
> .el-menu {
border-right: 0;
.el-menu-item {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
.ivu-badge {
.ivu-badge-count {
box-shadow: 0 0 0 0px #fff;
}
}
}
.el-submenu__title i, .el-menu-item i {
font-size: 16px;
width: 16px;
}
.el-submenu__title .text {
font-size: 16px;
}
.el-menu-item, .el-submenu__title {
height: 36px;
font-size: 16px;
line-height: 32px;
}
.el-menu-item, .el-submenu, .el-menu {
border-top: 1px solid #fff;
}
> .el-menu-item, > .el-submenu > .el-submenu__title {
height: 40px;
line-height: 36px;
border-left: 4px solid transparent;
padding-left: 16px !important;
}
.app-menu-icon {
margin-right: 4px;
}
> .el-submenu {
> .el-menu {
> .el-menu-item, > .el-submenu > .el-submenu__title {
padding-left: 44px !important;
}
> .el-submenu {
> .el-menu {
> .el-menu-item, > .el-submenu > .el-submenu__title {
padding-left: 68px !important;
}
}
}
}
}
.active-icon {
font-size: 40px !important;
position: absolute;
right: 0;
line-height: 42px;
color: #fff !important;
display: none;
width: 24px !important;
overflow: hidden;
}
}
.ivu-divider-horizontal {
width: calc(100% - 32px);
min-width: calc(100% - 32px);
margin: 4px auto;
margin-bottom: 1px;
}
} }
\ No newline at end of file
.app-popper-menu {
.el-menu-item, .el-submenu__title {
height: 36px;
font-size: 16px;
line-height: 36px;
}
> .el-menu-item, > .el-submenu > .el-submenu__title {
height: 40px;
line-height: 40px;
}
.el-menu-item {
.ivu-badge {
.ivu-badge-count {
box-shadow: 0 0 0 0px #fff;
}
}
> span{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.ivu-divider-horizontal {
width: calc(100% - 12px);
min-width: calc(100% - 12px);
margin: 4px auto;
margin-bottom: 1px;
}
}
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude> <script lang='ts'>
../@MACRO/CONTROL/CONTROL.vue.ftl import { Component } from 'vue-property-decorator';
</#ibizinclude> import { VueLifeCycleProcessing } from '@/crm-core';
\ No newline at end of file import ${srfclassname(ctrl.codeName)}Base from './${srffilepath2(ctrl.getCodeName())}-${ctrl.getControlType()?lower_case}-base.vue';
<#if ctrl.getPSControls?? && ctrl.getPSControls()??>
<#list ctrl.getPSControls() as subctrl>
<#if subctrl.getControlType() != 'TOOLBAR' && subctrl.getControlType() != 'CONTEXTMENU'>
<#if subctrl.getPSAppDataEntity?? && subctrl.getPSAppDataEntity()??>
import view_${subctrl.getName()} from '@widgets/${srffilepath2(subctrl.getPSAppDataEntity().getCodeName())}/${srffilepath2(subctrl.getCodeName())}-${subctrl.getControlType()?lower_case}/${srffilepath2(subctrl.getCodeName())}-${subctrl.getControlType()?lower_case}.vue';
<#else>
import view_${subctrl.getName()} from '@widgets/app/${srffilepath2(subctrl.getCodeName())}-${subctrl.getControlType()?lower_case}/${srffilepath2(subctrl.getCodeName())}-${subctrl.getControlType()?lower_case}.vue';
</#if>
</#if>
</#list>
</#if>
/**
* ${ctrl.getName()}基类
*
* @export
* @class ${srfclassname(ctrl.codeName)}
* @extends {${srfclassname(ctrl.codeName)}Base}
*/
@Component({
components: {
<#if ctrl.getPSControls?? && ctrl.getPSControls()??>
<#list ctrl.getPSControls() as subctrl>
<#if subctrl.getControlType() != 'TOOLBAR' && subctrl.getControlType() != 'CONTEXTMENU'>
view_${subctrl.getName()},
</#if>
</#list>
</#if>
<#if components??>${components}</#if>
}
})
@VueLifeCycleProcessing
export default class ${srfclassname(ctrl.codeName)} extends ${srfclassname(ctrl.codeName)}Base { }
</script>
\ 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';
</#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 MOBILEENTITY3Canlen
*/
@Prop({ default: true }) protected showBusyIndicator!: boolean;
/**
* 部件行为--fetch
*
* @type {string}
* @memberof Mob
*/
@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 = {};
/**
* 图表基础配置参数
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.name}')}Service
*/
public defaultConfig: any = {
<#-- 获取模板对象:BEGIN -->
<#assign title=ctrl.getPSDEChartTitle()>
<#list ctrl.getPSDEChartSerieses() as series>
<#-- 暂只支持第一个序列 -->
<#if series_index == 0>
<#assign chartSeries = series/>
</#if>
</#list>
<#-- 获取模板对象:END -->
<#-- 公共配置:BEGIN -->
title: {
show: <#if title.isShowTitle()>true<#else>false</#if>,
<#if title.getTitle()??>
text: '${title.getTitle()}',
</#if>
<#if title.getSubTitle()??>
subtext: '${title.getSubTitle()}'
</#if>
},
legend: {top: 20},
// toolbox: {
// show: true,
// feature: {
// dataView: {
// show: true,
// readOnly: true,
// title: '数据视图'
// },
// saveAsImage: {
// show: true,
// title: '保存为图片'
// }
// }
// },
tooltip: {
trigger: 'item',
formatter: (params: any) => {
return `<#noparse>${params.seriesName}<br>${params.data.name}: ${params.data.sum}个</#noparse>`
}
},
color:['#37A2DA','#32C5E9', '#67E0E3', '#9FE6B8', '#FFDB5C','#ff9f7f', '#fb7293', '#E062AE','#E690D1', '#e7bcf3', '#9d96f5']
}
/**
* 深度合并对象,把secondObj的内容合并给firstObj,返回合并后的firstObj
* @param {} firstObj 被合并对象
* @param {} secondObj 合并对象
* @memberof ${srfclassname('${ctrl.name}')}
*/
public deepObjectMerge(firstObj: any, secondObj: any) {
for (let key in secondObj) {
firstObj[key] =
firstObj[key] && firstObj[key].toString() === "[object Object]"
? this.deepObjectMerge(firstObj[key], secondObj[key])
: (firstObj[key] = secondObj[key]);
}
return firstObj;
}
/**
* 刷新
*
* @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) {
_this.chartOption = _this.deepObjectMerge(_this.defaultConfig, res.data);
_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
<#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) => {
this.handleSeries(response);
resolve(response);
}).catch(response => {
reject(response);
});
});
}
<#-- 暂只支持第一个序列 -->
<#list ctrl.getPSDEChartSerieses() as series>
<#if series_index == 0>
<#assign chartSeries = series/>
</#if>
</#list>
/**
* 生成图表数据
*
* @param {*} response
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public handleSeries(response: any) {
let chartOption:any = {};
<#-- 获取x轴的分类属性字段 -->
<#if chartSeries.getCatalogField?? && chartSeries.getCatalogField()??>
<#assign catalogField = chartSeries.getCatalogField()>
let catalogFields: any = [<#rt>
<#list catalogField?split(";") as field>
"${field?lower_case}",<#t>
</#list>
</#if>
];<#lt>
<#-- 获取y轴值属性字段和中文名称 -->
<#if chartSeries.getValueField?? && chartSeries.getValueField()??>
<#assign valueField = chartSeries.getValueField()>
let valueFields: any = [<#rt>
<#list valueField?split(";") as field>
[ "${field?lower_case}", "${de.getPSDEField(field).getLogicName()}" ],<#t>
</#list>
</#if>
];<#lt>
let otherFields: any = ['planned_revenue'];
// 数据按分类属性分组处理
let xFields:any = [];
let yFields:any = [];
let oFields: any = [];
valueFields.forEach((field: any,index: number) => {
yFields[index] = [];
});
response.data.forEach((item:any) => {
if(xFields.indexOf(item[catalogFields[0]]) > -1){
let num = xFields.indexOf(item[catalogFields[0]]);
valueFields.forEach((field: any,index: number) => {
yFields[index][num] += item[field[0]];
});
oFields[num] += item[otherFields[0]];
}else{
xFields.push(item[catalogFields[0]]);
oFields.push(item[otherFields[0]]);
valueFields.forEach((field: any,index: number) => {
yFields[index].push(item[field[0]]);
});
}
});
let series: any = [];
valueFields.forEach((field: any,index: number) => {
let yData: any = [];
xFields.forEach((item:any, num: number) => {
yData.push({value: (100 - (100 / xFields.length) * num), name: item, sum: yFields[index][num], total: oFields[num]});
});
yData.sort(function (a:any, b:any) { return a.value - b.value; });
series.push({
name:field[1],
type:"funnel",
data:yData,
minSize: '40%',
label: {
position: 'center',
formatter: (params: any) => {
return `<#noparse>${params.data.name}(${params.data.sum}个, 金额¥${params.data.total})</#noparse>`
}
},
});
});
chartOption.series = series;
response.data = chartOption;
}
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=CHART#FunnelChart
\ No newline at end of file
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
} }
} }
.el-table__body-wrapper{ .el-table__body-wrapper{
height: calc(100% - 43px) !important; height: calc(100% - 60px) !important;
} }
.el-table__empty-block{ .el-table__empty-block{
height: auto !important; height: auto !important;
......
此差异已折叠。
CTRLTYPE=GRID#GRIDEX
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :disHover="true" :padding="0" :bordered="false">
<#ibizinclude>
./VIEW_CAPTION.vue.ftl
</#ibizinclude>
<#if view.hasPSControl('toolbar')>
<#assign toolbarCtrl = view.getPSControl('toolbar')>
<@ibizindent blank=8>
${P.getCtrlCode(toolbarCtrl, 'CONTROL.html').code}
</@ibizindent>
</#if>
<div class="content-container">
<#if view.getPSControls()??> <#if view.getPSControls()??>
<#list view.getPSControls() as ctrl> <#list view.getPSControls() as ctrl>
<#if ctrl.getControlType() != "TOOLBAR"> <#if ctrl.getControlType() != "TOOLBAR">
...@@ -24,6 +10,7 @@ ${P.getCtrlCode(ctrl, 'CONTROL.html').code} ...@@ -24,6 +10,7 @@ ${P.getCtrlCode(ctrl, 'CONTROL.html').code}
</#if> </#if>
</#list> </#list>
</#if> </#if>
</div> </#assign>
</card> <#ibizinclude>
</div> ./VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <#if view.getAllPSControls()??>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :disHover="true" :padding="0" :bordered="false"> <#list view.getAllPSControls() as ctrl>
<#if ctrl.getControlType() != "TOOLBAR">
<#ibizinclude> <#if P.getCtrlCode(ctrl, 'CONTROL.html')??>
./VIEW_CAPTION.vue.ftl
</#ibizinclude>
<#if view.hasPSControl('toolbar')>
<#assign toolbarCtrl = view.getPSControl('toolbar')>
<@ibizindent blank=8>
${P.getCtrlCode(toolbarCtrl, 'CONTROL.html').code}
</@ibizindent>
</#if>
<div class="content-container">
<#if view.getAllPSControls()??>
<#list view.getAllPSControls() as ctrl>
<#if ctrl.getControlType() != "TOOLBAR">
<#if P.getCtrlCode(ctrl, 'CONTROL.html')??>
<@ibizindent blank=12> <@ibizindent blank=12>
${P.getCtrlCode(ctrl, 'CONTROL.html').code} ${P.getCtrlCode(ctrl, 'CONTROL.html').code}
</@ibizindent> </@ibizindent>
</#if> </#if>
</#if> </#if>
</#list> </#list>
</#if> </#if>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :bordered="false">
<#ibizinclude>
./VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<#if view.hasPSControl('toolbar')>
<@ibizindent blank=8>
<div slot="extra">
${P.getCtrlCode('toolbar', 'CONTROL.html').code}
</div>
</@ibizindent>
</#if>
<div class="content-container">
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
./View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#if view.hasPSControl('form')> <#if view.hasPSControl('form')>
<@ibizindent blank=8> <@ibizindent blank=8>
${P.getCtrlCode('form', 'CONTROL.html').code} ${P.getCtrlCode('form', 'CONTROL.html').code}
</@ibizindent> </@ibizindent>
</#if> </#if>
<#-- BEGIN:视图底部视图消息 --> </#assign>
<@ibizindent blank=8>
<#ibizinclude> <#ibizinclude>
./View_Pos_Bottom_Msgs.vue.ftl ./VIEW_LAYOUT_BASE.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div>
</card>
</div>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card' :dis-hover="true" :bordered="false">
<#ibizinclude>
./VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<#if view.hasPSControl('toolbar')>
<@ibizindent blank=8>
<p slot="extra" v-show="Object.is(this.selection.id, 'form')">
<row style='margin-bottom: 6px;'>
<div class='pull-right'>
${P.getCtrlCode('toolbar', 'CONTROL.html').code}
</div>
</row>
</p>
</@ibizindent>
</#if>
<div class="content-container">
<#if view.hasPSControl('drtab')> <#if view.hasPSControl('drtab')>
<@ibizindent blank=8> <@ibizindent blank=8>
${P.getCtrlCode('drtab', 'CONTROL.html').code} ${P.getCtrlCode('drtab', 'CONTROL.html').code}
</@ibizindent> </@ibizindent>
</#if> </#if>
</div> </#assign>
</card> <#ibizinclude>
</div> ./VIEW_LAYOUT_BASE.ftl
</#ibizinclude>
\ No newline at end of file
<#assign MDContent><#t> <#assign view_content>
<#if view.getViewType() == "DEGRIDVIEW9">
<#if view.hasPSControl('searchform')> <#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code} ${P.getCtrlCode('searchform', 'CONTROL.html').code}
</#if> </#if>
<#if view.hasPSControl('grid')> <#if view.hasPSControl('grid')>
${P.getCtrlCode('grid', 'CONTROL.html').code} ${P.getCtrlCode('grid', 'CONTROL.html').code}
</#if> </#if>
</#if>
<#-- BEGIN:快速搜索或工具栏存在 -->
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar'))>
<row style='margin-bottom: 6px;'>
<#if view.isEnableQuickSearch()>
<i-input<#if view.hasPSControl('searchform')><#if view.isExpandSearchForm??> v-show="!isExpandSearchForm"</#if></#if> v-model="query" search enter-button @on-search="onSearch($event)" class='pull-left' style='max-width: 400px;margin-top:6px;' />
</#if>
<div class='pull-right'>
<#if view.hasPSControl('toolbar')>
<@ibizindent blank=8>
${P.getCtrlCode('toolbar', 'CONTROL.html').code}<#t>
</@ibizindent>
</#if>
</div>
</row>
</#if>
<#-- END:快速搜索或工具栏存在 -->
<#if view.getViewType() != "DEGRIDVIEW9">
<#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code}
</#if>
<#if view.hasPSControl('grid')>
${P.getCtrlCode('grid', 'CONTROL.html').code}
</#if>
</#if>
</#assign> </#assign>
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#ibizinclude>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> ./VIEW_LAYOUT_BASE.ftl
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false"> </#ibizinclude>
<@ibizindent blank=8> \ No newline at end of file
<#ibizinclude>
./VIEW_CAPTION.vue.ftl
</#ibizinclude>
</@ibizindent>
<div class='content-container'>
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
./View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#-- BEGIN:视图内容 -->
<@ibizindent blank=12>
<#ibizinclude>
./VIEW_MD_CONTENT.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图内容 -->
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
./View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div>
</card>
</div>
\ No newline at end of file
<#if view.getPSSysCss?? && view.getPSSysCss()??>
<#assign styleName = view.getPSSysCss().getCssName()/>
</#if>
<#if styleName?? && styleName == "TopFullScreen">
<#assign isStyleName = true/>
<#else>
<#assign isStyleName = false/>
</#if>
<app-layout viewName="${view.getCodeName()?lower_case}" viewTitle="${view.getTitle()}"<#if view.isShowCaptionBar?? && (view.isShowCaptionBar() == false)> :isShowCaptionBar="false"</#if><#if !view.hasPSControl('toolbar')> :isShowToolbar="false"</#if> :className="{ 'view-container': true<#if !isStyleName>, 'default-mode-view': true</#if>, '${view.getViewType()?lower_case}': true, '${srffilepath2(view.getCodeName())}': true<#if view.getPSSysCss?? && view.getPSSysCss()??>, '${view.getPSSysCss().getCssName()}': true</#if> }"<#if !isStyleName> layoutMode="VIEW"</#if> :isShowUserInfo="isDefaultView()" :openMode="openMode" @close-view="closeView($event)">
<template slot="headerLeft">
<div class="view-header-left">
<#if isStyleName> <go-back-button v-if="isDefaultView()"/></#if>
<div class="view-caption" v-if="isDefaultView()">{{$t(model.srfCaption)}}</div>
<modal-breadcrumb v-if="isModalView()"/>
</div>
</template>
<#if view.hasPSControl('toolbar')>
<template slot="headerRight">
<div class="view-header-right">
<app-header-menus :toolbarModel="toolBarModels" @menu-click="toolbar_click($event)" mode="<#if isStyleName>view2<#else><#if header_menu_mode??>${header_menu_mode}<#else>view</#if></#if>" :openMode="openMode"<#if view.isEnableQuickSearch?? && view.isEnableQuickSearch()> :isEnableQuickSearch="true" v-model="query" @search="onSearch($event)"</#if>/>
</div>
</template>
</#if>
<template slot="content">
<div class="view-content-wrapper">
<#if view_content??>${view_content}</#if><#-- 视图内容变量:view_content -->
</div>
</template>
</app-layout>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover='true' :padding='0' :bordered='false'>
<#ibizinclude>
./VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<div class="content-container">
<@ibizindent blank=12> <@ibizindent blank=12>
<#if view.hasPSControl('wizardpanel')> <#if view.hasPSControl('wizardpanel')>
${P.getCtrlCode('wizardpanel', 'CONTROL.html').code} ${P.getCtrlCode('wizardpanel', 'CONTROL.html').code}
</#if> </#if>
</@ibizindent> </@ibizindent>
</div> </#assign>
</card> <#ibizinclude>
</div> ./VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <#if view.hasPSControl('tabexppanel')>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false"> ${P.getCtrlCode('tabexppanel', 'CONTROL.html').code}
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<#if view.hasPSControl('toolbar')>
<@ibizindent blank=8>
<p slot="extra">
${P.getCtrlCode('toolbar', 'CONTROL.html').code}
</p>
</@ibizindent>
</#if> </#if>
<div class='content-container'> </#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl ../@MACRO/VIEW_LAYOUT_BASE.ftl
</#ibizinclude> </#ibizinclude>
<#if view.hasPSControl('tabexppanel')> \ No newline at end of file
${P.getCtrlCode('tabexppanel', 'CONTROL.html').code}
</#if>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</div>
</card>
</div>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card' :dis-hover="true" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<div class="content-container">
<#if view.hasPSControl('listexpbar')> <#if view.hasPSControl('listexpbar')>
${P.getCtrlCode('listexpbar', 'CONTROL.html').code} ${P.getCtrlCode('listexpbar', 'CONTROL.html').code}
</#if> </#if>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :bordered="false" :dis-hover="true" >
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<div class='content-container'>
<#assign MDContent> <#assign MDContent>
<#comment><!--开始:快速搜索或工具栏存在--></#comment>
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar'))>
<row style="margin-bottom:6px;">
<#if view.isEnableQuickSearch()>
<i-input<#if view.hasPSControl('searchform')><#if view.isExpandSearchForm??> v-show="!isExpandSearchForm"</#if></#if> v-model="query" search enter-button @on-search="onSearch($event)" class='pull-left' style='max-width: 400px;margin-top:6px;' />
</#if>
<div class='pull-right'>
<@ibizindent blank=8>
<#if view.hasPSControl('toolbar')>
${P.getCtrlCode('toolbar', 'CONTROL.html').code}
</#if>
</@ibizindent>
</div>
</row>
</#if>
<#comment><!--结束:快速搜索或工具栏存在--></#comment> <#comment><!--结束:快速搜索或工具栏存在--></#comment>
<#if view.hasPSControl('searchform')> <#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code} ${P.getCtrlCode('searchform', 'CONTROL.html').code}
...@@ -35,6 +12,7 @@ ${P.getCtrlCode('list', 'CONTROL.html').code} ...@@ -35,6 +12,7 @@ ${P.getCtrlCode('list', 'CONTROL.html').code}
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl ../@MACRO/VIEW_MD_CONTENT.vue.ftl
</#ibizinclude> </#ibizinclude>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption' :bordered="false" :dis-hover="true" >
<div class='content-container'>
<#assign MDContent> <#assign MDContent>
<#comment><!--开始:快速搜索或工具栏存在--></#comment>
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar'))>
<row style='margin-bottom: 6px;'>
<#if view.isEnableQuickSearch()>
<i-input<#if view.hasPSControl('searchform')><#if view.isExpandSearchForm??> v-show="!isExpandSearchForm"</#if></#if> v-model="query" search enter-button @on-search="onSearch($event)" class='pull-left' style='max-width: 400px;margin-top:6px;' />
</#if>
<div class='pull-right'>
<@ibizindent blank=16>
<#if view.hasPSControl('toolbar')>
${P.getCtrlCode('toolbar', 'CONTROL.html').code}
</#if>
</@ibizindent>
</div>
</row>
</#if>
<#comment><!--结束:快速搜索或工具栏存在--></#comment> <#comment><!--结束:快速搜索或工具栏存在--></#comment>
<#if view.hasPSControl('searchform')> <#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code} ${P.getCtrlCode('searchform', 'CONTROL.html').code}
...@@ -30,6 +12,7 @@ ${P.getCtrlCode('list', 'CONTROL.html').code} ...@@ -30,6 +12,7 @@ ${P.getCtrlCode('list', 'CONTROL.html').code}
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl ../@MACRO/VIEW_MD_CONTENT.vue.ftl
</#ibizinclude> </#ibizinclude>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card' :dis-hover="true" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<div class="content-container">
<#if view.hasPSControl('dataviewexpbar')> <#if view.hasPSControl('dataviewexpbar')>
${P.getCtrlCode('dataviewexpbar', 'CONTROL.html').code} ${P.getCtrlCode('dataviewexpbar', 'CONTROL.html').code}
</#if> </#if>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :bordered="false" :dis-hover="true" >
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<div class='content-container'>
<#assign MDContent>
<#comment><!--开始:快速搜索或工具栏存在--></#comment>
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar'))>
<row style="margin-bottom:6px;">
<#if view.isEnableQuickSearch()>
<i-input<#if view.hasPSControl('searchform')><#if view.isExpandSearchForm??> v-show="!isExpandSearchForm"</#if></#if> v-model="query" search enter-button @on-search="onSearch($event)" class='pull-left' style='max-width: 400px;margin-top:6px;' />
</#if>
<div class='pull-right'>
<@ibizindent blank=8>
<#if view.hasPSControl('toolbar')>
${P.getCtrlCode('toolbar', 'CONTROL.html').code}
</#if>
</@ibizindent>
</div>
</row>
</#if>
<#comment><!--结束:快速搜索或工具栏存在--></#comment>
<#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code}
</#if>
<#if view.hasPSControl('chart')>
${P.getCtrlCode('chart', 'CONTROL.html').code}
</#if>
</#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl ../实体图表视图/VIEW.vue.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
</div>
</card>
</div>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :bordered="false" :dis-hover="true" >
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<div class='content-container'>
<#assign MDContent> <#assign MDContent>
<#comment><!--开始:快速搜索或工具栏存在--></#comment>
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar'))>
<row style="margin-bottom:6px;">
<#if view.isEnableQuickSearch()>
<i-input<#if view.hasPSControl('searchform')><#if view.isExpandSearchForm??> v-show="!isExpandSearchForm"</#if></#if> v-model="query" search enter-button @on-search="onSearch($event)" class='pull-left' style='max-width: 400px;margin-top:6px;' />
</#if>
<div class='pull-right'>
<@ibizindent blank=8>
<#if view.hasPSControl('toolbar')>
${P.getCtrlCode('toolbar', 'CONTROL.html').code}
</#if>
</@ibizindent>
</div>
</row>
</#if>
<#comment><!--结束:快速搜索或工具栏存在--></#comment>
<#if view.hasPSControl('searchform')> <#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code} ${P.getCtrlCode('searchform', 'CONTROL.html').code}
</#if> </#if>
...@@ -35,6 +11,7 @@ ${P.getCtrlCode('chart', 'CONTROL.html').code} ...@@ -35,6 +11,7 @@ ${P.getCtrlCode('chart', 'CONTROL.html').code}
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl ../@MACRO/VIEW_MD_CONTENT.vue.ftl
</#ibizinclude> </#ibizinclude>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card' :dis-hover="true" :padding="0" :bordered="false">
<div class="content-container pickup-view"> <div class="content-container pickup-view">
<div class="translate-contant"> <div class="translate-contant">
<div class="center" :style="{width : !isShowButton ? '100%' : ''}"> <div class="center">
<#if view.hasPSControl('pickupviewpanel')> <#if view.hasPSControl('pickupviewpanel')>
<@ibizindent blank=20> <@ibizindent blank=20>
${P.getCtrlCode('pickupviewpanel', 'CONTROL.html').code}<#t> ${P.getCtrlCode('pickupviewpanel', 'CONTROL.html').code}<#t>
</@ibizindent> </@ibizindent>
</#if> </#if>
</div> </div>
<div v-if="isShowButton" class="translate-buttons"> <div class="translate-buttons">
<div class="buttons"> <div class="buttons">
<i-button type="primary" :title="this.containerModel.view_rightbtn.text" <i-button type="primary" :title="this.containerModel.view_rightbtn.text"
:disabled="this.containerModel.view_rightbtn.disabled" :disabled="this.containerModel.view_rightbtn.disabled"
...@@ -32,7 +30,7 @@ ...@@ -32,7 +30,7 @@
</i-button> </i-button>
</div> </div>
</div> </div>
<div v-if="isShowButton" class="right"> <div class="right">
<div class="mpicker-select"> <div class="mpicker-select">
<div v-for="(item, index) in viewSelections" :key="index" :class="item._select ? 'select' : ''" @click="selectionsClick(item)" @dblclick="selectionsDBLClick(item)"> <div v-for="(item, index) in viewSelections" :key="index" :class="item._select ? 'select' : ''" @click="selectionsClick(item)" @dblclick="selectionsDBLClick(item)">
<span>{{item.srfmajortext}}</span> <span>{{item.srfmajortext}}</span>
...@@ -40,7 +38,7 @@ ...@@ -40,7 +38,7 @@
</div> </div>
</div> </div>
</div> </div>
<card v-if="isShowButton" :dis-hover="true" :bordered="false" class="footer"> <card :dis-hover="true" :bordered="false" class="footer">
<row :style="{ textAlign: 'right' }"> <row :style="{ textAlign: 'right' }">
<i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk">{{this.containerModel.view_okbtn.text}}</i-button> <i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk">{{this.containerModel.view_okbtn.text}}</i-button>
&nbsp;&nbsp; &nbsp;&nbsp;
...@@ -48,5 +46,7 @@ ...@@ -48,5 +46,7 @@
</row> </row>
</card> </card>
</div> </div>
</card> </#assign>
</div> <#ibizinclude>
\ No newline at end of file ../@MACRO/VIEW_LAYOUT_BASE.ftl
</#ibizinclude>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <#assign MDContent>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/VIEW_CAPTION.vue.ftl
</#ibizinclude>
</@ibizindent>
<div class='content-container'>
<#assign MDContent>
<#comment><!--开始:快速搜索或工具栏存在--></#comment>
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar'))>
<row style='margin-bottom: 6px;'>
<#if view.isEnableQuickSearch()>
<i-input placeholder='快速搜索框'<#if view.hasPSControl('searchform')><#if view.isExpandSearchForm??> v-show='!this.isExpandSearchForm '</#if></#if> v-model='query' search @on-search='onSearch' class='pull-left' style='max-width: 400px;margin-top:6px;' />
</#if>
<div class='pull-right'>
<@ibizindent blank=20>
<#if view.hasPSControl('toolbar')>
${P.getCtrlCode('toolbar', 'CONTROL.html').code}<#t>
</#if>
</@ibizindent>
</div>
</row>
</#if>
<#comment><!--结束:快速搜索或工具栏存在--></#comment>
<#if view.hasPSControl('searchform')> <#if view.hasPSControl('searchform')>
<@ibizindent blank=12> <@ibizindent blank=12>
${P.getCtrlCode('searchform', 'CONTROL.html').code}<#t> ${P.getCtrlCode('searchform', 'CONTROL.html').code}<#t>
...@@ -34,10 +10,11 @@ ${P.getCtrlCode('toolbar', 'CONTROL.html').code}<#t> ...@@ -34,10 +10,11 @@ ${P.getCtrlCode('toolbar', 'CONTROL.html').code}<#t>
${P.getCtrlCode('dataview', 'CONTROL.html').code}<#t> ${P.getCtrlCode('dataview', 'CONTROL.html').code}<#t>
</@ibizindent> </@ibizindent>
</#if> </#if>
</#assign> </#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl ../@MACRO/VIEW_MD_CONTENT.vue.ftl
</#ibizinclude> </#ibizinclude>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption' :dis-hover="true" :bordered="false">
<div class='content-container'>
<#assign MDContent> <#assign MDContent>
<#comment><!--开始:快速搜索或工具栏存在--></#comment>
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar'))>
<row style='margin-bottom: 6px;'>
<#if view.isEnableQuickSearch()>
<i-input placeholder='快速搜索框'<#if view.hasPSControl('searchform')><#if view.isExpandSearchForm??> v-show='!this.isExpandSearchForm'</#if></#if> v-model='query' search @on-search='onSearch' class='pull-left' style='max-width: 400px;margin-top:6px;' />
</#if>
<div class='pull-right'>
<@ibizindent blank=8>
<#if view.hasPSControl('toolbar')>
${P.getCtrlCode('toolbar', 'CONTROL.html').code}
</#if>
</@ibizindent>
</div>
</row>
</#if>
<#comment><!--结束:快速搜索或工具栏存在--></#comment>
<#if view.hasPSControl('searchform')> <#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code} ${P.getCtrlCode('searchform', 'CONTROL.html').code}
</#if> </#if>
...@@ -30,6 +11,7 @@ ${P.getCtrlCode('dataview', 'CONTROL.html').code} ...@@ -30,6 +11,7 @@ ${P.getCtrlCode('dataview', 'CONTROL.html').code}
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl ../@MACRO/VIEW_MD_CONTENT.vue.ftl
</#ibizinclude> </#ibizinclude>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :padding="0" :bordered="false">
<div class="content-container pickup-view">
<#if view.hasPSControl('pickupviewpanel')> <#if view.hasPSControl('pickupviewpanel')>
<@ibizindent blank=12> <@ibizindent blank=12>
${P.getCtrlCode('pickupviewpanel', 'CONTROL.html').code}<#t> ${P.getCtrlCode('pickupviewpanel', 'CONTROL.html').code}<#t>
...@@ -14,6 +11,7 @@ ...@@ -14,6 +11,7 @@
<i-button @click="onClickCancel">{{this.containerModel.view_cancelbtn.text}}</i-button> <i-button @click="onClickCancel">{{this.containerModel.view_cancelbtn.text}}</i-button>
</row> </row>
</card> </card>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card' :dis-hover="true" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<div class="content-container">
<#if view.hasPSControl('calendarexpbar')> <#if view.hasPSControl('calendarexpbar')>
${P.getCtrlCode('calendarexpbar', 'CONTROL.html').code} ${P.getCtrlCode('calendarexpbar', 'CONTROL.html').code}
</#if> </#if>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <#if view.hasPSControl('treeexpbar')>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
</@ibizindent>
<#if view.hasPSControl('toolbar')>
<@ibizindent blank=8>
<p slot="extra">
${P.getCtrlCode('toolbar', 'CONTROL.html').code}
</p>
</@ibizindent>
</#if>
<div class='content-container'>
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#if view.hasPSControl('treeexpbar')>
<@ibizindent blank=12> <@ibizindent blank=12>
${P.getCtrlCode('treeexpbar', 'CONTROL.html').code}<#t> ${P.getCtrlCode('treeexpbar', 'CONTROL.html').code}<#t>
</@ibizindent> </@ibizindent>
</#if> </#if>
<#-- BEGIN:视图底部视图消息 --> </#assign>
<@ibizindent blank=12> <#ibizinclude>
<#ibizinclude> ../@MACRO/VIEW_LAYOUT_BASE.ftl
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl </#ibizinclude>
</#ibizinclude> \ No newline at end of file
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div>
</card>
</div>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<#if view.hasPSControl('toolbar')>
<@ibizindent blank=8>
<p slot="extra">
${P.getCtrlCode('toolbar', 'CONTROL.html').code}
</p>
</@ibizindent>
</#if>
<#assign MDContent> <#assign MDContent>
<#-- 搜索框: BEGIN -->
<#if (view.isEnableQuickSearch())>
<div class="search-contant">
<i-input search @on-change="($event) => { this.srfnodefilter = $event.target.value; }" @on-search="onSearch" class='pull-left'/>
</div>
</#if>
<#-- 搜索框: END -->
<#if view.hasPSControl('tree')> <#if view.hasPSControl('tree')>
<div class="tree-contant"> <div class="tree-contant">
${P.getCtrlCode('tree', 'CONTROL.html').code} ${P.getCtrlCode('tree', 'CONTROL.html').code}
...@@ -31,5 +10,7 @@ ${P.getCtrlCode('toolbar', 'CONTROL.html').code} ...@@ -31,5 +10,7 @@ ${P.getCtrlCode('toolbar', 'CONTROL.html').code}
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl ../@MACRO/VIEW_MD_CONTENT.vue.ftl
</#ibizinclude> </#ibizinclude>
</card> </#assign>
</div> <#ibizinclude>
\ No newline at end of file ../@MACRO/VIEW_LAYOUT_BASE.ftl
</#ibizinclude>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <#assign MDContent>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false"> <#if view.hasPSControl('tree')>
<div class='content-container'> <div class="tree-contant">
<#assign MDContent>
<#-- 搜索框: BEGIN -->
<#if (view.isEnableQuickSearch())>
<div class="search-contant">
<i-input search @on-change="($event) => { this.srfnodefilter = $event.target.value; }" @on-search="onSearch" class='pull-left'/>
</div>
</#if>
<#-- 搜索框: END -->
<#if view.hasPSControl('tree')>
<div class="tree-contant">
${P.getCtrlCode('tree', 'CONTROL.html').code} ${P.getCtrlCode('tree', 'CONTROL.html').code}
</div> </div>
</#if> </#if>
</#assign> </#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl ../@MACRO/VIEW_MD_CONTENT.vue.ftl
</#ibizinclude> </#ibizinclude>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :disHover="true" :padding="0" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION.vue.ftl
</#ibizinclude>
<#if view.hasPSControl('toolbar')>
<#assign toolbarCtrl = view.getPSControl('toolbar')>
<@ibizindent blank=8>
${P.getCtrlCode(toolbarCtrl, 'CONTROL.html').code}
</@ibizindent>
</#if>
<div class="content-container">
<#if view.hasPSControl('form')> <#if view.hasPSControl('form')>
<@ibizindent blank=8> <@ibizindent blank=8>
${P.getCtrlCode('form', 'CONTROL.html').code} ${P.getCtrlCode('form', 'CONTROL.html').code}
...@@ -29,6 +15,7 @@ ${P.getCtrlCode(ctrl, 'CONTROL.html').code} ...@@ -29,6 +15,7 @@ ${P.getCtrlCode(ctrl, 'CONTROL.html').code}
</#if> </#if>
</#list> </#list>
</#if> </#if>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card' :dis-hover="true" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<#if view.hasPSControl('toolbar')>
<@ibizindent blank=8>
<p slot="extra" v-show="Object.is(this.selection.id, 'form')">
${P.getCtrlCode('toolbar', 'CONTROL.html').code}
</p>
</@ibizindent>
</#if>
<div class="content-container edit-view2">
<#if view.hasPSControl('drbar')> <#if view.hasPSControl('drbar')>
<@ibizindent blank=8> <@ibizindent blank=8>
${P.getCtrlCode('drbar', 'CONTROL.html').code} ${P.getCtrlCode('drbar', 'CONTROL.html').code}
</@ibizindent> </@ibizindent>
</#if> </#if>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <#if view.hasPSControl('gridexpbar')>
<card class='view-card' :dis-hover="true" :bordered="false"> <@ibizindent blank=8>
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<div class="content-container">
<#if view.hasPSControl('gridexpbar')>
${P.getCtrlCode('gridexpbar', 'CONTROL.html').code} ${P.getCtrlCode('gridexpbar', 'CONTROL.html').code}
</#if> </@ibizindent>
</div> </#if>
</card> </#assign>
</div> <#ibizinclude>
\ No newline at end of file ../@MACRO/VIEW_LAYOUT_BASE.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude> <#ibizinclude>
../@MACRO/GRID.vue.ftl ../@MACRO/GRID.vue.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file \ No newline at end of file
<#ibizinclude> <#ibizinclude>
../@MACRO/GRID.vue.ftl ../@MACRO/GRID.vue.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file \ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <@ibizindent blank=8>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false"> <#if view.hasPSControl('tree')>
<#-- 不带数据信息标题 --> <div class="tree-contant">
<#if view.isShowCaptionBar()>
<p v-if="isShowButton" slot='title'>
<#if view.getPSSysImage()??>
<#assign viewimg = view.getPSSysImage()/>
<#if viewimg.getImagePath() != "">
<span class='caption-image'><i class='${viewimg.getCssClass()}'></i></span>
<#else>
<span class='caption-image'><img src='${viewimg.getImagePath()}'/></span>
</#if>
</#if>
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
</p>
</#if>
<div class='content-container'>
<#-- 搜索框: BEGIN -->
<#if (view.isEnableQuickSearch())>
<div class="search-contant">
<i-input search @on-change="($event) => { this.srfnodefilter = $event.target.value; }" @on-search="onSearch" class='pull-left'/>
</div>
</#if>
<#-- 搜索框: END -->
<@ibizindent blank=16>
<#if view.hasPSControl('tree')>
<div class="tree-contant">
${P.getCtrlCode('tree', 'CONTROL.html').code}<#t> ${P.getCtrlCode('tree', 'CONTROL.html').code}<#t>
</div> </div>
</#if> </#if>
</@ibizindent> </@ibizindent>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption' :dis-hover="true" :bordered="false">
<div class='content-container pickup-grid-view'>
<@ibizindent blank=12> <@ibizindent blank=12>
<#if view.hasPSControl('searchform')> <#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code}<#t> ${P.getCtrlCode('searchform', 'CONTROL.html').code}<#t>
...@@ -10,6 +7,7 @@ ...@@ -10,6 +7,7 @@
${P.getCtrlCode('grid', 'CONTROL.html').code}<#t> ${P.getCtrlCode('grid', 'CONTROL.html').code}<#t>
</#if> </#if>
</@ibizindent> </@ibizindent>
</div> </#assign>
</card> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
\ No newline at end of file </#ibizinclude>
\ No newline at end of file
<div class="view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <app-studioaction viewTitle="${view.getTitle()}" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' dis-hover :padding="0" :bordered="false"> <card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if>' dis-hover :padding="0" :bordered="false">
<@ibizindent blank=8> <@ibizindent blank=8>
<#ibizinclude> <#ibizinclude>
...@@ -21,4 +21,7 @@ ...@@ -21,4 +21,7 @@
</row> </row>
</card> </card>
</card> </card>
</div> </#assign>
\ No newline at end of file <#ibizinclude>
../@MACRO/VIEW_LAYOUT_BASE.ftl
</#ibizinclude>
\ No newline at end of file
<div class='view-container ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <#assign view_content>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card' dis-hover :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION.vue.ftl
</#ibizinclude>
<div class='content-container'>
<div class='view-top-messages'>
</div>
<@ibizindent blank=12> <@ibizindent blank=12>
<#if view.hasPSControl('dashboard')> <#if view.hasPSControl('dashboard')>
${P.getCtrlCode('dashboard', 'CONTROL.html').code} ${P.getCtrlCode('dashboard', 'CONTROL.html').code}
</#if> </#if>
</@ibizindent> </@ibizindent>
<div class='view-bottom-messages'> </#assign>
</div> <#ibizinclude>
</div> ../@MACRO/VIEW_LAYOUT_BASE.ftl
</card> </#ibizinclude>
</div> \ No newline at end of file
\ No newline at end of file
.app-container {
position: absolute;
width: 100vw;
height: 100vh;
top: 0;
left: 0;
right: 0;
bottom: 0;
.index_view.crm-app-layout {
.app-header-left {
height: 100%;
display: flex;
align-items: center;
>img {
margin: 0px 6px;
margin-top: 2px;
height: 32px;
}
>.app-name {
font-size: 18px;
font-weight: 900;
color: black;
height: 32px;
line-height: 32px;
white-space: nowrap;
font-family: AlibabaPuHuiTiB, "Alibaba PuHuiTi";
}
}
.app-header-right {
height: 100%;
}
.crm-app-content {
height: 100%;
width: 100%;
}
/*** BRGIN:滚动条样式 ***/
::-webkit-scrollbar {
background: transparent;
width: 4px;
height: 4px;
}
::-webkit-scrollbar-thumb {
border-radius: 0;
box-shadow: none;
border: 0;
background-color: #cecece;
}
::-webkit-scrollbar-track {
border-radius: 0;
box-shadow: none;
border: 0;
}
}
}
\ No newline at end of file
<app-layout className={{ index_view: true }} v-show={isIndexRoot}>
<template slot="headerLeft">
<div class="app-header-left">
<img class="logo" src="./assets/img/logo.png" />
<div class="app-name">{this.$t(this.model.srfCaption)}</div>
</div>
</template>
<template slot="headerRight">
<div class="app-header-right">
<app-header-menus />
</div>
</template>
<template slot="content">
<div class="crm-app-content">
<div class="inedx-app-menus">
${P.getCtrlCode('appmenu', 'CONTROL.html').code}
</div>
<div class="content">内容</div>
</div>
</template>
</app-layout>
\ No newline at end of file
CTRLTYPE=VIEWLAYOUTPANEL#INDEXTOPNAV
\ No newline at end of file
<#ibizinclude> .app-container {
../@MACRO/DEFAULT.less.ftl position: absolute;
</#ibizinclude> width: 100vw;
height: 100vh;
top: 0;
left: 0;
right: 0;
bottom: 0;
.index_view{ .index_view.crm-app-layout {
width: 100%;
.app-header-left {
height: 100%; height: 100%;
padding: 0;
margin: 0;
.index_header{
height:50px;
padding:0 20px;
display: flex;
align-items: center;
justify-content: space-between;
.page-logo{
display: flex; display: flex;
align-items: center; align-items: center;
>img {
margin: 0px 6px;
margin-top: 2px;
height: 32px;
} }
.header-left{
display: flex; >.app-name {
align-items: center; font-size: 18px;
justify-content: space-between; font-weight: 900;
.el-menu.el-menu--horizontal{ color: black;
border-bottom: none; height: 32px;
.el-submenu{ line-height: 32px;
border-top: none; white-space: nowrap;
} font-family: AlibabaPuHuiTiB, "Alibaba PuHuiTi";
}
}
> div {
line-height: 49px;
}
} }
.index_content{
background-color:#fff;
height:calc(100vh - 50px);
overflow-x: hidden;
overflow-y: hidden;
} }
>.ivu-layout {
>.ivu-layout { .app-header-right {
height: calc(100vh - 50px); height: 100%;
} }
.crm-app-content {
height: 100%;
width: 100%;
display: flex;
>.inedx-app-menus {
width: 240px;
height: 100%;
background-color: white;
flex-shrink: 0;
overflow-y: auto;
} }
.ivu-layout .ivu-layout-sider .ivu-layout-sider-children .sider-top{
line-height: 58px; >.content {
text-align: right; flex-grow: 1;
padding-right: 18px;
} }
.ivu-layout .ivu-layout-sider .ivu-layout-sider-children .sider-top .ivu-icon{
font-size: 20px;
padding: 4px;
margin-top: -2px;
cursor: pointer;
} }
}
/*** BRGIN:滚动条样式 ***/ /*** BRGIN:滚动条样式 ***/
::-webkit-scrollbar { ::-webkit-scrollbar {
background: transparent; background: transparent;
width: 4px; width: 4px;
height: 4px; height: 4px;
} }
::-webkit-scrollbar-thumb {
::-webkit-scrollbar-thumb {
border-radius: 0; border-radius: 0;
box-shadow: none; box-shadow: none;
border: 0; border: 0;
background-color: #cecece; background-color: #cecece;
} }
::-webkit-scrollbar-track {
::-webkit-scrollbar-track {
border-radius: 0; border-radius: 0;
box-shadow: none; box-shadow: none;
border: 0; border: 0;
}
}
} }
\ No newline at end of file
<#if view.isBlankMode()> <app-layout viewName="${view.getCodeName()?lower_case}" viewTitle="${view.getTitle()}" className={{ index_view: true }}>
<div class="index_view ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <template slot="headerLeft">
<app-keep-alive :routerList="getRouterList"> <div class="app-header-left">
<router-view :key="getRouterViewKey"></router-view> <img class="logo" src="./assets/img/logo.png" />
</app-keep-alive> <div class="app-name">{this.$t(this.model.srfCaption)}</div>
</div> </div>
<#else> </template>
<#if view.getMainMenuAlign()=="LEFT" || view.getMainMenuAlign()==""> <template slot="headerRight">
<div class="index_view ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>"> <div class="app-header-right">
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <app-header-menus menus={this.topMenus} on-menu-click={(e: any) => this.topMenuClick(e)}/>
<layout :class="themeClasses" :style="themeStyle"> </div>
<header class="index_header"> </template>
<div class="header-left" > <template slot="content">
<div class="page-logo"> <div class="crm-app-content">
<#if view.getAppIconPath() != ""> <div class="inedx-app-menus">
<img src="${view.getAppIconPath()}" height="32"> ${P.getCtrlCode('appmenu', 'CONTROL.html').code}
<#else> </div>
<img src="../../../assets/img/logo.png" height="32" /> <div class="content" style="width: calc(100% - 240px)">
</#if> <router-view></router-view>
<span style="display: inline-block;margin-left: 10px;font-size: 22px;">{{$t(model.srfCaption)}}</span>
</div>
</div>
<div class="header-right" style="display: flex;align-items: center;justify-content: space-between;">
<app-header-menus />
<app-lang style='font-size: 15px;padding: 0 10px;'></app-lang>
<app-orgsector></app-orgsector>
<app-user></app-user>
<app-theme style="width:45px;display: flex;justify-content: center;"></app-theme>
</div>
</header>
<layout>
<#if view.hasPSControl('appmenu')>
<sider :width="collapseChange ? 64 : 200" hide-trigger v-model="collapseChange">
<div class="sider-top">
<i class="ivu-icon ivu-icon-md-menu" @click="handleClick"></i>
</div>
${P.getCtrlCode('appmenu', 'CONTROL.html').code}
</sider>
<content class="index_content" :style="{'width':this.collapseChange ? 'calc(100vw - 64px)' : 'calc(100vw - 200px)' }">
<tab-page-exp></tab-page-exp>
<app-keep-alive :routerList="getRouterList">
<router-view :key="getRouterViewKey"></router-view>
</app-keep-alive>
</content>
<#else>
<content style="width: 100vw;height: calc(100vh - 50px);">
<tab-page-exp></tab-page-exp>
<app-keep-alive :routerList="getRouterList">
<router-view :key="getRouterViewKey"></router-view>
</app-keep-alive>
</content>
</#if>
</layout>
</layout>
</div>
<#else>
<div class="index_view <#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<layout :class="themeClasses" :style="themeStyle">
<header class="index_header" >
<div class="header-left">
<div class="page-logo">
<img src="../../../assets/img/logo.png" height="32" />
<span style="display: inline-block;margin-left: 10px;font-size: 22px;">{{$t(model.srfCaption)}}</span>
</div>
<div style="margin-left: 50px;">
${P.getCtrlCode('appmenu', 'CONTROL.html').code}
</div>
</div> </div>
<div class="header-right" style="display: flex;align-items: center;justify-content: space-between;">
<app-header-menus />
<app-lang style='font-size: 15px;padding: 0 10px;'></app-lang>
<app-orgsector></app-orgsector>
<app-user></app-user>
<app-theme style="width:45px;display: flex;justify-content: center;"></app-theme>
</div> </div>
</header> </template>
<content style="height:calc(100vh - 50px);"> </app-layout>
<router-view></router-view> \ No newline at end of file
</content>
</layout>
</div>
</#if>
</#if>
...@@ -10,11 +10,9 @@ ...@@ -10,11 +10,9 @@
if(this.formDruipart){ if(this.formDruipart){
this.formDruipart.subscribe((res:any) =>{ this.formDruipart.subscribe((res:any) =>{
if(Object.is(res.action,'save')){ if(Object.is(res.action,'save')){
this.viewState.next({ tag:'grid', action: 'save', data: this.viewparams }); let opt ={data:res.data};
} Object.assign(opt,this.context);
if(Object.is(res.action,'load')){ this.viewState.next({ tag:'grid', action: 'save', data: opt });
const _this: any = this;
_this.engine.load(res.data,true);
} }
}); });
} }
...@@ -28,6 +26,7 @@ if(this.formDruipart){ ...@@ -28,6 +26,7 @@ if(this.formDruipart){
<#assign grid = view.getPSControl('grid')> <#assign grid = view.getPSControl('grid')>
</#if> </#if>
<#if grid??> <#if grid??>
/** /**
* 是否单选 * 是否单选
* *
...@@ -38,12 +37,24 @@ if(this.formDruipart){ ...@@ -38,12 +37,24 @@ if(this.formDruipart){
</#if> </#if>
/** /**
* 是否嵌入关系界面 * Vue声明周期
* *
* @type {boolean} * @memberof ViewBase
* @memberof ${srfclassname('${view.name}')}Base
*/ */
@Prop({default:false}) public isformDruipart?: boolean; public created() {
super.created();
if(this.formDruipart){
this.formDruipart.subscribe((res:any) =>{
if(Object.is(res.action,'save')){
this.viewState.next({ tag:'grid', action: 'save', data: this.viewparams });
}
if(Object.is(res.action,'load')){
const _this: any = this;
_this.engine.load(res.data,true);
}
});
}
}
/** /**
* 界面关系通讯对象 * 界面关系通讯对象
...@@ -90,7 +101,7 @@ if(this.formDruipart){ ...@@ -90,7 +101,7 @@ if(this.formDruipart){
<#if grid??> <#if grid??>
const grid: any = this.$refs.${grid.name}; const grid: any = this.$refs.${grid.name};
if (grid) { if (grid) {
grid.load(this.context, true); grid.load(this.context);
} }
</#if> </#if>
} }
......
<script lang='tsx'> <script lang='tsx'>
import { Component } from 'vue-property-decorator'; import { Component } from 'vue-property-decorator';
import ${srfclassname('${view.name}')}Base from './${srffilepath2(view.name)}-base.vue'; import ${srfclassname(view.name)}Base from './${srffilepath2(view.name)}-base.vue';
<#if view.getPSControls()??> <#if view.getPSControls()??>
<#list view.getPSControls() as ctrl> <#list view.getPSControls() as ctrl>
<#if ctrl.getControlType?? && ctrl.getControlType() != 'TOOLBAR' && ctrl.getControlType() != 'CONTEXTMENU'> <#if ctrl.getControlType() != 'TOOLBAR' && ctrl.getControlType() != 'CONTEXTMENU'>
<#if ctrl.getPSAppDataEntity?? && ctrl.getPSAppDataEntity()??> <#if ctrl.getPSAppDataEntity?? && ctrl.getPSAppDataEntity()??>
import view_${ctrl.getName()} from '@widgets/${srffilepath2(ctrl.getPSAppDataEntity().getCodeName())}/${srffilepath2(ctrl.getCodeName())}-${ctrl.getControlType()?lower_case}/${srffilepath2(ctrl.getCodeName())}-${ctrl.getControlType()?lower_case}.vue'; import view_${ctrl.getName()} from '@widgets/${srffilepath2(view.getPSAppDataEntity().getCodeName())}/${srffilepath2(ctrl.getCodeName())}-${ctrl.getControlType()?lower_case}/${srffilepath2(ctrl.getCodeName())}-${ctrl.getControlType()?lower_case}.vue';
<#else> <#else>
import view_${ctrl.getName()} from '@widgets/app/${srffilepath2(ctrl.getCodeName())}-${ctrl.getControlType()?lower_case}/${srffilepath2(ctrl.getCodeName())}-${ctrl.getControlType()?lower_case}.vue'; import view_${ctrl.getName()} from '@widgets/app/${srffilepath2(ctrl.getCodeName())}-${ctrl.getControlType()?lower_case}/${srffilepath2(ctrl.getCodeName())}-${ctrl.getControlType()?lower_case}.vue';
</#if> </#if>
</#if> </#if>
</#list> </#list>
</#if> </#if>
/**
* ${view.getTitle()}
*
* @export
* @class ${srfclassname(view.name)}
* @extends {${srfclassname(view.name)}Base}
*/
@Component({ @Component({
components: { components: {
<#if view.getPSControls?? && view.getPSControls()??> <#if view.getPSControls()??>
<#list view.getPSControls() as ctrl> <#list view.getPSControls() as ctrl>
<#if ctrl.getControlType() != "TOOLBAR"> <#if ctrl.getControlType() != "TOOLBAR">
view_${ctrl.getName()}, view_${ctrl.getName()},
...@@ -29,7 +37,5 @@ import view_${ctrl.getName()} from '@widgets/app/${srffilepath2(ctrl.getCodeName ...@@ -29,7 +37,5 @@ import view_${ctrl.getName()} from '@widgets/app/${srffilepath2(ctrl.getCodeName
}); });
}, },
}) })
export default class ${srfclassname('${view.name}')} extends ${srfclassname('${view.name}')}Base { export default class ${srfclassname(view.name)} extends ${srfclassname(view.name)}Base { }
}
</script> </script>
\ No newline at end of file
<script lang='tsx'> <script lang='tsx'>
import { Vue, Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator'; import { Vue, Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator';
import { UIActionTool,Util } from '@/utils';
<#if view.getPSAppCounterRefs()??>
<#list view.getPSAppCounterRefs() as singleCounterRef>
<#if singleCounterRef.getPSAppCounter()??>
<#assign appCounter = singleCounterRef.getPSAppCounter()/>
import ${srfclassname('${appCounter.getCodeName()}')}CounterService from '@/counter/${srffilepath2(appCounter.getCodeName())}/${srffilepath2(appCounter.getCodeName())}-counter';
</#if>
</#list>
</#if>
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
import { UIActionTool, Util } from '@/utils';
import { VueLifeCycleProcessing<#if view_base_name??>, ${view_base_name}</#if> } from '@/crm-core';
<#if view.getPSAppDataEntity?? && view.getPSAppDataEntity()??> <#if view.getPSAppDataEntity?? && view.getPSAppDataEntity()??>
<#assign appde = view.getPSAppDataEntity()/> <#assign appde = view.getPSAppDataEntity()/>
import ${srfclassname('${appde.getCodeName()}')}Service from '@/service/${srffilepath2(appde.getCodeName())}/${srffilepath2(appde.getCodeName())}-service'; import ${srfclassname(appde.getCodeName())}Service from '@/service/${srffilepath2(appde.getCodeName())}/${srffilepath2(appde.getCodeName())}-service';
</#if> </#if>
<#if view.getPSAppViewEngines()??> <#if view.getPSAppViewEngines()??>
...@@ -21,70 +14,40 @@ import ${engine.getEngineType()}Engine from '@engine/${engine.getEngineCat()?low ...@@ -21,70 +14,40 @@ import ${engine.getEngineType()}Engine from '@engine/${engine.getEngineCat()?low
</#list> </#list>
</#if> </#if>
<#if view.getPSUIActions()??> <#if view.getPSUIActions()??>
<#list view.getPSUIActions() as uiAction> <#list view.getPSUIActions() as uiAction>
<#if uiAction.getPSAppDataEntity?? && uiAction.getPSAppDataEntity()??> <#if uiAction.getPSAppDataEntity?? && uiAction.getPSAppDataEntity()??>
<#if uiAction.getPFLogicCodeType() == "WFBACKEND">
<#if uiAction.getPSAppWFVer?? && uiAction.getPSAppWFVer()??>
<#if !P.exists("importService", uiAction.getPSAppWFVer().getCodeName(), "")>
import ${srfclassname('${uiAction.getPSAppWFVer().getCodeName()}')}WFUIService from '@/wfuiservice/${uiAction.getPSAppWF().getCodeName()?lower_case}/${uiAction.getPSAppWFVer().getCodeName()?lower_case}-ui-service';
</#if>
</#if>
<#else>
<#assign curAppEntity = uiAction.getPSAppDataEntity()/> <#assign curAppEntity = uiAction.getPSAppDataEntity()/>
<#if !P.exists("importService1", curAppEntity.getId(), "")> <#if !P.exists("importService", curAppEntity.getId(), "")>
import ${srfclassname('${curAppEntity.getCodeName()}')}UIService from '@/uiservice/${srffilepath2(curAppEntity.getCodeName())}/${srffilepath2(curAppEntity.getCodeName())}-ui-service'; import ${srfclassname('${curAppEntity.getCodeName()}')}UIService from '@/uiservice/${srffilepath2(curAppEntity.getCodeName())}/${srffilepath2(curAppEntity.getCodeName())}-ui-service';
</#if> </#if>
</#if> </#if>
</#if>
</#list> </#list>
</#if> </#if>
<#if import_block??> <#if import_block??>
${import_block} ${import_block}
</#if> </#if>
@Component({ /**
components: { * ${view.getTitle()}基类
}, *
}) * @export
export default class ${srfclassname('${view.name}')}Base extends Vue { * @class ${srfclassname(view.name)}Base
* @extends {<#if view_base_name??>${view_base_name}<#else>Vue</#if>}
*/
@Component({})
@VueLifeCycleProcessing
export default class ${srfclassname(view.name)}Base extends <#if view_base_name??>${view_base_name}<#else>Vue</#if> {
<#if view.getPSAppDataEntity?? && view.getPSAppDataEntity()??> <#if view.getPSAppDataEntity?? && view.getPSAppDataEntity()??>
<#assign appde = view.getPSAppDataEntity()/> <#assign appde = view.getPSAppDataEntity()/>
/** /**
* 实体服务对象 * 实体服务对象
* *
* @type {${srfclassname('${appde.getCodeName()}')}Service} * @type {${srfclassname(appde.getCodeName())}Service}
* @memberof ${srfclassname('${view.name}')}Base * @memberof ${srfclassname(view.name)}Base
*/
protected appEntityService: ${srfclassname('${appde.getCodeName()}')}Service = new ${srfclassname('${appde.getCodeName()}')}Service;
</#if>
<#if view.getPSAppCounterRefs()??>
<#assign counterRefs = ''/>
<#list view.getPSAppCounterRefs() as singleCounterRef>
<#if singleCounterRef.getPSAppCounter()??>
<#assign appCounter = singleCounterRef.getPSAppCounter()/>
<#assign counterRefs>${counterRefs}this.${srfclassname('${appCounter.getCodeName()}')}counterservice<#if singleCounterRef_has_next>,</#if></#assign>
/**
* ${srfclassname('${appCounter.getCodeName()}')}CounterService计数器服务对象
*
* @type {${srfclassname('${appCounter.getCodeName()}')}CounterService}
* @memberof ${srfclassname('${view.name}')}Base
*/
protected ${srfclassname('${appCounter.getCodeName()}')}counterservice: ${srfclassname('${appCounter.getCodeName()}')}CounterService = new ${srfclassname('${appCounter.getCodeName()}')}CounterService({ $store: this.$store });
</#if>
</#list>
/**
* 计数器服务对象集合
*
* @type {Array<*>}
* @memberof ${srfclassname('${view.name}')}Base
*/ */
protected counterServiceArray:Array<any> = [${counterRefs}]; public appEntityService: ${srfclassname(appde.getCodeName())}Service = new ${srfclassname(appde.getCodeName())}Service;
</#if> </#if>
/** /**
...@@ -92,44 +55,29 @@ export default class ${srfclassname('${view.name}')}Base extends Vue { ...@@ -92,44 +55,29 @@ export default class ${srfclassname('${view.name}')}Base extends Vue {
* *
* @param {*} val * @param {*} val
* @returns {*} * @returns {*}
* @memberof ${srfclassname('${view.name}')}Base * @memberof ${srfclassname(view.name)}Base
*/ */
@Emit() @Emit()
protected viewDatasChange(val: any):any { public viewDatasChange(val: any):any {
return val; return val;
} }
/** /**
* 传入视图上下文 * 视图标识
*
* @type {string}
* @memberof ${srfclassname('${view.name}')}Base
*/
@Prop() protected viewdata!: string;
/**
* 传入视图参数
* *
* @type {string} * @type {string}
* @memberof ${srfclassname('${view.name}')}Base * @memberof ${srfclassname(view.name)}Base
*/
@Prop() protected viewparam!: string;
/**
* 视图默认使用
*
* @type {boolean}
* @memberof ${srfclassname('${view.name}')}Base
*/ */
@Prop({ default: true }) protected viewDefaultUsage!: boolean; public viewtag: string = '${view.getId()}';
/** /**
* 视图标识 * 父数据对象
* *
* @type {string} * @protected
* @memberof ${srfclassname('${view.name}')}Base * @type {*}
* @memberof ${srfclassname(view.name)}Base
*/ */
protected viewtag: string = '${view.getId()}'; protected srfparentdata: any = {};
/** /**
* 自定义视图导航上下文集合 * 自定义视图导航上下文集合
...@@ -163,57 +111,22 @@ export default class ${srfclassname('${view.name}')}Base extends Vue { ...@@ -163,57 +111,22 @@ export default class ${srfclassname('${view.name}')}Base extends Vue {
* 视图模型数据 * 视图模型数据
* *
* @type {*} * @type {*}
* @memberof ${srfclassname('${view.name}')}Base * @memberof ${srfclassname(view.name)}Base
*/ */
protected model: any = { public model: any = {
srfCaption: '<#if view.getPSAppDataEntity()??>entities.${view.getPSAppDataEntity().getCodeName()?lower_case}.views.${view.getPSDEViewCodeName()?lower_case}.caption<#else>app.views.${view.getCodeName()?lower_case}.caption</#if>', srfCaption: '<#if view.getPSAppDataEntity()??>entities.${view.getPSAppDataEntity().getCodeName()?lower_case}.views.${view.getPSDEViewCodeName()?lower_case}.caption<#else>app.views.${view.getCodeName()?lower_case}.caption</#if>',
srfTitle: '<#if view.getPSAppDataEntity()??>entities.${view.getPSAppDataEntity().getCodeName()?lower_case}.views.${view.getPSDEViewCodeName()?lower_case}.title<#else>app.views.${view.getCodeName()?lower_case}.title</#if>', srfTitle: '<#if view.getPSAppDataEntity()??>entities.${view.getPSAppDataEntity().getCodeName()?lower_case}.views.${view.getPSDEViewCodeName()?lower_case}.title<#else>app.views.${view.getCodeName()?lower_case}.title</#if>',
srfSubTitle: '<#if view.getPSAppDataEntity()??>entities.${view.getPSAppDataEntity().getCodeName()?lower_case}.views.${view.getPSDEViewCodeName()?lower_case}.subtitle<#else>app.views.${view.getCodeName()?lower_case}.subtitle</#if>', srfSubTitle: '<#if view.getPSAppDataEntity()??>entities.${view.getPSAppDataEntity().getCodeName()?lower_case}.views.${view.getPSDEViewCodeName()?lower_case}.subtitle<#else>app.views.${view.getCodeName()?lower_case}.subtitle</#if>',
dataInfo: '' dataInfo: ''
} }
/**
* 视图参数变化
*
* @param {*} newVal
* @param {*} oldVal
* @memberof ${srfclassname('${view.name}')}Base
*/
@Watch('viewparam',{immediate: true, deep: true})
onParamData(newVal: any, oldVal: any) {
if(newVal){
for(let key in this.viewparams){
delete this.viewparams[key];
}
Object.assign(this.viewparams, JSON.parse(this.viewparam));
<#if watch_viewparam_block??>${watch_viewparam_block}</#if>
}
}
/**
* 处理应用上下文变化
*
* @param {*} newVal
* @param {*} oldVal
* @memberof ${srfclassname('${view.name}')}Base
*/
@Watch('viewdata')
onViewData(newVal: any, oldVal: any) {
const _this: any = this;
if (!Object.is(newVal, oldVal) && _this.engine) {
_this.parseViewParam();
_this.engine.load();
}
<#if viewdata_block??>${viewdata_block}</#if>
}
/** /**
* 容器模型 * 容器模型
* *
* @type {*} * @type {*}
* @memberof ${srfclassname('${view.name}')}Base * @memberof ${srfclassname(view.name)}Base
*/ */
protected containerModel: any = { public containerModel: any = {
<#if view.getPSControls()??> <#if view.getPSControls()??>
<#list view.getPSControls() as ctrl> <#list view.getPSControls() as ctrl>
view_${ctrl.name}: { name: '${ctrl.name}', type: '${ctrl.getControlType()}' }, view_${ctrl.name}: { name: '${ctrl.name}', type: '${ctrl.getControlType()}' },
...@@ -232,30 +145,14 @@ export default class ${srfclassname('${view.name}')}Base extends Vue { ...@@ -232,30 +145,14 @@ export default class ${srfclassname('${view.name}')}Base extends Vue {
</#if> </#if>
}; };
/**
* 计数器刷新
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public counterRefresh(){
const _this:any =this;
if(_this.counterServiceArray && _this.counterServiceArray.length >0){
_this.counterServiceArray.forEach((item:any) =>{
if(item.refreshData && item.refreshData instanceof Function){
item.refreshData();
}
})
}
}
/** /**
* 视图状态订阅对象 * 视图状态订阅对象
* *
* @private * @private
* @type {Subject<{action: string, data: any}>} * @type {Subject<{action: string, data: any}>}
* @memberof ${srfclassname('${view.name}')}Base * @memberof ${srfclassname(view.name)}Base
*/ */
protected viewState: Subject<ViewState> = new Subject(); public viewState: Subject<ViewState> = new Subject();
<#if view.hasPSControl('toolbar')> <#if view.hasPSControl('toolbar')>
${P.getCtrlCode('toolbar', 'CONTROL.vue').code} ${P.getCtrlCode('toolbar', 'CONTROL.vue').code}
......
<#assign view_base_name>TabExpViewBase</#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/LAYOUTPANEL_VIEW.template.ftl ../@MACRO/LAYOUTPANEL_VIEW.template.ftl
</#ibizinclude> </#ibizinclude>
......
<#assign view_base_name>TabFormView9Base</#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW-BASE.vue.ftl ../@MACRO/VIEW-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
<#assign view_base_name>ListExpViewBase</#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/LAYOUTPANEL_VIEW.template.ftl ../@MACRO/LAYOUTPANEL_VIEW.template.ftl
</#ibizinclude> </#ibizinclude>
...@@ -11,13 +12,6 @@ ...@@ -11,13 +12,6 @@
../@MACRO/VIEW_CONTENT-BASE.vue.ftl ../@MACRO/VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
/**
* 视图唯一标识
*
* @type {string}
* @memberof ${srfclassname('${view.name}')}
*/
public viewUID: string = '${srffilepath2(view.getPSAppModule().getCodeName())}-${srffilepath2(view.getCodeName())}';
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_BOTTOM-BASE.vue.ftl ../@MACRO/VIEW_BOTTOM-BASE.vue.ftl
......
<#assign view_base_name>ListViewBase</#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/LIST_VIEW.vue.ftl ../@MACRO/LIST_VIEW.vue.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
<#assign created_block> <#assign view_base_name>ListView9Base</#assign>
if(this.formDruipart){
this.formDruipart.subscribe((res:any) =>{
if(Object.is(res.action,'load')){
const _this: any = this;
_this.engine.load(res.data,true);
}
});
}
</#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/LAYOUTPANEL_VIEW.template.ftl ../@MACRO/LIST_VIEW.vue.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/VIEW_HEADER-BASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude>
/**
* 是否嵌入关系界面
*
* @type {boolean}
* @memberof ${srfclassname('${view.name}')}Base
*/
@Prop({default:false}) public isformDruipart?: boolean;
/**
* 界面关系通讯对象
*
* @type {Subject<ViewState>}
* @memberof ${srfclassname('${view.name}')}Base
*/
@Prop() public formDruipart!: Subject<ViewState>;
/**
* 搜索值
*
* @type {string}
* @memberof ${srfclassname('${view.name}')}Base
*/
protected query: string = '';
/**
* 是否展开搜索表单
*
* @type {boolean}
* @memberof ${srfclassname('${view.name}')}Base
*/
protected isExpandSearchForm: boolean = ${view.isExpandSearchForm()?c};
/**
* 快速搜索
*
* @param {*} $event
* @memberof ${srfclassname('${view.name}')}Base
*/
protected onSearch($event: any): void {
const refs: any = this.$refs;
if (refs.list) {
refs.list.load({});
}
}
<#ibizinclude>
../@MACRO/VIEW_BOTTOM-BASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/VIEW-BASE.style.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册