feat: portal tenant apply flow

This commit is contained in:
2025-12-25 11:12:11 +08:00
parent 81240fa0d1
commit 03117b827b
15 changed files with 691 additions and 12 deletions

View File

@@ -11,7 +11,7 @@ const { toggleMenu, toggleDarkMode, isDarkTheme } = useLayout();
const toast = useToast();
const router = useRouter();
const { state: sessionState, isLoggedIn, username } = useSession();
const { state: sessionState, isLoggedIn, username, isTenantApproved } = useSession();
const userMenuRef = ref();
@@ -20,6 +20,24 @@ const displayName = computed(() => {
return username.value || '用户';
});
const tenantApplyAction = computed(() => {
const app = sessionState.tenantApplication;
if (!isLoggedIn.value) return null;
if (isTenantApproved.value) return null;
if (app?.hasApplication) {
if (app.status === 'pending_verify') {
return { label: '创作者审核中', to: '/tenant/apply/status', icon: 'pi pi-hourglass' };
}
if (app.status === 'banned') {
return { label: '创作者申请结果', to: '/tenant/apply/status', icon: 'pi pi-info-circle' };
}
return { label: '创作者申请', to: '/tenant/apply/status', icon: 'pi pi-info-circle' };
}
return { label: '申请创作者', to: '/tenant/apply', icon: 'pi pi-star' };
});
const userMenuItems = computed(() => [
{ label: '个人中心', icon: 'pi pi-user', command: () => router.push('/me') },
{ separator: true },
@@ -94,8 +112,12 @@ onMounted(() => {
<div class="layout-topbar-menu hidden lg:block">
<div class="layout-topbar-menu-content">
<template v-if="isLoggedIn">
<router-link v-if="tenantApplyAction" :to="tenantApplyAction.to" class="layout-topbar-action layout-topbar-action-text">
<i :class="tenantApplyAction.icon"></i>
<span>{{ tenantApplyAction.label }}</span>
</router-link>
<button type="button" class="layout-topbar-action layout-topbar-user" @click="toggleUserMenu">
<Avatar shape="circle" class="bg-surface-200 dark:bg-surface-700" />
<Avatar shape="circle" size="large" class="bg-surface-200 dark:bg-surface-700" />
<span>{{ displayName }}</span>
<i class="pi pi-angle-down"></i>
</button>