feat(消息处理): 添加消息内容解析和格式化功能
This commit is contained in:
parent
4edf4fd034
commit
7a78f5bdae
|
|
@ -137,6 +137,7 @@
|
|||
</view>
|
||||
|
||||
<!-- 用户消息 -->
|
||||
<!-- 0 用户消息 -->
|
||||
<view
|
||||
class="message-right"
|
||||
v-if="message.interactMode === 0"
|
||||
|
|
@ -153,9 +154,10 @@
|
|||
</view>
|
||||
|
||||
<!-- AI消息 -->
|
||||
<!-- 1 Ai回复 3 热门回复 -->
|
||||
<view
|
||||
class="message-left"
|
||||
v-if="message.interactMode === 1"
|
||||
v-if="message.interactMode === 1 || message.interactMode === 3"
|
||||
:id="'msg-' + message.id"
|
||||
>
|
||||
<image
|
||||
|
|
@ -816,9 +818,49 @@ export default {
|
|||
this.handleGetConversationDetail();
|
||||
},
|
||||
|
||||
// 处理消息内容,如果是JSON格式则解析并格式化
|
||||
processMessageContent(message) {
|
||||
try {
|
||||
// 尝试解析 JSON
|
||||
const parsed = JSON.parse(message);
|
||||
|
||||
// 如果是对象且包含特定字段,进行格式化
|
||||
if (typeof parsed === "object" && parsed !== null) {
|
||||
let content = "";
|
||||
|
||||
// 提取字段
|
||||
const { answerTypeLabel, imageUrl, nearbyPaths } = parsed;
|
||||
|
||||
// 拼接内容,如果有值则添加并换行
|
||||
if (answerTypeLabel) content += `${answerTypeLabel}\n`;
|
||||
if (imageUrl) content += `${imageUrl}\n`;
|
||||
if (nearbyPaths) content += `${nearbyPaths}\n`;
|
||||
|
||||
// 如果提取到了内容,返回处理后的文本;否则返回原文本(避免误判)
|
||||
// 去除末尾多余的换行符
|
||||
return content ? content.trim() : message;
|
||||
}
|
||||
} catch (e) {
|
||||
// 解析失败,说明不是JSON格式,直接返回原消息
|
||||
return message;
|
||||
}
|
||||
|
||||
return message;
|
||||
},
|
||||
|
||||
// 公共排序:按时间升序;时间相同,用户消息(interactMode=0)在前
|
||||
sortMessages(list = []) {
|
||||
return (list || []).sort((a, b) => {
|
||||
const processedList = (list || []).map((item) => {
|
||||
// 对每条消息进行处理
|
||||
return {
|
||||
...item,
|
||||
message: this.processMessageContent(item.message),
|
||||
};
|
||||
});
|
||||
|
||||
// console.log("processedList", processedList);
|
||||
|
||||
return processedList.sort((a, b) => {
|
||||
const timeA = new Date(a.sendDate).getTime();
|
||||
const timeB = new Date(b.sendDate).getTime();
|
||||
if (timeA === timeB) return a.interactMode - b.interactMode;
|
||||
|
|
|
|||
Loading…
Reference in New Issue