feat(admin): read live back-office data in every console view

Models, pipelines, users, subscriptions, usage, audit log, ads, and releases
still rendered placeholder or duplicated implementations from the earlier
admin split. They now read the live back-office API, share one sidebar and
console theme, and the license issuer dialog uses the rotated signing key.
This commit is contained in:
Yun Chan 2026-09-16 23:24:35 +09:00
parent cfc58458a8
commit 5aa268970a
23 changed files with 187 additions and 174 deletions

View file

@ -168,14 +168,14 @@ export function AdminSidebar({ identity }: {
height: '100%',
display: 'flex',
flexDirection: 'column',
bgcolor: 'rgba(11, 16, 31, 0.82)',
bgcolor: 'var(--d3-bg-card-soft)',
backdropFilter: 'blur(28px)',
border: `1px solid ${C.border}`,
borderRadius: '22px',
flexShrink: 0,
position: 'relative',
overflow: 'hidden',
boxShadow: '0 24px 60px rgba(3, 7, 18, 0.7), inset 0 1px 0 rgba(148, 180, 255, 0.1)',
boxShadow: '0 24px 60px var(--d3-scrim), inset 0 1px 0 var(--d3-glass-hairlineStrong)',
}}
>
{/* Top Ambient Sheen */}
@ -186,7 +186,7 @@ export function AdminSidebar({ identity }: {
left: 0,
right: 0,
height: 120,
background: 'radial-gradient(ellipse 80% 60% at 50% -10%, rgba(59, 130, 246, 0.18) 0%, transparent 80%)',
background: 'radial-gradient(ellipse 80% 60% at 50% -10%, var(--d3-accent-glow) 0%, transparent 80%)',
pointerEvents: 'none',
}}
/>
@ -210,11 +210,11 @@ export function AdminSidebar({ identity }: {
width: 34,
height: 34,
borderRadius: '10px',
background: 'linear-gradient(135deg, #06b6d4 0%, #3b82f6 50%, #8b5cf6 100%)',
background: 'linear-gradient(135deg, var(--d3-tag-cyan) 0%, var(--d3-accent-main) 50%, var(--d3-tag-purple) 100%)',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
boxShadow: '0 0 20px rgba(59, 130, 246, 0.45)',
boxShadow: '0 0 20px var(--d3-accent-glow)',
}}
>
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#ffffff" strokeWidth="2.2">
@ -260,8 +260,8 @@ export function AdminSidebar({ identity }: {
px: 1,
py: 0.35,
borderRadius: '999px',
bgcolor: 'rgba(16, 185, 129, 0.12)',
border: '1px solid rgba(16, 185, 129, 0.25)',
bgcolor: 'var(--d3-status-success)',
border: '1px solid var(--d3-status-success)',
}}
>
<Box
@ -269,12 +269,12 @@ export function AdminSidebar({ identity }: {
width: 6,
height: 6,
borderRadius: '50%',
bgcolor: '#10b981',
boxShadow: '0 0 8px #10b981',
bgcolor: 'var(--d3-status-success)',
boxShadow: '0 0 8px var(--d3-status-success)',
animation: 'pulse-ring 2s infinite',
}}
/>
<Typography sx={{ fontFamily: FONT_MONO, fontSize: '9px', fontWeight: 600, color: '#34d399' }}>
<Typography sx={{ fontFamily: FONT_MONO, fontSize: '9px', fontWeight: 600, color: 'var(--d3-status-success)' }}>
SESSION
</Typography>
</Box>
@ -328,14 +328,14 @@ export function AdminSidebar({ identity }: {
borderRadius: '12px',
cursor: 'pointer',
position: 'relative',
border: `1px solid ${active ? 'rgba(59, 130, 246, 0.35)' : 'transparent'}`,
bgcolor: active ? 'rgba(59, 130, 246, 0.14)' : 'transparent',
border: `1px solid ${active ? 'var(--d3-accent-glow)' : 'transparent'}`,
bgcolor: active ? 'var(--d3-accent-glow)' : 'transparent',
color: active ? C.bright : C.text,
boxShadow: active ? '0 0 20px rgba(59, 130, 246, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1)' : 'none',
boxShadow: active ? '0 0 20px var(--d3-accent-glow), inset 0 1px 0 var(--d3-overlay-strong)' : 'none',
transition: 'all 0.18s cubic-bezier(0.16, 1, 0.3, 1)',
'&:hover': {
bgcolor: active ? 'rgba(59, 130, 246, 0.2)' : 'rgba(26, 38, 68, 0.5)',
borderColor: active ? 'rgba(96, 165, 250, 0.5)' : C.border,
bgcolor: active ? 'var(--d3-accent-glow)' : 'var(--d3-bg-raised-soft)',
borderColor: active ? 'var(--d3-accent-light)' : C.border,
color: C.bright,
transform: 'translateX(3px)',
},
@ -379,7 +379,7 @@ export function AdminSidebar({ identity }: {
<Box
sx={{
p: 2,
bgcolor: 'rgba(10, 14, 28, 0.95)',
bgcolor: 'var(--d3-bg-inset-soft)',
borderTop: `1px solid ${C.border}`,
position: 'relative',
zIndex: 1,
@ -393,7 +393,7 @@ export function AdminSidebar({ identity }: {
p: 1.25,
borderRadius: '12px',
border: `1px solid ${C.borderHl}`,
bgcolor: 'rgba(17, 26, 48, 0.5)',
bgcolor: 'var(--d3-bg-card-soft)',
transition: 'border-color 0.15s ease',
'&:hover': {
borderColor: C.accentLight,
@ -406,14 +406,14 @@ export function AdminSidebar({ identity }: {
width: 32,
height: 32,
borderRadius: '8px',
background: 'linear-gradient(135deg, #1d4ed8 0%, #3b82f6 100%)',
background: 'linear-gradient(135deg, var(--d3-accent-dark) 0%, var(--d3-accent-main) 100%)',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontWeight: 500,
fontSize: '13px',
color: '#ffffff',
boxShadow: '0 0 12px rgba(59, 130, 246, 0.4)',
color: 'var(--d3-text-inverse)',
boxShadow: '0 0 12px var(--d3-accent-glow)',
}}
>
{identity.email.slice(0, 1).toUpperCase()}
@ -442,7 +442,7 @@ export function AdminSidebar({ identity }: {
transition: 'all 0.15s ease',
'&:hover': {
color: C.red400,
bgcolor: 'rgba(239, 68, 68, 0.12)',
bgcolor: 'var(--d3-status-danger)',
},
}}
>