+
+ {todo
+ ? (
+
+ {CT.usageLead(used)}
+ {pending > 0 && part('pending', CT.usagePending(pending), CT.usageHintPending)}
+ {pending > 0 && none > 0 && ','}
+ {none > 0 && part('none', CT.usageNone(none), CT.usageHintNone)}
+
+ )
+ :
{CT.usageAllDone(used)}
}
+
+ )
+}
+
/** 没有选中表时的右栏:空目录时引导起草;否则写审阅进度,给出下一张该审的表 */
function Overview({ rows, empty, systemNotes, draft, onOpen }: {
rows: CatalogTableRow[]
diff --git a/frontend/src/pages/catalog/model.ts b/frontend/src/pages/catalog/model.ts
index e12d6ebb..d6ffa70a 100644
--- a/frontend/src/pages/catalog/model.ts
+++ b/frontend/src/pages/catalog/model.ts
@@ -125,6 +125,22 @@ export function visibleRows(rows: CatalogTableRow[], q: string, filter: ListFilt
})
}
+/**
+ * 「用到但没确认」:运行中查询过的表(使用次数大于 0、还在表结构里)一共几张,其中几张还有推断项、几张还没有目录。
+ * 页面顶部的摘要按它写,点进去复用清单的筛选(有未确认项 / 没有目录)和按使用次数排序,不另做一套
+ */
+export function usageSummary(rows: CatalogTableRow[]): { used: number; pending: number; none: number } {
+ const out = { used: 0, pending: 0, none: 0 }
+ for (const r of rows) {
+ if (!r.in_schema || r.usage <= 0) continue
+ out.used++
+ const p = progressOf(r.counts)
+ if (p === 'pending') out.pending++
+ else if (p === 'none') out.none++
+ }
+ return out
+}
+
/** 各筛选项下有几张表(筛选按钮上的数字,按搜索词算) */
export function filterCounts(rows: CatalogTableRow[], q: string): Record