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

Revert "Revert "Merge remote-tracking branch 'origin/dev' into dev""

This reverts commit cde5e1ad.
上级 cde5e1ad
......@@ -67,7 +67,7 @@ export default class ${srfclassname('${ctrl.codeName}')}Base extends Vue impleme
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() public context: any;
@Prop() public context!: any;
/**
* 视图参数
......@@ -75,7 +75,7 @@ export default class ${srfclassname('${ctrl.codeName}')}Base extends Vue impleme
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() public viewparams: any;
@Prop() public viewparams!: any;
/**
* 视图状态事件
......
......@@ -67,7 +67,7 @@ export default class <#if ctrl.getPSAppDataEntity()??>${srfclassname('${ctrl.get
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() public context: any;
@Prop() public context!: any;
/**
* 视图参数
......@@ -75,7 +75,7 @@ export default class <#if ctrl.getPSAppDataEntity()??>${srfclassname('${ctrl.get
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() public viewparams: any;
@Prop() public viewparams!: any;
/**
* 视图状态事件
......
......@@ -128,13 +128,13 @@ import { Environment } from '@/environments/environment';
public action:any = '';
/**
* 分页面板统一资源存储对象
* 分页面板权限标识存储对象
*
* @public
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public authResourceObject:any = {<#list ctrl.getPSControls() as tabviewpanel>'${tabviewpanel.name}':{resourcetag:<#if tabviewpanel.getEmbeddedPSAppDEView()?? && tabviewpanel.getEmbeddedPSAppDEView().getAccessKey()??>'${tabviewpanel.getEmbeddedPSAppDEView().getAccessKey()}'<#else>null</#if><#if tabviewpanel.getPSDEOPPriv?? && tabviewpanel.getPSDEOPPriv()??>,actiontarget: 'SINGLEKEY',noprivdisplaymode:2,dataaccaction:'${tabviewpanel.getPSDEOPPriv().getName()}',visabled: true,disabled: false</#if>}<#if tabviewpanel_has_next>,</#if></#list>};
public authResourceObject:any = {<#list ctrl.getPSControls() as tabviewpanel>'${tabviewpanel.name}':{resourcetag:<#if tabviewpanel.getEmbeddedPSAppDEView()?? && tabviewpanel.getEmbeddedPSAppDEView().getAccessKey()??>'${tabviewpanel.getEmbeddedPSAppDEView().getAccessKey()}'<#else>null</#if><#if tabviewpanel.getPSDEOPPriv?? && tabviewpanel.getPSDEOPPriv()??>,actiontarget: 'SINGLEKEY',noprivdisplaymode:2,dataaccaction:'${tabviewpanel.getPSDEOPPriv().getName()}'</#if>,visabled: true,disabled: false}<#if tabviewpanel_has_next>,</#if></#list>};
/**
* 被激活的分页面板
......@@ -182,8 +182,8 @@ import { Environment } from '@/environments/environment';
return mainState === false?false:true;
if(!this.authResourceObject[name])
return mainState === false?false:true;
const resouceAuth:boolean = this.appAuthService.getResourcePermission(this.authResourceObject[name]['resourcetag']);
return !resouceAuth?false:mainState?true:false;
const resourceAuth:boolean = this.appAuthService.getResourcePermission(this.authResourceObject[name]['resourcetag']);
return !resourceAuth?false:mainState?true:false;
}
/**
......@@ -267,6 +267,7 @@ import { Environment } from '@/environments/environment';
if (!$event) {
return;
}
this.isInit = [];
this.isInit[$event] = true;
if (!this.viewState) {
return;
......
......@@ -2,6 +2,9 @@
../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude>
<template>
<#if ctrl.getBatchPSDEToolbar?? && ctrl.getBatchPSDEToolbar()??>
<div>
</#if>
<div :class="['app-list',<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()>'${singleCss.getCssName()}',</#if>this.items.length > 0 ? '' : 'app-list-empty' ]">
<div v-if="items.length > 0">
<#if ctrl.render??>
......@@ -16,7 +19,33 @@
<#elseif ctrl.itemRender??>
${ctrl.itemRender.code}
<#else>
{{item.srfmajortext}}
<div class="app-list-item-content">
<div class="item-icon">
<template v-if="item.srficon">
<img :src="item.srficon" />
</template>
<template v-else>
<img src="/assets/img/noimage.png"/>
</template>
</div>
<template>
<div class="item-content-text">
<span class="item-text">{{item.srfmajortext}}</span>
<span v-if="item.srfdescription" class="item-subtext">{{ item.srfdescription }}</span>
</div>
</template>
</div>
<div v-if="item.srfdate" class="app-list-item-date">
<span class="date">{{ item.srfdate }}</span>
</div>
<div class="app-list-item-action">
<template v-for="(action,index) in Object.keys(ActionModel)">
<a :key="index" style="display: inline-block;margin: 0 12px;" @click="uiAction(item, action, $event)">
<i :class="ActionModel[action].icon" style="margin-right:2px;"></i>
<span>{{ActionModel[action].caption}}</span>
</a>
</template>
</div>
</#if>
</div>
<#elseif ctrl.isEnableGroup?? && ctrl.isEnableGroup()>
......@@ -35,7 +64,15 @@
<#elseif ctrl.itemRender??>
${ctrl.itemRender.code}
<#else>
{{item.srfmajortext}}
<div class="app-list-item-content">{{item.srfmajortext}}</div>
<div calss="app-list-item-action">
<template v-for="(action,index) in Object.keys(ActionModel)">
<a :key="index" style="display: inline-block;margin: 0 12px;" @click="uiAction(item, action, $event)">
<i :class="ActionModel[action].icon" style="margin-right:2px;"></i>
<span>{{ActionModel[action].caption}}</span>
</a>
</template>
</div>
</#if>
</div>
</div>
......@@ -52,9 +89,28 @@
</div>
<div v-else>
{{ $t('<#if langbase??>${langbase}.nodata</#if>') }}
<#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??>
<span class="quick-toolbar">
<#assign quickToolbar = ctrl.getQuickPSDEToolbar()/>
<@ibizindent blank=12>
${P.getCtrlCode(quickToolbar, 'CONTROL.html').code}
</@ibizindent>
</span>
</#if>
</div>
<el-backtop target=".content-container .app-list"></el-backtop>
</div>
<#if ctrl.getBatchPSDEToolbar?? && ctrl.getBatchPSDEToolbar()??>
<row class='list-pagination' v-if="selections.length > 0">
<span class="batch-toolbar">
<#assign batchToolbar = ctrl.getBatchPSDEToolbar()/>
<@ibizindent blank=12>
${P.getCtrlCode(batchToolbar, 'CONTROL.html').code}
</@ibizindent>
</span>
</row>
</div>
</#if>
</template>
<#assign import_block>
import CodeListService from "@/codelist/codelist-service";
......@@ -63,6 +119,14 @@ import CodeListService from "@/codelist/codelist-service";
../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl
</#ibizinclude>
/**
* 代码表服务对象
*
* @type {CodeListService}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public codeListService:CodeListService = new CodeListService({ $store: this.$store });
/**
* 获取多项数据
*
......@@ -171,6 +235,14 @@ import CodeListService from "@/codelist/codelist-service";
*/
public groupField: string = "<#if ctrl.getGroupPSDEField?? && ctrl.getGroupPSDEField()??>${ctrl.getGroupPSDEField().getCodeName()?lower_case}</#if>";
/**
* 分组属性代码表
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public groupFieldCodelist: any = {<#if ctrl.getGroupPSDEField()?? && ctrl.getGroupPSDEField().getPSCodeList?? && ctrl.getGroupPSDEField().getPSCodeList()??>type: '${ctrl.getGroupPSDEField().getPSCodeList().getCodeListType()}',tag: '${ctrl.getGroupPSDEField().getPSCodeList().getCodeName()}'</#if>};
/**
* 分组数据
*
......@@ -203,29 +275,14 @@ import CodeListService from "@/codelist/codelist-service";
</#if>
<#if ctrl.getGroupMode?? && ctrl.getGroupMode() == 'CODELIST'>
/**
* 代码表服务对象
*
* @type {CodeListService}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public codeListService:CodeListService = new CodeListService({ $store: this.$store });
/**
* 分组代码表标识
* 分组代码表
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public tag: string = "<#if ctrl.getGroupPSCodeList?? && ctrl.getGroupPSCodeList()??>${ctrl.getGroupPSCodeList().getCodeName()}</#if>";
/**
* 分组代码表类型
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public codelistType: string = "<#if ctrl.getGroupPSCodeList?? && ctrl.getGroupPSCodeList()??>${ctrl.getGroupPSCodeList().getCodeListType()}</#if>";
public groupCodelist: any = {<#if ctrl.getGroupPSCodeList?? && ctrl.getGroupPSCodeList()??>type:'${ctrl.getGroupPSCodeList().getCodeListType()}',tag:'${ctrl.getGroupPSCodeList().getCodeName()}'</#if>};
/**
* 根据分组代码表绘制分组列表
......@@ -234,19 +291,30 @@ import CodeListService from "@/codelist/codelist-service";
*/
public async drawCodelistGroup(){
let groups: Array<any> = [];
let fields: Array<any> = [];
let groupTree:Array<any> = [];
let data:Array<any> = [...this.items];
// 动态代码表
if (Object.is(this.codelistType, "DYNAMIC")) {
groups = await this.codeListService.getItems(this.tag);
// 静态代码表
} else if(Object.is(this.codelistType, "STATIC")){
groups = this.$store.getters.getCodeListItems(this.tag);
if(Object.keys(this.groupCodelist).length > 0){
let groupCodelist: any = await this.codeListService.getDataItems(this.groupCodelist);
groups = Util.deepCopy(groupCodelist);
}
if(Object.keys(this.groupFieldCodelist).length > 0){
let fieldCodelist: any = await this.codeListService.getDataItems(this.groupFieldCodelist);
fields = Util.deepCopy(fieldCodelist);
}
if(groups.length == 0){
console.warn("分组数据无效");
}
groups.forEach((group: any,i: number)=>{
let children:Array<any> = [];
data.forEach((item: any,j: number)=>{
if(Object.is(group.label,item[this.groupField])){
if(fields && fields.length > 0){
const arr:Array<any> = fields.filter((field:any)=>{return field.value == item[this.groupField]});
if(arr && arr.length>0 && Object.is(group.label,arr[0].label)) {
children.push(item);
}
}else if(Object.is(group.label,item[this.groupField])){
children.push(item);
}
});
......@@ -258,7 +326,15 @@ import CodeListService from "@/codelist/codelist-service";
});
let child:Array<any> = [];
data.forEach((item: any)=>{
let i = groups.findIndex((group: any)=>Object.is(group,item[this.groupField]));
let i: number = 0;
if(fields && fields.length > 0){
const arr:Array<any> = fields.filter((field:any)=>{return field.value == item[this.groupField]});
if(arr && arr.length>0) {
i = groups.findIndex((group: any)=>Object.is(group.label,arr[0].label));
}
}else{
i = groups.findIndex((group: any)=>Object.is(group.label,item[this.groupField]));
}
if(i < 0){
child.push(item);
}
......@@ -267,7 +343,9 @@ import CodeListService from "@/codelist/codelist-service";
group: this.$t('app.commonWords.other'),
children: child
}
if(child && child.length > 0){
groupTree.push(Tree);
}
this.groupData = [...groupTree];
}
</#if>
......@@ -278,15 +356,28 @@ import CodeListService from "@/codelist/codelist-service";
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public drawGroup(){
public async drawGroup(){
let data:Array<any> = [...this.items];
let groups:Array<any> = [];
let fields: Array<any> = [];
if(Object.keys(this.groupFieldCodelist).length > 0){
let fieldCodelist: any = await this.codeListService.getDataItems(this.groupFieldCodelist);
fields = Util.deepCopy(fieldCodelist);
}
data.forEach((item: any)=>{
if(item.hasOwnProperty(this.groupField)){
if(fields && fields.length > 0){
const arr:Array<any> = fields.filter((field:any)=>{return field.value == item[this.groupField]});
groups.push(arr[0].label);
}else{
groups.push(item[this.groupField]);
}
}
});
groups = [...new Set(groups)];
if(groups.length == 0){
console.warn("分组数据无效");
}
let groupTree:Array<any> = [];
groups.forEach((group: any,i: number)=>{
let children:Array<any> = [];
......@@ -295,6 +386,7 @@ import CodeListService from "@/codelist/codelist-service";
children.push(item);
}
});
group = group ? group : this.$t('app.commonWords.other');
const tree: any ={
group: group,
children: children
......@@ -305,6 +397,16 @@ import CodeListService from "@/codelist/codelist-service";
}
</#if>
<#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??>
<#assign quickToolbar = ctrl.getQuickPSDEToolbar()/>
${P.getCtrlCode(quickToolbar, 'CONTROL.vue').code}
</#if>
<#if ctrl.getBatchPSDEToolbar?? && ctrl.getBatchPSDEToolbar()??>
<#assign batchToolbar = ctrl.getBatchPSDEToolbar()/>
${P.getCtrlCode(batchToolbar, 'CONTROL.vue').code}
</#if>
/**
* 当前页
*
......@@ -831,6 +933,45 @@ import CodeListService from "@/codelist/codelist-service";
});
}
/**
* 操作栏模型数据
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public ActionModel:any ={
<#if ctrl.getPSAppViewUIActions?? && ctrl.getPSAppViewUIActions()??>
<#list ctrl.getPSAppViewUIActions() as viewUIAction>
<#if viewUIAction.getPSUIAction?? && viewUIAction.getPSUIAction()??>
<#assign UIAction = viewUIAction.getPSUIAction() />
"${UIAction.getUIActionTag()}":{name:"${UIAction.getUIActionTag()}",icon:"<#if UIAction.getPSSysImage()??><#assign img=UIAction.getPSSysImage() /><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if></#if>",caption:"${UIAction.getCaption()}",disabled: false, visabled: true,noprivdisplaymode:<#if UIAction.getNoPrivDisplayMode(view)??>${UIAction.getNoPrivDisplayMode(view)}</#if>,dataaccaction: "<#if UIAction.getDataAccessAction()??>${UIAction.getDataAccessAction()}</#if>", actiontarget: "${UIAction.getActionTarget()}"}<#if viewUIAction_has_next>,</#if>
</#if>
</#list>
</#if>
};
/**
* 操作列界面行为
*
* @param {*} data
* @param {*} tag
* @param {*} $event
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public uiAction(data: any, tag: any, $event: any) {
$event.stopPropagation();
<#if ctrl.getPSAppViewLogics()??>
<#list ctrl.getPSAppViewLogics() as logic>
<#if logic.getPSAppViewUIAction().getPSUIAction()??>
<#assign action = logic.getPSAppViewUIAction().getPSUIAction()>
if(Object.is('${action.getUIActionTag()}', tag)) {
this.${logic.getName()}(data, tag, $event);
}
</#if>
</#list>
</#if>
}
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude>
......
......@@ -10,19 +10,58 @@
color: #409eff;
background-color: #ecf5ff;
}
.el-collapse{
.el-collapse-item{
.el-collapse-item__wrap{
.el-collapse-item__content{
padding: 10px 0 10px 0;
}
}
}
}
.app-list-item {
line-height: 34px;
border-radius:5px;
padding: 6px;
margin: 6px;
box-shadow: 0px 0px 2px 1px rgb(209, 208, 208);
background: #f7f7fa;
padding: 12px 6px;
min-height: 24px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #f0f0f0;
.app-list-item-content {
width: 70%;
display: flex;
align-items: center;
.item-icon {
width: 40px;
height: 40px;
margin-right: 14px;
img {
width: 40px;
height: 40px;
border-radius: 50%;
}
}
.item-content-text {
display: flex;
flex-direction: column;
.item-text {
font-size: 18px;
font-weight: bold;
}
.item-subtext {
color: #8c8c8c;
}
}
}
.app-list-item-date {
position: relative;
color: #8c8c8c;
}
}
.app-list-item.isSelect {
background: #ecf5ff;
border-left: 5px solid #2d8cf0;
box-shadow: 0px 0px 3px 1px #82bff7;
border-radius: 2px;
border-color: rgb(197, 197, 197);
}
.app-list-item:hover {
background: #ecf5ff;
......@@ -41,4 +80,27 @@
display: flex;
justify-content: center;
align-items: center;
<#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??>
.quick-toolbar{
display: inline-block;
button{
background: #ebf3fb;
color: #2575ca;
border: 0;
}
}
</#if>
}
<#if ctrl.getBatchPSDEToolbar?? && ctrl.getBatchPSDEToolbar()??>
.list-pagination {
position: fixed;
background-color: #fff;
height: 50px;
bottom: 30px;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
z-index: 5;
}
</#if>
\ No newline at end of file
......@@ -4,7 +4,7 @@ ${ctrl.render.code}
<#else>
<layout class="app-wizard<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if>">
<#if ctrl.getPSDEWizard?? && ctrl.getPSDEWizard()?? && ctrl.getPSDEWizard().getPSDEWizardSteps?? && ctrl.getPSDEWizard().getPSDEWizardSteps()??>
<el-steps class="wizard-steps" :active="wizardForms.indexOf(activeForm)" finish-status="success">
<el-steps class="wizard-steps" :active="wizardForms.indexOf(activeForm)" finish-status="success" align-center>
<#list ctrl.getPSDEWizard().getPSDEWizardSteps() as step>
<el-step title="${step.getTitle()}"></el-step>
</#list>
......
<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
......@@ -21,7 +21,7 @@ ${item.render.code}
<#assign counter = uiaction.getPSAppCounter() />
<Badge type="primary" v-show="${ModelsName}.${item.name}.visabled" :count="${counter.getCodeName()?lower_case}counterservice.counterData.<#if uiaction.getCounterId()??>${uiaction.getCounterId()}</#if>">
</#if>
<i-button v-show="${ModelsName}.${item.name}.visabled" :disabled="${ModelsName}.${item.name}.disabled" class='<#if item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>' @click="${ctrl.name}_click({ tag: '${item.name}' }, $event)">
<i-button v-show="${ModelsName}.${item.name}.visabled" :disabled="${ModelsName}.${item.name}.disabled" class='<#if item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>' v-loading:i-button @click="${ctrl.name}_click({ tag: '${item.name}' }, $event)">
<#if item.isShowIcon()><i class='<#if item.getPSSysImage()??><#assign img=item.getPSSysImage()><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if></#if>'></i></#if>
<#if item.isShowCaption()><span class='caption'>{{<#if langbase??>$t('${langbase}.${item.name}.caption')<#else>'${item.getCaption()}'</#if>}}</span></#if>
</i-button>
......@@ -40,7 +40,7 @@ ${item.render.code}
<#assign counter = uiaction.getPSAppCounter() />
<Badge type="primary" v-show="${ModelsName}.${item.name}.visabled" :count="${counter.getCodeName()?lower_case}counterservice.counterData.<#if uiaction.getCounterId()??>${uiaction.getCounterId()}</#if>">
</#if>
<i-button v-show="${ModelsName}.${item.name}.visabled" :disabled="${ModelsName}.${item.name}.disabled" class='<#if item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>' @click="${ctrl.name}_click({ tag: '${item.name}' }, $event)">
<i-button v-show="${ModelsName}.${item.name}.visabled" :disabled="${ModelsName}.${item.name}.disabled" class='<#if item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>' v-loading:i-button @click="${ctrl.name}_click({ tag: '${item.name}' }, $event)">
<#if item.isShowIcon()><i class='<#if item.getPSSysImage()??><#assign img=item.getPSSysImage()><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if></#if>'></i></#if>
<#if item.isShowCaption()><span class='caption'>{{<#if langbase??>$t('${langbase}.${item.name}.caption')<#else>'${item.getCaption()}'</#if>}}</span></#if>
</i-button>
......
......@@ -2,18 +2,20 @@
${item.render.code}
<#else>
<app-rawitem
:viewparams="viewparams"
:context="context"
contentStyle="<#if item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if>"
sizeStyle="<#if item.getRawItemHeight() gt 0>height: ${item.getRawItemHeight()?c}px;</#if><#if item.getRawItemWidth() gt 0>width: ${item.getRawItemWidth()?c}px;</#if>"
contentType="<#if item.getContentType?? && item.getContentType()??>${item.getContentType()}</#if>"
<#if item.getRawContent?? && item.getRawContent()??>
rawContent="${item.getRawContent()}"
</#if>
<#if item.getHtmlContent?? && item.getHtmlContent()??>
htmlContent="${item.getHtmlContent()}"
:htmlContent='`${item.getHtmlContent()}`'
</#if>
<#if item.getPSSysImage?? && item.getPSSysImage()??>
<#assign img=item.getPSSysImage()>
<#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>
imageClass="${img.getCssClass()}"</#if></#if>>
<#if item.getContentType?? && item.getContentType() == 'RAW'>
${item.getRawContent()}
</#if>
</app-rawitem>
</#if>
\ No newline at end of file
......@@ -581,9 +581,17 @@ ${P.getLogicCode(singleFuncs,"LOGIC.vue").code}
item.items.map((singleItem:any) =>{
if(!singleItem.hidden){
item.hidden = false;
}
}else{
if(singleItem.items && singleItem.items.length >0){
this.computeParentMenus(singleItem.items);
singleItem.items.map((grandsonItem:any) =>{
if(!grandsonItem.hidden){
item.hidden = false;
}
})
}
}
if(item.items && item.items.length >0){
this.computeParentMenus(item.items);
}
})
}
......
......@@ -298,7 +298,7 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
*/
public createDefault(){
<#list ctrl.getAllPSDEFormDetails() as formdetail><#t>
<#if formdetail.getCreateDV?? && formdetail.getCreateDV()?? && formdetail.getCreateDV() !=""><#t>
<#if (formdetail.getCreateDV?? || formdetail.getCreateDVT??) && (formdetail.getCreateDV()?? || formdetail.getCreateDVT()??) && (formdetail.getCreateDV() !="" || formdetail.getCreateDVT() != "")><#t>
if (this.data.hasOwnProperty('${formdetail.getCodeName()?lower_case}')) {
<#if !(formdetail.getCreateDVT() == '')><#t>
<#-- 网页请求 -->
......
......@@ -6,8 +6,8 @@
${ctrl.render.code}
<#else>
<div class="app-data-chart<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>">
<div v-if="isNoData" class="chart-no-data"><i class="el-icon-data-analysis"></i>{{$t('<#if langbase??>${langbase}.nodata</#if>')}}</div>
<div v-else 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>
<div v-show="isNoData" class="chart-no-data"><i class="el-icon-data-analysis"></i>{{$t('<#if langbase??>${langbase}.nodata</#if>')}}</div>
<div v-show="!isNoData" class="app-charts" :id="chartId" style="<#if ctrl.getWidth() gt 0>width: ${ctrl.getWidth()?c}px;</#if>height: <#if ctrl.getHeight() gt 0>${ctrl.getHeight()?c}px<#else>100%</#if>;padding: 6px 0;"></div>
</div>
</#if>
</template>
......@@ -300,7 +300,10 @@ import { ChartDataSetField,ChartLineSeries,ChartFunnelSeries,ChartPieSeries,Char
const parentdata: any = {};
this.$emit('beforeload', parentdata);
Object.assign(arg, parentdata);
Object.assign(arg,{viewparams:this.viewparams,page:0,size:1000});
let tempViewParams:any = parentdata.viewparams?parentdata.viewparams:{};
Object.assign(tempViewParams,JSON.parse(JSON.stringify(this.viewparams)));
Object.assign(arg,{viewparams:tempViewParams});
Object.assign(arg,{page:0,size:1000});
<#if ctrl.getPSDEDataSet()??>
<#assign appDataSet = ctrl.getPSDEDataSet() />
<#if appDataSet.getMajorSortDir()?? && appDataSet.getMajorSortPSDEField()??>
......
......@@ -6,8 +6,8 @@
${ctrl.render.code}
<#else>
<div class="app-data-chart<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>">
<div v-if="isNoData" class="chart-no-data"><i class="el-icon-data-analysis"></i>{{$t('<#if langbase??>${langbase}.nodata</#if>')}}</div>
<div v-else 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>
<div v-show="isNoData" class="chart-no-data"><i class="el-icon-data-analysis"></i>{{$t('<#if langbase??>${langbase}.nodata</#if>')}}</div>
<div v-show="!isNoData" class="app-charts" :id="chartId" style="<#if ctrl.getWidth() gt 0>width: ${ctrl.getWidth()?c}px;</#if>height: <#if ctrl.getHeight() gt 0>${ctrl.getHeight()?c}px<#else>100%</#if>;padding: 6px 0;"></div>
</div>
</#if>
</template>
......@@ -300,7 +300,10 @@ import { ChartDataSetField,ChartLineSeries,ChartFunnelSeries,ChartPieSeries,Char
const parentdata: any = {};
this.$emit('beforeload', parentdata);
Object.assign(arg, parentdata);
Object.assign(arg,{viewparams:this.viewparams,page:0,size:1000});
let tempViewParams:any = parentdata.viewparams?parentdata.viewparams:{};
Object.assign(tempViewParams,JSON.parse(JSON.stringify(this.viewparams)));
Object.assign(arg,{viewparams:tempViewParams});
Object.assign(arg,{page:0,size:1000});
<#if ctrl.getPSDEDataSet()??>
<#assign appDataSet = ctrl.getPSDEDataSet() />
<#if appDataSet.getMajorSortDir()?? && appDataSet.getMajorSortPSDEField()??>
......
......@@ -15,23 +15,13 @@
</#list>
</#if>
<#if hasSortBar>
<div class="bar-container">
<row class="page-sort-bar" :gutter="10" type="flex" justify="start" style="margin:0px;" >
<#if ctrl.getPSDEDataViewDataItems?? && ctrl.getPSDEDataViewDataItems()??>
<#list ctrl.getPSDEDataViewDataItems() as dataItem>
<#if dataItem.getPSAppDEField?? && dataItem.getPSAppDEField()?? && !dataItem.getPSAppDEField().isKeyField()>
<i-col :class="getsortClass('${dataItem.getPSDEField().getCodeName()?lower_case}')" @click.native="sortClick('${dataItem.getPSDEField().getCodeName()?lower_case}')">
<span class="sort-field-text">{{$t('entities.${appde.getCodeName()?lower_case}.fields.${dataItem.getPSDEField().getCodeName()?lower_case}')}}</span>
<span class="caret-wrapper">
<Icon type="md-arrow-dropup" />
<Icon type="md-arrow-dropdown" />
</span>
</i-col>
</#if>
</#list>
</#if>
</row>
</div>
<app-sort-bar
:sortModel="sortModel"
:sortField="sortField"
:sortDir="sortDir"
entityName="${appde.getCodeName()?lower_case}"
@clickSort="(val) => {sortClick(val);}">
</app-sort-bar>
</#if>
<row class="data-view-container" v-if="items.length > 0" :gutter="20" type="flex" justify="start" style="margin:0px;">
<#if ctrl.isEnableGroup?? && !ctrl.isEnableGroup()>
......@@ -46,6 +36,7 @@
<#elseif ctrl.itemRender??>
${ctrl.itemRender.code}
<#else>
<div class="data-view-item">
<img v-if="item.srficonpath" :src="item.srficonpath" class="single-card-img" />
<img v-else src="/assets/img/noimage.png" class="single-card-img" />
<div class="single-card-default">
......@@ -53,6 +44,15 @@
{{item.srfmajortext}}
</Tooltip>
</div>
</div>
<div class="data-view-item-action">
<template v-for="(action,index) in Object.keys(ActionModel)">
<button type="info" :key="index" @click="uiAction(item, action, $event)">
<i :class="ActionModel[action].icon" style="margin-right:2px;"></i>
<span>{{ActionModel[action].caption}}</span>
</button>
</template>
</div>
</#if>
</el-card>
</i-col>
......@@ -75,6 +75,7 @@
<#elseif ctrl.itemRender??>
${ctrl.itemRender.code}
<#else>
<div class="data-view-item">
<img v-if="item.srficonpath" :src="item.srficonpath" class="single-card-img" />
<img v-else src="/assets/img/noimage.png" class="single-card-img" />
<div class="single-card-default">
......@@ -82,20 +83,54 @@
{{item.srfmajortext}}
</Tooltip>
</div>
</div>
<div class="data-view-item-action">
<template v-for="(action,index) in Object.keys(ActionModel)">
<button type="info" :key="index" @click="uiAction(item, action, $event)">
<i :class="ActionModel[action].icon" style="margin-right:2px;"></i>
<span>{{ActionModel[action].caption}}</span>
</button>
</template>
</div>
</#if>
</el-card>
</i-col>
</a>
</div>
<div v-else style="text-align: center;">
<div v-else class="item-nodata">
{{ $t('<#if langbase??>${langbase}.nodata</#if>') }}
</div>
</el-collapse-item>
</el-collapse>
</#if>
</row>
<div v-else class="app-data-empty">{{ $t('<#if langbase??>${langbase}.nodata</#if>') }}</div>
<div v-else class="app-data-empty">
{{ $t('<#if langbase??>${langbase}.nodata</#if>') }}
<#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??>
<span class="quick-toolbar">
<#assign quickToolbar = ctrl.getQuickPSDEToolbar()/>
<@ibizindent blank=12>
${P.getCtrlCode(quickToolbar, 'CONTROL.html').code}
</@ibizindent>
</span>
</#if>
</div>
<el-backtop target=".content-container .app-data-view"></el-backtop>
<#if ctrl.getBatchPSDEToolbar?? && ctrl.getBatchPSDEToolbar()??>
<div class="drag-filed" @mousedown="down">
<row class='dataview-pagination'>
<div v-show="flag" class="batch-toolbar">
<#assign batchToolbar = ctrl.getBatchPSDEToolbar()/>
<@ibizindent blank=12>
${P.getCtrlCode(batchToolbar, 'CONTROL.html').code}
</@ibizindent>
</div>
<div class="dataview-pagination-icon">
<Icon type="md-code-working" @click="onClick"/>
</div>
</row>
</div>
</#if>
</div>
</#if>
</template>
......@@ -105,6 +140,15 @@ import CodeListService from "@/codelist/codelist-service";
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl
</#ibizinclude>
/**
* 代码表服务对象
*
* @type {CodeListService}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public codeListService:CodeListService = new CodeListService({ $store: this.$store });
/**
* 获取多项数据
*
......@@ -213,6 +257,14 @@ import CodeListService from "@/codelist/codelist-service";
*/
public groupField: string = "<#if ctrl.getGroupPSDEField?? && ctrl.getGroupPSDEField()??>${ctrl.getGroupPSDEField().getCodeName()?lower_case}</#if>";
/**
* 分组属性代码表
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public groupFieldCodelist: any = {<#if ctrl.getGroupPSDEField()?? && ctrl.getGroupPSDEField().getPSCodeList?? && ctrl.getGroupPSDEField().getPSCodeList()??>type: '${ctrl.getGroupPSDEField().getPSCodeList().getCodeListType()}',tag: '${ctrl.getGroupPSDEField().getPSCodeList().getCodeName()}'</#if>};
/**
* 分组数据
*
......@@ -243,31 +295,55 @@ import CodeListService from "@/codelist/codelist-service";
}
}
</#if>
/**
* 拖拽元素对象
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public dragEle:any;
<#if ctrl.getGroupMode?? && ctrl.getGroupMode() == 'CODELIST'>
/**
* 代码表服务对象
* 拖拽后位置left
*
* @type {CodeListService}
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public codeListService:CodeListService = new CodeListService({ $store: this.$store });
public leftP:any;
/**
* 分组代码表标识
* 拖拽后位置top
*
* @type {string}
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public topP:any;
/**
* 拖拽标识
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public dragflag:boolean=false;
/**
* 为拖拽不是点击
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public tag: string = "<#if ctrl.getGroupPSCodeList?? && ctrl.getGroupPSCodeList()??>${ctrl.getGroupPSCodeList().getCodeName()}</#if>";
public moveflag:boolean = false;
<#if ctrl.getGroupMode?? && ctrl.getGroupMode() == 'CODELIST'>
/**
* 分组代码表类型
* 分组代码表
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public codelistType: string = "<#if ctrl.getGroupPSCodeList?? && ctrl.getGroupPSCodeList()??>${ctrl.getGroupPSCodeList().getCodeListType()}</#if>";
public groupCodelist: any = {<#if ctrl.getGroupPSCodeList?? && ctrl.getGroupPSCodeList()??>type:'${ctrl.getGroupPSCodeList().getCodeListType()}',tag:'${ctrl.getGroupPSCodeList().getCodeName()}'</#if>};
/**
* 根据分组代码表绘制分组列表
......@@ -276,19 +352,30 @@ import CodeListService from "@/codelist/codelist-service";
*/
public async drawCodelistGroup(){
let groups: Array<any> = [];
let fields: Array<any> = [];
let groupTree:Array<any> = [];
let data:Array<any> = [...this.items];
// 动态代码表
if (Object.is(this.codelistType, "DYNAMIC")) {
groups = await this.codeListService.getItems(this.tag);
// 静态代码表
} else if(Object.is(this.codelistType, "STATIC")){
groups = this.$store.getters.getCodeListItems(this.tag);
if(Object.keys(this.groupCodelist).length > 0){
let groupCodelist: any = await this.codeListService.getDataItems(this.groupCodelist);
groups = Util.deepCopy(groupCodelist);
}
if(Object.keys(this.groupFieldCodelist).length > 0){
let fieldCodelist: any = await this.codeListService.getDataItems(this.groupFieldCodelist);
fields = Util.deepCopy(fieldCodelist);
}
if(groups.length == 0){
console.warn("分组数据无效");
}
groups.forEach((group: any,i: number)=>{
let children:Array<any> = [];
data.forEach((item: any,j: number)=>{
if(Object.is(group.label,item[this.groupField])){
if(fields && fields.length > 0){
const arr:Array<any> = fields.filter((field:any)=>{return field.value == item[this.groupField]});
if(arr && arr.length>0 && Object.is(group.label,arr[0].label)) {
children.push(item);
}
}else if(Object.is(group.label,item[this.groupField])){
children.push(item);
}
});
......@@ -300,7 +387,15 @@ import CodeListService from "@/codelist/codelist-service";
});
let child:Array<any> = [];
data.forEach((item: any)=>{
let i = groups.findIndex((group: any)=>Object.is(group,item[this.groupField]));
let i: number = 0;
if(fields && fields.length > 0){
const arr:Array<any> = fields.filter((field:any)=>{return field.value == item[this.groupField]});
if(arr && arr.length>0) {
i = groups.findIndex((group: any)=>Object.is(group.label,arr[0].label));
}
}else{
i = groups.findIndex((group: any)=>Object.is(group.label,item[this.groupField]));
}
if(i < 0){
child.push(item);
}
......@@ -309,7 +404,9 @@ import CodeListService from "@/codelist/codelist-service";
group: this.$t('app.commonWords.other'),
children: child
}
if(child && child.length > 0){
groupTree.push(Tree);
}
this.groupData = [...groupTree];
}
</#if>
......@@ -320,15 +417,28 @@ import CodeListService from "@/codelist/codelist-service";
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public drawGroup(){
public async drawGroup(){
let data:Array<any> = [...this.items];
let groups:Array<any> = [];
let fields: Array<any> = [];
if(Object.keys(this.groupFieldCodelist).length > 0){
let fieldCodelist: any = await this.codeListService.getDataItems(this.groupFieldCodelist);
fields = Util.deepCopy(fieldCodelist);
}
data.forEach((item: any)=>{
if(item.hasOwnProperty(this.groupField)){
if(fields && fields.length > 0){
const arr:Array<any> = fields.filter((field:any)=>{return field.value == item[this.groupField]});
groups.push(arr[0].label);
}else{
groups.push(item[this.groupField]);
}
}
});
groups = [...new Set(groups)];
if(groups.length == 0){
console.warn("分组数据无效");
}
let groupTree:Array<any> = [];
groups.forEach((group: any,i: number)=>{
let children:Array<any> = [];
......@@ -337,6 +447,7 @@ import CodeListService from "@/codelist/codelist-service";
children.push(item);
}
});
group = group ? group : this.$t('app.commonWords.other');
const tree: any ={
group: group,
children: children
......@@ -354,6 +465,16 @@ import CodeListService from "@/codelist/codelist-service";
*/
@Prop() public isSingleSelect?: boolean;
<#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??>
<#assign quickToolbar = ctrl.getQuickPSDEToolbar()/>
${P.getCtrlCode(quickToolbar, 'CONTROL.vue').code}
</#if>
<#if ctrl.getBatchPSDEToolbar?? && ctrl.getBatchPSDEToolbar()??>
<#assign batchToolbar = ctrl.getBatchPSDEToolbar()/>
${P.getCtrlCode(batchToolbar, 'CONTROL.vue').code}
</#if>
/**
* 数据
*
......@@ -362,6 +483,23 @@ import CodeListService from "@/codelist/codelist-service";
*/
public items: any[] = [];
/**
* 操作栏模型数据
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public ActionModel:any ={
<#if ctrl.getPSAppViewUIActions?? && ctrl.getPSAppViewUIActions()??>
<#list ctrl.getPSAppViewUIActions() as viewUIAction>
<#if viewUIAction.getPSUIAction?? && viewUIAction.getPSUIAction()??>
<#assign UIAction = viewUIAction.getPSUIAction() />
"${UIAction.getUIActionTag()}":{name:"${UIAction.getUIActionTag()}",icon:"<#if UIAction.getPSSysImage()??><#assign img=UIAction.getPSSysImage() /><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if></#if>",caption:"${UIAction.getCaption()}",disabled: false, visabled: true,noprivdisplaymode:<#if UIAction.getNoPrivDisplayMode(view)??>${UIAction.getNoPrivDisplayMode(view)}</#if>,dataaccaction: "<#if UIAction.getDataAccessAction()??>${UIAction.getDataAccessAction()}</#if>", actiontarget: "${UIAction.getActionTarget()}"}<#if viewUIAction_has_next>,</#if>
</#if>
</#list>
</#if>
};
/**
* 是否支持分页
*
......@@ -425,6 +563,26 @@ import CodeListService from "@/codelist/codelist-service";
*/
public sortField: string = '<#if ctrl.getMinorSortPSDEF()??>${ctrl.getMinorSortPSDEF().getCodeName()?lower_case}</#if>';
<#if hasSortBar>
<#if ctrl.getPSDEDataViewDataItems?? && ctrl.getPSDEDataViewDataItems()??>
/**
* 排序模型数据集
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public sortModel: any[] = [
<#list ctrl.getPSDEDataViewDataItems() as dataItem>
<#if dataItem.getPSAppDEField?? && dataItem.getPSAppDEField()?? && !dataItem.getPSAppDEField().isKeyField()>
<#if !P.exists("sort", dataItem.getPSDEField().getCodeName(), "") >
'${dataItem.getPSDEField().getCodeName()?lower_case}'<#if dataItem_has_next>,</#if>
</#if>
</#if>
</#list>
]
</#if>
</#if>
/**
* 应用状态事件
*
......@@ -434,6 +592,27 @@ import CodeListService from "@/codelist/codelist-service";
*/
public appStateEvent: Subscription | undefined;
/**
* 默认隐藏批量操作工具栏
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public flag: boolean = false;
/**
* 更改批量操作工具栏显示状态
*
* @param $event
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public onClick($event: any){
if(!this.moveflag){
this.flag = !this.flag;
}
this.moveflag = false;
}
/**
* 排序点击事件
* @param {string} field 属性名
......@@ -485,15 +664,19 @@ import CodeListService from "@/codelist/codelist-service";
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterMounted(){
<#if ctrl.isEnablePagingBar()>
this.$el.addEventListener('scroll', ()=> {
let el: any = this.$el.getElementsByClassName('dataview-pagination')[0];
el.style.top = 40 + this.$el.scrollTop + 'px';
<#if ctrl.isEnablePagingBar()>
if( this.$el.scrollTop + this.$el.clientHeight >= this.$el.scrollHeight) {
this.loadMore();
}
})
</#if>
})
}
/**
* Vue声明周期,组件创建完毕
*
......@@ -501,6 +684,9 @@ import CodeListService from "@/codelist/codelist-service";
*/
public created() {
this.afterCreated();
this.$nextTick(()=>{
this.mouseEvent();
})
}
/**
......@@ -534,6 +720,37 @@ import CodeListService from "@/codelist/codelist-service";
}
}
/**
* 鼠标移动+放下
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public mouseEvent(){
this.dragEle = document.getElementsByClassName('drag-filed')[0];
document.onmousemove=(e:any)=>{
if(this.dragflag){
this.dragEle.style.left = (e.clientX - this.leftP) + 'px';
this.dragEle.style.top = (e.clientY - this.topP) + 'px';
this.moveflag = true;
}
}
document.onmouseup=(e:any)=>{
this.dragflag = false;
}
}
/**
* mousedown事件
*
* @param $event
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public down(e:any){
this.leftP = e.clientX - this.dragEle.offsetLeft;
this.topP = e.clientY - this.dragEle.offsetTop;
this.dragflag = true;
}
/**
* 加载更多
*
......@@ -875,6 +1092,29 @@ import CodeListService from "@/codelist/codelist-service";
});
this.$emit('selectionchange', this.selections);
}
/**
* 操作列界面行为
*
* @param {*} data
* @param {*} tag
* @param {*} $event
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public uiAction(data: any, tag: any, $event: any) {
$event.stopPropagation();
<#if ctrl.getPSAppViewLogics()??>
<#list ctrl.getPSAppViewLogics() as logic>
<#if logic.getPSAppViewUIAction().getPSUIAction()??>
<#assign action = logic.getPSAppViewUIAction().getPSUIAction()>
if(Object.is('${action.getUIActionTag()}', tag)) {
this.${logic.getName()}(data, tag, $event);
}
</#if>
</#list>
</#if>
}
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude>
......
......@@ -10,6 +10,7 @@
height: 100%;
overflow-y: auto;
overflow-x: hidden;
position: relative;
// 排序栏样式
.bar-container{
padding: 6px 8px;
......@@ -75,7 +76,13 @@
.el-collapse{
width: 100%;
.el-collapse-item__content{
padding: 10px 0px 0px 0px;
display: flex;
.item-nodata {
padding-bottom: 10px;
width: 100%;
text-align: center;
}
}
}
.el-collapse-item__header.is-active{
......@@ -98,6 +105,7 @@
width: 100%;
cursor: pointer;
border: 2px solid transparent;
.data-view-item{
.single-card-default {
.ivu-tooltip{
.ivu-tooltip-rel{
......@@ -117,6 +125,17 @@
height: calc(100% - 32px);
}
}
.data-view-item-action{
button{
margin: 0 3px;
cursor: pointer;
padding:3px;
}
button:hover{
color: #409eff;
}
}
}
.isselected{
border: 2px solid #82bff7;
box-shadow: 5px 5px 12px 0 #82bff7;
......@@ -149,6 +168,38 @@
.el-backtop {
position: absolute;
}
<#if ctrl.getBatchPSDEToolbar?? && ctrl.getBatchPSDEToolbar()??>
.drag-filed{
position: absolute;
height: 42px;
width: 100%;
top: 40px;
display: flex;
justify-content: flex-end;
align-items: center;
text-align: center;
font-size: 20px;
z-index: 5;
.dataview-pagination-icon{
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
border:1px solid #dcdee2;
border-radius: 50%;
background-color: #FFF;
margin: 3px;
position: absolute;
right: 0;
}
.dataview-pagination-icon:hover{
background-color: #409eff;
color: #fff;
}
}
</#if>
}
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
......
......@@ -9,22 +9,6 @@
${ctrl.render.code}
<#else>
<div :class='calendarClass<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>'>
<#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??>
<span class="quick-toolbar">
<#assign quickToolbar = ctrl.getQuickPSDEToolbar()/>
<@ibizindent blank=12>
${P.getCtrlCode(quickToolbar, 'CONTROL.html').code}
</@ibizindent>
</span>
</#if>
<#if ctrl.getBatchPSDEToolbar?? && ctrl.getBatchPSDEToolbar()??>
<span v-if="selections.length > 0" class="batch-toolbar">
<#assign batchToolbar = ctrl.getBatchPSDEToolbar()/>
<@ibizindent blank=12>
${P.getCtrlCode(batchToolbar, 'CONTROL.html').code}
</@ibizindent>
</span>
</#if>
<context-menu-container>
<#if ctrl.getCalendarStyle?? && ctrl.getCalendarStyle() == 'TIMELINE'>
<template v-if="events.length >0">
......@@ -60,9 +44,17 @@ ${ctrl.render.code}
</template>
<template v-else>
<span class="app-data-empty">{{ $t('<#if langbase??>${langbase}.nodata</#if>') }}</span>
<#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??>
<span class="quick-toolbar">
<#assign quickToolbar = ctrl.getQuickPSDEToolbar()/>
<@ibizindent blank=12>
${P.getCtrlCode(quickToolbar, 'CONTROL.html').code}
</@ibizindent>
</span>
</#if>
</template>
<#else>
<template v-if="events.length >0">
<template>
<div class="event-legends">
<#if ctrl.getPSSysCalendarItems()??>
<#list ctrl.getPSSysCalendarItems() as calendarItem>
......@@ -96,11 +88,16 @@ ${ctrl.render.code}
<el-date-picker style="width: 200px;" v-model="selectedGotoDate" type="date"></el-date-picker>
</modal>
</template>
<template v-else>
<span class="app-data-empty">{{ $t('<#if langbase??>${langbase}.nodata</#if>') }}</span>
</template>
</#if>
</context-menu-container>
<#if ctrl.getBatchPSDEToolbar?? && ctrl.getBatchPSDEToolbar()??>
<span v-if="selections.length > 0" class="batch-toolbar">
<#assign batchToolbar = ctrl.getBatchPSDEToolbar()/>
<@ibizindent blank=12>
${P.getCtrlCode(batchToolbar, 'CONTROL.html').code}
</@ibizindent>
</span>
</#if>
</div>
</#if>
</template>
......@@ -454,10 +451,12 @@ FullCalendar,
if(fetchInfo && fetchInfo.query){
Object.assign(arg,{query : fetchInfo.query});
}
Object.assign(arg,{viewparams:this.viewparams});
const parentdata: any = {};
this.$emit('beforeload', parentdata);
Object.assign(arg, parentdata);
let tempViewParams: any = parentdata.viewparams ? parentdata.viewparams : {};
Object.assign(tempViewParams, JSON.parse(JSON.stringify(this.viewparams)));
Object.assign(arg, { viewparams: tempViewParams });
// 处理events数据
let _this = this;
let handleEvents = ()=>{
......@@ -604,6 +603,7 @@ FullCalendar,
let _this = this;
let view: any = {};
let _context: any = Object.assign({},this.context);
let _viewparams:any = Object.assign({start:event.start,end:event.end},this.viewparams);
switch(event.itemType) {
<#if ctrl.getPSSysCalendarItems()??>
<#list ctrl.getPSSysCalendarItems() as calendarItem>
......@@ -627,16 +627,16 @@ FullCalendar,
if(!view.viewname){
return;
} else if (Object.is(view.placement, 'INDEXVIEWTAB') || Object.is(view.placement, '')) {
const routePath = this.$viewTool.buildUpRoutePath(this.$route, this.context, view.deResParameters, view.parameters, [JSON.parse(JSON.stringify(_context))] , JSON.parse(JSON.stringify(this.viewparams)));
const routePath = this.$viewTool.buildUpRoutePath(this.$route, this.context, view.deResParameters, view.parameters, [JSON.parse(JSON.stringify(_context))] , _viewparams);
this.$router.push(routePath);
} else {
let container: Subject<any> = new Subject();
if (Object.is(view.placement, 'POPOVER')) {
container = this.$apppopover.openPop(isOriginData ? $event2 : $event.jsEvent, view,JSON.parse(JSON.stringify(_context)), JSON.parse(JSON.stringify(this.viewparams)));
container = this.$apppopover.openPop(isOriginData ? $event2 : $event.jsEvent, view,JSON.parse(JSON.stringify(_context)), _viewparams);
} else if (Object.is(view.placement, 'POPUPMODAL')) {
container = this.$appmodal.openModal(view, JSON.parse(JSON.stringify(_context)), JSON.parse(JSON.stringify(this.viewparams)));
container = this.$appmodal.openModal(view, JSON.parse(JSON.stringify(_context)), _viewparams);
} else if (view.placement.startsWith('DRAWER')) {
container = this.$appdrawer.openDrawer(view, JSON.parse(JSON.stringify(_context)), JSON.parse(JSON.stringify(this.viewparams)));
container = this.$appdrawer.openDrawer(view, JSON.parse(JSON.stringify(_context)), _viewparams);
}
container.subscribe((result: any) => {
if (!result || !Object.is(result.ret, 'OK')) {
......
......@@ -9,9 +9,19 @@
.calendar{
height:100%;
overflow: auto;
.context-menu-container {
height: calc(100% - 70px);
}
.el-timeline{
padding-left: 2px;
}
.app-data-empty{
margin: 0 auto;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
}
.event-legends{
width: 100%;
text-align: center;
......@@ -91,11 +101,3 @@
}
}
}
\ No newline at end of file
.calendarClass{
.app-data-empty{
margin: 0 auto;
display: flex;
align-items: center;
justify-content: center;
}
}
\ No newline at end of file
......@@ -285,7 +285,23 @@
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public created() {
this.load();
this.afterCreated();
}
/**
* 执行created后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterCreated() {
this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
if (!Object.is(tag, this.name)) {
return;
}
if (Object.is('load', action)) {
this.load(data);
}
});
}
/**
......@@ -334,7 +350,7 @@
* 打开编辑数据
*
* @returns
* @memberof TreeTableBase
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public opendata(args: any) {
if(this.selections.length === 0) {
......@@ -355,6 +371,27 @@
</#if>
}
/**
* vue 生命周期
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public destroyed() {
this.afterDestroy();
}
/**
* 执行destroyed后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterDestroy() {
if (this.viewStateEvent) {
this.viewStateEvent.unsubscribe();
}
}
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude>
......
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude>
<template>
<#if ctrl.render??>
${ctrl.render.code}
......@@ -24,6 +27,7 @@
@check="onCheck"
@current-change="selectionChange"
:filter-node-method="filterNode"
:empty-text="$t('<#if langbase??>${langbase}.nodata</#if>')"
>
<template slot-scope="{ node, data }">
<context-menu :ref='data.id' :isBlocked="true" :contextMenuStyle="{width: '100%'}" :data="node" :renderContent="renderContextMenu" @showContext="showContext(data,$event)">
......@@ -141,7 +145,7 @@ import UIService from '@/uiservice/ui-service';
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop() public selectedData?: string;
@Prop() public selectedData!: string;
/**
* 选中值变化
......@@ -270,7 +274,7 @@ import UIService from '@/uiservice/ui-service';
<#if childCtrl.getControlType() == "CONTEXTMENU">
<#if childCtrl.getPSDEToolbarItems()??>
<#list childCtrl.getPSDEToolbarItems() as item>
${childCtrl.getOwner().getNodeType()}_${item.name}: {name:'${item.name}',nodeOwner:'${childCtrl.getOwner().getNodeType()}',<#if item.getPSUIAction()??><#assign uiaction=item.getPSUIAction()>type: '${uiaction.getUIActionType()}', tag: '${uiaction.getUIActionTag()}'<#if (uiaction.getActionTarget()!="")>, actiontarget: '${uiaction.getActionTarget()}'</#if><#if uiaction.getNoPrivDisplayMode(view)??>, noprivdisplaymode:${uiaction.getNoPrivDisplayMode(view)}</#if><#if uiaction.getDataAccessAction()??>, dataaccaction:'${uiaction.getDataAccessAction()}'</#if>, visabled: true, disabled: false</#if>},
${childCtrl.getOwner().getNodeType()}_${item.name}: {name:'${item.name}',nodeOwner:'${childCtrl.getOwner().getNodeType()}',<#if item.getPSUIAction?? && item.getPSUIAction()??><#assign uiaction=item.getPSUIAction()>type: '${uiaction.getUIActionType()}', tag: '${uiaction.getUIActionTag()}'<#if (uiaction.getActionTarget()!="")>, actiontarget: '${uiaction.getActionTarget()}'</#if><#if uiaction.getNoPrivDisplayMode(view)??>, noprivdisplaymode:${uiaction.getNoPrivDisplayMode(view)}</#if><#if uiaction.getDataAccessAction()??>, dataaccaction:'${uiaction.getDataAccessAction()}'</#if>, visabled: true, disabled: false</#if>},
</#list>
</#if>
</#if>
......
......@@ -409,7 +409,7 @@
public onDrViewDatasChange($event: any): void {
<#if ctrl.getPSDETree()??>
<#assign tree = ctrl.getPSDETree()/>
this.viewState.next({ tag: '${tree.name}', action: 'refresh_current' });
this.viewState.next({ tag: '${tree.name}', action: 'refresh_parent' });
</#if>
}
......
......@@ -16,12 +16,12 @@
<#if ctrl.render??>
${ctrl.render.code}
<#else>
<layout class="app-wizard<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if>">
<layout class="app-state-wizard<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if>">
<#if ctrl.getPSDEWizard?? && ctrl.getPSDEWizard()?? && ctrl.getPSDEWizard().getPSDEWizardSteps?? && ctrl.getPSDEWizard().getPSDEWizardSteps()??>
<div class="view-steps">
<div class="background-box"></div>
<div class="steps_icon" @click="handleClick('PRE')"><i class="el-icon-arrow-left"></i></div>
<el-steps class="wizard-steps" :active="(wizardForms.indexOf(activeForm) + 1)" finish-status="success">
<el-steps class="wizard-steps" :active="(wizardForms.indexOf(activeForm) + 1)" finish-status="success" align-center>
<#list ctrl.getPSDEWizard().getPSDEWizardSteps() as step>
<el-step :class="{'app-active-step':activeForm==='<@getStepForm ctrlmodel=ctrl step=step />'?true:false}">
<template v-slot:title>
......@@ -37,16 +37,16 @@
<#if ctrl.getPSDEEditForms()??>
<#list ctrl.getPSDEEditForms() as form>
<#assign handler = form.getPSAjaxControlHandler() />
<el-popover v-model="stepVisiable['${form.getName()}']" ref="${form.getName()}_popover" popper-class="app-wizard-popover-container" placement="bottom-<#if form_has_next>start<#else>end</#if>" trigger="click">
<div class="app-wizard-container">
<div class="app-wizard-header">
<div class="app-wizard-header-extra">
<el-popover v-model="stepVisiable['${form.getName()}']" ref="${form.getName()}_popover" popper-class="app-state-wizard-popover-container" placement="bottom-<#if form_has_next>start<#else>end</#if>" trigger="click">
<div class="app-state-wizard-container">
<div class="app-state-wizard-header">
<div class="app-state-wizard-header-extra">
<Icon type="md-open" size="18" @click="handleOPen('${form.getName()}')"/>
<Icon type="md-close" size="18" @click="handleClose('${form.getName()}')"/>
</div>
</div>
<div class="popover-title">${form.getLogicName()}</div>
<div class="app-wizard-content">
<div class="app-state-wizard-content">
<view_${form.getName()}
:key="'${form.name}'"
:viewState='wizardState'
......@@ -64,14 +64,14 @@
ref='${form.name}'>
</view_${form.getName()}>
</div>
<div class="app-wizard-footer">
<div class="app-state-wizard-footer">
<i-button v-if="isVisiable('${form.name}','PREV')" @click="onClickPrev('${form.name}')" ><Icon type="ios-arrow-back"></Icon></i-button>
<i-button v-if="isVisiable('${form.name}','NEXT')" @click="onClickNext('${form.name}')" type="primary" long>{{$t('app.wizardPanel.next')}}</i-button>
<i-button v-if="isVisiable('${form.name}','FINISH')" @click="onClickFinish('${form.name}')" type="primary" long>{{$t('app.wizardPanel.complete')}}</i-button>
</div>
</div>
</el-popover>
<drawer class="app-wizard-drawer" :closable="false" :value="drawerOpenStatus.isOpen && drawerOpenStatus.formName == '${form.name}'"
<drawer class="app-state-wizard-drawer" :closable="false" :value="drawerOpenStatus.isOpen && drawerOpenStatus.formName == '${form.name}'"
:width="600" title="${form.getLogicName()}" @on-visible-change="onVisibleChange($event)">
<view_${form.getName()}
:key="'${form.name}'"
......
.app-wizard {
.app-state-wizard {
background: #fff;
.view-steps{
display: flex;
......@@ -72,30 +72,30 @@
border-top: 2px solid rgb(225, 225, 225);
}
}
.app-wizard-popover-container{
.app-wizard-container{
.app-state-wizard-popover-container{
.app-state-wizard-container{
width: 100%;
.popover-title{
position: absolute;
top: 14px;
left: 13px;
}
.app-wizard-header{
.app-state-wizard-header{
width: 100%;
height: 30px;
line-height: 22px;
padding: 2px;
border-bottom: 1px solid #ccc;
margin-bottom: 10px;
.app-wizard-header-extra{
.app-state-wizard-header-extra{
float: right;
}
}
.app-wizard-content{
.app-state-wizard-content{
width: 100%;
padding: 4px 0px;
}
.app-wizard-footer{
.app-state-wizard-footer{
display: flex;
}
}
......@@ -103,7 +103,7 @@
.el-popper[x-placement^=bottom] {
margin-top: 0px;
}
.app-wizard-drawer{
.app-state-wizard-drawer{
.app-form {
height: calc(100% - 51px);
}
......
......@@ -362,8 +362,16 @@ GanttElastic,
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public created() {
this.afterCreated();
}
/**
* 执行created后的逻辑
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterCreated() {
this.locale = this.$i18n.locale;
this.load();
if(AppCenterService && AppCenterService.getMessageCenter()){
this.appStateEvent = AppCenterService.getMessageCenter().subscribe(({ name, action, data }) =>{
if(!Object.is(name,"${ctrl.getPSAppDataEntity().getCodeName()}")){
......@@ -374,6 +382,14 @@ GanttElastic,
}
})
}
this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
if (!Object.is(tag, this.name)) {
return;
}
if (Object.is('load', action)) {
this.load(data);
}
});
}
/**
......@@ -408,6 +424,9 @@ GanttElastic,
if(this.appStateEvent){
this.appStateEvent.unsubscribe();
}
if(this.viewStateEvent){
this.viewStateEvent.unsubscribe();
}
<#if destroyed_block??>
${destroyed_block}
</#if>
......
......@@ -11,9 +11,17 @@ ${ctrl.render.code}
<#if ctrl.groupRender??>
${ctrl.groupRender.code}
<#else>
<div :key="group + index" class="dataview-group-content" style="<#if ctrl.getGroupWidth() gt 0>width: ${ctrl.getGroupWidth()?c}px;<#else>flex-grow: 1;</#if>">
<div :key="index" class="dataview-group-folading-kanban">
<div class="dataview-group-icon">
<Icon :type="group.folding ? 'md-arrow-dropright' : 'md-arrow-dropleft'" size="25" @click="onClick(group,index)"/>
</div>
<div class="dataview-group-folding">
<span>{{getGroupText(group.value)}}({{group.items.length}})</span>
</div>
</div>
<div :key="group + index" class="dataview-group-content dataview-group-kanban" style="<#if ctrl.getGroupWidth() gt 0>width: ${ctrl.getGroupWidth()?c}px;<#else>flex-grow: 1;</#if>">
<div class="dataview-group-header<#if ctrl.getGroupPSSysCss()??> ${ctrl.getGroupPSSysCss().getCssName()}</#if>">
{{ getGroupText(group.name) }}
{{ getGroupText(group.value) }}
<#if ctrl.getGroupPSUIActionGroup()??>
<Poptip trigger="hover" content="content" placement="bottom-end" style="float: right;">
<Icon type="md-more" />
......@@ -38,11 +46,11 @@ ${ctrl.render.code}
</Poptip>
</#if>
</div>
<draggable :list="group.items" group="${ctrl.name}" class="dataview-group-items" @change="onDragChange($event, group.name)">
<draggable :list="group.items" group="${ctrl.name}" class="dataview-group-items" @change="onDragChange($event, group.value)">
<div v-for="(item, i) in group.items" :key="i" :class="{'dataview-group-item': true, 'is-select': item.isselected}" @click="handleClick(item)" @dblclick="handleDblClick(item)">
<#if ctrl.getItemPSLayoutPanel()??>
<#assign panel = ctrl.getItemPSLayoutPanel()>
<layout_${panel.getName()} name='${panel.name}' :inputData="item"></layout_${panel.getName()}>
<layout_${panel.getName()} name='${panel.name}' :inputData="item" @panelDataChange="($event)=>{onPanelDataChange(item,$event)}"></layout_${panel.getName()}>
<#elseif ctrl.itemRender??>
${ctrl.itemRender.code}
<#else>
......@@ -81,6 +89,7 @@ ${ctrl.render.code}
</template>
<#assign import_block>
import draggable from "vuedraggable";
import CodeListService from '@codelist/codelist-service';
</#assign>
<#assign component_block>
draggable,
......@@ -235,6 +244,22 @@ draggable,
*/
public selections: Array<any> = [];
/**
* 代码表服务
*
* @type {CodeListService}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public codeListService:CodeListService = new CodeListService( {$store: this.$store});
/**
* 代码表数据
*
* @type {Array<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public allCodeList:Array<any> = [];
/**
* 当前页
*
......@@ -296,13 +321,12 @@ draggable,
*/
public groupMode: string = '${ctrl.getGroupMode()}'
/**
* 分组模式
* 分组代码表
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public groupCodelist: string = '<#if ctrl.getGroupPSCodeList()??>${ctrl.getGroupPSCodeList().getCodeName()}</#if>'
public groupCodelist: any = {<#if ctrl.getGroupPSCodeList()??>type:'${ctrl.getGroupPSCodeList().getCodeListType()}',tag:'${ctrl.getGroupPSCodeList().getCodeName()}'</#if>};
/**
* Vue声明周期,组件挂载完毕
*
......@@ -413,7 +437,7 @@ draggable,
* @param {boolean} [isReset=false] 是否重置items
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public load(opt: any = {}, isReset: boolean = false): void {
public async load(opt: any = {}, isReset: boolean = false) {
if(!this.fetchAction){
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: '${view.getName()}' + (this.$t('app.kanban.notConfig.fetchAction') as string) });
return;
......@@ -585,7 +609,7 @@ draggable,
Object.assign(arg, { viewparams: this.viewparams });
let _context = JSON.parse(JSON.stringify(this.context));
<#if ctrl.getPSAppDataEntity()??>
Object.assign(_context, { ${ctrl.getPSAppDataEntity().getCodeName()?lower_case}: opt.task });
Object.assign(_context, { ${ctrl.getPSAppDataEntity().getCodeName()?lower_case}: opt.srfkey });
</#if>
const post: Promise<any> = this.service.update(this.updateGroupAction, _context, arg, this.showBusyIndicator);
post.then((response: any) => {
......@@ -618,7 +642,7 @@ draggable,
* @param {}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public setGroups() {
public async setGroups() {
if(!this.isGroup || !this.groupField || Object.is(this.groupMode, 'NONE')) {
return;
}
......@@ -629,6 +653,7 @@ draggable,
if(!group) {
this.groups.push({
name: item[this.groupField],
value: item[this.groupField],
items: this.getGroupItems(item[this.groupField])
})
}
......@@ -636,11 +661,13 @@ draggable,
}
if(Object.is(this.groupMode, 'CODELIST') && this.groupCodelist) {
this.groups = [];
let codelist: any = this.$store.getters.getCodeList(this.groupCodelist);
if(codelist) {
codelist.items.forEach((item: any) => {
let codelistItems: any = await this.codeListService.getDataItems(this.groupCodelist);
this.allCodeList = Util.deepCopy(codelistItems);
if(codelistItems && codelistItems.length >0) {
codelistItems.forEach((item: any) => {
this.groups.push({
name: item.value,
value: item.value,
items: this.getGroupItems(item.value)
})
})
......@@ -672,19 +699,19 @@ draggable,
*/
public getGroupText(name: string) {
if(Object.is(this.groupMode, 'CODELIST') && this.groupCodelist) {
let codelist: any = this.$store.getters.getCodeList(this.groupCodelist);
if(codelist) {
if(this.allCodeList && this.allCodeList.length >0) {
if(!name) {
return codelist.emptytext;
return '未定义';
}
let item = codelist.items.find((item: any) => Object.is(item.value, name));
let item = this.allCodeList.find((item: any) => Object.is(item.value, name));
if(item) {
return item.text;
}
}
}
}else{
return name;
}
}
/**
* 选择数据
......@@ -731,6 +758,24 @@ draggable,
this.$emit('selectionchange', this.selections);
}
/**
* 点击时触发看板的展开和收起
*
* @param group 分组看板
* @param index 分组看板编号
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public onClick(group: any,index: number){
group.folding = !group.folding;
let kanban: any = this.$el.getElementsByClassName('dataview-group-kanban')[index];
if(group.folding){
kanban.style.display="none";
}else{
kanban.style.display="block";
}
this.$forceUpdate();
}
/**
* 界面行为
*
......@@ -752,6 +797,17 @@ draggable,
</#if>
}
/**
* 面板数据变化处理事件
* @param {any} item 当前列数据
* @param {any} $event 面板事件数据
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public onPanelDataChange(item:any,$event:any) {
Object.assign(item, $event, {rowDataState:'update'});
}
/**
* 拖拽变化
*
......
......@@ -2,6 +2,24 @@
height: 100%;
display: flex;
overflow: auto;
.dataview-group-folading-kanban{
border: 1px solid #ddd;
text-align: center;
border-left: 0;
height: 100%;
width: 40px;
background-color: #d8d8d8;
color: #a5a5a5;
.dataview-group-icon{
padding: 6px 0;
}
.dataview-group-folding{
height: calc(100% - 39px);
writing-mode: tb;
width: 31px;
font-size: 17px;
}
}
.dataview-group-content {
border: 1px solid #ddd;
border-left: 0;
......
......@@ -8,7 +8,19 @@ ${item.render.code}
<@badge item>
<i-button type="primary" :disabled="detailsModel.${item.getName()}.disabled" @click="${item.getName()}_click($event)" class="app-form-button<#if item.getPSSysCss?? && item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>"
style="<#if item.getHeight() gt 0>height: ${item.getHeight()?c}px;</#if><#if item.getWidth() gt 0>width: ${item.getWidth()?c}px;</#if>">
<#if item.getPSSysImage()??><#assign img=item.getPSSysImage()><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)><i class="${img.getCssClass()}" style="margin-right: 2px;"></i></#if></#if>
<#if item.getPSSysImage()??>
<#assign img=item.getPSSysImage()>
<#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>
<i class="${img.getCssClass()}" style="margin-right: 2px;"></i>
</#if>
<#else>
<#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSSysImage?? && item.getPSUIAction().getPSSysImage()??>
<#assign img=item.getPSUIAction().getPSSysImage()>
<#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>
<menu-icon :item="{iconcls: '${img.getCssClass()}'}" />
</#if>
</#if>
</#if>
<#if item.isShowCaption()><span ><#if item.getCaptionItemName()?? && item.getCaptionItemName()?length gt 0>{{data.${item.getCaptionItemName()}}}<#else><#if langbase??>{{$t('${langbase}.details.${item.name}')}}<#else>${item.getCaption()}</#if></#if></span></#if>
</i-button>
</@badge>
......
......@@ -2,18 +2,20 @@
${item.render.code}
<#else>
<app-rawitem
:viewparams="viewparams"
:context="context"
contentStyle="<#if item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if>"
sizeStyle="<#if item.getRawItemHeight() gt 0>height: ${item.getRawItemHeight()?c}px;</#if><#if item.getRawItemWidth() gt 0>width: ${item.getRawItemWidth()?c}px;</#if>"
contentType="<#if item.getContentType?? && item.getContentType()??>${item.getContentType()}</#if>"
<#if item.getRawContent?? && item.getRawContent()??>
rawContent="${item.getRawContent()}"
</#if>
<#if item.getHtmlContent?? && item.getHtmlContent()??>
htmlContent="${item.getHtmlContent()}"
:htmlContent='`${item.getHtmlContent()}`'
</#if>
<#if item.getPSSysImage?? && item.getPSSysImage()??>
<#assign img=item.getPSSysImage()>
<#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>
imageClass="${img.getCssClass()}"</#if></#if>>
<#if item.getContentType?? && item.getContentType() == 'RAW'>
${item.getRawContent()}
</#if>
</app-rawitem>
</#if>
\ No newline at end of file
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude>
<i-form :model="this.data" class='app-form<#if ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if><#if ctrl.isInfoFormMode?? && ctrl.isInfoFormMode()> info-form-mode</#if>' ref='${ctrl.name}' id='${ctrl.getPSAppDataEntity().getCodeName()?lower_case}_${ctrl.getCodeName()?lower_case}' style="<#if ctrl.getFormWidth() gt 1>width: ${ctrl.getFormWidth()?c}px;</#if>">
<i-form :model="this.data" class='app-form<#if ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if><#if ctrl.isInfoFormMode?? && ctrl.isInfoFormMode()> info-form-mode</#if>' ref='${ctrl.name}' id='${ctrl.getPSAppDataEntity().getCodeName()?lower_case}_${ctrl.getCodeName()?lower_case}' style="<#if ctrl.getFormWidth() gt 1>width: ${ctrl.getFormWidth()?c}px;</#if>" @on-validate="formItemValidate">
<input style="display:none;" />
<row >
<#if ctrl.isNoTabHeader()>
......
......@@ -31,6 +31,23 @@ import { Environment } from '@/environments/environment';
@Inject({from:'navModel',default: 'tab'})
public navModel!:string;
/**
* 主键表单项名称
*
* @protected
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public formKeyItemName: string = '<#list ctrl.getPSDEFormItems() as formitem><#if formitem.getPSAppDEField?? && formitem.getPSAppDEField()??><#if !formitem.isHidden() && formitem.getPSAppDEField().isKeyField()>${formitem.getName()}</#if></#if></#list>';
/**
* 是否自动加载
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
@Prop({default:false}) public isautoload?:boolean;
/**
* 界面UI服务对象
*
......@@ -205,6 +222,35 @@ import { Environment } from '@/environments/environment';
*/
public mixinData:any = {};
/**
* 表单项校验错误提示信息
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public errorMessages: Array<any> = [];
/**
* 设置表单项错误提示信息
*
* @param {*} prop 表单项字段名
* @param {*} status 校验状态
* @param {*} error 错误信息
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public formItemValidate(prop: string,status: boolean, error: string){
error = error ? error : '';
if(this.errorMessages && this.errorMessages.length > 0){
const index = this.errorMessages.findIndex((errorMessage:any) => Object.is(errorMessage.prop,prop));
if(index != -1){
this.errorMessages[index].error = error;
}else{
this.errorMessages.push({prop: prop,error: error});
}
}else{
this.errorMessages.push({prop: prop,error: error});
}
}
/**
* 表单数据对象
*
......@@ -213,7 +259,7 @@ import { Environment } from '@/environments/environment';
*/
public data: any = {
<#list ctrl.getAllPSDEFormDetails() as item>
<#if item.getDetailType()?? && (item.getDetailType() == "FORMITEM" || item.getDetailType() == "FORMPART")>
<#if item.getDetailType?? && item.getDetailType()?? && (item.getDetailType() == "FORMITEM" || item.getDetailType() == "FORMPART")>
${item.getName()}: null,
</#if>
</#list>
......@@ -252,6 +298,14 @@ import { Environment } from '@/environments/environment';
*/
public saveState:any ;
/**
* 主信息属性映射表单项名称
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public majorMessageField: string = "<#list ctrl.getAllPSDEFormDetails() as item><#if item.getDetailType?? && item.getDetailType()?? && (item.getDetailType() == "FORMITEM") && !item.isHidden()><#if item.getPSAppDEField?? && item.getPSAppDEField()?? && item.getPSAppDEField().isMajorField()>${item.getName()}</#if></#if></#list>";
/**
* 值规则
*
......@@ -261,7 +315,7 @@ import { Environment } from '@/environments/environment';
public rules() :any {
return {
<#list ctrl.getAllPSDEFormDetails() as formdetail>
<#if formdetail.getDetailType?? && formdetail.getDetailType() == 'FORMITEM' && formdetail.getEditorType() != "HIDDEN">
<#if formdetail.getDetailType?? && formdetail.getDetailType() == 'FORMITEM' && formdetail.getEditorType() != "HIDDEN" && formdetail.isCompositeItem?? && !formdetail.isCompositeItem()>
${formdetail.getName()}: [
{ required: this.detailsModel.${formdetail.getName()}.required, type: '<#assign datatype=srfjavatype(formdetail.getStdDataType())><#if datatype=='BigInteger' || datatype=='Integer' || datatype=='Double' || datatype=='Decimal' || datatype=='Float' || datatype=='BigDecimal'>number<#else>string</#if>', message: '${formdetail.getCaption()} 值不能为空', trigger: 'change' },
{ required: this.detailsModel.${formdetail.getName()}.required, type: '<#assign datatype=srfjavatype(formdetail.getStdDataType())><#if datatype=='BigInteger' || datatype=='Integer' || datatype=='Double' || datatype=='Decimal' || datatype=='Float' || datatype=='BigDecimal'>number<#else>string</#if>', message: '${formdetail.getCaption()} 值不能为空', trigger: 'blur' },
......@@ -278,7 +332,37 @@ import { Environment } from '@/environments/environment';
</#if>
<#if ctrl.getPSDEFormItemVRs()??>
<#list ctrl.getPSDEFormItemVRs() as fideValueRule>
<#if fideValueRule.getPSDEFormItemName() == formdetail.getName()>
<#if fideValueRule.getPSDEFormItemName()?lower_case == formdetail.getName()?lower_case >
<#-- 系统值规则 -->
<#if fideValueRule.getPSSysValueRule()??>
<#assign valueRule = fideValueRule.getPSSysValueRule()/>
<#if valueRule.getRuleType?? && valueRule.getRuleType()??>
<#if valueRule.getRuleType() == "REG">
{ <#if valueRule.getRegExCode?? && valueRule.getRegExCode()??>pattern: /${valueRule.getRegExCode()}/</#if><#if valueRule.getRuleInfo?? && valueRule.getRuleInfo()??>, message: '${valueRule.getRuleInfo()}'</#if>, trigger: 'change' },
<#elseif valueRule.getRuleType() == "SCRIPT">
{ <#if valueRule.getScriptCode?? && valueRule.getScriptCode()??>validator: (rule:any, value:any, callback:any) => { ${valueRule.getScriptCode()} }</#if><#if valueRule.getRuleInfo?? && valueRule.getRuleInfo()??>, message: '${valueRule.getRuleInfo()}'</#if>, trigger: 'change' },
</#if>
</#if>
</#if>
<#-- 属性值规则 -->
<#if fideValueRule.getCheckMode?? && fideValueRule.getCheckMode()?? && fideValueRule.getCheckMode() != 2 && fideValueRule.getPSDEFValueRule?? && fideValueRule.getPSDEFValueRule()??>
<#assign deRule = fideValueRule.getPSDEFValueRule()/>
{validator:(rule:any, value:any)=>{return this.verifyDeRules("${fideValueRule.getPSDEFormItemName()?lower_case}").isPast},message: this.verifyDeRules("${fideValueRule.getPSDEFormItemName()?lower_case}").infoMessage, trigger: 'change' },
{validator:(rule:any, value:any)=>{return this.verifyDeRules("${fideValueRule.getPSDEFormItemName()?lower_case}").isPast},message: this.verifyDeRules("${fideValueRule.getPSDEFormItemName()?lower_case}").infoMessage, trigger: 'blur' },
</#if>
</#if>
</#list>
</#if>
],
</#if>
<#-- 复合表单项 atart -->
<#if formdetail.isCompositeItem?? && formdetail.isCompositeItem() && formdetail.getEditorType() != "USERCONTROL">
${formdetail.getName()}: [
<#if formdetail.getPSDEFormItems?? && formdetail.getPSDEFormItems()??>
<#list formdetail.getPSDEFormItems() as childFormItem>
<#if ctrl.getPSDEFormItemVRs()??>
<#list ctrl.getPSDEFormItemVRs() as fideValueRule>
<#if childFormItem.getName()?lower_case == fideValueRule.getPSDEFormItemName()?lower_case>
<#-- 系统值规则 -->
<#if fideValueRule.getPSSysValueRule()??>
<#assign valueRule = fideValueRule.getPSSysValueRule()/>
......@@ -293,14 +377,17 @@ import { Environment } from '@/environments/environment';
<#-- 属性值规则 -->
<#if fideValueRule.getCheckMode?? && fideValueRule.getCheckMode()?? && fideValueRule.getCheckMode() != 2 && fideValueRule.getPSDEFValueRule?? && fideValueRule.getPSDEFValueRule()??>
<#assign deRule = fideValueRule.getPSDEFValueRule()/>
{validator:(rule:any, value:any)=>{return this.verifyDeRules("${fideValueRule.getPSDEFormItemName()}").isPast},message: this.verifyDeRules("${fideValueRule.getPSDEFormItemName()}").infoMessage, trigger: 'change' },
{validator:(rule:any, value:any)=>{return this.verifyDeRules("${fideValueRule.getPSDEFormItemName()}").isPast},message: this.verifyDeRules("${fideValueRule.getPSDEFormItemName()}").infoMessage, trigger: 'blur' },
{validator:(rule:any, value:any)=>{return this.verifyDeRules("${fideValueRule.getPSDEFormItemName()?lower_case}").isPast},message: this.verifyDeRules("${fideValueRule.getPSDEFormItemName()?lower_case}").infoMessage, trigger: 'change' },
{validator:(rule:any, value:any)=>{return this.verifyDeRules("${fideValueRule.getPSDEFormItemName()?lower_case}").isPast},message: this.verifyDeRules("${fideValueRule.getPSDEFormItemName()?lower_case}").infoMessage, trigger: 'blur' },
</#if>
</#if>
</#list>
</#if>
</#list>
</#if>
],
</#if>
<#-- 复合表单项 end -->
</#list>
}
}
......@@ -317,7 +404,7 @@ import { Environment } from '@/environments/environment';
<#if fideValueRule.getCheckMode?? && fideValueRule.getCheckMode()?? && fideValueRule.getCheckMode() != 2 && fideValueRule.getPSDEFValueRule?? && fideValueRule.getPSDEFValueRule()??>
<#assign deRule = fideValueRule.getPSDEFValueRule()/>
<#if fideValueRule.getPSDEFormItemName?? && fideValueRule.getPSDEFormItemName()??>
${fideValueRule.getPSDEFormItemName()}:[
${fideValueRule.getPSDEFormItemName()?lower_case}:[
<#if deRule.getPSDEFVRGroupCondition?? && deRule.getPSDEFVRGroupCondition()?? && deRule.getPSDEFVRGroupCondition().getPSDEFVRConditions?? && deRule.getPSDEFVRGroupCondition().getPSDEFVRConditions()??>
<#list deRule.getPSDEFVRGroupCondition().getPSDEFVRConditions() as condItem>
<@getDeRule condItem />
......@@ -345,9 +432,9 @@ import { Environment } from '@/environments/environment';
let startOp = (val:boolean)=>{
if(falg.isPast){
if(opValue){
falg.isPast = falg && val;
falg.isPast = falg.isPast && val;
}else{
falg.isPast = falg || val;
falg.isPast = falg.isPast || val;
}
}else{
falg.isPast = val;
......@@ -356,6 +443,12 @@ import { Environment } from '@/environments/environment';
for(let i=0;i<rule[name].length;i++){
let item:any = rule[name][i];
let dataValue = item.deName?this.data[this.service.getItemNameByDeName(item.deName)]:"";
item.ruleInfo = item.ruleInfo ? item.ruleInfo : this.$t('app.formpage.valuecheckex');
if((dataValue === null || dataValue === undefined || dataValue === "") && (item.type != 'GROUP')){
startOp(true);
return falg;
}
try {
// 常规规则
if(item.type == 'SIMPLE'){
startOp(!this.$verify.checkFieldSimpleRule(dataValue,item.condOP,item.paramValue,item.ruleInfo,item.paramType,this.data,item.isKeyCond));
......@@ -386,9 +479,14 @@ import { Environment } from '@/environments/environment';
falg.infoMessage = item.ruleInfo;
if(!falg.isPast) return falg;
}
} catch(error) {
falg.infoMessage = item.ruleInfo;
startOp(false);
if(!falg.isPast) return falg;
}
// 分组
if(item.type == 'GROUP'){
falg = this.verifyDeRules('group',item)
falg = this.verifyDeRules('group',item,item.condOP?item.condOP:"AND");
if(item.isNotMode){
falg.isPast = !falg.isPast;
}
......@@ -398,7 +496,7 @@ import { Environment } from '@/environments/environment';
if(!falg.hasOwnProperty("isPast")){
falg.isPast = true;
}
if(!this.data[name]){
if(!this.data[name] && this.data[name] != 0){
falg.isPast = true;
}
return falg;
......@@ -858,12 +956,12 @@ import { Environment } from '@/environments/environment';
const arg: any = { ...JSON.parse(JSON.stringify(this.data)) } ;
Object.assign(arg, { srfactionparam: result.datas });
const details: string[] = [<#list itemUpdate.getPSDEFIUpdateDetails() as detail><#if detail_index gt 0>, </#if>'${detail.getPSDEFormDetailName()?lower_case}'</#list>];
this.updateFormItems('${itemUpdate.codeName}', arg, details, ${itemUpdate.isShowBusyIndicator()?c});
this.updateFormItems('${itemUpdate.getPSAppDEMethod().getCodeName()}', arg, details, ${itemUpdate.isShowBusyIndicator()?c});
}
});
<#else>
const details: string[] = [<#list itemUpdate.getPSDEFIUpdateDetails() as detail><#if detail_index gt 0>, </#if>'${detail.getPSDEFormDetailName()?lower_case}'</#list>];
this.updateFormItems('${itemUpdate.codeName}', this.data, details, ${itemUpdate.isShowBusyIndicator()?c});
this.updateFormItems('${itemUpdate.getPSAppDEMethod().getCodeName()}', this.data, details, ${itemUpdate.isShowBusyIndicator()?c});
</#if>
}
</#if>
......@@ -911,6 +1009,9 @@ import { Environment } from '@/environments/environment';
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public afterCreated(){
if(this.isautoload){
this.autoLoad({srfkey:this.context.documentcenter});
}
if (this.viewState) {
this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
if (!Object.is(tag, this.name)) {
......@@ -1151,6 +1252,7 @@ import { Environment } from '@/environments/environment';
const arg: any = { ...opt };
const data = this.getValues();
Object.assign(arg, data);
Object.assign(arg,{srfmajortext:data[this.majorMessageField]});
const action: any = Object.is(data.srfuf, '1') ? this.updateAction : this.createAction;
if(!action){
let actionName:any = Object.is(data.srfuf, '1')?"updateAction":"createAction";
......@@ -1178,7 +1280,8 @@ import { Environment } from '@/environments/environment';
});
}).catch((response: any) => {
if (response && response.status && response.data) {
if(response.data.errorKey && Object.is(response.data.errorKey,"versionCheck")){
if (response.data.errorKey) {
if(Object.is(response.data.errorKey, "versionCheck")) {
this.$Modal.confirm({
title: (this.$t('app.formpage.saveerror') as string),
content: (this.$t('app.formpage.savecontent') as string),
......@@ -1187,14 +1290,34 @@ import { Environment } from '@/environments/environment';
},
onCancel: () => { }
});
}else{
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: response.data.message });
} else if(Object.is(response.data.errorKey, 'DupCheck')) {
let errorProp: string = response.data.message.match(/\[[a-zA-Z]*\]/)[0];
let name: string = this.service.getNameByProp(errorProp.substr(1, errorProp.length-2));
if(name) {
this.$Notice.error({
title: (this.$t('app.commonWords.createFailed') as string),
desc: this.detailsModel[name].caption + " : " + arg[name] + (this.$t('app.commonWords.isExist') as string) + '!',
});
} else {
this.$Notice.error({
title: (this.$t('app.commonWords.createFailed') as string),
desc: response.data.message?response.data.message:(this.$t('app.commonWords.sysException') as string),
})
}
return;
}else if(Object.is(response.data.errorKey, 'DuplicateKeyException')){
this.$Notice.error({
title: (this.$t('app.commonWords.createFailed') as string),
desc: this.detailsModel[this.formKeyItemName].caption + " : " + arg[this.formKeyItemName] + (this.$t('app.commonWords.isExist') as string) + '!',
});
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: response.data.message?response.data.message:(this.$t('app.commonWords.sysException') as string) });
}
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: response.data.message?response.data.message:(this.$t('app.commonWords.sysException') as string) });
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: (this.$t('app.commonWords.sysException') as string) });
return;
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: (this.$t('app.commonWords.sysException') as string) });
}
});
}
......@@ -1212,13 +1335,22 @@ import { Environment } from '@/environments/environment';
return new Promise((resolve: any, reject: any) => {
showResultInfo = showResultInfo === undefined ? true : false;
if (!this.formValidateStatus()) {
if(this.errorMessages && this.errorMessages.length > 0) {
let descMessage: string = '';
this.errorMessages.forEach((message: any) => {
descMessage = descMessage + '<p>' + message.error + '<p>';
})
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: descMessage });
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: (this.$t('app.formpage.valuecheckex') as string) });
}
return;
}
const arg: any = { ...opt };
const data = this.getValues();
Object.assign(arg, this.context);
Object.assign(arg, data);
Object.assign(arg,{srfmajortext:data[this.majorMessageField]});
if (ifStateNext) {
<#assign drcounter = 0>
<#list ctrl.getAllPSDEFormDetails() as formdetail>
......@@ -1270,7 +1402,8 @@ import { Environment } from '@/environments/environment';
resolve(response);
}).catch((response: any) => {
if (response && response.status && response.data) {
if(response.data.errorKey && Object.is(response.data.errorKey,"versionCheck")){
if (response.data.errorKey) {
if(Object.is(response.data.errorKey, "versionCheck")) {
this.$Modal.confirm({
title: (this.$t('app.formpage.saveerror') as string),
content: (this.$t('app.formpage.savecontent') as string),
......@@ -1279,16 +1412,31 @@ import { Environment } from '@/environments/environment';
},
onCancel: () => { }
});
}else{
} else if(Object.is(response.data.errorKey, 'DupCheck')) {
let errorProp: string = response.data.message.match(/\[[a-zA-Z]*\]/)[0];
let name: string = this.service.getNameByProp(errorProp.substr(1, errorProp.length-2));
if(name) {
this.$Notice.error({
title: (this.$t('app.commonWords.createFailed') as string),
desc: this.detailsModel[name].caption + " : " + arg[name] + (this.$t('app.commonWords.isExist') as string) + '!',
});
} else {
this.$Notice.error({
title: (this.$t('app.commonWords.createFailed') as string),
desc: response.data.message,
})
}
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: response.data.message });
}
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: response.data.message });
reject(response);
}
return;
}
if (!response || !response.status || !response.data) {
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: (this.$t('app.commonWords.sysException') as string) });
reject(response);
return;
}
reject(response);
});
......@@ -1710,7 +1858,7 @@ import { Environment } from '@/environments/environment';
*/
public createDefault(){
<#list ctrl.getAllPSDEFormDetails() as formdetail><#t>
<#if formdetail.getCreateDV?? && formdetail.getCreateDV()?? && formdetail.getCreateDV() !=""><#t>
<#if (formdetail.getCreateDV?? || formdetail.getCreateDVT??) && (formdetail.getCreateDV()?? || formdetail.getCreateDVT()??) && (formdetail.getCreateDV() !="" || formdetail.getCreateDVT() != "")><#t>
if (this.data.hasOwnProperty('${formdetail.getCodeName()?lower_case}')) {
<#if !(formdetail.getCreateDVT() == '')><#t>
<#-- 网页请求 -->
......@@ -1751,7 +1899,7 @@ import { Environment } from '@/environments/environment';
*/
public updateDefault(){
<#list ctrl.getAllPSDEFormDetails() as formdetail><#t>
<#if formdetail.getUpdateDV?? && formdetail.getUpdateDV()?? && formdetail.getUpdateDV() != ""><#t>
<#if (formdetail.getUpdateDV?? || formdetail.getUpdateDVT??) && (formdetail.getUpdateDV()?? || formdetail.getUpdateDVT()??) && (formdetail.getUpdateDV() != "" || formdetail.getUpdateDVT() != "")><#t>
if (this.data.hasOwnProperty('${formdetail.getCodeName()?lower_case}') && !this.data.${formdetail.getCodeName()?lower_case}) {
<#if !(formdetail.getUpdateDVT() == '')><#t>
<#-- 网页请求 -->
......@@ -1822,6 +1970,17 @@ import { Environment } from '@/environments/environment';
</#if>
</#if>
/**
* 面板数据变化处理事件
* @param {any} item 当前列数据
* @param {any} $event 面板事件数据
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public onPanelDataChange(item:any,$event:any) {
Object.assign(item, $event, {rowDataState:'update'});
}
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude>
......
......@@ -6,6 +6,7 @@
}
.app-form {
overflow: auto;
padding: 6px;
> .ivu-row {
> .ivu-tabs {
height: 100%;
......
......@@ -127,7 +127,7 @@
</#if>
<template <#if (ctrl.isEnableRowEdit() && item.isEnableRowEdit())>v-if="!actualIsOpenEdit"</#if>>
<#if item.getPSDEUIAction?? && item.getPSDEUIAction()??>
<a @click="uiAction(row, '${item.getPSDEUIAction().getUIActionTag()}', $event)">
<a v-show="row.${item.getPSDEUIAction().getUIActionTag()}.visabled" :disabled="row.${item.getPSDEUIAction().getUIActionTag()}.disabled" :style="{'display': 'block'}" @click="uiAction(row, '${item.getPSDEUIAction().getUIActionTag()}', $event)">
</#if>
<#if (item.render??)>
<#-- BEGIN:列绘制 -->
......@@ -216,7 +216,7 @@
</app-column-link >
<#else>
<#if item.getPSDEUIAction?? && item.getPSDEUIAction()??>
<a @click="uiAction(row, '${item.getPSDEUIAction().getUIActionTag()}', $event)">
<a v-show="row.${item.getPSDEUIAction().getUIActionTag()}.visabled" :disabled="row.${item.getPSDEUIAction().getUIActionTag()}.disabled" :style="{'display': 'block'}" @click="uiAction(row, '${item.getPSDEUIAction().getUIActionTag()}', $event)">
</#if>
<#if item.getValueFormat()?? && item.getValueFormat() != "%1$s">
<app-format-data format="${item.getValueFormat()}" :data="row.${item.getName()?lower_case}"></app-format-data>
......
......@@ -26,7 +26,7 @@ ${ctrl.render.code}
:cell-class-name="getCellClassName"
<#if ctrl.isEnableGroup()>
:span-method="arraySpanMethod"
:tree-props="{children: 'children', hasChildren: 'children.length>0'}"
:tree-props="{children: 'children', hasChildren: 'children?true:false'}"
row-key="groupById"
</#if>
<#if ctrl.isEnablePagingBar()>
......@@ -132,7 +132,20 @@ import { Environment } from '@/environments/environment';
<#ibizinclude>
../../@MACRO/LANG_FUN.ftl
</#ibizinclude>
<#macro getMajorInfoColName ctrl>
<#compress>
<#if ctrl.getPSDEGridColumns?? && ctrl.getPSDEGridColumns()??>
<#list ctrl.getPSDEGridColumns() as gridColumn>
<#if gridColumn.getPSAppDEField?? && gridColumn.getPSAppDEField()??>
<#assign majorInfoField = gridColumn.getPSAppDEField() />
<#if majorInfoField.isMajorField()>
${gridColumn.getName()}
</#if>
</#if>
</#list>
</#if>
</#compress>
</#macro>
/**
* 代码表服务对象
*
......@@ -141,6 +154,14 @@ import { Environment } from '@/environments/environment';
*/
public codeListService:CodeListService = new CodeListService({ $store: this.$store });
/**
* 主信息表格列
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public majorInfoColName:string = "<@getMajorInfoColName ctrl/>";
/**
* 界面UI服务对象
*
......@@ -325,7 +346,7 @@ import { Environment } from '@/environments/environment';
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public minorSortPSDEF: string = '<#if ctrl.getMinorSortPSDEF()??>${ctrl.getMinorSortPSDEF().getCodeName()?lower_case}</#if>';
public minorSortPSDEF: string = '<#if ctrl.getMinorSortPSDEF()??>${ctrl.getMinorSortPSDEF().getName()?lower_case}</#if>';
/**
* 分页条数
......@@ -495,6 +516,14 @@ import { Environment } from '@/environments/environment';
*/
public isDisplay:boolean = <#if ctrl.getAggMode() == "ALL">false<#else>true</#if>;
/**
* 表格行编辑项校验错误提示信息
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public errorMessages: Array<any> = [];
/**
* 部件刷新
*
......@@ -544,6 +573,13 @@ import { Environment } from '@/environments/environment';
isEnableRowEdit: false,
</#if>
<#-- END:是否支持行编辑 -->
<#-- BEGIN:是否启用 -->
<#if column.getEnableCond?? && column.getEnableCond()??>
enableCond: ${column.getEnableCond()?c} ,
<#else>
enableCond: 3 ,
</#if>
<#-- END:是否启用 -->
},
</#list>
</#if>
......@@ -573,6 +609,22 @@ import { Environment } from '@/environments/environment';
*/
public groupAppField:string ="<#if ctrl.getGroupPSDEField()??>${ctrl.getGroupPSDEField().getCodeName()?lower_case}</#if>";
/**
* 分组属性代码表标识
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public groupAppFieldCodelistTag:string ="<#if ctrl.getGroupPSDEField()?? && ctrl.getGroupPSDEField().getPSCodeList?? && ctrl.getGroupPSDEField().getPSCodeList()??>${ctrl.getGroupPSDEField().getPSCodeList().getCodeName()}</#if>";
/**
* 分组属性代码表类型
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public groupAppFieldCodelistType: string = "<#if ctrl.getGroupPSDEField()?? && ctrl.getGroupPSDEField().getPSCodeList?? && ctrl.getGroupPSDEField().getPSCodeList()??>${ctrl.getGroupPSDEField().getPSCodeList().getCodeListType()}</#if>";
/**
* 分组模式
*
......@@ -581,6 +633,22 @@ import { Environment } from '@/environments/environment';
*/
public groupMode:string ="<#if ctrl.getGroupMode()??>${ctrl.getGroupMode()}</#if>";
/**
* 分组代码表标识
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public codelistTag: string = "<#if ctrl.getGroupPSCodeList?? && ctrl.getGroupPSCodeList()??>${ctrl.getGroupPSCodeList().getCodeName()}</#if>";
/**
* 分组代码表类型
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public codelistType: string = "<#if ctrl.getGroupPSCodeList?? && ctrl.getGroupPSCodeList()??>${ctrl.getGroupPSCodeList().getCodeListType()}</#if>";
/**
* 获取界面行为权限状态
*
......@@ -649,7 +717,7 @@ import { Environment } from '@/environments/environment';
<#assign valueRule = fideValueRule.getPSSysValueRule()/>
<#if valueRule.getRuleType?? && valueRule.getRuleType()??>
<#if valueRule.getRuleType() == "REG">
{ <#if valueRule.getRegExCode?? && valueRule.getRegExCode()??>pattern: /^${valueRule.getRegExCode()}$/</#if><#if valueRule.getRuleInfo?? && valueRule.getRuleInfo()??>, message: '${valueRule.getRuleInfo()}'</#if>, trigger: 'change' },
{ <#if valueRule.getRegExCode?? && valueRule.getRegExCode()??>pattern: /${valueRule.getRegExCode()}/</#if><#if valueRule.getRuleInfo?? && valueRule.getRuleInfo()??>, message: '${valueRule.getRuleInfo()}'</#if>, trigger: 'change' },
<#elseif valueRule.getRuleType() == "SCRIPT">
{ <#if valueRule.getScriptCode?? && valueRule.getScriptCode()??>validator: (rule:any, value:any, callback:any) => { ${valueRule.getScriptCode()} }</#if><#if valueRule.getRuleInfo?? && valueRule.getRuleInfo()??>, message: '${valueRule.getRuleInfo()}'</#if>, trigger: 'change' },
</#if>
......@@ -697,17 +765,21 @@ import { Environment } from '@/environments/environment';
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public async validateAll(){
this.errorMessages = [];
let validateState = true;
let index = -1;
for(let item of this.items){
for (let item of this.items) {
let tempMessage: string = '';
index++;
if(item.rowDataState === "create" || item.rowDataState === "update"){
for(let property of Object.keys(this.rules)){
if(!await this.validate(property,item,index)){
if (item.rowDataState === "create" || item.rowDataState === "update") {
for (let property of Object.keys(this.rules)) {
if (!await this.validate(property, item, index)) {
validateState = false;
tempMessage = tempMessage + '<p>' + this.gridItemsModel[index][property].error + '<p>';
}
}
}
this.errorMessages.push(tempMessage);
}
return validateState;
}
......@@ -797,7 +869,7 @@ import { Environment } from '@/environments/environment';
this.getAggData();
</#if>
<#if ctrl.isEnableGroup()>
this.drawGroup();
this.group();
</#if>
}).catch((response: any) => {
if (response && response.status === 401) {
......@@ -838,7 +910,7 @@ import { Environment } from '@/environments/environment';
}
let dataInfo = '';
_datas.forEach((record: any, index: number) => {
let srfmajortext = record.${ctrl.getPSAppDataEntity().getMajorPSAppDEField().getCodeName()?lower_case};
let srfmajortext = record.${ctrl.getPSAppDataEntity().getMajorPSAppDEField().getName()?lower_case};
if (index < 5) {
if (!Object.is(dataInfo, '')) {
dataInfo += '、';
......@@ -850,9 +922,9 @@ import { Environment } from '@/environments/environment';
});
if (_datas.length < 5) {
dataInfo = dataInfo + ' '+(this.$t('app.gridpage.totle') as string) + _datas.length + (this.$t('app.gridpage.records') as string)+(this.$t('app.gridpage.data') as string);
dataInfo = dataInfo + ' ' + (this.$t('app.gridpage.totle') as string) + _datas.length + (this.$t('app.gridpage.records') as string) + (this.$t('app.gridpage.data') as string);
} else {
dataInfo = dataInfo + '...' + ' '+(this.$t('app.gridpage.totle') as string) + _datas.length + (this.$t('app.gridpage.desc2') as string);
dataInfo = ' ... ' + (this.$t('app.gridpage.totle') as string) + _datas.length + (this.$t('app.gridpage.records') as string) + (this.$t('app.gridpage.data') as string);
}
const removeData = () => {
......@@ -873,7 +945,6 @@ import { Environment } from '@/environments/environment';
this.$Notice.success({ title: '', desc: (this.$t('app.gridpage.delSuccess') as string) });
}
//删除items中已删除的项
console.log(this.items);
_datas.forEach((data: any) => {
this.items.some((item:any,index:number)=>{
if(Object.is(item.srfkey,data.srfkey)){
......@@ -1101,14 +1172,36 @@ import { Environment } from '@/environments/environment';
*/
public async formatExcelData(filterVal:any, jsonData:any) {
let codelistColumns:Array<any> = [
<#if hasDEExport>
<#assign exportItems = ctrl.getPSDEDataExport().getPSDEDataExportItems() />
<#else>
<#assign exportItems = ctrl.getAllPSDEGridColumns() />
</#if>
<#if exportItems??>
<#list exportItems as column>
<#if (hasDEExport || (!column.isHideDefault() && column.getName() != '')) && column.getCodeList?? && column.getCodeList()?? && column.getCLConvertMode() == 'FRONT'>
<#if ctrl.getPSDEDataExport()?? && ctrl.getPSDEDataExport().getPSDEDataExportItems()??>
<#list ctrl.getPSDEDataExport().getPSDEDataExportItems() as column>
<#if column.getPSCodeList?? && column.getPSCodeList()??>
<#assign codelist = column.getPSCodeList()>
<#if codelist.getCodeListType() == 'STATIC' || codelist.getCodeListType() == 'DYNAMIC'>
{
name: '${column.getName()?lower_case}',
srfkey: '${codelist.codeName}',
codelistType : '${codelist.getCodeListType()}',
<#if codelist.getOrMode() == 'STR'>
textSeparator: '${codelist.textSeparator}',
renderMode: 'string',
valueSeparator: "${codelist.valueSeparator}",
<#elseif codelist.getOrMode() == 'NUM'>
renderMode: 'number',
textSeparator: '${codelist.textSeparator}',
valueSeparator: ',',
<#else>
renderMode: 'other',
textSeparator: '、',
valueSeparator: ',',
</#if>
},
</#if>
</#if>
</#list>
<#else>
<#if ctrl.getAllPSDEGridColumns()??>
<#list ctrl.getAllPSDEGridColumns() as column>
<#if (!column.isHideDefault() && column.getName() != '') && column.getPSCodeList?? && column.getPSCodeList()?? && column.getCLConvertMode() == 'FRONT'>
<#assign codelist = column.getPSCodeList()>
<#if codelist.getCodeListType() == 'STATIC' || codelist.getCodeListType() == 'DYNAMIC'>
{
......@@ -1132,6 +1225,7 @@ import { Environment } from '@/environments/environment';
</#if>
</#if>
</#list>
</#if>
</#if>
];
let _this = this;
......@@ -1164,7 +1258,7 @@ import { Environment } from '@/environments/environment';
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getCodelistValue(items: any[], value: any, codelist: any,){
if(!value){
if(!value && value !== 0 && value !== false){
return this.$t('codelist.'+codelist.srfkey+'.empty');
}
if (items) {
......@@ -1250,7 +1344,7 @@ import { Environment } from '@/environments/environment';
return;
}
if (Object.is('load', action)) {
this.load(data);
this.load(data,true);
}
if (Object.is('remove', action)) {
this.remove(data);
......@@ -1317,7 +1411,7 @@ import { Environment } from '@/environments/environment';
*/
public rowDBLClick($event: any): void {
// 分组行跳过
if($event && $event.children && $event.children.length >0){
if($event && $event.children){
return;
}
if (!$event || this.actualIsOpenEdit || Object.is(this.gridRowActiveMode,0)) {
......@@ -1343,7 +1437,7 @@ import { Environment } from '@/environments/environment';
*/
public arraySpanMethod({row, column, rowIndex, columnIndex} : any) {
let allColumns:Array<any> = [<#if ctrl.getPSDEGridColumns()??><#list ctrl.getPSDEGridColumns() as singleColumn>'${singleColumn.getCodeName()}'<#if singleColumn_has_next>,</#if></#list></#if>];
if(row && row.children && row.children.length>0) {
if(row && row.children) {
if(columnIndex == (this.isSingleSelect ? 0:1)) {
return [1, allColumns.length+1];
} else if(columnIndex > (this.isSingleSelect ? 0:1)) {
......@@ -1352,6 +1446,160 @@ import { Environment } from '@/environments/environment';
}
}
/**
* 分组方法
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public group(){
if(Object.is(this.groupMode,"AUTO")){
this.drawGroup();
}else if(Object.is(this.groupMode,"CODELIST")){
this.drawCodelistGroup();
}
}
/**
* 获取表格分组相关代码表
*
* @param {string} codelistType 代码表类型
* @param {string} codelistTag 代码表标识
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getGroupCodelist(codelistType: string,codelistTag:string){
let codelist: Array<any> = [];
// 动态代码表
if (Object.is(codelistType, "DYNAMIC")) {
this.codeListService.getItems(codelistTag).then((res: any)=>{
codelist = res;
}).catch((error: any) => {
});
// 静态代码表
} else if(Object.is(codelistType, "STATIC")){
codelist = this.$store.getters.getCodeListItems(codelistTag);
}
return codelist;
}
/**
* 根据分组代码表绘制分组列表
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public drawCodelistGroup(){
if(!this.isEnableGroup) return;
// 分组
let allGroup: Array<any> = [];
let allGroupField: Array<any> =[];
let groupTree:Array<any> = [];
allGroup = this.getGroupCodelist(this.codelistType,this.codelistTag);
allGroupField = this.getGroupCodelist(this.groupAppFieldCodelistType,this.groupAppFieldCodelistTag);
if(allGroup.length == 0){
console.warn("分组数据无效");
}
allGroup.forEach((group: any,i: number)=>{
let children:Array<any> = [];
this.items.forEach((item: any,j: number)=>{
if(allGroupField && allGroupField.length > 0){
const arr:Array<any> = allGroupField.filter((field:any)=>{return field.value == item[this.groupAppField]});
if(Object.is(group.label,arr[0].label)){
item.groupById = Number((i+1) * 100 + (j+1) * 1);
item.group = '';
children.push(item);
}
}else if(Object.is(group.label,item[this.groupAppField])){
item.groupById = Number((i+1) * 100 + (j+1) * 1);
item.group = '';
children.push(item);
}
});
const tree: any ={
groupById: Number((i+1)*100),
group: group.label,
<#if ctrl.getPSDEGridColumns()??>
<#list ctrl.getPSDEGridColumns() as singleColumn>
<#if singleColumn.getColumnType()?? && singleColumn.getColumnType() == "UAGRIDCOLUMN">
<#if singleColumn.getPSDEUIActionGroup()?? && singleColumn.getPSDEUIActionGroup().getPSUIActions()??>
<#list singleColumn.getPSDEUIActionGroup().getPSUIActions() as singleUIAction>
${singleUIAction.getCodeName()}:{
visabled: false
},
</#list>
</#if>
<#else>
<#if singleColumn.getColumnType()?? && singleColumn.getColumnType() == "DEFGRIDCOLUMN">
<#if singleColumn.getPSDEUIAction?? && singleColumn.getPSDEUIAction()?? && singleColumn.getPSDEUIAction().getUIActionTag?? && singleColumn.getPSDEUIAction().getUIActionTag()??>
${singleColumn.getPSDEUIAction().getUIActionTag()}:{
visabled: false
},
</#if>
${singleColumn.getCodeName()}:'',
</#if>
</#if>
</#list>
</#if>
children: children
}
groupTree.push(tree);
});
let child:Array<any> = [];
this.items.forEach((item: any,index: number)=>{
let i: number = 0;
if(allGroupField && allGroupField.length > 0){
const arr:Array<any> = allGroupField.filter((field:any)=>{return field.value == item[this.groupAppField]});
i = allGroup.findIndex((group: any)=>Object.is(group.label,arr[0].label));
}else{
i = allGroup.findIndex((group: any)=>Object.is(group.label,item[this.groupAppField]));
}
if(i < 0){
item.groupById = Number((allGroup.length+1) * 100 + (index+1) * 1);
item.group = '';
child.push(item);
}
if(i < 0){
item.groupById = Number((allGroup.length+1) * 100 + (index+1) * 1);
item.group = '';
child.push(item);
}
})
const Tree: any = {
groupById: Number((allGroup.length+1)*100),
group: this.$t('app.gridpage.other'),
<#if ctrl.getPSDEGridColumns()??>
<#list ctrl.getPSDEGridColumns() as singleColumn>
<#if singleColumn.getColumnType()?? && singleColumn.getColumnType() == "UAGRIDCOLUMN">
<#if singleColumn.getPSDEUIActionGroup()?? && singleColumn.getPSDEUIActionGroup().getPSUIActions()??>
<#list singleColumn.getPSDEUIActionGroup().getPSUIActions() as singleUIAction>
${singleUIAction.getCodeName()}:{
visabled: false
},
</#list>
</#if>
<#else>
<#if singleColumn.getColumnType()?? && singleColumn.getColumnType() == "DEFGRIDCOLUMN">
<#if singleColumn.getPSDEUIAction?? && singleColumn.getPSDEUIAction()?? && singleColumn.getPSDEUIAction().getUIActionTag?? && singleColumn.getPSDEUIAction().getUIActionTag()??>
${singleColumn.getPSDEUIAction().getUIActionTag()}:{
visabled: false
},
</#if>
${singleColumn.getCodeName()}:'',
</#if>
</#if>
</#list>
</#if>
children: child
}
if(child && child.length > 0){
groupTree.push(Tree);
}
this.items = groupTree;
if(this.actualIsOpenEdit) {
for(let i = 0; i < this.items.length; i++) {
this.gridItemsModel.push(this.getGridRowModel());
}
}
}
/**
* 绘制分组
*
......@@ -1361,10 +1609,17 @@ import { Environment } from '@/environments/environment';
if(!this.isEnableGroup) return;
// 分组
let allGroup: Array<any> = [];
let allGroupField: Array<any> =[];
allGroupField = this.getGroupCodelist(this.groupAppFieldCodelistType,this.groupAppFieldCodelistTag);
this.items.forEach((item: any)=>{
if(item.hasOwnProperty(this.groupAppField)){
if(allGroupField && allGroupField.length > 0){
const arr:Array<any> = allGroupField.filter((field:any)=>{return field.value == item[this.groupAppField]});
allGroup.push(arr[0].label);
}else{
allGroup.push(item[this.groupAppField]);
}
}
});
let groupTree:Array<any> = [];
allGroup = [...new Set(allGroup)];
......@@ -1375,15 +1630,22 @@ import { Environment } from '@/environments/environment';
allGroup.forEach((group: any, groupIndex: number)=>{
let children:Array<any> = [];
this.items.forEach((item: any,itemIndex: number)=>{
if(Object.is(group,item[this.groupAppField])){
item.groupById = Number((groupIndex+1) * 10 + (itemIndex+1) * 1);
if(allGroupField && allGroupField.length > 0){
const arr:Array<any> = allGroupField.filter((field:any)=>{return field.value == item[this.groupAppField]});
if(Object.is(group,arr[0].label)){
item.groupById = Number((groupIndex+1) * 100 + (itemIndex+1) * 1);
item.group = '';
children.push(item);
}
}else if(Object.is(group,item[this.groupAppField])){
item.groupById = Number((groupIndex+1) * 100 + (itemIndex+1) * 1);
item.group = '';
children.push(item);
}
});
group = group ? group : this.$t('app.gridpage.other');
const tree: any ={
groupById: Number((groupIndex+1)*10),
groupById: Number((groupIndex+1)*100),
group: group,
<#if ctrl.getPSDEGridColumns()??>
<#list ctrl.getPSDEGridColumns() as singleColumn>
......@@ -1396,8 +1658,15 @@ import { Environment } from '@/environments/environment';
</#list>
</#if>
<#else>
<#if singleColumn.getColumnType()?? && singleColumn.getColumnType() == "DEFGRIDCOLUMN">
<#if singleColumn.getPSDEUIAction?? && singleColumn.getPSDEUIAction()?? && singleColumn.getPSDEUIAction().getUIActionTag?? && singleColumn.getPSDEUIAction().getUIActionTag()??>
${singleColumn.getPSDEUIAction().getUIActionTag()}:{
visabled: false
},
</#if>
${singleColumn.getCodeName()}:'',
</#if>
</#if>
</#list>
</#if>
children: children,
......@@ -1519,7 +1788,7 @@ import { Environment } from '@/environments/environment';
let flag: boolean = true;
if(selection && selection.length === this.items.length) {
selection.forEach((element: any) => {
if(element.children && element.children.length > 0) {
if(element.children) {
this.toggleSelection(element.children, flag);
element.children.forEach((children: any) => {
this.selections.push(children);
......@@ -1553,7 +1822,7 @@ import { Environment } from '@/environments/environment';
*/
public rowClick($event: any, ifAlways: boolean = false): void {
// 分组行跳过
if($event && $event.children && $event.children.length >0){
if($event && $event.children){
return;
}
if (!ifAlways && (!$event || this.actualIsOpenEdit)) {
......@@ -1916,8 +2185,12 @@ import { Environment } from '@/environments/environment';
}
}
}
if(!await this.validateAll()){
if (!await this.validateAll()) {
if(this.errorMessages && this.errorMessages.length > 0) {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: this.errorMessages[0] });
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: (this.$t('app.commonWords.rulesException') as string) });
}
return [];
}
let successItems:any = [];
......@@ -1954,12 +2227,62 @@ import { Environment } from '@/environments/environment';
}
this.$emit('save', successItems);
this.refresh([]);
if(errorItems.length === 0 && successItems.length >0 && !this.isformDruipart){
if(errorItems.length === 0 && successItems.length > 0){
this.$Notice.success({ title: '', desc: (this.$t('app.commonWords.saveSuccess') as string) });
}else{
errorItems.forEach((item:any,index:number)=>{
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: errorMessage[index].data.message });
console.error(errorMessage[index]);
errorItems.forEach((item: any, index: number) => {
if(errorMessage[index] && errorMessage[index].data) {
if(Object.is(errorMessage[index].data.errorKey, 'DupCheck')) {
let errorProp: string = errorMessage[index].data.message.match(/\[[a-zA-Z]*\]/)[0];
let name: string = errorProp ? this.service.getNameByProp(errorProp.substr(1, errorProp.length-2)) : '';
if(name) {
let desc: any = this.allColumns.find((column: any) =>{
return Object.is(column.name, name);
});
this.$Notice.error({
title: (this.$t('app.commonWords.createFailed') as string),
desc: (desc ? desc.label : '') + " : " + item[name] + (this.$t('app.commonWords.isExist') as string) + '!',
});
} else {
this.$Notice.error({
title: (this.$t('app.commonWords.createFailed') as string),
desc: errorMessage[index].data.message?errorMessage[index].data.message:(this.$t('app.commonWords.sysException') as string),
});
}
} else if(Object.is(errorMessage[index].data.errorKey, 'DuplicateKeyException')){
<#if ctrl.getAllPSDEGridColumns?? && ctrl.getAllPSDEGridColumns()??>
<#list ctrl.getAllPSDEGridColumns() as column>
<#if column.getPSAppDEField?? && column.getPSAppDEField()?? && column.getPSAppDEField().isKeyField() && appde.getKeyPSAppDEField()?? && appde.getKeyPSAppDEField().getCodeName() == column.getPSAppDEField().getCodeName()>
<#assign columnKeyName = column.getName()?lower_case >
</#if>
</#list>
</#if>
<#if columnKeyName??>
let name: string = this.service.getNameByProp("${columnKeyName}");
if(name){
let desc: any = this.allColumns.find((column: any) =>{
return Object.is(column.name, name);
});
this.$Notice.error({
title: (this.$t('app.commonWords.createFailed') as string),
desc: (desc ? desc.label : '') + " : " + item[name] + (this.$t('app.commonWords.isExist') as string) + '!',
});
}
<#else>
this.$Notice.error({
title: (this.$t('app.commonWords.saveFailed') as string),
desc: errorMessage[index].data.message?errorMessage[index].data.message:(this.$t('app.commonWords.sysException') as string),
});
</#if>
}else {
this.$Notice.error({
title: (this.$t('app.commonWords.saveFailed') as string),
desc: errorMessage[index].data.message?errorMessage[index].data.message:(this.$t('app.commonWords.sysException') as string),
});
}
} else {
this.$Notice.error({ title: (this.$t('app.commonWords.saveFailed') as string), desc: (item[this.majorInfoColName]?item[this.majorInfoColName]:"") + (this.$t('app.commonWords.saveFailed') as string) + '!' });
}
});
}
return successItems;
......@@ -1990,9 +2313,7 @@ import { Environment } from '@/environments/environment';
const data = response.data;
this.createDefault(data);
data.rowDataState = "create";
let tempItems: any[] = [];
tempItems.push(data);
_this.items = tempItems.concat(_this.items);
this.items.splice(0,0,data);
_this.gridItemsModel.push(_this.getGridRowModel());
}).catch((response: any) => {
if (response && response.status === 401) {
......@@ -2037,11 +2358,12 @@ import { Environment } from '@/environments/environment';
public gridEditItemChange(row: any, property: string, value: any, rowIndex: number){
row.rowDataState = row.rowDataState ? row.rowDataState : "update" ;
if(Object.is(row.rowDataState,"update")){
if(!value && this.defaultUpdateItems.includes(property)){
if(this.defaultUpdateItems.includes(property)){
row.hasUpdated = true;
}
}
this.curEditRowData = row;
this.resetGridData(row, property, rowIndex);
this.validate(property,row,rowIndex);
<#if ctrl.getPSDEGridEditItems()??>
<#list ctrl.getPSDEGridEditItems() as editItem>
......@@ -2070,9 +2392,20 @@ import { Environment } from '@/environments/environment';
if (!mode || (mode && Object.is(mode, ''))) {
return;
}
<#if ctrl.getAllPSDEGridColumns?? && ctrl.getAllPSDEGridColumns()??>
<#list ctrl.getAllPSDEGridColumns() as column>
<#if column.getPSAppDEField?? && column.getPSAppDEField()?? && column.getPSAppDEField().isKeyField() && appde.getKeyPSAppDEField()?? && appde.getKeyPSAppDEField().getCodeName() == column.getPSAppDEField().getCodeName()>
<#assign columnKeyName = column.getName()?lower_case >
</#if>
</#list>
</#if>
let tempContext: any = this.$util.deepCopy(this.context);
<#if columnKeyName??>
Object.is(tempContext, { ${appde.getCodeName()?lower_case}: data.${columnKeyName} });
</#if>
const arg: any = JSON.parse(JSON.stringify(data));
Object.assign(arg,{viewparams:this.viewparams});
const post: Promise<any> = this.service.frontLogic(mode,JSON.parse(JSON.stringify(this.context)),arg, showloading);
const post: Promise<any> = this.service.frontLogic(mode,JSON.parse(JSON.stringify(tempContext)),arg, showloading);
post.then((response: any) => {
if (!response || response.status !== 200) {
this.$Notice.error({ title: (this.$t('app.commonWords.wrong') as string), desc: (this.$t('app.gridpage.formitemFailed') as string) });
......@@ -2176,7 +2509,7 @@ import { Environment } from '@/environments/environment';
*/
public createDefault(row: any){
<#list ctrl.getPSDEGridEditItems() as editItem><#t>
<#if editItem.getCreateDV?? && editItem.getCreateDV()?? && editItem.getCreateDV() !=""><#t>
<#if (editItem.getCreateDV?? || editItem.getCreateDVT??) && (editItem.getCreateDV()?? || editItem.getCreateDVT()??) && (editItem.getCreateDV() !="" || editItem.getCreateDVT() !="")><#t>
if (row.hasOwnProperty('${editItem.getCodeName()?lower_case}')) {
<#if !(editItem.getCreateDVT() == '')><#t>
<#-- 网页请求 -->
......@@ -2218,7 +2551,7 @@ import { Environment } from '@/environments/environment';
*/
public updateDefault(row: any){
<#list ctrl.getPSDEGridEditItems() as editItem><#t>
<#if editItem.getUpdateDV?? && editItem.getUpdateDV()?? && editItem.getUpdateDV() !=""><#t>
<#if (editItem.getUpdateDV?? || editItem.getUpdateDVT??) && (editItem.getUpdateDV()?? || editItem.getUpdateDVT()??) && (editItem.getUpdateDV() !="" || editItem.getUpdateDVT() !="")><#t>
if (row.hasOwnProperty('${editItem.getCodeName()?lower_case}') && !row.${editItem.getCodeName()?lower_case} && row.hasUpdated) {
<#if !(editItem.getUpdateDVT() == '')><#t>
<#-- 网页请求 -->
......@@ -2296,48 +2629,69 @@ import { Environment } from '@/environments/environment';
let startOp = (val:boolean)=>{
if(falg.isPast){
if(opValue){
falg.isPast = falg && val;
falg.isPast = falg.isPast && val;
}else{
falg.isPast = falg || val;
falg.isPast = falg.isPast || val;
}
}else{
falg.isPast = val;
}
}
rule[name].forEach((item:any) => {
for(let i=0; i < rule[name].length; i++) {
let item: any = rule[name][i];
if((value === null || value === undefined || value === "") && (item.type != 'GROUP')){
startOp(true);
return falg;
}
try {
// 常规规则
if(item.type == 'SIMPLE'){
startOp(!this.$verify.checkFieldSimpleRule(value,item.condOP,item.paramValue,item.ruleInfo,item.paramType,this.curEditRowData,item.isKeyCond));
falg.infoMessage = item.ruleInfo;
if(!falg.isPast) return falg;
}
// 数值范围
if(item.type == 'VALUERANGE2'){
startOp( !this.$verify.checkFieldValueRangeRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
falg.infoMessage = item.ruleInfo;
if(!falg.isPast) return falg;
}
// 正则式
if (item.type == "REGEX") {
startOp(!this.$verify.checkFieldRegExRule(value,item.regExCode,item.ruleInfo,item.isKeyCond));
falg.infoMessage = item.ruleInfo;
if(!falg.isPast) return falg;
}
// 长度
if (item.type == "STRINGLENGTH") {
startOp(!this.$verify.checkFieldStringLengthRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
falg.infoMessage = item.ruleInfo;
if(!falg.isPast) return falg;
}
// 系统值规则
if(item.type == "SYSVALUERULE") {
startOp(!this.$verify.checkFieldSysValueRule(value,item.sysRule.regExCode,item.ruleInfo,item.isKeyCond));
falg.infoMessage = item.ruleInfo;
if(!falg.isPast) return falg;
}
} catch(error) {
falg.infoMessage = item.ruleInfo;
startOp(false);
if(!falg.isPast) return falg;
}
// 分组
if(item.type == 'GROUP'){
falg = this.verifyDeRules('group',item,"AND",value)
falg = this.verifyDeRules('group',item,item.condOP?item.condOP:"AND",value)
if(item.isNotMode){
falg.isPast = !falg.isPast;
}
}
});
};
if(!falg.hasOwnProperty("isPast")){
falg.isPast = true;
}
if(!value){
if(!value && value != 0){
falg.isPast = true;
}
return falg;
......@@ -2381,6 +2735,49 @@ import { Environment } from '@/environments/environment';
})
}
/**
* 获取表格列禁用状态
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public getColumnDisabled(data:any,name:string){
if(this.allColumns || Array.isArray(this.allColumns)){
const curColumn:any = this.allColumns.find((item:any) =>{
return item.name === name;
})
if(curColumn.hasOwnProperty('enableCond')){
return data.srfuf == 1 ? (curColumn.enableCond & 2) !== 2 : (curColumn.enableCond & 1) !== 1
}else{
return false;
}
}
}
/**
* 重置表格项值
*
* @param {*} row 当前行
* @param {string} property 属性名
* @param {number} rowIndex 行下标
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public resetGridData(row: any, property: string, rowIndex: number) {
<#if ctrl.getPSDEGridColumns?? && ctrl.getPSDEGridColumns()??>
if(this.actualIsOpenEdit) {
<#list ctrl.getPSDEGridColumns() as column>
<#if column.getResetItemName?? && column.getResetItemName()??>
if(Object.is(property, '${column.getResetItemName()}')) {
this.onGridItemValueChange(row, {name: '${column.getName()}', value: null}, rowIndex);
<#if column.getValueItemName?? && column.getValueItemName()?? && column.getValueItemName() != ''>
this.onGridItemValueChange(row, {name: '${column.getValueItemName()}', value: null}, rowIndex);
</#if>
}
</#if>
</#list>
}
</#if>
}
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude>
......
......@@ -11,8 +11,10 @@ import ${srfclassname('${_appde.getCodeName()}')}Service from '@/service/${srffi
</#list>
<#if ctrl.getAggMode() == "ALL" && ctrl.getAggPSAppDataEntity()??>
<#assign aggAppDataEntity = ctrl.getAggPSAppDataEntity() >
<#if aggAppDataEntity.getId() != appde.getId()>
import ${srfclassname('${aggAppDataEntity.getCodeName()}')}Service from '@/service/${srffilepath2(aggAppDataEntity.getCodeName())}/${srffilepath2(aggAppDataEntity.getCodeName())}-service';
</#if>
</#if>
</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
......@@ -236,7 +238,7 @@ import ${srfclassname('${aggAppDataEntity.getCodeName()}')}Service from '@/servi
result.then((response) => {
//处理返回数据,补充判断标识
if(response.data){
Object.assign(response.data,{srfuf:0});
Object.assign(response.data,{srfuf:'0'});
}
resolve(response);
}).catch(response => {
......@@ -445,7 +447,7 @@ import ${srfclassname('${aggAppDataEntity.getCodeName()}')}Service from '@/servi
requestData[item.prop] = context[item.name];
}
}else{
if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0) || Object.is(data[item.name],"")) ){
if(item && item.isEditable && item.prop && item.name && data.hasOwnProperty(item.name)){
requestData[item.prop] = data[item.name];
}
}
......
<#-- BEGIN:获取父关系路由参数 -->
<#macro getDeResParameters currentView>
<#if currentView.isPSDEView()>
[
<#if currentView.getPSAppDERSPathCount() gt 0>
<#list currentView.getPSAppDERSPath(currentView.getPSAppDERSPathCount() - 1) as deRSPath>
<#assign majorPSAppDataEntity = deRSPath.getMajorPSAppDataEntity()/>
{ pathName: '${srfpluralize(majorPSAppDataEntity.codeName)?lower_case}', parameterName: '${majorPSAppDataEntity.getCodeName()?lower_case}' },
</#list>
</#if>
]
<#else>
[]
</#if>
</#macro>
<#-- END:获取父关系路由参数 -->
<#-- BEGIN:获取视图本身路由参数 -->
<#macro getParameters currentView>
[
<#if currentView.isPSDEView()>
<#assign appDataEntity = currentView.getPSAppDataEntity()/>
{ pathName: '${srfpluralize(appDataEntity.codeName)?lower_case}', parameterName: '${appDataEntity.getCodeName()?lower_case}' },
{ pathName: '${currentView.getPSDEViewCodeName()?lower_case}', parameterName: '${currentView.getPSDEViewCodeName()?lower_case}' }
<#else>
{ pathName: '${currentView.getCodeName()?lower_case}', parameterName: '${currentView.getCodeName()?lower_case}' }
</#if>
]
</#macro>
<#-- END:获取视图本身路由参数 -->
<#-- BEGIN:插入空格 -->
<#macro insertBlank num>
<#assign blank_space = " " />
<#list 1..num as i>
${blank_space}<#t>
</#list>
</#macro>
<#-- END:插入空格 -->
<#-- BEGIN:表格列标题自定义绘制 -->
<#macro getColumnHeader item blankNum>
<@insertBlank blankNum /><template v-slot:header="{column}">
<@insertBlank blankNum /> <span class="column-header <#if item.getHeaderPSSysCss?? && item.getHeaderPSSysCss()??>${item.getHeaderPSSysCss().getCssName()}</#if>">
<#if item.getPSSysImage?? && item.getPSSysImage()??>
<#assign img=item.getPSSysImage()>
<@insertBlank blankNum /> <i class='<#if img.getCssClass?? && img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if>'></i>
</#if>
<@insertBlank blankNum /> {{<#if langbase??>$t('${langbase}.columns.${item.getName()?lower_case}')<#else>'${item.getCaption()}'</#if>}}
<@insertBlank blankNum /> </span>
<@insertBlank blankNum /></template>
</#macro>
<#-- END:表格列标题自定义绘制 -->
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../../@MACRO/LANG_FUN.ftl
</#ibizinclude>
<template v-if="getColumnState('${item.getName()?lower_case}')">
<#if item.getColumnType() == 'GROUPGRIDCOLUMN' && item.getPSDEGridColumns()??>
<#-- [1]BEGIN:分组列 -->
<el-table-column show-overflow-tooltip :align="'${item.getAlign()?lower_case}'" :label="<#if langbase??>$t('${langbase}.columns.${item.getName()?lower_case}')<#else>'${item.getCaption()}'</#if>">
<@getColumnHeader item 4 />
<#list item.getPSDEGridColumns() as column>
${P.getPartCode(column,'COLUMN').code}
</#list>
</el-table-column>
<#-- [1]END:分组列 -->
<#elseif item.getColumnType() == 'UAGRIDCOLUMN'>
<#-- [2]BEGIN:操作列 -->
<el-table-column :column-key="'${item.getName()?lower_case}'" :label="<#if langbase??>$t('${langbase}.columns.${item.getName()?lower_case}')<#else>'${item.getCaption()}'</#if>"<#if item.getWidthUnit()!='STAR'> :width="${item.width?c}" <#else> :min-width="${item.width?c}" </#if> :align="'${item.getAlign()?lower_case}'">
<@getColumnHeader item 8 />
<template slot-scope="scope">
<div style="text-align: center;">
<#if item.getPSDEUIActionGroup().getPSDEUIActions()??>
<#list item.getPSDEUIActionGroup().getPSUIActionGroupDetails() as uiactionDetail>
<#if uiactionDetail.getPSUIAction?? && uiactionDetail.getPSUIAction()??>
<#assign uiaction = uiactionDetail.getPSUIAction() />
<#-- 取消分割线标签,使用样式替代分割线 start -->
<#-- @author ljy -->
<#-- @update 2020.7.21 -->
<#-- <#if preUIAction??>
<divider type='vertical' v-show="scope.row.${preUIAction.getUIActionTag()}.visible && scope.row.${uiaction.getUIActionTag()}.visible" ></divider>
</#if> -->
<#if !uiactionDetail.isShowCaption()>
<tooltip :transfer="true" :max-width="600">
</#if>
<a v-show="scope.row.${uiaction.getUIActionTag()}.visible" <#if !preUIAction??>:class="{'grid-first-uiaction':scope.row.${uiaction.getUIActionTag()}.visible && scope.row.${uiaction.getUIActionTag()}.visible}"</#if> <#if preUIAction??>:class="{'grid-uiaction-divider':scope.row.${preUIAction.getUIActionTag()}.visible && scope.row.${uiaction.getUIActionTag()}.visible}"</#if> :style="{'pointer-events':scope.row.${uiaction.getUIActionTag()}.disabled?'none':'auto'}" @click="uiAction(scope.row, '${uiaction.getUIActionTag()}', $event)">
<#-- 取消分割线标签,使用样式替代分割线 end -->
<#if uiactionDetail.isShowIcon()><i class='<#if uiaction.getIconCls?? && uiaction.getIconCls()??>${uiaction.getIconCls()}</#if>'></i></#if>
<#if uiactionDetail.isShowCaption()>{{<#if langbase??>$t('${langbase}.uiactions.${uiaction.getFullCodeName()?lower_case}')<#else>'${uiaction.getCaption()}'</#if>}}</#if>
</a>
<#if !uiactionDetail.isShowCaption()>
<div slot='content'>{{<#if langbase??>$t('${langbase}.uiactions.<#if uiaction.getPSAppDataEntity?? && uiaction.getPSAppDataEntity()??>${uiaction.getPSAppDataEntity().getCodeName()?lower_case}_</#if>${uiaction.getUIActionTag()?lower_case}')<#else>'${uiaction.getCaption()}'</#if>}}</div>
</tooltip>
</#if>
<#assign preUIAction = uiaction />
</#if>
</#list>
</#if>
</div>
</template>
</el-table-column>
<#-- [2]END:操作列 -->
<#elseif item.getColumnType() == 'DEFGRIDCOLUMN'>
<#-- [3]BEGIN:数据列 -->
<el-table-column show-overflow-tooltip :prop="'${item.getName()?lower_case}'" :label="<#if langbase??>$t('${langbase}.columns.${item.getName()?lower_case}')<#else>'${item.getCaption()}'</#if>"<#if item.getWidthUnit()!='STAR'> :width="${item.width?c}" <#else> :min-width="${item.width?c}" </#if> :align="'${item.getAlign()?lower_case}'"<#if (!ctrl.isNoSort()) && item.isEnableSort()> :sortable="'custom'"</#if>>
<@getColumnHeader item 8 />
<template v-slot="{row,column,$index}">
<#if (item.render??) || (item.getCodeList()?? && item.getCLConvertMode() == 'FRONT') || item.isEnableRowEdit()>
<#-- BEGIN:列绘制、前端绘制代码表、行编辑 -->
<#if (ctrl.isEnableRowEdit() && item.isEnableRowEdit())>
<#-- BEGIN:行编辑 -->
<#if (item.render??)>
<#-- BEGIN:列绘制 -->
<span>${item.render.code}</span>
<#-- END:列绘制 -->
<#else>
<template v-if="actualIsOpenEdit">
<app-form-item :error="gridItemsModel[$index][column.property].error">
${P.getEditorCode(item, "GRIDEIDTOR.vue").code}
</app-form-item>
</template>
</#if>
<#-- END:行编辑 -->
</#if>
<template <#if (ctrl.isEnableRowEdit() && item.isEnableRowEdit())>v-if="!actualIsOpenEdit"</#if>>
<#if item.getPSDEUIAction?? && item.getPSDEUIAction()??>
<a @click="uiAction(row, '${item.getPSDEUIAction().getUIActionTag()}', $event)">
</#if>
<#if (item.render??)>
<#-- BEGIN:列绘制 -->
<span>${item.render.code}</span>
<#-- END:列绘制 -->
<#elseif (item.getCodeList()?? && item.getCLConvertMode() == 'FRONT')>
<#-- BEGIN:前端绘制代码表 -->
<#assign codelist = item.getPSCodeList()>
<#if codelist.getCodeListType() == 'STATIC' || codelist.getCodeListType() == 'DYNAMIC'>
<codelist <#t>
:value="row.${item.getName()?lower_case}" <#t>
<#assign codelist=item.getPSCodeList() />
tag='${codelist.codeName}' <#t>
codelistType='${codelist.getCodeListType()}' <#t>
<#if codelist.getOrMode?? && codelist.getOrMode()?has_content>
renderMode="${codelist.getOrMode()}" <#t>
</#if>
<#if codelist.valueSeparator?has_content>
valueSeparator="${codelist.valueSeparator}" <#t>
</#if>
<#if codelist.textSeparator?has_content>
textSeparator="${codelist.textSeparator}" <#t>
</#if>><#t>
</codelist><#lt>
</#if>
<#-- END:前端绘制代码表 -->
<#else>
<#if item.isEnableLinkView()>
<#-- 支持链接视图-->
<#if item.getLinkPSAppView()??>
<#assign dataview = item.getLinkPSAppView() />
<#assign appLinkView>
viewname: '${srffilepath2(dataview.getCodeName())}', height: ${dataview.getHeight()?c},width: ${dataview.getWidth()?c},title: <@getViewLanguageTitle dataview />,placement: '${dataview.getOpenMode()}', isRedirectView: <#if dataview.isRedirectView()>true<#else>false</#if>,deResParameters: <@getDeResParameters dataview />,parameters: <@getParameters dataview />
</#assign>
</#if>
<app-column-link
deKeyField='<#if dataview.isPSDEView()>${dataview.getPSAppDataEntity().getCodeName()?lower_case}</#if>'
:context="JSON.parse(JSON.stringify(context))"
:viewparams="JSON.parse(JSON.stringify(viewparams))"
:data="row"
:linkview="{<#compress><#if appLinkView??>${appLinkView}</#if></#compress>}"
valueitem="<#if item.getLinkValueItem()??>${item.getLinkValueItem()}</#if>">
<#-- BEGIN:常规显示 -->
<#if item.getPSDEGridEditItem()?? && item.getPSDEGridEditItem().getPSEditorType?? && item.getPSDEGridEditItem().getPSEditorType()??>
<app-span name='${item.name}' editorType="${item.getPSDEGridEditItem().getPSEditorType().getStandardPSEditorType()}" :value="row.${item.getName()?lower_case}"></app-span>
<#else>
<span>{{row.${item.getName()?lower_case}}}</span>
</#if>
</app-column-link>
<#else>
<#if item.getPSDEGridEditItem()?? && item.getPSDEGridEditItem().getPSEditorType?? && item.getPSDEGridEditItem().getPSEditorType()??>
<app-span name='${item.name}' editorType="${item.getPSDEGridEditItem().getPSEditorType().getStandardPSEditorType()}" :value="row.${item.getName()?lower_case}" <#t>
<#if item.getPSDEField().getDataType()!="">
dataType="${item.getPSDEField().getDataType()}" <#t>
</#if>
<#if item.getPSDEField().getPrecision()??>
precision="${item.getPSDEField().getPrecision()}" <#t></#if>></app-span>
<#else>
<#if item.getValueFormat()?? && item.getValueFormat() != "%1$s">
<app-format-data format="${item.getValueFormat()}" :data="row.${item.getName()?lower_case}"></app-format-data>
<#elseif item.getPSDEField?? && item.getPSDEField()?? && (item.getPSDEField().getDataType() == "DECIMAL" || item.getPSDEField().getDataType() == "FLOAT" || item.getPSDEField().getDataType() == "CURRENCY")>
<app-format-data dataType="${item.getPSDEField().getDataType()}" precision="${item.getPSDEField().getPrecision()}" :data="row.${item.getName()?lower_case}"></app-format-data>
<#else>
<span>{{row.${item.getName()?lower_case}}}</span>
</#if>
</#if>
</#if>
<#-- END:常规显示 -->
</#if>
<#if item.getPSDEUIAction?? && item.getPSDEUIAction()??>
</a>
</#if>
</template>
<#-- END:列绘制、前端绘制代码表、行编辑 -->
<#else>
<#if item.isEnableLinkView()>
<#-- 支持链接视图-->
<#if item.getLinkPSAppView()??>
<#assign dataview = item.getLinkPSAppView() />
<#assign appLinkView>
viewname: '${srffilepath2(dataview.getCodeName())}', height: ${dataview.getHeight()?c},width: ${dataview.getWidth()?c},title: <@getViewLanguageTitle dataview />,placement: '${dataview.getOpenMode()}', isRedirectView: <#if dataview.isRedirectView()>true<#else>false</#if>,deResParameters: <@getDeResParameters dataview />,parameters: <@getParameters dataview />
</#assign>
</#if>
<app-column-link deKeyField='<#if dataview.isPSDEView()>${dataview.getPSAppDataEntity().getCodeName()?lower_case}</#if>' :context="JSON.parse(JSON.stringify(context))" :viewparams="JSON.parse(JSON.stringify(viewparams))" :data="row" :linkview="{<#compress><#if appLinkView??>${appLinkView}</#if></#compress>}" valueitem="<#if item.getLinkValueItem()??>${item.getLinkValueItem()}</#if>">
<span>{{row.${item.getName()?lower_case}}}</span>
</app-column-link >
<#else>
<#if item.getPSDEUIAction?? && item.getPSDEUIAction()??>
<a @click="uiAction(row, '${item.getPSDEUIAction().getUIActionTag()}', $event)">
</#if>
<#if item.getValueFormat()?? && item.getValueFormat() != "%1$s">
<app-format-data format="${item.getValueFormat()}" :data="row.${item.getName()?lower_case}"></app-format-data>
<#elseif item.getPSDEField?? && item.getPSDEField()?? && (item.getPSDEField().getDataType() == "DECIMAL" || item.getPSDEField().getDataType() == "FLOAT" || item.getPSDEField().getDataType() == "CURRENCY")>
<app-format-data dataType="${item.getPSDEField().getDataType()}" precision="${item.getPSDEField().getPrecision()}" :data="row.${item.getName()?lower_case}"></app-format-data>
<#else>
<span>{{row.${item.getName()?lower_case}}}</span>
</#if>
<#if item.getPSDEUIAction?? && item.getPSDEUIAction()??>
</a>
</#if>
</#if>
</#if>
</template>
</el-table-column>
<#-- [3]END:数据列 -->
</#if>
</template>
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude>
<template>
<div :class="{ 'grid': true, 'show-paging-bar': isEnablePagingBar, 'hidden-paging-bar': !isEnablePagingBar }">
<#if ctrl.render?? || ctrl.getRender()??>
${ctrl.render.code}
<#else>
<i-form>
<div :style="{ height: isEnablePagingBar && items.length > 0 ? 'calc(100% - 50px)' : '100%', overflow: 'auto' }">
<app-vue-pivottable :datas="items" :allColumns="allColumns"></app-vue-pivottable>
</div>
<#if ctrl.isEnablePagingBar()>
<row class='grid-pagination' v-show="items.length > 0">
<page class='pull-right' @on-change="pageOnChange($event)"
@on-page-size-change="onPageSizeChange($event)"
:transfer="true" :total="totalrow"
show-sizer :current="curPage" :page-size="limit"
:page-size-opts="[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]" show-elevator show-total>
<span>
<span class="page-column">
<poptip transfer placement="top-start">
<i-button icon="md-menu">{{$t('app.gridpage.choicecolumns')}}</i-button>
<div slot="content">
<template v-for="col in allColumns">
<div :key="col.name"><el-checkbox v-model="col.show" @change="onColChange()">{{$t(col.langtag)}}</el-checkbox></div>
</template>
</div>
</poptip>
</span>
<span v-if="selections.length > 0" class="batch-toolbar">
<#if ctrl.getBatchPSDEToolbar?? && ctrl.getBatchPSDEToolbar()??>
<#assign batchToolbar = ctrl.getBatchPSDEToolbar()/>
<@ibizindent blank=12>
${P.getCtrlCode(batchToolbar, 'CONTROL.html').code}
</@ibizindent>
</#if>
</span>
<span class="page-button"><i-button icon="md-refresh" :title="$t('app.gridpage.refresh')" @click="pageRefresh()"></i-button></span>&nbsp;
<span>
{{$t('app.gridpage.show')}}&nbsp;
<span>
<template v-if="items.length === 1">
1
</template>
<template v-else>
<span>{{(curPage - 1) * limit + 1}}&nbsp;-&nbsp;{{totalrow > curPage * limit ? curPage * limit : totalrow}}</span>
</template>
</span>&nbsp;
{{$t('app.gridpage.records')}},{{$t('app.gridpage.totle')}}&nbsp;{{totalrow}}&nbsp;{{$t('app.gridpage.records')}}
</span>
</span>
</page>
</row>
</#if>
</#if>
</i-form>
</div>
</template>
<#assign import_block>
import CodeListService from "@/codelist/codelist-service";
import { FormItemModel } from '@/model/form-detail';
</#assign>
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl
</#ibizinclude>
/**
* 代码表服务对象
*
* @type {CodeListService}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public codeListService:CodeListService = new CodeListService({ $store: this.$store });
/**
* 获取多项数据
*
* @returns {any[]}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public getDatas(): any[] {
return this.selections;
}
/**
* 获取单项树
*
* @returns {*}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public getData(): any {
return this.selections[0];
}
<#if view.getPSAppViewLogics?? && view.getPSAppViewLogics()??>
<#list view.getPSAppViewLogics() as logic>
<#if logic.getPFLogicCodeType() == 'APP_NEWDATA'>
/**
* 打开新建数据视图
*
* @type {any}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop() public newdata: any;
</#if>
<#if logic.getPFLogicCodeType() == 'APP_OPENDATA'>
/**
* 打开编辑数据视图
*
* @type {any}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop() public opendata: any;
</#if>
</#list>
</#if>
/**
* 显示处理提示
*
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop({ default: true }) public showBusyIndicator?: boolean;
/**
* 部件行为--update
*
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop() public updateAction!: string;
/**
* 部件行为--fetch
*
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop() public fetchAction!: string;
/**
* 部件行为--remove
*
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop() public removeAction!: string;
/**
* 部件行为--load
*
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop() public loadAction!: string;
/**
* 部件行为--loaddraft
*
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop() public loaddraftAction!: string;
/**
* 部件行为--create
*
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop() public createAction!: string;
/**
* 当前页
*
* @type {number}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public curPage: number = 1;
/**
* 数据
*
* @type {any[]}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public items: any[] = [];
/**
* 是否支持分页
*
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public isEnablePagingBar: boolean = ${ctrl.isEnablePagingBar()?c};
/**
* 是否禁用排序
*
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public isNoSort: boolean = ${ctrl.isNoSort()?c};
/**
* 排序方向
*
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public minorSortDir: string = '<#if ctrl.getMinorSortDir()??>${ctrl.getMinorSortDir()}</#if>';
/**
* 排序字段
*
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public minorSortPSDEF: string = '<#if ctrl.getMinorSortPSDEF()??>${ctrl.getMinorSortPSDEF().getCodeName()?lower_case}</#if>';
/**
* 分页条数
*
* @type {number}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public limit: number = ${ctrl.getPagingSize()?c};
/**
* 是否显示标题
*
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public isHideHeader: boolean = ${ctrl.isHideHeader()?c};
/**
* 是否默认选中第一条数据
*
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop({ default: false }) public isSelectFirstDefault!: boolean;
/**
* 是否单选
*
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop() public isSingleSelect?: boolean;
/**
* 选中数据字符串
*
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop() public selectedData?: string;
/**
* 动态代码表集合
*
* @type {*}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public dCodeList: any = {};
/**
* 选中值变化
*
* @param {*} newVal
* @param {*} oldVal
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Watch('selectedData')
public onValueChange(newVal: any, oldVal: any) {
this.selections = [];
if(this.selectedData){
const refs: any = this.$refs;
if (refs.multipleTable) {
refs.multipleTable.clearSelection();
JSON.parse(this.selectedData).forEach((selection:any)=>{
let selectedItem = this.items.find((item:any)=>{
return Object.is(item.srfkey, selection.srfkey);
});
if(selectedItem){
this.rowClick(selectedItem);
}
});
}
}
}
/**
* 表格行数据默认激活模式
* 0 不激活
* 1 单击激活
* 2 双击激活
*
* @type {(number | 0 | 1 | 2)}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop({default: 2}) public gridRowActiveMode!: number;
/**
* 是否开启行编辑
*
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
@Prop({default: false}) public isOpenEdit!: boolean;
/**
* 实际是否开启行编辑
*
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public actualIsOpenEdit: boolean = this.isOpenEdit;
/**
* 总条数
*
* @type {number}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public totalrow: number = 0;
/**
* 选中行数据
*
* @type {any[]}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public selections: any[] = [];
/**
* 拦截行选中
*
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public stopRowClick: boolean = false;
<#if ctrl.getAggMode() == "ALL">
/**
* 表格聚合行为
*
* @type {string}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public aggAction:string ='<#if ctrl.getAggPSDEAction()??>${ctrl.getAggPSDEAction().getCodeName()}</#if>';
/**
* 远程数据
*
* @type {any}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public remoteData:any = {};
</#if>
<#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??>
<#assign quickToolbar = ctrl.getQuickPSDEToolbar()/>
${P.getCtrlCode(quickToolbar, 'CONTROL.vue').code}
</#if>
<#if ctrl.getBatchPSDEToolbar?? && ctrl.getBatchPSDEToolbar()??>
<#assign batchToolbar = ctrl.getBatchPSDEToolbar()/>
${P.getCtrlCode(batchToolbar, 'CONTROL.vue').code}
</#if>
/**
* 表格是否显示
*
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public isDisplay:boolean = <#if ctrl.getAggMode() == "ALL">false<#else>true</#if>;
/**
* 部件刷新
*
* @param {any[]} args
* @memberof ${srfclassname(ctrl.codeName)}
*/
public refresh(args: any[]): void {
this.load();
}
/**
* 选项框列宽
*
* @type {number}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public checkboxColWidth: number = <#if app.getPSApplicationUI()??>${app.getPSApplicationUI().getPFStyleParam('EL-TABLE.CHECKCOLWIDTH', 35)}<#else>35</#if>;
/**
* 是否允许拖动列宽
*
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public isDragendCol: boolean = <#if app.getPSApplicationUI()??>${app.getPSApplicationUI().getPFStyleParam('EL-TABLE.ISDRAGENDCOL',false)?c}<#else>false</#if>;
<#-- public isDragendCol: boolean = true; -->
/**
* 所有列成员
*
* @type {any[]}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public allColumns: any[] = [
<#if ctrl.getAllPSDEGridColumns()??>
<#list ctrl.getAllPSDEGridColumns() as column>
{
name: '${column.getName()?lower_case}',
label: '${column.getCaption()}',
langtag: '<#if langbase??>${langbase}.columns.${column.getName()?lower_case}</#if>',
show: <#if column.isHideDefault()>false<#else>true</#if>,
util: '${column.getWidthUnit()}',
render: (val: any) => {
return this.renderColValue('${column.getName()?lower_case}', val);
}
},
</#list>
</#if>
]
/**
* 表格模型集合
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public gridItemsModel: any[] = [];
/**
* 绘制列值
*
* @type {*}
* @memberof PivotTable
*/
public renderColValue(name: string, value: any) {
<#if ctrl.getAllPSDEGridColumns()??>
<#list ctrl.getAllPSDEGridColumns() as column>
<#if column.render?? || (column.getCodeList()?? && column.getCLConvertMode() == 'FRONT')>
if(Object.is('${column.getName()?lower_case}', name)) {
<#if column.render??>
${item.render.code}
<#elseif column.getCodeList()?? && column.getCLConvertMode() == 'FRONT'>
<#assign codelist = column.getPSCodeList()>
<#if codelist.getCodeListType() == 'STATIC'>
let codelist: any[] = this.$store.getters.getCodeList('${codelist.getCodeName()}');
if(codelist) {
return this.getCodeListItem(codelist, value);
}
<#elseif codelist.getCodeListType() == 'DYNAMIC'>
let items = this.dCodeList['${codelist.getCodeName()}'];
if(items) {
for(let i = 0; i < items.length; i++) {
if(Object.is(items[i].value, value)) {
return items[i].text;
}
}
}
</#if>
</#if>
}
</#if>
</#list>
</#if>
return value;
}
/**
* 获取代码项
*
* @public
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public getCodeListItem(codelist: any, val: any) {
for(let i = 0; i < codelist.items.length; i++) {
if(Object.is(codelist.items[i].value, val)) {
return codelist.items[i].text;
}
}
return codelist.emptytext;
}
/**
* 准备动态代码表数据集合
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public async readyDCodelist() {
<#assign num = 0>
let keys: string[] = [
<#if ctrl.getAllPSDEGridColumns()??>
<#list ctrl.getAllPSDEGridColumns() as column>
<#if column.getCodeList()?? && column.getCLConvertMode() == 'FRONT'>
<#assign codelist = column.getPSCodeList()>
<#if codelist.getCodeListType() == 'DYNAMIC'>
<#if num gt 0>,</#if>'${codelist.getCodeName()}'<#assign num = num + 1>
</#if>
</#if>
</#list>
</#if>
];
for (let key of keys) {
let items = await this.codeListService.getItems('UserRealName');
this.dCodeList[key] = items;
}
}
/**
* 获取表格行模型
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public getGridRowModel(){
return {
<#list ctrl.getPSDEGridEditItems() as edititem>
${edititem.getName()}: new FormItemModel(),
</#list>
}
}
/**
* 属性值规则
*
* @type {*}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public rules(){
return {
<#list ctrl.getPSDEGridEditItems() as edititem>
${edititem.getName()}: [
{ required: <#if edititem.isAllowEmpty()>false<#else>true</#if>, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: <#if edititem.getCaption?? && edititem.getCaption()??>'${edititem.getCaption()} 值不能为空'<#else>'值不能为空'</#if>, trigger: 'change' },
{ required: <#if edititem.isAllowEmpty()>false<#else>true</#if>, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: <#if edititem.getCaption?? && edititem.getCaption()??>'${edititem.getCaption()} 值不能为空'<#else>'值不能为空'</#if>, trigger: 'blur' },
<#if ctrl.getPSDEGridEditItemVRs?? && ctrl.getPSDEGridEditItemVRs()??>
<#list ctrl.getPSDEGridEditItemVRs() as fideValueRule>
<#if fideValueRule.getPSDEGridEditItemName() == edititem.getName()>
<#if fideValueRule.getPSSysValueRule()??>
<#assign valueRule = fideValueRule.getPSSysValueRule()/>
<#if valueRule.getRuleType?? && valueRule.getRuleType()??>
<#if valueRule.getRuleType() == "REG">
{ <#if valueRule.getRegExCode?? && valueRule.getRegExCode()??>pattern: /^${valueRule.getRegExCode()}$/</#if><#if valueRule.getRuleInfo?? && valueRule.getRuleInfo()??>, message: '${valueRule.getRuleInfo()}'</#if>, trigger: 'change' },
<#elseif valueRule.getRuleType() == "SCRIPT">
{ <#if valueRule.getScriptCode?? && valueRule.getScriptCode()??>validator: (rule:any, value:any, callback:any) => { ${valueRule.getScriptCode()} }</#if><#if valueRule.getRuleInfo?? && valueRule.getRuleInfo()??>, message: '${valueRule.getRuleInfo()}'</#if>, trigger: 'change' },
</#if>
</#if>
</#if>
</#if>
</#list>
</#if>
],
</#list>
}
}
/**
* 表格行编辑项校验
*
* @param {string} property 属性名
* @param {*} data 行数据
* @param {number} rowIndex 行索引
* @returns Promise<any>
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public validate(property:string, data:any, rowIndex:number):Promise<any>{
return new Promise((resolve, reject) => {
this.$util.validateItem(property,data,this.rules() as any).then(()=>{
this.gridItemsModel[rowIndex][property].setError(null);
resolve(true);
}).catch((res: any) => {
this.gridItemsModel[rowIndex][property].setError(res.errors[0].message);
resolve(false);
});
});
}
/**
* 校验所有修改过的编辑项
*
* @returns Promise<any>
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public async validateAll(){
let validateState = true;
let index = -1;
for(let item of this.items){
index++;
if(item.rowDataState === "create" || item.rowDataState === "update"){
for(let property of Object.keys(this.rules() as any)){
if(!await this.validate(property,item,index)){
validateState = false;
}
}
}
}
return validateState;
}
/**
* 表格数据加载
*
* @param {*} [arg={}]
* @memberof ${srfclassname(ctrl.codeName)}
*/
public load(opt: any = {}, pageReset: boolean = false): void {
if(!this.fetchAction){
this.$Notice.error({ title: '错误', desc: '${view.getName()}视图表格fetchAction参数未配置' });
return;
}
if(pageReset){
this.curPage = 1;
}
const arg: any = {...opt};
const page: any = {};
if (this.isEnablePagingBar) {
Object.assign(page, { page: this.curPage-1, size: this.limit });
}
// 设置排序
if (!this.isNoSort && !Object.is(this.minorSortDir, '') && !Object.is(this.minorSortPSDEF, '')) {
const sort: string = this.minorSortPSDEF+","+this.minorSortDir;
Object.assign(page, { sort: sort });
}
Object.assign(arg, page);
const parentdata: any = {};
this.$emit('beforeload', parentdata);
Object.assign(arg, parentdata);
let tempViewParams:any = parentdata.viewparams?parentdata.viewparams:{};
Object.assign(tempViewParams,JSON.parse(JSON.stringify(this.viewparams)));
Object.assign(arg,{viewparams:tempViewParams});
const post: Promise<any> = this.service.search(this.fetchAction,JSON.parse(JSON.stringify(this.context)), arg, this.showBusyIndicator);
post.then((response: any) => {
if (!response.status || response.status !== 200) {
if (response.errorMessage) {
this.$Notice.error({ title: '错误', desc: response.errorMessage });
}
return;
}
const data: any = response.data;
this.totalrow = response.total;
this.items = JSON.parse(JSON.stringify(data));
// 清空selections,gridItemsModel
this.selections = [];
this.gridItemsModel = [];
this.items.forEach(()=>{this.gridItemsModel.push(this.getGridRowModel())});
this.$emit('load', this.items);
// 设置默认选中
let _this = this;
setTimeout(() => {
if(_this.isSelectFirstDefault){
_this.rowClick(_this.items[0]);
}
if(_this.selectedData){
const refs: any = _this.$refs;
if (refs.multipleTable) {
refs.multipleTable.clearSelection();
JSON.parse(_this.selectedData).forEach((selection:any)=>{
let selectedItem = _this.items.find((item:any)=>{
return Object.is(item.srfkey, selection.srfkey);
});
if(selectedItem){
_this.rowClick(selectedItem);
}
});
}
}
}, 300);
<#if ctrl.getAggMode() == "ALL">
this.getAggData();
</#if>
}).catch((response: any) => {
if (response && response.status === 401) {
return;
}
this.$Notice.error({ title: '错误', desc: response.errorMessage });
});
}
/**
* 删除
*
* @param {any[]} datas
* @returns {Promise<any>}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public async remove(datas: any[]): Promise<any> {
if(!this.removeAction){
this.$Notice.error({ title: '错误', desc: '${view.getName()}视图表格removeAction参数未配置' });
return;
}
let _datas:any[] = [];
datas.forEach((record: any, index: number) => {
if (!record.srfkey) {
this.items.some((val: any, num: number) =>{
if(JSON.stringify(val) == JSON.stringify(record)){
this.items.splice(num,1);
this.gridItemsModel.splice(num,1);
return true;
}
});
}else{
_datas.push(datas[index]);
}
});
if (_datas.length === 0) {
return;
}
let dataInfo = '';
_datas.forEach((record: any, index: number) => {
let srfmajortext = record.${ctrl.getPSAppDataEntity().getMajorPSAppDEField().getCodeName()?lower_case};
if (index < 5) {
if (!Object.is(dataInfo, '')) {
dataInfo += '、';
}
dataInfo += srfmajortext;
} else {
return false;
}
});
if (_datas.length < 5) {
dataInfo = dataInfo + ' 共' + _datas.length + '条数据';
} else {
dataInfo = dataInfo + '...' + ' 共' + _datas.length + '条数据';
}
const removeData = () => {
let keys: any[] = [];
_datas.forEach((data: any) => {
keys.push(data.srfkey);
});
let _removeAction = keys.length > 1 ? 'removeBatch' : this.removeAction ;
let _keys = keys.length > 1 ? keys : keys[0] ;
const context:any = JSON.parse(JSON.stringify(this.context));
const post: Promise<any> = this.service.delete(_removeAction,Object.assign(context,{ ${ctrl.getPSAppDataEntity().codeName?lower_case}: _keys }),Object.assign({ ${ctrl.getPSAppDataEntity().codeName?lower_case}: _keys },{viewparams:this.viewparams}), this.showBusyIndicator);
return new Promise((resolve: any, reject: any) => {
post.then((response: any) => {
if (!response || response.status !== 200) {
this.$Notice.error({ title: '', desc: '删除数据失败,' + response.info });
return;
} else {
this.$Notice.success({ title: '', desc: '删除成功!' });
}
//删除items中已删除的项
console.log(this.items);
_datas.forEach((data: any) => {
this.items.some((item:any,index:number)=>{
if(Object.is(item.srfkey,data.srfkey)){
this.items.splice(index,1);
this.gridItemsModel.splice(index,1);
return true;
}
});
});
this.totalrow -= _datas.length;
this.$emit('remove', null);
this.selections = [];
resolve(response);
}).catch((response: any) => {
if (response && response.status === 401) {
return;
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: '错误', desc: '系统异常' });
reject(response);
return;
}
reject(response);
});
});
}
dataInfo = dataInfo.replace(/[null]/g, '').replace(/[undefined]/g, '');
this.$Modal.confirm({
title: '警告',
content: '确认要删除 ' + dataInfo + ',删除操作将不可恢复?',
onOk: () => {
removeData();
},
onCancel: () => { }
});
return removeData;
}
/**
* 批量添加
*
* @param {*} [arg={}]
* @memberof ${srfclassname(ctrl.codeName)}
*/
public addBatch(arg: any = {}): void {
if(!this.fetchAction){
this.$Notice.error({ title: '错误', desc: '${view.getName()}视图表格fetchAction参数未配置' });
return;
}
if(!arg){
arg = {};
}
console.error("批量添加未实现");
<#-- const post: Promise<any> = this.$http.post(this.fetchAction, arg, this.showBusyIndicator);
post.then((response: any) => {
if (response.ret !== 200) {
this.$Notice.error({ title: '', desc: '批量添加失败,' + response.info });
return;
}
this.load({});
this.$emit('addbatch', null);
}).catch((response: any) => {
if (response && response.status === 401) {
return;
}
this.$Notice.error({ title: '', desc: '批量添加失败' });
}); -->
}
/**
* 数据导入
*
* @param {*} data
* @memberof ${srfclassname(ctrl.codeName)}
*/
public importExcel(data:any ={}):void{
//导入excel
const importDataModel:any ={
<#if ctrl.getPSDEDataImport?? && ctrl.getPSDEDataImport()??>
<#assign dataImport = ctrl.getPSDEDataImport() />
importId:'${dataImport.getCodeName()}',
serviceName:'${dataImport.getPSAppDataEntity().getCodeName()?lower_case}',
appDeLogicName:'${dataImport.getPSAppDataEntity().getLogicName()}',
importData:{
<#if dataImport.getPSDEDataImportItems()??>
<#list dataImport.getPSDEDataImportItems() as dataImportItem>
"${dataImportItem.getName()}":{<#if dataImportItem.getPSCodeList()??><#assign codelist = dataImportItem.getPSCodeList()/>"codelist":{"type":"${codelist.getCodeListType()}","tag":"${codelist.getCodeName()}","isnumber":${codelist.isCodeItemValueNumber()?c}},</#if>"headername":"${dataImportItem.getCaption()}","isuniqueitem":${dataImportItem.isUniqueItem()?c},<#if dataImportItem.getPSAppDEField()??><#assign appDeField = dataImportItem.getPSDEField()/>"name":"${appDeField.getCodeName()?lower_case}","order":<#if appDeField.getImportOrder()??>${appDeField.getImportOrder()?c}</#if></#if>}<#if dataImportItem_has_next>,</#if>
</#list>
</#if>
}
</#if>
}
if(Object.keys(importDataModel).length == 0){
this.$Notice.warning({ 'title': (this.$t("app.utilview.warning") as string), 'desc': (this.$t("app.utilview.info") as string) });
return;
}
const view:any ={
viewname: 'app-data-upload',
title: this.$t("app.utilview.importview"),
width: 900,
height: 700
}
let container: Subject<any> = this.$appmodal.openModal(view, JSON.parse(JSON.stringify(this.context)), importDataModel);
container.subscribe((result: any) => {
if(Object.is(result.ret,'OK')){
this.refresh(result.datas);
}
});
}
<#assign hasDEExport = false />
<#if ctrl.getPSDEDataExport?? && ctrl.getPSDEDataExport()??>
<#assign hasDEExport = true />
/**
* 所有导出列成员
*
* @type {any[]}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public allExportColumns: any[] = [
<#if ctrl.getPSDEDataExport().getPSDEDataExportItems()??>
<#list ctrl.getPSDEDataExport().getPSDEDataExportItems() as column>
{
name: '${column.getName()?lower_case}',
label: '${column.getCaption()}',
langtag: '<#if langbase??>${langbase}.exportColumns.${column.getName()?lower_case}</#if>',
show: true,
},
</#list>
</#if>
]
</#if>
/**
* 数据导出
*
* @param {*} data
* @memberof ${srfclassname(ctrl.codeName)}
*/
public exportExcel(data: any = {}): void {
// 导出Excel
const doExport = async (_data:any) => {
const tHeader: Array<any> = [];
const filterVal: Array<any> = [];
<#if hasDEExport>
this.allExportColumns.forEach((item: any) => {
<#else>
this.allColumns.forEach((item: any) => {
</#if>
item.show && item.label ? tHeader.push(this.$t(item.langtag)) : "";
item.show && item.name ? filterVal.push(item.name) : "";
});
const data = await this.formatExcelData(filterVal, _data);
this.$export.exportExcel().then((excel:any)=>{
excel.export_json_to_excel({
header: tHeader, //表头 必填
data, //具体数据 必填
filename: "${ctrl.getPSAppDataEntity().getLogicName()}表", //非必填
autoWidth: true, //非必填
bookType: "xlsx" //非必填
});
});
};
const page: any = {};
// 设置page,size
if (Object.is(data.type, 'maxRowCount')) {
Object.assign(page, { page: 0, size: data.maxRowCount });
} else if (Object.is(data.type, 'activatedPage')) {
<#if hasDEExport>
Object.assign(page, { page: this.curPage-1, size: this.limit });
<#else>
try {
doExport(JSON.parse(JSON.stringify(this.items)));
} catch (error) {
console.error(error);
}
return;
</#if>
}
// 设置排序
if (!this.isNoSort && !Object.is(this.minorSortDir, '') && !Object.is(this.minorSortPSDEF, '')) {
const sort: string = this.minorSortPSDEF+","+this.minorSortDir;
Object.assign(page, { sort: sort });
}
const arg: any = {};
Object.assign(arg, page);
// 获取query,搜索表单,viewparams等父数据
const parentdata: any = {};
this.$emit('beforeload', parentdata);
Object.assign(arg, parentdata);
<#if hasDEExport>
const post: Promise<any> = this.service.searchDEExportData(this.fetchAction,JSON.parse(JSON.stringify(this.context)), arg, this.showBusyIndicator);
<#else>
const post: Promise<any> = this.service.search(this.fetchAction,JSON.parse(JSON.stringify(this.context)), arg, this.showBusyIndicator);
</#if>
post.then((response: any) => {
if (!response || response.status !== 200) {
this.$Notice.error({ title: '', desc: '数据导出失败,' + response.info });
return;
}
try {
doExport(JSON.parse(JSON.stringify(response.data)));
} catch (error) {
console.error(error);
}
}).catch((response: any) => {
if (response && response.status === 401) {
return;
}
this.$Notice.error({ title: '', desc: '数据导出失败' });
});
}
/**
* 导出数据格式化
*
* @param {*} filterVal
* @param {*} jsonData
* @returns {[]}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public async formatExcelData(filterVal:any, jsonData:any) {
let codelistColumns:Array<any> = [
<#if hasDEExport>
<#assign exportItems = ctrl.getPSDEDataExport().getPSDEDataExportItems() />
<#else>
<#assign exportItems = ctrl.getAllPSDEGridColumns() />
</#if>
<#if exportItems??>
<#list exportItems as column>
<#if (hasDEExport || (!column.isHideDefault() && column.getName() != '')) && column.getCodeList?? && column.getCodeList()?? && column.getCLConvertMode() == 'FRONT'>
<#assign codelist = column.getPSCodeList()>
<#if codelist.getCodeListType() == 'STATIC' || codelist.getCodeListType() == 'DYNAMIC'>
{
name: '${column.getName()?lower_case}',
srfkey: '${codelist.codeName}',
codelistType : '${codelist.getCodeListType()}',
<#if codelist.getOrMode() == 'STR'>
textSeparator: '${codelist.textSeparator}',
renderMode: 'string',
valueSeparator: "${codelist.valueSeparator}",
<#elseif codelist.getOrMode() == 'NUM'>
renderMode: 'number',
textSeparator: '${codelist.textSeparator}',
valueSeparator: ',',
<#else>
renderMode: 'other',
textSeparator: '、',
valueSeparator: ',',
</#if>
},
</#if>
</#if>
</#list>
</#if>
];
let _this = this;
for (const codelist of codelistColumns) {
// 动态代码表处理
if (Object.is(codelist.codelistType, "DYNAMIC")) {
let items = await _this.codeListService.getItems(codelist.srfkey);
jsonData.forEach((row:any)=>{
row[codelist.name] = _this.getCodelistValue(items, row[codelist.name], codelist);
});
// 静态处理
} else if(Object.is(codelist.codelistType, "STATIC")){
let items = await _this.$store.getters.getCodeListItems(codelist.srfkey);
jsonData.forEach((row:any)=>{
row[codelist.name] = _this.getCodelistValue(items, row[codelist.name], codelist);
});
}
}
return jsonData.map((v:any) => filterVal.map((j:any) => v[j]))
}
/**
* 解析代码表和vlaue,设置items
*
* @public
* @param {any[]} items 代码表数据
* @param {*} value
* @returns {*}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public getCodelistValue(items: any[], value: any, codelist: any,){
if(!value){
return this.$t('codelist.'+codelist.srfkey+'.empty');
}
if (items) {
let result:any = [];
if(Object.is(codelist.renderMode,"number")){
items.map((_item: any, index: number)=>{
const nValue = parseInt((value as any), 10);
const codevalue = _item.value;
if((parseInt(codevalue, 10) & nValue) > 0){
result.push(_item);
}
});
} else if(Object.is(codelist.renderMode,"string")){
const arrayValue: Array<any> = (value as any).split(codelist.valueSeparator);
arrayValue.map((value: any, index: number) => {
result.push([]);
let values: any[] = Object.is(this.$util.typeOf(value), 'number') ? [value] : [...(value as any).split(codelist.valueSeparator)];
values.map((val:any ,num: number)=>{
const item = this.getItem(items, val, codelist);
if(item){
result[index].push(item);
}
});
});
} else {
let values: any[] = Object.is(this.$util.typeOf(value), 'number') ? [value] : [...(value as any).split(codelist.valueSeparator)];
values.map((value:any ,index: number)=>{
const item = this.getItem(items, value, codelist);
if(item){
result.push(item);
}
});
}
// 设置items
if(result.length != 0){
return result.join(codelist.valueSeparator);
}else{
return value;
}
}
}
/**
* 获取代码项
*
* @public
* @param {any[]} items
* @param {*} value
* @returns {*}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public getItem(items: any[], value: any, codelist: any): any {
const arr: Array<any> = items.filter(item => {return item.value == value});
if (arr.length !== 1) {
return undefined;
}
if(Object.is(codelist.codelistType,'STATIC')){
return this.$t('codelist.'+codelist.srfkey+'.'+arr[0].value);
}else{
return arr[0].text;
}
}
/**
* 生命周期
*
* @memberof ${srfclassname(ctrl.codeName)}
*/
public created(): void {
this.afterCreated();
}
/**
* 执行created后的逻辑
*
* @memberof ${srfclassname(ctrl.codeName)}
*/
public afterCreated(){
this.readyDCodelist();
this.setColState();
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);
}
if (Object.is('remove', action)) {
this.remove(data);
}
if (Object.is('save', action)) {
this.save(data);
}
});
}
}
/**
* vue 生命周期
*
* @memberof ${srfclassname(ctrl.codeName)}
*/
public destroyed() {
this.afterDestroy();
}
/**
* 执行destroyed后的逻辑
*
* @memberof ${srfclassname(ctrl.codeName)}
*/
public afterDestroy() {
if (this.viewStateEvent) {
this.viewStateEvent.unsubscribe();
}
<#if destroyed_block??>
${destroyed_block}
</#if>
}
/**
* 获取选中行胡数据
*
* @returns {any[]}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public getSelection(): any[] {
return this.selections;
}
/**
* 行双击事件
*
* @param {*} $event
* @returns {void}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public rowDBLClick($event: any): void {
if (!$event || this.actualIsOpenEdit || Object.is(this.gridRowActiveMode,0)) {
return;
}
this.selections = [];
this.selections.push(JSON.parse(JSON.stringify($event)));
const refs: any = this.$refs;
if (refs.multipleTable) {
refs.multipleTable.clearSelection();
refs.multipleTable.toggleRowSelection($event);
}
this.$emit('rowdblclick', this.selections);
this.$emit('selectionchange', this.selections);
}
/**
* 复选框数据选中
*
* @param {*} $event
* @returns {void}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public select($event: any): void {
if (!$event) {
return;
}
this.selections = [];
this.selections = [...JSON.parse(JSON.stringify($event))];
this.$emit('selectionchange', this.selections);
}
/**
* 复选框数据全部选中
*
* @param {*} $event
* @memberof ${srfclassname(ctrl.codeName)}
*/
public selectAll($event: any): void {
if (!$event) {
return;
}
this.selections = [];
this.selections = [...JSON.parse(JSON.stringify($event))];
this.$emit('selectionchange', this.selections);
}
/**
* 行单击选中
*
* @param {*} $event
* @returns {void}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public rowClick($event: any, ifAlways: boolean = false): void {
if (!ifAlways && (!$event || this.actualIsOpenEdit)) {
return;
}
if(this.stopRowClick) {
this.stopRowClick = false;
return;
}
if(this.isSingleSelect){
this.selections = [];
}
// 已选中则删除,没选中则添加
let selectIndex = this.selections.findIndex((item:any)=>{
return Object.is(item.${ctrl.getPSDataEntity().getName()?lower_case},$event.${ctrl.getPSDataEntity().getName()?lower_case});
});
if (Object.is(selectIndex,-1)){
this.selections.push(JSON.parse(JSON.stringify($event)));
} else {
this.selections.splice(selectIndex,1);
}
const refs: any = this.$refs;
if (refs.multipleTable) {
if(this.isSingleSelect){
refs.multipleTable.clearSelection();
refs.multipleTable.setCurrentRow($event);
}else{
refs.multipleTable.toggleRowSelection($event);
}
}
this.$emit('selectionchange', this.selections);
}
/**
* 页面变化
*
* @param {*} $event
* @returns {void}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public pageOnChange($event: any): void {
if (!$event) {
return;
}
if ($event === this.curPage) {
return;
}
this.curPage = $event;
this.load({});
}
/**
* 分页条数变化
*
* @param {*} $event
* @returns {void}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public onPageSizeChange($event: any): void {
if (!$event) {
return;
}
if ($event === this.limit) {
return;
}
this.limit = $event;
if (this.curPage === 1) {
this.load({});
}
}
/**
* 分页刷新
*
* @memberof ${srfclassname(ctrl.codeName)}
*/
public pageRefresh(): void {
this.load({});
}
/**
* 排序变化
*
* @param {{ column: any, prop: any, order: any }} { column, prop, order }
* @memberof ${srfclassname(ctrl.codeName)}
*/
public onSortChange({ column, prop, order }: { column: any, prop: any, order: any }): void {
const dir = Object.is(order, 'ascending') ? 'asc' : Object.is(order, 'descending') ? 'desc' : '';
if (Object.is(dir, this.minorSortDir) && Object.is(this.minorSortPSDEF, prop)) {
return;
}
this.minorSortDir = dir;
this.minorSortPSDEF = prop ? prop : '';
this.load({});
}
/**
* 表格行选中样式
*
* @param {{ row: any, rowIndex: any }} { row, rowIndex }
* @returns {string}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public onRowClassName({ row, rowIndex }: { row: any, rowIndex: any }): string {
const index = this.selections.findIndex((select: any) => Object.is(select.srfkey, row.srfkey));
return index !== -1 ? 'grid-row-select' : '';
}
<#if ctrl.getAggMode() != "NONE">
/**
* 合计行绘制
*
* @param {any} param
* @memberof ${srfclassname(ctrl.codeName)}
*/
public getSummaries(param:any){
<#if ctrl.getAggMode() == "PAGE">
const { columns, data } = param;
const sums:Array<any> = [];
columns.forEach((column:any, index:number) => {
if (index === 0) {
sums[index] = '合计';
return;
}
if(index === (columns.length - 1)){
sums[index] = '';
return;
}
const values = data.map((item:any) => Number(item[column.property]));
if (!values.every((value:any) => isNaN(value))) {
<#if ctrl.getPSDEGridColumns()??>
<#list ctrl.getPSDEGridColumns() as singleColumn>
<#if singleColumn.getAggMode() == "SUM">
if(Object.is(column.property,'${singleColumn.getCodeName()?lower_case}')){
let tempData = values.reduce((prev:any, curr:any) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = tempData;
}
<#elseif singleColumn.getAggMode() == "AVG">
if(Object.is(column.property,'${singleColumn.getCodeName()?lower_case}')){
let tempData = values.reduce((prev:any, curr:any) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = tempData/data.length;
}
<#elseif singleColumn.getAggMode() == "MAX">
if(Object.is(column.property,'${singleColumn.getCodeName()?lower_case}')){
let tempData:any;
values.forEach((item:any) =>{
const value = Number(item);
if (!isNaN(value)) {
if(!tempData){
tempData = value;
}
if(value > tempData){
tempData = value;
}
}
});
sums[index] = tempData;
}
<#elseif singleColumn.getAggMode() == "MIN">
if(Object.is(column.property,'${singleColumn.getCodeName()?lower_case}')){
let tempData:any;
values.forEach((item:any) =>{
const value = Number(item);
if (!isNaN(value)) {
if(!tempData){
tempData = value;
}
if(value < tempData){
tempData = value;
}
}
});
sums[index] = tempData;
}
</#if>
</#list>
</#if>
} else {
sums[index] = 'N/A';
}
});
return sums;
<#elseif ctrl.getAggMode() == "ALL">
const { columns } = param;
const sums:Array<any> = [];
columns.forEach((column:any, index:number) => {
if (index === 0) {
sums[index] = '合计';
return;
}else if(index === (columns.length - 1)){
sums[index] = '';
return;
}else{
<#if ctrl.getPSDEGridColumns()??>
sums[index] = 'N/A';
<#list ctrl.getPSDEGridColumns() as singleColumn>
<#if singleColumn.getAggMode() != "NONE">
if(Object.is(column.property,'${singleColumn.getCodeName()?lower_case}')){
const value = Number(this.remoteData.${singleColumn.getCodeName()?lower_case});
if (!isNaN(value)) {
<#if singleColumn.getAggMode() == "SUM">
sums[index] = value;
<#elseif singleColumn.getAggMode() == "AVG">
sums[index] = value;
<#elseif singleColumn.getAggMode() == "MAX">
sums[index] = value;
<#elseif singleColumn.getAggMode() == "MIN">
sums[index] = value;
</#if>
}
}
</#if>
</#list>
</#if>
}
});
return sums;
</#if>
}
</#if>
<#if ctrl.getAggMode() == "ALL">
/**
* 远程获取合计行数据
*
* @memberof ${srfclassname(ctrl.codeName)}
*/
public getAggData(){
this.service.getAggData(this.aggAction,JSON.parse(JSON.stringify(this.context)),this.showBusyIndicator).then((response:any) =>{
if (!response.status || response.status !== 200) {
if (response.errorMessage) {
this.$Notice.error({ title: '错误', desc: response.errorMessage });
}
return;
}
this.remoteData = response.data;
this.isDisplay = true;
}).catch((response:any) =>{
if (response && response.status === 401) {
return;
}
this.remoteData = {};
this.isDisplay = true;
this.$Notice.error({ title: '错误', desc: response.errorMessage });
})
}
</#if>
/**
* 界面行为
*
* @param {*} row
* @param {*} tag
* @param {*} $event
* @memberof ${srfclassname(ctrl.codeName)}
*/
public uiAction(row: any, tag: any, $event: any) {
<#-- this.rowClick(row, true); -->
$event.stopPropagation();
<#if ctrl.getPSAppViewLogics()??>
<#list ctrl.getPSAppViewLogics() as logic>
<#if logic.getPSAppViewUIAction().getPSUIAction()??>
<#assign action = logic.getPSAppViewUIAction().getPSUIAction()>
if(Object.is('${action.getUIActionTag()}', tag)) {
this.${logic.getName()}(row, tag, $event);
}
</#if>
</#list>
</#if>
}
/**
* 设置列状态
*
* @memberof ${srfclassname(ctrl.codeName)}
*/
public setColState() {
const _data: any = localStorage.getItem('${ctrl.getPSDataEntity().getName()?lower_case}_${ctrl.getCodeName()?lower_case}_${ctrl.name}');
if (_data) {
let columns = JSON.parse(_data);
columns.forEach((col: any) => {
let column = this.allColumns.find((item) => Object.is(col.name, item.name));
if (column) {
Object.assign(column, col);
}
});
}
}
/**
* 列变化
*
* @memberof ${srfclassname(ctrl.codeName)}
*/
public onColChange() {
localStorage.setItem('${ctrl.getPSDataEntity().getName()?lower_case}_${ctrl.getCodeName()?lower_case}_${ctrl.name}', JSON.stringify(this.allColumns));
}
/**
* 获取列状态
*
* @param {string} name
* @returns {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public getColumnState(name: string): boolean {
let column = this.allColumns.find((col: any) =>
Object.is(name, col.name)
);
return column.show ? true : false;
}
/**
* 表格列是否自适应布局
*
* @readonly
* @type {boolean}
* @memberof ${srfclassname(ctrl.codeName)}
*/
get adaptiveState(): boolean {
return !this.allColumns.find((column: any) => column.show && Object.is(column.util, 'STAR'));
}
/**
* 保存
*
* @param {*} $event
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public async save(args: any[], params?: any, $event?: any, xData?: any){
let _this = this;
if(!await this.validateAll()){
this.$Notice.error({ title: '错误', desc: '值规则校验异常' });
return [];
}
let successItems:any = [];
let errorItems:any = [];
let errorMessage:any = [];
for (const item of _this.items) {
try {
if(Object.is(item.rowDataState, 'create')){
if(!this.createAction){
this.$Notice.error({ title: '错误', desc: '${view.getName()}视图表格createAction参数未配置' });
}else{
Object.assign(item,{viewparams:this.viewparams});
let response = await this.service.add(this.createAction, JSON.parse(JSON.stringify(this.context)),item, this.showBusyIndicator);
successItems.push(JSON.parse(JSON.stringify(response.data)));
}
}else if(Object.is(item.rowDataState, 'update')){
if(!this.updateAction){
this.$Notice.error({ title: '错误', desc: '${view.getName()}视图表格updateAction参数未配置' });
}else{
Object.assign(item,{viewparams:this.viewparams});
<#if de??>
if(item.${appde.getCodeName()?lower_case}){
Object.assign(this.context,{${appde.getCodeName()?lower_case}:item.${appde.getCodeName()?lower_case}});
}
</#if>
let response = await this.service.add(this.updateAction,JSON.parse(JSON.stringify(this.context)),item, this.showBusyIndicator);
successItems.push(JSON.parse(JSON.stringify(response.data)));
}
}
} catch (error) {
errorItems.push(JSON.parse(JSON.stringify(item)));
errorMessage.push(error);
}
}
this.$emit('save', successItems);
this.refresh([]);
if(errorItems.length === 0){
this.$Notice.success({ title: '', desc: '保存成功!' });
}else{
errorItems.forEach((item:any,index:number)=>{
this.$Notice.error({ title: '保存失败', desc: item.majorentityname+'保存失败!' });
console.error(errorMessage[index]);
});
}
return successItems;
}
<#if ctrl.isEnableRowEdit()>
/**
* 新建行
*
* @param {*} $event
* @returns {void}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public newRow(args: any[], params?: any, $event?: any, xData?: any): void {
if(!this.loaddraftAction){
this.$Notice.error({ title: '错误', desc: '${view.getName()}视图表格loaddraftAction参数未配置' });
return;
}
let _this = this;
Object.assign(args[0],{viewparams:this.viewparams});
let post: Promise<any> = this.service.loadDraft(this.loaddraftAction, JSON.parse(JSON.stringify(this.context)), args[0], this.showBusyIndicator);
post.then((response: any) => {
if (!response.status || response.status !== 200) {
if (response.errorMessage) {
this.$Notice.error({ title: '错误', desc: response.errorMessage });
}
return;
}
const data = response.data;
this.createDefault(data);
data.rowDataState = "create";
_this.items.push(data);
_this.gridItemsModel.push(_this.getGridRowModel());
}).catch((response: any) => {
if (response && response.status === 401) {
return;
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: '错误', desc: '系统异常' });
return;
}
});
}
/**
* 表格编辑项值变更
*
* @param row 行数据
* @param {{ name: string, value: any }} $event
* @returns {void}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public onGridItemValueChange(row: any,$event: { name: string, value: any },rowIndex: number): void {
if (!$event) {
return;
}
if (!$event.name || Object.is($event.name, '') || !row.hasOwnProperty($event.name)) {
return;
}
row[$event.name] = $event.value;
this.gridEditItemChange(row, $event.name, $event.value, rowIndex);
}
/**
* 表格编辑项值变化
*
* @public
* @param row 行数据
* @param property 列编辑项名
* @param row 列编辑项值
* @returns {void}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public gridEditItemChange(row: any, property: string, value: any, rowIndex: number){
row.rowDataState = row.rowDataState ? row.rowDataState : "update" ;
this.validate(property,row,rowIndex);
<#if ctrl.getPSDEGridEditItems()??>
<#list ctrl.getPSDEGridEditItems() as editItem>
<#if editItem.getPSDEGridEditItemUpdate()??>
<#assign itemUpdate=editItem.getPSDEGridEditItemUpdate()/>
if(Object.is(property, '${editItem.name}')){
const details: string[] = [<#list itemUpdate.getPSDEGEIUpdateDetails() as detail><#if detail_index gt 0>, </#if>'${detail.getPSDEGridColumnName()?lower_case}'</#list>];
this.updateGridEditItem('${itemUpdate.codeName}', row, details, ${itemUpdate.isShowBusyIndicator()?c});
}
</#if>
</#list>
</#if>
}
/**
* 表格编辑项更新
*
* @param {string} mode 界面行为名称
* @param {*} [data={}] 请求数据
* @param {string[]} updateDetails 更新项
* @param {boolean} [showloading] 是否显示加载状态
* @returns {void}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public updateGridEditItem(mode: string, data: any = {}, updateDetails: string[], showloading?: boolean): void {
if (!mode || (mode && Object.is(mode, ''))) {
return;
}
const arg: any = JSON.parse(JSON.stringify(data));
Object.assign(arg,{viewparams:this.viewparams});
const post: Promise<any> = this.service.frontLogic(mode,JSON.parse(JSON.stringify(this.context)),arg, showloading);
post.then((response: any) => {
if (!response || response.status !== 200) {
this.$Notice.error({ title: '错误', desc: '表单项更新失败' });
return;
}
const _data: any = response.data;
if(!_data){
return;
}
updateDetails.forEach((name: string) => {
if (!_data.hasOwnProperty(name)) {
return;
}
data[name] = _data[name];
});
}).catch((response: any) => {
if (response && response.status === 401) {
return;
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: '错误', desc: '系统异常' });
return;
}
});
}
</#if>
/**
* 获取对应行class
*
* @param {*} $args row 行数据,rowIndex 行索引
* @returns {void}
* @memberof ${srfclassname(ctrl.codeName)}
*/
public getRowClassName(args:{row: any,rowIndex: number}){
let isSelected = this.selections.some((item:any)=>{
return Object.is(item.${appde.getCodeName()?lower_case},args.row.${appde.getCodeName()?lower_case});
});
return isSelected ? "grid-selected-row" : "";
}
/**
* 新建默认值
* @param {*} row 行数据
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public createDefault(row: any){
<#list ctrl.getPSDEGridEditItems() as editItem><#t>
<#if editItem.getCreateDV?? && editItem.getCreateDV()??><#t>
<#if !(editItem.getCreateDV() == '')><#t>
if (row.hasOwnProperty('${editItem.getCodeName()?lower_case}')) {
<#-- 网页请求 -->
<#if editItem.getCreateDVT() == 'CONTEXT'>
row['${editItem.getCodeName()?lower_case}'] = this.viewparams['${editItem.getCreateDV()}'];
<#-- 用户全局对象 -->
<#elseif editItem.getCreateDVT() == 'SESSION'>
row['${editItem.getCodeName()?lower_case}'] = this.context['${editItem.getCreateDV()}'];
<#-- 当前应用数据 -->
<#elseif editItem.getCreateDVT() == 'APPDATA'>
row['${editItem.getCodeName()?lower_case}'] = this.context['${editItem.getCreateDV()}'];
<#-- 当前操作用户(名称) -->
<#elseif editItem.getCreateDVT() == 'OPERATORNAME'>
row['${editItem.getCodeName()?lower_case}'] = this.context['srfusername'];
<#-- 当前操作用户(编号) -->
<#elseif editItem.getCreateDVT() == 'OPERATOR'>
row['${editItem.getCodeName()?lower_case}'] = this.context['srfuserid'];
<#else>
<#-- 默认值 -->
<#assign datatype=srfjavatype(editItem.getPSAppDEField().getStdDataType())>
row['${editItem.getCodeName()?lower_case}'] = <#if datatype=='BigInteger' || datatype=='Integer' || datatype=='Double' || datatype=='Decimal' || datatype=='Float' || datatype=='BigDecimal'>${editItem.getCreateDV()}<#else>'${editItem.getCreateDV()}'</#if>;
</#if>
}
</#if>
</#if>
</#list>
}
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/HTML/GRID.html.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
\ 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 isDEExport: boolean = false;
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.getCodeName()}')}${srfclassname('${ctrl.name}')}Mode
*/
public getDataItems(): any[] {
if(this.isDEExport){
return [
<#-- 实体导出数据项 -->
<#if ctrl.getPSDEDataExport?? && ctrl.getPSDEDataExport()?? && ctrl.getPSDEDataExport().getPSDEDataExportItems()??>
<#list ctrl.getPSDEDataExport().getPSDEDataExportItems() as dataitem>
{
name: '${dataitem.getName()}',
<#if dataitem.getPSDEField()??>
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: '${dataitem.getPSDEField().getDataType()}',
</#if>
<#if ctrl.getPSDEGridEditItems()??>
<#list ctrl.getPSDEGridEditItems() as editItem>
<#if editItem.getName() == dataitem.getName()>
<#if editItem.isEditable()>
isEditable:${editItem.isEditable()?c}
</#if>
</#if>
</#list>
</#if>
},
</#list>
</#if>
]
}else{
return [
<#-- 表格数据项 -->
<#if ctrl.getPSDEGridDataItems()??>
<#list ctrl.getPSDEGridDataItems() as dataitem>
{
name: '${dataitem.getName()}',
<#if dataitem.getPSDEField()??>
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
dataType: '${dataitem.getPSDEField().getDataType()}',
</#if>
<#if ctrl.getPSDEGridEditItems()??>
<#list ctrl.getPSDEGridEditItems() as editItem>
<#if editItem.getName() == dataitem.getName()>
<#if editItem.isEditable()>
isEditable:${editItem.isEditable()?c}
</#if>
</#if>
</#list>
</#if>
},
</#list>
</#if>
<#-- 关联主实体的主键 -->
<#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: '${minorAppDERSs.getPSDER1N().getPSPickupDEField().getCodeName()?lower_case}',
dataType: 'FONTKEY',
},
</#if>
</#list>
</#if>
</#if>
<#if ctrl.getPSDEGridDataItems()??>
<#list ctrl.getPSDEGridDataItems() as dataitem>
<#-- 界面主键标识 -->
<#if dataitem.getPSDEField?? && dataitem.getPSDEField()??>
<#if !P.exists("importService", dataitem.getPSDEField().getId(), "")>
<#if dataitem.getPSDEField().isKeyDEField() == true>
{
name: '${ctrl.getPSAppDataEntity().getCodeName()?lower_case}',
prop: '${dataitem.getPSDEField().getCodeName()?lower_case}',
},
</#if>
</#if>
</#if>
</#list>
</#if>
<#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'MODEL_CONTENT.ts').code}
</#if>
{
name:'size',
prop:'size'
},
{
name:'query',
prop:'query'
},
{
name:'filter',
prop:'filter'
},
{
name:'page',
prop:'page'
},
{
name:'sort',
prop:'sort'
},
{
name:'srfparentdata',
prop:'srfparentdata'
},
// 前端新增修改标识,新增为"0",修改为"1"或未设值
{
name: 'srffrontuf',
prop: 'srffrontuf',
dataType: 'TEXT',
},
]
}
}
<#ibizinclude>
../@MACRO/MODEL/MODEL_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
<#assign import_block>
<#list ctrl.getPSDEGridEditItems() as deItem>
<#if deItem.getPSEditor()?? && deItem.getPSEditor().getPSAppDataEntity?? && deItem.getPSEditor().getPSAppDataEntity()??>
<#assign _appde = deItem.getPSEditor().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 ctrl.getAggMode() == "ALL" && ctrl.getAggPSAppDataEntity()??>
<#assign aggAppDataEntity = ctrl.getAggPSAppDataEntity() >
import ${srfclassname('${aggAppDataEntity.getCodeName()}')}Service from '@/service/${srffilepath2(aggAppDataEntity.getCodeName())}/${srffilepath2(aggAppDataEntity.getCodeName())}-service';
</#if>
</#assign>
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_HEADER.ts.ftl
</#ibizinclude>
/**
* 备份原生数据
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
private copynativeData:any;
/**
* 远端数据
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
private remoteCopyData:any = {};
<#list ctrl.getPSDEGridEditItems() as deItem>
<#if deItem.getPSEditor()?? && deItem.getPSEditor().getPSAppDataEntity?? && deItem.getPSEditor().getPSAppDataEntity()??>
<#assign _appde = deItem.getPSEditor().getPSAppDataEntity()/>
<#if _appde.getId() != appde.getId()>
<#if !P.exists("importService2", _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>
/**
* 处理数据
*
* @public
* @param {Promise<any>} promise
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public doItems(promise: Promise<any>, deKeyField: string, deName: string): Promise<any> {
return new Promise((resolve, reject) => {
promise.then((response: any) => {
if (response && response.status === 200) {
const data = response.data;
data.forEach((item:any,index:number) =>{
item[deName] = item[deKeyField];
data[index] = item;
});
resolve(data);
} else {
reject([])
}
}).catch((response: any) => {
reject([])
});
});
}
/**
* 获取跨实体数据集合
*
* @param {string} serviceName 服务名称
* @param {string} interfaceName 接口名称
* @param {*} data
* @param {boolean} [isloading]
* @returns {Promise<any[]>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
data.page = data.page ? data.page : 0;
data.size = data.size ? data.size : 1000;
<#list ctrl.getPSDEGridEditItems() as deItem>
<#if deItem.getPSEditor()?? && deItem.getPSEditor().getPSAppDataEntity?? && deItem.getPSEditor().getPSAppDataEntity()?? && deItem.getPSEditor().getPSAppDEDataSet?? && deItem.getPSEditor().getPSAppDEDataSet()??>
<#assign _appde = deItem.getPSEditor().getPSAppDataEntity()/>
<#assign deDataSet = deItem.getPSEditor().getPSAppDEDataSet()/>
<#if !P.exists("importService4", _appde.getId() + deDataSet.getCodeName(), "")>
<#if _appde.getId() == appde.getId()>
if (Object.is(serviceName, '${srfclassname('${_appde.getCodeName()}')}Service') && Object.is(interfaceName, '${deDataSet.getCodeName()}')) {
return this.doItems(this.appEntityService.${deDataSet.getCodeName()}(JSON.parse(JSON.stringify(context)), data, isloading), '${_appde.getKeyPSAppDEField().getCodeName()?lower_case}', '${_appde.getCodeName()?lower_case}');
}
<#else>
if (Object.is(serviceName, '${srfclassname('${_appde.getCodeName()}')}Service') && Object.is(interfaceName, '${deDataSet.getCodeName()}')) {
return this.doItems(this.${_appde.getCodeName()?lower_case}Service.${deDataSet.getCodeName()}(JSON.parse(JSON.stringify(context)),data, isloading), '${_appde.getKeyPSAppDEField().getCodeName()?lower_case}', '${_appde.getCodeName()?lower_case}');
}
</#if>
</#if>
</#if>
</#list>
return Promise.reject([])
}
/**
* 添加数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public add(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
const {data:Data,context:Context} = this.handleRequestDataWithUpdate(action,context,data,true);
<#-- 手动修改数据主键的情况start -->
<#if ctrl.getPSDEGridEditItems()??>
<#list ctrl.getPSDEGridEditItems() as editItem>
<#if editItem.getPSAppDEField()?? && editItem.getPSAppDEField().isKeyField() && editItem.getCodeName() != "srfkey">
Object.assign(Data,{${editItem.getPSAppDEField().getCodeName()?lower_case}: data.${editItem.getName()}, srffrontuf: '1'});
</#if>
</#list>
</#if>
<#-- 手动修改数据主键的情况end -->
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.Create(Context,Data, isloading);
}
result.then((response) => {
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
reject(response);
});
});
}
/**
* 删除数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public delete(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.Remove(Context,Data, isloading);
}
result.then((response) => {
resolve(response);
}).catch(response => {
reject(response);
});
});
}
/**
* 修改数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public update(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
const {data:Data,context:Context} = this.handleRequestDataWithUpdate(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.Update(Context,Data,isloading);
}
result.then((response) => {
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
reject(response);
});
});
}
/**
* 获取数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public get(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) => {
let result: Promise<any>;
const _appEntityService: any = this.appEntityService;
if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
result = _appEntityService[action](Context,Data, isloading);
} else {
result = this.appEntityService.Get(Context,Data, isloading);
}
result.then((response) => {
//处理返回数据,补充判断标识
if(response.data){
Object.assign(response.data,{srfuf:0});
}
resolve(response);
}).catch(response => {
reject(response);
});
});
}
/**
* 查询数据
*
* @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.setCopynativeData(response.data);
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
reject(response);
});
});
}
<#if ctrl.getPSDEDataExport?? && ctrl.getPSDEDataExport()??>
/**
* 查询实体导出数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public searchDEExportData(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) => {
let model: any = this.getMode();
model.isDEExport = true;
this.handleResponse(action, response);
model.isDEExport = false;
resolve(response);
}).catch(response => {
reject(response);
});
});
}
</#if>
/**
* 加载草稿
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public loadDraft(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) => {
let result: Promise<any>;
const _appEntityService: any = this.appEntityService;
if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
result = _appEntityService[action](Context,Data, isloading);
} else {
result = this.appEntityService.GetDraft(Context,Data, isloading);
}
result.then((response) => {
//处理返回数据,补充判断标识
if(response.data){
Object.assign(response.data,{srfuf:'0'});
<#-- 手动修改数据主键的情况start -->
<#assign hasKeyField = ''/>
<#if ctrl.getPSDEGridEditItems()??>
<#list ctrl.getPSDEGridEditItems() as editItem>
<#if editItem.getPSAppDEField()?? && editItem.getPSAppDEField().isKeyField() && editItem.getCodeName() != "srfkey">
<#assign hasKeyField>${editItem.getName()}</#assign>
</#if>
</#list>
</#if>
<#-- 手动修改数据主键的情况end -->
<#if hasKeyField == "">
//仿真主键数据
response.data.${appde.getKeyPSAppDEField().getCodeName()?lower_case} = Util.createUUID();
</#if>
}
this.setRemoteCopyData(response);
this.handleResponse(action, response, true);
resolve(response);
}).catch(response => {
reject(response);
});
});
}
<#if ctrl.getAggMode() == "ALL" && ctrl.getAggPSAppDataEntity()??>
<#assign aggAppDataEntity = ctrl.getAggPSAppDataEntity() >
/**
* 表格聚合加载数据
*
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public getAggData(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 = new ${srfclassname('${aggAppDataEntity.getCodeName()}')}Service({ $store: this.getStore() });
let result: Promise<any>;
if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
result = _appEntityService[action](Context,Data, isloading);
}else{
result = Promise.reject({});
}
result.then((response) => {
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
reject(response);
});
});
}
</#if>
/**
* 前台逻辑
* @param {string} action
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
@Errorlog
public frontLogic(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)=>{
let result: Promise<any>;
const _appEntityService: any = this.appEntityService;
if (_appEntityService[action] && _appEntityService[action] instanceof Function) {
result = _appEntityService[action](Context,Data, isloading);
} else {
return Promise.reject({ status: 500, data: { title: '失败', message: '系统异常' } });
}
result.then((response) => {
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
reject(response);
});
})
}
/**
* 处理请求数据(修改或增加数据)
*
* @param action 行为
* @param data 数据
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public handleRequestDataWithUpdate(action: string,context:any ={},data: any = {},isMerge:boolean = false){
let model: any = this.getMode();
if (!model && model.getDataItems instanceof Function) {
return data;
}
let dataItems: any[] = model.getDataItems();
let requestData:any = {};
if(isMerge && (data && data.viewparams)){
Object.assign(requestData,data.viewparams);
}
dataItems.forEach((item:any) =>{
if(item && item.dataType && Object.is(item.dataType,'FONTKEY')){
if(item && item.prop && item.name ){
requestData[item.prop] = context[item.name];
}
}else{
if(item && item.isEditable && item.prop && item.name && data.hasOwnProperty(item.name)){
requestData[item.prop] = data[item.name];
}
}
});
let tempContext:any = JSON.parse(JSON.stringify(context));
if(tempContext && tempContext.srfsessionid){
tempContext.srfsessionkey = tempContext.srfsessionid;
delete tempContext.srfsessionid;
}
return {context:tempContext,data:requestData};
}
/**
* 设置远端数据
*
* @param result 远端请求结果
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public setRemoteCopyData(result:any){
if (result && result.status === 200) {
this.remoteCopyData = Util.deepCopy(result.data);
}
}
/**
* 获取远端数据
*
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public getRemoteCopyData(){
return this.remoteCopyData;
}
/**
* 设置备份原生数据
*
* @param data 远端请求结果
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public setCopynativeData(data:any){
this.copynativeData = Util.deepCopy(data);
}
/**
* 获取备份原生数据
*
* @memberof ${srfclassname('${ctrl.codeName}')}Service
*/
public getCopynativeData(){
return this.copynativeData;
}
<#ibizinclude>
../@MACRO/SERVICE/SERVICE_BOTTOM.ts.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=GRID#PivotTable
\ No newline at end of file
......@@ -36,7 +36,7 @@ ${P.getCtrlCode('grid', '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 />" />
<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;padding-left: 24px' placeholder="<@getQuickSearchPlaceholder view />" />
</#if>
<div class='pull-right'>
<#if view.hasPSControl('toolbar')>
......
......@@ -34,7 +34,7 @@
</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='pull-left' placeholder="<@getQuickSearchPlaceholder view />" style='max-width: 400px;margin-top:6px;' />
<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' placeholder="<@getQuickSearchPlaceholder view />" style='max-width: 400px;margin-top:6px;padding-left: 24px' />
</#if>
<div class='pull-right'>
<#if view.hasPSControl('toolbar')>
......
......@@ -16,8 +16,19 @@
<div class='content-container'>
<#assign MDContent>
<#comment><!--开始:快速搜索或工具栏存在--></#comment>
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar'))>
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar') || view.isEnableQuickGroup() || view.getQuickPSDESearchForm()??)>
<row style="margin-bottom:6px;">
<#if view.isEnableQuickGroup()>
<div class="quick-group-container">
<app-quick-group :items="quickGroupModel" <#if appCounter??>:counterService="${appCounter.getCodeName()?lower_case}counterservice"</#if> @valuechange="quickGroupValueChange"></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='pull-left' placeholder="<@getQuickSearchPlaceholder view />" style='max-width: 400px;margin-top:6px;' />
</#if>
......
......@@ -17,8 +17,19 @@
<div class='content-container'>
<#assign MDContent>
<#comment><!--开始:快速搜索或工具栏存在--></#comment>
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar'))>
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar') || view.isEnableQuickGroup() || view.getQuickPSDESearchForm()??)>
<row style="margin-bottom:6px;">
<#if view.isEnableQuickGroup()>
<div class="quick-group-container">
<app-quick-group :items="quickGroupModel" <#if appCounter??>:counterService="${appCounter.getCodeName()?lower_case}counterservice"</#if> @valuechange="quickGroupValueChange"></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='pull-left' placeholder="<@getQuickSearchPlaceholder view />" style='max-width: 400px;margin-top:6px;' />
</#if>
......
<#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/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>
<#-- 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#APPDEMAPVIEW9
\ No newline at end of file
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
.pickup-view {
>.translate-contant {
overflow: auto;
flex-grow: 1;
display: flex;
justify-content: flex-end;
height: calc(100% - 64px);
.translate-buttons {
width: 80px;
display: flex;
align-items: center;
text-align: center;
button {
margin-bottom: 5px;
}
}
.left, .right {
width: 300px;
}
.right {
border: 1px solid #e9e9e9;
.mpicker-select {
font-family: helvetica, sans-serif;
font-size: 16px;
text-align: justify;
word-spacing: -3.8pt;
line-height: 1.6;
font-weight: bold;
word-spacing: 10px;
height: 100%;
overflow: auto;
}
.mpicker-select > div {
padding: 3px 10px;
font-size: 14px;
color: rgba(0, 0, 0, 0.85);
font-weight: initial;
cursor: pointer;
min-height: 28px;
border: 1px solid #e9e9e9;
margin: 4px 4px;
transition: all .3s;
}
.mpicker-select > div:hover {
background: #ecf6fd;
}
.mpicker-select > .select{
color: #108ee9;
background: #ecf6fd;
}
}
.center{
width: calc(100% - 380px);
.pickupviewpanel {
width: 100%;
height: 100%;
}
}
}
>.footer {
height: 64px;
}
}
\ No newline at end of file
<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.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :padding="0" :bordered="false">
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<div class="content-container pickup-view">
<#-- BEGIN:视图内容区视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Body_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图内容区视图消息 -->
<div class="translate-contant">
<div class="center" :style="{width : !isShowButton ? '100%' : ''}">
<#if view.hasPSControl('pickupviewpanel')>
<@ibizindent blank=20>
${P.getCtrlCode('pickupviewpanel', 'CONTROL.html').code}<#t>
</@ibizindent>
</#if>
</div>
<div v-if="isShowButton" class="translate-buttons">
<div class="buttons">
<i-button type="primary" :title="this.containerModel.view_rightbtn.text"
:disabled="this.containerModel.view_rightbtn.disabled"
@click="onCLickRight">
<i class="el-icon-arrow-right"></i>
</i-button>
<i-button type="primary" :title="this.containerModel.view_leftbtn.text"
:disabled="this.containerModel.view_leftbtn.disabled"
@click="onCLickLeft">
<i class="el-icon-arrow-left"></i>
</i-button>
<i-button type="primary" :title="this.containerModel.view_allrightbtn.text"
@click="onCLickAllRight">
<i class="el-icon-d-arrow-right"></i>
</i-button>
<i-button type="primary" :title="this.containerModel.view_allleftbtn.text"
@click="onCLickAllLeft">
<i class="el-icon-d-arrow-left"></i>
</i-button>
</div>
</div>
<div v-if="isShowButton" class="right">
<div class="mpicker-select">
<div v-for="(item, index) in viewSelections" :key="index" :class="item._select ? 'select' : ''" @click="selectionsClick(item)" @dblclick="selectionsDBLClick(item)">
<span>{{item.srfmajortext}}</span>
</div>
</div>
</div>
</div>
<card v-if="isShowButton" :dis-hover="true" :bordered="false" class="footer">
<row :style="{ textAlign: 'right' }">
<i-button type="primary" :disabled="this.viewSelections.length > 0 ? false : true" @click="onClickOk">{{this.containerModel.view_okbtn.text}}</i-button>
&nbsp;&nbsp;
<i-button @click="onClickCancel">{{this.containerModel.view_cancelbtn.text}}</i-button>
</row>
</card>
</div>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</card>
</div>
\ No newline at end of file
CTRLTYPE=VIEWLAYOUTPANEL#APPDEMPICKUPVIEW2
\ No newline at end of file
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
<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.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption view-no-toolbar' :disHover="true" :padding="0" :bordered="false">
<div class="content-container">
<component
:is="activeForm.name"
:viewState="viewState"
:viewparams="viewparams"
:context="context"
:autosave="false"
:viewtag="viewtag"
:showBusyIndicator="activeForm.showBusyIndicator"
:updateAction="activeForm.updateAction"
:removeAction="activeForm.removeAction"
:loaddraftAction="activeForm.loaddraftAction"
:loadAction="activeForm.loadAction"
:createAction="activeForm.createAction"
:WFSubmitAction="activeForm.WFSubmitAction"
:WFStartAction="activeForm.WFStartAction"
name="form"
ref='form'>
</component>
</div>
<card dis-hover :bordered="false" class='footer'>
<row style=" text-align: right ">
<i-button type='primary' @click="onClickOk">{{ $t("app.commonWords.ok") }}</i-button>
&nbsp;&nbsp;
<i-button @click="onClickCancel">{{ $t("app.commonWords.cancel") }}</i-button>
</row>
</card>
</card>
</div>
\ No newline at end of file
CTRLTYPE=VIEWLAYOUTPANEL#APPDEWFDYNAACTIONVIEW
\ No newline at end of file
......@@ -15,11 +15,29 @@
</div>
</div>
<div class="content-container">
<#if view.hasPSControl('form')>
<@ibizindent blank=8>
${P.getCtrlCode('form', 'CONTROL.html').code}
</@ibizindent>
</#if>
<component
:is="activeForm.name"
:isautoload="true"
:viewState="viewState"
:viewparams="viewparams"
:context="context"
:autosave="false"
:viewtag="viewtag"
:showBusyIndicator="activeForm.showBusyIndicator"
:updateAction="activeForm.updateAction"
:removeAction="activeForm.removeAction"
:loaddraftAction="activeForm.loaddraftAction"
:loadAction="activeForm.loadAction"
:createAction="activeForm.createAction"
:WFSubmitAction="activeForm.WFSubmitAction"
:WFStartAction="activeForm.WFStartAction"
name="form"
ref='form'
@save="form_save($event)"
@remove="form_remove($event)"
@load="form_load($event)"
@closeview="closeView($event)">
</component>
</div>
</card>
</div>
\ No newline at end of file
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
<div class="app-redirect-view ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
</div>
\ No newline at end of file
CTRLTYPE=VIEWLAYOUTPANEL#APPDEWFSTARTVIEW
\ No newline at end of file
<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.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :padding="0" :bordered="false">
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<div class="content-container pickup-view">
<#-- BEGIN:视图内容区视图消息 -->
<@ibizindent blank=8>
......@@ -62,12 +62,12 @@
</row>
</card>
</div>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</card>
</div>
\ No newline at end of file
......@@ -31,7 +31,7 @@
</div>
</#if>
<#if view.isEnableQuickSearch()>
<i-input <#if view.hasPSControl('searchform')><#if view.isExpandSearchForm??> v-show='!this.isExpandSearchForm '</#if></#if> v-model='query' search @on-search='onSearch' placeholder="<@getQuickSearchPlaceholder view />" class='pull-left' style='max-width: 400px;margin-top:6px;' />
<i-input <#if view.hasPSControl('searchform')><#if view.isExpandSearchForm??> v-show='!this.isExpandSearchForm '</#if></#if> v-model='query' search @on-search='onSearch' placeholder="<@getQuickSearchPlaceholder view />" class='pull-left' style='max-width: 400px;margin-top:6px;padding-left: 24px;' />
</#if>
<div class='pull-right'>
<#if view.hasPSControl('toolbar')>
......
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
.pickup-view {
>.pickupviewpanel {
flex-grow: 1;
display: flex;
justify-content: flex-end;
height: calc(100% - 64px);
}
>.footer {
height: 64px;
}
}
\ No newline at end of file
<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.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction>
<card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :padding="0" :bordered="false">
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<div class="content-container pickup-view">
<#-- BEGIN:视图内容区视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Body_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图内容区视图消息 -->
</div>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</card>
</div>
\ No newline at end of file
CTRLTYPE=VIEWLAYOUTPANEL#APPDEPICKUPVIEW2
\ No newline at end of file
.view-card {
>.ivu-card-extra {
top: 5px;
right: 0px;
}
}
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
<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.srfCaption)" 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>' :dis-hover="true" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<div class='content-container'>
<#-- BEGIN:视图内容区视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Body_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图内容区视图消息 -->
<#if view.hasPSControl('treeexpbar')>
<@ibizindent blank=12>
${P.getCtrlCode('treeexpbar', 'CONTROL.html').code}<#t>
</@ibizindent>
</#if>
</div>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</card>
</div>
\ No newline at end of file
CTRLTYPE=VIEWLAYOUTPANEL#APPDETREEEXPVIEW2
\ No newline at end of file
......@@ -3,15 +3,8 @@
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :padding="0" :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION.vue.ftl
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude>
<#if view.hasPSControl('toolbar')>
<#assign toolbarCtrl = view.getPSControl('toolbar')>
<@ibizindent blank=8>
${P.getCtrlCode(toolbarCtrl, 'CONTROL.html').code}
</@ibizindent>
</#if>
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
......
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/GRID.vue.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=VIEWLAYOUTPANEL#APPDEGRIDVIEW2
\ No newline at end of file
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
.${srffilepath2(view.getCodeName())}{
display: block;
}
\ No newline at end of file
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if> <#if view.getViewStyle() != 'DEFAULT'>${view.getViewStyle()}</#if>'>
<app-studioaction :viewTitle="$t(model.srfCaption)" 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>' dis-hover :bordered="false">
<#ibizinclude>
../@MACRO/VIEW_CAPTION.vue.ftl
</#ibizinclude>
<div class='content-container'>
<div class='view-top-messages'>
</div>
<div class='view-bottom-messages'>
</div>
</div>
</card>
</div>
\ No newline at end of file
CTRLTYPE=VIEWLAYOUTPANEL#APPPANELVIEW
\ No newline at end of file
......@@ -155,19 +155,21 @@
${ctrl.render.code}
<#else>
<app-rawitem
:viewparams="viewparams"
:context="context"
contentStyle="<#if ctrl.getPSSysCss()??>${ctrl.getPSSysCss().getCssName()}</#if>"
sizeStyle="<#if ctrl.getRawItemHeight() gt 0>height: ${ctrl.getRawItemHeight()?c}px;</#if><#if ctrl.getRawItemWidth() gt 0>width: ${ctrl.getRawItemWidth()?c}px;</#if>"
contentType="<#if ctrl.getContentType?? && ctrl.getContentType()??>${ctrl.getContentType()}</#if>"
<#if ctrl.getRawContent?? && ctrl.getRawContent()??>
rawContent="${ctrl.getRawContent()}"
</#if>
<#if ctrl.getHtmlContent?? && ctrl.getHtmlContent()??>
htmlContent="${ctrl.getHtmlContent()}"
:htmlContent='`${ctrl.getHtmlContent()}`'
</#if>
<#if ctrl.getPSSysImage?? && ctrl.getPSSysImage()??>
<#assign img=ctrl.getPSSysImage()>
<#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>
imageClass="${img.getCssClass()}"</#if></#if>>
<#if ctrl.getContentType?? && ctrl.getContentType() == 'RAW'>
${ctrl.getRawContent()}
</#if>
</app-rawitem>
</#if>
</div>
......@@ -262,8 +264,8 @@ import { Environment } from '@/environments/environment';
noprivdisplaymode:<#if uiaction.getNoPrivDisplayMode(view)??>${uiaction.getNoPrivDisplayMode(view)}<#else>''</#if>,
dataaccaction:'<#if uiaction.getDataAccessAction()??>${uiaction.getDataAccessAction()}</#if>',
actiontarget:'<#if uiaction.getActionTarget()??>${uiaction.getActionTarget()}</#if>',
visabled:true,disabled:false
</#if>
visabled:true,disabled:false
</#if>
</#if>
}<#if appViewLogic_has_next>,</#if>
......
......@@ -3,20 +3,21 @@
${item.render.code}
<#else>
<app-rawitem
:viewparams="viewparams"
:context="context"
contentStyle="<#if item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if>"
sizeStyle="<#if item.getRawItemHeight() gt 0>height: ${item.getRawItemHeight()?c}px;</#if><#if item.getRawItemWidth() gt 0>width: ${item.getRawItemWidth()?c}px;</#if>"
contentType="<#if item.getContentType?? && item.getContentType()??>${item.getContentType()}</#if>"
caption="<#if item.getCaption?? && item.getCaption()??>${item.getCaption()}</#if>"
<#if item.getRawContent?? && item.getRawContent()??>
rawContent="${item.getRawContent()}"
</#if>
<#if item.getHtmlContent?? && item.getHtmlContent()??>
htmlContent="${item.getHtmlContent()}"
:htmlContent='`${item.getHtmlContent()}`'
</#if>
<#if item.getPSSysImage?? && item.getPSSysImage()??>
<#assign img=item.getPSSysImage()>
<#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>
imageClass="${img.getCssClass()}"</#if></#if>>
<#if item.getContentType?? && item.getContentType() == 'RAW'>
${item.getRawContent()}
</#if>
</app-rawitem>
</#if>
</#assign>
......
......@@ -5,6 +5,7 @@
import { PanelDetailModel,PanelRawitemModel,PanelTabPanelModel,PanelTabPageModel,PanelFieldModel,PanelContainerModel,PanelControlModel,PanelUserControlModel,PanelButtonModel } from '@/model/panel-detail';
import ${srfclassname('${ctrl.codeName}')}Model from './${srffilepath2(ctrl.codeName)}-${ctrl.getControlType()?lower_case}-model';
import CodeListService from "@/codelist/codelist-service";
import UIService from '@/uiservice/ui-service';
</#assign>
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl
......@@ -89,6 +90,14 @@ import CodeListService from "@/codelist/codelist-service";
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public appUIService:${srfclassname('${appde.getCodeName()}')}UIService = new ${srfclassname('${appde.getCodeName()}')}UIService(this.$store);
<#else>
/**
* 界面UI服务对象
*
* @type {UIService}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public appUIService:UIService = new UIService(this.$store);
</#if>
/**
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<input-box
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
v-model="row[column.property]"
style="${item.getEditorCssStyle()}"
type="text"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<input-box
v-model="data.${editor.getName()?lower_case}"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-rich-text-editor :formState="formState" :value="data.${editor.name}" @change="(val) =>{this.data.${editor.name} =val}" :disabled="detailsModel.${editor.name}.disabled" :data="JSON.stringify(this.data)" name="${editor.name}" :uploadparams='<#if editor.getEditorParam('uploadparams','') != ''>${editor.getEditorParam('uploadparams','')}<#else>{}</#if>' :exportparams='<#if editor.getEditorParam('exportparams','') != ''>${editor.getEditorParam('exportparams','')}<#else>{}</#if>' <#if editor.getEditorHeight() gt 0> height={${editor.getEditorHeight()?c}}</#if> style="${editor.getEditorCssStyle()}"></app-rich-text-editor>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-rich-text-editor :formState="formState" :value="data.${editor.name}" @change="(val) =>{this.data.${editor.name} =val;panelEditItemChange(data, '${editor.name?lower_case}', val)}" :disabled="detailsModel.${item.getCodeName()}.disabled" :data="JSON.stringify(this.data)" name="${editor.name}" :uploadparams='<#if editor.getEditorParam('uploadparams','') != ''>${editor.getEditorParam('uploadparams','')}<#else>{}</#if>' :exportparams='<#if editor.getEditorParam('exportparams','') != ''>${editor.getEditorParam('exportparams','')}<#else>{}</#if>' <#if editor.getEditorHeight() gt 0> height={${editor.getEditorHeight()?c}}</#if> style="${editor.getEditorCssStyle()}"></app-rich-text-editor>
</#if>
\ No newline at end of file
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-input-ip
v-model="data.${editor.name}"
:context="context"
:formState="formState"
:viewparams="viewparams"
:disabled="detailsModel.${editor.name}.disabled"
@enter="onEnter($event)">
</app-input-ip>
</#if>
\ No newline at end of file
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<dropdown-list
v-model="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
:data="row"
:context="context"
:viewparams="viewparams"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<dropdown-list
v-model="data.${editor.name}"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<dropdown-list
v-model="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
:data="row"
:context="context"
:viewparams="viewparams"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<dropdown-list
v-model="data.${editor.name?lower_case}"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<dropdown-list
v-model="data.${editor.name}"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<dropdown-list
v-model="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
style="${item.getEditorCssStyle()}width: 100px;"
:data="row"
:context="context"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<dropdown-list
v-model="data.${editor.name?lower_case}"
......
<dropdown-list-mpicker
v-model="row[column.property]"
:itemParam="<#if item.getEditorParam('ITEMPARAM','') != ''>${item.getEditorParam('ITEMPARAM','')}<#else>{}</#if>"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPSCodeList()??>
<#assign codelist=editor.getPSCodeList()>
tag='${codelist.codeName}'
......
<dropdown-list-mpicker
v-model="row[column.property]"
:itemParam="<#if item.getEditorParam('ITEMPARAM','') != ''>${item.getEditorParam('ITEMPARAM','')}<#else>{}</#if>"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPSCodeList()??>
<#assign codelist=editor.getPSCodeList()>
tag='${codelist.codeName}'
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<dropdown-list-mpicker
v-model="data.${editor.name}"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<dropdown-list-mpicker
v-model="row[column.property]"
......@@ -9,7 +9,7 @@
:viewparams="viewparams"
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPSCodeList()??>
<#assign codelist=editor.getPSCodeList()>
tag='${codelist.codeName}'
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<dropdown-list-mpicker
v-model="data.${editor.name?lower_case}"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-code-editor :code="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" @change="(val) =>{this.data.${editor.name} =val}" codetype="javascript" ></app-code-editor>
</#if>
\ No newline at end of file
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-radio-group
v-model="data.${editor.name}"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-radio-group
v-model="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
name="${item.name}"
:data="row"
:context="context"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-radio-group
v-model="data.${editor.name?lower_case}"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-image-upload :multiple="true" :formState="formState" :ignorefieldvaluechange="ignorefieldvaluechange" @formitemvaluechange="onFormItemValueChange" :data="JSON.stringify(this.data)" name='${editor.name}' :value="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" :uploadparams='<#if editor.getEditorParam('uploadparams','') != ''>${editor.getEditorParam('uploadparams','')}<#else>{}</#if>' :exportparams='<#if editor.getEditorParam('exportparams','') != ''>${editor.getEditorParam('exportparams','')}<#else>{}</#if>' style="${editor.getEditorCssStyle()}overflow: auto;"></app-image-upload>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-file-upload
:formState="viewState"
......@@ -8,7 +8,7 @@
:data="JSON.stringify(row)"
:name='column.property'
:value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
:rowPreview="true"
:imageOnly="true"
:uploadparams='<#if editor.getEditorParam('uploadparams','') != ''>${editor.getEditorParam('uploadparams','')}<#else>{}</#if>' :exportparams='<#if editor.getEditorParam('exportparams','') != ''>${editor.getEditorParam('exportparams','')}<#else>{}</#if>'
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-file-upload
:formState="viewState"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-image-upload :multiple="false" :formState="formState" :ignorefieldvaluechange="ignorefieldvaluechange" @formitemvaluechange="onFormItemValueChange" :data="JSON.stringify(this.data)" name='${editor.name}' :value="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" :uploadparams='<#if editor.getEditorParam('uploadparams','') != ''>${editor.getEditorParam('uploadparams','')}<#else>{}</#if>' :exportparams='<#if editor.getEditorParam('exportparams','') != ''>${editor.getEditorParam('exportparams','')}<#else>{}</#if>' ></app-image-upload>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-file-upload
:formState="viewState"
......@@ -8,7 +8,7 @@
:data="JSON.stringify(row)"
:name='column.property'
:value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
:rowPreview="true"
:imageOnly="true"
:uploadparams='<#if editor.getEditorParam('uploadparams','') != ''>${editor.getEditorParam('uploadparams','')}<#else>{}</#if>' :exportparams='<#if editor.getEditorParam('exportparams','') != ''>${editor.getEditorParam('exportparams','')}<#else>{}</#if>'
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-file-upload
:formState="viewState"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getPickupPSAppView()??>
<app-mpicker
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getPickupPSAppView()??>
<app-mpicker
:activeData="row"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
:curvalue="row[column.property]"
:name="column.property"
:context="context"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getPickupPSAppView()??>
<app-mpicker
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getPickupPSAppView()??>
<app-mpicker
:activeData="row"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
:curvalue="row[column.property]"
:name="column.property"
:context="context"
......
<div class="ivu-input-wrapper ivu-input-wrapper-default ivu-input-type">
<textarea class="ivu-input" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" v-model="row[column.property]" style="${item.getEditorCssStyle()}" <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if> @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></textarea>
<textarea class="ivu-input" :disabled="getColumnDisabled(row,column.property)" v-model="row[column.property]" style="${item.getEditorCssStyle()}" <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if> @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></textarea>
</div>
\ No newline at end of file
<div class="ivu-input-wrapper ivu-input-wrapper-default ivu-input-type">
<textarea class="ivu-input" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" v-model="row[column.property]" style="${item.getEditorCssStyle()}" <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if> @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></textarea>
<textarea class="ivu-input" :disabled="getColumnDisabled(row,column.property)" v-model="row[column.property]" style="${item.getEditorCssStyle()}" <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if> @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></textarea>
</div>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<input-box v-model="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" type='textarea' style="${editor.getEditorCssStyle()}" <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if>></input-box>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<div class="ivu-input-wrapper ivu-input-wrapper-default ivu-input-type">
<textarea class="ivu-input" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" v-model="row[column.property]" style="${item.getEditorCssStyle()}" <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if> @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></textarea>
<textarea class="ivu-input" :disabled="getColumnDisabled(row,column.property)" v-model="row[column.property]" style="${item.getEditorCssStyle()}" <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if> @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></textarea>
</div>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<div class="ivu-input-wrapper ivu-input-wrapper-default ivu-input-type">
<textarea
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<input-box v-model="data.${editor.name}" :textareaId="this.$util.createUUID()" :disabled="detailsModel.${editor.name}.disabled" type='textarea' textareaStyle="${editor.getEditorCssStyle()}" <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if>></input-box>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<div class="ivu-input-wrapper ivu-input-wrapper-default ivu-input-type">
<textarea class="ivu-input" rows="10" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" v-model="row[column.property]" style="${item.getEditorCssStyle()}" <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if> @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></textarea>
<textarea class="ivu-input" rows="10" :disabled="getColumnDisabled(row,column.property)" v-model="row[column.property]" style="${item.getEditorCssStyle()}" <#if item.getPlaceHolder()??> placeholder="${item.getPlaceHolder()}"</#if> @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></textarea>
</div>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<div class="ivu-input-wrapper ivu-input-wrapper-default ivu-input-type">
<textarea
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<i-input type="password" v-model="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" style="${editor.getEditorCssStyle()}"></i-input>
<i-input type="password" v-model="data.${editor.name}" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :disabled="detailsModel.${editor.name}.disabled" style="${editor.getEditorCssStyle()}"></i-input>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<input-box type="password" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" v-model="row[column.property]" style="${item.getEditorCssStyle()}" @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></input-box>
<input-box type="password" :disabled="getColumnDisabled(row,column.property)" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> v-model="row[column.property]" style="${item.getEditorCssStyle()}" @change="($event)=>{gridEditItemChange(row, column.property, $event, $index)}"></input-box>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<input-box
type="password"
:disabled="detailsModel.${item.getCodeName()}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
v-model="data.${editor.name?lower_case}"
style="${item.getEditorCssStyle()}"
@change="($event)=>{panelEditItemChange(data, '${editor.name?lower_case}', $event)}">
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-switch name='${editor.name}' :value="this.data.${editor.name}" @change="($event)=>{this.data.${editor.name} = $event} " :disabled="detailsModel.${editor.name}.disabled" style="${editor.getEditorCssStyle()}"></app-switch>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-switch name='${editor.name}' :value="row[column.property]" @change="($event)=>{row[column.property] = $event;gridEditItemChange(row, column.property, $event, $index)} " :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}"></app-switch>
<app-switch name='${editor.name}' :value="row[column.property]" @change="($event)=>{row[column.property] = $event;gridEditItemChange(row, column.property, $event, $index)} " :disabled="getColumnDisabled(row,column.property)" style="${item.getEditorCssStyle()}"></app-switch>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-switch
name='${editor.name?lower_case}'
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<input-box
v-model="data.${editor.name}"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<input-box
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
v-model="row[column.property]"
<#if item.getUnitName?? && item.getUnitName()??>
unit="${item.getUnitName()}"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<input-box
type="number"
......
<app-map-position
name="${editor.name}"
v-model="data.${editor.name}"
:data="data"
:formState="formState"
mode="<#if item.getEditorParam("mode","") != ''>${item.getEditorParam("mode","")}<#else>address</#if>"
<#if item.getEditorParam("address","") != ''>
address="${item.getEditorParam("address","")}"
</#if><#t>
<#if item.getEditorParam("longitude","") != ''>
longitude="${item.getEditorParam("longitude","")}"
</#if><#t>
<#if item.getEditorParam("latitude","") != ''>
latitude="${item.getEditorParam("latitude","")}"
</#if><#t>
@itemChange="(val1, val2) => { onFormItemValueChange(val1); onFormItemValueChange(val2); }"
/>
\ No newline at end of file
EDITORTYPE=PICKER#MAPPOSITION
\ No newline at end of file
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -12,6 +12,9 @@
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getEditorParam("PICKUPDATA", "") != "">pickUpData="${editor.getEditorParam("PICKUPDATA", "")}"</#if>
<#-- 自填模式文本属性、值属性start -->
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -11,7 +11,10 @@
:viewparams="viewparams"
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getEditorParam("PICKUPDATA", "") != "">pickUpData="${editor.getEditorParam("PICKUPDATA", "")}"</#if>
<#-- 自填模式文本属性、值属性start -->
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -12,6 +12,9 @@
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${item.getCodeName()}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#-- 自填模式文本属性、值属性start -->
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -12,6 +12,9 @@
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
<#if editor.getPSAppDEACMode().getMinorSortPSDEF?? && editor.getPSAppDEACMode().getMinorSortPSDEF()?? && editor.getPSAppDEACMode().getMinorSortDir?? && editor.getPSAppDEACMode().getMinorSortDir()??>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -12,6 +12,9 @@
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getPSAppDataEntity?? && editor.getPSAppDataEntity()??>
deMajorField='${editor.getPSAppDataEntity().getMajorPSAppDEField().getCodeName()?lower_case}'
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -11,7 +11,10 @@
:viewparams="viewparams"
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getPSAppDataEntity?? && editor.getPSAppDataEntity()??>
deMajorField='${editor.getPSAppDataEntity().getMajorPSAppDEField().getCodeName()?lower_case}'
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -15,6 +15,9 @@
:isSingleSelect="false"
</#if>
:disabled="detailsModel.${editor.name}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getPSAppDataEntity?? && editor.getPSAppDataEntity()??>
deMajorField='${editor.getPSAppDataEntity().getMajorPSAppDEField().getCodeName()?lower_case}'
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -14,7 +14,10 @@
<#if editor.getPickupPSAppView().getViewType() == 'DEMPICKUPVIEW'>
:isSingleSelect="false"
</#if>
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getPSAppDataEntity?? && editor.getPSAppDataEntity()??>
deMajorField='${editor.getPSAppDataEntity().getMajorPSAppDEField().getCodeName()?lower_case}'
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-picker
:formState="formState"
......@@ -10,6 +10,9 @@
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getEditorParam("PICKUPDATA", "") != "">pickUpData="${editor.getEditorParam("PICKUPDATA", "")}"</#if>
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-picker
:formState="viewState"
......@@ -9,7 +9,10 @@
:viewparams="viewparams"
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getEditorParam("PICKUPDATA", "") != "">pickUpData="${editor.getEditorParam("PICKUPDATA", "")}"</#if>
<#-- 自填模式文本属性、值属性start -->
......
<app-address-selection :value="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" style="${editor.getEditorCssStyle()}"></app-address-selection>
\ No newline at end of file
<app-address-selection :value="data.${editor.name}" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :disabled="detailsModel.${editor.name}.disabled" style="${editor.getEditorCssStyle()}"></app-address-selection>
\ No newline at end of file
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if item.getRefPickupPSAppView()??>
<#assign pickupview = item.getRefPickupPSAppView()>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if item.getRefPickupPSAppView()??>
<#assign pickupview = item.getRefPickupPSAppView()>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -12,6 +12,9 @@
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
<#if editor.getPSAppDEACMode().getMinorSortPSDEF?? && editor.getPSAppDEACMode().getMinorSortPSDEF()?? && editor.getPSAppDEACMode().getMinorSortDir?? && editor.getPSAppDEACMode().getMinorSortDir()??>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -11,7 +11,10 @@
:viewparams="viewparams"
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#-- 自填模式文本属性、值属性start -->
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -12,6 +12,9 @@
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#-- 自填模式文本属性、值属性start -->
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -11,7 +11,10 @@
:viewparams="viewparams"
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#-- 自填模式文本属性、值属性start -->
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -12,6 +12,9 @@
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#-- 自填模式文本属性、值属性start -->
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -11,7 +11,10 @@
:viewparams="viewparams"
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#-- 自填模式文本属性、值属性start -->
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<#if editor.getEditorParam("PICKUPVIEW",true)??>
<#if editor.getPickupPSAppView()??>
......@@ -12,6 +12,9 @@
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:showButton="false"
name='${editor.name}'
<#-- 自填模式文本属性、值属性start -->
......
......@@ -3,6 +3,9 @@
name="${editor.name}"
:value='data.${editor.name}'
valueitem="${editor.getValueItemName()}"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
<#if editor.getEditorParam("MULTIPLE", false)>:multiple="true"</#if>
<#if editor.getEditorParam("FILTER", "") != "">filter="${editor.getEditorParam("FILTER", "")}"</#if>
<#if editor.getEditorParam("FILLMAP", "") != "">:fillmap='${editor.getEditorParam("FILLMAP", "")}'</#if>
......
......@@ -6,7 +6,7 @@
:data="JSON.stringify(row)"
:context="context"
:viewparams="viewparams"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
:ignorefieldvaluechange="false"
:value="row[column.property]"
<#if item.getPlaceHolder()??>
......
......@@ -7,6 +7,9 @@
:data="data"
:context="context"
:viewparams="viewparams"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:itemParams='<#if editor.getItemParamJO?? && editor.getItemParamJO()??>${editor.getItemParamJO()}</#if>'
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
......
......@@ -10,7 +10,10 @@
:itemParams='<#if editor.getItemParamJO?? && editor.getItemParamJO()??>${editor.getItemParamJO()}</#if>'
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
<#if editor.getPSAppDEACMode().getMinorSortPSDEF?? && editor.getPSAppDEACMode().getMinorSortPSDEF()?? && editor.getPSAppDEACMode().getMinorSortDir?? && editor.getPSAppDEACMode().getMinorSortDir()??>
......
......@@ -11,6 +11,9 @@
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
<#if editor.getPSAppDEACMode().getMinorSortPSDEF?? && editor.getPSAppDEACMode().getMinorSortPSDEF()?? && editor.getPSAppDEACMode().getMinorSortDir?? && editor.getPSAppDEACMode().getMinorSortDir()??>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-picker
:formState="formState"
:data="data"
:context="context"
:viewparams="viewparams"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-picker
:formState="viewState"
:data="row"
:context="context"
:viewparams="viewparams"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:localContext =<@getNavigateContext editor />
:localParam =<@getNavigateParams editor />
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
name='${editor.name}'
<#if editor.getPSAppDataEntity?? && editor.getPSAppDataEntity()??>
deMajorField='${editor.getPSAppDataEntity().getMajorPSAppDEField().getCodeName()?lower_case}'
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-file-upload :formState="formState" :ignorefieldvaluechange="ignorefieldvaluechange" @formitemvaluechange="onFormItemValueChange" :data="JSON.stringify(this.data)" name='${editor.name}' :value="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" :uploadparams='<#if editor.getEditorParam('uploadparams','') != ''>${editor.getEditorParam('uploadparams','')}<#else>{}</#if>' :exportparams='<#if editor.getEditorParam('exportparams','') != ''>${editor.getEditorParam('exportparams','')}<#else>{}</#if>' style="${editor.getEditorCssStyle()}overflow: auto;"></app-file-upload>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-file-upload
:formState="viewState"
......@@ -8,7 +8,7 @@
:data="JSON.stringify(row)"
:name='column.property'
:value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
:rowPreview="true"
:uploadparams='<#if editor.getEditorParam('uploadparams','') != ''>${editor.getEditorParam('uploadparams','')}<#else>{}</#if>'
:exportparams='<#if editor.getEditorParam('exportparams','') != ''>${editor.getEditorParam('exportparams','')}<#else>{}</#if>'
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-file-upload
:formState="viewState"
......
......@@ -6,7 +6,7 @@
:data="JSON.stringify(row)"
:name='column.property'
:value="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
:rowPreview="true"
:uploadparams='<#if editor.getEditorParam('uploadparams','') != ''>${editor.getEditorParam('uploadparams','')}<#else>{}</#if>'
:exportparams='<#if editor.getEditorParam('exportparams','') != ''>${editor.getEditorParam('exportparams','')}<#else>{}</#if>'
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<input-box
v-model="data.${editor.name}"
......
<app-color-picker
v-model="data.${editor.name}"
@enter="onEnter($event)"
:data="data"
:disabled="detailsModel.${editor.name}.disabled"
:formState="formState"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
color="${item.getEditorParam("color","")}"
style="${editor.getEditorCssStyle()}"
@colorChange="(val) => {onFormItemValueChange(val)}">
</app-color-picker>
EDITORTYPE=TEXTBOX#COLORPICKER
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<date-picker type="datetime" :transfer="true" format="yyyy-MM-dd HH:mm:ss" placeholder="请选择时间..." :value="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { this.data.${editor.name} = val1 }"></date-picker>
<date-picker type="datetime" :transfer="true" format="yyyy-MM-dd HH:mm:ss" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :value="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { this.data.${editor.name} = val1 }"></date-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<date-picker type="datetime" :transfer="true" format="yyyy-MM-dd HH:mm:ss" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :value="row[column.property]" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1, $index)}"></date-picker>
<date-picker type="datetime" :transfer="true" format="yyyy-MM-dd HH:mm:ss" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :disabled="getColumnDisabled(row,column.property)" :value="row[column.property]" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1, $index)}"></date-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<date-picker
type="datetime"
:transfer="true"
format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择时间..."
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:disabled="detailsModel.${item.getCodeName()}.disabled"
:value="data.${editor.name?lower_case}"
style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<date-picker type="date" :transfer="true" format="yyyy-MM-dd" placeholder="请选择时间..." :value="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" style="min-width: 150px;${editor.getEditorCssStyle()} <#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { this.data.${editor.name} = val1 }"></date-picker>
<date-picker type="date" :transfer="true" format="yyyy-MM-dd" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :value="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" style="min-width: 150px;${editor.getEditorCssStyle()} <#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { this.data.${editor.name} = val1 }"></date-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<date-picker type="date" :transfer="true" format="yyyy-MM-dd" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :value="row[column.property]" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1, $index)}"></date-picker>
<date-picker type="date" :transfer="true" format="yyyy-MM-dd" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :disabled="getColumnDisabled(row,column.property)" :value="row[column.property]" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1, $index)}"></date-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<date-picker
type="date"
:transfer="true"
format="yyyy-MM-dd"
placeholder="请选择时间..."
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:disabled="detailsModel.${item.getCodeName()}.disabled"
:value="data.${editor.name?lower_case}"
style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker :value="data.${editor.name}" :transfer="true" :disabled="detailsModel.${editor.name}.disabled" format="mm" placeholder="请选择时间..." style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => {this.data.${editor.name} = val}"></time-picker>
<time-picker :value="data.${editor.name}" :transfer="true" :disabled="detailsModel.${editor.name}.disabled" format="mm" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => {this.data.${editor.name} = val}"></time-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker :value="row[column.property]" :transfer="true" format="mm" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val, $index)}"></time-picker>
<time-picker :value="row[column.property]" :transfer="true" format="mm" :disabled="getColumnDisabled(row,column.property)" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val, $index)}"></time-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker
:transfer="true"
format="mm"
placeholder="请选择时间..."
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:disabled="detailsModel.${item.getCodeName()}.disabled"
:value="data.${editor.name?lower_case}"
style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker :value="data.${editor.name}" :transfer="true" :disabled="detailsModel.${editor.name}.disabled" format="HH" placeholder="请选择时间..." style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => {this.data.${editor.name} = val}"></time-picker>
<time-picker :value="data.${editor.name}" :transfer="true" :disabled="detailsModel.${editor.name}.disabled" format="HH" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => {this.data.${editor.name} = val}"></time-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker :value="row[column.property]" :transfer="true" format="HH" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val, $index)}"></time-picker>
<time-picker :value="row[column.property]" :transfer="true" format="HH" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :disabled="getColumnDisabled(row,column.property)" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val, $index)}"></time-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker
:transfer="true"
format="HH"
placeholder="请选择时间..."
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:disabled="detailsModel.${item.getCodeName()}.disabled"
:value="data.${editor.name?lower_case}"
style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<date-picker type="date" :transfer="true" format="yyyy-MM-dd" placeholder="请选择时间..." :value="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { this.data.${editor.name} = val1 }"></date-picker>
<date-picker type="date" :transfer="true" format="yyyy-MM-dd" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :value="data.${editor.name}" :disabled="detailsModel.${editor.name}.disabled" style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { this.data.${editor.name} = val1 }"></date-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<date-picker type="date" :transfer="true" format="yyyy-MM-dd" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :value="row[column.property]" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1, $index)}"></date-picker>
<date-picker type="date" :transfer="true" format="yyyy-MM-dd" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :disabled="getColumnDisabled(row,column.property)" :value="row[column.property]" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val1, val2) => { row[column.property] = val1; gridEditItemChange(row, column.property, val1, $index)}"></date-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<date-picker
type="date"
:transfer="true"
format="yyyy-MM-dd"
placeholder="请选择时间..."
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:disabled="detailsModel.${item.getCodeName()}.disabled"
:value="data.${editor.name?lower_case}"
style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker :value="data.${editor.name}" :transfer="true" :disabled="detailsModel.${editor.name}.disabled" format="HH:mm:ss" placeholder="请选择时间..." style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => {this.data.${editor.name} = val}"></time-picker>
<time-picker :value="data.${editor.name}" :transfer="true" :disabled="detailsModel.${editor.name}.disabled" format="HH:mm:ss" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => {this.data.${editor.name} = val}"></time-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker :value="row[column.property]" :transfer="true" format="HH:mm:ss" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val, $index)}"></time-picker>
<time-picker :value="row[column.property]" :transfer="true" format="HH:mm:ss" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :disabled="getColumnDisabled(row,column.property)" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val, $index)}"></time-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker
:transfer="true"
format="HH:mm:ss"
placeholder="请选择时间..."
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:disabled="detailsModel.${item.getCodeName()}.disabled"
:value="data.${editor.name?lower_case}"
style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker :value="data.${editor.name}" :transfer="true" :disabled="detailsModel.${editor.name}.disabled" format="HH:mm" placeholder="请选择时间..." style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => {this.data.${editor.name} = val}"></time-picker>
<time-picker :value="data.${editor.name}" :transfer="true" :disabled="detailsModel.${editor.name}.disabled" format="HH:mm" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => {this.data.${editor.name} = val}"></time-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker :value="row[column.property]" :transfer="true" format="HH:mm" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val, $index)}"></time-picker>
<time-picker :value="row[column.property]" :transfer="true" format="HH:mm" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :disabled="getColumnDisabled(row,column.property)" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val, $index)}"></time-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker
:transfer="true"
format="HH:mm"
placeholder="请选择时间..."
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:disabled="detailsModel.${item.getCodeName()}.disabled"
:value="data.${editor.name?lower_case}"
style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker :value="data.${editor.name}" :transfer="true" :disabled="detailsModel.${editor.name}.disabled" format="ss" placeholder="请选择时间..." style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => {this.data.${editor.name} = val}"></time-picker>
<time-picker :value="data.${editor.name}" :transfer="true" :disabled="detailsModel.${editor.name}.disabled" format="ss" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> style="min-width: 150px; ${editor.getEditorCssStyle()}<#if editor.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => {this.data.${editor.name} = val}"></time-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker :value="row[column.property]" :transfer="true" format="ss" placeholder="请选择时间..." :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val, $index)}"></time-picker>
<time-picker :value="row[column.property]" :transfer="true" format="ss" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> :disabled="getColumnDisabled(row,column.property)" style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>" @on-change="(val) => { row[column.property] = val; gridEditItemChange(row, column.property, val, $index)}"></time-picker>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<time-picker
:transfer="true"
format="ss"
placeholder="请选择时间..."
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
:disabled="detailsModel.${item.getCodeName()}.disabled"
:value="data.${editor.name?lower_case}"
style="${item.getEditorCssStyle()}<#if item.getEditorParam('width','') == 'auto'>width:100%;</#if>"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<app-span <#t>
name='${editor.name}' <#t>
:value="data.${editor.name}" <#t>
editorType="ADDRESSPICKUP"
<#-- 值格式化 start -->
<#-- @author ljy -->
<#-- @update 2020.7.13 18:08 -->
<#if item.getPSEditor()?? && item.getPSEditor().getPSEditorContainer()?? && item.getPSEditor().getPSEditorContainer().getPSAppDEField?? && item.getPSEditor().getPSEditorContainer().getPSAppDEField()?? && item.getPSEditor().getPSEditorContainer().getPSAppDEField().getPSDEField()?? && item.getPSEditor().getPSEditorContainer().getPSAppDEField().getPSDEField().getDataType()??>
dataType="${item.getPSEditor().getPSEditorContainer().getPSAppDEField().getPSDEField().getDataType()}" <#t>
<#if item.getUnitName()!="">
unitName="${item.getUnitName()}" <#t>
</#if>
</#if>
<#if item.getPSEditor()?? && item.getPSEditor().getPSEditorContainer()?? && item.getPSEditor().getPSEditorContainer().getPSDEFUIMode()?? && item.getPSEditor().getPSEditorContainer().getPSDEFUIMode().getPSDEFFormItem().getValueFormat()?? && item.getPSEditor().getPSEditorContainer().getPSDEFUIMode().getPSDEFFormItem().getValueFormat()!= "%1$s">
valueFormat="${item.getPSEditor().getPSEditorContainer().getPSDEFUIMode().getPSDEFFormItem().getValueFormat()}" <#t>
</#if>
<#-- 值格式化 end -->
<#-- 数值精度 start -->
<#-- @author mos -->
<#-- @update 2020.7.16 -->
<#if item.getPSEditor()?? && item.getPSEditor().getPSEditorContainer()?? && item.getPSEditor().getPSEditorContainer().getPSAppDEField?? && item.getPSEditor().getPSEditorContainer().getPSAppDEField()?? && item.getPSEditor().getPSEditorContainer().getPSAppDEField().getPSDEField()?? && item.getPSEditor().getPSEditorContainer().getPSAppDEField().getPSDEField().getPrecision??>
<#if item.getPSEditor().getPSEditorContainer().getPSAppDEField().getPSDEField().getDataType() == 'FLOAT' && item.getPSEditor().getPSEditorContainer().getPSAppDEField().getPSDEField().getPrecision() == 0>
:precision="2"
<#else>
:precision="${item.getPSEditor().getPSEditorContainer().getPSAppDEField().getPSDEField().getPrecision()?c}"
</#if>
</#if>
<#-- 数值精度 end -->
<#if item.getPSCodeList?? && item.getPSCodeList()??>
<#assign codelist=item.getPSCodeList() />
tag='${codelist.codeName}' <#t>
codelistType='${codelist.getCodeListType()}' <#t>
<#if codelist.getOrMode?? && codelist.getOrMode()?has_content>
renderMode="${codelist.getOrMode()}" <#t>
</#if>
<#if codelist.valueSeparator?has_content>
valueSeparator="${codelist.valueSeparator}" <#t>
</#if>
<#if codelist.textSeparator?has_content>
textSeparator="${codelist.textSeparator}" <#t>
</#if>
</#if>
:data="data" <#t>
:context="context" <#t>
:viewparams="viewparams" <#t>
:localContext =<@getNavigateContext editor /> <#t>
:localParam =<@getNavigateParams editor /> <#t>
style="${editor.getEditorCssStyle()}"><#t>
</app-span><#lt>
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<app-span <#t>
name='${editor.name}' <#t>
:value="row[column.property]" <#t>
editorType="ADDRESSPICKUP"
<#if item.getPSCodeList?? && item.getPSCodeList()??>
<#assign codelist=item.getPSCodeList() />
tag='${codelist.codeName}' <#t>
codelistType='${codelist.getCodeListType()}' <#t>
<#if codelist.getOrMode?? && codelist.getOrMode()?has_content>
renderMode="${codelist.getOrMode()}" <#t>
</#if>
<#if codelist.valueSeparator?has_content>
valueSeparator="${codelist.valueSeparator}" <#t>
</#if>
<#if codelist.textSeparator?has_content>
textSeparator="${codelist.textSeparator}" <#t>
</#if>
</#if>
:data="row" <#t>
:context="context" <#t>
:viewparams="viewparams" <#t>
:localContext =<@getNavigateContext editor /> <#t>
:localParam =<@getNavigateParams editor /> <#t>
style="${editor.getEditorCssStyle()}"><#t>
</app-span><#lt>
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<app-span <#t>
:value="data.${editor.name?lower_case}" <#t>
name="${editor.name?lower_case}" <#t>
editorType="ADDRESSPICKUP"
:data="data" <#t>
:context="context" <#t>
:viewparams="viewparams" <#t>
:localContext =<@getNavigateContext editor /> <#t>
:localParam =<@getNavigateParams editor /> <#t>
<#if item.getPSCodeList?? && item.getPSCodeList()??>
<#assign codelist=item.getPSCodeList()>
tag='${codelist.codeName}' <#t>
codelistType='${codelist.getCodeListType()}' <#t>
</#if>
style="${item.getEditorCssStyle()}"> <#t>
</app-span> <#lt>
EDITORTYPE=SPAN#ADDRESSPICKUP
\ No newline at end of file
<app-after-time
v-model="data.${item.getName()?lower_case}"
:formState="formState"
:data="data"
name="${item.getName()?lower_case}"
:context="context"
:viewparams="viewparams">
</app-after-time>
\ No newline at end of file
<app-after-time
name="${item.getName()?lower_case}"
v-model="row.${item.getName()?lower_case}"
:data="row"
:context="context"
:viewparams="viewparams">
</app-after-time>
\ No newline at end of file
<app-after-time
name="${item.getName()?lower_case}"
v-model="data.${item.getName()?lower_case}"
:data="data"
:context="context"
:viewparams="viewparams">
</app-after-time>
\ No newline at end of file
EDITORTYPE=SPAN#AFTERTIME
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<i-input v-model="data.${editor.name}" readonly disabled style="${editor.getEditorCssStyle()}"></i-input>
<i-input v-model="data.${editor.name}" <#if item.getPlaceHolder()??>placeholder="${item.getPlaceHolder()}"</#if> readonly disabled style="${editor.getEditorCssStyle()}"></i-input>
</#if>
\ No newline at end of file
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<app-color-span
:value="data.${editor.name}"
:data="data"
name="${editor.name}"
<#if item.getPSCodeList?? && item.getPSCodeList()??>
<#assign codelist=item.getPSCodeList() />
tag="${codelist.codeName}"
codelistType="${codelist.getCodeListType()}"
<#if codelist.getOrMode?? && codelist.getOrMode()?has_content>
renderMode="${codelist.getOrMode()}" <#t>
</#if>
<#if codelist.valueSeparator?has_content>
valueSeparator="${codelist.valueSeparator}" <#t>
</#if>
<#if codelist.textSeparator?has_content>
textSeparator="${codelist.textSeparator}" <#t>
</#if>
</#if>
<#if editor.getEditorParam("color","")?? && editor.getEditorParam("color","") !="">
color="${editor.getEditorParam("color","")}"
</#if>
:context="context" <#t>
:viewparams="viewparams" <#t>
:localContext =<@getNavigateContext editor /> <#t>
:localParam =<@getNavigateParams editor /> <#t>
style="${editor.getEditorCssStyle()}"
>
</app-color-span>
\ No newline at end of file
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<app-color-span <#t>
name='${editor.name}' <#t>
:value="row[column.property]" <#t>
<#if item.getPSCodeList?? && item.getPSCodeList()??>
<#assign codelist=item.getPSCodeList() />
tag='${codelist.codeName}' <#t>
codelistType='${codelist.getCodeListType()}' <#t>
<#if codelist.getOrMode?? && codelist.getOrMode()?has_content>
renderMode="${codelist.getOrMode()}" <#t>
</#if>
<#if codelist.valueSeparator?has_content>
valueSeparator="${codelist.valueSeparator}" <#t>
</#if>
<#if codelist.textSeparator?has_content>
textSeparator="${codelist.textSeparator}" <#t>
</#if>
</#if>
<#if editor.getEditorParam("color","")?? && editor.getEditorParam("color","") !="">
color="${editor.getEditorParam("color","")}"
</#if>
:data="row" <#t>
:context="context" <#t>
:viewparams="viewparams" <#t>
:localContext =<@getNavigateContext editor /> <#t>
:localParam =<@getNavigateParams editor /> <#t>
style="${editor.getEditorCssStyle()}"><#t>
</app-color-span><#lt>
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<app-color-span <#t>
:value="data.${editor.name?lower_case}" <#t>
name="${editor.name?lower_case}" <#t>
:data="data" <#t>
:context="context" <#t>
:viewparams="viewparams" <#t>
:localContext =<@getNavigateContext editor /> <#t>
:localParam =<@getNavigateParams editor /> <#t>
<#if item.getPSCodeList?? && item.getPSCodeList()??>
<#assign codelist=item.getPSCodeList() />
tag="${codelist.codeName}"
codelistType="${codelist.getCodeListType()}"
<#if codelist.getOrMode?? && codelist.getOrMode()?has_content>
renderMode="${codelist.getOrMode()}" <#t>
</#if>
<#if codelist.valueSeparator?has_content>
valueSeparator="${codelist.valueSeparator}" <#t>
</#if>
<#if codelist.textSeparator?has_content>
textSeparator="${codelist.textSeparator}" <#t>
</#if>
</#if>
<#if editor.getEditorParam("color","")?? && editor.getEditorParam("color","") !="">
color="${editor.getEditorParam("color","")}"
</#if>
style="${item.getEditorCssStyle()}"> <#t>
</app-color-span> <#lt>
EDITORTYPE=SPAN#COLORSPAN
\ No newline at end of file
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-span <#t>
name='${editor.name}' <#t>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-span <#t>
name='${editor.name}' <#t>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-span <#t>
:value="data.${editor.name?lower_case}" <#t>
......@@ -14,6 +14,9 @@
<#assign codelist=item.getPSCodeList()>
tag='${codelist.codeName}' <#t>
codelistType='${codelist.getCodeListType()}' <#t>
<#if codelist.getValueSeparator?? && codelist.getValueSeparator()?? && codelist.getValueSeparator() != ''>
valueSeparator='${codelist.getValueSeparator()}' <#t>
</#if>
</#if>
style="${item.getEditorCssStyle()}"> <#t>
</app-span> <#lt>
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-stepper name='${editor.name}' :value="this.data.${editor.name}" @change="onFormItemValueChange" :disabled="detailsModel.${editor.name}.disabled" style="${editor.getEditorCssStyle()}"></app-stepper>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-stepper name='${editor.name}' :value="row[column.property]" @change="($event)=>{onGridItemValueChange(row,$event,$index)} " :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}"></app-stepper>
<app-stepper name='${editor.name}' :value="row[column.property]" @change="($event)=>{onGridItemValueChange(row,$event,$index)} " :disabled="getColumnDisabled(row,column.property)" style="${item.getEditorCssStyle()}"></app-stepper>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-stepper
name='${editor.name}'
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-slider name='${editor.name}' :value="this.data.${editor.name}" @change="onFormItemValueChange" :disabled="detailsModel.${editor.name}.disabled" style="${editor.getEditorCssStyle()}"></app-slider>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-slider name='${editor.name}' :value="row[column.property]" @change="($event)=>{onGridItemValueChange(row,$event,$index)} " :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}"></app-slider>
<app-slider name='${editor.name}' :value="row[column.property]" @change="($event)=>{onGridItemValueChange(row,$event,$index)} " :disabled="getColumnDisabled(row,column.property)" style="${item.getEditorCssStyle()}"></app-slider>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-slider
name='${editor.name?lower_case}'
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<div style="${editor.getEditorCssStyle()}">{{data.${editor.name}}}</div>
</#if>
\ No newline at end of file
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-autocomplete
:data="data"
:disabled="detailsModel.${editor.name}.disabled"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
:context="context"
:viewparams="viewparams"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-autocomplete
:data="row"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPlaceHolder()??>
placeholder="${item.getPlaceHolder()}"
</#if>
name='${editor.name}'
:context="context"
:viewparams="viewparams"
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-rate name='${editor.name}' :value="this.data.${editor.name}" @change="($event)=>{this.data.${editor.name} = $event} " :disabled="detailsModel.${editor.name}.disabled" style="${editor.getEditorCssStyle()}"></app-rate>
<app-rate
name='${editor.name}'
:value="this.data.${editor.name}"
@change="($event)=>{this.data.${editor.name} = $event} "
:disabled="detailsModel.${editor.name}.disabled"
style="${editor.getEditorCssStyle()}">
<#if item.getPSCodeList?? && item.getPSCodeList()??>
<#assign codelist=item.getPSCodeList()>
tag='${codelist.codeName}' <#t>
codelistType='${codelist.getCodeListType()}' <#t>
<#if codelist.getValueSeparator?? && codelist.getValueSeparator()?? && codelist.getValueSeparator() != ''>
valueSeparator='${codelist.getValueSeparator()}' <#t>
</#if>
</#if>
</app-rate>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-rate name='${item.name}' :value="row[column.property]" @change="($event)=>{row[column.property] = $event; gridEditItemChange(row, column.property, $event, $index)} " :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" style="${item.getEditorCssStyle()}"></app-rate>
<app-rate
name='${item.name}'
:value="row[column.property]"
@change="($event)=>{row[column.property] = $event; gridEditItemChange(row, column.property, $event, $index)} "
:disabled="getColumnDisabled(row,column.property)"
<#if item.getPSCodeList?? && item.getPSCodeList()??>
<#assign codelist=item.getPSCodeList()>
tag='${codelist.codeName}' <#t>
codelistType='${codelist.getCodeListType()}' <#t>
<#if codelist.getValueSeparator?? && codelist.getValueSeparator()?? && codelist.getValueSeparator() != ''>
valueSeparator='${codelist.getValueSeparator()}' <#t>
</#if>
</#if>
style="${item.getEditorCssStyle()}"></app-rate>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-rate
name='${editor.name?lower_case}'
:value="data.${editor.name?lower_case}"
@change="($event)=>{data.${editor.name?lower_case} = $event; panelEditItemChange(data, '${editor.name?lower_case}', $event)} "
:disabled="detailsModel.${item.getCodeName()}.disabled"
<#if item.getPSCodeList?? && item.getPSCodeList()??>
<#assign codelist=item.getPSCodeList()>
tag='${codelist.codeName}' <#t>
codelistType='${codelist.getCodeListType()}' <#t>
<#if codelist.getValueSeparator?? && codelist.getValueSeparator()?? && codelist.getValueSeparator() != ''>
valueSeparator='${codelist.getValueSeparator()}' <#t>
</#if>
</#if>
style="${item.getEditorCssStyle()}">
</app-rate>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<div style="${editor.getEditorCssStyle()}">
<app-checkbox :value="this.data.${editor.name}" @change="($event)=>{this.data.${editor.name} = $event} " :disabled="detailsModel.${editor.name}.disabled"></app-checkbox>
......
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<div style="${item.getEditorCssStyle()}">
<app-checkbox :value="row[column.property]" @change="($event)=>{row[column.property] = $event;gridEditItemChange(row, column.property, $event, $index)} " :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"></app-checkbox>
<app-checkbox :value="row[column.property]" @change="($event)=>{row[column.property] = $event;gridEditItemChange(row, column.property, $event, $index)} " :disabled="getColumnDisabled(row,column.property)"></app-checkbox>
</div>
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<div style="${item.getEditorCssStyle()}">
<app-checkbox :value="data.${editor.name?lower_case}" @change="($event)=>{data.${editor.name?lower_case} = $event;panelEditItemChange(data, '${editor.name?lower_case}', $event)} " :disabled="detailsModel.${item.getCodeName()}.disabled"></app-checkbox>
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-checkbox-list
v-model="data.${editor.name}"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-checkbox-list
v-model="row[column.property]"
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
:disabled="getColumnDisabled(row,column.property)"
:data="row"
:context="context"
:viewparams="viewparams"
......
<#ibizinclude>../@MACRO/FUNC/PUBLIC.vue.ftl</#ibizinclude>
<#if item.render??>
${item.render.code}
<#if editor?? && editor.render??>
${editor.render.code}
<#else>
<app-checkbox-list
v-model="data.${editor.name?lower_case}"
......
......@@ -83,10 +83,6 @@ ${front_block}
<#-- BEGIN: 前台处理模式:打开HTML -->
<#if item.getFrontProcessType() == 'OPENHTMLPAGE'>
<#-- 打开独立程序弹出 -->
<#if item.isCloseEditView()>
<#-- 关闭编辑视图 -->
actionContext.closeView(null);
</#if>
const openPopupApp = (url: string) => {
window.open(url, '_blank');
return null;
......@@ -171,10 +167,6 @@ ${front_block}
</#if>
</#if>
<#-- END:准备参数 -->
<#-- 关闭编辑视图 -->
<#if item.isCloseEditView()>
actionContext.closeView(null);
</#if>
<#-- BEGIN: 打开重定向视图 -->
<#if dataview.isRedirectView()>
<#-- BEGIN: 打开顶级分页视图 -->
......@@ -389,6 +381,11 @@ ${front_block}
}
</#if>
<#-- END 是否重新加载数据 -->
<#-- BEGIN关闭编辑视图 -->
<#if item.isCloseEditView()>
actionContext.closeView(null);
</#if>
<#-- END关闭编辑视图 -->
<#-- BEGIN 后续界面行为 -->
<#if item.getNextPSUIAction?? && item.getNextPSUIAction()??>
<#assign nextPSUIAction = item.getNextPSUIAction()/>
......@@ -422,6 +419,11 @@ ${front_block}
xData.refresh(args);
}
</#if>
<#-- BEGIN关闭编辑视图 -->
<#if item.isCloseEditView()>
_this.closeView(null);
</#if>
<#-- END关闭编辑视图 -->
<#-- 后续界面行为 -->
<#if item.getNextPSUIAction?? && item.getNextPSUIAction()??>
<#assign nextPSUIAction = item.getNextPSUIAction()/>
......@@ -465,6 +467,11 @@ ${front_block}
xData.refresh(args);
}
</#if>
<#-- BEGIN关闭编辑视图 -->
<#if item.isCloseEditView()>
_this.closeView(null);
</#if>
<#-- END关闭编辑视图 -->
<#-- 后续界面行为 -->
<#if item.getNextPSUIAction?? && item.getNextPSUIAction()??>
<#assign nextPSUIAction = item.getNextPSUIAction()/>
......@@ -509,6 +516,10 @@ ${front_block}
xData.refresh(args);
}
</#if>
<#-- BEGIN关闭编辑视图 -->
<#if item.isCloseEditView()>
_this.closeView(null);
</#if>
<#-- 后续界面行为 -->
<#if item.getNextPSUIAction?? && item.getNextPSUIAction()??>
<#assign nextPSUIAction = item.getNextPSUIAction()/>
......@@ -551,6 +562,10 @@ ${front_block}
if (xData && xData.refresh && xData.refresh instanceof Function) {
xData.refresh(args);
}
<#-- 关闭编辑视图 -->
<#if item.isCloseEditView()>
actionContext.closeView(null);
</#if>
<#-- 后续界面行为 -->
<#if item.getNextPSUIAction?? && item.getNextPSUIAction()??>
<#assign nextPSUIAction = item.getNextPSUIAction()/>
......
......@@ -100,12 +100,13 @@ ${backend_block}
actionContext.$Notice.error({ title: '错误', desc: response.message });
return;
}
<#if item.isShowBusyIndicator()>
<#if item.getSuccessMsg?? && item.getSuccessMsg()??>
actionContext.$Notice.success({ title: '成功', desc: '${item.getSuccessMsg()}' });
<#else>
actionContext.$Notice.success({ title: '成功', desc: '${item.getCaption()}成功!' });
</#if>
</#if>
const _this: any = actionContext;
<#-- 是否重新加载数据 -->
<#if item.isReloadData?? && item.isReloadData()>
......@@ -141,11 +142,12 @@ ${backend_block}
</#if>
return response;
}).catch((response: any) => {
if (!response || !response.status || !response.data) {
actionContext.$Notice.error({ title: '错误', desc: '系统异常!' });
if (response && response.status && response.data) {
actionContext.$Notice.error({ title: (actionContext.$t('app.commonWords.wrong') as string), desc: response.data.message });
return;
}
if (response.status === 401) {
if (!response || !response.status || !response.data) {
actionContext.$Notice.error({ title: (actionContext.$t('app.commonWords.wrong') as string), desc: (actionContext.$t('app.commonWords.sysException') as string) });
return;
}
return response;
......
......@@ -66,8 +66,8 @@ import ${srfclassname('${appCounter.getCodeName()}')}CounterService from '@/co
*/
public onSearch($event: any): void {
const refs: any = this.$refs;
if (refs.dataview) {
refs.dataview.refresh({});
if (refs.kanban) {
refs.kanban.refresh({});
}
}
......
......@@ -175,11 +175,11 @@ export default class ${srfclassname('${view.name}')}Base extends Vue {
@Watch('viewparam',{immediate: true, deep: true})
onParamData(newVal: any, oldVal: any) {
if(newVal){
for(let key in this.viewparams){
delete this.viewparams[key];
}
if(typeof this.viewparams == 'string') {
this.viewparams = {};
if(typeof newVal == 'string') {
Object.assign(this.viewparams, JSON.parse(this.viewparam));
}else{
this.viewparams = Util.deepCopy(this.viewparam);
}
<#if watch_viewparam_block??>${watch_viewparam_block}</#if>
}
......@@ -195,11 +195,11 @@ export default class ${srfclassname('${view.name}')}Base extends Vue {
@Watch('viewdata')
onViewData(newVal: any, oldVal: any) {
const _this: any = this;
<#if viewdata_block??>${viewdata_block}</#if>
if (!Object.is(newVal, oldVal) && _this.engine) {
this.$nextTick(()=>{
_this.parseViewParam();
_this.engine.load();
<#if viewdata_block??>${viewdata_block}</#if>
});
} else if(!Object.is(newVal, oldVal) && _this.refresh && _this.refresh instanceof Function) {
_this.refresh();
......
......@@ -12,6 +12,7 @@
return;
}
const { data: _data } = response;
this.engine.computeToolbarState(false,_data);
this.viewState.next({ tag: 'tabexppanel', action: 'loadmodel', data: _data});
if (_data.${appDataEntity.getMajorPSAppDEField().getCodeName()?lower_case}) {
Object.assign(this.model, { dataInfo: _data.${appDataEntity.getMajorPSAppDEField().getCodeName()?lower_case} });
......
......@@ -8,6 +8,19 @@
});
}
</#assign>
<#assign import_block>
import CodeListService from "@/codelist/codelist-service";
<#if view.getPSSysCounterRef?? && view.getPSSysCounterRef()?? && view.getPSSysCounterRef().getPSAppCounter()??>
<#assign appCounter = view.getPSSysCounterRef().getPSAppCounter() />
import ${srfclassname('${appCounter.getCodeName()}')}CounterService from '@/counter/${srffilepath2(appCounter.getCodeName())}/${srffilepath2(appCounter.getCodeName())}-counter';
</#if>
</#assign>
<#assign mounted_block>
<#if view.isEnableQuickGroup()>_this.loadQuickGroupModel();</#if>
</#assign>
<#ibizinclude>
../@MACRO/LAYOUTPANEL_VIEW.template.ftl
</#ibizinclude>
......@@ -52,6 +65,125 @@
*/
public isExpandSearchForm: boolean = ${view.isExpandSearchForm()?c};
<#if view.isEnableQuickGroup()>
/**
* 代码表服务对象
*
* @type {CodeListService}
* @memberof ${srfclassname('${view.name}')}Base
*/
public codeListService:CodeListService = new CodeListService({ $store: this.$store });
/**
* 快速分组数据对象
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public quickGroupData:any;
/**
* 快速分组是否有抛值
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public isEmitQuickGroupValue:boolean = false;
/**
* 快速分组模型
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public quickGroupModel:Array<any> = [];
/**
* 加载快速分组模型
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public loadQuickGroupModel(){
<#if view.getQuickGroupPSCodeList()??>
<#assign codelist=view.getQuickGroupPSCodeList() />
let quickGroupCodeList:any = {tag:'${codelist.codeName}',codelistType:'${codelist.getCodeListType()}'};
if(quickGroupCodeList.tag && Object.is(quickGroupCodeList.codelistType,"STATIC")){
const codelist = this.$store.getters.getCodeList(quickGroupCodeList.tag);
if (codelist) {
this.quickGroupModel = [...this.handleDynamicData(JSON.parse(JSON.stringify(codelist.items)))];
} else {
<#noparse>console.log(`----${quickGroupCodeList.tag}----代码表不存在`);</#noparse>
}
}else if(quickGroupCodeList.tag && Object.is(quickGroupCodeList.codelistType,"DYNAMIC")){
this.codeListService.getItems(quickGroupCodeList.tag,{},{}).then((res:any) => {
this.quickGroupModel = res;
}).catch((error:any) => {
<#noparse>console.log(`----${quickGroupCodeList.tag}----代码表不存在`);</#noparse>
});
}
</#if>
}
/**
* 处理快速分组模型动态数据部分(%xxx%)
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public handleDynamicData(inputArray:Array<any>){
if(inputArray.length >0){
inputArray.forEach((item:any) =>{
if(item.data && Object.keys(item.data).length >0){
Object.keys(item.data).forEach((name:any) =>{
let value: any = item.data[name];
if (value && typeof(value)=='string' && value.startsWith('%') && value.endsWith('%')) {
const key = (value.substring(1, value.length - 1)).toLowerCase();
if (this.context[key]) {
value = this.context[key];
} else if(this.viewparams[key]){
value = this.viewparams[key];
}
}
item.data[name] = value;
})
}
})
}
return inputArray;
}
/**
* 快速分组值变化
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public quickGroupValueChange($event:any){
if($event){
this.quickGroupData = $event.data;
if(this.isEmitQuickGroupValue){
this.onSearch($event);
}
}
this.isEmitQuickGroupValue = true;
}
</#if>
<#if view.getQuickPSDESearchForm()??>
/**
* 快速搜索栏数据对象
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public quickFormData:any;
/**
* 快速搜索栏值变化
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public quickFormValueChange($event:any){
this.quickFormData = $event;
this.onSearch($event);
}
</#if>
/**
* 快速搜索
*
......
......@@ -2,6 +2,18 @@
../@MACRO/LAYOUTPANEL_VIEW.template.ftl
</#ibizinclude>
<#assign import_block>
import CodeListService from "@/codelist/codelist-service";
<#if view.getPSSysCounterRef?? && view.getPSSysCounterRef()?? && view.getPSSysCounterRef().getPSAppCounter()??>
<#assign appCounter = view.getPSSysCounterRef().getPSAppCounter() />
import ${srfclassname('${appCounter.getCodeName()}')}CounterService from '@/counter/${srffilepath2(appCounter.getCodeName())}/${srffilepath2(appCounter.getCodeName())}-counter';
</#if>
</#assign>
<#assign mounted_block>
<#if view.isEnableQuickGroup()>_this.loadQuickGroupModel();</#if>
</#assign>
<#ibizinclude>
../@MACRO/VIEW_HEADER-BASE.vue.ftl
</#ibizinclude>
......@@ -26,6 +38,125 @@
*/
public isExpandSearchForm: boolean = ${view.isExpandSearchForm()?c};
<#if view.isEnableQuickGroup()>
/**
* 代码表服务对象
*
* @type {CodeListService}
* @memberof ${srfclassname('${view.name}')}Base
*/
public codeListService:CodeListService = new CodeListService({ $store: this.$store });
/**
* 快速分组数据对象
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public quickGroupData:any;
/**
* 快速分组是否有抛值
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public isEmitQuickGroupValue:boolean = false;
/**
* 快速分组模型
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public quickGroupModel:Array<any> = [];
/**
* 加载快速分组模型
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public loadQuickGroupModel(){
<#if view.getQuickGroupPSCodeList()??>
<#assign codelist=view.getQuickGroupPSCodeList() />
let quickGroupCodeList:any = {tag:'${codelist.codeName}',codelistType:'${codelist.getCodeListType()}'};
if(quickGroupCodeList.tag && Object.is(quickGroupCodeList.codelistType,"STATIC")){
const codelist = this.$store.getters.getCodeList(quickGroupCodeList.tag);
if (codelist) {
this.quickGroupModel = [...this.handleDynamicData(JSON.parse(JSON.stringify(codelist.items)))];
} else {
<#noparse>console.log(`----${quickGroupCodeList.tag}----代码表不存在`);</#noparse>
}
}else if(quickGroupCodeList.tag && Object.is(quickGroupCodeList.codelistType,"DYNAMIC")){
this.codeListService.getItems(quickGroupCodeList.tag,{},{}).then((res:any) => {
this.quickGroupModel = res;
}).catch((error:any) => {
<#noparse>console.log(`----${quickGroupCodeList.tag}----代码表不存在`);</#noparse>
});
}
</#if>
}
/**
* 处理快速分组模型动态数据部分(%xxx%)
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public handleDynamicData(inputArray:Array<any>){
if(inputArray.length >0){
inputArray.forEach((item:any) =>{
if(item.data && Object.keys(item.data).length >0){
Object.keys(item.data).forEach((name:any) =>{
let value: any = item.data[name];
if (value && typeof(value)=='string' && value.startsWith('%') && value.endsWith('%')) {
const key = (value.substring(1, value.length - 1)).toLowerCase();
if (this.context[key]) {
value = this.context[key];
} else if(this.viewparams[key]){
value = this.viewparams[key];
}
}
item.data[name] = value;
})
}
})
}
return inputArray;
}
/**
* 快速分组值变化
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public quickGroupValueChange($event:any){
if($event){
this.quickGroupData = $event.data;
if(this.isEmitQuickGroupValue){
this.onSearch($event);
}
}
this.isEmitQuickGroupValue = true;
}
</#if>
<#if view.getQuickPSDESearchForm()??>
/**
* 快速搜索栏数据对象
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public quickFormData:any;
/**
* 快速搜索栏值变化
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public quickFormValueChange($event:any){
this.quickFormData = $event;
this.onSearch($event);
}
</#if>
/**
* 快速搜索
*
......
<#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
<#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=APPDEMAPVIEW9
\ No newline at end of file
......@@ -33,6 +33,7 @@
<#assign viewdata_block>
if(!Object.is(newVal, oldVal) ){
_this.parseViewParam();
return;
}
</#assign>
<#ibizinclude>
......
<#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=APPDEMPICKUPVIEW2
\ No newline at end of file
......@@ -7,6 +7,22 @@
*/
public split: number = 0.2;
/**
* 视图引用数据
*
* @memberof ${srfclassname('${view.codeName}')}Base
*/
public viewRefData:any = {
<#if view.getPSAppViewRefs?? && view.getPSAppViewRefs()??>
<#list view.getPSAppViewRefs() as viewRef>
<#if viewRef.getName?? && viewRef.getName()?? && viewRef.getRefPSAppView?? && viewRef.getRefPSAppView()??>
<#assign refAppView = viewRef.getRefPSAppView() />
"${viewRef.getName()}":{viewname:"${srffilepath2(refAppView.getCodeName())}",title:"<#if refAppView.getPSAppDataEntity()??>entities.${refAppView.getPSAppDataEntity().getCodeName()?lower_case}.views.${refAppView.getPSDEViewCodeName()?lower_case}.caption<#else>app.views.${refAppView.getCodeName()?lower_case}.caption</#if>", width: <#if refAppView.getWidth?? && refAppView.getWidth() gt 0>${refAppView.getWidth()?c}<#else>800</#if>, height: <#if refAppView.getHeight?? && refAppView.getHeight() gt 0>${refAppView.getHeight()?c}<#else>500</#if>}<#if viewRef_has_next>,</#if>
</#if>
</#list>
</#if>
};
/**
* 树导航栏数据
*
......@@ -135,7 +151,8 @@
if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()];
}
xData.submitbatch(datas,linkItem).then((response: any) => {
const submitBatchData:Function = (submitdata:any,linkItem:any) =>{
xData.submitbatch(submitdata,linkItem).then((response: any) => {
if (!response || response.status !== 200) {
return;
}
......@@ -146,6 +163,25 @@
}
});
}
if(linkItem && linkItem.sequenceflowview && <#noparse>this.viewRefData[`WFACTION@${linkItem.sequenceflowview}`]</#noparse>){
let tempContext:any = Util.deepCopy(this.context);
let tempViewParam:any = {actionView:linkItem.sequenceflowview,actionForm:linkItem.sequenceflowform};
<#noparse>let targetView:any = this.viewRefData[`WFACTION@${linkItem.sequenceflowview}`];</#noparse>
const appmodal = this.$appmodal.openModal({viewname:targetView.viewname, title:(this.$t(targetView.title) as string), height: targetView.height, width: targetView.width}, tempContext,tempViewParam);
appmodal.subscribe((result: any) => {
if (!result || !Object.is(result.ret, 'OK')) {
return;
}
let tempSubmitData:any = Util.deepCopy(datas);
tempSubmitData.forEach((element:any) => {
element.viewparams = result.datas && result.datas[0];
});
submitBatchData(tempSubmitData,linkItem);
});
}else{
submitBatchData(datas,linkItem);
}
}
/**
* 左侧树选中节点
......@@ -170,7 +206,9 @@
public setTreeNodeHighLight(data: any): void {
this.$nextTick(() =>{
const tree: any = this.$refs.tree;
if(tree) {
tree.setCurrentKey(data.userTaskId);
}
})
}
<#if view.hasPSControl('grid')>
......
<#assign watch_viewparam_block>
if(this.viewparams && this.viewparams.actionForm){
this.computeActivedForm(this.viewparams.actionForm);
}else{
this.computeActivedForm(null);
}
</#assign>
<#assign mounted_block>
this.viewState.next({ tag: "form", action: "autoload", data: {srfkey:this.context.${appde.getCodeName()?lower_case}} });
</#assign>
<#assign self_content>
/**
* 当前激活表单
*
* @memberof ${srfclassname('${view.codeName}')}Base
*/
public activeForm:any = {};
/**
* 所有表单
*
* @memberof ${srfclassname('${view.codeName}')}Base
*/
/**
* 所有表单数据
*
* @memberof ${srfclassname('${view.codeName}')}Base
*/
public allForm: any = {
<#if view.getAllPSControls?? && view.getAllPSControls()??>
<#list view.getAllPSControls() as singleControl>
<#if singleControl.getControlType?? && singleControl.getControlType()?? && singleControl.getControlType() != "TOOLBAR">
"${singleControl.getName()}":{name:"view_${singleControl.getName()}",autosave:"${singleControl.isEnableAutoSave()?c}",showBusyIndicator:"${singleControl.isShowBusyIndicator()?c}",updateAction:"<#if singleControl.getUpdatePSControlAction()?? && singleControl.getUpdatePSControlAction().getPSAppDEMethod()??>${singleControl.getUpdatePSControlAction().getPSAppDEMethod().getCodeName()}</#if>",removeAction:"<#if singleControl.getRemovePSControlAction()?? && singleControl.getRemovePSControlAction().getPSAppDEMethod()??>${singleControl.getRemovePSControlAction().getPSAppDEMethod().getCodeName()}</#if>",loaddraftAction:"<#if singleControl.getGetDraftPSControlAction()?? && singleControl.getGetDraftPSControlAction().getPSAppDEMethod()??>${singleControl.getGetDraftPSControlAction().getPSAppDEMethod().getCodeName()}</#if>",loadAction:"<#if singleControl.getGetPSControlAction()?? && singleControl.getGetPSControlAction().getPSAppDEMethod()??>${singleControl.getGetPSControlAction().getPSAppDEMethod().getCodeName()}</#if>",createAction:"<#if singleControl.getCreatePSControlAction()?? && singleControl.getCreatePSControlAction().getPSAppDEMethod()??>${singleControl.getCreatePSControlAction().getPSAppDEMethod().getCodeName()}</#if>",WFSubmitAction:"<#if singleControl.getWFSubmitPSControlAction()?? && singleControl.getWFSubmitPSControlAction().getPSAppDEMethod()??>${singleControl.getWFSubmitPSControlAction().getPSAppDEMethod().getCodeName()}</#if>",WFStartAction:"<#if singleControl.getWFStartPSControlAction()?? && singleControl.getWFStartPSControlAction().getPSAppDEMethod()??>${singleControl.getWFStartPSControlAction().getPSAppDEMethod().getCodeName()}</#if>"}<#if singleControl_has_next>,</#if>
</#if>
</#list>
</#if>
};
/**
* 计算激活表单
*
* @memberof ${srfclassname('${view.codeName}')}Base
*/
public computeActivedForm(inputForm:any){
if(!inputForm){
this.activeForm = this.allForm && Object.values(this.allForm)[0];
return;
}
if(this.allForm && Object.keys(this.allForm).length >0){
Object.keys(this.allForm).forEach((name:string) =>{
if(Object.is(name,<#noparse>`wfform_${inputForm.toLowerCase()}`</#noparse>)){
this.activeForm = this.allForm[name];
}
})
}
}
/**
* 确认
*
* @memberof ${srfclassname('${view.codeName}')}Base
*/
public onClickOk(){
let xData:any = this.$refs.form;
if(xData){
let preFormData:any = xData.getData();
let nextFormData:any = xData.transformData(preFormData);
Object.assign(preFormData,nextFormData);
this.$store.commit('viewaction/setViewDataChange', { viewtag: this.viewtag, viewdatachange: false });
this.$emit('viewdataschange', [preFormData]);
this.$emit('close', null);
}
}
/**
* 取消
*
* @memberof ${srfclassname('${view.codeName}')}Base
*/
public onClickCancel(){
this.$emit('close', null);
}
</#assign>
<#ibizinclude>
../@MACRO/VIEW-BASE.vue.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=APPDEWFDYNAACTIONVIEW
\ No newline at end of file
......@@ -6,6 +6,44 @@
*/
public linkModel:Array<any> = [];
/**
* 激活表单
*
* @memberof ${srfclassname('${view.codeName}')}Base
*/
public activeForm:any = {};
/**
* 所有表单数据
*
* @memberof ${srfclassname('${view.codeName}')}Base
*/
public allForm: any = {
<#if view.getAllPSControls?? && view.getAllPSControls()??>
<#list view.getAllPSControls() as singleControl>
<#if singleControl.getControlType?? && singleControl.getControlType()?? && singleControl.getControlType() != "TOOLBAR">
"${singleControl.getName()}":{name:"view_${singleControl.getName()}",autosave:"${singleControl.isEnableAutoSave()?c}",showBusyIndicator:"${singleControl.isShowBusyIndicator()?c}",updateAction:"<#if singleControl.getUpdatePSControlAction()?? && singleControl.getUpdatePSControlAction().getPSAppDEMethod()??>${singleControl.getUpdatePSControlAction().getPSAppDEMethod().getCodeName()}</#if>",removeAction:"<#if singleControl.getRemovePSControlAction()?? && singleControl.getRemovePSControlAction().getPSAppDEMethod()??>${singleControl.getRemovePSControlAction().getPSAppDEMethod().getCodeName()}</#if>",loaddraftAction:"<#if singleControl.getGetDraftPSControlAction()?? && singleControl.getGetDraftPSControlAction().getPSAppDEMethod()??>${singleControl.getGetDraftPSControlAction().getPSAppDEMethod().getCodeName()}</#if>",loadAction:"<#if singleControl.getGetPSControlAction()?? && singleControl.getGetPSControlAction().getPSAppDEMethod()??>${singleControl.getGetPSControlAction().getPSAppDEMethod().getCodeName()}</#if>",createAction:"<#if singleControl.getCreatePSControlAction()?? && singleControl.getCreatePSControlAction().getPSAppDEMethod()??>${singleControl.getCreatePSControlAction().getPSAppDEMethod().getCodeName()}</#if>",WFSubmitAction:"<#if singleControl.getWFSubmitPSControlAction()?? && singleControl.getWFSubmitPSControlAction().getPSAppDEMethod()??>${singleControl.getWFSubmitPSControlAction().getPSAppDEMethod().getCodeName()}</#if>",WFStartAction:"<#if singleControl.getWFStartPSControlAction()?? && singleControl.getWFStartPSControlAction().getPSAppDEMethod()??>${singleControl.getWFStartPSControlAction().getPSAppDEMethod().getCodeName()}</#if>"}<#if singleControl_has_next>,</#if>
</#if>
</#list>
</#if>
};
/**
* 视图引用数据
*
* @memberof ${srfclassname('${view.codeName}')}Base
*/
public viewRefData:any = {
<#if view.getPSAppViewRefs?? && view.getPSAppViewRefs()??>
<#list view.getPSAppViewRefs() as viewRef>
<#if viewRef.getName?? && viewRef.getName()?? && viewRef.getRefPSAppView?? && viewRef.getRefPSAppView()??>
<#assign refAppView = viewRef.getRefPSAppView() />
"${viewRef.getName()}":{viewname:"${srffilepath2(refAppView.getCodeName())}",title:"<#if refAppView.getPSAppDataEntity()??>entities.${refAppView.getPSAppDataEntity().getCodeName()?lower_case}.views.${refAppView.getPSDEViewCodeName()?lower_case}.caption<#else>app.views.${refAppView.getCodeName()?lower_case}.caption</#if>", width: <#if refAppView.getWidth?? && refAppView.getWidth() gt 0>${refAppView.getWidth()?c}<#else>800</#if>, height: <#if refAppView.getHeight?? && refAppView.getHeight() gt 0>${refAppView.getHeight()?c}<#else>500</#if>}<#if viewRef_has_next>,</#if>
</#if>
</#list>
</#if>
};
/**
* 获取工具栏按钮
*
......@@ -14,16 +52,17 @@
public getWFLinkModel():Promise<any>{
return new Promise((resolve:any, reject:any) =>{
let datas: any[] = [];
let xData: any = this.$refs.form;
if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()];
}
if(Object.keys(this.viewparams).length > 0){
Object.assign(datas,{'taskDefinitionKey':this.viewparams.userTaskId});
}
this.appEntityService.GetWFLink(JSON.parse(JSON.stringify(this.context)),datas,true).then((response:any) =>{
if (response && response.status === 200) {
this.linkModel = response.data;
if(response.headers && response.headers['process-form']){
this.computeActivedForm(response.headers['process-form']);
}else{
this.computeActivedForm(null);
}
resolve(response.data);
}
}).catch((response: any) => {
......@@ -39,6 +78,25 @@
});
}
/**
* 计算激活表单
*
* @memberof ${srfclassname('${view.codeName}')}Base
*/
public computeActivedForm(inputForm:any){
if(!inputForm){
this.activeForm = this.allForm && Object.values(this.allForm)[0];
return;
}
if(this.allForm && Object.keys(this.allForm).length >0){
Object.keys(this.allForm).forEach((name:string) =>{
<#noparse>if(Object.is(name,`wfform_${inputForm.toLowerCase()}`)){</#noparse>
this.activeForm = this.allForm[name];
}
})
}
}
/**
* 动态工具栏点击
*
......@@ -50,7 +108,8 @@
if (xData.getDatas && xData.getDatas instanceof Function) {
datas = [...xData.getDatas()];
}
xData.wfsubmit(datas,linkItem).then((response: any) => {
const submit:Function = (submitData:any,linkItem:any) =>{
xData.wfsubmit(submitData,linkItem).then((response: any) => {
if (!response || response.status !== 200) {
return;
}
......@@ -64,6 +123,26 @@
}
});
}
if(linkItem && linkItem.sequenceflowview && <#noparse>this.viewRefData[`WFACTION@${linkItem.sequenceflowview}`]</#noparse>){
let tempContext:any = Util.deepCopy(this.context);
Object.assign(tempContext,{${appde.getCodeName()?lower_case}:datas && datas[0].srfkey});
let tempViewParam:any = {actionView:linkItem.sequenceflowview,actionForm:linkItem.sequenceflowform};
let targetView:any = <#noparse>this.viewRefData[`WFACTION@${linkItem.sequenceflowview}`];</#noparse>
const appmodal = this.$appmodal.openModal({viewname:targetView.viewname, title:(this.$t(targetView.title) as string), height: targetView.height, width: targetView.width}, tempContext,tempViewParam);
appmodal.subscribe((result: any) => {
if (!result || !Object.is(result.ret, 'OK')) {
return;
}
let tempSubmitData:any = Util.deepCopy(datas);
tempSubmitData.forEach((element:any) => {
Object.assign(element,result.datas && result.datas[0]);
});
submit(tempSubmitData,linkItem);
});
}else{
submit(datas,linkItem);
}
}
</#assign>
<#ibizinclude>
......
<#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=APPDEWFSTARTVIEW
\ 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=APPDEPICKUPVIEW2
\ 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>
/**
* 视图唯一标识
*
* @type {string}
* @memberof ${srfclassname('${view.name}')}Base
*/
public viewUID: string = '${srffilepath2(view.getPSAppModule().getCodeName())}-${srffilepath2(view.getCodeName())}';
<#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=APPDETREEEXPVIEW2
\ No newline at end of file
<#assign mounted_block>
if(this.isLoadDefault){
this.viewState.next({ tag:'gantt', action: 'load', data: this.viewparams });
}
</#assign>
<#assign self_content>
/**
* 视图默认加载
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public isLoadDefault:boolean = <#if view.isLoadDefault?? && !view.isLoadDefault()>false<#else>true</#if>;
</#assign>
<#ibizinclude>
../@MACRO/LAYOUTPANEL_VIEW.template.ftl
</#ibizinclude>
......
<#assign mounted_block>
if(this.isLoadDefault){
this.viewState.next({ tag:'gantt', action: 'load', data: this.viewparams });
}
</#assign>
<#assign self_content>
/**
* 视图默认加载
*
* @memberof ${srfclassname('${view.name}')}Base
*/
public isLoadDefault:boolean = <#if view.isLoadDefault?? && !view.isLoadDefault()>false<#else>true</#if>;
</#assign>
<#ibizinclude>
../@MACRO/LAYOUTPANEL_VIEW.template.ftl
</#ibizinclude>
......
<#ibizinclude>
../@MACRO/GRID_VIEW-BASE.vue.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=APPDEGRIDVIEW2
\ 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=APPPANELVIEW
\ No newline at end of file
......@@ -15,6 +15,15 @@ import 'view-design/dist/styles/iview.css';
import 'ibiz-vue-lib/lib/ibiz-vue-lib.css';
import '@/styles/default.less';
import VueAMap from 'vue-amap';
Vue.use(VueAMap);
VueAMap.initAMapApiLoader({
key: '6ab2751103aea67e817c90a5528181b5',
plugin: ["AMap.Geolocation","AMap.PlaceSearch","AMap.Geocoder", "AMap.Autocomplete"],
uiVersion: '1.1'
});
// 模拟数据
if (process.env.NODE_ENV === 'development') {
require('@/mock');
......
......@@ -32,6 +32,7 @@ TARGET=PSSYSAPP
"font-awesome": "^4.7.0",
"ibiz-gantt-elastic": "^1.0.17",
"ibiz-vue-lib": "^0.1.13",
"ibiz-vue-pivottable": "^1.0.6",
"interactjs": "^1.9.4",
"moment": "^2.24.0",
"path-to-regexp": "^6.1.0",
......@@ -40,6 +41,7 @@ TARGET=PSSYSAPP
"tinymce": "4.8.5",
"view-design": "4.2.0",
"vue": "^2.6.10",
"vue-amap": "^0.5.10",
"vue-class-component": "^7.0.2",
"vue-grid-layout": "^2.3.7",
"vue-i18n": "^8.15.3",
......@@ -72,7 +74,7 @@ TARGET=PSSYSAPP
"less-loader": "^5.0.0",
"mockjs": "^1.1.0",
"script-loader": "^0.7.2",
"typescript": "~3.5.3",
"typescript": "^4.0.3",
<#if app.getAllPSAppPkgs?? && app.getAllPSAppPkgs()??>
<#list app.getAllPSAppPkgs() as appPackage>
<#if appPackage.getVerParam2()?? && appPackage.getVerParam2() !="">${appPackage.getVerParam2()},</#if>
......
......@@ -133,6 +133,8 @@ export default class ${srfclassname('${item.getCodeName()}')} {
Object.assign(itemdata,{text:item.<#if item.getTextPSAppDEField()??>${item.getTextPSAppDEField().getCodeName()?lower_case}<#else>${item.getPSAppDataEntity().getMajorPSAppDEField().codeName?lower_case}</#if>});
Object.assign(itemdata,{label:item.<#if item.getTextPSAppDEField()??>${item.getTextPSAppDEField().getCodeName()?lower_case}<#else>${item.getPSAppDataEntity().getMajorPSAppDEField().codeName?lower_case}</#if>});
<#if item.getPValuePSAppDEField()??>Object.assign(itemdata,{pvalue:item.${item.getPValuePSAppDEField().getCodeName()?lower_case}});</#if>
<#if item.getIconPathPSDEField()??>Object.assign(itemdata,{icon:item.${item.getIconPathPSDEField().getCodeName()?lower_case}});</#if>
<#if item.getIconClsPSDEField()??>Object.assign(itemdata,{iconcls:item.${item.getIconClsPSDEField().getCodeName()?lower_case}});</#if>
_items.push(itemdata);
});
}
......
......@@ -40,7 +40,7 @@ export default {
</#list>
},
</#if>
<#if ctrl.getControlType() == 'LIST' || ctrl.getControlType() == 'DATAVIEW' || ctrl.getControlType() == 'CHART'|| ctrl.getControlType() == 'KANBAN'|| ctrl.getControlType() == 'GANTT' || ctrl.getControlType() == 'TREEGRIDEX' || ctrl.getControlType() == 'CALENDAR'>
<#if ctrl.getControlType() == 'LIST' || ctrl.getControlType() == 'DATAVIEW' || ctrl.getControlType() == 'CHART'|| ctrl.getControlType() == 'KANBAN'|| ctrl.getControlType() == 'GANTT' || ctrl.getControlType() == 'TREEGRIDEX' || ctrl.getControlType() == 'CALENDAR' || ctrl.getControlType() == 'TREEVIEW'>
nodata:"<@getEmptyTextLanguage ctrl langrestype emptyText/>",
</#if>
<#if ctrl.getControlType() == 'GRID'>
......
......@@ -39,7 +39,7 @@ export default {
</#list>
},
</#if>
<#if ctrl.getControlType() == 'LIST' || ctrl.getControlType() == 'DATAVIEW' || ctrl.getControlType() == 'CHART' || ctrl.getControlType() == 'KANBAN'|| ctrl.getControlType() == 'GANTT' || ctrl.getControlType() == 'TREEGRIDEX' || ctrl.getControlType() == 'CALENDAR'>
<#if ctrl.getControlType() == 'LIST' || ctrl.getControlType() == 'DATAVIEW' || ctrl.getControlType() == 'CHART' || ctrl.getControlType() == 'KANBAN'|| ctrl.getControlType() == 'GANTT' || ctrl.getControlType() == 'TREEGRIDEX' || ctrl.getControlType() == 'CALENDAR' || ctrl.getControlType() == 'TREEVIEW'>
nodata:"<@getEmptyTextLanguage ctrl langrestype emptyText/>",
</#if>
<#if ctrl.getControlType() == 'GRID'>
......
......@@ -78,7 +78,9 @@ const mock = MockAdapter.getInstance();
const mockDatas: Array<any> = [
<#if de.getAllPSDESampleDatas?? && de.getAllPSDESampleDatas()??>
<#list de.getAllPSDESampleDatas() as data>
${data.getDataJO().toString()}<#if data_has_next>,</#if>
<#if data.getJOString?? && data.getJOString()??>
${data.getJOString()}<#if data_has_next>,</#if>
</#if>
</#list>
</#if>
];
......
......@@ -26,7 +26,7 @@ import { Verify } from '@/utils/verify/verify';
<#if logicparam.getSrcFieldName()??>
<#assign srcFieldParamName = logicparam.getSrcFieldName() />
<#if srcParam?? && srcParam.getParamPSAppDataEntity?? && srcParam.getParamPSAppDataEntity()?? && srcParam.getParamPSAppDataEntity().getPSAppDEField(srcFieldParamName,true)??>
<#assign srcFieldParam=srfcaseformat(srcParam.getParamPSAppDataEntity().getPSAppDEField(srcFieldParamName,true).getCodeName()?lower_case,'l_u2lC') />
<#assign srcFieldParam=srcParam.getParamPSAppDataEntity().getPSAppDEField(srcFieldParamName,true).getCodeName()?lower_case />
<#else>
<#assign srcFieldParam= logicparam.getSrcFieldName()?lower_case />
</#if>
......@@ -36,7 +36,7 @@ import { Verify } from '@/utils/verify/verify';
<#-- 目标参数属性名称 -->
<#assign dstFieldParamName = logicparam.getDstFieldName() />
<#if dstParam?? && dstParam.getParamPSAppDataEntity?? && dstParam.getParamPSAppDataEntity()?? && dstParam.getParamPSAppDataEntity().getPSAppDEField(dstFieldParamName,true)??>
<#assign dstFieldParam=srfcaseformat(dstParam.getParamPSAppDataEntity().getPSAppDEField(dstFieldParamName,true).getCodeName()?lower_case,'l_u2lC') />
<#assign dstFieldParam=dstParam.getParamPSAppDataEntity().getPSAppDEField(dstFieldParamName,true).getCodeName()?lower_case />
<#else>
<#assign dstFieldParam= logicparam.getDstFieldName()?lower_case />
</#if>
......@@ -64,9 +64,9 @@ import { Verify } from '@/utils/verify/verify';
<#-- 直接值 -->
<#elseif logicparam.getSrcValueType() =="SRCVALUE">
<#if dstParam.getParamPSAppDataEntity?? && dstParam.getParamPSAppDataEntity()?? && dstFieldParam == dstParam.getParamPSAppDataEntity().getKeyPSAppDEField().getCodeName()?lower_case>
Object.assign(tempDstParam${logicparam_index}Context,{${dstParam.getParamPSAppDataEntity().getCodeName()?lower_case}:${logicparam.getSrcValue()}});
Object.assign(tempDstParam${logicparam_index}Context,{${dstParam.getParamPSAppDataEntity().getCodeName()?lower_case}:<#if logicparam.getSrcValue()?? && logicparam.getSrcValue() !="">"${logicparam.getSrcValue()}"<#else>null</#if>});
</#if>
Object.assign(tempDstParam${logicparam_index}Data,{${dstFieldParam}:"${logicparam.getSrcValue()}"});
Object.assign(tempDstParam${logicparam_index}Data,{${dstFieldParam}:<#if logicparam.getSrcValue()?? && logicparam.getSrcValue() !="">"${logicparam.getSrcValue()}"<#else>null</#if>});
</#if>
this.paramsMap.set('${dstParam.getCodeName()}',{data:tempDstParam${logicparam_index}Data,context:tempDstParam${logicparam_index}Context});
</#if>
......
......@@ -132,13 +132,13 @@ import ${srfclassname('${singleLogic.getCodeName()}')}Logic from '@/service/${sr
<#elseif singleAppMethod.getMethodType() == "FETCH">
if(${condition}true){
let tempData:any = JSON.parse(JSON.stringify(data));
let res:any = Http.getInstance().get(`/${path}${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`,tempData,isloading);<#if afterActionStr?? && afterActionStr !="" >${afterActionStr}</#if>
let res:any = Http.getInstance().${singleServiceApi.getRequestMethod()?lower_case}(`/${path}${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`,tempData,isloading);<#if afterActionStr?? && afterActionStr !="" >${afterActionStr}</#if>
return res;
}
<#-- 方法类型为FETCHTEMP -->
<#elseif singleAppMethod.getMethodType() == "FETCHTEMP">
if(${condition}true){
let res:any = Http.getInstance().get(`/${path}${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`,data,isloading);<#if afterActionStr?? && afterActionStr !="" >${afterActionStr}</#if>
let res:any = Http.getInstance().${singleServiceApi.getRequestMethod()?lower_case}(`/${path}${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`,data,isloading);<#if afterActionStr?? && afterActionStr !="" >${afterActionStr}</#if>
return res;
}
<#else>
......@@ -234,12 +234,12 @@ import ${srfclassname('${singleLogic.getCodeName()}')}Logic from '@/service/${sr
<#-- 方法类型为FETCH -->
<#elseif singleAppMethod.getMethodType() == "FETCH">
let tempData:any = JSON.parse(JSON.stringify(data));
let res:any = Http.getInstance().get(`/${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`,tempData,isloading);<#if afterActionStr?? && afterActionStr !="" >
let res:any = Http.getInstance().${singleServiceApi.getRequestMethod()?lower_case}(`/${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`,tempData,isloading);<#if afterActionStr?? && afterActionStr !="" >
${afterActionStr}</#if>
return res;
<#-- 方法类型为FETCHTEMP -->
<#elseif singleAppMethod.getMethodType() == "FETCHTEMP">
let res:any = Http.getInstance().get(`/${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`,data,isloading);<#if afterActionStr?? && afterActionStr !="" >
let res:any = Http.getInstance().${singleServiceApi.getRequestMethod()?lower_case}(`/${srfpluralize(item.codeName)?lower_case}<#if singleServiceApi.getRequestPath()??>${singleServiceApi.getRequestPath()}</#if>`,data,isloading);<#if afterActionStr?? && afterActionStr !="" >
${afterActionStr}</#if>
return res;
<#else>
......@@ -683,6 +683,53 @@ export default class ${srfclassname('${item.getCodeName()}')}ServiceBase extends
<#-- 无实体行为,有接口走接口,无接口走本地供数 end -->
</#if>
}
<#-- 查询数据集(post方式)start -->
<#if singleAppMethod.getMethodType?? && singleAppMethod.getMethodType()?? && singleAppMethod.getMethodType() == "FETCH">
<#assign dataSet = singleAppMethod.getPSDEDataSet() />
/**
* search${dataSet.getCodeName()}接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof ${srfclassname('${item.getCodeName()}')}ServiceBase
*/
public async search${dataSet.getCodeName()}(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
<#if singleAppMethod.getPSDEAction()??>
<#assign appdeAction = singleAppMethod.getPSDEAction() />
<#if appdeAction.getTestActionMode?? && appdeAction.getTestActionMode()?? && (appdeAction.getTestActionMode() == 1 || appdeAction.getTestActionMode() == 3)>
let result:any = await this.test${srfclassname('search${dataSet.getCodeName()}')}(context,data);
if(!result) return;
</#if>
</#if>
<#-- 检查行为是否可以执行 end -->
<#if item.getPSAppDERSPathCount() gt 0 && singleServiceApi??>
<#list 1..item.getPSAppDERSPathCount() as count>
<#assign path = ''/>
<#assign condition = ''/>
<#list item.getPSAppDERSPath(count_index) as deRSPath>
<#if deRSPath.getMajorPSAppDataEntity?? && deRSPath.getMajorPSAppDataEntity()??>
<#assign _dataEntity = deRSPath.getMajorPSAppDataEntity()/>
<#assign condition>${condition}context.${_dataEntity.getCodeName()?lower_case} && </#assign>
<#assign path>${path}${srfpluralize(_dataEntity.codeName)?lower_case}/<#noparse>$</#noparse>{context.${_dataEntity.getCodeName()?lower_case}}/</#assign>
</#if>
</#list>
if(${condition}true){
let tempData:any = JSON.parse(JSON.stringify(data));
return await Http.getInstance().post(`/${path}${srfpluralize(item.codeName)?lower_case}/search${dataSet.getCodeName()?lower_case}`,tempData,isloading);
}
</#list>
</#if>
<#if item.isMajor()>
let tempData:any = JSON.parse(JSON.stringify(data));
return await Http.getInstance().post(`/${srfpluralize(item.codeName)?lower_case}/search${dataSet.getCodeName()?lower_case}`,tempData,isloading);
</#if>
}
</#if>
<#-- 查询数据集(post方式)end -->
<#-- 检查行为是否可以执行 start -->
<#-- @author zpc -->
<#-- @update 2020.7.13 17:00 -->
......@@ -701,6 +748,21 @@ export default class ${srfclassname('${item.getCodeName()}')}ServiceBase extends
<@getTestActionModifier appdeAction=appdeAction/> async test${srfclassname('${singleAppMethod.getCodeName()}')}(context: any = {},data: any = {}): Promise<any> {
return true;
}
<#if singleAppMethod.getMethodType?? && singleAppMethod.getMethodType()?? && singleAppMethod.getMethodType() == "FETCH">
<#assign dataSet = singleAppMethod.getPSDEDataSet() />
/**
* test${srfclassname('search${dataSet.getCodeName()}')}方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @returns {Promise<any>}
* @memberof ${srfclassname('${item.getCodeName()}')}ServiceBase
*/
<@getTestActionModifier appdeAction=appdeAction/> async test${srfclassname('search${dataSet.getCodeName()}')}(context: any = {},data: any = {}): Promise<any> {
return true;
}
</#if>
</#if>
</#if>
<#-- 检查行为是否可以执行 end -->
......
......@@ -62,6 +62,13 @@ export default class ${srfclassname('${item.getCodeName()}')}UIServiceBase exten
*/
public isEnableWorkflow:boolean = false;
/**
* 是否支持实体主状态
*
* @memberof ${srfclassname('${item.getCodeName()}')}UIServiceBase
*/
public isEnableDEMainState:boolean = ${item.getPSDataEntity().isEnableDEMainState()?c};
/**
* 当前UI服务对应的数据服务对象
*
......
<#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
## v7.0.0-alpha.22 [2020-11-22]
### Bug修复
修复表单项值校验错误信息提示问题 [7dcad593](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/7dcad593036a9c6ea0612bdbf2e99fc1bee20062)
修复表单新建和更新默认值问题 [426f7930](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/426f793037ca228e3ae2b6449df9c10359d4844a)
修复表格新建更新默认值问题 [73a7f288](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/73a7f288493f8606a3bcf3a697c68c86171d12f2)[daac8796](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/daac8796532556617979fbfa91dc78033cc31215)
修复搜索表单新建默认值问题 [940c4e6b](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/940c4e6b854f7f32de41656535c329da683ca631)
修复图表加载逻辑问题 [b35ee838](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/b35ee83875787b3edb1df20c92c932b55972e092)
修复应用菜单计算权限异常问题 [c3335e88](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/c3335e8858ec1137ca65d35114f3a060ae56e2ba)
修复表单数据对象报错问题 [5722dbb4](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/5722dbb48122dbc60c8904b634995c906d10a456)
修复主信息属性映射表单项名称报错问题 [1a948e6d](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/1a948e6d52cf133dae90990cd3c2b0262559fd60)[b2f366a0](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/b2f366a05fbf2b1ed00d199ad0856a0ac7099809)[81f9ddee](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/81f9ddee9a859451ed860d155e2ea7d265ee3457)
修复表格分页加载未重置当前页为第一页问题 [8cc91599](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/8cc91599c6ef83e3a1e387d2d8f8857443452af9)
修复图表无数据刷新问题 [485463d8](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/485463d8a13522d87a240eea01faa35da3ae3e1b)
修复多数据选择视图未引入选择视图面板问题 [ed3130dd](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/ed3130dd859417e3659be3ba8af914e3d8622612)
修复视图viewparams为字符串时处理逻辑异常问题 [55d26f5f](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/55d26f5f6729e3bb3ef5211d0459a8503ac3250f)
修复看板视图整合参数问题 [9e4828f1](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/9e4828f1d3be520dfe2c53d4938f13bf569a0d06)
修复表格排序属性异常问题 [5e746632](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/5e7466326a19a411662e10f959d946152eee511c)
修复实体处理逻辑异常问题 [29e2e495](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/29e2e4959afc5a1fcf36e374dd357212fe86f382)
### 功能新增及优化
#### 模板
新增图表视图添加快速分组代码表和快速搜索栏 [b3305963](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/b33059638134e4245aab6c6498a721c87aa8ad61)[99711fd0](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/99711fd0d50384e03645ff0948d551d5a9b63691)
新增标签(地址栏插件) [22271ea9](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/22271ea9e5d636dbbc3850511cdce36089bc7dfa)[a348ff6b](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/a348ff6b11b4348cf191a59b422e85e8f67d304e)
新增复合表单项值规则 [0b838bdf](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/0b838bdf805fd48e2c898fc63a296cd4b01151dc)[a88f78dd](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/a88f78dda0ff2c3bacf58c4bb04cb1ede539792a)
新增表单按钮无图标使用界面行为图标逻辑 [a214c5b8](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/a214c5b88bf0bb1d669b468991180ddfc4b7e4f8)[90cbf4b8](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/90cbf4b8c3474922e6b065ba70e3138191491947)
新增列表部件操作列界面行为支持 [4a2664b1](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/4a2664b1525f8850cc5c39a541c7bc907a6d81b8)[0586ad9d](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/0586ad9d1534caa06eaecb3484c73f7dc9f0fdfa)[63dc0dab](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/63dc0dabb1adcf0a56ebe9d97f9bb1ece562fad6)[6ee19a63](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/6ee19a63f87346f7edd0fc1c7d95ce4b212357f7)
新增数据视图部件操作列界面行为支持 [ef18acdf](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/ef18acdf5b10264fd40fa43a3375aeec2830c71b)[218333d5](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/218333d54e596ed97b62027bd35340b96e35b5f5)
新增关系界面表格保存提示内容显示 [50b9a9f7](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/50b9a9f7925359aa84e23ffa27bf0d7a9a527cbd)
新增列表批操作工具栏和快速工具栏支持 [ddb1d067](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/ddb1d067b299cab6eab9c049940da5623bd42298)[d56c3d79](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/d56c3d79747baac4e6d0aa1501873a4680dd1291)
新增数据视图批操作工具栏和快速工具栏支持 [aba0f9e0](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/aba0f9e00e50f18b804297bb3a440812d8a32f23)[9f8fdce8](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/9f8fdce8e73e02b223524812ced0300282429072)[ef753f43](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/ef753f43754c5ff29b0ee2f1f9986b5bbd44cac1)[dac712a2](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/dac712a2a2c84653deaab1cdfb0680d2b555a43f)[6e2bccea](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/6e2bccea860951bb1ea85b2a1be8280189eaca31)[974aadd1](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/974aadd1fe47768d33a7e508d81323be9c6cd7fd)
新增工作流动态操作视图支持 [065a8dce](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/065a8dce5550b051245793e58af5bc5484464e07)[6f9a0ee3](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/6f9a0ee3536f4e5cb6d32bcdc79a4c9aec1afd9e)[5fd6366d](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/5fd6366d50dde1fe2e8168e23bfb6d6964792ca0)[a40bf66b](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/a40bf66b9066197c9a2757e66a45f00e3e3eacb5)[0cdd5713](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/0cdd571311b0f4d379977d836d6ca7c1f287c55c)[21264471](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/21264471b30b713bdc873ca87d66ae5979b39ef8)[bc85a97b](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/bc85a97bdeb18bdc70c0f71ccc9f29e1448b5399)[fcea460c](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/fcea460ce3c320c0c02556cf4cb997d5b36a64f2)[729bc0a6](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/729bc0a680203e81dc3e6118ebfe72bc40784c63)[b1a569ac](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/b1a569acf82aa3e777cfa6d596615c6048c2f980)[81857c4a](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/81857c4ac443137a49649023dfc1ac9f7136c10e)
新增表格(透视表)插件 [4f57e1ba](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/4f57e1baad8881fb3a069fb293044b16daa08e44)
新增看板视图支持看板展开与收缩 [104bde80](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/104bde80f844cf4f985e76d234095c9857d4ea59)
新增数据服务查询数据集(post方式)方法 [c2fe9f3b](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/c2fe9f3bf8bedd12255650b3969817123b6701de)
新增代码表服务图标属性 [20c54b64](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/20c54b6409d5e3343a74c84ef7241f868d7ddae9)
新增实体地图视图及地图部件 [9943b1c0](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/9943b1c01f1146b95dd45464a2896b03c85783e8)
新增实体地图视图(部件视图) [f3887778](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/f3887778d471cbec33eddf56756e2d4d07a1818f)
新增地图定位组件 [84297814](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/842978148e116dfef3b044cfcce934f5468d16d5)[fd2ae711](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/fd2ae71184646ad13a5d5a2ac50701bbdc7cd0f5)[9742d2a0](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/9742d2a0f2210fd4a5e73e2254985cfc21065761)
优化前台调用界面行为关闭编辑或弹出视图逻辑 [8d191a79](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/8d191a790a52ed46985e1f8faf8de8266cfa08d8)
优化表单保存提示信息 [93cdc68b](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/93cdc68bc84486c2a4df70ab144eeadae78ab1a3)
优化表格值规则校验 [e3bf8fd1](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/e3bf8fd10f52ff1d3d1746cc675780a9e1d8f0ce)[a6544f41](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/a6544f41e7e547d9b18893d2b990e0e7ea04458e)[92f12d80](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/92f12d801cc4e540c7b1034782faed5b6459132c)
优化表单值规则校验 [e100c8eb](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/e100c8eb79eb3d0d9646d93b929698d159a43200)[5ed59675](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/5ed59675e2a8c515054804d9e40a4de83ff30bf7)[19d639ee](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/19d639ee7e18e04d678898f8e499b61b18812cb7)
优化表格、表单属性值规则校验异常捕获逻辑 [8f78ffad](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/8f78ffadaa42c2ca1ecb3fac94022df7b6f795a8)[2cbedd77](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/2cbedd7759be86933b3136ec2d43df4f0b959a2d)[5f719edd](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/5f719edd3bfce6abff63ba229fc79abaaa5714d7)[53b99003](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/53b99003e1bfa941d0175ed263825490eacb5b80)
优化直接内容项html类型 [c9712800](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/c9712800819554064b8aace92306e74a4cd41c30)
优化表单、表格提示信息内容 [cfefe47d](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/cfefe47df2321cbdc5c9149d709e3de6ae3af153)[6a908895](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/6a908895a4cad9af3b6d2baa8f0b342c06a45ea5)[ff815b76](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/ff815b766207692483420b3fb3fdc48e1af1a716)
优化表格删除提示信息内容 [3dc02183](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/3dc021833cac72e7e37c963c0f46ed7fa9d3b97c)
优化编辑器占位提示 [60e296d9](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/60e296d94d1c331ff1f6d4c920ea7b929de36e2a)[3128fdbf](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/3128fdbf55e7dfbb5f6b9438137ef87d549743e8)
优化列表部件数据分组逻辑 [c8a74e10](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/c8a74e10c6f3fa4b15dba8141c4f52509b1ee5eb)[55a3fb4b](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/55a3fb4b649c50a645670ab8dda7d8aad7fea802)
优化表格部件数据分组逻辑 [75624d3e](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/75624d3e042a7a15d55568ae92c1578948ad1b13)[7873329d](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/7873329de8c3f0805d1b72945b43b14220f61bc7)[982a2c2b](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/982a2c2b48fe71c326b68d7020c22a4daebb4a89)[276f90d3](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/276f90d3b2bd6cc18899cadec9d11fc2e8236433)[d6377294](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/d63772945d4db25f2a743d355e1b648992cf0048)[d326d83a](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/d326d83a2030aa17a04aa2e482b44acf4973e5ad)[b8ad5bfd](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/b8ad5bfde4fdfc13765a2e25d48a7583b0dcad1a)[641a67f4](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/641a67f4183997c45dfe3b4775cd1b75b315b195)[8db35ec3](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/8db35ec34c00a47d67f7f864461e8b005988e597)[faecb1cc](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/faecb1cc20142420a79a57f9cef5b71053a1d98d)
优化实体工作流动态导航表格视图逻辑 [909f0cd4](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/909f0cd48133b974f2a8d634a252f0dd7248ea5c)[1e9a4fe9](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/1e9a4fe92e64a86aea9b730da8f9b7a72ee0ee11)[899e6882](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/899e68821c06e2d584c5b03304ca11d6d6edbc6b)[64d99a8c](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/64d99a8ceb2c942dbf9c1e6089718d2c53bffc86)[729bc0a6](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/729bc0a680203e81dc3e6118ebfe72bc40784c63)[e57c1f14](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/e57c1f141e256f4813c347197461bccaad9c1194)[bd46e456](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/bd46e4565331e8bb4757514d80b17615186db1d5)[f3e4468a](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/f3e4468af140170e4dd7c5f5882ff0bcc9621b81)
优化实体工作流动态编辑视图逻辑 [909f0cd4](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/909f0cd48133b974f2a8d634a252f0dd7248ea5c)[1e9a4fe9](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/1e9a4fe92e64a86aea9b730da8f9b7a72ee0ee11)[899e6882](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/899e68821c06e2d584c5b03304ca11d6d6edbc6b)[e89a302d](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/e89a302d477433808d61b4cf7ec4f62455a8aeb7)[91feb5aa](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/91feb5aabcef545b20bc3de935dcb0cd2f92f1f7)[9c892670](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/9c8926700f7c6526bafd9a84ea00c861f731f521)[ff0c64f1](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/ff0c64f19a075d13f2258c80fcc19dec77c4ac7f)[729bc0a6](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/729bc0a680203e81dc3e6118ebfe72bc40784c63)[bd46e456](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/bd46e4565331e8bb4757514d80b17615186db1d5)[f3e4468a](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/f3e4468af140170e4dd7c5f5882ff0bcc9621b81)
优化面板标签代码表发布值分隔符 [6a0029df](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/6a0029dfcd0d5970114d0040d1712775105ec4f3)
优化数据图表部件增加高度发布逻辑 [aca0084a](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/aca0084a00011cec55096984293425de4fdef57e)
优化数据看板部件逻辑 [160dedcd](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/160dedcdd4c66e25bc83abebf3e471beebefa857)[d005eeba](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/d005eeba57c974063a1df0cca914d2c7b012d470)[d10cf154](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/d10cf154f0887dcd011cdd99f711bdcc98e64205)
优化评分器编辑器支持代码表逻辑 [e2f0d18f](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/e2f0d18f5820a7acbf198635de190843da91467a)
优化看板视图部件嵌入面板数据处理 [b07ba68c](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7/commit/b07ba68c5d1f1823fce2e52d985cbcc3a7fb85c4)
#### 基础文件
修复图表视图、图表部件视图获取快速分组和搜索栏参数及样式 [cc9ec9d8](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/cc9ec9d88483c7f14ccd519897778635b9385b14)
修复工具栏按钮异常问题 [f66edc45](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/f66edc45e909ec0d1fbb47861c8ea336819ce0aa)
修复修复下拉列表框不加载数据异常 [503581d7](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/503581d771cbb628a5cfb170bb10e68808cbaf5b)
修复关系界面内嵌视图出现不加载的情况 [c1d6db61](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/c1d6db6130ff6a5768f9d982e75949cde86307f0)
新增部件服务增加根据后台标识获取前台数据标识名称能力 [a07d7088](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/a07d70887e5044f415a29d92f136ef910231a2dd)
新增图标绘制组件 [3a160350](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/3a1603502740cde5ee12051bd2ee3c76abe2b554)[9653dd15](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/9653dd15cdef7b97ce0c022d78c6236d3bf9d8fe)
新增响应头错误状态汇总 [3cb2a17f](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/3cb2a17f78d262efab0914a3d025de29e36d5641)
新增透视表表格插件 [dbebc115](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/dbebc115cfa9d90cca2518db27646c935fc5c11c)
新增代码表获取代码表项能力 [06c53dca](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/06c53dca2963165c8593cf2b7f2ba6f9e0f13f0c)[f856c55f](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/f856c55f6983bfab490848dfefed0a8ca29bac9b)
新增实体地图视图引擎 [5ccb40ba](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/5ccb40ba780548f7758e0cf4027fb8a16affc56d)
新增实体地图视图(部件视图)引擎 [da07aede](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/da07aede9151f474740da1cabcaa10e8bc1b3749)
新增地图定位组件 [b76bf4ba](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/b76bf4ba09630d477e1a75637a76b39974b8ff2f)[19c862e7](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/19c862e71eabdf4e10a56118ea32c3f23793e68b)[1683f20e](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/1683f20e070d0f2a1c738929ca4eb018d61eaea0)
优化数据选择下拉时清空旧数据 [a42584a4](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/a42584a4235a0beb0d155b47890e5e685d9eb5ac)
优化视图消息样式 [22406733](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/22406733fecb566929770e688e5d06fa7b6ed5d1)
优化代码表组件增加图片识别 [853d4ad4](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/853d4ad406a35cfb013dbc18188aeb45d148b8b6)[bc879205](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/bc879205eb35dba743974a9af189de0292dd4979)
优化工作流动态编辑视图加载逻辑 [19760cf6](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/19760cf6f32f9bb47aa75ffe13ca5db8639cc250)
优化引用avue.min.js的文件路径 [e4a9d11d](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/e4a9d11db906cc8e18a0f290cb66fd2c3fc277a1)
优化评分器编辑器支持代码表逻辑 [28721171](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/28721171ffa8d5adae6d9b567838041e320c5767)[453c1e6c](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/453c1e6c79b31a49d189c40a4537a60fa0dd0023)
优化表单项label长度过长显示异常和支持label显示html [fc754a29](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/fc754a294d553d70d4e634df940069012a16a7e1)[ed804eb6](http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7res/commit/ed804eb6b5bccab109b92edd5419310363bc0b68)
## v7.0.0-alpha.21 [2020-10-31]
### Bug修复
修复视图类型门户部件通知嵌入视图刷新问题
修复表格行编辑传值无效和设置表格行编辑禁用无效问题
修复表格列触发行为权限控制无效问题
修复表格导出代码表转化问题
修复行编辑时合并行主键到上下文中
修复多表单编辑视图(部件视图)临时模式异常问题
修复修复表单值规则异常问题
### 功能新增及优化
#### 模板
新增导航类部件快速搜索栏提示
新增分页导航面板主状态逻辑
新增图片预览(可旋转)控件
新增多数据部件无值显示内容适配
新增分页导航视图工具栏权限状态逻辑
新增适配界面行为中显示处理
新增支持是否支持实体主状态属性
优化列表加载、刷新逻辑
优化直接内容项组件
优化甘特图部件和树表格部件加载逻辑
优化后台界面行为异常处理逻辑
优化分页导航面板切换分页刷新逻辑
优化树导航视图树节点刷新逻辑
优化表单更新项传入调用方法名称
优化行编辑值校验错误信息提示
#### 基础文件
新增图片预览(可旋转)控件
新增计算分页导航视图工具栏权限状态逻辑
新增支持是否支持实体主状态逻辑
新增切换组织部门功能
优化数据选择下拉控件(下拉列表宽度和编辑器宽度保持一致)
优化直接内容项组件
修复数据选择无值抛出null
修复登录完成user存储到localStorage
修复表格值为0不显示问题
## v7.0.0-alpha.20 [2020-10-18]
### Bug修复
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册