diff --git a/miniapp/pages/chat/index.vue b/miniapp/pages/chat/index.vue index e7b14ff..234b0f1 100644 --- a/miniapp/pages/chat/index.vue +++ b/miniapp/pages/chat/index.vue @@ -477,6 +477,43 @@ const loadMessages = async (isLoadMore = false) => { id: msg.messageId ?? msg.id ?? Date.now(), isMine: typeof msg.isSelf === 'boolean' ? msg.isSelf : msg.senderId === myUserId.value } + + // 解析交换请求的状态和数据 + if (msg.messageType >= 4) { + // 默认设置为待处理状态 + mapped.status = ExchangeStatus.PENDING + + if (msg.extraData) { + try { + const extraData = JSON.parse(msg.extraData) + // 兼容 Status 和 status 两种字段名 + const status = extraData.Status ?? extraData.status ?? ExchangeStatus.PENDING + mapped.status = status + + // 如果是交换微信请求且已同意,设置微信号 + if (msg.messageType === MessageType.EXCHANGE_WECHAT && status === ExchangeStatus.ACCEPTED) { + // 根据是否是自己发送的,获取对方的微信号 + // 兼容 Pascal Case 和 camelCase + const senderWeChat = extraData.SenderWeChat ?? extraData.senderWeChat + const receiverWeChat = extraData.ReceiverWeChat ?? extraData.receiverWeChat + mapped.exchangedContent = mapped.isMine ? receiverWeChat : senderWeChat + } + + // 如果是交换照片请求且已同意,设置照片列表 + if (msg.messageType === MessageType.EXCHANGE_PHOTO && status === ExchangeStatus.ACCEPTED) { + // 根据是否是自己发送的,获取对方的照片 + // 兼容 Pascal Case 和 camelCase + const senderPhotos = extraData.SenderPhotos ?? extraData.senderPhotos + const receiverPhotos = extraData.ReceiverPhotos ?? extraData.receiverPhotos + mapped.photos = mapped.isMine ? receiverPhotos : senderPhotos + mapped.photoCount = mapped.photos?.length || 0 + } + } catch (e) { + console.error('解析消息extraData失败:', e) + } + } + } + return mapped }) @@ -781,19 +818,22 @@ const handleRespondExchange = async (messageId, accept) => { if (message) { message.status = accept ? ExchangeStatus.ACCEPTED : ExchangeStatus.REJECTED if (accept && res.data?.exchangedData) { - // 交换结果数据:微信号或照片列表JSON - if (message.messageType === MessageType.EXCHANGE_WECHAT) { - message.exchangedContent = res.data.exchangedData - } else if (message.messageType === MessageType.EXCHANGE_PHOTO) { - try { - const photos = JSON.parse(res.data.exchangedData || '[]') + try { + const exchangedData = JSON.parse(res.data.exchangedData) + // 交换结果数据:微信号或照片列表 + if (message.messageType === MessageType.EXCHANGE_WECHAT) { + // 我是接收者,所以获取发送者的微信号 + message.exchangedContent = exchangedData.SenderWeChat || exchangedData.senderWeChat + } else if (message.messageType === MessageType.EXCHANGE_PHOTO) { + // 我是接收者,所以获取发送者的照片 + const photos = exchangedData.SenderPhotos || exchangedData.senderPhotos || [] if (Array.isArray(photos)) { message.photos = photos message.photoCount = photos.length } - } catch (e) { - console.error('解析交换照片数据失败:', e) } + } catch (e) { + console.error('解析交换数据失败:', e) } } }