完善表情库中文语义解析与检索展示\n\n- 解析表情 desc 和 emojiattr 字段,提取可读中文语义与别名\n- 按 md5 聚合表情历史记录,合并发送参数、预览图与语义信息\n- 后台表情库弹窗增加语义展示与按中文语义搜索能力
This commit is contained in:
@@ -789,7 +789,7 @@
|
||||
|
||||
<el-dialog title="表情库" :visible.sync="emojiDialogVisible" width="52%">
|
||||
<div class="emoji-toolbar">
|
||||
<el-input v-model="emojiKeyword" clearable placeholder="搜索 md5..." size="small"></el-input>
|
||||
<el-input v-model="emojiKeyword" clearable placeholder="搜索 md5 / 中文语义..." size="small"></el-input>
|
||||
<el-button size="small" icon="el-icon-refresh" :loading="emojiLibraryLoading" @click="loadEmojiLibrary">刷新</el-button>
|
||||
</div>
|
||||
<div class="emoji-grid" v-loading="emojiLibraryLoading">
|
||||
@@ -797,6 +797,8 @@
|
||||
<div v-if="!filteredEmojiLibrary.length" class="emoji-empty">暂无可用表情,先在群里让媒体下载插件抓取几条表情。</div>
|
||||
<div v-for="item in filteredEmojiLibrary" :key="item.md5" class="emoji-card">
|
||||
<img class="emoji-thumb" :src="getChatMediaUrl(item.preview_url)" />
|
||||
<div v-if="item.semantic_text" class="emoji-semantic">{{ item.semantic_text }}</div>
|
||||
<div v-if="item.semantic_aliases && item.semantic_aliases.length > 1" class="emoji-aliases">{{ item.semantic_aliases.join(' / ') }}</div>
|
||||
<div class="emoji-md5">{{ item.md5 }}</div>
|
||||
<div class="emoji-actions">
|
||||
<el-button type="primary" size="mini" @click="sendEmojiItem(item)">发送</el-button>
|
||||
@@ -905,7 +907,14 @@
|
||||
filteredEmojiLibrary() {
|
||||
const keyword = (this.emojiKeyword || '').trim().toLowerCase();
|
||||
if (!keyword) return this.emojiLibrary;
|
||||
return this.emojiLibrary.filter(item => (item.md5 || '').toLowerCase().includes(keyword));
|
||||
return this.emojiLibrary.filter(item => {
|
||||
// 表情库后续要服务 AI 自动回复,因此这里除了 md5,也支持按主语义和别名检索。
|
||||
// 这样人工整理映射时,可以直接搜“哈哈/害/难道”之类语义词,不需要反复记 md5。
|
||||
const md5 = (item.md5 || '').toLowerCase();
|
||||
const semanticText = (item.semantic_text || '').toLowerCase();
|
||||
const aliases = Array.isArray(item.semantic_aliases) ? item.semantic_aliases.join(' ').toLowerCase() : '';
|
||||
return md5.includes(keyword) || semanticText.includes(keyword) || aliases.includes(keyword);
|
||||
});
|
||||
},
|
||||
previewGroupWelcomeText() {
|
||||
return this.renderWelcomeTemplate(this.groupWelcomeConfig.welcome_text_template);
|
||||
@@ -1856,6 +1865,8 @@
|
||||
}
|
||||
.preview-box p{margin:0 0 4px 0}
|
||||
.emoji-thumb { width: 72px; height: 72px; object-fit: contain; border-radius: 8px; background: rgba(148,163,184,0.08); }
|
||||
.emoji-semantic { font-size: 13px; font-weight: 600; color: #0f172a; text-align: center; min-height: 18px; }
|
||||
.emoji-aliases { font-size: 11px; color: #475569; text-align: center; line-height: 1.45; max-width: 100%; word-break: break-word; min-height: 16px; }
|
||||
.emoji-md5 { font-size: 11px; color: #64748b; word-break: break-all; text-align: center; min-height: 30px; }
|
||||
.emoji-actions { width: 100%; display: flex; justify-content: center; }
|
||||
.emoji-empty { color: #94a3b8; padding: 12px; }
|
||||
|
||||
Reference in New Issue
Block a user