消息
This commit is contained in:
parent
e66142eb9d
commit
56456a1c04
|
|
@ -23,6 +23,7 @@ export async function getSessions() {
|
|||
targetUserId: item.otherUserId,
|
||||
targetNickname: item.otherNickname,
|
||||
targetAvatar: item.otherAvatar,
|
||||
otherIsRealName: item.otherIsRealName,
|
||||
lastMessage: item.lastMessageContent,
|
||||
lastMessageType: item.lastMessageType,
|
||||
lastMessageTime: item.lastMessageTime,
|
||||
|
|
|
|||
|
|
@ -176,9 +176,13 @@
|
|||
</view>
|
||||
|
||||
<!-- 联系按钮 -->
|
||||
<view class="contact-btn" @click.stop="handleContact(user.userId)">
|
||||
<text class="lock-icon">🔒</text>
|
||||
<text>开通诚意会员 联系对方</text>
|
||||
<view
|
||||
class="contact-btn"
|
||||
:class="{ 'contact-btn-member': isSincereMemberOrAbove }"
|
||||
@click.stop="handleContact(user.userId)"
|
||||
>
|
||||
<text class="lock-icon" v-if="!isSincereMemberOrAbove">🔒</text>
|
||||
<text>{{ isSincereMemberOrAbove ? '联系对方' : '开通诚意会员 联系对方' }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -191,7 +195,7 @@
|
|||
</scroll-view>
|
||||
|
||||
<!-- 底部会员按钮 -->
|
||||
<view class="bottom-bar" v-if="!isMember">
|
||||
<view class="bottom-bar" v-if="!isSincereMemberOrAbove">
|
||||
<button class="member-btn" @click="goToMember">开通诚意会员</button>
|
||||
<text class="member-tip" @click="goToMember">查看诚意会员其他特权</text>
|
||||
</view>
|
||||
|
|
@ -216,6 +220,11 @@ const statusBarHeight = ref(20)
|
|||
// 会员状态
|
||||
const isMember = computed(() => userStore.isMember)
|
||||
|
||||
// 是否是诚意会员及以上(memberLevel >= 2)
|
||||
const isSincereMemberOrAbove = computed(() => {
|
||||
return userStore.isMember && userStore.memberLevel >= 2
|
||||
})
|
||||
|
||||
// 获取会员图标URL
|
||||
const getMemberIconUrl = (memberLevel) => {
|
||||
if (!memberLevel) return ''
|
||||
|
|
@ -397,6 +406,21 @@ const loadMore = () => {
|
|||
|
||||
// 点击用户卡片
|
||||
const handleCardClick = (userId) => {
|
||||
// 检查是否是诚意会员及以上
|
||||
if (!isSincereMemberOrAbove.value) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '开通诚意会员后,才能查看搜索结果的详细资料',
|
||||
confirmText: '去开通',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
goToMember()
|
||||
}
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
uni.navigateTo({
|
||||
url: `/pages/profile/detail?userId=${userId}`
|
||||
})
|
||||
|
|
@ -407,8 +431,18 @@ const handleContact = (userId) => {
|
|||
// 从列表中找到对应用户
|
||||
const targetUser = results.value.find(item => item.userId === userId)
|
||||
|
||||
if (!isMember.value) {
|
||||
goToMember()
|
||||
// 检查是否是诚意会员及以上
|
||||
if (!isSincereMemberOrAbove.value) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '开通诚意会员后,才能联系搜索结果中的用户',
|
||||
confirmText: '去开通',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
goToMember()
|
||||
}
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -737,6 +771,15 @@ onMounted(() => {
|
|||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
// 诚意会员及以上的按钮样式
|
||||
&.contact-btn-member {
|
||||
background: linear-gradient(90deg, #FFBDC2 0%, #FF8A93 100%);
|
||||
|
||||
text {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -77,6 +77,21 @@ public class ChatService : IChatService
|
|||
throw new BusinessException(ErrorCodes.InvalidMessageType, "无效的消息类型");
|
||||
}
|
||||
|
||||
// 当收到新消息时,自动恢复接收者已删除的会话
|
||||
var needUpdateSession = false;
|
||||
if (session.User1Id == receiverId && session.User1Deleted)
|
||||
{
|
||||
session.User1Deleted = false;
|
||||
needUpdateSession = true;
|
||||
_logger.LogInformation("恢复接收者已删除的会话: SessionId={SessionId}, ReceiverId={ReceiverId}", session.Id, receiverId);
|
||||
}
|
||||
else if (session.User2Id == receiverId && session.User2Deleted)
|
||||
{
|
||||
session.User2Deleted = false;
|
||||
needUpdateSession = true;
|
||||
_logger.LogInformation("恢复接收者已删除的会话: SessionId={SessionId}, ReceiverId={ReceiverId}", session.Id, receiverId);
|
||||
}
|
||||
|
||||
// 检查是否是该会话的首条消息(用于发送首次消息通知)
|
||||
var isFirstMessage = !await _messageRepository.ExistsAsync(m =>
|
||||
m.SessionId == request.SessionId &&
|
||||
|
|
@ -101,8 +116,8 @@ public class ChatService : IChatService
|
|||
|
||||
var createdMessage = await _messageRepository.AddAsync(message);
|
||||
|
||||
// 更新会话最后消息信息和未读数
|
||||
await UpdateSessionLastMessageAsync(session, createdMessage, senderId);
|
||||
// 更新会话最后消息信息和未读数(如果需要恢复会话,也一并更新)
|
||||
await UpdateSessionLastMessageAsync(session, createdMessage, senderId, needUpdateSession);
|
||||
|
||||
_logger.LogInformation("发送消息成功: MessageId={MessageId}, SessionId={SessionId}, SenderId={SenderId}, ReceiverId={ReceiverId}",
|
||||
createdMessage.Id, request.SessionId, senderId, request.ReceiverId);
|
||||
|
|
@ -151,10 +166,26 @@ public class ChatService : IChatService
|
|||
/// <inheritdoc />
|
||||
public async Task<List<ChatSessionResponse>> GetSessionsAsync(long userId)
|
||||
{
|
||||
_logger.LogInformation("获取会话列表: UserId={UserId}", userId);
|
||||
|
||||
// 先查询所有相关会话(包括已删除的),用于诊断
|
||||
var allSessions = await _sessionRepository.GetListAsync(s =>
|
||||
s.User1Id == userId || s.User2Id == userId);
|
||||
|
||||
_logger.LogInformation("用户相关的所有会话(含已删除): Count={Count}, UserId={UserId}", allSessions.Count, userId);
|
||||
|
||||
foreach (var s in allSessions)
|
||||
{
|
||||
_logger.LogInformation("会话详情: SessionId={SessionId}, User1Id={User1Id}, User2Id={User2Id}, User1Deleted={User1Deleted}, User2Deleted={User2Deleted}, LastMessageTime={LastMessageTime}",
|
||||
s.Id, s.User1Id, s.User2Id, s.User1Deleted, s.User2Deleted, s.LastMessageTime);
|
||||
}
|
||||
|
||||
// 获取用户参与的所有会话,排除已删除的
|
||||
var sessions = await _sessionRepository.GetListAsync(s =>
|
||||
(s.User1Id == userId && !s.User1Deleted) || (s.User2Id == userId && !s.User2Deleted));
|
||||
|
||||
_logger.LogInformation("查询到会话数量(排除已删除): Count={Count}, UserId={UserId}", sessions.Count, userId);
|
||||
|
||||
// 按最后消息时间排序
|
||||
sessions = sessions.OrderByDescending(s => s.LastMessageTime ?? s.CreateTime).ToList();
|
||||
|
||||
|
|
@ -204,6 +235,27 @@ public class ChatService : IChatService
|
|||
|
||||
if (existingSession != null)
|
||||
{
|
||||
// 如果会话存在但被当前用户删除了,恢复它
|
||||
var needUpdate = false;
|
||||
if (userId1 == user1Id && existingSession.User1Deleted)
|
||||
{
|
||||
existingSession.User1Deleted = false;
|
||||
needUpdate = true;
|
||||
}
|
||||
else if (userId1 == user2Id && existingSession.User2Deleted)
|
||||
{
|
||||
existingSession.User2Deleted = false;
|
||||
needUpdate = true;
|
||||
}
|
||||
|
||||
if (needUpdate)
|
||||
{
|
||||
existingSession.UpdateTime = DateTime.Now;
|
||||
await _sessionRepository.UpdateAsync(existingSession);
|
||||
_logger.LogInformation("恢复已删除的聊天会话: SessionId={SessionId}, UserId={UserId}",
|
||||
existingSession.Id, userId1);
|
||||
}
|
||||
|
||||
return existingSession.Id;
|
||||
}
|
||||
|
||||
|
|
@ -688,7 +740,11 @@ public class ChatService : IChatService
|
|||
/// <summary>
|
||||
/// 更新会话最后消息信息
|
||||
/// </summary>
|
||||
private async Task UpdateSessionLastMessageAsync(ChatSession session, ChatMessage message, long senderId)
|
||||
/// <param name="session">会话</param>
|
||||
/// <param name="message">消息</param>
|
||||
/// <param name="senderId">发送者ID</param>
|
||||
/// <param name="forceUpdate">是否强制更新(用于恢复已删除会话等场景)</param>
|
||||
private async Task UpdateSessionLastMessageAsync(ChatSession session, ChatMessage message, long senderId, bool forceUpdate = false)
|
||||
{
|
||||
session.LastMessageId = message.Id;
|
||||
session.LastMessageTime = message.CreateTime;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user