diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx
index f3b437b..cb9ad91 100644
--- a/src/components/Sidebar.tsx
+++ b/src/components/Sidebar.tsx
@@ -2,6 +2,72 @@
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 (
+
+
+ Session
+
+ {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,
@@ -33,88 +99,108 @@ export default function Sidebar({
);
}
+ const activeSession = sessions.find(session => session.id === currentId) ?? null;
+
return (
-