diff --git a/apps/web/src/app/styles/console.css b/apps/web/src/app/styles/console.css index aa183dd..40cdfc0 100644 --- a/apps/web/src/app/styles/console.css +++ b/apps/web/src/app/styles/console.css @@ -521,7 +521,7 @@ 属性区从右侧窄栏挪到图下整行(g-wide),声明式契约细节再往下。 */ /* 三栏(2026-07-30):左**窄**版本条 · 中流程图 · 右节点属性。 右栏用包壳绝对定位 —— 行高由中栏的图定,属性长了在卡内滚,不把图拉长。 */ -.g-flowlab { display: grid; grid-template-columns: 132px minmax(0, 2.5fr) minmax(320px, 1.25fr); gap: 12px; align-items: stretch; } +.g-flowlab { display: grid; grid-template-columns: minmax(196px, 224px) minmax(0, 2.5fr) minmax(320px, 1.25fr); gap: 12px; align-items: stretch; } .g-nodewrap { position: relative; min-height: 0; } .g-nodewrap > .g-nodecard { position: absolute; inset: 0; height: auto; } /* 版本卡:与右侧的图**等高**(grid stretch),版本多了在卡内滚,不把页面撑长。 @@ -545,24 +545,27 @@ .g-ver-new:disabled { opacity: .5; cursor: default; box-shadow: none; } .g-vercard-list { flex: 1; min-height: 0; overflow-y: auto; padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; } -/* ── 窄版本条:一版一行(v几 + 状态 + 计数),动作只在**看着的那一版**上展开 ── */ -.g-verslim .g-vercard-h { padding: 30px 10px 16px; gap: 4px; } -.g-verslim .g-vercard-list { padding: 10px 8px; gap: 6px; } -.g-verrow { display: flex; flex-direction: column; border: 1px solid var(--sh-line); border-left: 3px solid var(--sh-steel); background: #fff; } +/* ── 版本条:**动作统一住顶部**(作用于正看的这一版),行里只放事实、单行排满 ── */ +.g-verslim .g-vercard-h { padding: 30px 14px 16px; gap: 4px; } +.g-verslim .g-vercard-list { padding: 10px 12px; gap: 6px; } +/* 动作条:一排小钮 + 右端注明作用对象(v几)—— 换版看,条上的钮跟着换语义 */ +.g-veracts { flex: none; display: flex; align-items: center; gap: 5px; padding: 9px 14px; border-bottom: 1px solid var(--sh-line); background: #f9fafc; } +.g-veracts .g-ver-act { padding: 4px 10px; letter-spacing: .06em; } +.g-veracts .who { margin-left: auto; font: 600 9.5px/1 var(--sh-mono); letter-spacing: .1em; color: var(--sh-muted); } +.g-verrow { display: flex; align-items: baseline; gap: 8px; width: 100%; padding: 9px 11px; border: 1px solid var(--sh-line); border-left: 3px solid var(--sh-steel); background: #fff; font-family: var(--sh-mono); font-size: 10px; color: #3a4452; text-align: left; cursor: pointer; transition: border-color var(--t-fast); } +.g-verrow:hover { border-color: #aeb9c6; } .g-verrow.on { border-color: #9fb0c0; background: #f2f5f8; } .g-verrow.live { border-left-color: var(--sh-brass); background: var(--sh-brass-wash); } .g-verrow.live.on { border-color: #cbb98d; } -.g-verrow-h { display: flex; flex-wrap: wrap; align-items: baseline; gap: 3px 6px; padding: 7px 8px; border: 0; background: transparent; font-family: var(--sh-mono); font-size: 10px; color: #3a4452; text-align: left; cursor: pointer; } -.g-verrow-h > b { font-size: 12.5px; font-weight: 700; color: var(--sh-ink); } -.g-verrow-h .st { font-size: 9px; letter-spacing: .1em; color: var(--sh-muted); } -.g-verrow-h .st.live { color: var(--sh-brass); font-weight: 700; } -.g-verrow-h .cnt { flex-basis: 100%; font-size: 9px; color: var(--sh-muted); } -.g-verrow-a { display: flex; flex-wrap: wrap; gap: 4px; padding: 0 8px 8px; } -.g-verrow-a .g-ver-act { flex: 1 1 auto; text-align: center; padding: 3px 6px; letter-spacing: .06em; } +.g-verrow:focus-visible { outline: 2px solid var(--brand); outline-offset: 1px; } +.g-verrow > b { font-size: 13px; font-weight: 700; color: var(--sh-ink); } +.g-verrow .st { font-size: 9px; letter-spacing: .12em; color: var(--sh-muted); } +.g-verrow .st.live { color: var(--sh-brass); font-weight: 700; } +.g-verrow .cnt { margin-left: auto; font-size: 9.5px; color: var(--sh-muted); white-space: nowrap; } .g-ver-act.t-bad { color: #b0413e; border-color: #e0bcba; } .g-ver-act:disabled { opacity: .45; cursor: default; } -/* 改名条:名字改的是整条流,所以落在卡底、不挂在某一行上 */ -.g-verrename { flex: none; display: flex; flex-direction: column; gap: 5px; padding: 9px 10px; border-top: 1px solid var(--sh-line); background: #f9fafc; } +/* 改名条:紧贴动作条下方(点「改名」就地展开) */ +.g-verrename { flex: none; display: flex; flex-direction: column; gap: 5px; padding: 9px 14px; border-bottom: 1px solid var(--sh-line); background: #f9fafc; } .g-verrename .g-input { height: 26px; font-size: 12px; } .g-verrename .t { font-family: var(--sh-mono); font-size: 8.5px; line-height: 1.7; color: var(--sh-muted); } .g-ver { display: flex; align-items: center; gap: 9px; padding: 9px 11px; border: 1px solid var(--sh-line); border-left: 3px solid var(--sh-steel); background: #fff; cursor: pointer; font-family: var(--sh-mono); font-size: 11px; color: #3a4452; } diff --git a/apps/web/src/features/gov-process/internal/panel.tsx b/apps/web/src/features/gov-process/internal/panel.tsx index ef117db..a4504bb 100644 --- a/apps/web/src/features/gov-process/internal/panel.tsx +++ b/apps/web/src/features/gov-process/internal/panel.tsx @@ -661,61 +661,46 @@ function FlowLab({ {/* 编排工作区:左 1/3 版本列表 + 右 2/3 画布 —— 版本收在流程内部,不平铺台面 */}
- {/* 左栏窄:一版一行只放「v几 + 状态」;动作(激活/停用/改名/删除)只在选中行展开 */} + {/* + * 左栏:版本。**动作统一住顶部**(作用于正看的这一版),行里只放事实 + * (v几 · 状态 · 点边计数)—— 完整显示,不在行内再展开一排小钮。 + */}
@@ -897,14 +901,15 @@ function FlowLab({ )} {node.kind === 'activity' && node.flavor !== 'approval' && (
- 实现 + {/* 实现 = **从活动库链接一个活动**:节点不含实现,链接才算装载(激活判据之二) */} + 实现 · 链接自活动库