diff --git a/admin/src/components/layout/authenticated-layout.tsx b/admin/src/components/layout/authenticated-layout.tsx
index 5306774e..7716dac0 100644
--- a/admin/src/components/layout/authenticated-layout.tsx
+++ b/admin/src/components/layout/authenticated-layout.tsx
@@ -20,9 +20,25 @@ export function AuthenticatedLayout({ children }: AuthenticatedLayoutProps) {
const { auth } = useAuthStore()
const navigate = useNavigate()
const location = useLocation()
- const [ready, setReady] = useState(!auth.accessToken)
+ // demo 模式(GitHub Pages 预览):跳过登录校验,直接放行看 UI
+ const demoMode = import.meta.env.VITE_DEMO_MODE === '1'
+ const [ready, setReady] = useState(!auth.accessToken || demoMode)
useEffect(() => {
+ if (demoMode) {
+ if (!auth.user) {
+ auth.setUser({
+ accountNo: 'demo',
+ email: 'demo@cloudsteps.example',
+ role: ['admin'],
+ exp: Date.now() + 24 * 60 * 60 * 1000,
+ displayName: '演示账号',
+ username: 'demo',
+ })
+ }
+ return
+ }
+
if (!auth.accessToken) {
navigate({
to: '/sign-in',
@@ -86,7 +102,7 @@ export function AuthenticatedLayout({ children }: AuthenticatedLayoutProps) {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [auth.accessToken])
- if (!auth.accessToken || !ready) {
+ if ((!auth.accessToken && !demoMode) || !ready) {
return (
正在验证登录状态…
diff --git a/admin/src/features/scenario-sessions/index.tsx b/admin/src/features/scenario-sessions/index.tsx
index a9cbd689..55c316e8 100644
--- a/admin/src/features/scenario-sessions/index.tsx
+++ b/admin/src/features/scenario-sessions/index.tsx
@@ -2,8 +2,8 @@ import { useEffect, useState } from 'react'
import { Eye, Loader2 } from 'lucide-react'
import { toast } from 'sonner'
import { get } from '@/lib/api'
+import { Badge } from '@/components/ui/badge'
import { Button } from '@/components/ui/button'
-import { Input } from '@/components/ui/input'
import {
Table,
TableBody,
@@ -12,7 +12,6 @@ import {
TableHeader,
TableRow,
} from '@/components/ui/table'
-import { Badge } from '@/components/ui/badge'
import { AdminPage } from '@/components/admin-page'
import { UserPicker } from '@/features/inbox-notifications/user-picker'
import {
@@ -98,11 +97,7 @@ export function ScenarioSessionsPage() {
{userId && (
-