Archived
MVP底座⑧:数据域四域大卡 —— 项目/客户/情报/供应商
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
@@ -11,8 +11,7 @@
|
|||||||
* 自 `~/coding/JCAI_PRD/governance/_components/Governance.tsx` 平移:
|
* 自 `~/coding/JCAI_PRD/governance/_components/Governance.tsx` 平移:
|
||||||
* DOM 结构、类名(`g-*` + 色调 `t-*`)与文案原样保留,mock 常量换成服务端投影(README 平移规则 1/2/4)。
|
* DOM 结构、类名(`g-*` + 色调 `t-*`)与文案原样保留,mock 常量换成服务端投影(README 平移规则 1/2/4)。
|
||||||
*/
|
*/
|
||||||
import { Ico } from '@web-shared/Ico.tsx';
|
import { Card, Chip, Clear, Entry, NList, NRow, Note, PageHead, QueryGate, Sec } from '@web-shared/gov/primitives.tsx';
|
||||||
import { Card, Chip, Clear, NList, NRow, Note, PageHead, QueryGate, Sec } from '@web-shared/gov/primitives.tsx';
|
|
||||||
import type { Nav } from '@web-shared/gov/gov-route.ts';
|
import type { Nav } from '@web-shared/gov/gov-route.ts';
|
||||||
import { useGovLedger, useGovObjects } from '@web-shared/gov/gov-api.ts';
|
import { useGovLedger, useGovObjects } from '@web-shared/gov/gov-api.ts';
|
||||||
import { domainShort, sortDomains } from '@web-shared/gov/domains.ts';
|
import { domainShort, sortDomains } from '@web-shared/gov/domains.ts';
|
||||||
@@ -34,28 +33,37 @@ export function DataHome({ nav }: HomeProps) {
|
|||||||
<QueryGate query={q}>
|
<QueryGate query={q}>
|
||||||
<>
|
<>
|
||||||
<Note>
|
<Note>
|
||||||
数据<b>不设箱、靠域</b>:域是承载的划分,对象由活动声明物化——最大化合并、只增不破坏。
|
数据按<b>经营对象</b>四分:<b>项目</b>是每一单的流转单据(受理记录 → 比价 → 草案 → 报价单),
|
||||||
这里改结构;<b>行数据在运营中心 · 台账看</b>。
|
<b>客户 / 情报 / 供应商</b>是跨单沉淀的资产。域是承载的划分,对象由活动声明物化 ——
|
||||||
|
最大化合并、只增不破坏。这里改结构;<b>行数据在运营中心 · 台账看</b>。
|
||||||
</Note>
|
</Note>
|
||||||
{domains.map((d) => (
|
{domains.map((d) => {
|
||||||
<div key={d} className="g-sec">
|
const inDomain = objects.filter((o) => o.domain === d);
|
||||||
<div className="g-band">
|
return (
|
||||||
<Ico name="database" s={13} />
|
<Card
|
||||||
{domainShort(d)}
|
key={d}
|
||||||
<span className="g-mono" style={{ fontWeight: 500 }}>
|
ico="database"
|
||||||
{d}
|
title={domainShort(d)}
|
||||||
</span>
|
extra={
|
||||||
<span className="x">{objects.filter((o) => o.domain === d).length} 个对象 · 发布即入运营台账</span>
|
<span className="g-mono">
|
||||||
</div>
|
{d} · {inDomain.length} 对象
|
||||||
<NList>
|
</span>
|
||||||
{objects
|
}
|
||||||
.filter((o) => o.domain === d)
|
>
|
||||||
.map((o) => (
|
<div className="g-entries">
|
||||||
<ObjectSchemaRow key={`${o.domain}.${o.object}`} domain={o.domain} object={o.object} nav={nav} />
|
{inDomain.map((o) => (
|
||||||
|
<Entry
|
||||||
|
key={o.object}
|
||||||
|
ico="table"
|
||||||
|
title={o.object}
|
||||||
|
desc="点开看列结构与主键;行数据在运营中心"
|
||||||
|
onClick={() => nav.push({ k: 'obj', id: `${o.domain}.${o.object}` })}
|
||||||
|
/>
|
||||||
))}
|
))}
|
||||||
</NList>
|
</div>
|
||||||
</div>
|
</Card>
|
||||||
))}
|
);
|
||||||
|
})}
|
||||||
{objects.length === 0 && (
|
{objects.length === 0 && (
|
||||||
<Clear>还没有物化的对象 —— 活动第一次写入时,系统按它的声明把表建出来,然后出现在这里。</Clear>
|
<Clear>还没有物化的对象 —— 活动第一次写入时,系统按它的声明把表建出来,然后出现在这里。</Clear>
|
||||||
)}
|
)}
|
||||||
@@ -64,26 +72,6 @@ export function DataHome({ nav }: HomeProps) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 一个对象的结构一行:列数 / 主键 —— 点开看完整模式,仍不含行数据 */
|
|
||||||
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 (
|
|
||||||
<NRow
|
|
||||||
tone="brand"
|
|
||||||
ico="table"
|
|
||||||
title={object}
|
|
||||||
sub={`${domain}.${object}`}
|
|
||||||
cols={[
|
|
||||||
{ k: '列', v: columns.length === 0 ? '—' : String(columns.length) },
|
|
||||||
{ k: '主键', v: pk.length === 0 ? '—' : pk.join(', ') },
|
|
||||||
]}
|
|
||||||
onClick={() => nav.push({ k: 'obj', id: `${domain}.${object}` })}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ==================== 运营侧:台账(某一个域页签) ==================== */
|
/* ==================== 运营侧:台账(某一个域页签) ==================== */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user