From afe5e8bfdf3807b16534b175c09c38c411fc9722 Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 20 May 2026 10:01:21 +0800 Subject: [PATCH] fix: split generation workspace panels --- .memory/worklog.json | 14 +++++++ src/app/globals.css | 69 +++++++++++++++++++++++++++++++++++ src/app/page.tsx | 36 ++++++++++-------- src/components/PackPanel.tsx | 68 ++++++++++++++++++---------------- src/components/ResultGrid.tsx | 2 +- 5 files changed, 142 insertions(+), 47 deletions(-) diff --git a/.memory/worklog.json b/.memory/worklog.json index 00f39d7..1022f11 100644 --- a/.memory/worklog.json +++ b/.memory/worklog.json @@ -1489,6 +1489,20 @@ "message": "fix: loosen glass dashboard workspace", "hash": "7fcda19", "files_changed": 8 + }, + { + "ts": "2026-05-20T09:49:16+08:00", + "type": "commit", + "message": "auto-save 2026-05-20 09:49 (~3)", + "hash": "ccbfd3e", + "files_changed": 3 + }, + { + "ts": "2026-05-20T09:54:43+08:00", + "type": "commit", + "message": "auto-save 2026-05-20 09:54 (~3)", + "hash": "7ad323a", + "files_changed": 3 } ] } diff --git a/src/app/globals.css b/src/app/globals.css index 414ce98..159b92d 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -354,6 +354,40 @@ input, textarea { backdrop-filter: blur(18px); } +.session-workspace { + height: calc(100vh - 116px); + min-height: 640px; +} + +.session-split { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(360px, 430px); + gap: 18px; + align-items: stretch; +} + +.session-image-pane, +.pack-scroll { + scrollbar-width: thin; + scrollbar-color: rgba(255, 255, 255, 0.18) transparent; +} + +.session-image-pane::-webkit-scrollbar, +.pack-scroll::-webkit-scrollbar { + width: 8px; +} + +.session-image-pane::-webkit-scrollbar-thumb, +.pack-scroll::-webkit-scrollbar-thumb { + border-radius: 999px; + background: rgba(255, 255, 255, 0.16); +} + +.session-pack-pane { + border-left: 1px solid rgba(255, 255, 255, 0.08); + padding-left: 18px; +} + .result-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr)); @@ -368,6 +402,41 @@ input, textarea { } } +@media (min-width: 1760px) { + .session-split { + grid-template-columns: minmax(0, 1fr) minmax(400px, 480px); + gap: 22px; + } + + .session-pack-pane { + padding-left: 22px; + } +} + +@media (max-width: 1180px) { + .session-workspace { + height: auto; + min-height: 0; + } + + .session-split { + display: flex; + flex-direction: column; + } + + .session-image-pane, + .session-pack-pane { + overflow: visible; + } + + .session-pack-pane { + border-left: 0; + border-top: 1px solid rgba(255, 255, 255, 0.08); + padding-left: 0; + padding-top: 18px; + } +} + /* ===== Login (cloned from SKG source) ===== */ .login-page { background: diff --git a/src/app/page.tsx b/src/app/page.tsx index d27f247..82b2bba 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -353,8 +353,8 @@ export default function Home() { /> )} {current && ( -
-
+
+
Step · 02 · Quick Screen

本次生成

@@ -364,19 +364,25 @@ export default function Home() {
{current.id}
- - +
+
+ +
+ +
)}
diff --git a/src/components/PackPanel.tsx b/src/components/PackPanel.tsx index b46d3b2..6acf5a9 100644 --- a/src/components/PackPanel.tsx +++ b/src/components/PackPanel.tsx @@ -60,10 +60,10 @@ function AssetRow({ template, asset, accent, onRegenerate }: { } } return ( -
+
{/* thumbnail */}
{ready ? ( @@ -124,7 +124,7 @@ function AssetRow({ template, asset, accent, onRegenerate }: { {ready && onRegenerate && ( @@ -475,9 +475,13 @@ export default function PackPanel({ if (!primaryImage) { return ( -
+
-
+
+ +
Step · 03 · Assets

选中主方案后展开资产清单

@@ -493,10 +497,10 @@ export default function PackPanel({ const generatedTotal = packs.reduce((s, p) => s + p.assets.length, 0); return ( -
+
{/* Step 03 header card */} -
-
+
+
Step · 03 · Lock & Generate

角色锁定 & 资产清单

@@ -505,7 +509,7 @@ export default function PackPanel({

{/* primary image + stats */} -
+
{generatedTotal} / {totalImageSlots} 张
图片位
@@ -519,11 +523,11 @@ export default function PackPanel({
{/* action buttons */} -
+
- {/* Pack sections */} - {PACK_ORDER.map(kind => { - const pack = packs.find(p => p.kind === kind && p.sourceImageId === primaryImage.id); - return ( - onGenerate(primaryImage, kind)} - onRegenerateAsset={onRegenerateAsset} - /> - ); - })} +
+ {/* Pack sections */} + {PACK_ORDER.map(kind => { + const pack = packs.find(p => p.kind === kind && p.sourceImageId === primaryImage.id); + return ( + onGenerate(primaryImage, kind)} + onRegenerateAsset={onRegenerateAsset} + /> + ); + })} - {/* Text + Video */} - - + {/* Text + Video */} + + +
); } diff --git a/src/components/ResultGrid.tsx b/src/components/ResultGrid.tsx index bd4cff7..6e86caa 100644 --- a/src/components/ResultGrid.tsx +++ b/src/components/ResultGrid.tsx @@ -46,7 +46,7 @@ export default function ResultGrid({ images, onAction }: ResultGridProps) { return (
-
+
1