<template> <#if ctrl.render??> ${ctrl.render.code} <#else> <div class='app-dr-bar<#if ctrl.getPSSysCss?? && ctrl.getPSSysCss()??><#assign singleCss = ctrl.getPSSysCss()> ${singleCss.getCssName()}</#if>' :style="{ width: <#noparse>`${width}px`</#noparse> }"> <el-menu :mode="menuDir" :default-openeds="defaultOpeneds" :default-active="selection ? selection.id : ''" @select="onSelect" @open="onOpen" @close="onClose"> <app-sider-menus :menus="items"></app-sider-menus> </el-menu> </div> </#if> </template> <#ibizinclude> ../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl </#ibizinclude> <#ibizinclude> ../@MACRO/FUNC/MACRO.ftl </#ibizinclude> /** * 菜单方向 * @type {('horizontal' | 'vertical')} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ @Prop({ default: 'vertical' }) public menuDir?: 'horizontal' | 'vertical'; /** * 获取多项数据 * * @returns {any[]} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public getDatas(): any[] { return this.items; } /** * 获取单项树 * * @returns {*} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public getData(): any { return this.selection; } /** * 加载行为 * * @type {string} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ @Prop() public loadAction?: string; /** * 表单数据 * * @type {*} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public formData: any = {}; /** * 数据选中项 * * @type {*} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public selection: any = {}; /** * 关系栏数据项 * * @type {any[]} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public items: any[] = [ <#if ctrl.getPSDEDRBarGroups?? && ctrl.getPSDEDRBarGroups()??> <#list ctrl.getPSDEDRBarGroups() as group> { text: '${group.getCaption()}', id: '<#if group.getId?? && group.getId()??>${group.getId()}</#if>', name: '<#if group.getId?? && group.getId()??>${group.getId()}</#if>', codeName: '<#if group.getId?? && group.getId()??>${group.getId()}</#if>', hidden: <#if group.isHidden?? && group.isHidden()>true<#else>false</#if>, <#if group.getPSDEDRBarItems?? && group.getPSDEDRBarItems()??> items: [ <#list group.getPSDEDRBarItems() as drItem> { text: "${drItem.getCaption()}", disabled: false, id: "${drItem.getName()?lower_case}", <#if drItem.getPSSysImage()??> iconcls: '${drItem.getPSSysImage().getCssClass()}', icon: '${drItem.getPSSysImage().getImagePath()}', </#if> <#if drItem.getPSDEDRBarGroup?? && drItem.getPSDEDRBarGroup()??> groupCodeName: '<#if drItem.getPSDEDRBarGroup().getId?? && drItem.getPSDEDRBarGroup().getId()??>${drItem.getPSDEDRBarGroup().getId()}</#if>', </#if> <#if drItem.getPSAppView?? && drItem.getPSAppView()??> navView: '${srffilepath2(drItem.getPSAppView().codeName)}', </#if> localContext:<#if drItem.getPSNavigateContexts?? && drItem.getPSNavigateContexts()??><@getNavigateContext drItem /><#else>null</#if>, localViewParam:<#if drItem.getPSNavigateParams?? && drItem.getPSNavigateParams()??><@getNavigateParams drItem /><#else>null</#if> }, </#list> ] </#if> }, </#list> </#if> <#if ctrl.getPSDEDRCtrlItems?? && ctrl.getPSDEDRCtrlItems()??> <#list ctrl.getPSDEDRCtrlItems() as drItem> <#if !(drItem.getPSDEDRBarGroup?? && drItem.getPSDEDRBarGroup()??)> { text: "${drItem.getCaption()}", disabled: false, id: "${drItem.getName()?lower_case}", <#if drItem.getPSSysImage()??> iconcls: '${drItem.getPSSysImage().getCssClass()}', icon: '${drItem.getPSSysImage().getImagePath()}', </#if> <#if drItem.getPSDEDRBarGroup?? && drItem.getPSDEDRBarGroup()??> groupCodeName: '<#if drItem.getPSDEDRBarGroup().getId?? && drItem.getPSDEDRBarGroup().getId()??>${drItem.getPSDEDRBarGroup().getId()}</#if>', </#if> <#if drItem.getPSAppView?? && drItem.getPSAppView()??> navView: '${srffilepath2(drItem.getPSAppView().codeName)}', </#if> localContext:<#if drItem.getPSNavigateContexts?? && drItem.getPSNavigateContexts()??><@getNavigateContext drItem /><#else>null</#if>, localViewParam:<#if drItem.getPSNavigateParams?? && drItem.getPSNavigateParams()??><@getNavigateParams drItem /><#else>null</#if> } </#if> </#list> </#if> ] /** * 默认打开项 * * @type {string[]} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public defaultOpeneds: string[] = []; /** * 父数据 * * @public * @type {*} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public parentData: any = {}; /** * 宽度 * * @type {number} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public width: number = <#if ctrl.getWidth() gt 240><#else>240</#if>; /** * 生命周期 * * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public created(): void { 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, this.name)) { return; } if (Object.is('state', action)) { this.handleFormChange(data); } if (Object.is('change', action)) { this.selection = 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> } /** * 处理数据 * * @public * @param {any[]} items * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public dataProcess(items: any[]): void { items.forEach((_item: any) => { if (_item.expanded) { this.defaultOpeneds.push(_item.id); } _item.disabled = false; if (_item.items && Array.isArray(_item.items) && _item.items.length > 0) { this.dataProcess(_item.items); } }); } /** * 获取子项 * * @param {any[]} items * @param {string} id * @returns {*} * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public getItem(items: any[], id: string): any { const item: any = {}; items.some((_item: any) => { if (Object.is(_item.id, id)) { Object.assign(item, _item); return true; } if (_item.items && _item.items.length > 0) { const subItem = this.getItem(_item.items, id); if (Object.keys(subItem).length > 0) { Object.assign(item, subItem); return true; } } return false; }); return item; } /** * 节点选中 * * @param {*} $event * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public onSelect(key: string): void { if (key === this.selection.id) { return; } const selectItem = this.getItem(this.items, key); if (!selectItem) { return; } const tempContext = Util.deepCopy(this.context); const tempViewParams = Util.deepCopy(this.viewparams); if (selectItem.localContext && Object.keys(selectItem.localContext).length > 0) { const _context: any = this.$util.computedNavData(this.formData, tempContext, tempViewParams, selectItem.localContext); Object.assign(tempContext, _context); } if (this.formData.srfparentkey) { Object.assign(tempContext, { srfparentkey: this.formData.srfparentkey }); Object.assign(tempViewParams, { srfparentkey: this.formData.srfparentkey }); } if (selectItem.localViewParam && Object.keys(selectItem.localViewParam).length > 0) { const _params: any = this.$util.computedNavData(this.formData, tempContext, tempViewParams, selectItem.localViewParam); Object.assign(tempViewParams, _params); } if (this.formData.srfparentdename) { Object.assign(tempContext, { srfparentdename: this.formData.srfparentdename }); Object.assign(tempViewParams, { srfparentdename: this.formData.srfparentdename }); } const drItem = { id: selectItem.id, navView: selectItem.navView, srfnavdata: { context: tempContext, viewparams: tempViewParams } } this.$emit('selectionchange', drItem); } /** * 处理表单变化 * * @param {*} $event * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public handleFormChange(args: any) { if (args && Object.is(args.srfuf, '1')) { this.setDisabled(this.items, false); } else { this.setDisabled(this.items, true); } this.formData = args; } /** * 子节点打开 * * @param {*} $event * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public onOpen($event: any): void { const item = this.getItem(this.items, $event); if (Object.is(item.id, this.selection.id)) { return; } this.selection = {}; Object.assign(this.selection, item); if (Object.is(item.id, 'form') || (item.viewname && !Object.is(item.viewname, ''))) { this.$emit('selectionchange', [this.selection]); } } /** * 子节点关闭 * * @param {*} $event * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public onClose($event: any): void { const item = this.getItem(this.items, $event); if (Object.is(item.id, this.selection.id)) { return; } this.selection = {}; Object.assign(this.selection, item); if (Object.is(item.id, 'form') || (item.viewname && !Object.is(item.viewname, ''))) { this.$emit('selectionchange', [this.selection]); } } /** * 设置禁用状态 * * @memberof ${srfclassname('${ctrl.codeName}')}Base */ public setDisabled(items: any[], state: boolean) { items.forEach((item: any) => { item.disabled = state; if (item && item.items && item.items.length > 0) { this.setDisabled(item.items, state); } }) } <#ibizinclude> ../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl </#ibizinclude> <#ibizinclude> ../@MACRO/CONTROL/CONTROL-BASE.style.ftl </#ibizinclude>