改造后台权限和APP权限

This commit is contained in:
super
2026-04-19 15:06:09 +08:00
parent d5764f3b50
commit 8db9f3a408
23 changed files with 1343 additions and 36 deletions

View File

@@ -7,8 +7,8 @@
<nav class="nav-sections" aria-label="顶部功能导航">
<section
v-for="group in navGroups"
:key="group.label"
v-for="group in visibleNavGroups"
:key="group.columnKey"
class="nav-section"
>
<div class="nav-section-title">{{ group.label }}</div>
@@ -39,6 +39,10 @@
</template>
<script setup lang="ts">
import { computed, onMounted, ref } from 'vue'
import { getCurrentUserAppColumnKeys } from '@/shared/api/permission'
type ActiveNavKey =
| 'brand'
| 'dedupe'
@@ -55,14 +59,22 @@ type NavItem = {
href?: string
}
type NavGroup = {
columnKey: string
label: string
items: ReadonlyArray<NavItem>
}
const props = defineProps<{
active: ActiveNavKey
}>()
const active = props.active
const allowedColumnKeys = ref<string[] | null>(null)
const navGroups: ReadonlyArray<{ label: string; items: ReadonlyArray<NavItem> }> = [
const navGroups: ReadonlyArray<NavGroup> = [
{
columnKey: 'brand_front_tools',
label: '前端工具',
items: [
{ key: 'collect', label: '采集数据' },
@@ -74,6 +86,7 @@ const navGroups: ReadonlyArray<{ label: string; items: ReadonlyArray<NavItem> }>
],
},
{
columnKey: 'brand_operation_tools',
label: '运营工具',
items: [
{ key: 'delete-brand', label: '删除ASIN', href: '/new_web_source/delete-brand.html' },
@@ -86,6 +99,7 @@ const navGroups: ReadonlyArray<{ label: string; items: ReadonlyArray<NavItem> }>
],
},
{
columnKey: 'brand_logistics_tools',
label: '后勤工具',
items: [
{ key: 'purchase', label: '采购' },
@@ -93,6 +107,22 @@ const navGroups: ReadonlyArray<{ label: string; items: ReadonlyArray<NavItem> }>
],
},
]
const visibleNavGroups = computed(() => {
if (allowedColumnKeys.value === null) {
return navGroups
}
const allowedSet = new Set(allowedColumnKeys.value)
return navGroups.filter((group) => allowedSet.has(group.columnKey))
})
onMounted(async () => {
try {
allowedColumnKeys.value = await getCurrentUserAppColumnKeys()
} catch (_error) {
allowedColumnKeys.value = null
}
})
</script>
<style scoped>