snapshot: AlertCenter拆分前快照

This commit is contained in:
attacker committed 2026-06-15 13:01:56 +08:00
1 parent 6a40956afa
commit 805cb767a8
23 files changed
+1560 -404

No files matched your search

@@ -162,11 +162,11 @@ export function AlertEventsTab({
</span>
</TableCell>
<TableCell>{getStatusBadge(event.status)}</TableCell>
<TableCell>
<span className="text-sm text-slate-300">{event.target}</span>
<TableCell className="max-w-[160px]">
<span className="text-sm text-slate-300 block truncate" title={event.target}>{event.target}</span>
</TableCell>
<TableCell>
<span className="text-sm text-slate-300">{event.value}</span>
<span className="text-sm text-slate-300">{typeof event.value === 'number' ? event.value.toFixed(1) : event.value}</span>
</TableCell>
<TableCell>
<span className="text-sm text-slate-500">{event.threshold}</span>
@@ -171,8 +171,8 @@ export function AlertRulesTab({
{rule.source || '--'}
</code>
</TableCell>
<TableCell>
<code className="text-xs text-blue-300">
<TableCell className="max-w-[180px]">
<code className="text-xs text-blue-300 block truncate" title={rule.expression}>
{rule.expression || '--'}
</code>
</TableCell>
@@ -579,9 +579,6 @@ const AlertCenter: React.FC = () => {
checked={rule.enabled}
onCheckedChange={(checked) => toggleRule(String(rule.id), checked)}
/>
<Button variant="ghost" size="sm">
<Settings className="w-4 h-4" />
</Button>
</div>
</div>
</CardContent>
@@ -3,7 +3,7 @@ import {
Monitor, Settings, Plus, Edit, Trash2, Copy, Eye, Download, RefreshCw,
Maximize2, Minimize2, Save, X, ChevronDown, BarChart3, LineChart, PieChart,
Activity, Cpu, Database, Server, Globe, Zap, AlertTriangle, TrendingUp,
TrendingDown, Clock, Calendar, Filter, Search, GripVertical, Move
TrendingDown, Clock, Calendar, Filter, Search
} from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
@@ -80,7 +80,7 @@ const GrafanaDashboard: React.FC = () => {
const [datasources, setDatasources] = useState<Datasource[]>([]);
const [activeDashboard, setActiveDashboard] = useState<Dashboard | null>(null);
const [loading, setLoading] = useState(false);
const [editMode, setEditMode] = useState(false);
const [fullscreen, setFullscreen] = useState(false);
const [createOpen, setCreateOpen] = useState(false);
const [addPanelOpen, setAddPanelOpen] = useState(false);
@@ -295,15 +295,6 @@ const GrafanaDashboard: React.FC = () => {
{activeDashboard && (
<>
<Button
variant={editMode ? 'default' : 'outline'}
size="sm"
onClick={() => setEditMode(!editMode)}
>
<Edit className="w-4 h-4 mr-2" />
{editMode ? '完成' : '编辑'}
</Button>
<Button variant="outline" size="sm" onClick={() => setAddPanelOpen(true)}>
<Plus className="w-4 h-4 mr-2" />
添加面板
@@ -349,7 +340,7 @@ const GrafanaDashboard: React.FC = () => {
{activeDashboard.panels.map((panel) => (
<Card
key={panel.id}
className={`col-span-${panel.width} ${editMode ? 'ring-2 ring-blue-500 ring-offset-2' : ''}`}
className={`col-span-${panel.width}`}
style={{ gridColumn: `span ${panel.width}`, minHeight: `${panel.height * 80}px` }}
>
<CardHeader className="py-3 px-4">
@@ -358,19 +349,7 @@ const GrafanaDashboard: React.FC = () => {
{getPanelIcon(panel.type)}
{panel.title}
</CardTitle>
{editMode && (
<div className="flex items-center gap-1">
<Button variant="ghost" size="sm" className="h-6 w-6 p-0">
<GripVertical className="w-4 h-4" />
</Button>
<Button variant="ghost" size="sm" className="h-6 w-6 p-0">
<Edit className="w-4 h-4" />
</Button>
<Button variant="ghost" size="sm" className="h-6 w-6 p-0 text-red-500">
<Trash2 className="w-4 h-4" />
</Button>
</div>
)}
</div>
</CardHeader>
<CardContent className="p-4 pt-0 flex-1">
@@ -579,12 +558,6 @@ const GrafanaDashboard: React.FC = () => {
</div>
<div className="flex items-center gap-2">
{getDatasourceStatusBadge(ds.status)}
<Button variant="ghost" size="sm">
<Settings className="w-4 h-4" />
</Button>
<Button variant="ghost" size="sm" className="text-red-500">
<Trash2 className="w-4 h-4" />
</Button>
</div>
</div>
</CardContent>