初始化
This commit is contained in:
27
app/composables/useMenu.ts
Normal file
27
app/composables/useMenu.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import type { NavItem } from '@/config/nav'
|
||||
import type { CmsNavigation } from '@/api/cms/cmsNavigation/model'
|
||||
|
||||
/**
|
||||
* 获取菜单状态 (响应式)
|
||||
* 与模板项目的 useMenu() 对齐,使用 useState 跨组件共享
|
||||
*/
|
||||
export const useMenu = () => {
|
||||
return useState<NavItem[]>('menu', () => [])
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 CmsNavigation 树映射为 NavItem 树
|
||||
*/
|
||||
export function mapNavItem(tree: CmsNavigation[]): NavItem[] {
|
||||
return (tree || [])
|
||||
.filter(item => !item.hide) // 过滤隐藏项
|
||||
.sort((a, b) => (a.sortNumber ?? 0) - (b.sortNumber ?? 0))
|
||||
.map(item => ({
|
||||
key: item.code || String(item.navigationId),
|
||||
label: item.title || '',
|
||||
to: item.path || '/',
|
||||
href: item.target === '_blank' ? item.path : undefined,
|
||||
badge: undefined, // 后端暂无 badge 字段,按需扩展
|
||||
children: item.children?.length ? mapNavItem(item.children) : undefined,
|
||||
}))
|
||||
}
|
||||
Reference in New Issue
Block a user