<#if ctrl.getPortletType() != 'CONTAINER'> <#ibizinclude>../@MACRO/CONTROL/LANGBASE.vue.ftl</#ibizinclude> <#macro renderUiaction> <#if ctrl.getPSUIActionGroup?? && ctrl.getPSUIActionGroup()?? && ctrl.getPSUIActionGroup().getPSUIActionGroupDetails()??> <#assign UIActionDetails=ctrl.getPSUIActionGroup().getPSUIActionGroupDetails() /> <span class="portlet-action"> <#list UIActionDetails as uiactiondetail> <#if !uiactiondetail.isShowCaption()> <tooltip :transfer="true" :max-width="600"> </#if> <#if uiactiondetail.getPSUIAction?? && uiactiondetail.getPSUIAction()?? && uiactiondetail.getPSUIAction().getCodeName?? && uiactiondetail.getPSUIAction().getCodeName()??> <#assign uiactionname = uiactiondetail.getPSUIAction().getCodeName()?lower_case /> <#else> <#assign uiactionname = uiactiondetail.getName()?lower_case /> </#if> <a @click="uiAction('${uiactiondetail.getName()?lower_case}', $event)" v-show="uiactionModel['${uiactionname}'].visabled" :disabled="uiactionModel['${uiactionname}'].disabled"> <#if uiactiondetail.getPSUIAction()??> <#if uiactiondetail.isShowIcon()> <#if uiactiondetail.getPSUIAction().getPSSysImage()??> <#assign viewimg=uiactiondetail.getPSUIAction().getPSSysImage()/> <#if viewimg.getCssClass() != ''> <i class="${viewimg.getCssClass()}" /> <#else> <img src="${viewimg.getImagePath()}" /> </#if> </#if> </#if> <#-- <#if uiactiondetail.isShowCaption()><span><#if langbase??>{{$t('${langbase}.uiactions.${uiactiondetail.getPSUIAction().getUIActionTag()?lower_case}')}}<#else>${uiactiondetail.getPSUIAction().getCaption()}</#if></span></#if> --> <#if uiactiondetail.isShowCaption()> <span>${uiactiondetail.getPSUIAction().getCaption()}</span> </#if> </#if> </a> <#if !uiactiondetail.isShowCaption()> <div slot='content'>${uiactiondetail.getPSUIAction().getCaption()}</div> </tooltip> </#if> </#list> </span> </#if> </#macro> <template> <div class='portlet ${srffilepath2(ctrl.getCodeName())} <#if ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if>' :style="{<#if (ctrl.getHeight?? && ctrl.getHeight() gt 0)>'height': isAdaptiveSize ? 'calc(100% - 16px)' : getHeight,</#if><#if (ctrl.getWidth?? && ctrl.getWidth() gt 0)>'width': isAdaptiveSize ? 'calc(100% - 16px)' : (width ? width+'px' :'${ctrl.getWidth()?c}px')</#if>}"> <#if ctrl.getPortletType?? && ctrl.getPortletType()??><#t> <#-- 视图 --> <#if ctrl.getPortletType() == 'VIEW' && ctrl.getPortletPSAppView?? && ctrl.getPortletPSAppView()??><#t> <#if ctrl.isShowTitleBar() && ctrl.getTitle()??> <p class='portlet-title'> <span> <#if ctrl.getPSSysImage()??><i class='<#assign img=ctrl.getPSSysImage()><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if>'></i></#if> ${ctrl.getTitle()} </span> <#assign render_uiaction><@renderUiaction /></#assign> <@ibizindent blank=12> ${render_uiaction}<#t> </@ibizindent> </p> <el-divider class="divider"></el-divider> </#if> <div class="<#if ctrl.isShowTitleBar()>portlet-with-title<#else>portlet-without-title</#if>"> <#assign refview = ctrl.getPortletPSAppView()><#t> <${srffilepath2(refview.getCodeName())} :portletState="viewState" :viewdata="JSON.stringify(context)" :viewDefaultUsage="false" ></${srffilepath2(refview.getCodeName())}> </div> <#-- 菜单 --> <#elseif ctrl.getPortletType() == 'APPMENU'><#t> <#if ctrl.isShowTitleBar() && ctrl.getTitle()??> <p class='portlet-title'> <span> <#if ctrl.getPSSysImage()??><i class='<#assign img=ctrl.getPSSysImage()><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if>'></i></#if> ${ctrl.getTitle()} </span> <#assign render_uiaction><@renderUiaction /></#assign> <@ibizindent blank=12> ${render_uiaction}<#t> </@ibizindent> </p> <el-divider class="divider"></el-divider> </#if> <div class="<#if ctrl.isShowTitleBar()>portlet-with-title<#else>portlet-without-title</#if>"> <#assign appmenu = ctrl.getPSAppMenu()><#t> <@ibizindent blank=6> ${P.getCtrlCode(appmenu, 'CONTROL.html').code} </@ibizindent> </div> <#-- 自定义 --> <#elseif ctrl.getPortletType() == 'CUSTOM'> <#if ctrl.isShowTitleBar() && ctrl.getTitle()??> <p class='portlet-title'> <span> <#if ctrl.getPSSysImage()??><i class='<#assign img=ctrl.getPSSysImage()><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if>'></i></#if> ${ctrl.getTitle()} </span> <#assign render_uiaction><@renderUiaction /></#assign> <@ibizindent blank=12> ${render_uiaction}<#t> </@ibizindent> </p> <el-divider class="divider"></el-divider> </#if> <div class="<#if ctrl.isShowTitleBar()>portlet-with-title<#else>portlet-without-title</#if>"> <#if ctrl.render??> ${ctrl.render.code} <#else> <div>{{$t('app.portlet.noExtensions')}}</div> </#if> </div> <#-- 操作栏 --> <#elseif ctrl.getPortletType() == 'ACTIONBAR'> <#if ctrl.isShowTitleBar() && ctrl.getTitle()??> <p class='portlet-title'> <span> <#if ctrl.getPSSysImage()??><i class='<#assign img=ctrl.getPSSysImage()><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if>'></i></#if> ${ctrl.getTitle()} </span> </p> <el-divider class="divider"></el-divider> </#if> <div class="<#if ctrl.isShowTitleBar()>portlet-with-title<#else>portlet-without-title</#if>"> <#if ctrl.render??> ${ctrl.render.code} <#else> <app-actionbar :viewState="viewState" :uiService="appUIService" :items="actionBarModelData" @itemClick="handleItemClick"></app-actionbar> </#if> </div> <#-- HTML --> <#elseif ctrl.getPortletType() == 'HTML'> <#if ctrl.isShowTitleBar() && ctrl.getTitle()??> <p class='portlet-title'> <span> <#if ctrl.getPSSysImage()??><i class='<#assign img=ctrl.getPSSysImage()><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if>'></i></#if> ${ctrl.getTitle()} </span> <#assign render_uiaction><@renderUiaction /></#assign> <@ibizindent blank=12> ${render_uiaction}<#t> </@ibizindent> </p> <el-divider class="divider"></el-divider> </#if> <div class="<#if ctrl.isShowTitleBar()>portlet-with-title<#else>portlet-without-title</#if>"> <iframe src="<#if ctrl.getPageUrl()??>${ctrl.getPageUrl()}</#if>" style="height: <#if ctrl.getHeight() gt 0>${ctrl.getHeight()?c}<#else>400</#if>px;width: 100%;border-width: 0px;"></iframe> </div> <#-- 直接内容 --> <#elseif ctrl.getPortletType() == 'RAWITEM'> <#if ctrl.isShowTitleBar() && ctrl.getTitle()??> <p class='portlet-title'> <span> ${ctrl.getTitle()} </span> </p> <el-divider class="divider"></el-divider> </#if> <div class="<#if ctrl.isShowTitleBar()>portlet-with-title<#else>portlet-without-title</#if>"> <#if ctrl.render??> ${ctrl.render.code} <#else> <app-rawitem :viewparams="viewparams" :context="context" contentStyle="<#if ctrl.getPSSysCss()??>${ctrl.getPSSysCss().getCssName()}</#if>" sizeStyle="<#if ctrl.getRawItemHeight() gt 0>height: ${ctrl.getRawItemHeight()?c}px;</#if><#if ctrl.getRawItemWidth() gt 0>width: ${ctrl.getRawItemWidth()?c}px;</#if>" contentType="<#if ctrl.getContentType?? && ctrl.getContentType()??>${ctrl.getContentType()}</#if>" <#if ctrl.getHtmlContent?? && ctrl.getHtmlContent()??> :htmlContent='`${ctrl.getHtmlContent()}`' </#if> <#if ctrl.getPSSysImage?? && ctrl.getPSSysImage()??> <#assign img=ctrl.getPSSysImage()> <#if img.getCssClass()?? && (img.getCssClass()?length gt 0)> imageClass="${img.getCssClass()}"</#if></#if>> <#if ctrl.getContentType?? && ctrl.getContentType() == 'RAW'> ${ctrl.getRawContent()} </#if> </app-rawitem> </#if> </div> <#-- 其他部件 --> <#elseif ctrl.getContentPSControl()??><#t> <#if ctrl.isShowTitleBar() && ctrl.getTitle()??> <p class='portlet-title'> <span> <#if ctrl.getPSSysImage()??><i class='<#assign img=ctrl.getPSSysImage()><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)>${img.getCssClass()}</#if>'></i></#if> ${ctrl.getTitle()} </span> <#assign render_uiaction><@renderUiaction /></#assign> <@ibizindent blank=12> ${render_uiaction}<#t> </@ibizindent> </p> <el-divider class="divider"></el-divider> </#if> <div class="<#if ctrl.isShowTitleBar()>portlet-with-title<#else>portlet-without-title</#if>"> <#assign control = ctrl.getContentPSControl()><#t> <!-- 测试 --> <@ibizindent blank=6> ${P.getCtrlCode(control, 'CONTROL.html').code} </@ibizindent> </div> </#if> </#if> </div> </template> <#assign import_block> import UIService from '@/uiservice/ui-service'; import { Environment } from '@/environments/environment'; </#assign> <#ibizinclude> ../@MACRO/CONTROL/CONTROL_PORTLET-HEADER-BASE.vue.ftl </#ibizinclude> /** * 长度 * * @type {number} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ @Prop() public height?: number; /** * 宽度 * * @type {number} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ @Prop() public width?: number; /** * 门户部件类型 * * @type {number} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public portletType: string = '<#if ctrl.getPortletType?? && ctrl.getPortletType()??>${ctrl.getPortletType()?lower_case}</#if>'; /** * 视图默认使用 * * @type {string} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ @Inject({from:'navModel',default: 'tab'}) public navModel!:string; <#if ctrl.getPortletType() == 'ACTIONBAR'> /** * 操作栏模型数据 * * @returns {any[]} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public actionBarModelData:any[] =[ <#if ctrl.getPSAppViewLogics?? && ctrl.getPSAppViewLogics()??> <#list ctrl.getPSAppViewLogics() as appViewLogic> { viewlogicname:"${appViewLogic.name}", <#if appViewLogic.getPSAppViewUIAction?? && appViewLogic.getPSAppViewUIAction()??> <#assign viewUIAction = appViewLogic.getPSAppViewUIAction()/> <#if viewUIAction.getPSUIAction?? && viewUIAction.getPSUIAction()??> <#assign uiaction = viewUIAction.getPSUIAction() /> actionName:"${uiaction.getCaption()}", icon:"<#if uiaction.getIconCls?? && uiaction.getIconCls()??>${uiaction.getIconCls()}</#if>", <#if uiaction.getPSAppCounter?? && uiaction.getPSAppCounter()??> <#assign counter = uiaction.getPSAppCounter() /> counterService:this.${counter.getCodeName()?lower_case}counterservice, <#if uiaction.getCounterId()??>counterId:"${uiaction.getCounterId()}",</#if> noprivdisplaymode:<#if uiaction.getNoPrivDisplayMode(view)??>${uiaction.getNoPrivDisplayMode(view)}<#else>''</#if>, dataaccaction:'<#if uiaction.getDataAccessAction()??>${uiaction.getDataAccessAction()}</#if>', actiontarget:'<#if uiaction.getActionTarget()??>${uiaction.getActionTarget()}</#if>', </#if> visabled:true,disabled:false </#if> </#if> }<#if appViewLogic_has_next>,</#if> </#list> </#if> ]; /** * 触发界面行为 * * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public handleItemClick($event:any){ let data: any = $event.params && Object.keys($event.params).length > 0 ? $event.params : null; <#if ctrl.getPSAppViewLogics?? && ctrl.getPSAppViewLogics()??> <#list ctrl.getPSAppViewLogics() as appViewLogic> if(Object.is($event.tag,'${appViewLogic.name}')){ this.${appViewLogic.name}(data, $event.tag, $event.event); } </#list> </#if> } </#if> /** * 界面行为模型数据 * * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public uiactionModel: any = { <#if ctrl.getPSUIActionGroup?? && ctrl.getPSUIActionGroup()?? && ctrl.getPSUIActionGroup().getPSUIActionGroupDetails()??> <#assign UIActionDetails=ctrl.getPSUIActionGroup().getPSUIActionGroupDetails() /> <#list UIActionDetails as uiactiondetail> <#if uiactiondetail.getPSUIAction()??> <#assign uiaction = uiactiondetail.getPSUIAction() /> <#if uiaction.getCodeName?? && uiaction.getCodeName()??> <#assign uiactionname = uiaction.getCodeName()?lower_case /> <#else> <#assign uiactionname = uiactiondetail.getName()?lower_case /> </#if> ${uiactionname}: {name: '${uiactionname}', actiontarget: '${uiaction.getActionTarget()}', <#if uiactiondetail.isShowCaption()>caption: '<#if uiactiondetail.caption??>${uiactiondetail.caption}</#if>',</#if> disabled: false, type: '<#if uiactiondetail.getDetailType?? && uiactiondetail.getDetailType()??>${uiactiondetail.getDetailType()}</#if>', visabled: true, noprivdisplaymode: <#if uiaction.getNoPrivDisplayMode(view)??>${uiaction.getNoPrivDisplayMode(view)}</#if>, dataaccaction: '<#if uiaction.getDataAccessAction()??>${uiaction.getDataAccessAction()}</#if>', uiaction: { tag: '${uiaction.getUIActionTag()}', target: '${uiaction.getActionTarget()}' } }, </#if> </#list> </#if> } <#if ctrl.getPortletType?? && ctrl.getPortletType()?? && ctrl.getPortletType() == "TOOLBAR" > <#assign toolbar = ctrl.getContentPSControl()/> ${P.getCtrlCode(toolbar, 'CONTROL.vue').code} </#if> /** * 是否自适应大小 * * @returns {boolean} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ @Prop({default: false})public isAdaptiveSize!: boolean; /** * 获取多项数据 * * @returns {any[]} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public getDatas(): any[] { return []; } /** * 获取单项树 * * @returns {*} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public getData(): any { return {}; } /** * 获取高度 * * @returns {any[]} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ get getHeight(){ if(!this.$util.isEmpty(this.height) && !this.$util.isNumberNaN(this.height)){ if(this.height == 0){ return 'auto'; }else{ return this.height+'px'; } }else{ <#if ctrl.getHeight?? && ctrl.getHeight() gt 0> return '${ctrl.getHeight()?c}px'; <#else> return 'auto'; </#if> } } /** * 刷新 * * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public refresh(args?: any) { <#if ctrl.getPortletType?? && ctrl.getPortletType()?? && ctrl.getPortletType() == "VIEW"> this.viewState.next({ tag: '${ctrl.getPortletPSAppView().getName()}', action: 'refresh', data: args }); </#if> <#if ctrl.getPortletType?? && ctrl.getPortletType()?? && (ctrl.getPortletType() == "CHART" || ctrl.getPortletType() == "LIST")> this.viewState.next({ tag: '${ctrl.getContentPSControl().getName()}', action: 'refresh', data: args }); </#if> } /** * vue 生命周期 * * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public created() { this.afterCreated(); } /** * 执行created后的逻辑 * * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public afterCreated(){ if (this.viewState) { this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => { if(Object.is(tag, "all-portlet") && Object.is(action,'loadmodel')){ this.calcUIActionAuthState(data); } if (!Object.is(tag, this.name)) { return; } const refs: any = this.$refs; Object.keys(refs).forEach((_name: string) => { this.viewState.next({ tag: _name, action: action, data: data }); }); }); } } /** * vue 生命周期 * * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public destroyed() { this.afterDestroy(); } /** * 执行destroyed后的逻辑 * * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public afterDestroy() { if (this.viewStateEvent) { this.viewStateEvent.unsubscribe(); } <#if destroyed_block??> ${destroyed_block} </#if> } <#if ctrl.getPortletType() != 'ACTIONBAR'> <#if ctrl.getPSUIActionGroup?? && ctrl.getPSUIActionGroup()?? && ctrl.getPSUIActionGroup().getPSUIActionGroupDetails()??> <#assign UIActionDetails=ctrl.getPSUIActionGroup().getPSUIActionGroupDetails() /> /** * 执行界面行为 * * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public uiAction(tag:string,event:any){ <#list UIActionDetails as uiactiondetail> if(Object.is(tag,'${uiactiondetail.getName()?lower_case}')){ this.${ctrl.getName()?lower_case}_${uiactiondetail.getName()?lower_case}_click(null,tag,event); } </#list> } </#if> </#if> /** * 计算界面行为权限 * * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public calcUIActionAuthState(data:any = {}) { // 如果是操作栏,不计算权限 if(this.portletType && Object.is('actionbar', this.portletType)) { return; } let _this: any = this; let uiservice: any = _this.appUIService ? _this.appUIService : new UIService(_this.$store); if(_this.uiactionModel){ ViewTool.calcActionItemAuthState(data,_this.uiactionModel,uiservice); } } <#ibizinclude> ../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl </#ibizinclude> <#ibizinclude> ../@MACRO/CONTROL/CONTROL-BASE.style.ftl </#ibizinclude> </#if>