+ {/* 左侧群组信息 */}
+
+
+
+ {users.length === 1 ? (
+
+ ) : users.length === 2 ? (
+
{users.slice(0, 2).map((user, index) => (
))}
-
-
+ ) : users.length === 3 ? (
+
+
+ {users.slice(0, 2).map((user, index) => (
+
+ ))}
+
+
+
+
+
+ ) : (
+
+ {users.slice(0, 4).map((user, index) => (
+
+ ))}
+
+ )}
+
+
+
+
+
{group.name}
+
{users.length} 名成员
+
+
+
+ {/* 右侧头像组和按钮 */}
+
+
+ {users.slice(0, 4).map((user) => {
+ const avatarData = getAvatarData(user.name);
+ return (
+
+
+
+
+ {'avatar' in user && user.avatar ? (
+
+ ) : (
+
+ {avatarData.text}
+
+ )}
+
+
+
+ {user.name}
+
+
+
+ );
+ })}
+ {users.length > 4 && (
+
+ +{users.length - 4}
+
+ )}
+
+
+
+
+
+
+ {/* Main Chat Area */}
+
+
+
+ {messages.map((message) => (
+
+ {message.sender.name !== "我" && (
+
+ {'avatar' in message.sender && message.sender.avatar ? (
+
+ ) : (
+
+ {message.sender.name[0]}
+
+ )}
+
+ )}
+
+
{message.sender.name}
+
+
+ {message.content}
+
+ {message.isAI && isTyping && currentMessageRef.current === message.id && (
+ ▋
+ )}
- ) : (
-
- {users.slice(0, 4).map((user, index) => (
-
- ))}
-
- )}
-
-
-
-
-
{group.name}
-
{users.length} 名成员
-
-
-
- {/* 右侧头像组和按钮 */}
-
-
- {users.slice(0, 4).map((user) => {
- const avatarData = getAvatarData(user.name);
- return (
-
-
-
-
- {'avatar' in user && user.avatar ? (
-
- ) : (
-
- {avatarData.text}
-
- )}
-
-
-
- {user.name}
-
-
-
- );
- })}
- {users.length > 4 && (
-
- +{users.length - 4}
+ {message.sender.name === "我" && (
+
+ {'avatar' in message.sender && message.sender.avatar ? (
+
+ ) : (
+
+ {message.sender.name[0]}
+
+ )}
+
+ )}
- )}
+ ))}
+
+ {/* 添加一个二维码 */}
+
+

+
扫码体验AI群聊
+
-
+
+ {/* Input Area */}
+
+
+ {messages.length > 0 && (
+
+
+
+
+
+
+ 分享聊天记录
+
+
+
+ )}
+
setInputMessage(e.target.value)}
+ onKeyPress={(e) => e.key === 'Enter' && handleSendMessage()}
+ />
+
-
-
- {/* Main Chat Area */}
-
-
-
- {messages.map((message) => (
-
- {message.sender.name !== "我" && (
-
- {'avatar' in message.sender && message.sender.avatar ? (
-
- ) : (
-
- {message.sender.name[0]}
-
- )}
-
- )}
-
-
{message.sender.name}
-
-
- {message.content}
-
- {message.isAI && isTyping && currentMessageRef.current === message.id && (
- ▋
- )}
-
-
- {message.sender.name === "我" && (
-
- {'avatar' in message.sender && message.sender.avatar ? (
-
- ) : (
-
- {message.sender.name[0]}
-
- )}
-
- )}
-
- ))}
-
- {/* 添加一个二维码 */}
-
-

-
扫码体验AI群聊
-
-
-
-
-
- {/* Input Area */}
-
-
- {messages.length > 0 && (
-
-
-
-
-
-
- 分享聊天记录
-
-
-
- )}
-
setInputMessage(e.target.value)}
- onKeyPress={(e) => e.key === 'Enter' && handleSendMessage()}
- />
-
-
{/* Members Management Dialog */}
diff --git a/src/components/SharePoster.tsx b/src/components/SharePoster.tsx
index 6feffd3..327520f 100644
--- a/src/components/SharePoster.tsx
+++ b/src/components/SharePoster.tsx
@@ -60,7 +60,7 @@ export function SharePoster({ isOpen, onClose, chatAreaRef }: SharePosterProps)
chatAreaRef.current.scrollTop = 0;
const viewportWidth = Math.min(window.innerWidth, document.documentElement.clientWidth);
- const extraSpace = 20;
+ const extraSpace = 6;
const targetWidth = viewportWidth * 0.95 - (extraSpace * 2);
const currentWidth = messageContainer.getBoundingClientRect().width;
@@ -72,17 +72,18 @@ export function SharePoster({ isOpen, onClose, chatAreaRef }: SharePosterProps)
const dataUrl = await domtoimage.toSvg(messageContainer as HTMLElement, {
bgcolor: '#f3f4f6',
scale: 1, // 回到较安全的值
- width: targetWidth + (extraSpace * 2),
- height: adjustedHeight + (extraSpace * 2),
+ width: targetWidth + (extraSpace * 5),
+ height: adjustedHeight + (extraSpace * 5),
style: {
padding: `${extraSpace}px`,
- margin: '0',
+ margin: '0 auto',
width: '120%',
height: '110%',
transform: `scale(${scale})`,
transformOrigin: 'top left',
background: '#f3f4f6',
boxSizing: 'border-box'
+
},
quality: 1.0
});
@@ -168,7 +169,7 @@ export function SharePoster({ isOpen, onClose, chatAreaRef }: SharePosterProps)
onClose();
}
}}>
-
+
{/* 图片容器 */}
{posterImage && (