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) => {