fix: YYX测试清单16条收口——资产库弹窗层级/批次多选删/商品筛选/模特卡单卡化/垃圾桶清空等

- 资产库:批次弹窗降层(under-confirm 990<999)修单图删除确认弹窗被压;编辑态批次卡多选批删;facets 新增 products 关联商品筛选(前后端,+2 测试);视频成品 tab 补搜索/排序/分页
- 平台套图工作台:「更多」气泡与 icon 左对齐+鼠标移出自动收起;模特卡改单卡(空态「+」占位,点卡进模特库单选回填)
- 工作台:删余额条,冻结/共计移至小标题行右侧(.dash-funds-mono)
- 模特库:点模特卡弹详情(形象图/标签/三视图+灯箱放大)
- 垃圾桶:新增「全部恢复」/「清空垃圾桶」(清空二次确认)
- 视频项目页:字重/阴影等轻量对齐设计规范
- api.assetFacets 返回体逐键兜底:旧后端缺 products 键会致资产库整页 undefined.find 白屏(前后端部署时序防护,浏览器已复现验证)

验证:tsc --noEmit / vite build / apps.assets 测试全过;暂存树已独立编译验证,不依赖工作区其余在途改动

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
zyc
2026-07-02 18:03:26 +08:00
co-authored by Claude Fable 5
parent a048c32527
commit 5ec69ad91f
14 changed files with 496 additions and 176 deletions
+31 -17
View File
@@ -461,22 +461,6 @@
.image-workbench .iw-step-h .title { font-size: 14px; font-weight: 600; color: var(--accent-black); }
.image-workbench .iw-step-h .right { font-size: 12px; color: var(--heat); cursor: pointer; }
.image-workbench .iw-step-h .right:hover { text-decoration: underline; }
/* P0①「模特库」入口按钮(打开全屏 ActorLibrary · 二级胶囊 · 不抢主橙) */
.image-workbench .iw-step-h .iw-actor-lib-btn {
margin-left: auto;
display: inline-flex; align-items: center; gap: 5px;
height: 26px; padding: 0 10px 0 8px;
background: var(--surface);
border: 1px solid var(--border-faint);
border-radius: var(--r-sm);
color: var(--black-alpha-72);
font-size: 12px; font-family: inherit; cursor: pointer;
transition: border-color var(--t-base), color var(--t-base), background var(--t-base);
}
.image-workbench .iw-step-h .iw-actor-lib-btn:hover { border-color: var(--heat-20); color: var(--heat); background: var(--heat-12); }
.image-workbench .iw-step-h .iw-actor-lib-btn svg { width: 12px; height: 12px; }
/* 模特库按钮在场时,「全部 (n)」紧随其后,不再 margin-left:auto */
.image-workbench .iw-step-h .iw-actor-lib-btn + .right { margin-left: 8px; }
.image-workbench .iw-sub-h {
font-size: 12px; color: var(--black-alpha-48);
margin-bottom: 6px;
@@ -573,6 +557,28 @@
.image-workbench .model-card .m-check svg { width: 11px; height: 11px; visibility: hidden; }
.image-workbench .model-card.selected .m-check { background: var(--heat); border-color: var(--heat); }
.image-workbench .model-card.selected .m-check svg { visibility: visible; }
/* row40:模特改单选 —— 只一张卡,一列且宽度约等原双列模特卡,不留半宽空位;占位/已选同用 .model-card 故同尺寸 */
.image-workbench .model-grid.model-grid-single { grid-template-columns: minmax(0, 150px); }
/* 未选时占位「+」卡(虚线,点击打开模特库);已选卡点击可换模特 */
.image-workbench .model-card.model-card-empty {
border-style: dashed;
border-color: var(--black-alpha-24);
background: var(--background-lighter);
}
.image-workbench .model-card.model-card-empty:hover {
border-color: var(--heat-40);
background: var(--heat-12);
}
.image-workbench .model-card .m-thumb-empty {
display: flex; flex-direction: column; align-items: center; justify-content: center;
gap: 8px;
color: var(--black-alpha-48);
}
.image-workbench .model-card.model-card-empty:hover .m-thumb-empty { color: var(--heat); }
.image-workbench .model-card .m-thumb-empty .m-empty-label {
font-size: 12px; color: inherit;
font-family: var(--font-mono); letter-spacing: .02em;
}
/* ── 平台选择 · 3 列卡多选(基线 .platform-card)── */
.image-workbench .platform-grid {
@@ -1081,7 +1087,9 @@
.image-workbench .gen-img-more,
.image-workbench .gen-batch-more { position: relative; display: inline-flex; }
.image-workbench .gen-bubble {
position: absolute; top: calc(100% + 6px); right: 0;
/* row37:气泡左缘与触发它的「更多」icon 左缘对齐(原 right:0 是右对齐)。
.gen-image 不裁切(见上方 901 行注释),气泡可溢出卡片显示,不会被卡片切掉。 */
position: absolute; top: calc(100% + 6px); left: 0;
min-width: 168px;
background: var(--surface);
border: 1px solid var(--border-faint);
@@ -1097,6 +1105,12 @@
.image-workbench .gen-batch-more:focus-within .gen-bubble { display: block; }
/* 单图气泡改 click 驱动(§4.18 悬浮组在 hover 浮层内,hover 嵌套会闪;用 .open 显式控制) */
.image-workbench .gen-img-more .gen-bubble.open { display: block; }
/* row39:「更多按钮 → 气泡」间 6px 空隙的透明桥接 —— 鼠标下移到气泡途中不掠出容器,
避免 .gen-img-more 的 onMouseLeave 在空隙处误触发把气泡收起(桥接是气泡的后代,仍算「在区域内」)。 */
.image-workbench .gen-img-more .gen-bubble::before {
content: ""; position: absolute;
left: 0; right: 0; top: -6px; height: 6px;
}
.image-workbench .gen-bubble-item {
width: 100%;
display: flex; align-items: center; gap: 8px;