Archived
三卡头线对齐 · 题字调大 · 四钮各归其位 —— 两个「编辑」分工划清
· **头线对齐**:左右卡的头底线与中卡的**图框上边**同一水平(308/308/308)——
中卡题下不再另画一条线,画布顶边就是它的分割线(几何:14 纸内距 + 26 题行 + 12)。
· **题字**:9.5px → 11px,疏排大写照旧。
· **四钮全部住标题栏右端**、同一族(图纸方钮 26 高):
版本 → 新建 · 编辑 流程图 → 编辑 节点 · 属性 → 保存 v4
左卡那条独立动作条(.g-veracts)整条撤掉。
· **两个「编辑」划清**(用户定「标题栏的编辑只作用于版本记录」):
· 版本卡的编辑 = **版本记录**:开着才出改名条、行尾钮换成删除;不碰画布。
· 流程图卡的编辑 = 手绘画布;编辑态升为工作区级的做法就此回退 ——
FlowFigureBlock 收回内部 state(canEdit 回来),两者互不相干。
停用/激活照旧长在版本行尾(那是某一版的运行时开关)。
实测:头线 308/308/308;头钮 左[新建·编辑] 中[编辑] 右[保存 v4];
点版本卡「编辑」→ 行钮变删除 + 出改名条,画布进手绘 = false;点「完成」还原。
五闸绿。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
@@ -361,8 +361,11 @@ function FlowLab({
|
||||
const [ask, setAsk] = useState<{ spec: AskSpec; danger?: boolean } | undefined>(undefined);
|
||||
/** 改名就地开一个输入框(名字改的是整条流,不是某一版) */
|
||||
const [renaming, setRenaming] = useState(false);
|
||||
/** 手绘编辑态 —— 工作区级:动作条与版本行的按钮语义都跟着它变 */
|
||||
const [editingGraph, setEditingGraph] = useState(false);
|
||||
/**
|
||||
* **版本记录**的编辑态(2026-07-30):开着才出改名条、行尾钮换成删除 ——
|
||||
* 它只管版本记录这一件事,与画布的手绘编辑(那是流程图卡自己的)互不相干。
|
||||
*/
|
||||
const [editingVersions, setEditingVersions] = useState(false);
|
||||
const canvasRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
const nodes = graph?.nodes ?? [];
|
||||
@@ -668,41 +671,47 @@ function FlowLab({
|
||||
* (v几 · 状态 · 点边计数)—— 完整显示,不在行内再展开一排小钮。
|
||||
*/}
|
||||
<aside className="g-vercard g-verslim">
|
||||
<div className="g-vercard-h">版本</div>
|
||||
{/*
|
||||
* 动作条只放**建改类**:新建 · 编辑 · 改名 —— 它们作用于整条流/工作区。
|
||||
* 停用/激活是**某一版**的运行时开关,落在版本行上(编辑态换成删除:
|
||||
* 正在改定义的人,手边该是版本管理,不是启停开关)。
|
||||
*/}
|
||||
<div className="g-veracts">
|
||||
<button className="g-ver-act" onClick={askClone} disabled={cloneVersion.isPending || editingGraph} title="以当前版为底克隆一版">
|
||||
<Ico name="plus" s={10} /> 新建
|
||||
<div className="g-vercard-h">
|
||||
版本
|
||||
<button className="g-ver-act" onClick={askClone} disabled={cloneVersion.isPending} title="以当前版为底克隆一版">
|
||||
<Ico name="plus" s={11} /> 新建
|
||||
</button>
|
||||
{/* 这枚「编辑」只作用于**版本记录**:改名与删除 —— 画布的编辑在流程图卡上 */}
|
||||
<button
|
||||
className={'g-ver-act' + (editingGraph ? ' t-go' : '')}
|
||||
disabled={editingGraph}
|
||||
title={editingGraph ? '正在绘图 —— 用画布里的 保存绘图 / 取消 收尾' : '手工绘图:活动点/审批点/起止,拖拽连线'}
|
||||
onClick={() => setEditingGraph(true)}
|
||||
className={'g-ver-act' + (editingVersions ? ' t-go' : '')}
|
||||
title={editingVersions ? '完成:行尾钮变回启停' : '编辑版本记录:改名 · 删除'}
|
||||
onClick={() => {
|
||||
setEditingVersions(!editingVersions);
|
||||
setRenaming(false);
|
||||
}}
|
||||
>
|
||||
<Ico name="pen-line" s={10} /> {editingGraph ? '编辑中' : '编辑'}
|
||||
</button>
|
||||
<button className="g-ver-act" onClick={() => setRenaming(true)} title="改这条流的名字(所有版本同名)">
|
||||
改名
|
||||
<Ico name={editingVersions ? 'check' : 'pen-line'} s={11} /> {editingVersions ? '完成' : '编辑'}
|
||||
</button>
|
||||
</div>
|
||||
{renaming && (
|
||||
<div className="g-verrename">
|
||||
<input
|
||||
className="g-input"
|
||||
autoFocus
|
||||
defaultValue={pkg.name}
|
||||
placeholder="流程名"
|
||||
onKeyDown={(e) => {
|
||||
if (e.key === 'Enter') rename.mutate((e.target as HTMLInputElement).value.trim());
|
||||
if (e.key === 'Escape') setRenaming(false);
|
||||
}}
|
||||
/>
|
||||
<span className="t">回车改名 · Esc 取消 —— 名字是这条流的身份,各版本同名</span>
|
||||
{editingVersions && (
|
||||
<div className="g-veredit">
|
||||
{renaming ? (
|
||||
<div className="g-verrename">
|
||||
<input
|
||||
className="g-input"
|
||||
autoFocus
|
||||
defaultValue={pkg.name}
|
||||
placeholder="流程名"
|
||||
onKeyDown={(e) => {
|
||||
if (e.key === 'Enter') rename.mutate((e.target as HTMLInputElement).value.trim());
|
||||
if (e.key === 'Escape') setRenaming(false);
|
||||
}}
|
||||
/>
|
||||
<span className="t">回车改名 · Esc 取消 —— 名字是这条流的身份,各版本同名</span>
|
||||
</div>
|
||||
) : (
|
||||
<>
|
||||
<button className="g-ver-act" onClick={() => setRenaming(true)}>
|
||||
改名
|
||||
</button>
|
||||
<span className="t">行尾可删版本 —— 生效版先停用</span>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
<div className="g-vercard-list">
|
||||
@@ -729,7 +738,7 @@ function FlowLab({
|
||||
<span className="cnt">
|
||||
{v.nodes.length} 节点 · {v.edges.length} 边
|
||||
</span>
|
||||
{editingGraph ? (
|
||||
{editingVersions ? (
|
||||
<button
|
||||
className="g-ver-act t-bad"
|
||||
disabled={isActive || dropVersion.isPending}
|
||||
@@ -786,8 +795,7 @@ function FlowLab({
|
||||
* 图上真正生效可编辑的只有**名字** —— 不传 positions,双击就不出岗位一栏。
|
||||
* 岗位、判据这些闭环要素在**节点属性**里决定;分配到人是运营的事,这里不碰。
|
||||
*/
|
||||
editing={editingGraph}
|
||||
onEditingChange={setEditingGraph}
|
||||
canEdit
|
||||
onNodeClick={(nid) => setSel(nid)}
|
||||
/* 边不是可编辑对象 —— 点一条线,选中**发起它的那个节点**(分支归它管) */
|
||||
onEdgeClick={(edge) => setSel(edge.from)}
|
||||
|
||||
Reference in New Issue
Block a user