/** * feature `gov-activity` —— 活动库:两维分类 × 包版本 × 资产版本 * * 自 `~/coding/JCAI_PRD/governance/_components/Governance.tsx` 平移: * DOM 结构、类名(`g-*` + 色调 `t-*`)与文案原样保留,mock 常量换成服务端投影(README 平移规则 1/2/4)。 * 区首页只负责导航,治理动作一律落在下钻详情页的**就地确认带**(影响预览三必答)。 */ import { Card, Chip, Clear, Entry, NList, NRow, Note, PageHead, QueryGate, St } from '@web-shared/gov/primitives.tsx'; import { PARA } from '@web-shared/gov/tone.ts'; import type { Nav } from '@web-shared/gov/gov-route.ts'; import { useGovActivities, useGovMemory, } from '@web-shared/gov/gov-api.ts'; export type HomeProps = { tab: string; nav: Nav }; export function LibraryHome({ nav }: HomeProps) { const q = useGovActivities(); const activities = q.data?.activities ?? []; return ( <> 活动是任务的定义:编排引用一个活动,运行时就长出一个任务。业务分类 × 活动类型两维平级; 每活动两条版本序列——包版本走安装两审,资产版本走进化管线。 {activities.map((a) => { const effective = a.assetVersions.filter((v) => v.effective); return ( {a.packageVersions.map((p) => p.version).join(', ')} }, { k: '资产生效版', v: {effective.length} }, ]} right={ {a.enabled ? '已启用' : '已停用'} } onClick={() => nav.push({ k: 'act', id: a.activityId })} /> ); })} > ); } /* ---------------- ⑥ 工具管理 ---------------- */ export function ActPage({ id, nav }: { id: string; nav: Nav }) { const q = useGovActivities(); const memory = useGovMemory(id); const a = (q.data?.activities ?? []).find((x) => x.activityId === id); if (a === undefined) return 活动不存在。; return ( <> {PARA[a.paradigm].label} {a.category} {a.enabled ? '已启用' : '已停用'} > } desc={PARA[a.paradigm].full + ' —— 活动是系统外开发、经此安装的外装件。'} /> {a.packageVersions.map((p) => ( v{p.version} {p.state} · {p.installedAt.slice(0, 16).replace('T', ' ')} ))} {a.assetVersions.map((v, i) => ( {v.kind} v{v.version} {v.effective ? '生效中' : '历史'} ))} {a.assetVersions.length === 0 && 尚无资产版本。} nav.jump('memory', 'layers')} /> > ); }