import { Vue, Component, Prop, Emit } from 'vue-property-decorator';
import { Util } from '@ibizstudio/runtime';
import './app-header-right-menus.less';
/**
* 应用头部菜单
*
* @export
* @class AppHeaderMenus
* @extends {Vue}
*/
@Component({})
export class AppHeaderRightMenus extends Vue {
/**
* 部件名称
*
* @type {string}
* @memberof AppHeaderRightMenus
*/
@Prop()
ctrlName!: string;
/**
* 菜单
*
* @type {any[]}
* @memberof AppHeaderRightMenus
*/
@Prop({ default: () => [] })
menus!: any[];
/**
* 模型服务对象
*
* @memberof AppStyle2DefaultLayout
*/
@Prop() modelService!:any;
/**
* 菜单项点击
*
* @param {*} item
* @returns {*}
* @memberof AppHeaderRightMenus
*/
@Emit('menu-click')
menuClick(item: any): any {}
/**
* 组件创建完毕
*
* @memberof AppHeaderRightMenus
*/
mounted(): void {
this.$nextTick(() => {
if (this.$route.matched && this.$route.matched.length > 1) {
return;
}
const openDefault = this.findDefaultOpen(this.menus);
if (openDefault) {
this.menuClick(openDefault);
}
});
}
/**
* 查找默认打开视图
*
* @protected
* @param {any[]} items
* @returns {*}
* @memberof AppHeaderRightMenus
*/
protected findDefaultOpen(items: any[]): any {
if (items) {
return items.find((item: any) => {
let data: any;
if (item && item.getPSAppMenuItems && Util.typeOf(item.getPSAppMenuItems) === 'array') {
data = this.findDefaultOpen(item.getPSAppMenuItems);
} else {
if (item.opendefault === true) {
data = item;
}
}
return data;
});
}
}
/**
* 菜单项选中
*
* @protected
* @param {string} name
* @memberof AppHeaderRightMenus
*/
protected onSelect(name: string): void {
const item: any = this.findMenuByName(name);
if (item) {
this.menuClick(item);
}
}
/**
* 根据名称查找菜单项
*
* @protected
* @param {string} name
* @param {any[]} [menus=this.menus]
* @returns {*}
* @memberof AppHeaderRightMenus
*/
protected findMenuByName(name: string, menus: any[] = this.menus): any {
let item: any;
menus.find((menu: any) => {
if (Object.is(menu.name, name)) {
item = menu;
return menu;
}
if (menu.getPSAppMenuItems) {
const subItem: any = this.findMenuByName(name, menu.getPSAppMenuItems);
if (subItem) {
item = subItem;
return subItem;
}
}
});
return item;
}
/**
* 绘制菜单
*
* @protected
* @param {*} items
* @returns {*}
* @memberof AppHeaderRightMenus
*/
protected renderMenus(items: any[]): any {
return items.map((item: any) => {
if (item.getPSAppMenuItems) {
return this.renderSubMenu(item);
}
return this.renderMenuItem(item);
});
}
/**
* 绘制菜单项
*
* @protected
* @param {*} item
* @returns {*}
* @memberof AppHeaderRightMenus
*/
protected renderMenuItem(item: any): any {
if (item.hidden) {
return;
}
return (
);
}
/**
* 绘制菜单分组
*
* @protected
* @param {*} item
* @returns {*}
* @memberof AppHeaderRightMenus
*/
protected renderSubMenu(item: any): any {
if (item.hidden) {
return;
}
return (