feat: 全站 PageShell 设计系统与专业 UI 统一

- 新增 PageShell/PageTabs/ContentPanel/PageLoading/PageEmpty 页面骨架
- index.css 设计令牌文档化,布局令牌与纯色主按钮(去除渐变粉彩)
- 全站路由页接入 PageShell,云账单三 Tab 为标杆
- 主题体系:跟随系统 + 主流/开发者分组,新增 Dracula/Tokyo Night,One Dark 暖灰差异化
- 登录页/侧栏/顶栏去渐变光球,企业克制风
- 修复 AIAlertAnalyzer JSX 与构建依赖导入问题
This commit is contained in:
Logan committed 2026-07-01 12:45:38 +08:00
1 parent 1acb0c49af
commit e363ded445
213 files changed
+7148 -6818

No files matched your search

@@ -315,7 +315,7 @@ export function ExcelServerImport({ open, onClose }: ExcelServerImportProps) {
<div className="flex items-center justify-between">
<div className="flex items-center gap-3">
<div className="w-10 h-10 rounded-lg bg-emerald-500/20 flex items-center justify-center">
<FileSpreadsheet className="h-5 w-5 text-emerald-400" />
<FileSpreadsheet className="h-5 w-5 dg-text-green" />
</div>
<div>
<p className="font-medium text-[var(--dg-text-primary)]">主机导入模板</p>
@@ -417,7 +417,7 @@ export function ExcelServerImport({ open, onClose }: ExcelServerImportProps) {
<Card className="bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]">
<CardContent className="p-3 flex items-center justify-between">
<div className="flex items-center gap-3">
<FileSpreadsheet className="h-8 w-8 text-emerald-400" />
<FileSpreadsheet className="h-8 w-8 dg-text-green" />
<div>
<p className="text-sm text-[var(--dg-text-primary)]">{selectedFile.name}</p>
<p className="text-xs text-[var(--dg-text-muted)]">{(selectedFile.size / 1024).toFixed(2)} KB</p>
@@ -426,7 +426,7 @@ export function ExcelServerImport({ open, onClose }: ExcelServerImportProps) {
<Button
variant="ghost"
size="icon"
className="text-[var(--dg-text-muted)] hover:text-red-400"
className="text-[var(--dg-text-muted)] hover:dg-text-red"
onClick={() => setSelectedFile(null)}
>
<X className="h-4 w-4" />
@@ -450,18 +450,18 @@ export function ExcelServerImport({ open, onClose }: ExcelServerImportProps) {
<div className="flex items-center justify-between">
<p className="text-[var(--dg-text-secondary)] text-sm">数据预览</p>
<div className="flex items-center gap-2">
<Badge className="bg-emerald-500/20 text-emerald-400 border-0">
<Badge className="bg-emerald-500/20 dg-text-green border-0">
<Check className="h-3 w-3 mr-1" />
{validCount} 有效
</Badge>
{warningCount > 0 && (
<Badge className="bg-amber-500/20 text-amber-400 border-0">
<Badge className="bg-amber-500/20 dg-text-yellow border-0">
<AlertCircle className="h-3 w-3 mr-1" />
{warningCount} 警告
</Badge>
)}
{errorCount > 0 && (
<Badge className="bg-red-500/20 text-red-400 border-0">
<Badge className="bg-red-500/20 dg-text-red border-0">
<X className="h-3 w-3 mr-1" />
{errorCount} 错误
</Badge>
@@ -488,19 +488,19 @@ export function ExcelServerImport({ open, onClose }: ExcelServerImportProps) {
<td className="px-3 py-2">
<div className="flex items-center gap-1">
{row.status === 'valid' && (
<Badge className="bg-emerald-500/20 text-emerald-400 border-0 text-xs">
<Badge className="bg-emerald-500/20 dg-text-green border-0 text-xs">
<Check className="h-3 w-3 mr-1" />
{row.message}
</Badge>
)}
{row.status === 'warning' && (
<Badge className="bg-amber-500/20 text-amber-400 border-0 text-xs">
<Badge className="bg-amber-500/20 dg-text-yellow border-0 text-xs">
<AlertCircle className="h-3 w-3 mr-1" />
{row.message}
</Badge>
)}
{row.status === 'error' && (
<Badge className="bg-red-500/20 text-red-400 border-0 text-xs">
<Badge className="bg-red-500/20 dg-text-red border-0 text-xs">
<X className="h-3 w-3 mr-1" />
{row.message}
</Badge>
@@ -515,7 +515,7 @@ export function ExcelServerImport({ open, onClose }: ExcelServerImportProps) {
{errorCount > 0 && (
<div className="p-3 rounded-lg bg-red-500/10 border border-red-500/30">
<div className="flex items-center gap-2 text-red-400">
<div className="flex items-center gap-2 dg-text-red">
<AlertCircle className="h-4 w-4" />
<span className="text-sm">存在 {errorCount} 条错误数据,请修正后重新上传</span>
</div>