完善表情资产后台能力并补充群总结落库
- 新增表情资产表,支持表情文件落盘后的资产沉淀、查询与发送时间回写 - 将表情下载从消息主链路中移出,改为后台定时批处理,降低同步入库阻塞风险 - 抽取通用 CDN 下载与 base64 落盘能力,统一图片与表情文件处理方式 - 在后台通讯录聊天窗口增加表情资产面板,支持查看资产并直接选择发送表情 - 新增后台表情资产接口,支持按群过滤最近表情素材 - 优化消息列表中的表情消息展示,支持在后台直接预览表情图片 - 启动时不再同步补偿历史表情,统一交由定时任务处理,避免影响系统稳定性 - 新增群总结落库表,支持将每日总结写入数据库,便于后续知识库提取与复用 - 将定时总结结果写入数据库,保留总结文本、周期信息、消息数量和元数据
This commit is contained in:
@@ -92,6 +92,12 @@
|
||||
<img v-if="scope.row.message_thumb" :src="scope.row.message_thumb" class="message-thumb" @click="showVideo(scope.row)">
|
||||
</div>
|
||||
|
||||
<div v-else-if="isEmojiMessage(scope.row)" class="message-media-preview">
|
||||
<div class="message-media-label">【表情消息】</div>
|
||||
<img v-if="scope.row.image_path" :src="getImageUrl(scope.row.image_path)" class="message-thumb" @click="showImage(scope.row)">
|
||||
<div v-else class="message-text-preview is-muted">表情下载中或暂无预览</div>
|
||||
</div>
|
||||
|
||||
<div v-else class="message-text-preview is-muted">
|
||||
{% raw %}{{ scope.row.content || `【消息类型: ${scope.row.message_type}】` }}{% endraw %}
|
||||
</div>
|
||||
@@ -127,9 +133,10 @@
|
||||
<el-descriptions-item label="消息类型">{% raw %}{{ getMessageTypeName(selectedMessage.message_type) }}{% endraw %}</el-descriptions-item>
|
||||
<el-descriptions-item label="内容">{% raw %}{{ selectedMessage.content }}{% endraw %}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item v-if="selectedMessage.message_type == 3 || selectedMessage.message_type == 43" label="媒体内容">
|
||||
<el-descriptions-item v-if="selectedMessage.message_type == 3 || selectedMessage.message_type == 43 || isEmojiMessage(selectedMessage)" label="媒体内容">
|
||||
<img v-if="selectedMessage.message_type == 3 && selectedMessage.image_path" :src="getImageUrl(selectedMessage.image_path)" style="max-width: 100%; border-radius: 16px;">
|
||||
<img v-else-if="selectedMessage.message_type == 3 && selectedMessage.message_thumb" :src="selectedMessage.message_thumb" style="max-width: 100%; border-radius: 16px;">
|
||||
<img v-else-if="isEmojiMessage(selectedMessage) && selectedMessage.image_path" :src="getImageUrl(selectedMessage.image_path)" style="max-width: 100%; border-radius: 16px;">
|
||||
<video v-if="selectedMessage.message_type == 43 && selectedMessage.attachment_url" :src="selectedMessage.attachment_url" controls style="max-width: 100%; border-radius: 16px;"></video>
|
||||
</el-descriptions-item>
|
||||
|
||||
@@ -313,12 +320,18 @@
|
||||
this.selectedMessage = message;
|
||||
this.detailDialogVisible = true;
|
||||
},
|
||||
isEmojiMessage(message) {
|
||||
if (!message) return false;
|
||||
return String(message.message_type) === '47' || String(message.message_type) === '1090519089';
|
||||
},
|
||||
getMessageTypeName(type) {
|
||||
const typeMap = {
|
||||
1: '文本消息',
|
||||
3: '图片消息',
|
||||
43: '视频消息',
|
||||
49: '链接消息'
|
||||
47: '动画表情',
|
||||
49: '链接消息',
|
||||
1090519089: '大表情'
|
||||
};
|
||||
return typeMap[type] || `未知类型(${type})`;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user