diff --git a/pages/message/chat.scss b/pages/message/chat.scss index dd38b2a..5472c10 100644 --- a/pages/message/chat.scss +++ b/pages/message/chat.scss @@ -1231,6 +1231,25 @@ $primary-color: #0877F1; display: none !important; } +.custom-bubble, +.benefit-bubble { + padding: 0 !important; + border-radius: 0 !important; + background: transparent !important; + overflow: visible; +} + +.custom-bubble::before, +.custom-bubble::after, +.benefit-bubble::before, +.benefit-bubble::after { + display: none !important; +} + +.benefit-bubble { + max-width: 100%; +} + .message-right .message-card { margin-right: 8rpx; } diff --git a/pages/message/components/message-types.vue b/pages/message/components/message-types.vue index 6fbe11d..ce3b479 100644 --- a/pages/message/components/message-types.vue +++ b/pages/message/components/message-types.vue @@ -59,6 +59,28 @@ mode="aspectFill" /> + + + {{ benefitData.title }} + + + + 项目: + + {{ item.projectName }} + X{{ item.usageCount }} + + + 有效期: + {{ item.validTimeText || '无限期' }} + + + + 查看详情 + + + + - + @@ -390,6 +390,19 @@ function handleSystemMessageReceived(message) { } } +// 获取自定义消息类型 +function getCustomMessageType(message) { + try { + const data = + typeof message.payload?.data === "string" + ? JSON.parse(message.payload.data) + : message.payload?.data || {}; + return data?.type || ""; + } catch (error) { + return ""; + } +} + // 获取消息气泡样式类 function getBubbleClass(message) { // 图片消息不需要气泡背景 @@ -397,7 +410,10 @@ function getBubbleClass(message) { return "image-bubble"; } if (message.type === "TIMCustomElem") { - return message.flow === "out" ? "" : ""; + if (getCustomMessageType(message) === "benefit") { + return "benefit-bubble"; + } + return "custom-bubble"; } return message.flow === "out" ? "user-bubble" : "doctor-bubble"; } @@ -572,44 +588,44 @@ const initTIMCallbacks = async () => { ) { seenIds.add(message.ID); uniqueMessages.push(message); - } - }); - - const mergedMessages = []; - const mergedSeenIds = new Set(); - const existingMessages = Array.isArray(messageList.value) - ? messageList.value - : []; - - existingMessages.forEach((message) => { - if (!message?.ID) return; - if (message.conversationID !== chatInfo.value.conversationID) return; - if (mergedSeenIds.has(message.ID)) return; - mergedSeenIds.add(message.ID); - mergedMessages.push(message); - }); - - uniqueMessages.forEach((message) => { - if (!message?.ID) return; - if (mergedSeenIds.has(message.ID)) return; - mergedSeenIds.add(message.ID); - mergedMessages.push(message); - }); - - mergedMessages.sort((a, b) => { - const ta = Number(a?.lastTime || a?.time || 0) || 0; - const tb = Number(b?.lastTime || b?.time || 0) || 0; - return ta - tb; - }); - - messageList.value = mergedMessages; - console.log( - "消息列表已更新,原始", - messages.length, - "条,过滤后", - messageList.value.length, - "条消息" - ); + } + }); + + const mergedMessages = []; + const mergedSeenIds = new Set(); + const existingMessages = Array.isArray(messageList.value) + ? messageList.value + : []; + + existingMessages.forEach((message) => { + if (!message?.ID) return; + if (message.conversationID !== chatInfo.value.conversationID) return; + if (mergedSeenIds.has(message.ID)) return; + mergedSeenIds.add(message.ID); + mergedMessages.push(message); + }); + + uniqueMessages.forEach((message) => { + if (!message?.ID) return; + if (mergedSeenIds.has(message.ID)) return; + mergedSeenIds.add(message.ID); + mergedMessages.push(message); + }); + + mergedMessages.sort((a, b) => { + const ta = Number(a?.lastTime || a?.time || 0) || 0; + const tb = Number(b?.lastTime || b?.time || 0) || 0; + return ta - tb; + }); + + messageList.value = mergedMessages; + console.log( + "消息列表已更新,原始", + messages.length, + "条,过滤后", + messageList.value.length, + "条消息" + ); isCompleted.value = data.isCompleted || false; isLoadingMore.value = false; @@ -777,11 +793,11 @@ const scrollToBottom = (immediate = false) => { }; // 关闭功能栏 -const closeMorePanel = () => { - uni.$emit("closeMorePanel"); - chatInputRef.value?.blurInput?.(); - uni.hideKeyboard(); -}; +const closeMorePanel = () => { + uni.$emit("closeMorePanel"); + chatInputRef.value?.blurInput?.(); + uni.hideKeyboard(); +}; // 滚动事件 const onScroll = throttle((e) => {