消息已读
This commit is contained in:
parent
7ec6c91c4b
commit
c7da013d71
|
|
@ -23,7 +23,7 @@ const ENV = {
|
|||
}
|
||||
|
||||
// 当前环境 - 开发时使用 development,打包时改为 production
|
||||
const CURRENT_ENV = 'development'
|
||||
const CURRENT_ENV = 'production'
|
||||
|
||||
// 导出配置
|
||||
export const config = {
|
||||
|
|
|
|||
|
|
@ -529,6 +529,7 @@ const loadMessages = async (isLoadMore = false) => {
|
|||
}
|
||||
|
||||
hasMore.value = newMessages.length >= 20
|
||||
console.log('[Chat] 消息加载完成,标记会话已读:', sessionId.value)
|
||||
chatStore.markSessionAsRead(sessionId.value)
|
||||
}
|
||||
} catch (error) {
|
||||
|
|
@ -1193,6 +1194,9 @@ const handleReceiveMessage = (message) => {
|
|||
scrollToBottom()
|
||||
})
|
||||
|
||||
// 用户正在查看聊天页面,立即标记消息为已读
|
||||
signalR.markSessionAsRead(sessionId.value)
|
||||
|
||||
// 播放提示音(可选)
|
||||
// uni.vibrateShort()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -246,8 +246,14 @@
|
|||
|
||||
try {
|
||||
const res = await getSessions()
|
||||
console.log('[Message] 加载会话列表:', res)
|
||||
if (res?.success || res?.code === 0) {
|
||||
sessions.value = res.data || []
|
||||
console.log('[Message] 会话列表数据:', sessions.value.map(s => ({
|
||||
sessionId: s.sessionId,
|
||||
targetNickname: s.targetNickname,
|
||||
unreadCount: s.unreadCount
|
||||
})))
|
||||
chatStore.setSessions(sessions.value)
|
||||
}
|
||||
} catch (error) {
|
||||
|
|
|
|||
|
|
@ -457,6 +457,23 @@ class SignalRClient {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 标记会话消息为已读
|
||||
* @param {number} sessionId 会话ID
|
||||
*/
|
||||
async markSessionAsRead(sessionId) {
|
||||
if (!this.isConnected) {
|
||||
console.warn('[SignalR] 未连接,无法标记已读')
|
||||
return
|
||||
}
|
||||
try {
|
||||
await this.invoke('MarkSessionAsRead', sessionId)
|
||||
console.log('[SignalR] 已标记会话已读:', sessionId)
|
||||
} catch (err) {
|
||||
console.error('[SignalR] 标记已读失败:', err)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取连接状态
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -117,6 +117,35 @@ public class ChatHub : Hub
|
|||
_logger.LogInformation("用户离开会话组: UserId={UserId}, SessionId={SessionId}", userId, sessionId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 标记会话消息为已读(用户在聊天页面收到新消息时调用)
|
||||
/// </summary>
|
||||
/// <param name="sessionId">会话ID</param>
|
||||
public async Task MarkSessionAsRead(long sessionId)
|
||||
{
|
||||
var userId = GetCurrentUserId();
|
||||
if (userId <= 0) return;
|
||||
|
||||
// 通过服务容器获取 ChatService
|
||||
var chatService = Context.GetHttpContext()?.RequestServices.GetService<Application.Interfaces.IChatService>();
|
||||
if (chatService == null)
|
||||
{
|
||||
_logger.LogWarning("无法获取 ChatService");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var readCount = await chatService.MarkMessagesAsReadAsync(userId, sessionId);
|
||||
_logger.LogInformation("SignalR标记消息已读: UserId={UserId}, SessionId={SessionId}, ReadCount={ReadCount}",
|
||||
userId, sessionId, readCount);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "SignalR标记消息已读失败: UserId={UserId}, SessionId={SessionId}", userId, sessionId);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前用户ID
|
||||
/// </summary>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user