Browse Source

支持回显emoji表情

master
xsx 7 months ago
parent
commit
89782692c1
  1. BIN
      im-admin-ui/src/assets/emoji/0.gif
  2. BIN
      im-admin-ui/src/assets/emoji/1.gif
  3. BIN
      im-admin-ui/src/assets/emoji/10.gif
  4. BIN
      im-admin-ui/src/assets/emoji/11.gif
  5. BIN
      im-admin-ui/src/assets/emoji/12.gif
  6. BIN
      im-admin-ui/src/assets/emoji/13.gif
  7. BIN
      im-admin-ui/src/assets/emoji/14.gif
  8. BIN
      im-admin-ui/src/assets/emoji/15.gif
  9. BIN
      im-admin-ui/src/assets/emoji/16.gif
  10. BIN
      im-admin-ui/src/assets/emoji/17.gif
  11. BIN
      im-admin-ui/src/assets/emoji/18.gif
  12. BIN
      im-admin-ui/src/assets/emoji/19.gif
  13. BIN
      im-admin-ui/src/assets/emoji/2.gif
  14. BIN
      im-admin-ui/src/assets/emoji/20.gif
  15. BIN
      im-admin-ui/src/assets/emoji/21.gif
  16. BIN
      im-admin-ui/src/assets/emoji/22.gif
  17. BIN
      im-admin-ui/src/assets/emoji/23.gif
  18. BIN
      im-admin-ui/src/assets/emoji/24.gif
  19. BIN
      im-admin-ui/src/assets/emoji/25.gif
  20. BIN
      im-admin-ui/src/assets/emoji/26.gif
  21. BIN
      im-admin-ui/src/assets/emoji/27.gif
  22. BIN
      im-admin-ui/src/assets/emoji/28.gif
  23. BIN
      im-admin-ui/src/assets/emoji/29.gif
  24. BIN
      im-admin-ui/src/assets/emoji/3.gif
  25. BIN
      im-admin-ui/src/assets/emoji/30.gif
  26. BIN
      im-admin-ui/src/assets/emoji/31.gif
  27. BIN
      im-admin-ui/src/assets/emoji/32.gif
  28. BIN
      im-admin-ui/src/assets/emoji/33.gif
  29. BIN
      im-admin-ui/src/assets/emoji/34.gif
  30. BIN
      im-admin-ui/src/assets/emoji/35.gif
  31. BIN
      im-admin-ui/src/assets/emoji/36.gif
  32. BIN
      im-admin-ui/src/assets/emoji/37.gif
  33. BIN
      im-admin-ui/src/assets/emoji/38.gif
  34. BIN
      im-admin-ui/src/assets/emoji/39.gif
  35. BIN
      im-admin-ui/src/assets/emoji/4.gif
  36. BIN
      im-admin-ui/src/assets/emoji/40.gif
  37. BIN
      im-admin-ui/src/assets/emoji/41.gif
  38. BIN
      im-admin-ui/src/assets/emoji/42.gif
  39. BIN
      im-admin-ui/src/assets/emoji/43.gif
  40. BIN
      im-admin-ui/src/assets/emoji/44.gif
  41. BIN
      im-admin-ui/src/assets/emoji/45.gif
  42. BIN
      im-admin-ui/src/assets/emoji/46.gif
  43. BIN
      im-admin-ui/src/assets/emoji/47.gif
  44. BIN
      im-admin-ui/src/assets/emoji/48.gif
  45. BIN
      im-admin-ui/src/assets/emoji/49.gif
  46. BIN
      im-admin-ui/src/assets/emoji/5.gif
  47. BIN
      im-admin-ui/src/assets/emoji/50.gif
  48. BIN
      im-admin-ui/src/assets/emoji/51.gif
  49. BIN
      im-admin-ui/src/assets/emoji/52.gif
  50. BIN
      im-admin-ui/src/assets/emoji/53.gif
  51. BIN
      im-admin-ui/src/assets/emoji/54.gif
  52. BIN
      im-admin-ui/src/assets/emoji/55.gif
  53. BIN
      im-admin-ui/src/assets/emoji/56.gif
  54. BIN
      im-admin-ui/src/assets/emoji/6.gif
  55. BIN
      im-admin-ui/src/assets/emoji/7.gif
  56. BIN
      im-admin-ui/src/assets/emoji/8.gif
  57. BIN
      im-admin-ui/src/assets/emoji/9.gif
  58. 23
      im-admin-ui/src/components/im/ImMessageContent/index.vue
  59. 26
      im-admin-ui/src/utils/emotion.ts
  60. 10
      im-admin-ui/src/utils/str.ts
  61. 11
      im-admin-ui/src/utils/url.ts

