forked from EduCraft/curriculum-project-hub
7f09fb1f13
Silo hostname already carries tenancy. Admin SPA routes become /admin/..., legacy bookmarks redirect, login lands on /admin. Co-authored-by: Hong Jiarong <me@jrhim.com> Co-committed-by: Hong Jiarong <me@jrhim.com>
44 lines
1.3 KiB
Svelte
44 lines
1.3 KiB
Svelte
<script lang="ts">
|
|
import { onMount } from 'svelte';
|
|
import { goto } from '$app/navigation';
|
|
import { session, redirectToLogin } from '$lib/session';
|
|
|
|
function homeForSession(): string | null {
|
|
const me = $session.me;
|
|
if (!me) return null;
|
|
const admin = me.organizations.find((o) => {
|
|
const r = String(o.role ?? '').toUpperCase();
|
|
return r === 'OWNER' || r === 'ADMIN';
|
|
});
|
|
const target = admin ?? me.organizations[0];
|
|
return target ? `/admin` : null;
|
|
}
|
|
|
|
onMount(() => {
|
|
const unsub = session.subscribe((s) => {
|
|
if (s.loading) return;
|
|
if (!s.me) {
|
|
redirectToLogin();
|
|
return;
|
|
}
|
|
const dest = homeForSession();
|
|
if (dest) void goto(dest, { replaceState: true });
|
|
});
|
|
return unsub;
|
|
});
|
|
</script>
|
|
|
|
<div class="saas-status-panel">
|
|
<div class="flex flex-col items-center gap-3 text-surface-600">
|
|
<svg class="h-7 w-7 animate-spin text-primary-500" viewBox="0 0 24 24" fill="none">
|
|
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
|
<path
|
|
class="opacity-90"
|
|
fill="currentColor"
|
|
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
|
|
></path>
|
|
</svg>
|
|
<p class="text-sm">正在进入工作台…</p>
|
|
</div>
|
|
</div>
|