提交 cc40f218 编写于 作者: ibiz4j's avatar ibiz4j

合并分支 'dev' 到 'master'

Dev

查看合并请求 ibizr7pfstdtempl/ibizvuer7!4
...@@ -526,6 +526,26 @@ import ${srfclassname('${appCounter.getCodeName()}')}CounterService from '@/co ...@@ -526,6 +526,26 @@ import ${srfclassname('${appCounter.getCodeName()}')}CounterService from '@/co
this.$emit('load',args); this.$emit('load',args);
} }
/**
* 计算导航工具栏权限状态
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public calcNavigationToolbarState(){
let _this: any = this;
// 界面行为
<#if ctrl.getPSAppDataEntity?? && ctrl.getPSAppDataEntity()??>
<#assign curAppEntity = ctrl.getPSAppDataEntity() />
const curUIService:${srfclassname('${curAppEntity.getCodeName()}')}UIService = new ${srfclassname('${curAppEntity.getCodeName()}')}UIService();
<#if ctrl.getCodeName?? && ctrl.getCodeName()??>
<#assign ModelsName>${ctrl.getCodeName()?lower_case}_toolbarModels</#assign>
if(_this.${ModelsName}){
ViewTool.calcActionItemAuthState({},_this.${ModelsName},curUIService);
}
</#if>
</#if>
}
/** /**
* 执行搜索 * 执行搜索
* *
......
...@@ -535,6 +535,26 @@ import ${srfclassname('${appCounter.getCodeName()}')}CounterService from '@/co ...@@ -535,6 +535,26 @@ import ${srfclassname('${appCounter.getCodeName()}')}CounterService from '@/co
this.$emit('load',args); this.$emit('load',args);
} }
/**
* 计算导航工具栏权限状态
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public calcNavigationToolbarState(){
let _this: any = this;
// 界面行为
<#if ctrl.getPSAppDataEntity?? && ctrl.getPSAppDataEntity()??>
<#assign curAppEntity = ctrl.getPSAppDataEntity() />
const curUIService:${srfclassname('${curAppEntity.getCodeName()}')}UIService = new ${srfclassname('${curAppEntity.getCodeName()}')}UIService();
<#if ctrl.getCodeName?? && ctrl.getCodeName()??>
<#assign ModelsName>${ctrl.getCodeName()?lower_case}_toolbarModels</#assign>
if(_this.${ModelsName}){
ViewTool.calcActionItemAuthState({},_this.${ModelsName},curUIService);
}
</#if>
</#if>
}
/** /**
* 执行搜索 * 执行搜索
* *
......
<#assign deuiaction=item.getPSUIAction()> <#assign deuiaction=item.getPSUIAction()>
<#if deuiaction.getUIActionTag() == 'ExportExcel'> <#if deuiaction.getUIActionTag() == 'ExportExcel'>
${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', <#if item.isShowCaption()>caption: '${item.caption}',</#if> disabled: false, type: '${item.getItemType()}', visabled: true,noprivdisplaymode:<#if item.getNoPrivDisplayMode()??>${item.getNoPrivDisplayMode()}</#if>,dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' }<#if view.hasPSControl("GRID")><#assign gridhandler = view.getPSControl("GRID").getPSAjaxControlHandler()>, MaxRowCount: <#if gridhandler?? && gridhandler.getPSDEDataExport()??>${gridhandler.getPSDEDataExport().getMaxRowCount()?c}<#elseif sys.getDEDataExportMaxRowCount() gt 0>${sys.getDEDataExportMaxRowCount()?c}<#else>10000</#if></#if> }, ${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', actiontarget: 'NONE', <#if item.isShowCaption()>caption: '${item.caption}',</#if> disabled: false, type: '${item.getItemType()}', visabled: true,noprivdisplaymode:<#if item.getNoPrivDisplayMode()??>${item.getNoPrivDisplayMode()}</#if>,dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' }<#if view.hasPSControl("GRID")><#assign gridhandler = view.getPSControl("GRID").getPSAjaxControlHandler()>, MaxRowCount: <#if gridhandler?? && gridhandler.getPSDEDataExport()??>${gridhandler.getPSDEDataExport().getMaxRowCount()?c}<#elseif sys.getDEDataExportMaxRowCount() gt 0>${sys.getDEDataExportMaxRowCount()?c}<#else>10000</#if></#if> },
<#elseif deuiaction.getUIActionTag() == 'ToggleRowEdit'> <#elseif deuiaction.getUIActionTag() == 'ToggleRowEdit'>
${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', <#if item.isShowCaption()>caption: '${item.caption}', </#if>disabled: false, type: '${item.getItemType()}', visabled: true,noprivdisplaymode:<#if item.getNoPrivDisplayMode()??>${item.getNoPrivDisplayMode()}</#if>,dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' } }, ${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', actiontarget: 'NONE', <#if item.isShowCaption()>caption: '${item.caption}', </#if>disabled: false, type: '${item.getItemType()}', visabled: true,noprivdisplaymode:<#if item.getNoPrivDisplayMode()??>${item.getNoPrivDisplayMode()}</#if>,dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' } },
<#else> <#else>
${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', <#if item.isShowCaption()>caption: '${item.caption}', </#if>disabled: false, type: '${item.getItemType()}', visabled: true,noprivdisplaymode:<#if item.getNoPrivDisplayMode()??>${item.getNoPrivDisplayMode()}</#if>,dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' } }, ${item.getName()?lower_case}: { name: '${item.getName()?lower_case}', actiontarget: 'NONE', <#if item.isShowCaption()>caption: '${item.caption}', </#if>disabled: false, type: '${item.getItemType()}', visabled: true,noprivdisplaymode:<#if item.getNoPrivDisplayMode()??>${item.getNoPrivDisplayMode()}</#if>,dataaccaction: '<#if deuiaction.getDataAccessAction()??>${deuiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${deuiaction.getUIActionTag()}', target: '${deuiaction.getActionTarget()}' } },
</#if> </#if>
\ No newline at end of file
.search-bar-footer { .search-bar-footer {
height: 32px; height: 32px;
margin-bottom: 6px;
.search-bar-action { .search-bar-action {
float: right; float: right;
display: flex; display: flex;
......
...@@ -415,6 +415,26 @@ ...@@ -415,6 +415,26 @@
this.$emit('load',args); this.$emit('load',args);
} }
/**
* 计算导航工具栏权限状态
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public calcNavigationToolbarState(){
let _this: any = this;
// 界面行为
<#if ctrl.getPSAppDataEntity?? && ctrl.getPSAppDataEntity()??>
<#assign curAppEntity = ctrl.getPSAppDataEntity() />
const curUIService:${srfclassname('${curAppEntity.getCodeName()}')}UIService = new ${srfclassname('${curAppEntity.getCodeName()}')}UIService();
<#if ctrl.getCodeName?? && ctrl.getCodeName()??>
<#assign ModelsName>${ctrl.getCodeName()?lower_case}_toolbarModels</#assign>
if(_this.${ModelsName}){
ViewTool.calcActionItemAuthState({},_this.${ModelsName},curUIService);
}
</#if>
</#if>
}
/** /**
* 执行搜索 * 执行搜索
* *
......
...@@ -413,6 +413,26 @@ ...@@ -413,6 +413,26 @@
public onViewLoad($event: any): void { public onViewLoad($event: any): void {
this.$emit('load', $event); this.$emit('load', $event);
} }
/**
* 计算导航工具栏权限状态
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public calcNavigationToolbarState(){
let _this: any = this;
// 界面行为
<#if ctrl.getPSAppDataEntity?? && ctrl.getPSAppDataEntity()??>
<#assign curAppEntity = ctrl.getPSAppDataEntity() />
const curUIService:${srfclassname('${curAppEntity.getCodeName()}')}UIService = new ${srfclassname('${curAppEntity.getCodeName()}')}UIService();
<#if ctrl.getCodeName?? && ctrl.getCodeName()??>
<#assign ModelsName>${ctrl.getCodeName()?lower_case}_toolbarModels</#assign>
if(_this.${ModelsName}){
ViewTool.calcActionItemAuthState({},_this.${ModelsName},curUIService);
}
</#if>
</#if>
}
<#if ctrl.getPSControls()??> <#if ctrl.getPSControls()??>
<#assign controls = ctrl.getPSControls()/> <#assign controls = ctrl.getPSControls()/>
......
<#assign content> <#assign content>
<#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>
<#list item.getPSDEFormDetails() as formmenber> <#list item.getPSDEFormDetails() as formmenber>
<#if !(formmenber.isHidden?? && formmenber.isHidden())> <#if !(formmenber.isHidden?? && formmenber.isHidden())>
<#ibizinclude> <#ibizinclude>
......
...@@ -149,6 +149,15 @@ import ${srfclassname('${aggAppDataEntity.getCodeName()}')}Service from '@/servi ...@@ -149,6 +149,15 @@ import ${srfclassname('${aggAppDataEntity.getCodeName()}')}Service from '@/servi
@Errorlog @Errorlog
public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public delete(action: string, context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
const {data:Data,context:Context} = this.handleRequestData(action,context,data,true); const {data:Data,context:Context} = this.handleRequestData(action,context,data,true);
<#-- 手动修改数据主键的情况start -->
<#if ctrl.getPSDEGridEditItems()??>
<#list ctrl.getPSDEGridEditItems() as editItem>
<#if editItem.getPSAppDEField()?? && editItem.getPSAppDEField().isKeyField()>
Object.assign(Data,{${appde.getKeyPSAppDEField().getCodeName()?lower_case}: data.${editItem.getName()}, srffrontuf: '1'});
</#if>
</#list>
</#if>
<#-- 手动修改数据主键的情况end -->
return new Promise((resolve: any, reject: any) => { return new Promise((resolve: any, reject: any) => {
const _appEntityService: any = this.appEntityService; const _appEntityService: any = this.appEntityService;
let result: Promise<any>; let result: Promise<any>;
...@@ -320,7 +329,19 @@ import ${srfclassname('${aggAppDataEntity.getCodeName()}')}Service from '@/servi ...@@ -320,7 +329,19 @@ import ${srfclassname('${aggAppDataEntity.getCodeName()}')}Service from '@/servi
if(response.data){ if(response.data){
Object.assign(response.data,{srfuf:'0'}); Object.assign(response.data,{srfuf:'0'});
//仿真主键数据 //仿真主键数据
<#-- 手动修改数据主键的情况start -->
<#assign hasKeyFieldwithEditable = false/>
<#if ctrl.getPSDEGridEditItems()??>
<#list ctrl.getPSDEGridEditItems() as editItem>
<#if editItem.getPSAppDEField()?? && editItem.getPSAppDEField().isKeyField()>
<#assign hasKeyFieldwithEditable>true</#assign>
</#if>
</#list>
</#if>
<#-- 手动修改数据主键的情况end -->
<#if !hasKeyFieldwithEditable>
response.data.${appde.getKeyPSAppDEField().getCodeName()?lower_case} = Util.createUUID(); response.data.${appde.getKeyPSAppDEField().getCodeName()?lower_case} = Util.createUUID();
</#if>
} }
this.handleResponse(action, response, true); this.handleResponse(action, response, true);
resolve(response); resolve(response);
......
...@@ -531,6 +531,26 @@ import ${srfclassname('${appCounter.getCodeName()}')}CounterService from '@/co ...@@ -531,6 +531,26 @@ import ${srfclassname('${appCounter.getCodeName()}')}CounterService from '@/co
public ${ctrl.name}_load(args:any, tag?: string, $event2?: any){ public ${ctrl.name}_load(args:any, tag?: string, $event2?: any){
this.$emit('load',args); this.$emit('load',args);
} }
/**
* 计算导航工具栏权限状态
*
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public calcNavigationToolbarState(){
let _this: any = this;
// 界面行为
<#if ctrl.getPSAppDataEntity?? && ctrl.getPSAppDataEntity()??>
<#assign curAppEntity = ctrl.getPSAppDataEntity() />
const curUIService:${srfclassname('${curAppEntity.getCodeName()}')}UIService = new ${srfclassname('${curAppEntity.getCodeName()}')}UIService();
<#if ctrl.getCodeName?? && ctrl.getCodeName()??>
<#assign ModelsName>${ctrl.getCodeName()?lower_case}_toolbarModels</#assign>
if(_this.${ModelsName}){
ViewTool.calcActionItemAuthState({},_this.${ModelsName},curUIService);
}
</#if>
</#if>
}
<#ibizinclude> <#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl ../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
......
...@@ -13,6 +13,13 @@ ${P.getCtrlCode(toolbarCtrl, 'CONTROL.html').code} ...@@ -13,6 +13,13 @@ ${P.getCtrlCode(toolbarCtrl, 'CONTROL.html').code}
</@ibizindent> </@ibizindent>
</#if> </#if>
<div class="content-container"> <div class="content-container">
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
./View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#if view.getAllPSControls()??> <#if view.getAllPSControls()??>
<#list view.getAllPSControls() as ctrl> <#list view.getAllPSControls() as ctrl>
<#if ctrl.getControlType() != "TOOLBAR"> <#if ctrl.getControlType() != "TOOLBAR">
...@@ -24,6 +31,13 @@ ${P.getCtrlCode(ctrl, 'CONTROL.html').code} ...@@ -24,6 +31,13 @@ ${P.getCtrlCode(ctrl, 'CONTROL.html').code}
</#if> </#if>
</#list> </#list>
</#if> </#if>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
./View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div> </div>
</card> </card>
</div> </div>
\ No newline at end of file
...@@ -7,6 +7,13 @@ ...@@ -7,6 +7,13 @@
</#ibizinclude> </#ibizinclude>
<div class="content-container"> <div class="content-container">
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
./View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<@ibizindent blank=12> <@ibizindent blank=12>
<#if view.hasPSControl('wizardpanel')> <#if view.hasPSControl('wizardpanel')>
${P.getCtrlCode('wizardpanel', 'CONTROL.html').code} ${P.getCtrlCode('wizardpanel', 'CONTROL.html').code}
...@@ -15,6 +22,13 @@ ${P.getCtrlCode('wizardpanel', 'CONTROL.html').code} ...@@ -15,6 +22,13 @@ ${P.getCtrlCode('wizardpanel', 'CONTROL.html').code}
${P.getCtrlCode('statewizardpanel', 'CONTROL.html').code} ${P.getCtrlCode('statewizardpanel', 'CONTROL.html').code}
</#if> </#if>
</@ibizindent> </@ibizindent>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
./View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div> </div>
</card> </card>
</div> </div>
\ No newline at end of file
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.less.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
.${srffilepath2(view.getCodeName())} {
> .view-card > .ivu-card-body > .content-container > .tabviewpanel {
overflow: auto;
}
}
...@@ -32,4 +32,13 @@ ...@@ -32,4 +32,13 @@
height: 100%; height: 100%;
} }
} }
}
.${srffilepath2(view.getCodeName())} {
> .view-card > .ivu-card-body > .content-container {
height: calc(100% - 42px);
> .tabviewpanel {
overflow: auto;
}
}
} }
\ No newline at end of file
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.less.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
.${srffilepath2(view.getCodeName())}{
> .view-card > .ivu-card-body > .content-container > .app-wizard {
overflow: auto;
}
}
\ No newline at end of file
...@@ -3,4 +3,7 @@ ...@@ -3,4 +3,7 @@
</#ibizinclude> </#ibizinclude>
.${srffilepath2(view.getCodeName())}{ .${srffilepath2(view.getCodeName())}{
display: block; display: block;
> .view-card > .ivu-card-body > .content-container > .app-data-chart {
overflow: auto;
}
} }
\ No newline at end of file
...@@ -8,6 +8,13 @@ ...@@ -8,6 +8,13 @@
</#ibizinclude> </#ibizinclude>
<div class='content-container'> <div class='content-container'>
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#assign MDContent> <#assign MDContent>
<#comment><!--开始:快速搜索或工具栏存在--></#comment> <#comment><!--开始:快速搜索或工具栏存在--></#comment>
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar'))> <#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar'))>
...@@ -36,6 +43,13 @@ ${P.getCtrlCode('chart', 'CONTROL.html').code} ...@@ -36,6 +43,13 @@ ${P.getCtrlCode('chart', 'CONTROL.html').code}
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl ../@MACRO/VIEW_MD_CONTENT.vue.ftl
</#ibizinclude> </#ibizinclude>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div> </div>
</card> </card>
</div> </div>
\ No newline at end of file
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
.pickup-view { .pickup-view {
>.translate-contant { >.translate-contant {
overflow: auto;
flex-grow: 1; flex-grow: 1;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
......
...@@ -2,6 +2,13 @@ ...@@ -2,6 +2,13 @@
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <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"> <card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :padding="0" :bordered="false">
<div class="content-container pickup-view"> <div class="content-container pickup-view">
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<div class="translate-contant"> <div class="translate-contant">
<div class="center" :style="{width : !isShowButton ? '100%' : ''}"> <div class="center" :style="{width : !isShowButton ? '100%' : ''}">
<#if view.hasPSControl('pickupviewpanel')> <#if view.hasPSControl('pickupviewpanel')>
...@@ -47,6 +54,13 @@ ...@@ -47,6 +54,13 @@
<i-button @click="onClickCancel">{{this.containerModel.view_cancelbtn.text}}</i-button> <i-button @click="onClickCancel">{{this.containerModel.view_cancelbtn.text}}</i-button>
</row> </row>
</card> </card>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div> </div>
</card> </card>
</div> </div>
\ No newline at end of file
...@@ -2,12 +2,17 @@ ...@@ -2,12 +2,17 @@
<div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'> <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> <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"> <card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl ../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude> </#ibizinclude>
<div class="content-container">
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#assign MDContent> <#assign MDContent>
<#-- 搜索框: BEGIN --> <#-- 搜索框: BEGIN -->
<#if (view.isEnableQuickSearch())> <#if (view.isEnableQuickSearch())>
...@@ -26,5 +31,13 @@ ...@@ -26,5 +31,13 @@
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl ../@MACRO/VIEW_MD_CONTENT.vue.ftl
</#ibizinclude> </#ibizinclude>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div>
</card> </card>
</div> </div>
\ No newline at end of file
...@@ -20,6 +20,12 @@ ...@@ -20,6 +20,12 @@
right: 0px; right: 0px;
} }
} }
.${srffilepath2(view.getCodeName())} {
> .view-card > .ivu-card-body {
height: 100%;
}
}
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.less.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
...@@ -3,6 +3,13 @@ ...@@ -3,6 +3,13 @@
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <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"> <card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<div class='content-container'> <div class='content-container'>
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#assign MDContent> <#assign MDContent>
<#-- 搜索框: BEGIN --> <#-- 搜索框: BEGIN -->
<#if (view.isEnableQuickSearch())> <#if (view.isEnableQuickSearch())>
...@@ -21,6 +28,13 @@ ...@@ -21,6 +28,13 @@
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_MD_CONTENT.vue.ftl ../@MACRO/VIEW_MD_CONTENT.vue.ftl
</#ibizinclude> </#ibizinclude>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div> </div>
</card> </card>
</div> </div>
\ No newline at end of file
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.less.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
.${srffilepath2(view.getCodeName())} {
> .view-card > .ivu-card-body > .content-container > .gantt {
overflow: auto;
}
}
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.less.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
.${srffilepath2(view.getCodeName())} {
> .view-card > .ivu-card-body > .content-container > .gantt {
overflow: auto;
}
}
\ No newline at end of file
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.less.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
.view-container.${srffilepath2(view.getCodeName())} > .view-card > .ivu-card-body > .content-container {
height: calc(100% - 30px);
}
\ No newline at end of file
...@@ -13,6 +13,13 @@ ${P.getCtrlCode(toolbarCtrl, 'CONTROL.html').code} ...@@ -13,6 +13,13 @@ ${P.getCtrlCode(toolbarCtrl, 'CONTROL.html').code}
</@ibizindent> </@ibizindent>
</#if> </#if>
<div class="content-container"> <div class="content-container">
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#if view.hasPSControl('form')> <#if view.hasPSControl('form')>
<@ibizindent blank=8> <@ibizindent blank=8>
${P.getCtrlCode('form', 'CONTROL.html').code} ${P.getCtrlCode('form', 'CONTROL.html').code}
...@@ -29,6 +36,13 @@ ${P.getCtrlCode(ctrl, 'CONTROL.html').code} ...@@ -29,6 +36,13 @@ ${P.getCtrlCode(ctrl, 'CONTROL.html').code}
</#if> </#if>
</#list> </#list>
</#if> </#if>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div> </div>
</card> </card>
</div> </div>
\ No newline at end of file
...@@ -7,11 +7,19 @@ ...@@ -7,11 +7,19 @@
.edit-view2 { .edit-view2 {
flex-direction: row !important; flex-direction: row !important;
overflow: auto;
.view-form { .view-form {
overflow: auto; overflow: auto;
} }
} }
.${srffilepath2(view.getCodeName())}{
> .view-card > .ivu-card-body{
display: flex;
flex-direction: column;
}
}
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.less.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#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>"> <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> <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"> <card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#if view.hasPSControl('toolbar')> <#if view.hasPSControl('toolbar')>
<#assign selfToolbarRender> <#assign selfToolbarRender>
<template v-if="Object.is(this.selection.id, 'form')"> <template v-if="Object.is(this.selection.id, 'form')">
...@@ -9,24 +15,16 @@ ...@@ -9,24 +15,16 @@
</template> </template>
</#assign> </#assign>
</#if> </#if>
<#ibizinclude> <#ibizinclude>
../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl ../@MACRO/VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude> </#ibizinclude>
<div class="content-container edit-view2"> <div class="content-container edit-view2">
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<#if view.hasPSControl('drbar')> <#if view.hasPSControl('drbar')>
<@ibizindent blank=8> <@ibizindent blank=8>
${P.getCtrlCode('drbar', 'CONTROL.html').code} ${P.getCtrlCode('drbar', 'CONTROL.html').code}
</@ibizindent> </@ibizindent>
</#if> </#if>
</div>
<#-- BEGIN:视图底部视图消息 --> <#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=8> <@ibizindent blank=8>
<#ibizinclude> <#ibizinclude>
...@@ -34,6 +32,5 @@ ...@@ -34,6 +32,5 @@
</#ibizinclude> </#ibizinclude>
</@ibizindent> </@ibizindent>
<#-- END:视图底部视图消息 --> <#-- END:视图底部视图消息 -->
</div>
</card> </card>
</div> </div>
\ No newline at end of file
...@@ -2,6 +2,13 @@ ...@@ -2,6 +2,13 @@
<app-studioaction :viewTitle="$t(model.srfCaption)" viewName="${view.getCodeName()?lower_case}"></app-studioaction> <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" :bordered="false"> <card class='view-card view-no-caption <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :dis-hover="true" :bordered="false">
<div class='content-container pickup-grid-view'> <div class='content-container pickup-grid-view'>
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Top_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图顶部视图消息 -->
<@ibizindent blank=12> <@ibizindent blank=12>
<#if view.hasPSControl('searchform')> <#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code}<#t> ${P.getCtrlCode('searchform', 'CONTROL.html').code}<#t>
...@@ -10,6 +17,13 @@ ...@@ -10,6 +17,13 @@
${P.getCtrlCode('grid', 'CONTROL.html').code}<#t> ${P.getCtrlCode('grid', 'CONTROL.html').code}<#t>
</#if> </#if>
</@ibizindent> </@ibizindent>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=8>
<#ibizinclude>
../@MACRO/View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</div> </div>
</card> </card>
</div> </div>
\ No newline at end of file
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
:localParam =<@getNavigateParams editor /> :localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled" :disabled="detailsModel.${editor.name}.disabled"
name='${editor.name}' name='${editor.name}'
<#if editor.getEditorParam("PICKUPDATA", "") != "">pickUpData="${editor.getEditorParam("PICKUPDATA", "")}"</#if>
<#-- 自填模式文本属性、值属性start --> <#-- 自填模式文本属性、值属性start -->
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??> <#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
<#assign appDeAcMode = editor.getPSAppDEACMode() /> <#assign appDeAcMode = editor.getPSAppDEACMode() />
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
:localParam =<@getNavigateParams editor /> :localParam =<@getNavigateParams editor />
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
name='${editor.name}' name='${editor.name}'
<#if editor.getEditorParam("PICKUPDATA", "") != "">pickUpData="${editor.getEditorParam("PICKUPDATA", "")}"</#if>
<#-- 自填模式文本属性、值属性start --> <#-- 自填模式文本属性、值属性start -->
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??> <#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
<#assign appDeAcMode = editor.getPSAppDEACMode() /> <#assign appDeAcMode = editor.getPSAppDEACMode() />
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
:localParam =<@getNavigateParams editor /> :localParam =<@getNavigateParams editor />
:disabled="detailsModel.${editor.name}.disabled" :disabled="detailsModel.${editor.name}.disabled"
name='${editor.name}' name='${editor.name}'
<#if editor.getEditorParam("PICKUPDATA", "") != "">pickUpData="${editor.getEditorParam("PICKUPDATA", "")}"</#if>
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??> <#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
<#if editor.getPSAppDEACMode().getMinorSortPSDEF?? && editor.getPSAppDEACMode().getMinorSortPSDEF()?? && editor.getPSAppDEACMode().getMinorSortDir?? && editor.getPSAppDEACMode().getMinorSortDir()??> <#if editor.getPSAppDEACMode().getMinorSortPSDEF?? && editor.getPSAppDEACMode().getMinorSortPSDEF()?? && editor.getPSAppDEACMode().getMinorSortDir?? && editor.getPSAppDEACMode().getMinorSortDir()??>
<#if editor.getPSAppDEACMode().getMinorSortDir() == 'ASC' || editor.getPSAppDEACMode().getMinorSortDir() == 'DESC'> <#if editor.getPSAppDEACMode().getMinorSortDir() == 'ASC' || editor.getPSAppDEACMode().getMinorSortDir() == 'DESC'>
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
:localParam =<@getNavigateParams editor /> :localParam =<@getNavigateParams editor />
:disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1" :disabled="row.srfuf === 1 ? (${item.getEnableCond()?c} & 2) !== 2 : (${item.getEnableCond()?c} & 1) !== 1"
name='${editor.name}' name='${editor.name}'
<#if editor.getEditorParam("PICKUPDATA", "") != "">pickUpData="${editor.getEditorParam("PICKUPDATA", "")}"</#if>
<#-- 自填模式文本属性、值属性start --> <#-- 自填模式文本属性、值属性start -->
<#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??> <#if editor.getPSAppDEACMode?? && editor.getPSAppDEACMode()??>
<#assign appDeAcMode = editor.getPSAppDEACMode() /> <#assign appDeAcMode = editor.getPSAppDEACMode() />
......
<avue-custom-form :isParseString="<#if editor.getEditorParam('isParseString','') != ''>true<#else>false</#if>" :isFormData="<#if editor.getEditorParam('isFormData','') != ''>true<#else>false</#if>" <#if editor.getEditorParam('options','') != ''>:options="${editor.getEditorParam('options','')}"</#if> v-model="data.${editor.name}" :formData="data" <#if editor.getEditorParam('url','') != ''>:url="${editor.getEditorParam('url','')}"</#if> :formState="formState"></avue-custom-form> <avue-custom-form :isSubForm="<#if editor.getEditorParam('isSubForm','') != ''>true<#else>false</#if>" :isParseString="<#if editor.getEditorParam('isParseString','') != ''>true<#else>false</#if>" :isFormData="<#if editor.getEditorParam('isFormData','') != ''>true<#else>false</#if>" <#if editor.getEditorParam('options','') != ''>:options="${editor.getEditorParam('options','')}"</#if> v-model="data.${editor.name}" :formData="data" <#if editor.getEditorParam('url','') != ''>:url="${editor.getEditorParam('url','')}"</#if> :formState="formState"></avue-custom-form>
\ No newline at end of file \ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
{
"name": "app",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "node --max_old_space_size=8102 ./node_modules/@vue/cli-service/bin/vue-cli-service serve --mode test",
"dev-serve": "node --max_old_space_size=8102 ./node_modules/@vue/cli-service/bin/vue-cli-service serve --mode development",
"build": "node --max_old_space_size=8102 ./node_modules/@vue/cli-service/bin/vue-cli-service build",
"dev-build": "node --max_old_space_size=8102 ./node_modules/@vue/cli-service/bin/vue-cli-service build --mode development",
"test:unit": "vue-cli-service test:unit",
"test:e2e": "vue-cli-service test:e2e",
"lint": "vue-cli-service lint"
},
"dependencies": {
"@fullcalendar/core": "^4.4.0",
"@fullcalendar/daygrid": "^4.4.0",
"@fullcalendar/interaction": "^4.4.0",
"@fullcalendar/list": "^4.4.0",
"@fullcalendar/timegrid": "^4.4.0",
"@fullcalendar/vue": "^4.4.0",
"vuedraggable": "^2.23.2",
"async-validator": "^3.3.0",
"@popperjs/core": "^2.4.3",
"axios": "^0.19.1",
"core-js": "^3.4.4",
"echarts": "^4.6.0",
"element-ui": "^2.13.0",
"file-saver": "^2.0.2",
"font-awesome": "^4.7.0",
"ibiz-gantt-elastic": "^1.0.17",
"ibiz-vue-lib": "^0.1.13",
"interactjs": "^1.9.4",
"moment": "^2.24.0",
"path-to-regexp": "^6.1.0",
"qs": "^6.9.1",
"rxjs": "^6.5.4",
"tinymce": "4.8.5",
"view-design": "4.2.0",
"vue": "^2.6.10",
"vue-class-component": "^7.0.2",
"vue-grid-layout": "^2.3.7",
"vue-i18n": "^8.15.3",
"vue-property-decorator": "^8.3.0",
"vue-router": "^3.1.3",
"vuex": "^3.1.2",
<#if app.getAllPSAppPkgs?? && app.getAllPSAppPkgs()??>
<#list app.getAllPSAppPkgs() as appPackage>
<#if appPackage.getVerParam()?? && appPackage.getVerParam() !="">${appPackage.getVerParam()},</#if>
</#list>
</#if>
"xlsx": "^0.15.6"
},
"devDependencies": {
"@types/echarts": "^4.4.3",
"@types/jest": "^24.0.19",
"@types/mockjs": "^1.0.2",
"@types/qs": "^6.9.0",
"@vue/cli-plugin-babel": "^4.1.0",
"@vue/cli-plugin-e2e-cypress": "^4.1.0",
"@vue/cli-plugin-router": "^4.1.0",
"@vue/cli-plugin-typescript": "^4.1.0",
"@vue/cli-plugin-unit-jest": "^4.1.0",
"@vue/cli-plugin-vuex": "^4.1.0",
"@vue/cli-service": "^4.1.0",
"@vue/test-utils": "1.0.0-beta.29",
"axios-mock-adapter": "^1.17.0",
"compression-webpack-plugin": "^4.0.0",
"less": "^3.0.4",
"less-loader": "^5.0.0",
"mockjs": "^1.1.0",
"script-loader": "^0.7.2",
"typescript": "~3.5.3",
<#if app.getAllPSAppPkgs?? && app.getAllPSAppPkgs()??>
<#list app.getAllPSAppPkgs() as appPackage>
<#if appPackage.getVerParam2()?? && appPackage.getVerParam2() !="">${appPackage.getVerParam2()},</#if>
</#list>
</#if>
"vue-template-compiler": "^2.6.10"
}
}
...@@ -133,7 +133,7 @@ export default class ${srfclassname('${item.getCodeName()}')}UIServiceBase exten ...@@ -133,7 +133,7 @@ export default class ${srfclassname('${item.getCodeName()}')}UIServiceBase exten
public initViewMap(){ public initViewMap(){
<#if item.getAllPSAppViews()??> <#if item.getAllPSAppViews()??>
<#list item.getAllPSAppViews() as singleView> <#list item.getAllPSAppViews() as singleView>
this.allViewMap.set('<#if singleView.getFuncViewMode()??>${singleView.getFuncViewMode()}</#if>:<#if singleView.getFuncViewParam()??>${singleView.getFuncViewParam()}</#if>',{viewname:'${singleView.getPSDEViewCodeName()?lower_case}',srfappde:'${srfpluralize(item.codeName)?lower_case}'}); this.allViewMap.set('<#if singleView.getFuncViewMode()??>${singleView.getFuncViewMode()}</#if>:<#if singleView.getFuncViewParam()??>${singleView.getFuncViewParam()}</#if>',{viewname:'${singleView.getPSDEViewCodeName()?lower_case}',srfappde:'${srfpluralize(item.codeName)?lower_case}',component:'${srffilepath2(singleView.getCodeName())}'});
</#list> </#list>
</#if> </#if>
} }
...@@ -350,13 +350,13 @@ ${P.getLogicCode(appdeUIAction, "LOGIC.vue").code} ...@@ -350,13 +350,13 @@ ${P.getLogicCode(appdeUIAction, "LOGIC.vue").code}
} }
}) })
for (let i = 0; i <= 1; i++) { for (let i = 0; i <= 1; i++) {
<#noparse>let strTag:string = (curData[this.mainStateFields[0]])?(i == 0) ? `${curData[this.mainStateFields[0]]}` : "":"";</#noparse> <#noparse>let strTag:string = (curData[this.mainStateFields[0]] != null && curData[this.mainStateFields[0]] !== "")?(i == 0) ? `${curData[this.mainStateFields[0]]}` : "":"";</#noparse>
if (this.mainStateFields.length >= 2) { if (this.mainStateFields.length >= 2) {
for (let j = 0; j <= 1; j++) { for (let j = 0; j <= 1; j++) {
<#noparse>let strTag2:string = (curData[this.mainStateFields[1]])?`${strTag}__${(j == 0) ? `${curData[this.mainStateFields[1]]}` : ""}`:strTag;</#noparse> <#noparse>let strTag2:string = (curData[this.mainStateFields[1]] != null && curData[this.mainStateFields[1]] !== "")?`${strTag}__${(j == 0) ? `${curData[this.mainStateFields[1]]}` : ""}`:strTag;</#noparse>
if (this.mainStateFields.length >= 3) { if (this.mainStateFields.length >= 3) {
for (let k = 0; k <= 1; k++) { for (let k = 0; k <= 1; k++) {
<#noparse>let strTag3:string = (curData[this.mainStateFields[2]])?`${strTag2}__${(k == 0) ? `${curData[this.mainStateFields[2]]}` : ""}`:strTag2;</#noparse> <#noparse>let strTag3:string = (curData[this.mainStateFields[2]] != null && curData[this.mainStateFields[2]] !== "")?`${strTag2}__${(k == 0) ? `${curData[this.mainStateFields[2]]}` : ""}`:strTag2;</#noparse>
// 判断是否存在 // 判断是否存在
return this.allDeMainStateMap.get(strTag3); return this.allDeMainStateMap.get(strTag3);
} }
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册