流程卡与活动卡按管理系统风重做:着色图标 · 状态胶囊 · 计量块

上一稿的两段式卡(头行 + 竖线分格)信息没错,视觉是素坯 —— 没有身份色、
没有状态语义色、数字排一排像表格,整片看过去是灰的。按管理后台的规格重做:

  · **头行**:40px 着色图标定身份(流程靛 · 活动青 · 审批琥珀)+ 名/标识 +
    **状态胶囊**(圆点 + 词:生效/上架走绿,下线/停用是灰,下线的图标同步转灰);
  · **计量块**:浅底圆角小块、数上名下 —— 边闭合不全那格整块点红,不只字红;
  · 活动卡的业务分类并进副标行(`rfq-intake · 统一报价`)—— 分类是唯一的一维,
    不值一枚独立签;
  · 卡 12px 圆角软影,悬停抬升;幽灵卡同尺寸虚线位。
  · 计量字号 14px、卡最小宽 288 —— 「14/14」实测不再截断(scrollWidth 核过)。

中途试过一版「图纸风」(流程画几何缩略、活动画芯片、审批画比较器),
用户明确不要:**这是管理系统,不做电路隐喻** —— 图形三件连同珊格纸整体撤除,
只留这一套管理系统语言。

交互不变:整卡可点、⋯ 菜单(编辑/删除)、就地改名、幽灵卡新建/装入,全部复核过。
五闸绿。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
2026-07-30 00:25:42 +08:00
co-authored by Claude Opus 5
parent 1fd215cf40
commit 9b286ae4ba
3 changed files with 52 additions and 42 deletions
@@ -65,15 +65,17 @@ export function LibraryHome({ nav }: HomeProps) {
<div key={a.activityId} className={'g-fcard' + (a.enabled ? '' : ' off')}>
<button className="hit" aria-label={`打开 ${a.name}`} onClick={() => nav.push({ k: 'act', id: a.activityId })} />
<div className="hd">
<span className="ico">
<Ico name="boxes" s={15} />
<span className="ico teal">
<Ico name="boxes" s={17} />
</span>
<div className="ttl">
<b>{a.name}</b>
<em>{a.activityId}</em>
{/* 标识与业务分类同一行副标 —— 分类是活动库唯一的一维,不值一枚独立签 */}
<em>
{a.activityId} · {a.category}
</em>
</div>
<span className="tag">{a.category}</span>
<span className={'stx' + (a.enabled ? ' on' : '')}>{a.enabled ? '已上架' : '已停用'}</span>
<span className={'pill' + (a.enabled ? ' on' : '')}>{a.enabled ? '已上架' : '已停用'}</span>
</div>
<div className="plate">
<span>
@@ -164,8 +166,8 @@ function ApprovalTemplates({ data }: { data: GovApprovalTemplates['templates'] }
{data.map((t) => (
<div key={t.id} className="g-fcard">
<div className="hd">
<span className="ico apr">
<Ico name="shield-check" s={15} />
<span className="ico amber">
<Ico name="shield-check" s={17} />
</span>
<div className="ttl">
<b>{t.name}</b>
@@ -268,7 +268,7 @@ function FlowShelf({ nav }: { nav: Nav }) {
<button className="hit" aria-label={`打开 ${shown.name}`} onClick={() => nav.push({ k: 'pkg', id: f.id })} />
<div className="hd">
<span className="ico">
<Ico name="workflow" s={15} />
<Ico name="workflow" s={17} />
</span>
<div className="ttl">
{renaming === f.id ? (
@@ -291,7 +291,7 @@ function FlowShelf({ nav }: { nav: Nav }) {
)}
<em>{f.id}</em>
</div>
<span className={'stx' + (f.active === undefined ? '' : ' on')}>
<span className={'pill' + (f.active === undefined ? '' : ' on')}>
{f.active === undefined ? '已下线' : `生效 v${f.active.version}`}
</span>
<button
@@ -306,7 +306,7 @@ function FlowShelf({ nav }: { nav: Nav }) {
<Ico name="more-horizontal" s={14} />
</button>
</div>
{/* 数据板:四格等宽、竖线分隔 —— 一行说完这条流有多大、闭合没有 */}
{/* 计量块:一排说完这条流有多大、闭合没有 */}
<div className="plate">
<span>
<b>{c.activity}</b>