修复菜单消失

This commit is contained in:
super
2026-06-10 17:52:58 +08:00
parent c3d43aa26a
commit c9efdf8b0e
6 changed files with 193 additions and 26 deletions

View File

@@ -71,6 +71,8 @@ type NavItem = {
key: string
label: string
href?: string
columnKey?: string
aliases?: ReadonlyArray<string>
}
type NavGroup = {
@@ -79,17 +81,21 @@ type NavGroup = {
items: ReadonlyArray<NavItem>
}
const props = defineProps<{
const props = withDefaults(defineProps<{
active: ActiveNavKey
showNav?: boolean
showHomeLink?: boolean
showActions?: boolean
}>()
}>(), {
showNav: true,
showHomeLink: true,
showActions: true,
})
const active = props.active
const showNav = props.showNav ?? true
const showHomeLink = props.showHomeLink ?? true
const showActions = props.showActions ?? true
const showNav = props.showNav
const showHomeLink = props.showHomeLink
const showActions = props.showActions
const allowedColumnKeys = ref<string[] | null>(null)
const navGroups: ReadonlyArray<NavGroup> = [
@@ -115,7 +121,7 @@ const navGroups: ReadonlyArray<NavGroup> = [
{ key: 'delete-brand', label: '删除ASIN', href: '/new_web_source/delete-brand.html' },
{ key: 'product-risk', label: '商品风险解决', href: '/new_web_source/product-risk.html' },
{ key: 'shop-match', label: '定时匹配', href: '/new_web_source/shop-match.html' },
{ key: 'pricing', label: '跟价', href: '/new_web_source/price-track.html' },
{ key: 'pricing', label: '跟价', href: '/new_web_source/price-track.html', aliases: ['price-track'] },
{ key: 'patrol-delete', label: '巡店删除', href: '/new_web_source/patrol-delete.html' },
{ key: 'query-asin', label: '查询ASIN', href: '/new_web_source/query-asin.html' },
{ key: 'withdraw', label: '取款' },
@@ -132,12 +138,29 @@ const navGroups: ReadonlyArray<NavGroup> = [
},
]
function getItemPermissionKeys(item: NavItem) {
return [item.key, item.columnKey, ...(item.aliases || [])]
.map((key) => String(key || '').trim().toLowerCase())
.filter(Boolean)
}
const visibleNavGroups = computed(() => {
if (allowedColumnKeys.value === null) {
return navGroups
}
const allowedSet = new Set(allowedColumnKeys.value)
return navGroups.filter((group) => allowedSet.has(group.columnKey))
const groups = navGroups.flatMap((group) => {
if (allowedSet.has(group.columnKey)) {
return [group]
}
const items = group.items.filter((item) =>
getItemPermissionKeys(item).some((key) => allowedSet.has(key)),
)
return items.length ? [{ ...group, items }] : []
})
return groups.length ? groups : navGroups
})
onMounted(async () => {