From 023d3157a012b7f49927a9dfa2ec736ac1a19bfe Mon Sep 17 00:00:00 2001 From: shanqin <45168502@qq.com> Date: Wed, 26 Aug 2026 19:59:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E4=BE=8B=E4=B8=8D=E5=8F=AF=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E3=80=81=E4=B8=8D=E5=8F=AF=E7=BC=96=E8=BE=91(2026-08-?= =?UTF-8?q?26=20=E7=94=A8=E6=88=B7=E5=AE=9A):L3=20=E6=92=A4=E6=8E=89?= =?UTF-8?q?=E7=BC=96=E8=BE=91/=E5=88=A0=E9=99=A4=E5=85=A5=E5=8F=A3,?= =?UTF-8?q?=E5=8F=AA=E7=95=99=E8=BF=9B=E8=A1=8C=E4=B8=AD=E7=9A=84=E7=BB=88?= =?UTF-8?q?=E6=AD=A2=E6=B4=BB=E5=8A=A8;=E9=9C=80=E6=B1=82=E7=A8=BF?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=85=B3=E9=97=AD=E4=B8=A4=E6=9D=A1=E5=BE=85?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/src/app/gov-shell.tsx | 2 +- .../src/features/gov-task/internal/panel.tsx | 24 +++++-------------- docs/活动模块重构需求-2026-08-25.md | 7 +++--- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/apps/web/src/app/gov-shell.tsx b/apps/web/src/app/gov-shell.tsx index c2e46ef..4fa6df7 100644 --- a/apps/web/src/app/gov-shell.tsx +++ b/apps/web/src/app/gov-shell.tsx @@ -332,7 +332,7 @@ function Detail({ route, nav }: { route: Route; nav: Nav }) { case 'actd': return ; case 'acti': - return ; + return ; case 'tool': return ; case 'obj': diff --git a/apps/web/src/features/gov-task/internal/panel.tsx b/apps/web/src/features/gov-task/internal/panel.tsx index 1d65eda..8b7807e 100644 --- a/apps/web/src/features/gov-task/internal/panel.tsx +++ b/apps/web/src/features/gov-task/internal/panel.tsx @@ -724,10 +724,11 @@ const STEP_RES_TONE: Readonly> = { /** * L3 · 实例详情 —— 一次运行的完整视图(2026-08-26 规划,用户确认后落地): * 主从 2:1(DESIGN-SPEC §9)—— 左「动作过程记录」是主角(追溯与验收的落点), - * 右栏输入/输出是辅助;编辑与删除收在这一层(功能 5/6),不污染清单。 + * 右栏输入/输出是辅助。实例不可删除、不可编辑(2026-08-26 用户定)—— + * 编辑/删除入口撤掉,唯一的动作是进行中的「终止活动」。 * 数据为静态占位,结构按将来接口的形状铺。 */ -export function ActiPage({ id, nav }: { id: string; nav: Nav }) { +export function ActiPage({ id }: { id: string }) { const [aid, iid] = id.split(':'); const a = DEMO_ACTIVITIES.find((x) => x.id === aid); const inst = a !== undefined ? demoInstances(a.owner).find((x) => x.id === iid) : undefined; @@ -735,7 +736,7 @@ export function ActiPage({ id, nav }: { id: string; nav: Nav }) { term 记下终止时刻 —— 终止的过程面与「自己跑挂」不同(当前步记「已终止」,不是「附件缺失」那种失败原因) */ const [term, setTerm] = useState(undefined); if (a === undefined || inst === undefined) { - return 实例不存在 —— 它可能已被删除,从面包屑返回活动详情看看。; + return 实例不存在 —— 它不在该活动的清单里,从面包屑返回活动详情看看。; } const state: InstanceState = term !== undefined ? '失败' : inst.state; const steps = term !== undefined ? terminatedSteps(inst.startedAt) : demoSteps(state, inst.startedAt); @@ -771,9 +772,9 @@ export function ActiPage({ id, nav }: { id: string; nav: Nav }) { {a.llm} } - desc="一次运行的完整视图:输入 / 过程 / 输出 / 状态。编辑与删除收在这一层,清单页不受打扰。" + desc="一次运行的完整视图:输入 / 过程 / 输出 / 状态 —— 实例不可编辑、不可删除,进行中的运行可终止。" acts={[ - /* 头部动作(2026-08-26 规划):进行中可终止(二次确认);编辑本期只留入口(编什么待定);删除二次确认(用户标注存疑,先按规划做) */ + /* 唯一动作(2026-08-26 用户定:实例不许删、不许编):进行中可终止,二次确认 */ ...(state === '进行中' ? [ { @@ -790,19 +791,6 @@ export function ActiPage({ id, nav }: { id: string; nav: Nav }) { } satisfies ActSpec, ] : []), - { label: '编辑实例', ico: 'pencil-line', disabled: true }, - { - label: '删除实例', - ico: 'trash-2', - danger: true, - ask: { - title: `确认删除实例 ${inst.id}?`, - note: '删除后,这次运行的输入 / 过程 / 输出记录一并移除,清单里也不再出现。', - impact: { who: '该实例及其全部运行记录', undo: '不可撤销 —— 删除即清空', when: '确认后立即生效(本期前端演示,接口对接后落库)' }, - okLabel: '确认删除', - onOk: () => nav.push({ k: 'actd', id: a.id }), - }, - }, ]} /> {reason !== undefined && {reason}} diff --git a/docs/活动模块重构需求-2026-08-25.md b/docs/活动模块重构需求-2026-08-25.md index c8159aa..666c8f3 100644 --- a/docs/活动模块重构需求-2026-08-25.md +++ b/docs/活动模块重构需求-2026-08-25.md @@ -89,7 +89,8 @@ L1(模块首页 · 活动清单)需要一个**标签页**切换,因为活 - 2026-08-25 · **文案口径(用户定)**:创建实例 → **启动活动**;实例清单 → **历史活动**;停止 → **终止活动**。 - 2026-08-26 · **L2 历史活动改列表(用户定)**:卡片式清单撤掉,改表格列(实例 / 负责人 / 输入 / 输出 / 启动时间 / 状态 / 操作,操作栏带标题),隔行浅斑马 + 悬停亮行,行内操作(终止活动 / 查看详情)常驻;分页单页 8 条不变。 - 2026-08-26 · **L2 历史活动加检索(用户定)**:列表上方检索条 —— 条件下拉四选(实例 / 负责人 / 状态 / 启动时间),控件随条件换:实例=按实例号模糊输入、负责人=人员下拉(候选取自现有实例,接接口后换人员接口)、状态=五态下拉、启动时间=日期段(含两端整日);筛中显示「筛出 X / 共 Y」并可一键清空;分页按筛出的集合走。 -- 2026-08-26 · **L3 实例详情已落地(静态占位版,用户确认规划后实施)**:路由 `acti`(id = `活动id:实例号`),L2 行内「查看详情」接入。布局 = 主从 2:1(DESIGN-SPEC §9):左侧「动作过程记录」竖时间线是主角(五步节点流:输入接收 → 要素结构化 → 定价测算 → **负责人验收** → 输出归档 —— 验收永远留给人,对应人机分工),当前步呼吸高亮、未到达空心灰显、连接线成不间断竖轨;右栏输入(键值)/ 输出(文件行,下载随接口开放)。头部 = 状态丸 + 负责人/启动/结束·耗时/专属 LLM;驳回/失败出原因说明块;头部动作三个:终止活动(进行中才有,二次确认)、编辑实例(disabled 占位)、删除实例(二次确认 —— 删除存疑仍悬着,先按规划做进 UI)。终止后的过程面与「自己跑挂」区分:当前步记「已终止」而非失败原因。数据仍是静态假数据。 +- 2026-08-26 · **L3 实例详情已落地(静态占位版,用户确认规划后实施)**:路由 `acti`(id = `活动id:实例号`),L2 行内「查看详情」接入。布局 = 主从 2:1(DESIGN-SPEC §9):左侧「动作过程记录」竖时间线是主角(五步节点流:输入接收 → 要素结构化 → 定价测算 → **负责人验收** → 输出归档 —— 验收永远留给人,对应人机分工),当前步呼吸高亮、未到达空心灰显、连接线成不间断竖轨;右栏输入(键值)/ 输出(文件行,下载随接口开放)。头部 = 状态丸 + 负责人/启动/结束·耗时/专属 LLM;驳回/失败出原因说明块;终止后的过程面与「自己跑挂」区分:当前步记「已终止」而非失败原因。数据仍是静态假数据。 +- 2026-08-26 · **实例不可删除、不可编辑(用户定,推翻 L3 原规划)**:L3 的编辑/删除入口撤掉,唯一动作是进行中的「终止活动」(二次确认);六功能里实例的「编辑/删除」两项就此划掉,待确认问题里的两条(编辑指什么 / 删除是否放开)同时关闭。 ## 三、功能表(整理稿) @@ -100,6 +101,6 @@ L1(模块首页 · 活动清单)需要一个**标签页**切换,因为活 - ~~活动模块里的「设计」与设计中心「活动库」是什么关系?~~ **已答(2026-08-25)**:不再有「设计中心 vs 运营中心」的分工 —— 设计并入运营,活动模块自带设计能力;设计中心各区后续按同思路并入运营中心重做。 - ~~「设计」在活动模块里做到什么程度?~~ **已答(2026-08-25)**:六功能已界定 —— 活动(定义)的创建与展示 + 实例的创建/展示/编辑/删除;定义只许创建不许编删,创建要过审核。 - 活动创建的**审核**:谁来审、在模块内审还是别处、审什么(输入输出契约的合理性?)?(待用户展开) -- 实例的**编辑**具体指编辑什么:实例的输入数据?进行中的干预(暂停/叫停)?还是产出修正?(待用户展开) -- 实例删除是否真放开 —— 用户已标注存疑,先规划,后续按需求调。(悬着,不阻塞) +- 实例的**编辑**~~具体指编辑什么~~:**已答(2026-08-26):实例不可编辑**,入口不做。 +- 实例删除~~是否真放开~~:**已答(2026-08-26):实例不可删除**,入口不做;六功能只剩实例的创建/展示。 - 「运营」侧还要不要监控/验收类功能(此前提过负责人验收规划与统计产出)—— 六功能里未直接出现,是否归在「实例的展示/编辑」里,还是另有入口?(待用户展开)