<#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>