refactor(frontend): simplify ops health result catalog section

This commit is contained in:
2026-04-18 20:22:58 +08:00
parent 6e98bbe8b0
commit cf34b9a8ed
+60 -2
View File
@@ -7,7 +7,6 @@ import { syncWaterScenesFromDisk } from './api/water';
import { listEngines, runWslCheck } from './api/dinsarProduction';
import { getOrbitStatus, syncOrbitPools } from './api/orbit';
import LogManagementPanel from './LogManagementPanel.clean';
import DinsarCatalogPanel from './components/DinsarCatalogPanel';
const toNumber = (value) => {
const parsed = Number(value);
@@ -39,6 +38,29 @@ const formatIntegerText = (value) => {
return Number.isFinite(parsed) ? parsed.toLocaleString() : '0';
};
const isCatalogHealthy = (catalog) => {
if (!catalog || typeof catalog !== 'object') {
return false;
}
if (catalog.enabled === false) {
return true;
}
return Boolean(catalog.ok) && !catalog.needs_rebuild;
};
const formatCatalogStatusLabel = (catalog, en = false) => {
if (!catalog || typeof catalog !== 'object') {
return en ? 'Unknown' : '未知';
}
if (catalog.enabled === false) {
return en ? 'Disabled' : '已禁用';
}
if (catalog.needs_rebuild) {
return en ? 'Rebuild required' : '需要重建';
}
return catalog.catalog_status || (en ? 'Unknown' : '未知');
};
const getOrbitSourcePath = (item) => item?.source || item?.source_path || '';
const hasOrbitCorruptionSignal = (item) => Boolean(
@@ -312,6 +334,9 @@ const HealthCheckPanel = ({ language = 'zh', currentUser }) => {
const formatPathText = (value) => value || (en ? 'Not configured' : '未配置');
const databaseStatus = status?.database || {};
const dinsarBridge = asObject(status?.dinsar_bridge);
const dinsarResultCatalog = asObject(status?.dinsar_result_catalog || status?.result_catalog);
const dinsarCatalogNeedsRebuild =
typeof dinsarResultCatalog.needs_rebuild === 'boolean' ? dinsarResultCatalog.needs_rebuild : null;
const sourceRoots = asObject(status?.source_roots);
const pairingSystem = asObject(status?.pairing_system);
const sourceRootItems = asArray(sourceRoots.items);
@@ -556,7 +581,40 @@ const HealthCheckPanel = ({ language = 'zh', currentUser }) => {
)}
</div>
<DinsarCatalogPanel compact readOnly={!isAdmin} />
<div className="health-card">
<div className="health-card-title">{en ? 'D-InSAR Result Catalog' : 'D-InSAR 结果目录'}</div>
<div className="health-card-row">
<span>{en ? 'Catalog status' : '目录状态'}</span>
{renderBadge(
isCatalogHealthy(dinsarResultCatalog),
formatCatalogStatusLabel(dinsarResultCatalog, en)
)}
</div>
<div className="health-card-row">
<span>{en ? 'Needs rebuild' : '需要重建'}</span>
{renderBadge(
dinsarCatalogNeedsRebuild === false,
dinsarCatalogNeedsRebuild === null
? (en ? 'Unknown' : '未知')
: (dinsarCatalogNeedsRebuild ? (en ? 'Yes' : '是') : (en ? 'No' : '否'))
)}
</div>
<div className="health-card-row">
<span>{en ? 'Manifest / DB' : 'Manifest / 数据库'}</span>
<span>
{toNumber(dinsarResultCatalog.manifest_count)} / {toNumber(dinsarResultCatalog.db_count)}
</span>
</div>
<div className="health-card-row">
<span>{en ? 'Issue count' : '问题数量'}</span>
<span>{toNumber(dinsarResultCatalog.issue_count)}</span>
</div>
<div className="health-card-note">
{en
? 'Full directory details and maintenance actions remain in the D-InSAR Products workspace.'
: '完整目录详情和维护操作已保留在 “D-InSAR 产物工作台”,不再在自检页展开。'}
</div>
</div>
<div className="health-card">
<div className="health-card-title">{en ? 'Pairing System' : '配对系统'}</div>