BIN
im-admin-ui/src/assets/emoji/0.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
im-admin-ui/src/assets/emoji/1.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
im-admin-ui/src/assets/emoji/10.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
im-admin-ui/src/assets/emoji/11.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
im-admin-ui/src/assets/emoji/12.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
im-admin-ui/src/assets/emoji/13.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
im-admin-ui/src/assets/emoji/14.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
im-admin-ui/src/assets/emoji/15.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
im-admin-ui/src/assets/emoji/16.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
im-admin-ui/src/assets/emoji/17.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
im-admin-ui/src/assets/emoji/18.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
im-admin-ui/src/assets/emoji/19.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
im-admin-ui/src/assets/emoji/2.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
im-admin-ui/src/assets/emoji/20.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
im-admin-ui/src/assets/emoji/21.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
im-admin-ui/src/assets/emoji/22.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
im-admin-ui/src/assets/emoji/23.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
im-admin-ui/src/assets/emoji/24.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
im-admin-ui/src/assets/emoji/25.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
im-admin-ui/src/assets/emoji/26.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
im-admin-ui/src/assets/emoji/27.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
im-admin-ui/src/assets/emoji/28.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
im-admin-ui/src/assets/emoji/29.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
im-admin-ui/src/assets/emoji/3.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
im-admin-ui/src/assets/emoji/30.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
im-admin-ui/src/assets/emoji/31.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

BIN
im-admin-ui/src/assets/emoji/32.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
im-admin-ui/src/assets/emoji/33.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
im-admin-ui/src/assets/emoji/34.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
im-admin-ui/src/assets/emoji/35.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
im-admin-ui/src/assets/emoji/36.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
im-admin-ui/src/assets/emoji/37.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
im-admin-ui/src/assets/emoji/38.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
im-admin-ui/src/assets/emoji/39.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
im-admin-ui/src/assets/emoji/4.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
im-admin-ui/src/assets/emoji/40.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
im-admin-ui/src/assets/emoji/41.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
im-admin-ui/src/assets/emoji/42.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
im-admin-ui/src/assets/emoji/43.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
im-admin-ui/src/assets/emoji/44.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
im-admin-ui/src/assets/emoji/45.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
im-admin-ui/src/assets/emoji/46.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
im-admin-ui/src/assets/emoji/47.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
im-admin-ui/src/assets/emoji/48.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
im-admin-ui/src/assets/emoji/49.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
im-admin-ui/src/assets/emoji/5.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
im-admin-ui/src/assets/emoji/50.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
im-admin-ui/src/assets/emoji/51.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
im-admin-ui/src/assets/emoji/52.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
im-admin-ui/src/assets/emoji/53.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
im-admin-ui/src/assets/emoji/54.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
im-admin-ui/src/assets/emoji/55.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
im-admin-ui/src/assets/emoji/56.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
im-admin-ui/src/assets/emoji/6.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
im-admin-ui/src/assets/emoji/7.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
im-admin-ui/src/assets/emoji/8.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

BIN
im-admin-ui/src/assets/emoji/9.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

23
im-admin-ui/src/components/im/ImMessageContent/index.vue

