多维表格
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

142 lines
2.8 KiB

<script lang="ts" setup>
const route = useRoute()
interface BreadcrumbType {
title: string
active?: boolean
path?: string
}
const { t } = useI18n()
const breadcrumb = computed<BreadcrumbType[]>(() => {
const payload: BreadcrumbType[] = [
{
title: 'Account',
},
]
switch (route.params.page) {
case 'profile': {
payload.push({
title: t('labels.profile'),
active: true,
})
break
}
case 'tokens': {
payload.push({
title: t('title.tokens'),
active: true,
})
break
}
case 'audit': {
payload.push({
title: t('title.auditLogs'),
active: true,
})
break
}
case 'apps': {
payload.push({
title: t('title.appStore'),
active: true,
})
break
}
}
switch (route.params.nestedPage) {
case 'password-reset': {
payload.push(
...[
{
title: t('objects.users'),
},
{
title: t('title.resetPasswordMenu'),
active: true,
},
],
)
break
}
case 'settings': {
payload.push(
...[
{
title: t('objects.users'),
},
{
title: t('activity.settings'),
active: true,
},
],
)
break
}
}
if (route.path.startsWith('/account/setup')) {
payload.push({
title: t('labels.setup'),
active: !route.params.nestedPage,
path: '/account/setup',
})
if (route.params.nestedPage) {
payload.push({
title: route.params.nestedPage,
active: !route.params.app,
path: `/account/setup/${route.params.nestedPage}`,
})
}
if (route.params.app) {
payload.push({
title: route.params.app,
active: true,
})
}
} else if ((route.params.page === undefined && route.params.nestedPage === '') || route.params.nestedPage === 'list') {
payload.push(
...[
{
title: t('objects.users'),
},
{
title: t('title.userManagement'),
active: true,
},
],
)
}
return payload
})
const onClick = async (item: BreadcrumbType) => {
if (item.path && !item.active) {
await navigateTo(item.path)
}
}
</script>
<template>
<div class="nc-breadcrumb">
<template v-for="(item, i) of breadcrumb" :key="i">
<div
class="nc-breadcrumb-item capitalize"
:class="{
'active': item.active,
'cursor-pointer': item.path && !item.active,
}"
@click="onClick(item)"
>
{{ item.title }}
</div>
<GeneralIcon v-if="i !== breadcrumb.length - 1" icon="ncSlash1" class="nc-breadcrumb-divider" />
</template>
</div>
</template>