From dd820616a4ffdf8a5324895458e8da9536c967f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=E7=AC=91=E7=9A=84=E6=AF=9B=E6=AF=9B=E8=99=AB?= <315515767@qq.com> Date: Mon, 3 Aug 2026 22:16:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(canvas):=20=E9=9D=A2=E6=9D=BF=E5=B1=82?= =?UTF-8?q?=E7=BA=A7=E7=AE=A1=E7=90=86=20=E2=80=94=20=E4=BA=94=E5=B1=82Ele?= =?UTF-8?q?vation=E4=BD=93=E7=B3=BB+=E6=B8=90=E8=BF=9B=E5=BC=8F=E4=B8=89?= =?UTF-8?q?=E5=8C=BA+z-index=E5=85=A8=E9=87=8F=E8=BF=81=E7=A7=BB=20#98=20(?= =?UTF-8?q?#102)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(canvas): 面板层级管理优化 - 五层Elevation+渐进式三区+进度增强 #98 #94 基于 Wayfinder 地图 #98 决议执行面板层级管理优化: 1. 五层 Elevation 体系(决策1) - 画布组件 z-index 硬编码值全部迁移到 token - L0 画布层 → L1 工具层 → L2 面板层 → L3 对话框层 → L4 通知层 - 涉及 14 个 .tsx 文件,0 处 z-[N] 硬编码残留 2. prompt 面板渐进式三区(决策2) - B区参数区改为手风琴折叠模式(默认折叠) - 新增 SlidersHorizontal + ChevronDown 图标切换 - 点击展开 video 工具参数,收起后释放视觉空间 - A区核心区(prompt+生成)始终展开 3. 任务进度条增强(决策3) - 进度条高度 1px→1.5px,视觉更醒目 - 新增 shimmer 扫描动画(running 态,1.4s/cycle) - 新增百分比数字显示(tabular-nums 等宽数字) - 新增 indeterminate 模式(无百分比时循环扫描) - 尊重 prefers-reduced-motion(reducedMotion 时禁用动画) 4. CSS 动画 - 新增 @keyframes canvas-task-progress-shimmer - .canvas-task-progress-shimmer 类 Closes #98 * refactor(canvas): z-index 全量迁移到五层Elevation token #98 #94 补全 #98 五层 Elevation 体系的剩余硬编码 z-index 清理: - 三个设置弹层(图/音/视频)zIndex:1200 → var(--z-popover) - model-setup-guide z-[900] → var(--z-toast) - 项目侧栏 z-30 → var(--z-panel),章节预览 z-50 → var(--z-panel-floating) - shared 页头/缩放控件/访客提示 z-[80]/z-[70] → var(--z-panel-floating),右键菜单 z-[90] → var(--z-modal) - project 缩放控件容器 z-50 → var(--z-panel),绘图加载遮罩 z-[500] → var(--z-toast) - 反馈面板 z-[90] → var(--z-panel-floating) 共 16 处全局浮层 z-index 迁移到 token,消除层级冲突隐患。 --------- Co-authored-by: sikongyue <3155157671@qq.com> --- .../canvas/canvas-active-task-panel.tsx | 47 ++++++++++++++++--- .../components/canvas/canvas-asset-tray.tsx | 2 +- .../canvas/canvas-audio-settings-popover.tsx | 2 +- .../canvas/canvas-config-composer.tsx | 2 +- .../components/canvas/canvas-context-menu.tsx | 4 +- .../canvas/canvas-emotion-workspace.tsx | 6 +-- .../canvas/canvas-image-settings-popover.tsx | 2 +- .../canvas/canvas-leafer-graphics-layer.tsx | 2 +- .../canvas/canvas-local-agent-panel.tsx | 2 +- .../canvas/canvas-node-prompt-panel.tsx | 24 ++++++++-- .../canvas/canvas-project-sidebar.tsx | 6 +-- .../canvas-resource-mention-textarea.tsx | 2 +- .../canvas/canvas-short-drama-entry.tsx | 4 +- .../canvas/canvas-video-settings-popover.tsx | 2 +- .../canvas/canvas-workspace-overlays.tsx | 6 +-- .../director/canvas-director-workbench.tsx | 2 +- .../components/layout/model-setup-guide.tsx | 2 +- .../pages/canvas/canvas-project-feedback.tsx | 6 +-- web/src/pages/canvas/project.tsx | 6 +-- web/src/pages/canvas/shared.tsx | 8 ++-- web/src/styles/globals.css | 9 ++++ 21 files changed, 103 insertions(+), 43 deletions(-) diff --git a/web/src/components/canvas/canvas-active-task-panel.tsx b/web/src/components/canvas/canvas-active-task-panel.tsx index 58455fd9d..97a5cf10d 100644 --- a/web/src/components/canvas/canvas-active-task-panel.tsx +++ b/web/src/components/canvas/canvas-active-task-panel.tsx @@ -39,7 +39,7 @@ export function CanvasActiveTaskPanel({ tasks }: { tasks: GenerationTask[] }) { animate={{ opacity: 1, y: 0, scale: 1 }} exit={{ opacity: 0, y: -8, scale: 0.98 }} transition={motionTransition} - className="pointer-events-none absolute right-3 top-[72px] z-[120] w-[min(332px,calc(100vw-24px))]" + className="pointer-events-none absolute right-3 top-[72px] z-[var(--z-modal-overlay)] w-[min(332px,calc(100vw-24px))]" > : } -
- +
+ {progress !== undefined ? ( + + {/* 进度条 shimmer 扫描动画(对应 #98 决策3)*/} + {task.status === "running" && !reducedMotion ? ( + + ) : null} + + ) : ( + // indeterminate 模式(无具体百分比,从左到右循环扫描) + + )}
-
- {durationLabel} - {billingLabel} -
+ {/* 进度百分比显示(对应 #98 决策3:列表视图)*/} + {progress !== undefined && task.status === "running" ? ( +
+ {durationLabel} + {progress}% +
+ ) : ( +
+ {durationLabel} + {billingLabel} +
+ )} diff --git a/web/src/components/canvas/canvas-asset-tray.tsx b/web/src/components/canvas/canvas-asset-tray.tsx index c8d734d3c..64af72f65 100644 --- a/web/src/components/canvas/canvas-asset-tray.tsx +++ b/web/src/components/canvas/canvas-asset-tray.tsx @@ -125,7 +125,7 @@ export function CanvasAssetTray({ assetImages, canvasImages, showLibrary = true, ]; return ( -
event.stopPropagation()} onMouseDown={(event) => event.stopPropagation()} onWheel={(event) => event.stopPropagation()}> +
event.stopPropagation()} onMouseDown={(event) => event.stopPropagation()} onWheel={(event) => event.stopPropagation()}> {open ? ( +
{candidates.map((candidate, index) => ( + {paramsExpanded ? ( +
+ onConfigChange(node.id, patch)} /> +
+ ) : null}
) : null} diff --git a/web/src/components/canvas/canvas-project-sidebar.tsx b/web/src/components/canvas/canvas-project-sidebar.tsx index 93c2c2129..7651ee85b 100644 --- a/web/src/components/canvas/canvas-project-sidebar.tsx +++ b/web/src/components/canvas/canvas-project-sidebar.tsx @@ -118,7 +118,7 @@ export function CanvasProjectSidebar({ projectId, detail, onAddChapter, onLocate if (collapsed) { return ( -