@ -1,10 +1,12 @@
<template> <template>
<div> <div>
<div v-if="message.type == 1" > <div v-if="message.type == 1">
<image-preview :src="JSON.parse(message.content).thumbUrl" :full-src="JSON.parse(message.content).originUrl" :width="40" :height="40" /> <image-preview :src="JSON.parse(message.content).thumbUrl" :full-src="JSON.parse(message.content).originUrl"
:width="40" :height="40" />
</div> </div>
<div v-else-if="message.type == 2"> <div v-else-if="message.type == 2">
<el-link type="primary" :href="JSON.parse(message.content).url" :download="JSON.parse(message.content).name" target="_blank"> <el-link type="primary" :href="JSON.parse(message.content).url" :download="JSON.parse(message.content).name"
target="_blank">
{{ JSON.parse(message.content).name }} {{ JSON.parse(message.content).name }}
</el-link> </el-link>
</div> </div>
@ -12,16 +14,19 @@
<audio style="height: 40px;" controls :src="JSON.parse(message.content).url"></audio> <audio style="height: 40px;" controls :src="JSON.parse(message.content).url"></audio>
</div> </div>
<div v-else-if="message.type == 4"> <div v-else-if="message.type == 4">
<video style="max-height: 120px;max-width: 200px;" controls :poster="JSON.parse(message.content).coverUrl" :src="JSON.parse(message.content).videoUrl"></video> <video style="max-height: 120px;max-width: 200px;" controls :poster="JSON.parse(message.content).coverUrl"
:src="JSON.parse(message.content).videoUrl"></video>
</div> </div>
<div v-else> <div v-else class="message-text" v-html="transform(replaceURLWithHTMLLinks(html2Escape(message.content)))">
{{ message.content }}
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts" name="ImMessageContent"> <script setup lang="ts" name="ImMessageContent">
import { ref} from 'vue' import { ref } from 'vue'
import { transform } from "@/utils/emotion"
import { replaceURLWithHTMLLinks } from "@/utils/url"
import { html2Escape } from "@/utils/str"
const props = defineProps({ const props = defineProps({
message: { message: {
@ -32,8 +37,8 @@ const props = defineProps({
</script> </script>
<style scoped> <style scoped>
.link { .link {
color: inherit; color: inherit;
text-decoration: none; text-decoration: none;
} }
</style> </style>

26
im-admin-ui/src/utils/emotion.ts

@ -0,0 +1,26 @@
const emoTextList = ['憨笑', '媚眼', '开心', '坏笑', '可怜', '爱心', '笑哭', '拍手', '惊喜', '打气',
'大哭', '流泪', '饥饿', '难受', '健身', '示爱', '色色', '眨眼', '暴怒', '惊恐',
'思考', '头晕', '大吐', '酷笑', '翻滚', '享受', '鼻涕', '快乐', '雀跃', '微笑',
'贪婪', '红心', '粉心', '星星', '大火', '眼睛', '音符', "叹号", "问号", "绿叶",
"燃烧", "喇叭", "警告", "信封", "房子", "礼物", "点赞", "举手", "喝彩", "点头",
"摇头", "偷瞄", "庆祝", "疾跑", "打滚", "惊吓", "起跳"
];
// 将匹配结果替换表情图片
let textToImg = (emoText) => {
let word = emoText.replace(/\#|\;/gi, '');
let idx = emoTextList.indexOf(word);
if (idx == -1) {
return emoText;
}
let url = new URL(`../assets/emoji/${idx}.gif`, import.meta.url).href;
return `<img src="${url}" style="width:20px;heigt:20px;" />`
}
export const transform = (content) => {
return content.replace(/\#[\u4E00-\u9FA5]{1,3}\;/gi, (text) => textToImg(text));
}

10
im-admin-ui/src/utils/str.ts

@ -0,0 +1,10 @@
export const html2Escape = (strText) => {
return strText.replace(/[<>&"]/g, function(c) {
return {
'<': '&lt;',
'>': '&gt;',
'&': '&amp;',
'"': '&quot;'
} [c];
});
}

11
im-admin-ui/src/utils/url.ts

@ -0,0 +1,11 @@
export const replaceURLWithHTMLLinks = (content) => {
// 使用正则表达式匹配更广泛的URL格式(此正则由deepseek生成)
const urlRegex = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]|\bwww\.[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return content.replace(urlRegex, (url) => {
// 如果URL不以http(s)://开头,则添加http://前缀
if (!url.startsWith("http")) {
url = "http://" + url;
}
return `<a href="${url}" target="_blank" style="color: #5359dc;text-decoration: underline;">${url}</a>`;
});
}
Loading…
Cancel
Save