feat: rebuild warm operations workbench

This commit is contained in:
Codex
2026-07-30 14:49:33 +08:00
parent 25c853dea8
commit 570edf6bb2
88 changed files with 13413 additions and 2250 deletions
@@ -1,4 +1,5 @@
import { useEffect, useRef, useState } from 'react';
import { Card, Tag, Title } from 'animal-island-ui';
import {
canonicalHttpOrigin,
@@ -199,7 +200,9 @@ export function InstanceSettingsPage({
<section aria-labelledby="settings-instances-title">
<header>
<div>
<h1 id="settings-instances-title">实例</h1>
<h1 id="settings-instances-title">
<Title color="app-green">实例</Title>
</h1>
<p>配置此工作区可用的 SimAdmin 实例。</p>
</div>
<a href="/instances/new">添加实例</a>
@@ -236,55 +239,70 @@ export function InstanceSettingsPage({
const authentication = authLabel(status);
return (
<li key={instance.id} aria-label={displayName}>
<h2>
<a href={`/settings/instances/${encodeURIComponent(instance.id)}`}>
{displayName}
</a>
</h2>
{instance.name ? <p>{instance.id}</p> : null}
<dl>
<div>
<dt>源地址</dt>
<dd>
{origin ? (
<a
href={origin}
target="_blank"
rel="noopener noreferrer"
aria-label={`打开 ${displayName} 的源站`}
>
{origin}
</a>
) : (
'源地址无效'
)}
</dd>
</div>
{state ? (
<Card pattern="default" hoverable>
<h2>
<a href={`/settings/instances/${encodeURIComponent(instance.id)}`}>
{displayName}
</a>
</h2>
{instance.name ? <p>{instance.id}</p> : null}
<dl>
<div>
<dt>状态</dt>
<dd>{state}</dd>
<dt>源地址</dt>
<dd>
{origin ? (
<a
href={origin}
target="_blank"
rel="noopener noreferrer"
aria-label={`打开 ${displayName} 的源站`}
>
{origin}
</a>
) : (
'源地址无效'
)}
</dd>
</div>
) : null}
{authentication ? (
<div>
<dt>认证</dt>
<dd>{authentication}</dd>
</div>
) : null}
{status?.freshness ? (
<div>
<dt>数据新鲜度</dt>
<dd>{freshnessLabel(status.freshness)}</dd>
</div>
) : null}
{status?.capabilities?.length ? (
<div>
<dt>能力</dt>
<dd>{status.capabilities.map(capabilityLabel).join(', ')}</dd>
</div>
) : null}
</dl>
{state ? (
<div>
<dt>状态</dt>
<dd>
<Tag
size="small"
color={
state === '在线'
? 'app-teal'
: state === '离线'
? 'app-red'
: 'app-yellow'
}
>
{state}
</Tag>
</dd>
</div>
) : null}
{authentication ? (
<div>
<dt>认证</dt>
<dd>{authentication}</dd>
</div>
) : null}
{status?.freshness ? (
<div>
<dt>数据新鲜度</dt>
<dd>{freshnessLabel(status.freshness)}</dd>
</div>
) : null}
{status?.capabilities?.length ? (
<div>
<dt>能力</dt>
<dd>{status.capabilities.map(capabilityLabel).join(', ')}</dd>
</div>
) : null}
</dl>
</Card>
</li>
);
})}