-
-
- {d}
-
{objects.filter((o) => o.domain === d).length} 个对象
+ <>
+
+ 数据不设箱、靠域:域是承载的划分,对象由活动声明物化——最大化合并、只增不破坏。
+ 这里改结构;行数据在运营中心 · 台账看。
+
+ {domains.map((d) => (
+
+
+
+ {d}
+ {objects.filter((o) => o.domain === d).length} 个对象 · 发布即在运营中心长出一位
+
+
+ {objects
+ .filter((o) => o.domain === d)
+ .map((o) => (
+
+ ))}
+
-
- {objects
- .filter((o) => o.domain === d)
- .map((o) => (
- nav.push({ k: 'obj', id: `${o.domain}.${o.object}` })}
- />
- ))}
-
-
- ))}
- {objects.length === 0 &&
尚无物化对象——活动首次写入时按声明物化。}
- >
+ ))}
+ {objects.length === 0 && (
+
还没有物化的对象 —— 活动第一次写入时,系统按它的声明把表建出来,然后出现在这里。
+ )}
+ >
);
}
-/* ---------------- ⑧ 记忆管理 ---------------- */
+/** 一个对象的结构一行:列数 / 主键 —— 点开看完整模式,仍不含行数据 */
+function ObjectSchemaRow({ domain, object, nav }: { domain: string; object: string; nav: Nav }) {
+ const page = useGovLedger(domain, object);
+ const columns = page.data?.columns ?? [];
+ const pk = page.data?.primaryKey ?? [];
+ return (
+
nav.push({ k: 'obj', id: `${domain}.${object}` })}
+ />
+ );
+}
+
+/* ==================== 运营侧:台账(某一个域) ==================== */
+
+/**
+ * 台账的一个域 —— 壳层把左轨选中的域名当页签传进来。
+ * 这里看的是运营事实:这张表现在多少行,点进去逐行看。
+ */
+export function LedgersHome({ tab, nav }: HomeProps) {
+ const q = useGovObjects();
+ const domain = tab;
+ const inDomain = (q.data?.objects ?? []).filter((o) => o.domain === domain);
+
+ return (
+
+ <>
+
+ {domain} 域的台账:行数据、主键与列结构。结构要改去设计中心 · 数据域;
+ 这里做的是运营动作 —— 查行、看版本、追引用。
+
+ {inDomain.length === 0 ? (
+ 这个域还没有对象 —— 对象随活动首次写入而物化,建好就出现在这里。
+ ) : (
+
+ {inDomain.map((o) => (
+
+ ))}
+
+ )}
+ >
+
+ );
+}
+
+/** 一个台账对象一行:行数是运营侧最想先看到的那个数 */
+function LedgerObjectRow({ domain, object, nav }: { domain: string; object: string; nav: Nav }) {
+ const page = useGovLedger(domain, object);
+ const total = page.data?.total;
+ return (
+ 0 ? 'brand' : 'mute'}
+ ico="table"
+ title={object}
+ sub={`${domain}.${object}`}
+ cols={[
+ { k: '行数', v: total === undefined ? '…' : String(total) },
+ { k: '列', v: String((page.data?.columns ?? []).length) },
+ ]}
+ right={ 0 ? 'ok' : 'mute'}>{total ?? 0} 行}
+ onClick={() => nav.push({ k: 'obj', id: `${domain}.${object}` })}
+ />
+ );
+}
+
+/* ==================== 对象详情(两面共用) ==================== */
export function ObjPage({ id }: { id: string }) {
const [domain, object] = id.split('.');
@@ -90,32 +167,33 @@ export function ObjPage({ id }: { id: string }) {