Merge branch 'yongpxu-dev' into develop

This commit is contained in:
超级老白兔
2025-09-08 09:45:50 +08:00
6 changed files with 56 additions and 43 deletions

View File

@@ -13,13 +13,18 @@ interface MessageRecordProps {
const MessageRecord: React.FC<MessageRecordProps> = ({ contract }) => {
const messagesEndRef = useRef<HTMLDivElement>(null);
const currentMessages = useWeChatStore(state => state.currentMessages);
const loadChatMessages = useWeChatStore(state => state.loadChatMessages);
const messagesLoading = useWeChatStore(state => state.messagesLoading);
const isLoadingData = useWeChatStore(state => state.isLoadingData);
const currentGroupMembers = useWeChatStore(
state => state.currentGroupMembers,
);
useEffect(() => {
scrollToBottom();
}, [currentMessages]);
if (isLoadingData) {
scrollToBottom();
}
}, [currentMessages, isLoadingData]);
const scrollToBottom = () => {
messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
@@ -192,7 +197,9 @@ const MessageRecord: React.FC<MessageRecordProps> = ({ contract }) => {
return (
<div className={styles.messagesContainer}>
<div className={styles.loadMore}></div>
<div className={styles.loadMore} onClick={() => loadChatMessages(false)}>
{messagesLoading ? "中" : "1"}
</div>
{groupMessagesByTime(currentMessages).map((group, groupIndex) => (
<React.Fragment key={`group-${groupIndex}`}>
<Divider>

View File

@@ -68,21 +68,6 @@ const ChatWindow: React.FC<ChatWindowProps> = ({ contract }) => {
</div>
</div>
<Space>
<Tooltip title="语音通话">
<Button
type="text"
icon={<PhoneOutlined />}
className={styles.headerButton}
/>
</Tooltip>
<Tooltip title="视频通话">
<Button
type="text"
icon={<VideoCameraOutlined />}
className={styles.headerButton}
/>
</Tooltip>
<Tooltip title="个人资料">
<Button
onClick={onToggleProfile}

View File

@@ -9,6 +9,7 @@ export interface WeChatState {
// 消息加载状态
messagesLoading: boolean;
isLoadingData: boolean;
currentGroupMembers: any[];
// Actions
@@ -16,7 +17,7 @@ export interface WeChatState {
contract: ContractData | weChatGroup,
isExist?: boolean,
) => void;
loadChatMessages: (contact: ContractData | weChatGroup) => Promise<void>;
loadChatMessages: (Init: boolean, To?: number) => Promise<void>;
// 视频消息处理方法
setVideoLoading: (messageId: number, isLoading: boolean) => void;

View File

@@ -22,6 +22,7 @@ export const useWeChatStore = create<WeChatState>()(
currentContract: null,
currentMessages: [],
messagesLoading: false,
isLoadingData: false,
currentGroupMembers: [],
// Actions
@@ -43,18 +44,19 @@ export const useWeChatStore = create<WeChatState>()(
id: contract.id,
config: { chat: true },
});
state.loadChatMessages(contract);
state.loadChatMessages(true, 4704624000000);
});
},
loadChatMessages: async contact => {
loadChatMessages: async (Init: boolean, To?: number) => {
const state = useWeChatStore.getState();
const contact = state.currentContract;
set({ messagesLoading: true });
set({ isLoadingData: Init });
try {
const params: any = {
wechatAccountId: contact.wechatAccountId,
From: 1,
To: 4704624000000,
To: To || +new Date(),
Count: 5,
olderData: true,
};
@@ -65,11 +67,29 @@ export const useWeChatStore = create<WeChatState>()(
const currentGroupMembers = await getGroupMembers({
id: contact.id,
});
set({ currentMessages: messages || [], currentGroupMembers });
if (Init) {
set({ currentMessages: messages || [], currentGroupMembers });
} else {
set({
currentMessages: [
...state.currentMessages,
...(messages || []),
],
});
}
} else {
params.wechatFriendId = contact.id;
const messages = await getChatMessages(params);
set({ currentMessages: messages || [] });
if (Init) {
set({ currentMessages: messages || [] });
} else {
set({
currentMessages: [
...state.currentMessages,
...(messages || []),
],
});
}
}
} catch (error) {
console.error("获取聊天消息失败:", error);