emoji.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { isEmpty } from '@/utils/is'
  2. const emojiList = [
  3. { name: '[笑掉牙]', file: 'xiaodiaoya.png' },
  4. { name: '[可爱]', file: 'keai.png' },
  5. { name: '[冷酷]', file: 'lengku.png' },
  6. { name: '[闭嘴]', file: 'bizui.png' },
  7. { name: '[生气]', file: 'shengqi.png' },
  8. { name: '[惊恐]', file: 'jingkong.png' },
  9. { name: '[瞌睡]', file: 'keshui.png' },
  10. { name: '[大笑]', file: 'daxiao.png' },
  11. { name: '[爱心]', file: 'aixin.png' },
  12. { name: '[坏笑]', file: 'huaixiao.png' },
  13. { name: '[飞吻]', file: 'feiwen.png' },
  14. { name: '[疑问]', file: 'yiwen.png' },
  15. { name: '[开心]', file: 'kaixin.png' },
  16. { name: '[发呆]', file: 'fadai.png' },
  17. { name: '[流泪]', file: 'liulei.png' },
  18. { name: '[汗颜]', file: 'hanyan.png' },
  19. { name: '[惊悚]', file: 'jingshu.png' },
  20. { name: '[困~]', file: 'kun.png' },
  21. { name: '[心碎]', file: 'xinsui.png' },
  22. { name: '[天使]', file: 'tianshi.png' },
  23. { name: '[晕]', file: 'yun.png' },
  24. { name: '[啊]', file: 'a.png' },
  25. { name: '[愤怒]', file: 'fennu.png' },
  26. { name: '[睡着]', file: 'shuizhuo.png' },
  27. { name: '[面无表情]', file: 'mianwubiaoqing.png' },
  28. { name: '[难过]', file: 'nanguo.png' },
  29. { name: '[犯困]', file: 'fankun.png' },
  30. { name: '[好吃]', file: 'haochi.png' },
  31. { name: '[呕吐]', file: 'outu.png' },
  32. { name: '[龇牙]', file: 'ziya.png' },
  33. { name: '[懵比]', file: 'mengbi.png' },
  34. { name: '[白眼]', file: 'baiyan.png' },
  35. { name: '[饿死]', file: 'esi.png' },
  36. { name: '[凶]', file: 'xiong.png' },
  37. { name: '[感冒]', file: 'ganmao.png' },
  38. { name: '[流汗]', file: 'liuhan.png' },
  39. { name: '[笑哭]', file: 'xiaoku.png' },
  40. { name: '[流口水]', file: 'liukoushui.png' },
  41. { name: '[尴尬]', file: 'ganga.png' },
  42. { name: '[惊讶]', file: 'jingya.png' },
  43. { name: '[大惊]', file: 'dajing.png' },
  44. { name: '[不好意思]', file: 'buhaoyisi.png' },
  45. { name: '[大闹]', file: 'danao.png' },
  46. { name: '[不可思议]', file: 'bukesiyi.png' },
  47. { name: '[爱你]', file: 'aini.png' },
  48. { name: '[红心]', file: 'hongxin.png' },
  49. { name: '[点赞]', file: 'dianzan.png' },
  50. { name: '[恶魔]', file: 'emo.png' }
  51. ]
  52. export interface Emoji {
  53. name: string
  54. url: string
  55. }
  56. export const useEmoji = () => {
  57. const emojiPathList = ref<any[]>([])
  58. // 加载本地图片
  59. const getStaticEmojiPath = async () => {
  60. const pathList = import.meta.glob(
  61. '@/views/mall/promotion/kefu/components/images/*.{png,jpg,jpeg,svg}'
  62. )
  63. for (const path in pathList) {
  64. const imageModule: any = await pathList[path]()
  65. emojiPathList.value.push(imageModule.default)
  66. }
  67. }
  68. // 初始化
  69. onMounted(async () => {
  70. if (isEmpty(emojiPathList.value)) {
  71. await getStaticEmojiPath()
  72. }
  73. })
  74. // 处理表情
  75. function replaceEmoji(data: string) {
  76. let newData = data
  77. if (typeof newData !== 'object') {
  78. const reg = /\[(.+?)\]/g // [] 中括号
  79. const zhEmojiName = newData.match(reg)
  80. if (zhEmojiName) {
  81. zhEmojiName.forEach((item) => {
  82. const emojiFile = selEmojiFile(item)
  83. newData = newData.replace(
  84. item,
  85. `<img class="chat-img" style="width: 24px;height: 24px;margin: 0 3px;" src="${emojiFile}"/>`
  86. )
  87. })
  88. }
  89. }
  90. return newData
  91. }
  92. // 获得所有表情
  93. function getEmojiList(): Emoji[] {
  94. return emojiList.map((item) => ({
  95. url: selEmojiFile(item.name),
  96. name: item.name
  97. })) as Emoji[]
  98. }
  99. function selEmojiFile(name: string) {
  100. for (const emoji of emojiList) {
  101. if (emoji.name === name) {
  102. return emojiPathList.value.find((item: string) => item.indexOf(emoji.file) > -1)
  103. }
  104. }
  105. return false
  106. }
  107. return { replaceEmoji, getEmojiList }
  108. }