fix(governance): 改善 automation KPI 卡片換行
This commit is contained in:
@@ -1443,7 +1443,7 @@ export function AutomationInventoryTab() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 12 }} className="automation-inventory-deployment-layout-kpi-grid">
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 12 }} className="automation-inventory-deployment-layout-kpi-grid">
|
||||
<MetricCard label={t('deploymentLayout.metrics.targets')} value={deploymentLayoutTargets} icon={<Boxes size={16} />} />
|
||||
<MetricCard label={t('deploymentLayout.metrics.openclaw')} value={deploymentLayoutOpenClawTargets} icon={<ShieldCheck size={16} />} />
|
||||
<MetricCard label={t('deploymentLayout.metrics.hermes')} value={deploymentLayoutHermesTargets} icon={<FileText size={16} />} />
|
||||
@@ -1561,7 +1561,7 @@ export function AutomationInventoryTab() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 12 }} className="automation-inventory-proof-kpi-grid">
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 12 }} className="automation-inventory-proof-kpi-grid">
|
||||
<MetricCard label={t('interactionProof.metrics.overall')} value={`${proofOverall}%`} tone="warn" icon={<Gauge size={16} />} />
|
||||
<MetricCard label={t('interactionProof.metrics.contractReady')} value={proofContractReadyLevels} tone="ok" icon={<ShieldCheck size={16} />} />
|
||||
<MetricCard label={t('interactionProof.metrics.liveSessions')} value={proofLiveSessions} tone={proofLiveSessions > 0 ? 'ok' : 'warn'} icon={<Route size={16} />} />
|
||||
@@ -1611,7 +1611,7 @@ export function AutomationInventoryTab() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
|
||||
<MetricCard label={t('liveReadModelGate.metrics.overall')} value={`${liveReadModelOverall}%`} tone="warn" icon={<Gauge size={16} />} />
|
||||
<MetricCard label={t('liveReadModelGate.metrics.readyCards')} value={liveReadModelReadyCards} tone="ok" icon={<ShieldCheck size={16} />} />
|
||||
<MetricCard label={t('liveReadModelGate.metrics.approvalGates')} value={liveReadModelApprovalGates} tone={liveReadModelApprovalGates > 0 ? 'danger' : 'ok'} icon={<Lock size={16} />} />
|
||||
@@ -1729,7 +1729,7 @@ export function AutomationInventoryTab() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
|
||||
<MetricCard label={t('redisDryRunGate.metrics.overall')} value={`${redisDryRunOverall}%`} tone="warn" icon={<Gauge size={16} />} />
|
||||
<MetricCard label={t('redisDryRunGate.metrics.steps')} value={redisDryRunSteps} tone="ok" icon={<Route size={16} />} />
|
||||
<MetricCard label={t('redisDryRunGate.metrics.lanes')} value={redisHandoffLanes} tone="ok" icon={<GitBranch size={16} />} />
|
||||
@@ -1838,7 +1838,7 @@ export function AutomationInventoryTab() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
|
||||
<MetricCard label={t('learningWritebackPackage.metrics.overall')} value={`${learningWritebackOverall}%`} tone="warn" icon={<Gauge size={16} />} />
|
||||
<MetricCard label={t('learningWritebackPackage.metrics.gates')} value={learningWritebackGates} tone="ok" icon={<ShieldCheck size={16} />} />
|
||||
<MetricCard label={t('learningWritebackPackage.metrics.lanes')} value={learningWritebackLanes} tone="ok" icon={<Route size={16} />} />
|
||||
@@ -1943,7 +1943,7 @@ export function AutomationInventoryTab() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
|
||||
<MetricCard label={t('telegramReceiptPackage.metrics.overall')} value={`${telegramReceiptOverall}%`} tone="warn" icon={<Gauge size={16} />} />
|
||||
<MetricCard label={t('telegramReceiptPackage.metrics.gates')} value={telegramReceiptGates} tone="ok" icon={<ShieldCheck size={16} />} />
|
||||
<MetricCard label={t('telegramReceiptPackage.metrics.lanes')} value={telegramReceiptLanes} tone="ok" icon={<Route size={16} />} />
|
||||
@@ -2156,7 +2156,7 @@ export function AutomationInventoryTab() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
|
||||
<MetricCard label={t('ownerDryRunPackage.metrics.overall')} value={`${ownerDryRunOverall}%`} tone="warn" icon={<Gauge size={16} />} />
|
||||
<MetricCard label={t('ownerDryRunPackage.metrics.fixtures')} value={ownerDryRunFixtures} tone="ok" icon={<PackageCheck size={16} />} />
|
||||
<MetricCard label={t('ownerDryRunPackage.metrics.gates')} value={ownerDryRunGates} tone="ok" icon={<ShieldCheck size={16} />} />
|
||||
@@ -2400,7 +2400,7 @@ export function AutomationInventoryTab() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 12 }} className="automation-inventory-proactive-kpi-grid">
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 12 }} className="automation-inventory-proactive-kpi-grid">
|
||||
<MetricCard label={t('proactiveOperations.metrics.overall')} value={`${proactiveOverall}%`} tone="ok" icon={<Gauge size={16} />} />
|
||||
<MetricCard label={t('proactiveOperations.metrics.capabilities')} value={proactiveDelegableCapabilities} icon={<Boxes size={16} />} />
|
||||
<MetricCard label={t('proactiveOperations.metrics.approval')} value={proactiveApprovalCapabilities} tone="warn" icon={<Lock size={16} />} />
|
||||
@@ -2744,7 +2744,7 @@ export function AutomationInventoryTab() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 12 }} className="automation-inventory-backup-kpi-grid">
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 12 }} className="automation-inventory-backup-kpi-grid">
|
||||
<MetricCard label={t('backupEvidence.metrics.targets')} value={backupTargets.rollups.total_targets} icon={<HardDrive size={16} />} />
|
||||
<MetricCard label={t('backupEvidence.metrics.ready')} value={readyBackupRows} tone="ok" icon={<ShieldCheck size={16} />} />
|
||||
<MetricCard label={t('backupEvidence.metrics.actionRequired')} value={actionRequiredBackupRows} tone="warn" icon={<AlertTriangle size={16} />} />
|
||||
@@ -3057,7 +3057,7 @@ export function AutomationInventoryTab() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 12 }} className="automation-inventory-gitea-kpi-grid">
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 12 }} className="automation-inventory-gitea-kpi-grid">
|
||||
<MetricCard label={t('giteaHealth.metrics.workflows')} value={giteaHealth.rollups.total_workflows} icon={<GitBranch size={16} />} />
|
||||
<MetricCard label={t('giteaHealth.metrics.schedules')} value={giteaHealth.rollups.workflows_with_schedule} icon={<RefreshCw size={16} />} />
|
||||
<MetricCard label={t('giteaHealth.metrics.dispatch')} value={giteaHealth.rollups.workflows_with_workflow_dispatch} tone="warn" icon={<AlertTriangle size={16} />} />
|
||||
|
||||
Reference in New Issue
Block a user