-
-
-
-
-
Step · 03 · Quick Screen
-
本次生成
-
- {new Date(current.createdAt).toLocaleString('zh-CN')}
-
-
-
{current.id}
-
-
-
+
+
+
+
Step · 02 · Quick Screen
+
本次生成
+
+ {new Date(current.createdAt).toLocaleString('zh-CN')}
+
+
{current.id}
+
+
)}
diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx
index 7bf3901..555a225 100644
--- a/src/components/Sidebar.tsx
+++ b/src/components/Sidebar.tsx
@@ -2,6 +2,76 @@
import type { GenSession } from '@/lib/types';
+function modeLabel(mode?: GenSession['inputMode']) {
+ if (mode === 'remix') return '二创';
+ if (mode === 'replicate') return '复刻';
+ if (mode === 'extend') return '补全';
+ return '想法';
+}
+
+function imageSourcesForSession(session: GenSession) {
+ const uploaded = session.uploadedImages?.map(image => ({
+ url: image.url,
+ label: image.role === 'subject' ? '主体图' : image.role === 'reference' ? '参考图' : image.accessoryName || image.role,
+ })) ?? [];
+ if (uploaded.length) return uploaded;
+ return session.refImages.map((url, index) => ({ url, label: `参考 ${index + 1}` }));
+}
+
+function ActiveSessionDetail({ session }: { session: GenSession }) {
+ const refs = imageSourcesForSession(session);
+ const selectedCount = session.images.filter(image => image.status === 'selected').length;
+ const packCount = session.packs?.length ?? 0;
+
+ return (
+
+
+
下级信息
+
+ {modeLabel(session.inputMode)}
+
+
+
+
+ {session.characterSpec?.name || session.prompt || '未填写'}
+
+
+
+
+
图片
+
{session.images.length}
+
+
+
+
+
+ {refs.length > 0 && (
+
+
Reference
+
+ {refs.slice(0, 4).map((ref, index) => (
+
+

+
+ ))}
+
+
+ )}
+
+
+ {new Date(session.createdAt).toLocaleString('zh-CN', { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' })}
+ {session.id.slice(0, 10)}
+
+
+ );
+}
+
export default function Sidebar({
open,
onToggle,
@@ -109,6 +179,7 @@ export default function Sidebar({
+ {active &&