diff --git a/src/index.css b/src/index.css index adc51c4..1b351bf 100644 --- a/src/index.css +++ b/src/index.css @@ -183,3 +183,21 @@ dd { font-size: .9rem; } .setup-done { text-align: center; } .setup-done h2 { color: var(--success); margin-bottom: 12px; } @keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } } + + +/* Monitor */ +.monitor-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 16px; margin-top: 12px; } +.monitor-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; padding: 16px; } +.monitor-card-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px; } +.monitor-metrics { margin: 8px 0; font-size: .9rem; } +.monitor-admin { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 16px; } + +.status-ok { background: var(--success); } +.status-error { background: var(--danger); } +.status-pending { background: var(--warning); } +.status-online { background: var(--success); } +.status-offline { background: var(--danger); } + +.btn-secondary { background: none; border: 1px solid var(--border); color: var(--text); padding: 6px 12px; border-radius: 6px; cursor: pointer; } +.btn-danger { background: var(--danger); color: #fff; border: none; padding: 6px 12px; border-radius: 6px; cursor: pointer; } +.btn-danger:hover { opacity: .9; } diff --git a/src/pages/MonitorPage.tsx b/src/pages/MonitorPage.tsx index b739ab2..8c00785 100644 --- a/src/pages/MonitorPage.tsx +++ b/src/pages/MonitorPage.tsx @@ -11,6 +11,8 @@ interface ProviderRow { fetched_at?: string | null reset_at?: string | null window?: string | null + used?: number | null + limit?: number | null } interface ServerRow { @@ -144,102 +146,139 @@ export default function MonitorPage() { const createChallenge = async (id: number) => { const r = await api.post<{ identifier: string; challenge_uuid: string; expires_at: string }>('/monitor/admin/servers/' + id + '/challenge') - alert('identifier=' + r.data.identifier + '\nchallenge_uuid=' + r.data.challenge_uuid + '\nexpires_at=' + r.data.expires_at) + alert('identifier=' + r.data.identifier + ' | challenge_uuid=' + r.data.challenge_uuid + ' | expires_at=' + r.data.expires_at) } - if (loading) return
暂无 provider 账号
: ( -暂无 provider 账号
: ( +| Provider | +Label | +Usage | +Window | +Reset | +Status | +Updated | +
|---|---|---|---|---|---|---|
| {p.provider} | +{p.label} | +{p.usage_pct !== null ? p.usage_pct + '%' : '-'} | +{p.window || '-'} | +{p.reset_at || '-'} | +{p.status} | +{p.fetched_at || '-'} | +
暂无监测服务器
: ( -暂无监测服务器
: ( +{providerTestMsg}
} -{providerTestMsg}
} +