forked from ChaiHao/BPOS-MVP
编排层①:改图入口下沉画布 + 活动契约面全链打通
① 已发布包就地给「起草新版本并去编辑」,不用去页头找; ② 修一个我自己引入的 bug:卡点还原把审批点的「退回调整」牌子当成边,凭空造出 e-A5-A4 —— 卡点只认亲、不新建(旧包有这条边才认);实测编辑器往返 16 边 14 节点无损; ③ 活动契约面接进治理台:列表出参带必填入参/输出口/声明依赖,活动详情摆成一屏, 导出依赖文件一并带上 —— 开发一个活动要照着的东西,现在有一处能看全。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
* 区首页只负责导航,治理动作一律落在下钻详情页的**就地确认带**(影响预览三必答)。
|
||||
*/
|
||||
import { Ico } from '@web-shared/Ico.tsx';
|
||||
import { Card, Chip, Clear, Entry, Note, PageHead, QueryGate, St } from '@web-shared/gov/primitives.tsx';
|
||||
import { Card, Chip, Clear, Entry, Note, PageHead, Prop, 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 {
|
||||
@@ -98,6 +98,60 @@ export function ActPage({ id, nav }: { id: string; nav: Nav }) {
|
||||
}
|
||||
desc={PARA[a.paradigm].full + ' —— 活动是系统外开发、经此安装的外装件。'}
|
||||
/>
|
||||
{/*
|
||||
契约面 —— 开发这个活动要照着的东西:吃什么、吐什么、用谁的工具、动哪些域对象。
|
||||
它排在版本谱系前面:先看清契约,再看装了哪几版。
|
||||
*/}
|
||||
<Card ico="file-text" title="契约面 · 开发它要照着的" extra={`调人预算 ${a.contract.humanCallBudget} 次`}>
|
||||
<Prop ico="arrow-left-right" title="入参" extra={`${a.contract.inputFields.length} 个字段`}>
|
||||
{a.contract.inputFields.length === 0 ? (
|
||||
<Clear>不吃结构化入参 —— 只凭委托消息启动。</Clear>
|
||||
) : (
|
||||
<div className="g-rows">
|
||||
{a.contract.inputFields.map((f) => (
|
||||
<div key={f.name}>
|
||||
<em>
|
||||
{f.name}
|
||||
{f.required && <Chip tone="warn">必填</Chip>}
|
||||
</em>
|
||||
<b className="mono">{f.type}</b>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</Prop>
|
||||
<Prop ico="send" title="输出口" extra="口名 + 载荷字段即下游可衔接的全部">
|
||||
<div className="g-rows">
|
||||
{a.contract.outputPorts.map((port) => (
|
||||
<div key={port.name}>
|
||||
<em>{port.name}</em>
|
||||
<b className="mono">{port.fields.join(' · ') || '(无字段)'}</b>
|
||||
</div>
|
||||
))}
|
||||
{a.contract.outputPorts.length === 0 && <Clear>没有声明输出口 —— 下游无从衔接,发布会被拦。</Clear>}
|
||||
</div>
|
||||
</Prop>
|
||||
<Prop ico="wrench" title="声明的依赖" extra="授权在白名单与契约,不在活动代码">
|
||||
<div className="g-rows">
|
||||
<div>
|
||||
<em>工具</em>
|
||||
<b className="mono">{a.contract.tools.join(' · ') || '(不调工具)'}</b>
|
||||
</div>
|
||||
<div>
|
||||
<em>模型</em>
|
||||
<b className="mono">{a.contract.models.join(' · ') || '(不调模型)'}</b>
|
||||
</div>
|
||||
<div>
|
||||
<em>岗位</em>
|
||||
<b className="mono">{a.contract.roles.join(' · ') || '(未声明)'}</b>
|
||||
</div>
|
||||
<div>
|
||||
<em>域对象</em>
|
||||
<b className="mono">{a.contract.objects.join(' · ') || '(不读写台账)'}</b>
|
||||
</div>
|
||||
</div>
|
||||
</Prop>
|
||||
</Card>
|
||||
<Card ico="package" title="包版本 · 安装两审">
|
||||
<div className="g-rows">
|
||||
{a.packageVersions.map((p) => (
|
||||
|
||||
Reference in New Issue
Block a user