提交 9943b1c0 编写于 作者: Mosher's avatar Mosher

增加地图视图及地图部件

上级 20c54b64
<template>
<#if ctrl.render??>
${ctrl.render.code}
<#else>
<div class="map-container">
<div ref="map" class="map"></div>
</div>
</#if>
</template>
<#assign import_block>
import echarts from 'echarts';
import 'echarts/map/js/china.js'
import { Http } from "@/utils";
</#assign>
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl
</#ibizinclude>
/**
* 地图对象
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public map: any;
/**
* 显示处理提示
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop({ default: true }) public showBusyIndicator?: boolean;
/**
* 部件行为--update
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() public updateAction!: string;
/**
* 部件行为--fetch
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() public fetchAction!: string;
/**
* 部件行为--remove
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() public removeAction!: string;
/**
* 部件行为--load
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() public loadAction!: string;
/**
* 部件行为--loaddraft
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() public loaddraftAction!: string;
/**
* 部件行为--create
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() public createAction!: string;
/**
* 地图数据项模型
*
* @type {}
* @memberof ${srfclassname('${ctrl.name}')}Base
*/
public mapItems: any = {
<#if ctrl.getPSSysMapItems?? && ctrl.getPSSysMapItems()??>
<#list ctrl.getPSSysMapItems() as mapitem>
'${mapitem.getItemType()?lower_case}': {
bkcolor: '<#if mapitem.getBKColorPSAppDEField?? && mapitem.getBKColorPSAppDEField()??>${mapitem.getBKColorPSAppDEField().getCodeName()?lower_case}</#if>',
color:'<#if mapitem.getColorPSAppDEField?? && mapitem.getColorPSAppDEField()??>${mapitem.getColorPSAppDEField().getCodeName()?lower_case}</#if>',
content:'<#if mapitem.getContentPSDEField?? && mapitem.getContentPSDEField()??>${mapitem.getContentPSDEField().getCodeName()?lower_case}</#if>',
latitude:'<#if mapitem.getLatitudePSAppDEField?? && mapitem.getLatitudePSAppDEField()??>${mapitem.getLatitudePSAppDEField().getCodeName()?lower_case}</#if>',
longitude:'<#if mapitem.getLongitudePSAppDEField?? && mapitem.getLongitudePSAppDEField()??>${mapitem.getLongitudePSAppDEField().getCodeName()?lower_case}</#if>',
text:'<#if mapitem.getTextPSAppDEField?? && mapitem.getTextPSAppDEField()??>${mapitem.getTextPSAppDEField().getCodeName()?lower_case}</#if>',
tips:'<#if mapitem.getTipsPSAppDEField?? && mapitem.getTipsPSAppDEField()??>${mapitem.getTipsPSAppDEField().getCodeName()?lower_case}</#if>',
code:'${mapitem_index}'
}<#if mapitem_has_next>,</#if>
</#list>
</#if>
};
/**
* 数据集
*
* @type {}
* @memberof ${srfclassname('${ctrl.name}')}Base
*/
public items: any[] = [];
/**
* 初始化配置
*
* @type {}
* @memberof ${srfclassname('${ctrl.name}')}Base
*/
public initOptions: any = {
tooltip: {
trigger: 'item'
},
legend: {
orient: 'horizontal',
x: 'center',
data: [
<#if ctrl.getPSSysMapItems?? && ctrl.getPSSysMapItems()??>
<#list ctrl.getPSSysMapItems() as mapitem>
'${mapitem.getName()}'<#if mapitem_has_next>,</#if>
</#list>
</#if>
]
},
geo: {
map: 'china',
zoom: 1.2,
label: {
normal: {
show: false
},
emphasis: {
show: false
}
},
itemStyle: {
normal: {
areaColor: '#4FADFD',
borderColor: '#111'
},
emphasis: {
areaColor: '#0CD3DB'
}
}
},
visualMap: [
<#if ctrl.getPSSysMapItems?? && ctrl.getPSSysMapItems()??>
<#list ctrl.getPSSysMapItems() as mapitem>
{
type: 'piecewise',
left: 'left',
top: 'bottom',
splitNumber: 1,
seriesIndex: ${mapitem_index},
pieces: [{
label: '${mapitem.getName()}',
min: ${mapitem_index * 10},
max: ${(mapitem_index+1) * 10},
<#if mapitem.getColor?? && mapitem.getColor()??>
color: '${mapitem.getColor()}',
</#if><#t>
<#if mapitem.getBKColor?? && mapitem.getBKColor()??>
backgroundColor: '${mapitem.getBKColor()}',
</#if><#t>
<#if mapitem.getBorderColor?? && mapitem.getBorderColor()??>
borderColor: '${mapitem.getBorderColor()}',
</#if><#t>
<#if mapitem.getBorderWidth?? && mapitem.getBorderWidth()??>
borderWidth: '${mapitem.getBorderWidth()}',
</#if><#t>
}],
show: false
}<#if mapitem_has_next>,</#if>
</#list>
</#if>
],
series: [
<#if ctrl.getPSSysMapItems?? && ctrl.getPSSysMapItems()??>
<#list ctrl.getPSSysMapItems() as mapitem>
{
name: '<#if mapitem.getName()??>${mapitem.getName()}</#if>',
<#-- 类型判断 Start (默认 POINT )-->
<#-- 目前支持 POINT -->
<#if mapitem.getItemStyle?? && mapitem.getItemStyle()??>
<#if mapitem.getItemStyle() == 'POINT'>
type: 'scatter',
<#else>
type: 'scatter',
</#if>
<#else>
type: 'scatter',
</#if>
<#-- 类型判断 End -->
coordinateSystem: 'geo',
<#if mapitem.getItemType?? && mapitem.getItemType()??>
itemType: '${mapitem.getItemType()?lower_case}',
</#if><#t>
<#if mapitem.getColor?? && mapitem.getColor()??>
color: '${mapitem.getColor()}',
</#if><#t>
geoIndex: 0,
symbolSize: 14,
label: {
show: false
},
emphasis: {
label: {
show: false
}
},
tooltip: {
formatter: '{a}'
},
seriesDataIndex: ${(mapitem_index + 1) * 10 - 5},
data: []
}<#if mapitem_has_next>,</#if>
</#list>
</#if>
]
}
/**
* 应用状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public appStateEvent: Subscription | undefined;
/**
* 刷新
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public refresh(args?: any) {
this.load();
}
/**
* 选中的数据
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public selections: any[] = [];
/**
* 获取多项数据
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getDatas(): any[] {
return this.selections;
}
/**
* 获取单项树
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getData(): any {
return null;
}
/**
* vue 生命周期
*
* @returns
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public created() {
this.afterCreated();
}
/**
* 执行created后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterCreated() {
if(AppCenterService && AppCenterService.getMessageCenter()){
this.appStateEvent = AppCenterService.getMessageCenter().subscribe(({ name, action, data }) =>{
if(!Object.is(name,"${ctrl.getPSAppDataEntity().getCodeName()}")){
return;
}
if(Object.is(action,'appRefresh')){
this.refresh();
}
})
}
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}')}Base
*/
public mounted() {
this.afterMounted();
}
/**
* 执行mounted后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterMounted() {
let map: any = (this.$refs.map as any);
this.map = echarts.init(map);
this.map.setOption(this.initOptions);
}
/**
* 加载数据
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public load(data: any = {}, type: string = "",isloadding = this.showBusyIndicator) {
this.items = [];
const parentData: any = {};
this.$emit('beforeload', parentData);
Object.assign(data, parentData);
let tempViewParams: any = parentData.viewparams ? parentData.viewparams : {};
Object.assign(tempViewParams, JSON.parse(JSON.stringify(this.viewparams)));
Object.assign(data, { viewparams: tempViewParams });
this.service.search(this.fetchAction, this.context, data, isloadding).then((response: any) => {
if(!response || response.status !== 200) {
this.$notify.warning({
title: '警告',
message: response.error.message
})
}
this.$emit('load', response.data ? response.data : []);
this.items = response.data;
this.handleOptions(response.data);
this.setOptions();
});
}
/**
* 设置配置
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public setOptions() {
if(!this.map) {
return;
}
const options = JSON.parse(JSON.stringify(this.initOptions));
this.map.setOption(options);
}
/**
* 处理数据集
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public handleOptions(items: any[]) {
if(!items || items.length == 0) {
return;
}
items.forEach((item: any) => {
let longitudeArr: Array<any> = [];
let latitudeArr: Array<any> = [];
for(let key in this.mapItems) {
if(Object.is(key, item.itemType)) {
item.longitude ? longitudeArr.push(item.longitude) : '';
item.latitude ? latitudeArr.push(item.latitude) : '';
}
}
this.handleMapOptions(longitudeArr, latitudeArr, item);
})
}
/**
* 配置整合
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public handleMapOptions(longitude: Array<any>, latitude: Array<any>, arg: any) {
let series: Array<any> = this.initOptions.series;
if(!series || series.length==0) {
return;
}
series.forEach((item: any) => {
if(Object.is(arg.itemType, item.itemType)) {
longitude.forEach((jd: any, index: number) => {
let tempItem: any[] = [];
tempItem.push(parseFloat(jd));
tempItem.push(parseFloat(latitude[index]));
this.handleSeriesOptions(tempItem, item, arg);
item.data.push(tempItem);
})
}
});
Object.assign(this.initOptions.series, series);
}
/**
* 数据整合
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public handleSeriesOptions(tempItem: any, item: any, data: any) {
// 序列
tempItem.push(item.seriesDataIndex);
}
/**
* vue 生命周期
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public destroyed() {
this.afterDestroy();
}
/**
* 执行destroyed后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterDestroy() {
if(this.appStateEvent){
this.appStateEvent.unsubscribe();
}
if(this.viewStateEvent){
this.viewStateEvent.unsubscribe();
}
<#if destroyed_block??>
${destroyed_block}
</#if>
}
<#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/HTML/DEFAULT.html.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
.map{
width: 80vw;
height: 70vh;
}
\ 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 itemType: string = "";
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.getCodeName()}')}${srfclassname('${ctrl.name}')}Mode
*/
public getDataItems(): any[] {
let dataItems: any = [
<#-- 关联主实体的主键 -->
<#if ctrl.getPSAppDataEntity()??>
<#assign appDataEntity = ctrl.getPSAppDataEntity() />
<#if appDataEntity.isMajor() == false && appDataEntity.getMinorPSAppDERSs()??>
<#list appDataEntity.getMinorPSAppDERSs() as minorAppDERSs>
<#if minorAppDERSs.getMajorPSAppDataEntity()??>
<#assign majorAppDataEntity = minorAppDERSs.getMajorPSAppDataEntity() />
{
name: '${majorAppDataEntity.getCodeName()?lower_case}',
prop: '${majorAppDataEntity.getKeyPSAppDEField().getCodeName()?lower_case}'
},
</#if>
</#list>
</#if>
</#if>
{
name: 'itemType',
},
];
switch (this.itemType) {
<#-- 地图项实体映射 -->
<#if ctrl.getPSSysMapItems()??>
<#list ctrl.getPSSysMapItems() as mapItem>
<#if mapItem.getPSAppDataEntity()??>
case "${mapItem.getItemType()?lower_case}":
dataItems =
[
...dataItems,
{
name: 'longitude',
prop: '${mapItem.getLongitudePSAppDEField().getCodeName()?lower_case}'
},
{
name: 'latitude',
prop: '${mapItem.getLatitudePSAppDEField().getCodeName()?lower_case}'
},
{
// 高度
name: 'height',
prop: '<#if mapItem.getAltitudePSAppDEField?? && mapItem.getAltitudePSAppDEField()??>${mapItem.getAltitudePSAppDEField().getCodeName()?lower_case}</#if>'
},
{
// 背景颜色
name: 'height',
prop: '<#if mapItem.getBKColorPSAppDEField?? && mapItem.getBKColorPSAppDEField()??>${mapItem.getBKColorPSAppDEField().getCodeName()?lower_case}</#if>'
},
{
// 提示
name: 'tips',
prop: '<#if mapItem.getTipsPSAppDEField?? && mapItem.getTipsPSAppDEField()??>${mapItem.getTipsPSAppDEField().getCodeName()?lower_case}</#if>'
},
{
// 文本值
name: 'text',
prop: '<#if mapItem.getTextPSAppDEField?? && mapItem.getTextPSAppDEField()??>${mapItem.getTextPSAppDEField().getCodeName()?lower_case}</#if>'
},
{
// 排序
name: 'height',
prop: '<#if mapItem.getOrderValuePSAppDEField?? && mapItem.getOrderValuePSAppDEField()??>${mapItem.getOrderValuePSAppDEField().getCodeName()?lower_case}</#if>'
},
{
// 字体颜色
name: 'fontcolor',
prop: '<#if mapItem.getColorPSAppDEField?? && mapItem.getColorPSAppDEField()??>${mapItem.getColorPSAppDEField().getCodeName()?lower_case}</#if>'
},
{
// 数据项内容
name: 'content',
prop: '<#if mapItem.getContentPSDEField?? && mapItem.getContentPSDEField()??>${mapItem.getContentPSDEField().getCodeName()?lower_case}</#if>'
},
{
// 分组
name: 'group',
prop: '<#if mapItem.getGroupPSAppDEField?? && mapItem.getGroupPSAppDEField()??>${mapItem.getGroupPSAppDEField().getCodeName()?lower_case}</#if>'
},
{
// 图标
name: 'icon',
prop: '<#if mapItem.getIconPSAppDEField?? && mapItem.getIconPSAppDEField()??>${mapItem.getIconPSAppDEField().getCodeName()?lower_case}</#if>'
},
];
break;
</#if>
</#list>
</#if>
}
return dataItems;
}
<#ibizinclude>
../@MACRO/MODEL/MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign import_block>
<#if ctrl.getPSSysMapItems?? && ctrl.getPSSysMapItems()??>
<#list ctrl.getPSSysMapItems() as mapitem>
<#if mapitem.getPSAppDataEntity()??>
<#assign _appde = mapitem.getPSAppDataEntity() />
<#if _appde.getId() != appde.getId()>
<#if !P.exists("importService", _appde.getId(), "")>
import ${srfclassname('${_appde.getCodeName()}')}Service from '@/service/${srffilepath2(_appde.getCodeName())}/${srffilepath2(_appde.getCodeName())}-service';
</#if>
</#if>
</#if>
</#list>
</#if>
</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
<#if ctrl.getPSSysMapItems?? && ctrl.getPSSysMapItems()??>
<#list ctrl.getPSSysMapItems() as mapitem>
<#if mapitem.getPSAppDataEntity()??>
<#assign _appde = mapitem.getPSAppDataEntity() />
<#if _appde.getId() != appde.getId()>
<#if !P.exists("importService", _appde.getId(), "")>
/**
* ${_appde.getLogicName()}服务对象
*
* @type {${srfclassname('${_appde.getCodeName()}')}Service}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public ${_appde.getCodeName()?lower_case}Service: ${srfclassname('${_appde.getCodeName()}')}Service = new ${srfclassname('${_appde.getCodeName()}')}Service();
</#if>
</#if>
</#if>
</#list>
</#if>
/**
* 地图配置集合
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public mapConfig: any[] = [
<#if ctrl.getPSSysMapItems?? && ctrl.getPSSysMapItems()??>
<#list ctrl.getPSSysMapItems() as mapitem>
{
itemName: '${mapitem.getName()}',
itemType: '${mapitem.getItemType()}',
color : '${mapitem.getBKColor()}',
textColor : '${mapitem.getColor()}'
}<#if mapitem_has_next>,</#if>
</#list>
</#if>
];
/**
* 查询数据
*
* @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> {
let _this = this;
return new Promise((resolve: any, reject: any) => {
let promises:any = [];
let tempRequest:any;
<#if ctrl.getPSSysMapItems()??>
<#list ctrl.getPSSysMapItems() as mapitem>
<#if mapitem.getPSAppDataEntity()?? && mapitem.getPSDEDataSet()??>
<#assign _appde = mapitem.getPSAppDataEntity() />
<#assign deDataSet = mapitem.getPSDEDataSet() />
<#if !P.exists("importService3", _appde.getId() + deDataSet.getCodeName(), "")>
<#if _appde.getId() == appde.getId()>
tempRequest = this.handleRequestData(action,context,data,true,"${mapitem.getItemType()}");
promises.push(this.appEntityService.Fetch${deDataSet.getCodeName()}(tempRequest.context, tempRequest.data, isloading));
<#else>
tempRequest = this.handleRequestData(action,context,data,true,"${mapitem.getItemType()}");
promises.push(this.${_appde.getCodeName()?lower_case}Service.Fetch${deDataSet.getCodeName()}(tempRequest.context, tempRequest.data, isloading));
</#if>
</#if>
</#if>
</#list>
</#if>
Promise.all(promises).then((resArray: any) => {
let _data:any = [];
resArray.forEach((response:any,resIndex:number) => {
if (!response || response.status !== 200) {
return;
}
let _response: any = JSON.parse(JSON.stringify(response));
_response.data.forEach((item:any,index:number) =>{
_response.data[index].color = _this.mapConfig[resIndex].color;
_response.data[index].textColor = _this.mapConfig[resIndex].textColor;
_response.data[index].itemType = _this.mapConfig[resIndex].itemType;
});
;
_this.handleResponse(action, _response,false,_this.mapConfig[resIndex].itemType);
_data.push(..._response.data);
});
let result = {status: 200, data: _data};
resolve(result);
}).catch((response: any) => {
reject(response);
});
});
}
/**
* 处理request请求数据
*
* @param action 行为
* @param data 数据
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public handleRequestData(action: string,context:any ={},data: any = {},isMerge:boolean = false,itemType:string=""){
let model: any = this.getMode();
model.itemType = itemType;
return super.handleRequestData(action,context,data,isMerge);
}
/**
* 处理response返回数据
*
* @param {string} action
* @param {*} response
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public async handleResponse(action: string, response: any,isCreate:boolean = false,itemType:string=""){
let model: any = this.getMode();
model.itemType = itemType;
super.handleResponse(action,response,isCreate);
}
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=MAP
\ No newline at end of file
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<#assign MDContent><#t>
<#if view.getPSSysCounterRef?? && view.getPSSysCounterRef()?? && view.getPSSysCounterRef().getPSAppCounter()??>
<#assign appCounter = view.getPSSysCounterRef().getPSAppCounter() />
</#if>
<#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>
<#-- BEGIN:快速搜索框或工具栏或支持快速分组搜索或快速搜索表单部件存在 -->
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar') || view.isEnableQuickGroup() || view.getQuickPSDESearchForm()??)>
<div style='margin-bottom: 6px;'>
<#if view.isEnableQuickGroup()>
<div class="quick-group-container">
<app-quick-group :items="quickGroupModel" <#if appCounter??>:counterService="${srfclassname('${appCounter.getCodeName()}')}counterservice"</#if> @valuechange="qucikGroupValueChange"></app-quick-group>
</div>
</#if>
<#if view.getQuickPSDESearchForm()??>
<div class="quick-search-container">
<#assign quickSearchForm = view.getQuickPSDESearchForm() />
${P.getCtrlCode(quickSearchForm, 'CONTROL.html').code}
</div>
</#if>
<#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='quick-search-input' style='max-width: 400px;' placeholder="<@getQuickSearchPlaceholder view />" />
</#if>
<div class='pull-left'>
<#if view.hasPSControl('toolbar')>
<@ibizindent blank=8>
${P.getCtrlCode('toolbar', 'CONTROL.html').code}<#t>
</@ibizindent>
</#if>
</div>
</div>
</#if>
<#-- END:快速搜索或工具栏存在 -->
<#if view.getViewType() != "DEGRIDVIEW9">
<#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code}
</#if>
<#if view.hasPSControl('map')>
${P.getCtrlCode('map', 'CONTROL.html').code}
</#if>
</#if>
</#assign>
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<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'>
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#-- BEGIN:视图内容 -->
<@ibizindent blank=12>
<#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图内容 -->
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div>
</card>
</div>
\ No newline at end of file
CTRLTYPE=VIEWLAYOUTPANEL#APPDEMAPVIEW
\ No newline at end of file
<#ibizinclude>
../@MACRO/LAYOUTPANEL_VIEW.template.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/VIEW_HEADER-BASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/VIEW_CONTENT-BASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/VIEW_BOTTOM-BASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/VIEW-BASE.style.ftl
</#ibizinclude>
\ No newline at end of file
${P.getLayoutCode().code}
\ No newline at end of file
<#ibizinclude>
../@MACRO/VIEW.vue.ftl
</#ibizinclude>
\ No newline at end of file
VIEWTYPE=APPDEMAPVIEW
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_MAP
</#ibiztemplate>
${P.getCtrlCode('CONTROL-BASE.vue').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_MAP
</#ibiztemplate>
${P.getCtrlCode('MODEL.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_MAP
</#ibiztemplate>
${P.getCtrlCode('SERVICE.ts').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_MAP
</#ibiztemplate>
${P.getCtrlCode('CONTROL.less').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_MAP
</#ibiztemplate>
${P.getCtrlCode('CONTROL.vue').code}
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册