提交 4dbf3083 编写于 作者: zhangpingchuan's avatar zhangpingchuan

update:更新

上级 a78619fa
<style lang='scss'> <style lang='less'>
@import './${srffilepath2(ctrl.codeName)}-${ctrl.getControlType()?lower_case}.scss'; @import './${srffilepath2(ctrl.codeName)}-${ctrl.getControlType()?lower_case}.less';
</style> </style>
\ No newline at end of file
...@@ -33,6 +33,9 @@ import ${srfclassname('${curAppEntity.getCodeName()}')}UIService from '@/uiservi ...@@ -33,6 +33,9 @@ import ${srfclassname('${curAppEntity.getCodeName()}')}UIService from '@/uiservi
import ${srfclassname('${appde.getCodeName()}')}UIService from '@/uiservice/${srffilepath2(appde.getCodeName())}/${srffilepath2(appde.getCodeName())}-ui-service'; import ${srfclassname('${appde.getCodeName()}')}UIService from '@/uiservice/${srffilepath2(appde.getCodeName())}/${srffilepath2(appde.getCodeName())}-ui-service';
</#if> </#if>
<#-- 语言资源入口 --> <#-- 语言资源入口 -->
<#ibizinclude>
./LANGBASE.vue.ftl
</#ibizinclude>
<#if import_block??>${import_block}</#if> <#if import_block??>${import_block}</#if>
@Component({ @Component({
......
...@@ -33,6 +33,9 @@ import ${srfclassname('${curAppEntity.getCodeName()}')}UIService from '@/uiservi ...@@ -33,6 +33,9 @@ import ${srfclassname('${curAppEntity.getCodeName()}')}UIService from '@/uiservi
import ${srfclassname('${appde.getCodeName()}')}UIService from '@/uiservice/${srffilepath2(appde.getCodeName())}/${srffilepath2(appde.getCodeName())}-ui-service'; import ${srfclassname('${appde.getCodeName()}')}UIService from '@/uiservice/${srffilepath2(appde.getCodeName())}/${srffilepath2(appde.getCodeName())}-ui-service';
</#if> </#if>
<#-- 语言资源入口 --> <#-- 语言资源入口 -->
<#ibizinclude>
./LANGBASE.vue.ftl
</#ibizinclude>
<#if import_block??>${import_block}</#if> <#if import_block??>${import_block}</#if>
@Component({ @Component({
......
<#assign langbase><#if appde??>entities.${appde.getCodeName()?lower_case}.${ctrl.getCodeName()?lower_case}_${ctrl.getControlType()?lower_case}</#if></#assign>
\ No newline at end of file
// this is scss // this is less
<#if ctrl.getPSSysCsses?? && ctrl.getPSSysCsses()??> <#if ctrl.getPSSysCsses?? && ctrl.getPSSysCsses()??>
<#list ctrl.getPSSysCsses() as css> <#list ctrl.getPSSysCsses() as css>
<#if css.getRawCssStyle()?? && css.getRawCssStyle()?length gt 0> <#if css.getRawCssStyle()?? && css.getRawCssStyle()?length gt 0>
......
...@@ -24,5 +24,5 @@ ...@@ -24,5 +24,5 @@
} }
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/分页导航面板/CONTROL.scss.ftl 生成 // 基于 @CONTROL/分页导航面板/CONTROL.less.ftl 生成
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
.tabexppanel { .tabexppanel {
......
// 基于 @CONTROL/分页视图面板/CONTROL.scss.ftl 生成 // 基于 @CONTROL/分页视图面板/CONTROL.less.ftl 生成
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
.tabviewpanel{ .tabviewpanel{
>.view-container { >.view-container {
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#assign ListContent> <#assign ListContent>
<div class="app-list-item-content"> <div class="app-list-item-content">
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
</div> </div>
</div> </div>
<div v-else style="text-align: center;"> <div v-else style="text-align: center;">
{{<@getEmptyTextLanguage ctrl/>}} {{ $t('<#if langbase??>${langbase}.nodata</#if>') }}
</div> </div>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
</template> </template>
</div> </div>
<div v-else> <div v-else>
{{ <@getEmptyTextLanguage ctrl/>}} {{ $t('<#if langbase??>${langbase}.nodata</#if>') }}
<#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??> <#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??>
<span class="quick-toolbar"> <span class="quick-toolbar">
<#assign quickToolbar = ctrl.getQuickPSDEToolbar()/> <#assign quickToolbar = ctrl.getQuickPSDEToolbar()/>
......
// 基于 @CONTROL/列表/CONTROL.scss.ftl 生成 // 基于 @CONTROL/列表/CONTROL.less.ftl 生成
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
.app-list { .app-list {
......
// 基于 @CONTROL/列表导航/CONTROL.scss.ftl 生成 // 基于 @CONTROL/列表导航/CONTROL.less.ftl 生成
.app-list-exp-bar { .app-list-exp-bar {
height: 100%; height: 100%;
display: flex; display: flex;
...@@ -42,5 +42,5 @@ ...@@ -42,5 +42,5 @@
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/卡片视图导航/CONTROL.scss.ftl 生成 // 基于 @CONTROL/卡片视图导航/CONTROL.less.ftl 生成
.app-dataview-exp-bar { .app-dataview-exp-bar {
height: 100%; height: 100%;
display: flex; display: flex;
...@@ -42,5 +42,5 @@ ...@@ -42,5 +42,5 @@
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
...@@ -4,11 +4,11 @@ ${ctrl.render.code} ...@@ -4,11 +4,11 @@ ${ctrl.render.code}
<#else> <#else>
<layout class="app-wizard<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if>"> <layout class="app-wizard<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if>">
<#if ctrl.getPSDEWizard?? && ctrl.getPSDEWizard()?? && ctrl.getPSDEWizard().getPSDEWizardSteps?? && ctrl.getPSDEWizard().getPSDEWizardSteps()??> <#if ctrl.getPSDEWizard?? && ctrl.getPSDEWizard()?? && ctrl.getPSDEWizard().getPSDEWizardSteps?? && ctrl.getPSDEWizard().getPSDEWizardSteps()??>
<steps class="wizard-steps" v-if="isShowStepBar" :current="wizardForms.indexOf(activeForm)"> <el-steps class="wizard-steps" v-if="isShowStepBar" :active="wizardForms.indexOf(activeForm)" finish-status="success" align-center>
<#list ctrl.getPSDEWizard().getPSDEWizardSteps() as step> <#list ctrl.getPSDEWizard().getPSDEWizardSteps() as step>
<step title="${step.getTitle()}"></step> <el-step title="${step.getTitle()}"></el-step>
</#list> </#list>
</steps> </el-steps>
</#if> </#if>
<i-content class="app-wizard-content"> <i-content class="app-wizard-content">
<#if ctrl.getPSDEEditForms()??> <#if ctrl.getPSDEEditForms()??>
......
// 基于 @CONTROL/向导面板/CONTROL.less.ftl 生成
.app-wizard {
background: #fff;
height: 100%;
.wizard-steps{
padding: 10px 50px;
border-bottom: 1px solid #ddd;
margin-bottom: 10px;
.el-step__head.is-process{
border-color: #7e8187;
color: #7e8187;
}
.el-step__title.is-process{
color: #7e8187;
}
.el-step__head.is-success{
border-color: #1890ff;
color: #1890ff;
}
.el-step__title.is-success{
color: #1890ff;
}
}
.app-wizard-content{
height: 100%;
overflow-y: auto;
}
.app-wizard-footer {
padding: 10px;
text-align: right;
.ivu-btn {
margin: 0 5px;
}
}
}
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/向导面板/CONTROL.scss.ftl 生成
<#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl
</#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/地图/CONTROL.scss.ftl 生成 // 基于 @CONTROL/地图/CONTROL.less.ftl 生成
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
.map{ .map{
width: 80vw; width: 80vw;
......
// 基于 @CONTROL/多编辑视图面板/CONTROL.less.ftl 生成
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
.multieditviewpanel{
width: 100%;
height: 100%;
overflow: auto;
.item{
position: relative;
.multieditviewpanel-delete{
position: absolute;
right: 0;
top: 0;
z-index: 100;
font-size: 18px;
cursor: pointer;
}
}
}
.multieditviewpanel-button {
position: relative;
height: 40px;
button {
position: absolute;
bottom: 8px;
right: 2px;
}
}
\ No newline at end of file
// 基于 @CONTROL/多编辑视图面板/CONTROL.scss.ftl 生成
<#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl
</#ibizinclude>
.app-multieditviewpanel {
height: 100%;
min-height: 56px;
display: flex;
flex-direction: column;
position: relative;
.app-multieditviewpanel-add {
position: absolute;
z-index: 1;
top: 20px;
right: 20px;
&.app-multieditviewpanel-add--existdata {
right: 60px;
}
}
.app-multieditviewpanel-item {
margin: 10px 0;
.multieditviewpanel-item__caption {
padding-left: 20px;
}
.collapse-icon {
font-size: 20px;
margin-right: 20px;
cursor: pointer;
}
>.ivu-card-extra {
right: 20px;
top: 10px;
.multieditviewpanel-action {
display: flex;
height: 34px;
align-items: center;
.remove-icon {
font-size: 20px;
margin-left: 20px;
cursor: pointer;
}
}
}
>.ivu-card-body {
padding: 20px 5px 10px 5px;
>.viewcontainer2 {
padding: 0px !important;
}
}
&.app-multieditviewpanel-item--collapse {
>.ivu-card-head {
color: var(--app-color-gray-200);
border-bottom: none;
}
>.ivu-card-body {
display: none;
}
}
}
}
\ No newline at end of file
<#ibizinclude>../@MACRO/FUNC/MACRO.ftl</#ibizinclude> <#ibizinclude>../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#if ctrl.getName() != 'toolbar'> <#if ctrl.getName() != 'toolbar'>
<#assign ModelsName>${ctrl.getCodeName()?lower_case}Models</#assign> <#assign ModelsName>${ctrl.getCodeName()?lower_case}Models</#assign>
...@@ -14,35 +14,35 @@ ${item.render.code} ...@@ -14,35 +14,35 @@ ${item.render.code}
<#if item.getTooltip()?? && item.getTooltip() != ''> <#if item.getTooltip()?? && item.getTooltip() != ''>
<tooltip :transfer="true" :max-width="600"> <tooltip :transfer="true" :max-width="600">
<#if deuiaction.getUIActionTag() == 'ExportExcel'> <#if deuiaction.getUIActionTag() == 'ExportExcel'>
<app-export-excel :item="${ModelsName}.${item.name}" :caption="<@getItemLanguageCaption item />" @exportexcel="${ctrl.name}_click({ tag: '${item.name}' }, $event)"></app-export-excel> <app-export-excel :item="${ModelsName}.${item.name}" :caption="$t('${langbase}.${item.name}.caption')" @exportexcel="${ctrl.name}_click({ tag: '${item.name}' }, $event)"></app-export-excel>
<#else> <#else>
<#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSAppCounter?? && item.getPSUIAction().getPSAppCounter()??> <#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSAppCounter?? && item.getPSUIAction().getPSAppCounter()??>
<#assign uiaction = item.getPSUIAction() /> <#assign uiaction = item.getPSUIAction() />
<#assign counter = uiaction.getPSAppCounter() /> <#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>"> <Badge type="primary" v-show="${ModelsName}.${item.name}.visabled" :count="${counter.getCodeName()?lower_case}counterservice.counterData.<#if uiaction.getCounterId()??>${uiaction.getCounterId()}</#if>">
</#if> </#if>
<i-button v-show="${ModelsName}.${item.name}.visabled" :disabled="${ModelsName}.${item.name}.disabled" class='<#if item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if><#if item.getActionLevel?? && item.getActionLevel()??> srfactionlevel${item.getActionLevel()}</#if>' v-button-loading:i-button @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-button-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.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'>{{<@getItemLanguageCaption item />}}</span></#if> <#if item.isShowCaption()><span class='caption'>{{<#if langbase??>$t('${langbase}.${item.name}.caption')<#else>'${item.getCaption()}'</#if>}}</span></#if>
</i-button> </i-button>
<#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSAppCounter?? && item.getPSUIAction().getPSAppCounter()??> <#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSAppCounter?? && item.getPSUIAction().getPSAppCounter()??>
</Badge> </Badge>
</#if> </#if>
</#if> </#if>
<div slot='content'>{{<@getItemLanguageCaption item />}}</div> <div slot='content'>{{<#if langbase??>$t('${langbase}.${item.name}.tip')<#else>'${item.getTooltip()}'</#if>}}</div>
</tooltip> </tooltip>
<#else> <#else>
<#if deuiaction.getUIActionTag() == 'ExportExcel'> <#if deuiaction.getUIActionTag() == 'ExportExcel'>
<app-export-excel :item="${ModelsName}.${item.name}" :caption="<@getItemLanguageCaption item />" @exportexcel="${ctrl.name}_click({ tag: '${item.name}' }, $event)"></app-export-excel> <app-export-excel :item="${ModelsName}.${item.name}" :caption="$t('${langbase}.${item.name}.caption')" @exportexcel="${ctrl.name}_click({ tag: '${item.name}' }, $event)"></app-export-excel>
<#else> <#else>
<#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSAppCounter?? && item.getPSUIAction().getPSAppCounter()??> <#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSAppCounter?? && item.getPSUIAction().getPSAppCounter()??>
<#assign uiaction = item.getPSUIAction() /> <#assign uiaction = item.getPSUIAction() />
<#assign counter = uiaction.getPSAppCounter() /> <#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>"> <Badge type="primary" v-show="${ModelsName}.${item.name}.visabled" :count="${counter.getCodeName()?lower_case}counterservice.counterData.<#if uiaction.getCounterId()??>${uiaction.getCounterId()}</#if>">
</#if> </#if>
<i-button v-show="${ModelsName}.${item.name}.visabled" :disabled="${ModelsName}.${item.name}.disabled" class='<#if item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if><#if item.getActionLevel?? && item.getActionLevel()??> srfactionlevel${item.getActionLevel()}</#if>' v-button-loading:i-button @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-button-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.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'>{{<@getItemLanguageCaption item />}}</span></#if> <#if item.isShowCaption()><span class='caption'>{{<#if langbase??>$t('${langbase}.${item.name}.caption')<#else>'${item.getCaption()}'</#if>}}</span></#if>
</i-button> </i-button>
<#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSAppCounter?? && item.getPSUIAction().getPSAppCounter()??> <#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSAppCounter?? && item.getPSUIAction().getPSAppCounter()??>
</Badge> </Badge>
......
<#ibizinclude>../@MACRO/FUNC/MACRO.ftl</#ibizinclude> <#ibizinclude>../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#if ctrl.getName() != 'toolbar'> <#if ctrl.getName() != 'toolbar'>
<#assign ModelsName>${ctrl.getCodeName()?lower_case}Models</#assign> <#assign ModelsName>${ctrl.getCodeName()?lower_case}Models</#assign>
...@@ -14,19 +14,19 @@ ${item.render.code} ...@@ -14,19 +14,19 @@ ${item.render.code}
<#if item.getTooltip()?? && item.getTooltip() != ''> <#if item.getTooltip()?? && item.getTooltip() != ''>
<tooltip :transfer="true" :max-width="600"> <tooltip :transfer="true" :max-width="600">
<@badge item> <@badge item>
<i-button class='<#if item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if><#if item.getActionLevel?? && item.getActionLevel()??> srfactionlevel${item.getActionLevel()}</#if>'> <i-button class='<#if item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>'>
<#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.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'>{{<@getItemLanguageCaption item />}}</span></#if> <#if item.isShowCaption()><span class='caption'>{{<#if langbase??>$t('${langbase}.${item.name}.caption')<#else>'${item.getCaption()}'</#if>}}</span></#if>
<icon type="ios-arrow-down"></icon> <icon type="ios-arrow-down"></icon>
</i-button> </i-button>
</@badge> </@badge>
<div slot='content'><@getItemLanguageCaption item /></div> <div slot='content'><#if langbase??>{{<#if langbase??>$t('${langbase}.${item.name}.tip')<#else>'${item.getTooltip()}'</#if>}}</#if></div>
</tooltip> </tooltip>
<#else> <#else>
<@badge item> <@badge item>
<i-button class='<#if item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if><#if item.getActionLevel?? && item.getActionLevel()??> srfactionlevel${item.getActionLevel()}</#if>'> <i-button class='<#if item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>'>
<#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.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'>{{<@getItemLanguageCaption item />}}</span></#if> <#if item.isShowCaption()><span class='caption'>{{<#if langbase??>$t('${langbase}.${item.name}.caption')<#else>'${item.getCaption()}'</#if>}}</span></#if>
<icon type="ios-arrow-down"></icon> <icon type="ios-arrow-down"></icon>
</i-button> </i-button>
</@badge> </@badge>
......
...@@ -4,7 +4,7 @@ ${item.render.code} ...@@ -4,7 +4,7 @@ ${item.render.code}
<app-rawitem <app-rawitem
:viewparams="viewparams" :viewparams="viewparams"
:context="context" :context="context"
contentStyle="<#if item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if><#if item.getActionLevel?? && item.getActionLevel()??> srfactionlevel${item.getActionLevel()}</#if>" 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>" 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>" contentType="<#if item.getContentType?? && item.getContentType()??>${item.getContentType()}</#if>"
<#if item.getHtmlContent?? && item.getHtmlContent()??> <#if item.getHtmlContent?? && item.getHtmlContent()??>
......
.toolbar-container {
button {
margin: 6px 0px 4px 4px;
.caption {
margin-left: 4px;
}
}
.seperator {
color: #dcdee2;
margin: 0 0px 0 4px;
}
}
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl
</#ibizinclude>
\ No newline at end of file
...@@ -2,23 +2,124 @@ ...@@ -2,23 +2,124 @@
<#if quick_menus??> <#if quick_menus??>
${quick_menus} ${quick_menus}
<#else> <#else>
<#if ctrl.getAppMenuStyle?? && ctrl.getAppMenuStyle() == "ICONVIEW"> <div class="app-app-menu<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if>">
<app-icon-menus :menus = "menus" :ctrlName = "'${ctrl.codeName?lower_case}'" @menuClick="select"></app-icon-menus> <#if ctrl.getAppMenuStyle?? && ctrl.getAppMenuStyle() == "ICONVIEW">
<#else> <app-icon-menus :menus = "menus" :ctrlName = "'${ctrl.codeName?lower_case}'" @menuClick="select"></app-icon-menus>
<#else>
<el-menu <el-menu
:class="`app-menu <#noparse>app-menu--${mode}</#noparse> <#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if>`" class="app-menu"
<#if view.getMainMenuAlign()?? && view.getMainMenuAlign()!="TOP"> <#if view.getMainMenuAlign()?? && view.getMainMenuAlign()!="TOP">:default-openeds="defaultOpeneds"</#if>
:default-openeds="defaultOpeneds" :mode="mode"
</#if> :menu-trigger="trigger"
:mode="mode" :collapse="isCollapse"
:menu-trigger="trigger" @select="select"
:collapse="isCollapse" :default-active="defaultActive">
:collapse-transition="false"
:default-active="defaultActive" <template v-if="Object.is(mode,'horizontal')">
@select="select"> <template v-for="item0 in menus">
<app-menu-item :isCollapse="isCollapse" :menus="menus" ctrlName="${ctrl.getCodeName()?lower_case}" :isFirst="true" :counterdata="counterdata" :popper-class="popperClass"></app-menu-item> <template v-if="item0.items && Array.isArray(item0.items) && item0.items.length > 0">
<el-submenu v-show="!item0.hidden" :index="item0.name" :popper-class="popperClass" :key="item0.id" :class="item0.textcls">
<template slot='title'>
<template v-if="item0.icon && item0.icon != ''">
<img :src="item0.icon" class='app-menu-icon' />
</template>
<template v-else-if="item0.iconcls && item0.iconcls != ''">
<i :class="[item0.iconcls, 'app-menu-icon']"></i>
</template>
<template v-else>
<i class='app-menu-icon'></i>
<#-- <i class='fa fa-cogs app-menu-icon'></i> -->
</template>
<span class='text' :title="$t('app.menus.${ctrl.getCodeName()?lower_case}.' + item0.name)">{{$t('app.menus.${ctrl.getCodeName()?lower_case}.' + item0.name)}}</span>
</template>
<template v-for="item1 in item0.items">
<template v-if="item1.items && Array.isArray(item1.items) && item1.items.length > 0">
<el-submenu v-show="!item1.hidden" :index="item1.name" :popper-class="popperClass" :key="item1.id" :class="item1.textcls">
<template slot='title'>
<template v-if="item1.icon && item1.icon != ''">
<img :src="item1.icon" class='app-menu-icon' />
</template>
<template v-else-if="item1.iconcls && item1.iconcls != ''">
<i :class="[item1.iconcls, 'app-menu-icon']"></i>
</template>
<span class='text' :title="$t('app.menus.${ctrl.getCodeName()?lower_case}.' + item1.name)">{{$t('app.menus.${ctrl.getCodeName()?lower_case}.' + item1.name)}}</span>
</template>
<template v-for="item2 in item1.items">
<template v-if="item2.type =='MENUITEM'">
<el-menu-item v-show="!item2.hidden" :index="item2.name" :key="item2.id" :class="item2.textcls">
<template v-if="item2.icon && item2.icon != ''">
<img :src="item2.icon" class='app-menu-icon' />
</template>
<template v-else-if="item2.iconcls && item2.iconcls != ''">
<i :class="[item2.iconcls, 'app-menu-icon']"></i>
</template>
<template slot="title">
<span class="text" :title="$t('app.menus.${ctrl.getCodeName()?lower_case}.' + item2.name)">{{$t('app.menus.${ctrl.getCodeName()?lower_case}.' + item2.name)}}</span>
<template v-if="counterdata && counterdata[item2.counterid] && counterdata[item2.counterid] > 0">
<span class="pull-right">
<badge :count="counterdata[item2.counterid]" :overflow-count="9999"></badge>
</span>
</template>
</template>
</el-menu-item>
</template>
</template>
</el-submenu>
</template>
<template v-else>
<template v-if="item1.type =='MENUITEM'">
<el-menu-item v-show="!item1.hidden" :index="item1.name" :key="item1.id" :class="item1.textcls">
<template v-if="item1.icon && item1.icon != ''">
<img :src="item1.icon" class='app-menu-icon' />
</template>
<template v-else-if="item1.iconcls && item1.iconcls != ''">
<i :class="[item1.iconcls, 'app-menu-icon']"></i>
</template>
<template slot="title">
<span class="text" :title="$t('app.menus.${ctrl.getCodeName()?lower_case}.' + item1.name)">{{$t('app.menus.${ctrl.getCodeName()?lower_case}.' + item1.name)}} </span>
<template v-if="counterdata && counterdata[item1.counterid] && counterdata[item1.counterid] > 0">
<span class="pull-right">
<badge :count="counterdata[item1.counterid]" :overflow-count="9999"></badge>
</span>
</template>
</template>
</el-menu-item>
</template>
</template>
</template>
</el-submenu>
</template>
<template v-else>
<template v-if="item0.type =='MENUITEM'">
<el-menu-item v-show="!item0.hidden" :index="item0.name" :key="item0.id" :class="item0.textcls">
<template v-if="item0.icon && item0.icon != ''">
<img :src="item0.icon" class='app-menu-icon' />
</template>
<template v-else-if="item0.iconcls && item0.iconcls != ''">
<i :class="[item0.iconcls, 'app-menu-icon']"></i>
</template>
<template v-else>
<i class='app-menu-icon'></i>
<#-- <i class='fa fa-cogs app-menu-icon'></i> -->
</template>
<template slot="title">
<span class="text" :title="$t('app.menus.${ctrl.getCodeName()?lower_case}.' + item0.name)">{{$t('app.menus.${ctrl.getCodeName()?lower_case}.' + item0.name)}}</span>
<template v-if="counterdata && counterdata[item0.counterid] && counterdata[item0.counterid] > 0">
<span class="pull-right">
<badge :count="counterdata[item0.counterid]" :overflow-count="9999"></badge>
</span>
</template>
</template>
</el-menu-item>
</template>
</template>
</template>
</template>
<app-menu-item v-else :isCollapse="isCollapse" :menus="menus" :ctrlName="'${ctrl.getCodeName()?lower_case}'" :isFirst="true" :counterdata="counterdata" :popper-class="popperClass"></app-menu-item>
</el-menu> </el-menu>
</#if> </#if>
</div>
</#if> </#if>
</template> </template>
// 基于 @CONTROL/应用菜单/CONTROL-BASE.vue.ftl 生成 // 基于 @CONTROL/应用菜单/CONTROL-BASE.vue.ftl 生成
...@@ -537,7 +638,7 @@ ${P.getLogicCode(singleFuncs,"LOGIC.vue").code} ...@@ -537,7 +638,7 @@ ${P.getLogicCode(singleFuncs,"LOGIC.vue").code}
* @memberof ${srfclassname('${ctrl.codeName}')}Base * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
get popperClass(): string { get popperClass(): string {
<#noparse>return `app-popper-menu app-popper-menu--${this.mode}`;</#noparse> return 'app-popper-menu ' + this.selectTheme;
} }
<#ibizinclude> <#ibizinclude>
......
// 基于 @CONTROL/应用菜单/CONTROL.less.ftl 生成
/*** BRGIN:菜单样式 ***/
.app-app-menu {
overflow-y: auto;
overflow-x: hidden;
height: calc(100% - 58px);
.ivu-divider{
background-color: #b3b3b3;
height: 2px;
}
> .el-menu {
border-right: 0;
.el-menu-item {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
.ivu-badge {
.ivu-badge-count {
box-shadow: 0 0 0 0px #fff;
}
}
}
.el-submenu__title i, .el-menu-item i {
font-size: 12px;
width: 18px;
}
.el-submenu__title .app-menu-icon,.el-menu-item .app-menu-icon{
width:20px;
font-size: 14px;
}
.el-submenu__title .text {
font-size: 16px;
}
.el-submenu__title .app-menu-circle,.el-menu-item .app-menu-circle {
display: inline-block;
border-radius: 50%;
width: 20px;
height: 20px;
line-height: 36px;
vertical-align:middle;
background: rgb(var(--app-footer-background-color-rgb));
border: 1px solid #fff;
border-color: rgb(var(--app-header-color-rgb));
color: rgb(var(--app-header-color-rgb));;
text-align: center;
font: 12px Arial, sans-serif;
}
.el-submenu__title, .el-menu-item {
height: 50px;
font-size: 14px;
line-height: 50px;
border-left: 4px !important;
}
.el-menu-item .el-tooltip {
padding-left: 12px !important;
}
.isCollpase .el-submenu__title{
padding-left: 12px !important;
}
.isFirst > .text {
font-size: 16px !important;
}
.el-menu-item, .el-submenu, .el-menu {
border-top: 1px solid #fff;
}
> .el-menu-item, > .el-submenu > .el-submenu__title {
height: 56px;
line-height: 56px;
padding-left: 16px !important;
}
.app-menu-icon {
margin: 4px;
text-align: center;
}
> .el-submenu {
> .el-menu {
> .el-menu-item, > .el-submenu > .el-submenu__title {
padding-left: 44px !important;
}
> .el-submenu {
> .el-menu {
> .el-menu-item, > .el-submenu > .el-submenu__title {
padding-left: 68px !important;
}
}
}
}
}
.active-icon {
font-size: 40px !important;
position: absolute;
right: 0;
line-height: 42px;
color: #fff !important;
display: none;
width: 24px !important;
overflow: hidden;
}
}
.el-menu--horizontal{
display: flex;
width: calc(100vw - 1100px);
height: 65px;
flex-wrap: nowrap;
overflow-x:scroll;
padding-top: 3px;
.el-menu-item{
overflow: visible;
}
.el-submenu{
.el-submenu__title{
padding-right: 0px !important;
padding-left: 0px !important;
}
}
}
.ivu-divider-horizontal {
width: 100%;
min-width: 100%;
margin: 4px auto;
margin-bottom: 1px;
}
}
.app-popper-menu {
.el-menu-item, .el-submenu__title {
height: 36px;
font-size: 16px;
line-height: 36px;
}
> .el-menu-item, > .el-submenu > .el-submenu__title {
height: 40px;
line-height: 40px;
}
.el-menu-item {
.ivu-badge {
.ivu-badge-count {
box-shadow: 0 0 0 0px #fff;
}
}
> span{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.ivu-divider-horizontal {
width: 100%;
min-width: 100%;
margin: 4px auto;
margin-bottom: 1px;
}
}
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/应用菜单/CONTROL.scss.ftl 生成
<#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl
</#ibizinclude>
\ No newline at end of file
...@@ -29,11 +29,6 @@ ...@@ -29,11 +29,6 @@
</#if> </#if>
resourcetag: '<#if item.getAccessKey()??>${item.getAccessKey()}</#if>', resourcetag: '<#if item.getAccessKey()??>${item.getAccessKey()}</#if>',
authtag:'${app.getCodeName()}-${ctrl.getCodeName()}-${item.getName()}', authtag:'${app.getCodeName()}-${ctrl.getCodeName()}-${item.getName()}',
<#if item.getCapPSLanguageRes()??>
cappslanguageres: '${item.getCapPSLanguageRes().getLanResTag()}',
<#else>
cappslanguageres: '',
</#if>
<#if item.getPSAppMenuItems()??> <#if item.getPSAppMenuItems()??>
items: [ items: [
<#list item.getPSAppMenuItems() as child> <#list item.getPSAppMenuItems() as child>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<img :src="item.iconcls" v-else-if="!Object.is(item.iconcls, '')"/> <img :src="item.iconcls" v-else-if="!Object.is(item.iconcls, '')"/>
<i class='fa fa-cogs' v-else></i> <i class='fa fa-cogs' v-else></i>
</span> </span>
<span>{{$t(item.cappslanguageres, item.text)}}</span> <span>{{$t('app.menus.${ctrl.codeName?lower_case}.' + item.name)}}</span>
<span class="line"></span> <span class="line"></span>
</p> </p>
<p style=" display: 'flex' "> <p style=" display: 'flex' ">
......
// 基于 @CONTROL/应用菜单(快捷菜单)/CONTROL.scss.ftl 生成 // 基于 @CONTROL/应用菜单(快捷菜单)/CONTROL.less.ftl 生成
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
/*** BEGIN:potal菜单 ***/ /*** BEGIN:potal菜单 ***/
.app-quick-menus{ .app-quick-menus{
......
...@@ -2,26 +2,57 @@ ...@@ -2,26 +2,57 @@
<#if ctrl.render??> <#if ctrl.render??>
${ctrl.render.code} ${ctrl.render.code}
<#else> <#else>
<div class="<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if>"> <div class="app-searchbar<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if>">
<app-searchbar :items="filterItems" :fields="filterFields"> <div v-if="filterFields.length > 0" class="filter-group">
<template slot-scope="{ data }"> <filter-tree :datas="filterItems" :fields="filterFields">
<#if ctrl.getPSSearchBarFilters()??> <template slot-scope="{ data }">
<#list ctrl.getPSSearchBarFilters() as filter> <#if ctrl.getPSSearchBarFilters()??>
<template v-if="Object.is(data.editor, '${filter.getName()}')"> <#list ctrl.getPSSearchBarFilters() as filter>
${P.getEditorCode(filter, "EDITOR.vue").code} <template v-if="Object.is(data.editor, '${filter.getName()}')">
${P.getEditorCode(filter, "EDITOR.vue").code}
</template>
</#list>
</#if>
</template> </template>
</#list> </filter-tree>
</#if> </div>
</template> <div class="search-bar-footer">
</app-searchbar> <#-- <#if !view.isEnableQuickSearch() && ctrl.getQuickSearchMode() gt 0>
<i-input v-model="query" placeholder="<#if ctrl.getPSSearchBarQuickSearchs()??><#list ctrl.getPSSearchBarQuickSearchs() as search><#if search_index gt 0>,</#if><#if search.getPSDEField()??>${search.getPSDEField().getLogicName()}</#if></#list></#if>" style="<#if ctrl.getQuickSearchWidth() gt 0>width: ${ctrl.getQuickSearchWidth()?c}px;</#if>"></i-input>
</#if> -->
<div class="search-bar-action">
<el-select size="small" v-if="historyItems.length > 0" v-model="selectItem" @change="onFilterChange">
<el-option v-for="item in historyItems" :key="item.value" :label="item.name" :value="item.value"></el-option>
</el-select>
<i-button type="primary" @click="onSearch">{{ $t('app.searchButton.search') }}</i-button>
<i-button @click="onReset">{{ $t('app.searchButton.reset') }}</i-button>
<Poptip ref="propip" trigger="hover" placement="top-end" :title="$t('app.searchForm.custom')" :width="250" @on-popper-show="openPoper">
<i-button><i class="fa fa-floppy-o" aria-hidden="true"></i></i-button>
<template slot="content">
<div>
<i-input v-model="saveItemName" :placeholder="$t('app.searchForm.title')"></i-input>
<div class="save-action">
<i-button @click="onCancel">{{ $t('app.commonWords.cancel') }}</i-button>
<i-button type="primary" @click="onOk">{{ $t('app.commonWords.save') }}</i-button>
</div>
</div>
</template>
</Poptip>
</div>
</div>
</div> </div>
</#if> </#if>
</template> </template>
// 基于 @CONTROL/搜索栏/CONTROL-BASE.vue.ftl 生成 // 基于 @CONTROL/搜索栏/CONTROL-BASE.vue.ftl 生成
<#assign import_block> <#assign import_block>
import FilterTree from '@components/filter-tree/filter-tree.vue';
import moment from 'moment'; import moment from 'moment';
</#assign> </#assign>
<#assign component_block>
FilterTree,
</#assign>
<#ibizinclude> <#ibizinclude>
../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl ../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl
</#ibizinclude> </#ibizinclude>
...@@ -139,13 +170,15 @@ import moment from 'moment'; ...@@ -139,13 +170,15 @@ import moment from 'moment';
* @memberof ${srfclassname('${ctrl.codeName}')}Base * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public getData(): any { public getData(): any {
let data: any = {};
<#-- if(!Object.is(this.query, '')) { <#-- if(!Object.is(this.query, '')) {
Object.assign(data, { query: this.query }) Object.assign(data, { query: this.query })
} --> } -->
if(this.filterFields.length > 0) { if(this.filterFields.length > 0) {
let filter: any = this.getFilter(); let filter: any = this.getFilter();
return filter; Object.assign(data, { filter: filter ? JSON.stringify(filter) : null })
} }
return data;
} }
/** /**
...@@ -158,11 +191,37 @@ import moment from 'moment'; ...@@ -158,11 +191,37 @@ import moment from 'moment';
if(this.filterItems.length === 0) { if(this.filterItems.length === 0) {
return null; return null;
} }
let params: any = this.transformAnd(this.filterItems); let ands: any[] = this.transformAnd(this.filterItems);
if(Object.keys(params).length === 0) { this.transformResult(ands, '$and');
if(ands.length === 0) {
return null; return null;
} }
return params; return { '$and': ands };
}
/**
* 处理结果集
*
* @return {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public transformResult(datas: any[], pName: string) {
let items: any[] = [];
for(let i = datas.length - 1; i >= 0; i--) {
let data: any = datas[i];
let field: string = Object.is(pName, '$and') ? '$or' : '$and';
if(data.hasOwnProperty(field)) {
items.push(data);
datas.splice(i, 1);
this.transformResult(data[field], field);
}
}
if(items.length > 0) {
let item: any = {};
item[pName] = items;
datas.push(item);
}
} }
/** /**
...@@ -172,12 +231,47 @@ import moment from 'moment'; ...@@ -172,12 +231,47 @@ import moment from 'moment';
* @memberof ${srfclassname('${ctrl.codeName}')}Base * @memberof ${srfclassname('${ctrl.codeName}')}Base
*/ */
public transformAnd(datas: any[]): any { public transformAnd(datas: any[]): any {
let result: any = {}; let result: any[] = [];
datas.forEach((data: any) => { datas.forEach((data: any) => {
let item: any = {};
if(data.field && data.mode) { if(data.field && data.mode) {
item[data.field] = {};
let valField: string = data.editor ? data.editor : data.field; let valField: string = data.editor ? data.editor : data.field;
<#noparse>Object.assign(result, {[`n_${data.field}_${data.mode}`]: data[valField]});</#noparse> item[data.field][data.mode] = (data[valField] == null ? '' : data[valField]);
} result.push(item)
} else if(Object.is(data.label, '$and')) {
let items: any[] = this.transformAnd(data.children);
result = [...result, ...items];
} else if(Object.is(data.label, '$or')) {
item[data.label] = this.transformOr(data.children);
result.push(item)
}
})
return result;
}
/**
* 处理或逻辑
*
* @return {*}
* @memberof ${srfclassname('${ctrl.codeName}')}Base
*/
public transformOr(datas: any[]) {
let result: any[] = [];
datas.forEach((data: any) => {
let item: any = {};
if(data.field && data.mode) {
item[data.field] = {};
let valField: string = data.editor ? data.editor : data.field;
item[data.field][data.mode] = (data[valField] == null ? '' : data[valField]);
result.push(item);
} else if(Object.is(data.label, '$and')) {
item[data.label] = this.transformAnd(data.children);
result.push(item)
} else if(Object.is(data.label, '$or')) {
item[data.label] = this.transformOr(data.children);
result.push(item);
}
}) })
return result; return result;
} }
...@@ -331,4 +425,8 @@ import moment from 'moment'; ...@@ -331,4 +425,8 @@ import moment from 'moment';
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl ../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/CONTROL/CONTROL-BASE.style.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/搜索栏/CONTROL.less.ftl 生成
.search-bar-footer {
height: 32px;
margin-bottom: 6px;
.search-bar-action {
float: right;
display: flex;
align-items: center;
> * {
margin-left: 5px;
.save-action {
text-align: right;
margin-top: 10px;
> * {
margin-left: 5px;
}
}
}
}
}
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
<#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl
</#ibizinclude>
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#if item.render??> <#if item.render??>
${item.render.code} ${item.render.code}
...@@ -7,6 +7,6 @@ ${item.render.code} ...@@ -7,6 +7,6 @@ ${item.render.code}
<i-button type="primary" @click="${item.getName()}_click($event)"<#if item.getPSSysCss?? && item.getPSSysCss()??> class="${item.getPSSysCss().getCssName()}"</#if> <i-button type="primary" @click="${item.getName()}_click($event)"<#if item.getPSSysCss?? && item.getPSSysCss()??> class="${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>"> 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></#if>
<#if item.isShowCaption()><span ><#if item.getCaptionItemName()?? && item.getCaptionItemName()?length gt 0>{{data.${item.getCaptionItemName()}}}<#else><@getItemLanguageCaption item /></#if></span></#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> </i-button>
</#if> </#if>
\ No newline at end of file
<#if !item.isHidden()> <#if !item.isHidden()>
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#if item.render??> <#if item.render??>
${item.render.code} ${item.render.code}
<#else> <#else>
<app-form-item name='${item.name}' :itemRules="this.rules.${item.name}" class='<#if item.getPSSysCss?? && item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if>'<#if item.getLabelPSSysCss?? && item.getLabelPSSysCss()??> labelStyle="${item.getLabelPSSysCss().getCssName()}"</#if> :caption="<@getItemLanguageCaption item />" uiStyle="${item.getDetailStyle()}" :labelWidth="${item.getLabelWidth()?c}" :isShowCaption="${item.isShowCaption()?c}" :error="detailsModel.${item.name}.error" :isEmptyCaption="${item.isEmptyCaption()?c}" labelPos="${item.getLabelPos()}"> <app-form-item name='${item.name}' :itemRules="this.rules.${item.name}" class='<#if item.getPSSysCss?? && item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if>'<#if item.getLabelPSSysCss?? && item.getLabelPSSysCss()??> labelStyle="${item.getLabelPSSysCss().getCssName()}"</#if> :caption="<#if langbase??>$t('${langbase}.details.${item.name}')<#else>'${item.getCaption()}'</#if>" uiStyle="${item.getDetailStyle()}" :labelWidth="${item.getLabelWidth()?c}" :isShowCaption="${item.isShowCaption()?c}" :error="detailsModel.${item.name}.error" :isEmptyCaption="${item.isEmptyCaption()?c}" labelPos="${item.getLabelPos()}">
<#if item.isCompositeItem()> <#if item.isCompositeItem()>
<#assign formitems=item.getPSDEFormItems()> <#assign formitems=item.getPSDEFormItems()>
<app-range-editor v-model="data.${item.name}" :activeData="data" :disabled="detailsModel.${item.name}.disabled" name="${item.name}" editorType="${item.getEditorType()}" format="${item.getEditorParam("TIMEFMT","")}" :refFormItem="[<#list formitems as formitem><#if formitem_index gt 0>,</#if>'${formitem.name}'</#list>]" @formitemvaluechange="onFormItemValueChange" style="${item.getEditorCssStyle()}"></app-range-editor> <app-range-editor v-model="data.${item.name}" :activeData="data" :disabled="detailsModel.${item.name}.disabled" name="${item.name}" editorType="${item.getEditorType()}" format="${item.getEditorParam("TIMEFMT","")}" :refFormItem="[<#list formitems as formitem><#if formitem_index gt 0>,</#if>'${formitem.name}'</#list>]" @formitemvaluechange="onFormItemValueChange" style="${item.getEditorCssStyle()}"></app-range-editor>
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#if item.render??> <#if item.render??>
${item.render.code} ${item.render.code}
<#else> <#else>
<app-form-group layoutType="<#if item.getPSLayoutPos()??>${item.getPSLayoutPos().getLayout()}</#if>" titleStyle="<#if item.getLabelPSSysCss?? && item.getLabelPSSysCss()??>${item.getLabelPSSysCss().getCssName()}</#if>" class='<#if item.getPSSysCss?? && item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>' uiActionGroup="detailsModel.${item.name}.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="<@getItemLanguageCaption item />" :isShowCaption="${item.isShowCaption()?c}" uiStyle="${item.getDetailStyle()}" :titleBarCloseMode="${item.getTitleBarCloseMode()}" :isInfoGroupMode="${item.isInfoGroupMode()?c}"> <app-form-group layoutType="<#if item.getPSLayoutPos()??>${item.getPSLayoutPos().getLayout()}</#if>" titleStyle="<#if item.getLabelPSSysCss?? && item.getLabelPSSysCss()??>${item.getLabelPSSysCss().getCssName()}</#if>" class='<#if item.getPSSysCss?? && item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>' uiActionGroup="detailsModel.${item.name}.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="<#if langbase??>$t('${langbase}.details.${item.name}')<#else>'${item.getCaption()}'</#if>" :isShowCaption="${item.isShowCaption()?c}" uiStyle="${item.getDetailStyle()}" :titleBarCloseMode="${item.getTitleBarCloseMode()}" :isInfoGroupMode="${item.isInfoGroupMode()?c}">
<#assign content> <#assign content>
<#list item.getPSDEFormDetails() as formmenber> <#list item.getPSDEFormDetails() as formmenber>
<#if !(formmenber.isHidden?? && formmenber.isHidden())> <#if !(formmenber.isHidden?? && formmenber.isHidden())>
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#assign detail>caption: '${item.getCaption()}', detailType: '${item.getDetailType()}', name: '${item.getName()}', visible: <#if item.getPSDEFDGroupLogic('PANELVISIBLE')??>false<#else>true</#if>, isShowCaption: ${item.isShowCaption()?c}, form: this</#assign> <#assign detail>caption: '${item.getCaption()}', detailType: '${item.getDetailType()}', name: '${item.getName()}', visible: <#if item.getPSDEFDGroupLogic('PANELVISIBLE')??>false<#else>true</#if>, isShowCaption: ${item.isShowCaption()?c}, form: this</#assign>
<#if item.getDetailType() == 'BUTTON'> <#if item.getDetailType() == 'BUTTON'>
...@@ -14,7 +14,7 @@ new FormPageModel({ ${detail} }) ...@@ -14,7 +14,7 @@ new FormPageModel({ ${detail} })
<#elseif item.getDetailType() == 'FORMPART'> <#elseif item.getDetailType() == 'FORMPART'>
new FormPartModel({ ${detail} }) new FormPartModel({ ${detail} })
<#elseif item.getDetailType() == 'GROUPPANEL'> <#elseif item.getDetailType() == 'GROUPPANEL'>
new FormGroupPanelModel({ ${detail}, uiActionGroup: { caption: '<#if item.getPSUIActionGroup()??>${item.getPSUIActionGroup().getName()}</#if>', langbase: '<#if item.getCapPSLanguageRes?? && item.getCapPSLanguageRes()??>${item.getCapPSLanguageRes().getLanResTag()}</#if>', extractMode: '<#if item.getActionGroupExtractMode?? && item.getActionGroupExtractMode()??>${item.getActionGroupExtractMode()}<#else>ITEM</#if>', details: [<#if item.getPSUIActionGroup()??><#list item.getPSUIActionGroup().getPSUIActionGroupDetails() as uadetails><#if uadetails_index gt 0>, </#if>{ name: '${item.getName()}_${uadetails.getName()}', caption: '${uadetails.getPSUIAction().getCaption()}',<#if uadetails.getPSUIAction().getCapPSLanguageRes?? && uadetails.getPSUIAction().getCapPSLanguageRes()??>captionLanbase: '${uadetails.getPSUIAction().getCapPSLanguageRes().getLanResTag()}',</#if> uiactiontag: '${uadetails.getPSUIAction().getUIActionTag()?lower_case}'<#if uadetails.getPSUIAction().getPSSysImage()??>, <#assign viewimg=uadetails.getPSUIAction().getPSSysImage()/><#if viewimg.getCssClass() != ''>icon: '${viewimg.getCssClass()}'<#else>img: '${viewimg.getImagePath()}'</#if></#if> }</#list></#if>] } }) new FormGroupPanelModel({ ${detail}, uiActionGroup: { caption: '<#if item.getPSUIActionGroup()??>${item.getPSUIActionGroup().getName()}</#if>', langbase: '<#if langbase??>${langbase}</#if>', extractMode: '<#if item.getActionGroupExtractMode?? && item.getActionGroupExtractMode()??>${item.getActionGroupExtractMode()}<#else>ITEM</#if>', details: [<#if item.getPSUIActionGroup()??><#list item.getPSUIActionGroup().getPSUIActionGroupDetails() as uadetails><#if uadetails_index gt 0>, </#if>{ name: '${item.getName()}_${uadetails.getName()}', caption: '${uadetails.getPSUIAction().getCaption()}', uiactiontag: '${uadetails.getPSUIAction().getUIActionTag()?lower_case}'<#if uadetails.getPSUIAction().getPSSysImage()??>, <#assign viewimg=uadetails.getPSUIAction().getPSSysImage()/><#if viewimg.getCssClass() != ''>icon: '${viewimg.getCssClass()}'<#else>img: '${viewimg.getImagePath()}'</#if></#if> }</#list></#if>] } })
<#elseif item.getDetailType() == 'IFRAME'> <#elseif item.getDetailType() == 'IFRAME'>
new FormIFrameModel({ ${detail} }) new FormIFrameModel({ ${detail} })
<#elseif item.getDetailType() == 'RAWITEM'> <#elseif item.getDetailType() == 'RAWITEM'>
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<tabs :animated="false" name='${item.getCodeName()?lower_case}' v-show="detailsModel.${item.name}.visible" class='<#if item.getPSSysCss?? && item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if><#if item.getPSLayoutPos()?? && item.getPSLayoutPos().getLayout() == "FLEX"> app-tabpanel-flex</#if>' <tabs :animated="false" name='${item.getCodeName()?lower_case}' v-show="detailsModel.${item.name}.visible" class='<#if item.getPSSysCss?? && item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if><#if item.getPSLayoutPos()?? && item.getPSLayoutPos().getLayout() == "FLEX"> app-tabpanel-flex</#if>'
:value="detailsModel.${item.name}.activiedPage" @on-click="detailsModel.${item.name}.clickPage($event)"> :value="detailsModel.${item.name}.activiedPage" @on-click="detailsModel.${item.name}.clickPage($event)">
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
}), }),
</#if> </#if>
</#if> </#if>
<@getItemLanguageCaption formmenber /> <#if langbase??>$t('${langbase}.details.${formmenber.name}')<#else>'${formmenber.getCaption()}'</#if>
]) ])
}"> }">
${P.getPartCode(formmenber).code} ${P.getPartCode(formmenber).code}
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#if ctrl.render??> <#if ctrl.render??>
${ctrl.render.code} ${ctrl.render.code}
...@@ -42,7 +42,7 @@ ${ctrl.render.code} ...@@ -42,7 +42,7 @@ ${ctrl.render.code}
}), }),
</#if> </#if>
</#if> </#if>
<@getItemLanguageCaption formpage /> <#if langbase??>$t('${langbase}.details.${formpage.name}')<#else>'${formpage.getCaption()}'</#if>
]) ])
}"> }">
${P.getPartCode(formpage).code} ${P.getPartCode(formpage).code}
......
// 基于 @CONTROL/搜索表单/CONTROL.scss.ftl 生成 // 基于 @CONTROL/搜索表单/CONTROL.less.ftl 生成
.ivu-tabs-no-animation>.ivu-tabs-content{ .ivu-tabs-no-animation>.ivu-tabs-content{
padding: 0 16px; padding: 0 16px;
} }
...@@ -46,5 +46,5 @@ ...@@ -46,5 +46,5 @@
} }
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/数据关系分页部件/CONTROL.scss.ftl 生成 // 基于 @CONTROL/数据关系分页部件/CONTROL.less.ftl 生成
.app-dr-tab { .app-dr-tab {
.dr-tab-item { .dr-tab-item {
cursor: pointer; cursor: pointer;
...@@ -22,5 +22,5 @@ ...@@ -22,5 +22,5 @@
} }
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/数据关系栏/CONTROL.scss.ftl 生成 // 基于 @CONTROL/数据关系栏/CONTROL.less.ftl 生成
.app-dr-bar { .app-dr-bar {
height: 100%; height: 100%;
width: 100%; width: 100%;
...@@ -68,5 +68,5 @@ ...@@ -68,5 +68,5 @@
} }
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<template> <template>
<#if ctrl.render??> <#if ctrl.render??>
${ctrl.render.code} ${ctrl.render.code}
<#else> <#else>
<div class="app-data-chart<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>"> <div class="app-data-chart<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>">
<div v-show="isNoData" class="chart-no-data"><i class="el-icon-data-analysis"></i>{{<@getEmptyTextLanguage ctrl/>}}</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()?? && 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 v-show="!isNoData" class="app-charts" :id="chartId" style="<#if ctrl.getWidth()?? && 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> </div>
</#if> </#if>
......
// 基于 @CONTROL/数据图表 (新)/CONTROL.scss.ftl 生成 // 基于 @CONTROL/数据图表 (新)/CONTROL.less.ftl 生成
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
.app-data-chart { .app-data-chart {
width: 100%; width: 100%;
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<template> <template>
<#if ctrl.render??> <#if ctrl.render??>
${ctrl.render.code} ${ctrl.render.code}
<#else> <#else>
<div class="app-data-chart<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>"> <div class="app-data-chart<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>">
<div v-show="isNoData" class="chart-no-data"><i class="el-icon-data-analysis"></i>{{<@getEmptyTextLanguage ctrl/>}}</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()?? && 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 v-show="!isNoData" class="app-charts" :id="chartId" style="<#if ctrl.getWidth()?? && 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> </div>
</#if> </#if>
......
// 基于 @CONTROL/数据图表/CONTROL.scss.ftl 生成 // 基于 @CONTROL/数据图表/CONTROL.less.ftl 生成
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
.app-data-chart { .app-data-chart {
width: 100%; width: 100%;
......
// 基于 @CONTROL/数据看板/CONTROL.scss.ftl 生成 // 基于 @CONTROL/数据看板/CONTROL.less.ftl 生成
.dashboard { .dashboard {
flex-grow: 1; flex-grow: 1;
height: 100%; height: 100%;
...@@ -26,5 +26,5 @@ ...@@ -26,5 +26,5 @@
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<template> <template>
<#if ctrl.render??><#t> <#if ctrl.render??><#t>
...@@ -98,7 +98,7 @@ ...@@ -98,7 +98,7 @@
</a> </a>
</div> </div>
<div v-else class="item-nodata"> <div v-else class="item-nodata">
{{ <@getEmptyTextLanguage ctrl/>}} {{ $t('<#if langbase??>${langbase}.nodata</#if>') }}
</div> </div>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
...@@ -120,7 +120,7 @@ ...@@ -120,7 +120,7 @@
</#if> </#if>
</row> </row>
<div v-show="items.length == 0" class="app-data-empty"> <div v-show="items.length == 0" class="app-data-empty">
{{ <@getEmptyTextLanguage ctrl/>}} {{ $t('<#if langbase??>${langbase}.nodata</#if>') }}
<#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??> <#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??>
<span class="quick-toolbar"> <span class="quick-toolbar">
<#assign quickToolbar = ctrl.getQuickPSDEToolbar()/> <#assign quickToolbar = ctrl.getQuickPSDEToolbar()/>
...@@ -570,13 +570,7 @@ import CodeListService from "@/codelist/codelist-service"; ...@@ -570,13 +570,7 @@ import CodeListService from "@/codelist/codelist-service";
<#list ctrl.getPSDEDataViewDataItems() as dataItem> <#list ctrl.getPSDEDataViewDataItems() as dataItem>
<#if dataItem.getPSAppDEField?? && dataItem.getPSAppDEField()?? && !dataItem.getPSAppDEField().isKeyField()> <#if dataItem.getPSAppDEField?? && dataItem.getPSAppDEField()?? && !dataItem.getPSAppDEField().isKeyField()>
<#if !P.exists("sort", dataItem.getPSDEField().getCodeName(), "") > <#if !P.exists("sort", dataItem.getPSDEField().getCodeName(), "") >
{ '${dataItem.getPSDEField().getCodeName()?lower_case}'<#if dataItem_has_next>,</#if>
codeName: '${dataItem.getPSDEField().getCodeName()?lower_case}',
logicName: '${dataItem.getPSDEField().getLogicName()}',
<#if dataItem.getPSDEField().getLNPSLanguageRes?? && dataItem.getPSDEField().getLNPSLanguageRes()??>
logicNameLenRes: '${dataItem.getPSDEField().getLNPSLanguageRes().getLanResTag()}'
</#if>
}<#if dataItem_has_next>,</#if>
</#if> </#if>
</#if> </#if>
</#list> </#list>
......
// 基于 @CONTROL/数据视图/CONTROL.scss.ftl 生成 // 基于 @CONTROL/数据视图/CONTROL.less.ftl 生成
<#assign hasSortBar = false /> <#assign hasSortBar = false />
<#if ctrl.getPSDEDataViewDataItems?? && ctrl.getPSDEDataViewDataItems()??> <#if ctrl.getPSDEDataViewDataItems?? && ctrl.getPSDEDataViewDataItems()??>
<#list ctrl.getPSDEDataViewDataItems() as dataItem> <#list ctrl.getPSDEDataViewDataItems() as dataItem>
...@@ -207,5 +207,5 @@ ...@@ -207,5 +207,5 @@
</#if> </#if>
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/日历导航/CONTROL.scss.ftl 生成 // 基于 @CONTROL/日历导航/CONTROL.less.ftl 生成
.app-calendar-exp-bar { .app-calendar-exp-bar {
height: 100%; height: 100%;
display: flex; display: flex;
...@@ -46,5 +46,5 @@ ...@@ -46,5 +46,5 @@
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../../@MACRO/LANG_FUN.ftl
</#ibizinclude> </#ibizinclude>
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude>
<template> <template>
<#if ctrl.render??> <#if ctrl.render??>
${ctrl.render.code} ${ctrl.render.code}
...@@ -40,7 +43,7 @@ ${ctrl.render.code} ...@@ -40,7 +43,7 @@ ${ctrl.render.code}
</el-timeline> </el-timeline>
</template> </template>
<template v-else> <template v-else>
<span class="app-data-empty">{{ <@getEmptyTextLanguage ctrl/>}}</span> <span class="app-data-empty">{{ $t('<#if langbase??>${langbase}.nodata</#if>') }}</span>
<#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??> <#if ctrl.getQuickPSDEToolbar?? && ctrl.getQuickPSDEToolbar()??>
<span class="quick-toolbar"> <span class="quick-toolbar">
<#assign quickToolbar = ctrl.getQuickPSDEToolbar()/> <#assign quickToolbar = ctrl.getQuickPSDEToolbar()/>
......
// 基于 @CONTROL/日历部件/CONTROL.scss.ftl 生成 // 基于 @CONTROL/日历部件/CONTROL.less.ftl 生成
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
@import '~@fullcalendar/core/main.css'; @import '~@fullcalendar/core/main.css';
@import '~@fullcalendar/daygrid/main.css'; @import '~@fullcalendar/daygrid/main.css';
......
<#ibizinclude> <#ibizinclude>
../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../../@MACRO/LANG_FUN.ftl
</#ibizinclude> </#ibizinclude>
<template> <template>
...@@ -19,7 +22,7 @@ ...@@ -19,7 +22,7 @@
@current-change="select" @current-change="select"
> >
<template slot="empty"> <template slot="empty">
{{<@getEmptyTextLanguage ctrl/>}} {{$t('<#if langbase??>${langbase}.nodata</#if>')}}
</template> </template>
<#if ctrl.getPSDETreeColumns()??> <#if ctrl.getPSDETreeColumns()??>
<#list ctrl.getPSDETreeColumns() as column> <#list ctrl.getPSDETreeColumns() as column>
......
// 基于 @CONTROL/树表格(增强)/CONTROL.scss.ftl 生成 // 基于 @CONTROL/树表格(增强)/CONTROL.less.ftl 生成
.gantt { .gantt {
height: 100%; height: 100%;
.gantt-elastic__main-view-container { .gantt-elastic__main-view-container {
...@@ -6,5 +6,5 @@ ...@@ -6,5 +6,5 @@
} }
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/树表格(增强)/SERVICE.ts.ftl 生成 // 基于 @CONTROL/树表格(增强)/SERVICE.ts.ftl 生成
<#ibizinclude>
../../@MACRO/LANG_FUN.ftl
</#ibizinclude>
<#assign import_block> <#assign import_block>
import CodeListService from "@/codelist/codelist-service"; import CodeListService from "@/codelist/codelist-service";
import i18n from '@/locale'; import i18n from '@/locale';
...@@ -255,11 +252,11 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -255,11 +252,11 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
return new Promise((resolve:any,reject:any) =>{ return new Promise((resolve:any,reject:any) =>{
<#if node.getTreeNodeType() == 'STATIC'> <#if node.getTreeNodeType() == 'STATIC'>
let treeNode: any = {}; let treeNode: any = {};
Object.assign(treeNode, { text: <@getNameLanguage node /> }); Object.assign(treeNode, { text: 'entities.${appde.getCodeName()?lower_case}.${ctrl.getCodeName()?lower_case}_${ctrl.getControlType()?lower_case}.nodes.${node.getNodeType()?lower_case}' });
Object.assign(treeNode, { isUseLangRes: true }); Object.assign(treeNode, { isUseLangRes: true });
<#if node.isEnableQuickSearch()> <#if node.isEnableQuickSearch()>
if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){ if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){
if((treeNode.text).toUpperCase().indexOf(filter.getSrfnodefilter().toUpperCase())==-1) if((i18n.t(treeNode.text) as string).toUpperCase().indexOf(filter.getSrfnodefilter().toUpperCase())==-1)
return Promise.reject(); return Promise.reject();
} }
</#if> </#if>
...@@ -345,7 +342,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -345,7 +342,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
const handleChildData = (context:any,item:any,) =>{ const handleChildData = (context:any,item:any,) =>{
Object.assign(item,{srfappctx:context}); Object.assign(item,{srfappctx:context});
<#if node.getPSCodeList().getCodeListType() == 'STATIC'> <#if node.getPSCodeList().getCodeListType() == 'STATIC'>
Object.assign(item, { text: <@getNameLanguage node /> }); Object.assign(item, { text: 'codelist.${node.getPSCodeList().codeName}.'+item.value });
Object.assign(item, { isUseLangRes: true }); Object.assign(item, { isUseLangRes: true });
<#else> <#else>
Object.assign(item, { text: item.text }); Object.assign(item, { text: item.text });
...@@ -396,14 +393,14 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -396,14 +393,14 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
let treeNode: any = {}; let treeNode: any = {};
Object.assign(treeNode,{srfappctx:context}); Object.assign(treeNode,{srfappctx:context});
<#if node.getPSCodeList().getCodeListType() == 'STATIC'> <#if node.getPSCodeList().getCodeListType() == 'STATIC'>
Object.assign(treeNode, { text: <@getNameLanguage node /> }); Object.assign(treeNode, { text: 'codelist.${node.getPSCodeList().codeName}.'+item.value });
Object.assign(treeNode, { isUseLangRes: true }); Object.assign(treeNode, { isUseLangRes: true });
<#else> <#else>
Object.assign(treeNode, { text: item.text }); Object.assign(treeNode, { text: item.text });
</#if> </#if>
<#if node.isEnableQuickSearch()> <#if node.isEnableQuickSearch()>
if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){ if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){
if((treeNode.text).toUpperCase().indexOf(filter.getSrfnodefilter().toUpperCase())==-1) if((i18n.t(treeNode.text) as string).toUpperCase().indexOf(filter.getSrfnodefilter().toUpperCase())==-1)
return; return;
} }
</#if> </#if>
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<template> <template>
<#if ctrl.render??> <#if ctrl.render??>
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
@check="onCheck" @check="onCheck"
@current-change="selectionChange" @current-change="selectionChange"
:filter-node-method="filterNode" :filter-node-method="filterNode"
:empty-text="<@getEmptyTextLanguage ctrl/>" :empty-text="$t('<#if langbase??>${langbase}.nodata</#if>')"
> >
<template slot-scope="{ node, data }"> <template slot-scope="{ node, data }">
<context-menu :ref='data.id' :isBlocked="true" :contextMenuStyle="{width: '100%'}" :data="node" :renderContent="renderContextMenu" @showContext="showContext(data,$event)"> <context-menu :ref='data.id' :isBlocked="true" :contextMenuStyle="{width: '100%'}" :data="node" :renderContent="renderContextMenu" @showContext="showContext(data,$event)">
......
// 基于 @CONTROL/树视图/CONTROL.scss.ftl 生成 // 基于 @CONTROL/树视图/CONTROL.less.ftl 生成
.tree-right-menu { .tree-right-menu {
.ivu-divider-horizontal { .ivu-divider-horizontal {
width: 100%; width: 100%;
...@@ -35,5 +35,5 @@ ...@@ -35,5 +35,5 @@
} }
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/树视图/SERVICE.ts.ftl 生成 // 基于 @CONTROL/树视图/SERVICE.ts.ftl 生成
<#ibizinclude>
../../@MACRO/LANG_FUN.ftl
</#ibizinclude>
<#assign import_block> <#assign import_block>
import CodeListService from "@/codelist/codelist-service"; import CodeListService from "@/codelist/codelist-service";
import i18n from '@/locale'; import i18n from '@/locale';
...@@ -224,11 +221,11 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -224,11 +221,11 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
return new Promise((resolve:any,reject:any) =>{ return new Promise((resolve:any,reject:any) =>{
<#if node.getTreeNodeType() == 'STATIC'> <#if node.getTreeNodeType() == 'STATIC'>
let treeNode: any = {}; let treeNode: any = {};
Object.assign(treeNode, { text: <@getNameLanguage node /> }); Object.assign(treeNode, { text: i18n.t('entities.${appde.getCodeName()?lower_case}.${ctrl.getCodeName()?lower_case}_${ctrl.getControlType()?lower_case}.nodes.${node.getNodeType()?lower_case}') });
Object.assign(treeNode, { isUseLangRes: true }); Object.assign(treeNode, { isUseLangRes: true });
<#if node.isEnableQuickSearch()> <#if node.isEnableQuickSearch()>
if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){ if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){
if((treeNode.text).toUpperCase().indexOf(filter.srfnodefilter.toUpperCase())==-1) if((i18n.t(treeNode.text) as string).toUpperCase().indexOf(filter.srfnodefilter.toUpperCase())==-1)
return resolve(list); return resolve(list);
} }
</#if> </#if>
...@@ -311,7 +308,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -311,7 +308,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
const handleChildData = (context:any,item:any,) =>{ const handleChildData = (context:any,item:any,) =>{
Object.assign(item,{srfappctx:context}); Object.assign(item,{srfappctx:context});
<#if node.getPSCodeList().getCodeListType() == 'STATIC'> <#if node.getPSCodeList().getCodeListType() == 'STATIC'>
Object.assign(item, { text: <@getNameLanguage node /> }); Object.assign(item, { text: i18n.t('codelist.${node.getPSCodeList().codeName}.'+item.value) });
Object.assign(item, { isUseLangRes: true }); Object.assign(item, { isUseLangRes: true });
<#else> <#else>
Object.assign(item, { text: item.text }); Object.assign(item, { text: item.text });
...@@ -375,14 +372,14 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -375,14 +372,14 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
let treeNode: any = {}; let treeNode: any = {};
Object.assign(treeNode,{srfappctx:context}); Object.assign(treeNode,{srfappctx:context});
<#if node.getPSCodeList().getCodeListType() == 'STATIC'> <#if node.getPSCodeList().getCodeListType() == 'STATIC'>
Object.assign(treeNode, { text: <@getNameLanguage node /> }); Object.assign(treeNode, { text: i18n.t('codelist.${node.getPSCodeList().codeName}.'+item.value) });
Object.assign(treeNode, { isUseLangRes: true }); Object.assign(treeNode, { isUseLangRes: true });
<#else> <#else>
Object.assign(treeNode, { text: item.text }); Object.assign(treeNode, { text: item.text });
</#if> </#if>
<#if node.isEnableQuickSearch()> <#if node.isEnableQuickSearch()>
if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){ if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){
if((treeNode.text).toUpperCase().indexOf(filter.srfnodefilter.toUpperCase())==-1) if((i18n.t(treeNode.text) as string).toUpperCase().indexOf(filter.srfnodefilter.toUpperCase())==-1)
return; return;
} }
</#if> </#if>
......
// 基于 @CONTROL/树视图导航栏/CONTROL.scss.ftl 生成 // 基于 @CONTROL/树视图导航栏/CONTROL.less.ftl 生成
.app-tree-exp-bar { .app-tree-exp-bar {
height: 100%; height: 100%;
display: flex; display: flex;
...@@ -42,5 +42,5 @@ ...@@ -42,5 +42,5 @@
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/流程导航栏/CONTROL.scss.ftl 生成 // 基于 @CONTROL/流程导航栏/CONTROL.less.ftl 生成
.app-workflow-exp-bar { .app-workflow-exp-bar {
> .ivu-split-horizontal { > .ivu-split-horizontal {
> .ivu-split-trigger-con { > .ivu-split-trigger-con {
...@@ -57,5 +57,5 @@ ...@@ -57,5 +57,5 @@
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
...@@ -21,17 +21,17 @@ ...@@ -21,17 +21,17 @@
<div class="view-steps"> <div class="view-steps">
<div class="background-box"></div> <div class="background-box"></div>
<div class="steps_icon" @click="handleClick('PRE')"><i class="el-icon-arrow-left"></i></div> <div class="steps_icon" @click="handleClick('PRE')"><i class="el-icon-arrow-left"></i></div>
<steps class="wizard-steps" :current="(wizardForms.indexOf(activeForm) + 1)"> <el-steps class="wizard-steps" :active="(wizardForms.indexOf(activeForm) + 1)" finish-status="success" align-center>
<#list ctrl.getPSDEWizard().getPSDEWizardSteps() as step> <#list ctrl.getPSDEWizard().getPSDEWizardSteps() as step>
<step :class="{'app-active-step':activeForm==='<@getStepForm ctrlmodel=ctrl step=step />'?true:false}"> <el-step :class="{'app-active-step':activeForm==='<@getStepForm ctrlmodel=ctrl step=step />'?true:false}">
<template v-slot:title> <template v-slot:title>
<div v-popover:<@getStepForm ctrlmodel=ctrl step=step />_popover @click="hanleClick('<@getStepForm ctrlmodel=ctrl step=step />')"> <div v-popover:<@getStepForm ctrlmodel=ctrl step=step />_popover @click="hanleClick('<@getStepForm ctrlmodel=ctrl step=step />')">
<span><i v-if="activeForm != '<@getStepForm ctrlmodel=ctrl step=step />' && !historyForms.includes('<@getStepForm ctrlmodel=ctrl step=step />')" class="el-icon-lock"></i>${step.getTitle()}</span> <span><i v-if="activeForm != '<@getStepForm ctrlmodel=ctrl step=step />' && !historyForms.includes('<@getStepForm ctrlmodel=ctrl step=step />')" class="el-icon-lock"></i>${step.getTitle()}</span>
</div> </div>
</template> </template>
</step> </el-step>
</#list> </#list>
</steps> </el-steps>
<div class="steps_icon" @click="handleClick('NEXT')"><i class="el-icon-arrow-right"></i></div> <div class="steps_icon" @click="handleClick('NEXT')"><i class="el-icon-arrow-right"></i></div>
</div> </div>
<#if ctrl.getPSDEEditForms()??> <#if ctrl.getPSDEEditForms()??>
......
// 基于 @CONTROL/状态向导面板/CONTROL.scss.ftl 生成 // 基于 @CONTROL/状态向导面板/CONTROL.less.ftl 生成
.app-state-wizard { .app-state-wizard {
background: #fff; background: #fff;
.view-steps{ .view-steps{
...@@ -21,6 +21,49 @@ ...@@ -21,6 +21,49 @@
cursor: pointer; cursor: pointer;
} }
} }
.wizard-steps{
padding: 10px 20px 10px 70px;
margin-bottom: 10px;
width: 100%;
.steps-item-span{
padding: 7px 20px;
position: relative;
right: 20px;
}
.drawer-box-shadow{
box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);
}
.el-step__head.is-process{
border-color: #7e8187;
color: #7e8187;
}
.el-step__title.is-process{
color: #7e8187;
}
.el-step__head.is-success{
border-color: #1890ff;
color: #1890ff;
}
.el-step__title.is-success{
color: #1890ff;
}
.el-step__title:hover{
cursor: pointer;
}
.app-active-step{
.el-icon-check:before {
content: "";
width: 12px;
height: 12px;
border-radius: 8px;
background-color: #1890ff;
display: block;
}
}
}
.el-step__main{
background-color: rgb(239, 239, 239);
}
.background-box { .background-box {
height: 50px; height: 50px;
width: calc(100% - 40px); width: calc(100% - 40px);
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../../@MACRO/LANG_FUN.ftl
</#ibizinclude> </#ibizinclude>
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude>
<template> <template>
<#if ctrl.render??> <#if ctrl.render??>
${ctrl.render.code} ${ctrl.render.code}
...@@ -8,7 +11,7 @@ ...@@ -8,7 +11,7 @@
<div class="app-gantt"> <div class="app-gantt">
<gantt-elastic v-if="tasks.length >0" :class="ganttClass<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" :tasks="tasks" :options="getOptions(this.locale)" :dynamic-style="dynamicStyle" @taskList-item-dblclick="taskClick" @task-item-expand="taskItemExpand"> <gantt-elastic v-if="tasks.length >0" :class="ganttClass<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>" :tasks="tasks" :options="getOptions(this.locale)" :dynamic-style="dynamicStyle" @taskList-item-dblclick="taskClick" @task-item-expand="taskItemExpand">
</gantt-elastic> </gantt-elastic>
<div v-else class="app-data-empty">{{<@getEmptyTextLanguage ctrl/>}}</div> <div v-else class="app-data-empty">{{$t('<#if langbase??>${langbase}.nodata</#if>')}}</div>
</div> </div>
</#if> </#if>
</template> </template>
......
// 基于 @CONTROL/甘特图部件/CONTROL.scss.ftl 生成 // 基于 @CONTROL/甘特图部件/CONTROL.less.ftl 生成
.app-gantt{ .app-gantt{
height: 100%; height: 100%;
.gantt { .gantt {
...@@ -16,5 +16,5 @@ ...@@ -16,5 +16,5 @@
} }
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
// 基于 @CONTROL/甘特图部件/SERVICE.ts.ftl 生成 // 基于 @CONTROL/甘特图部件/SERVICE.ts.ftl 生成
<#ibizinclude>
../../@MACRO/LANG_FUN.ftl
</#ibizinclude>
<#assign import_block> <#assign import_block>
import CodeListService from "@/codelist/codelist-service"; import CodeListService from "@/codelist/codelist-service";
import i18n from '@/locale'; import i18n from '@/locale';
...@@ -255,11 +252,11 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -255,11 +252,11 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
return new Promise((resolve:any,reject:any) =>{ return new Promise((resolve:any,reject:any) =>{
<#if node.getTreeNodeType() == 'STATIC'> <#if node.getTreeNodeType() == 'STATIC'>
let treeNode: any = {}; let treeNode: any = {};
Object.assign(treeNode, { text: <@getNameLanguage node /> }); Object.assign(treeNode, { text: 'entities.${appde.getCodeName()?lower_case}.${ctrl.getCodeName()?lower_case}_${ctrl.getControlType()?lower_case}.nodes.${node.getNodeType()?lower_case}' });
Object.assign(treeNode, { isUseLangRes: true }); Object.assign(treeNode, { isUseLangRes: true });
<#if node.isEnableQuickSearch()> <#if node.isEnableQuickSearch()>
if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){ if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){
if((treeNode.text).toUpperCase().indexOf(filter.getSrfnodefilter().toUpperCase())==-1) if((i18n.t(treeNode.text) as string).toUpperCase().indexOf(filter.getSrfnodefilter().toUpperCase())==-1)
return Promise.reject(); return Promise.reject();
} }
</#if> </#if>
...@@ -345,7 +342,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -345,7 +342,7 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
const handleChildData = (context:any,item:any,) =>{ const handleChildData = (context:any,item:any,) =>{
Object.assign(item,{srfappctx:context}); Object.assign(item,{srfappctx:context});
<#if node.getPSCodeList().getCodeListType() == 'STATIC'> <#if node.getPSCodeList().getCodeListType() == 'STATIC'>
Object.assign(item, { text: <@getNameLanguage node /> }); Object.assign(item, { text: 'codelist.${node.getPSCodeList().codeName}.'+item.value });
Object.assign(item, { isUseLangRes: true }); Object.assign(item, { isUseLangRes: true });
<#else> <#else>
Object.assign(item, { text: item.text }); Object.assign(item, { text: item.text });
...@@ -396,14 +393,14 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se ...@@ -396,14 +393,14 @@ import ${srfclassname('${node.getPSAppDataEntity().codeName}')}Service from '@se
let treeNode: any = {}; let treeNode: any = {};
Object.assign(treeNode,{srfappctx:context}); Object.assign(treeNode,{srfappctx:context});
<#if node.getPSCodeList().getCodeListType() == 'STATIC'> <#if node.getPSCodeList().getCodeListType() == 'STATIC'>
Object.assign(treeNode, { text: <@getNameLanguage node /> }); Object.assign(treeNode, { text: 'codelist.${node.getPSCodeList().codeName}.'+item.value });
Object.assign(treeNode, { isUseLangRes: true }); Object.assign(treeNode, { isUseLangRes: true });
<#else> <#else>
Object.assign(treeNode, { text: item.text }); Object.assign(treeNode, { text: item.text });
</#if> </#if>
<#if node.isEnableQuickSearch()> <#if node.isEnableQuickSearch()>
if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){ if(filter.srfnodefilter && !Object.is(filter.srfnodefilter,"")){
if((treeNode.text).toUpperCase().indexOf(filter.getSrfnodefilter().toUpperCase())==-1) if((i18n.t(treeNode.text) as string).toUpperCase().indexOf(filter.getSrfnodefilter().toUpperCase())==-1)
return; return;
} }
</#if> </#if>
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<template> <template>
<#if ctrl.render??> <#if ctrl.render??>
...@@ -65,7 +65,7 @@ ${ctrl.render.code} ...@@ -65,7 +65,7 @@ ${ctrl.render.code}
</div> </div>
</draggable> </draggable>
<div v-else class="app-data-empty"> <div v-else class="app-data-empty">
<span>{{ <@getEmptyTextLanguage ctrl/>}}</span> <span>{{ $t('<#if langbase??>${langbase}.nodata</#if>') }}</span>
</div> </div>
</div> </div>
</#if> </#if>
......
// 基于 @CONTROL/看板视图/CONTROL.scss.ftl 生成 // 基于 @CONTROL/看板视图/CONTROL.less.ftl 生成
<#if ctrl.getGroupLayout?? && ctrl.getGroupLayout() == "COLUMN"> <#if ctrl.getGroupLayout?? && ctrl.getGroupLayout() == "COLUMN">
//从上往下 //从上往下
.app-data-view-group-column{ .app-data-view-group-column{
...@@ -226,5 +226,5 @@ ...@@ -226,5 +226,5 @@
} }
</#if> </#if>
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
<#ibizinclude>../@MACRO/FUNC/MACRO.ftl</#ibizinclude> <#ibizinclude>../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#if item.render??> <#if item.render??>
${item.render.code} ${item.render.code}
<#else> <#else>
<@badge item> <@badge item>
<app-button <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>"
type="primary" style="<#if item.getHeight() gt 0>height: ${item.getHeight()?c}px;</#if><#if item.getWidth() gt 0>width: ${item.getWidth()?c}px;</#if>">
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>"
:disabled="detailsModel.${item.getName()}.disabled"
<#if item.getPSSysImage()??> <#if item.getPSSysImage()??>
<#assign img=item.getPSSysImage()> <#assign img=item.getPSSysImage()>
<#if img.getCssClass()?? && (img.getCssClass()?length gt 0)> <#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>
iconClass="${img.getCssClass()}" <i class="${img.getCssClass()}" style="margin-right: 2px;"></i>
</#if> </#if>
<#else> <#else>
<#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSSysImage?? && item.getPSUIAction().getPSSysImage()??> <#if item.getPSUIAction?? && item.getPSUIAction()?? && item.getPSUIAction().getPSSysImage?? && item.getPSUIAction().getPSSysImage()??>
<#assign img=item.getPSUIAction().getPSSysImage()> <#assign img=item.getPSUIAction().getPSSysImage()>
<#if img.getCssClass()?? && (img.getCssClass()?length gt 0)> <#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>
iconClass="${img.getCssClass()}" <menu-icon :item="{iconcls: '${img.getCssClass()}'}" />
</#if> </#if>
</#if> </#if>
</#if> </#if>
<#if item.isShowCaption()> <#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>
<#if item.getCaptionItemName()?? && item.getCaptionItemName()?length gt 0> </i-button>
:caption="data.${item.getCaptionItemName()}"
<#else>
:caption="<@getItemLanguageCaption item />"
</#if>
</#if>
@click="${item.getName()}_click($event)"/>
</@badge> </@badge>
</#if> </#if>
\ No newline at end of file
<#if !item.isHidden()> <#if !item.isHidden()>
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#if item.render??> <#if item.render??>
${item.render.code} ${item.render.code}
<#else> <#else>
<app-form-item name='${item.name}' :itemRules="this.rules().${item.name}" class='<#if item.getPSSysCss?? && item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if>'<#if item.getLabelPSSysCss?? && item.getLabelPSSysCss()??> labelStyle="${item.getLabelPSSysCss().getCssName()}"</#if> :caption="<@getItemLanguageCaption item />" uiStyle="${item.getDetailStyle()}" :labelWidth="${item.getLabelWidth()?c}" :isShowCaption="${item.isShowCaption()?c}" :error="detailsModel.${item.name}.error" :isEmptyCaption="${item.isEmptyCaption()?c}" labelPos="${item.getLabelPos()}"> <app-form-item name='${item.name}' :itemRules="this.rules().${item.name}" class='<#if item.getPSSysCss?? && item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if>'<#if item.getLabelPSSysCss?? && item.getLabelPSSysCss()??> labelStyle="${item.getLabelPSSysCss().getCssName()}"</#if> :caption="<#if langbase??>$t('${langbase}.details.${item.name}')<#else>'${item.getCaption()}'</#if>" uiStyle="${item.getDetailStyle()}" :labelWidth="${item.getLabelWidth()?c}" :isShowCaption="${item.isShowCaption()?c}" :error="detailsModel.${item.name}.error" :isEmptyCaption="${item.isEmptyCaption()?c}" labelPos="${item.getLabelPos()}">
<#if item.isCompositeItem()> <#if item.isCompositeItem()>
<#assign formitems=item.getPSDEFormItems()> <#assign formitems=item.getPSDEFormItems()>
<app-range-editor v-model="data.${item.name}" :activeData="data" :disabled="detailsModel.${item.name}.disabled" name="${item.name}" editorType="${item.getEditorType()}" format="${item.getEditorParam("TIMEFMT","")}" :refFormItem="[<#list formitems as formitem><#if formitem_index gt 0>,</#if>'${formitem.name}'</#list>]" @formitemvaluechange="onFormItemValueChange" style="<#if item.getContentWidth()?? && item.getContentWidth() != 0>width:${item.getContentWidth()}px;</#if><#if item.getContentHeight()?? && item.getContentHeight() != 0>height:${item.getContentHeight()}px;</#if>"></app-range-editor> <app-range-editor v-model="data.${item.name}" :activeData="data" :disabled="detailsModel.${item.name}.disabled" name="${item.name}" editorType="${item.getEditorType()}" format="${item.getEditorParam("TIMEFMT","")}" :refFormItem="[<#list formitems as formitem><#if formitem_index gt 0>,</#if>'${formitem.name}'</#list>]" @formitemvaluechange="onFormItemValueChange" style="<#if item.getContentWidth()?? && item.getContentWidth() != 0>width:${item.getContentWidth()}px;</#if><#if item.getContentHeight()?? && item.getContentHeight() != 0>height:${item.getContentHeight()}px;</#if>"></app-range-editor>
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#if item.render??> <#if item.render??>
${item.render.code} ${item.render.code}
<#else> <#else>
<app-form-group :uiService="appUIService" :data="transformData(data)" :manageContainerStatus="detailsModel.${item.name}.manageContainerStatus" :isManageContainer="detailsModel.${item.name}.isManageContainer" @managecontainerclick="manageContainerClick('${item.name}')" layoutType="<#if item.getPSLayout()??>${item.getPSLayout().getLayout()}</#if>" titleStyle="<#if item.getLabelPSSysCss?? && item.getLabelPSSysCss()??>${item.getLabelPSSysCss().getCssName()}</#if>" class='<#if item.getPSSysCss?? && item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>' :uiActionGroup="detailsModel.${item.name}.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="<@getItemLanguageCaption item />" :isShowCaption="${item.isShowCaption()?c}" uiStyle="${item.getDetailStyle()}" :titleBarCloseMode="${item.getTitleBarCloseMode()}" :isInfoGroupMode="${item.isInfoGroupMode()?c}" <#if item.getPSSysImage()??>:iconInfo="{<#assign img=item.getPSSysImage()><#if img.getImagePath() == "">'iconclass':'${img.getCssClass()}'<#else>'iconpath':'${img.getImagePath()}'</#if>}"</#if>> <app-form-group :uiService="appUIService" :data="transformData(data)" :manageContainerStatus="detailsModel.${item.name}.manageContainerStatus" :isManageContainer="detailsModel.${item.name}.isManageContainer" @managecontainerclick="manageContainerClick('${item.name}')" layoutType="<#if item.getPSLayout()??>${item.getPSLayout().getLayout()}</#if>" titleStyle="<#if item.getLabelPSSysCss?? && item.getLabelPSSysCss()??>${item.getLabelPSSysCss().getCssName()}</#if>" class='<#if item.getPSSysCss?? && item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>' :uiActionGroup="detailsModel.${item.name}.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="<#if langbase??>$t('${langbase}.details.${item.name}')<#else>'${item.getCaption()}'</#if>" :isShowCaption="${item.isShowCaption()?c}" uiStyle="${item.getDetailStyle()}" :titleBarCloseMode="${item.getTitleBarCloseMode()}" :isInfoGroupMode="${item.isInfoGroupMode()?c}" <#if item.getPSSysImage()??>:iconInfo="{<#assign img=item.getPSSysImage()><#if img.getImagePath() == "">'iconclass':'${img.getCssClass()}'<#else>'iconpath':'${img.getImagePath()}'</#if>}"</#if>>
<#assign content> <#assign content>
<#list item.getPSDEFormDetails() as formmenber> <#list item.getPSDEFormDetails() as formmenber>
<#if !(formmenber.isHidden?? && formmenber.isHidden())> <#if !(formmenber.isHidden?? && formmenber.isHidden())>
......
<#if item.getLogicType() == 'GROUP'><#if item.isNotMode()>!(</#if><#if item.getPSDEFDLogics()??><#list item.getPSDEFDLogics() as subLogic><#if subLogic_index gt 0><#if item.getGroupOP() == 'AND'> && </#if><#if item.getGroupOP() == 'OR'> || </#if></#if>${P.getPartCode(subLogic, 'DETAIL_LOGIC').code}</#list></#if><#if item.isNotMode()>)</#if><#elseif item.getLogicType() == 'SINGLE'>this.$verify.testCond(_${item.getDEFDName()?lower_case}, '${item.getPSDBValueOPId()}', '${item.getValue()}')</#if> <#if item.getLogicType() == 'GROUP'><#if item.isNotMode()>!(</#if><#if item.getPSDEFDLogics()??>(<#list item.getPSDEFDLogics() as subLogic><#if subLogic_index gt 0><#if item.getGroupOP() == 'AND'> && </#if><#if item.getGroupOP() == 'OR'> || </#if></#if>${P.getPartCode(subLogic, 'DETAIL_LOGIC').code}</#list>)</#if><#if item.isNotMode()>)</#if><#elseif item.getLogicType() == 'SINGLE'>this.$verify.testCond(_${item.getDEFDName()?lower_case}, '${item.getPSDBValueOPId()}', '${item.getValue()}')</#if>
\ No newline at end of file \ No newline at end of file
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<#assign detail>caption: '${item.getCaption()}', detailType: '${item.getDetailType()}', name: '${item.getName()}', visible: <#if item.getPSDEFDGroupLogic('PANELVISIBLE')??>false<#else>true</#if>, isShowCaption: ${item.isShowCaption()?c}, form: this, isControlledContent: <#if item.getShowMoreMode?? && item.getShowMoreMode()?? && item.getShowMoreMode() == 1>true<#else>false</#if> </#assign> <#assign detail>caption: '${item.getCaption()}', detailType: '${item.getDetailType()}', name: '${item.getName()}', visible: <#if item.getPSDEFDGroupLogic('PANELVISIBLE')??>false<#else>true</#if>, isShowCaption: ${item.isShowCaption()?c}, form: this, isControlledContent: <#if item.getShowMoreMode?? && item.getShowMoreMode()?? && item.getShowMoreMode() == 1>true<#else>false</#if> </#assign>
<#if item.getDetailType() == 'BUTTON'> <#if item.getDetailType() == 'BUTTON'>
...@@ -14,7 +14,7 @@ new FormPageModel({ ${detail} }) ...@@ -14,7 +14,7 @@ new FormPageModel({ ${detail} })
<#elseif item.getDetailType() == 'FORMPART'> <#elseif item.getDetailType() == 'FORMPART'>
new FormPartModel({ ${detail} }) new FormPartModel({ ${detail} })
<#elseif item.getDetailType() == 'GROUPPANEL'> <#elseif item.getDetailType() == 'GROUPPANEL'>
new FormGroupPanelModel({ ${detail}, uiActionGroup: { caption: '<#if item.getPSUIActionGroup()??>${item.getPSUIActionGroup().getName()}</#if>', langbase: '<#if item.getCapPSLanguageRes?? && item.getCapPSLanguageRes()??>${item.getCapPSLanguageRes().getLanResTag()}</#if>', extractMode: '<#if item.getActionGroupExtractMode?? && item.getActionGroupExtractMode()??>${item.getActionGroupExtractMode()}<#else>ITEM</#if>', details: [<#if item.getPSUIActionGroup()??><#list item.getPSUIActionGroup().getPSUIActionGroupDetails() as uadetails><#if uadetails_index gt 0>, </#if>{ name: '${item.getName()}_${uadetails.getName()}', caption: '${uadetails.getPSUIAction().getCaption()}',<#if uadetails.getPSUIAction().getCapPSLanguageRes?? && uadetails.getPSUIAction().getCapPSLanguageRes()??>captionLanbase: '${uadetails.getPSUIAction().getCapPSLanguageRes().getLanResTag()}',</#if>disabled: false, visabled: true, noprivdisplaymode:<#if uadetails.getPSUIAction()?? && uadetails.getPSUIAction().getNoPrivDisplayMode(view)??>${uadetails.getPSUIAction().getNoPrivDisplayMode(view)}</#if>,actiontarget: '<#if uadetails.getPSUIAction()?? && uadetails.getPSUIAction().getActionTarget()??>${uadetails.getPSUIAction().getActionTarget()}</#if>',dataaccaction: '<#if uadetails.getPSUIAction()?? && uadetails.getPSUIAction().getDataAccessAction()??>${uadetails.getPSUIAction().getDataAccessAction()}</#if>',uiactiontag: '<#if uadetails.getPSUIAction().getPSAppDataEntity?? && uadetails.getPSUIAction().getPSAppDataEntity()??>${uadetails.getPSUIAction().getPSAppDataEntity().getCodeName()?lower_case}_</#if>${uadetails.getPSUIAction().getUIActionTag()?lower_case}'<#if uadetails.getPSUIAction().getPSSysImage()??>, <#assign viewimg=uadetails.getPSUIAction().getPSSysImage()/><#if viewimg.getCssClass() != ''>icon: '${viewimg.getCssClass()}'<#else>img: '${viewimg.getImagePath()}'</#if></#if>,isShowCaption:${uadetails.isShowCaption()?c},isShowIcon:${uadetails.isShowIcon()?c} }</#list></#if>] }, isManageContainer: <#if item.getShowMoreMode?? && item.getShowMoreMode()?? && item.getShowMoreMode() == 2>true<#else>false</#if>, showMoreModeItems: [<#if item.getPSDEFormDetails()??><#list item.getPSDEFormDetails() as moreItem><#if moreItem.getShowMoreMode?? && moreItem.getShowMoreMode()?? && moreItem.getShowMoreMode() == 1>'${moreItem.getName()}',</#if></#list></#if>] }) new FormGroupPanelModel({ ${detail}, uiActionGroup: { caption: '<#if item.getPSUIActionGroup()??>${item.getPSUIActionGroup().getName()}</#if>', langbase: '<#if langbase??>${langbase}</#if>', extractMode: '<#if item.getActionGroupExtractMode?? && item.getActionGroupExtractMode()??>${item.getActionGroupExtractMode()}<#else>ITEM</#if>', details: [<#if item.getPSUIActionGroup()??><#list item.getPSUIActionGroup().getPSUIActionGroupDetails() as uadetails><#if uadetails_index gt 0>, </#if>{ name: '${item.getName()}_${uadetails.getName()}', caption: '${uadetails.getPSUIAction().getCaption()}',disabled: false, visabled: true, noprivdisplaymode:<#if uadetails.getPSUIAction()?? && uadetails.getPSUIAction().getNoPrivDisplayMode(view)??>${uadetails.getPSUIAction().getNoPrivDisplayMode(view)}</#if>,actiontarget: '<#if uadetails.getPSUIAction()?? && uadetails.getPSUIAction().getActionTarget()??>${uadetails.getPSUIAction().getActionTarget()}</#if>',dataaccaction: '<#if uadetails.getPSUIAction()?? && uadetails.getPSUIAction().getDataAccessAction()??>${uadetails.getPSUIAction().getDataAccessAction()}</#if>',uiactiontag: '<#if uadetails.getPSUIAction().getPSAppDataEntity?? && uadetails.getPSUIAction().getPSAppDataEntity()??>${uadetails.getPSUIAction().getPSAppDataEntity().getCodeName()?lower_case}_</#if>${uadetails.getPSUIAction().getUIActionTag()?lower_case}'<#if uadetails.getPSUIAction().getPSSysImage()??>, <#assign viewimg=uadetails.getPSUIAction().getPSSysImage()/><#if viewimg.getCssClass() != ''>icon: '${viewimg.getCssClass()}'<#else>img: '${viewimg.getImagePath()}'</#if></#if>,isShowCaption:${uadetails.isShowCaption()?c},isShowIcon:${uadetails.isShowIcon()?c} }</#list></#if>] }, isManageContainer: <#if item.getShowMoreMode?? && item.getShowMoreMode()?? && item.getShowMoreMode() == 2>true<#else>false</#if>, showMoreModeItems: [<#if item.getPSDEFormDetails()??><#list item.getPSDEFormDetails() as moreItem><#if moreItem.getShowMoreMode?? && moreItem.getShowMoreMode()?? && moreItem.getShowMoreMode() == 1>'${moreItem.getName()}',</#if></#list></#if>] })
<#elseif item.getDetailType() == 'IFRAME'> <#elseif item.getDetailType() == 'IFRAME'>
new FormIFrameModel({ ${detail} }) new FormIFrameModel({ ${detail} })
<#elseif item.getDetailType() == 'RAWITEM'> <#elseif item.getDetailType() == 'RAWITEM'>
......
...@@ -16,7 +16,7 @@ ${item.render.code} ...@@ -16,7 +16,7 @@ ${item.render.code}
imageClass="${img.getCssClass()}" imageClass="${img.getCssClass()}"
</#if> </#if>
<#if img.getImagePath?? && img.getImagePath()?? && img.getImagePath()?length gt 0> <#if img.getImagePath?? && img.getImagePath()?? && img.getImagePath()?length gt 0>
imageSrc="{img.getImagePath()}" imageSrc="${img.getImagePath()}"
</#if> </#if>
</#if> </#if>
> >
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<tabs :animated="false" name='${item.getCodeName()?lower_case}' v-show="detailsModel.${item.name}.visible" class='<#if item.getPSSysCss?? && item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if><#if item.getPSLayoutPos()?? && item.getPSLayoutPos().getLayout() == "FLEX"> app-tabpanel-flex</#if>' <tabs :animated="false" name='${item.getCodeName()?lower_case}' v-show="detailsModel.${item.name}.visible" class='<#if item.getPSSysCss?? && item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if><#if item.getPSLayoutPos()?? && item.getPSLayoutPos().getLayout() == "FLEX"> app-tabpanel-flex</#if>'
:value="detailsModel.${item.name}.activiedPage" @on-click="detailsModel.${item.name}.clickPage($event)"> :value="detailsModel.${item.name}.activiedPage" @on-click="detailsModel.${item.name}.clickPage($event)">
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
}), }),
</#if> </#if>
</#if> </#if>
<@getItemLanguageCaption formmenber /> <#if langbase??>$t('${langbase}.details.${formmenber.name}')<#else>'${formmenber.getCaption()}'</#if>
]) ])
}"> }">
${P.getPartCode(formmenber).code} ${P.getPartCode(formmenber).code}
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#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>" @on-validate="formItemValidate"> <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;" /> <input style="display:none;" />
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
}), }),
</#if> </#if>
</#if> </#if>
<@getItemLanguageCaption formpage /> <#if langbase??>$t('${langbase}.details.${formpage.name}')<#else>'${formpage.getCaption()}'</#if>
]) ])
}"> }">
${P.getPartCode(formpage).code} ${P.getPartCode(formpage).code}
......
...@@ -1335,7 +1335,7 @@ import { Environment } from '@/environments/environment'; ...@@ -1335,7 +1335,7 @@ import { Environment } from '@/environments/environment';
onCancel: () => { } onCancel: () => { }
}); });
} else if(Object.is(response.data.errorKey, 'DupCheck')) { } else if(Object.is(response.data.errorKey, 'DupCheck')) {
let errorProp: string = response.data.message.match(/\[[a-zA-Z]*\]/)[0]; let errorProp: string = response.data.message.match(/\[[a-zA-Z-_]*\]/)[0];
let name: string = this.service.getNameByProp(errorProp.substr(1, errorProp.length-2)); let name: string = this.service.getNameByProp(errorProp.substr(1, errorProp.length-2));
if(name) { if(name) {
this.$Notice.error({ this.$Notice.error({
...@@ -1396,13 +1396,7 @@ import { Environment } from '@/environments/environment'; ...@@ -1396,13 +1396,7 @@ import { Environment } from '@/environments/environment';
Object.assign(arg, data); Object.assign(arg, data);
Object.assign(arg,{srfmajortext:data[this.majorMessageField]}); Object.assign(arg,{srfmajortext:data[this.majorMessageField]});
if (ifStateNext) { if (ifStateNext) {
<#assign drcounter = 0> this.drcounter = this.getDrCount();
<#list ctrl.getAllPSDEFormDetails() as formdetail>
<#if formdetail.getDetailType() == "DRUIPART">
<#assign drcounter = drcounter + 1>
</#if>
</#list>
this.drcounter = ${drcounter};
if(this.drcounter !== 0){ if(this.drcounter !== 0){
this.drsaveopt = opt; this.drsaveopt = opt;
this.formState.next({ type: 'beforesave', data: arg });//先通知关系界面保存 this.formState.next({ type: 'beforesave', data: arg });//先通知关系界面保存
...@@ -1473,7 +1467,7 @@ import { Environment } from '@/environments/environment'; ...@@ -1473,7 +1467,7 @@ import { Environment } from '@/environments/environment';
onCancel: () => { } onCancel: () => { }
}); });
} else if(Object.is(response.data.errorKey, 'DupCheck')) { } else if(Object.is(response.data.errorKey, 'DupCheck')) {
let errorProp: string = response.data.message.match(/\[[a-zA-Z]*\]/)[0]; let errorProp: string = response.data.message.match(/\[[a-zA-Z-_]*\]/)[0];
let name: string = this.service.getNameByProp(errorProp.substr(1, errorProp.length-2)); let name: string = this.service.getNameByProp(errorProp.substr(1, errorProp.length-2));
if(name) { if(name) {
this.$Notice.error({ this.$Notice.error({
...@@ -1505,6 +1499,22 @@ import { Environment } from '@/environments/environment'; ...@@ -1505,6 +1499,22 @@ import { Environment } from '@/environments/environment';
}) })
} }
/**
* 获取显示的关系界面数量
*
* @returns {number}
* @memberof MainBase
*/
public getDrCount(): number {
return Object.keys(this.detailsModel).filter((key: string) => {
const item = this.detailsModel[key];
if (item.detailType === 'DRUIPART' && item.visible) {
return true;
}
return false;
}).length;
}
/** /**
* 保存草稿 * 保存草稿
* *
...@@ -1580,7 +1590,7 @@ import { Environment } from '@/environments/environment'; ...@@ -1580,7 +1590,7 @@ import { Environment } from '@/environments/environment';
onCancel: () => { } onCancel: () => { }
}); });
} else if(Object.is(response.data.errorKey, 'DupCheck')) { } else if(Object.is(response.data.errorKey, 'DupCheck')) {
let errorProp: string = response.data.message.match(/\[[a-zA-Z]*\]/)[0]; let errorProp: string = response.data.message.match(/\[[a-zA-Z-_]*\]/)[0];
let name: string = this.service.getNameByProp(errorProp.substr(1, errorProp.length-2)); let name: string = this.service.getNameByProp(errorProp.substr(1, errorProp.length-2));
if(name) { if(name) {
this.$Notice.error({ this.$Notice.error({
......
// 基于 @CONTROL/表单/CONTROL.scss.ftl 生成 // 基于 @CONTROL/表单/CONTROL.less.ftl 生成
.ivu-tabs-no-animation>.ivu-tabs-content{ .ivu-tabs-no-animation>.ivu-tabs-content{
padding: 0 16px; padding: 0 16px;
} }
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
} }
.app-form { .app-form {
overflow: auto; overflow: auto;
padding: 6px;
> .ivu-row { > .ivu-row {
> .ivu-tabs { > .ivu-tabs {
height: 100%; height: 100%;
...@@ -44,7 +45,7 @@ ...@@ -44,7 +45,7 @@
.app-form{ .app-form{
// 表单行间距 // 表单行间距
.app-form-item{ .app-form-item{
margin-bottom: 10px; margin-bottom: 20px;
} }
// 表单按钮margin // 表单按钮margin
.app-form-button{ .app-form-button{
...@@ -52,5 +53,5 @@ ...@@ -52,5 +53,5 @@
} }
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
...@@ -46,18 +46,21 @@ ...@@ -46,18 +46,21 @@
<#assign img=item.getPSSysImage()> <#assign img=item.getPSSysImage()>
<@insertBlank blankNum /> <i class='<#if img.getCssClass?? && img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if>'></i> <@insertBlank blankNum /> <i class='<#if img.getCssClass?? && img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if>'></i>
</#if> </#if>
<@insertBlank blankNum /> {{<@getItemLanguageCaption item />}} <@insertBlank blankNum /> {{<#if langbase??>$t('${langbase}.columns.${item.getName()?lower_case}')<#else>'${item.getCaption()}'</#if>}}
<@insertBlank blankNum /> </span> <@insertBlank blankNum /> </span>
<@insertBlank blankNum /></template> <@insertBlank blankNum /></template>
</#macro> </#macro>
<#-- END:表格列标题自定义绘制 --> <#-- END:表格列标题自定义绘制 -->
<#ibizinclude> <#ibizinclude>
../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../../@MACRO/LANG_FUN.ftl
</#ibizinclude> </#ibizinclude>
<template v-if="getColumnState('${item.getName()?lower_case}')"> <template v-if="getColumnState('${item.getName()?lower_case}')">
<#if item.getColumnType() == 'GROUPGRIDCOLUMN' && item.getPSDEGridColumns()??> <#if item.getColumnType() == 'GROUPGRIDCOLUMN' && item.getPSDEGridColumns()??>
<#-- [1]BEGIN:分组列 --> <#-- [1]BEGIN:分组列 -->
<el-table-column show-overflow-tooltip :align="'${item.getAlign()?lower_case}'" :label="<@getItemLanguageCaption item />"> <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 /> <@getColumnHeader item 4 />
<#list item.getPSDEGridColumns() as column> <#list item.getPSDEGridColumns() as column>
${P.getPartCode(column,'COLUMN').code} ${P.getPartCode(column,'COLUMN').code}
...@@ -66,10 +69,10 @@ ...@@ -66,10 +69,10 @@
<#-- [1]END:分组列 --> <#-- [1]END:分组列 -->
<#elseif item.getColumnType() == 'UAGRIDCOLUMN'> <#elseif item.getColumnType() == 'UAGRIDCOLUMN'>
<#-- [2]BEGIN:操作列 --> <#-- [2]BEGIN:操作列 -->
<el-table-column :column-key="'${item.getName()?lower_case}'" :label="<@getItemLanguageCaption item />"<#if item.getWidthUnit()!='STAR'> :width="${item.width?c}" <#else> :min-width="${item.width?c}" </#if> :align="'${item.getAlign()?lower_case}'"> <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 /> <@getColumnHeader item 8 />
<template slot-scope="scope"> <template slot-scope="scope">
<div class="grid-column--action" style="text-align: center;"> <div style="text-align: center;">
<#if item.getPSDEUIActionGroup?? && item.getPSDEUIActionGroup()?? && item.getPSDEUIActionGroup().getPSDEUIActions?? && item.getPSDEUIActionGroup().getPSDEUIActions()??> <#if item.getPSDEUIActionGroup?? && item.getPSDEUIActionGroup()?? && item.getPSDEUIActionGroup().getPSDEUIActions?? && item.getPSDEUIActionGroup().getPSDEUIActions()??>
<#list item.getPSDEUIActionGroup().getPSUIActionGroupDetails() as uiactionDetail> <#list item.getPSDEUIActionGroup().getPSUIActionGroupDetails() as uiactionDetail>
<#if uiactionDetail.getPSUIAction?? && uiactionDetail.getPSUIAction()??> <#if uiactionDetail.getPSUIAction?? && uiactionDetail.getPSUIAction()??>
...@@ -83,13 +86,13 @@ ...@@ -83,13 +86,13 @@
<#if !uiactionDetail.isShowCaption()> <#if !uiactionDetail.isShowCaption()>
<tooltip :transfer="true" :max-width="600"> <tooltip :transfer="true" :max-width="600">
</#if> </#if>
<a v-show="scope.row.${uiaction.getUIActionTag()}.visabled" <#if !preUIAction??>:class="{'grid-first-uiaction':scope.row.${uiaction.getUIActionTag()}.visabled && scope.row.${uiaction.getUIActionTag()}.visabled}"</#if> <#if preUIAction??>:class="{'grid-uiaction-divider': ${uiactionDetail.isAddSeparator()?c} && scope.row.${preUIAction.getUIActionTag()}.visabled && scope.row.${uiaction.getUIActionTag()}.visabled}"</#if> :style="{'pointer-events':scope.row.${uiaction.getUIActionTag()}.disabled?'none':'auto'}" @click="uiAction(scope.row, '${uiaction.getUIActionTag()}', $event)"> <a v-show="scope.row.${uiaction.getUIActionTag()}.visabled" <#if !preUIAction??>:class="{'grid-first-uiaction':scope.row.${uiaction.getUIActionTag()}.visabled && scope.row.${uiaction.getUIActionTag()}.visabled}"</#if> <#if preUIAction??>:class="{'grid-uiaction-divider': ${uiactionDetail.isAddSeparator()?c} && scope.row.${preUIAction.getUIActionTag()}.visabled && scope.row.${uiaction.getUIActionTag()}.visabled}"</#if> :style="{'pointer-events':scope.row.${uiaction.getUIActionTag()}.disabled?'none':'auto','color':scope.row.${uiaction.getUIActionTag()}.disabled?'#7b7979':'#2d8cf0'}" @click="uiAction(scope.row, '${uiaction.getUIActionTag()}', $event)">
<#-- 取消分割线标签,使用样式替代分割线 end --> <#-- 取消分割线标签,使用样式替代分割线 end -->
<#if uiactionDetail.isShowIcon()><i class='<#if uiaction.getIconCls?? && uiaction.getIconCls()??>${uiaction.getIconCls()}</#if>'></i></#if> <#if uiactionDetail.isShowIcon()><i class='<#if uiaction.getIconCls?? && uiaction.getIconCls()??>${uiaction.getIconCls()}</#if>'></i></#if>
<#if uiactionDetail.isShowCaption()>{{<@getItemLanguageCaption uiaction />}}</#if> <#if uiactionDetail.isShowCaption()>{{<#if langbase??>$t('${langbase}.uiactions.${uiaction.getFullCodeName()?lower_case}')<#else>'${uiaction.getCaption()}'</#if>}}</#if>
</a> </a>
<#if !uiactionDetail.isShowCaption()> <#if !uiactionDetail.isShowCaption()>
<div slot='content'>{{<@getItemLanguageCaption uiaction />}}</div> <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> </tooltip>
</#if> </#if>
<#assign preUIAction = uiaction /> <#assign preUIAction = uiaction />
...@@ -102,7 +105,7 @@ ...@@ -102,7 +105,7 @@
<#-- [2]END:操作列 --> <#-- [2]END:操作列 -->
<#elseif item.getColumnType() == 'DEFGRIDCOLUMN'> <#elseif item.getColumnType() == 'DEFGRIDCOLUMN'>
<#-- [3]BEGIN:数据列 --> <#-- [3]BEGIN:数据列 -->
<el-table-column show-overflow-tooltip :prop="'${item.getName()?lower_case}'" :label="<@getItemLanguageCaption item />"<#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>> <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 /> <@getColumnHeader item 8 />
<template v-slot="{row,column,$index}"> <template v-slot="{row,column,$index}">
<#if (item.render??) || (item.getCodeList()?? && item.getCLConvertMode() == 'FRONT') || item.isEnableRowEdit()> <#if (item.render??) || (item.getCodeList()?? && item.getCLConvertMode() == 'FRONT') || item.isEnableRowEdit()>
......
// 基于 @CONTROL/表格/CONTROL.less.ftl 生成
.grid {
flex-grow: 1;
height: 100%;
overflow: auto;
.el-table__body-wrapper::-webkit-scrollbar {
/*滚动条整体样式*/
width: 10px !important;
/*高宽分别对应横竖滚动条的尺寸*/
height: 10px !important;
}
.el-table__body-wrapper::-webkit-scrollbar-thumb {
/*滚动条颜色*/
border-radius: 10px !important;
background-color: #cecece !important;
}
.el-table__body-wrapper::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2) !important;
background: #ededed !important;
border-radius: 10px !important;
}
/*表格文字过长省略*/
.el-table th>.cell,
.el-table td>.cell {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
}
.el-table-column--selection .cell {
padding-left: 10px;
padding-right: 10px;
.el-checkbox {
margin-right: 0;
}
}
.app-column-link,
.app-format-data {
display: inline;
}
.el-table {
height: 100%;
border-left: none;
// 去除表格右侧边框
&::after {
width: 0;
}
.el-table__row {
.grid-uiaction-divider {
padding: 0 10px 0 10px;
border-left: 1px #b3b3b3 solid;
}
.grid-first-uiaction {
padding: 0 10px 0 10px;
}
}
// 表格头最小高度为45px
.el-table__header-wrapper,
.el-table__fixed-header-wrapper {
min-height: 60px;
height: auto;
.el-table__header {
height: 100%;
}
}
// 表格内容最大高度为100% - 45px
.el-table__body-wrapper,
.el-table__fixed-body-wrapper {
max-height: calc(100% - 60px);
}
.quick-toolbar {
display: inline-block;
button {
background: #ebf3fb;
color: #2575ca;
border: 0;
}
}
.el-tooltip {
.ivu-form-item {
margin-bottom: unset !important;
}
}
.el-table__body .edit-cell {
padding: 0;
.app-form-item {
margin-top: 20px;
margin-bottom: 20px;
}
}
}
.grid-pagination {
height: 50px;
padding: 6px 0px;
.page-button {
button {
padding: 0;
font-size: 16px;
min-width: 32px;
height: 32px;
margin-right: 4px;
}
}
.page-column {
position: absolute;
left: 0;
}
.batch-toolbar {
position: absolute;
left: 105px;
>.toolbar-container {
button {
font-size: 16px;
min-width: 32px;
height: 32px;
margin-right: 4px;
margin-top: 0;
margin-bottom: 0;
}
}
}
}
}
.ivu-modal-content {
.footer {
.ivu-row {
text-align: right;
}
}
}
.cell-indeterminate {
>div>label {
>span {
.el-checkbox__inner {
background-color: #409eff;
border-color: #409eff;
}
.el-checkbox__inner:before {
content: "";
position: absolute;
display: block;
background-color: #fff;
height: 2px;
transform: scale(.5);
left: 0;
right: 0;
top: 5px;
}
}
>span.is-checked {
.el-checkbox__inner {
background-color: #409eff;
border-color: #409eff;
}
.el-checkbox__inner:after {
border: 0px;
}
}
}
}
.cell-select-all {
>div>label {
>span {
.el-checkbox__inner {
background-color: #409eff;
border-color: #409eff;
}
.el-checkbox__inner:after {
box-sizing: content-box;
content: "";
border: 1px solid #fff;
border-left: 0;
border-top: 0;
height: 7px;
left: 4px;
position: absolute;
top: 1px;
transform: rotate(45deg) scaleY(1);
width: 3px;
transition: transform .15s ease-in .05s;
transform-origin: center;
}
}
}
}
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/表格导航/CONTROL.scss.ftl 生成 // 基于 @CONTROL/表格导航/CONTROL.less.ftl 生成
.app-grid-exp-bar { .app-grid-exp-bar {
height: 100%; height: 100%;
display: flex; display: flex;
...@@ -42,5 +42,5 @@ ...@@ -42,5 +42,5 @@
} }
<#ibizinclude> <#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl ../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
\ No newline at end of file
...@@ -46,18 +46,21 @@ ...@@ -46,18 +46,21 @@
<#assign img=item.getPSSysImage()> <#assign img=item.getPSSysImage()>
<@insertBlank blankNum /> <i class='<#if img.getCssClass?? && img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if>'></i> <@insertBlank blankNum /> <i class='<#if img.getCssClass?? && img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if>'></i>
</#if> </#if>
<@insertBlank blankNum /> {{<@getItemLanguageCaption item />}} <@insertBlank blankNum /> {{<#if langbase??>$t('${langbase}.columns.${item.getName()?lower_case}')<#else>'${item.getCaption()}'</#if>}}
<@insertBlank blankNum /> </span> <@insertBlank blankNum /> </span>
<@insertBlank blankNum /></template> <@insertBlank blankNum /></template>
</#macro> </#macro>
<#-- END:表格列标题自定义绘制 --> <#-- END:表格列标题自定义绘制 -->
<#ibizinclude> <#ibizinclude>
../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude>
<#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../../@MACRO/LANG_FUN.ftl
</#ibizinclude> </#ibizinclude>
<template v-if="getColumnState('${item.getName()?lower_case}')"> <template v-if="getColumnState('${item.getName()?lower_case}')">
<#if item.getColumnType() == 'GROUPGRIDCOLUMN' && item.getPSDEGridColumns()??> <#if item.getColumnType() == 'GROUPGRIDCOLUMN' && item.getPSDEGridColumns()??>
<#-- [1]BEGIN:分组列 --> <#-- [1]BEGIN:分组列 -->
<el-table-column show-overflow-tooltip :align="'${item.getAlign()?lower_case}'" :label="<@getItemLanguageCaption item />"> <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 /> <@getColumnHeader item 4 />
<#list item.getPSDEGridColumns() as column> <#list item.getPSDEGridColumns() as column>
${P.getPartCode(column,'COLUMN').code} ${P.getPartCode(column,'COLUMN').code}
...@@ -66,7 +69,7 @@ ...@@ -66,7 +69,7 @@
<#-- [1]END:分组列 --> <#-- [1]END:分组列 -->
<#elseif item.getColumnType() == 'UAGRIDCOLUMN'> <#elseif item.getColumnType() == 'UAGRIDCOLUMN'>
<#-- [2]BEGIN:操作列 --> <#-- [2]BEGIN:操作列 -->
<el-table-column :column-key="'${item.getName()?lower_case}'" :label="<@getItemLanguageCaption item />"<#if item.getWidthUnit()!='STAR'> :width="${item.width?c}" <#else> :min-width="${item.width?c}" </#if> :align="'${item.getAlign()?lower_case}'"> <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 /> <@getColumnHeader item 8 />
<template slot-scope="scope"> <template slot-scope="scope">
<div style="text-align: center;"> <div style="text-align: center;">
...@@ -86,10 +89,10 @@ ...@@ -86,10 +89,10 @@
<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)"> <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 --> <#-- 取消分割线标签,使用样式替代分割线 end -->
<#if uiactionDetail.isShowIcon()><i class='<#if uiaction.getIconCls?? && uiaction.getIconCls()??>${uiaction.getIconCls()}</#if>'></i></#if> <#if uiactionDetail.isShowIcon()><i class='<#if uiaction.getIconCls?? && uiaction.getIconCls()??>${uiaction.getIconCls()}</#if>'></i></#if>
<#if uiactionDetail.isShowCaption()>{{<@getItemLanguageCaption uiaction />}}</#if> <#if uiactionDetail.isShowCaption()>{{<#if langbase??>$t('${langbase}.uiactions.${uiaction.getFullCodeName()?lower_case}')<#else>'${uiaction.getCaption()}'</#if>}}</#if>
</a> </a>
<#if !uiactionDetail.isShowCaption()> <#if !uiactionDetail.isShowCaption()>
<div slot='content'>{{<@getItemLanguageCaption uiaction />'</#if>}}</div> <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> </tooltip>
</#if> </#if>
<#assign preUIAction = uiaction /> <#assign preUIAction = uiaction />
...@@ -102,7 +105,7 @@ ...@@ -102,7 +105,7 @@
<#-- [2]END:操作列 --> <#-- [2]END:操作列 -->
<#elseif item.getColumnType() == 'DEFGRIDCOLUMN'> <#elseif item.getColumnType() == 'DEFGRIDCOLUMN'>
<#-- [3]BEGIN:数据列 --> <#-- [3]BEGIN:数据列 -->
<el-table-column show-overflow-tooltip :prop="'${item.getName()?lower_case}'" :label="<@getItemLanguageCaption item />"<#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>> <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 /> <@getColumnHeader item 8 />
<template v-slot="{row,column,$index}"> <template v-slot="{row,column,$index}">
<#if (item.render??) || (item.getCodeList()?? && item.getCLConvertMode() == 'FRONT') || item.isEnableRowEdit()> <#if (item.render??) || (item.getCodeList()?? && item.getCLConvertMode() == 'FRONT') || item.isEnableRowEdit()>
......
<#ibizinclude> <#ibizinclude>
../../@MACRO/LANG_FUN.ftl ../@MACRO/CONTROL/LANGBASE.vue.ftl
</#ibizinclude> </#ibizinclude>
<template> <template>
<div :class="{ 'grid': true, 'show-paging-bar': isEnablePagingBar, 'hidden-paging-bar': !isEnablePagingBar }"> <div :class="{ 'grid': true, 'show-paging-bar': isEnablePagingBar, 'hidden-paging-bar': !isEnablePagingBar }">
...@@ -421,7 +421,7 @@ import { FormItemModel } from '@/model/form-detail'; ...@@ -421,7 +421,7 @@ import { FormItemModel } from '@/model/form-detail';
{ {
name: '${column.getName()?lower_case}', name: '${column.getName()?lower_case}',
label: '${column.getCaption()}', label: '${column.getCaption()}',
langtag: '<#if column.getCapPSLanguageRes?? && column.getCapPSLanguageRes()??>${column.getCapPSLanguageRes().getLanResTag()}</#if>', langtag: '<#if langbase??>${langbase}.columns.${column.getName()?lower_case}</#if>',
show: <#if column.isHideDefault()>false<#else>true</#if>, show: <#if column.isHideDefault()>false<#else>true</#if>,
util: '${column.getWidthUnit()}', util: '${column.getWidthUnit()}',
render: (val: any) => { render: (val: any) => {
...@@ -883,7 +883,7 @@ import { FormItemModel } from '@/model/form-detail'; ...@@ -883,7 +883,7 @@ import { FormItemModel } from '@/model/form-detail';
{ {
name: '${column.getName()?lower_case}', name: '${column.getName()?lower_case}',
label: '${column.getCaption()}', label: '${column.getCaption()}',
langtag: '<#if column.getCapPSLanguageRes?? && column.getCapPSLanguageRes()??>${column.getCapPSLanguageRes().getLanResTag()}</#if>', langtag: '<#if langbase??>${langbase}.exportColumns.${column.getName()?lower_case}</#if>',
show: true, show: true,
}, },
</#list> </#list>
...@@ -1047,7 +1047,7 @@ import { FormItemModel } from '@/model/form-detail'; ...@@ -1047,7 +1047,7 @@ import { FormItemModel } from '@/model/form-detail';
*/ */
public getCodelistValue(items: any[], value: any, codelist: any,){ public getCodelistValue(items: any[], value: any, codelist: any,){
if(!value){ if(!value){
return codelist.emptytextLanRes ? this.$t(codelist.emptytextLanRes, codelist.emptytext) : codelist.emptytext; return this.$t('codelist.'+codelist.srfkey+'.empty');
} }
if (items) { if (items) {
let result:any = []; let result:any = [];
...@@ -1099,14 +1099,14 @@ import { FormItemModel } from '@/model/form-detail'; ...@@ -1099,14 +1099,14 @@ import { FormItemModel } from '@/model/form-detail';
* @memberof ${srfclassname(ctrl.codeName)} * @memberof ${srfclassname(ctrl.codeName)}
*/ */
public getItem(items: any[], value: any, codelist: any): any { public getItem(items: any[], value: any, codelist: any): any {
const item = items.find(item => Object.is(item.value, value)); const arr: Array<any> = items.filter(item => {return item.value == value});
if (!item) { if (arr.length !== 1) {
return undefined; return undefined;
} }
if(Object.is(codelist.codelistType,'STATIC')){ if(Object.is(codelist.codelistType,'STATIC')){
return item.textLanRes ? this.$t(item.textLanRes, item.text) : item.text; return this.$t('codelist.'+codelist.srfkey+'.'+arr[0].value);
}else{ }else{
return item.text; return arr[0].text;
} }
} }
......
// 基于 @CONTROL/表格(透视表)/CONTROL.less.ftl 生成
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
// 基于 @CONTROL/表格(透视表)/CONTROL.scss.ftl 生成
<#ibizinclude>
../@MACRO/CSS/DEFAULT.scss.ftl
</#ibizinclude>
\ No newline at end of file
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
} }
<#if view.hasPSControl('toolbar')> <#if view.hasPSControl('toolbar')>
<@ibizindent blank=8> <@ibizindent blank=8>
${P.getCtrlCode('toolbar', 'CONTROL.scss').code} ${P.getCtrlCode('toolbar', 'CONTROL.less').code}
</@ibizindent> </@ibizindent>
</#if> </#if>
......
<app-edit-view-layout class="${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if><#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>" :view-default-usage="viewDefaultUsage"> <div class="view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>">
<template #headerTop> <card class='view-card<#if !view.isShowCaptionBar()> view-no-caption</#if> <#if !view.hasPSControl('toolbar')> view-no-toolbar</#if>' :disHover="true" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude> <#ibizinclude>
./View_Pos_Top_Msgs.vue.ftl ./VIEW_CAPTION_DATAINFO.vue.ftl
</#ibizinclude> </#ibizinclude>
</@ibizindent>
</template> <#-- BEGIN:视图顶部视图消息 -->
<template #headerLeft> <@ibizindent blank=8>
<#if view.isShowCaptionBar()> <#ibizinclude>
<app-caption :openType="openType" :caption="model.srfCaption"></app-caption> ./View_Pos_Top_Msgs.vue.ftl
</#if> </#ibizinclude>
</template> </@ibizindent>
<template #headerRight> <#-- END:视图顶部视图消息 -->
<#if view.hasPSControl('toolbar')> <div class="content-container">
<#if selfToolbarRender??> <#-- BEGIN:视图内容区视图消息 -->
<@ibizindent blank=4> <@ibizindent blank=8>
${selfToolbarRender}<#t> <#ibizinclude>
</@ibizindent> ./View_Pos_Body_Msgs.vue.ftl
<#else> </#ibizinclude>
<@ibizindent blank=4> </@ibizindent>
${P.getCtrlCode('toolbar', 'CONTROL.html').code}<#t> <#-- END:视图内容区视图消息 -->
</@ibizindent> <#if view.hasPSControl('form')>
</#if> <@ibizindent blank=8>
</#if> ${P.getCtrlCode('form', 'CONTROL.html').code}
</template> </@ibizindent>
<template #contentTop> </#if>
<@ibizindent blank=8> </div>
<#ibizinclude> <#-- BEGIN:视图底部视图消息 -->
./View_Pos_Body_Msgs.vue.ftl <@ibizindent blank=8>
</#ibizinclude> <#ibizinclude>
</@ibizindent> ./View_Pos_Bottom_Msgs.vue.ftl
</template> </#ibizinclude>
<template #default> </@ibizindent>
<#if view.hasPSControl('form')> <#-- END:视图底部视图消息 -->
<@ibizindent blank=8> </card>
${P.getCtrlCode('form', 'CONTROL.html').code} </div>
</@ibizindent> \ No newline at end of file
</#if>
</template>
<template #contentBottom>
<@ibizindent blank=8>
<#ibizinclude>
./View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
</template>
</app-edit-view-layout>
\ No newline at end of file
<#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude> <#ibizinclude>../../@MACRO/FUNC/MACRO.ftl</#ibizinclude>
<#assign MDContent><#t> <#assign MDContent><#t>
<#if view.getPSSysCounterRef?? && view.getPSSysCounterRef()?? && view.getPSSysCounterRef().getPSAppCounter()??> <#if view.getPSSysCounterRef?? && view.getPSSysCounterRef()?? && view.getPSSysCounterRef().getPSAppCounter()??>
<#assign appCounter = view.getPSSysCounterRef().getPSAppCounter() /> <#assign appCounter = view.getPSSysCounterRef().getPSAppCounter() />
</#if> </#if>
<#if view.getViewType() == "DEGRIDVIEW9"> <#if view.getViewType() == "DEGRIDVIEW9">
<#if view.hasPSControl('searchbar')> <#if view.hasPSControl('searchbar')>
${P.getCtrlCode('searchbar', 'CONTROL.html').code} ${P.getCtrlCode('searchbar', 'CONTROL.html').code}
</#if> </#if>
<#if view.hasPSControl('searchform')> <#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code} ${P.getCtrlCode('searchform', 'CONTROL.html').code}
</#if> </#if>
<#-- BEGIN:视图内容区视图消息 --> <#-- BEGIN:视图内容区视图消息 -->
<@ibizindent blank=8> <@ibizindent blank=8>
...@@ -18,85 +18,84 @@ ...@@ -18,85 +18,84 @@
</@ibizindent> </@ibizindent>
<#-- END:视图内容区视图消息 --> <#-- END:视图内容区视图消息 -->
<#if view.hasPSControl('grid')> <#if view.hasPSControl('grid')>
${P.getCtrlCode('grid', 'CONTROL.html').code} ${P.getCtrlCode('grid', 'CONTROL.html').code}
</#if> </#if>
</#if> </#if>
<#-- BEGIN:快速搜索框或工具栏或支持快速分组搜索或快速搜索表单部件存在 --> <#-- BEGIN:快速搜索框或工具栏或支持快速分组搜索或快速搜索表单部件存在 -->
<#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar') || view.isEnableQuickGroup() || view.getQuickPSDESearchForm()??)> <#if (view.isEnableQuickSearch() || view.hasPSControl('toolbar') || view.isEnableQuickGroup() || view.getQuickPSDESearchForm()??)>
<template #headerTop> <div 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='quick-search-input' style='max-width: 400px;padding-left: 24px' placeholder="<@getQuickSearchPlaceholder view />" />
</#if>
<div class='pull-right'>
<#if view.hasPSControl('toolbar')>
<@ibizindent blank=8> <@ibizindent blank=8>
<#ibizinclude> ${P.getCtrlCode('toolbar', 'CONTROL.html').code}<#t>
./View_Pos_Body_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent> </@ibizindent>
<#if view.isShowCaptionBar()> </#if>
<app-caption v-if="openType == 'EMBED'" :openType="openType" :caption="model.srfCaption"></app-caption> </div>
</#if> </div>
<#if view.isEnableQuickGroup()> </#if>
<app-quick-group :items="quickGroupModel" <#if appCounter??>:counterService="${appCounter.getCodeName()?lower_case}counterservice"</#if> @valuechange="quickGroupValueChange"></app-quick-group>
</#if>
</template>
<template #headerContent>
<#if view.isEnableQuickSearch()>
<div class="quick-search-container">
<i-input v-model="query" class='quick-search-input' @on-enter="onSearch($event)" placeholder="<@getQuickSearchPlaceholder view />" />
<i-button @click="onReset">重置</i-button>
<i-button type="primary" @click="onSearch">搜索</i-button>
</div>
</#if>
<#if view.getQuickPSDESearchForm()?? || view.hasPSControl('searchform') || view.hasPSControl('searchbar')>
<#-- <div class="search-form-toggle" @click="toggleSearchForm">
<i v-if="!isExpandSearchForm" class="el-icon-plus" />
<i v-else class="el-icon-minus" />
筛选条件
</div> -->
<#if view.hasPSControl('searchbar')>
${P.getCtrlCode('searchbar', 'CONTROL.html').code}
</#if>
</#if>
<#if view.getQuickPSDESearchForm()??>
<div class="quick-search-form-container">
<#assign quickSearchForm = view.getQuickPSDESearchForm() />
${P.getCtrlCode(quickSearchForm, 'CONTROL.html').code}
</div>
</#if>
<#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code}
</#if>
</template>
<template #headerBottom>
<#if view.hasPSControl('toolbar')>
<@ibizindent blank=8>
${P.getCtrlCode('toolbar', 'CONTROL.html').code}<#t>
</@ibizindent>
</#if>
</template>
</#if>
<#-- END:快速搜索或工具栏存在 --> <#-- END:快速搜索或工具栏存在 -->
<#if view.getViewType() != "DEGRIDVIEW9"> <#if view.getViewType() != "DEGRIDVIEW9">
<template #default> <#if view.hasPSControl('searchbar')>
${P.getCtrlCode('searchbar', 'CONTROL.html').code}
</#if>
<#if view.hasPSControl('searchform')>
${P.getCtrlCode('searchform', 'CONTROL.html').code}
</#if>
<#-- BEGIN:视图内容区视图消息 -->
<@ibizindent blank=8> <@ibizindent blank=8>
<#ibizinclude> <#ibizinclude>
./View_Pos_Body_Msgs.vue.ftl ./View_Pos_Body_Msgs.vue.ftl
</#ibizinclude> </#ibizinclude>
</@ibizindent> </@ibizindent>
<#if view.hasPSControl('grid')> <#-- END:视图内容区视图消息 -->
${P.getCtrlCode('grid', 'CONTROL.html').code} <#if view.hasPSControl('grid')>
</#if> ${P.getCtrlCode('grid', 'CONTROL.html').code}
</template> </#if>
</#if> </#if>
<template #footer>
<@ibizindent blank=8>
<#ibizinclude>
./View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
</template>
</#assign> </#assign>
<app-grid-view-layout class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>' :view-default-usage="viewDefaultUsage"> <div class='view-container ${view.getViewType()?lower_case} ${srffilepath2(view.getCodeName())}<#if view.getPSSysCss?? && view.getPSSysCss()??> ${view.getPSSysCss().getCssName()}</#if>'>
<card class='view-card <#if !view.isShowCaptionBar()> view-no-caption</#if>' :dis-hover="true" :bordered="false">
<@ibizindent blank=8>
<#ibizinclude>
./VIEW_CAPTION.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- BEGIN:视图顶部视图消息 -->
<@ibizindent blank=12> <@ibizindent blank=12>
<#ibizinclude> <#ibizinclude>
./VIEW_MD_CONTENT.vue.ftl ./View_Pos_Top_Msgs.vue.ftl
</#ibizinclude> </#ibizinclude>
</@ibizindent> </@ibizindent>
</app-grid-view-layout> <#-- END:视图顶部视图消息 -->
\ No newline at end of file <div class='content-container'>
<#-- BEGIN:视图内容 -->
<@ibizindent blank=12>
<#ibizinclude>
./VIEW_MD_CONTENT.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图内容 -->
</div>
<#-- BEGIN:视图底部视图消息 -->
<@ibizindent blank=12>
<#ibizinclude>
./View_Pos_Bottom_Msgs.vue.ftl
</#ibizinclude>
</@ibizindent>
<#-- END:视图底部视图消息 -->
</card>
</div>
\ No newline at end of file
...@@ -9,6 +9,6 @@ ...@@ -9,6 +9,6 @@
<span class='caption-image'><img src='${viewimg.getImagePath()}'/></span> <span class='caption-image'><img src='${viewimg.getImagePath()}'/></span>
</#if> </#if>
</#if> </#if>
<span class='caption-info' :title="model.srfCaption">{{model.srfCaption}}</span> <span class='caption-info' :title="$t(model.srfCaption)">{{$t(model.srfCaption)}}</span>
</div> </div>
</#if> </#if>
\ No newline at end of file
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<span class='caption-image'><img src='${viewimg.getImagePath()}'/></span> <span class='caption-image'><img src='${viewimg.getImagePath()}'/></span>
</#if> </#if>
</#if> </#if>
<span class='caption-info'>{{model.srfCaption}}</span> <span class='caption-info'>{{$t(model.srfCaption)}}</span>
</#if> </#if>
<#if view.hasPSControl('toolbar')> <#if view.hasPSControl('toolbar')>
<#if selfToolbarRender??> <#if selfToolbarRender??>
......
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.scss.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
.iframe-container{ .iframe-container{
height: 100%; height: 100%;
......
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.scss.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
.${srffilepath2(view.getCodeName())}{ .${srffilepath2(view.getCodeName())}{
display: block; display: block;
......
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.scss.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
.${srffilepath2(view.getCodeName())} { .${srffilepath2(view.getCodeName())} {
......
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.scss.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
.detabsearchview{ .detabsearchview{
.toolbars-container{ .toolbars-container{
......
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/DEFAULT.scss.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude> <#ibizinclude>
../@MACRO/DEFAULT.scss.ftl ../@MACRO/DEFAULT.less.ftl
</#ibizinclude> </#ibizinclude>
.${srffilepath2(view.getCodeName())}{ .${srffilepath2(view.getCodeName())}{
display: block; display: block;
......
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/DEFAULT.scss.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册