EmojiSelectPopover.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <!-- emoji 表情选择组件 -->
  2. <template>
  3. <el-popover :width="500" placement="top" trigger="click">
  4. <template #reference>
  5. <Icon :size="30" class="ml-10px cursor-pointer" icon="twemoji:grinning-face" />
  6. </template>
  7. <ElScrollbar height="300px">
  8. <ul class="ml-2 flex flex-wrap px-2">
  9. <li
  10. v-for="(item, index) in emojiList"
  11. :key="index"
  12. :style="{
  13. borderColor: 'var(--el-color-primary)',
  14. color: 'var(--el-color-primary)'
  15. }"
  16. :title="item.name"
  17. class="icon-item mr-2 mt-1 w-1/10 flex cursor-pointer items-center justify-center border border-solid p-2"
  18. @click="handleSelect(item)"
  19. >
  20. <img :src="item.url" class="w-24px h-24px" />
  21. </li>
  22. </ul>
  23. </ElScrollbar>
  24. </el-popover>
  25. </template>
  26. <script lang="ts" setup>
  27. defineOptions({ name: 'EmojiSelectPopover' })
  28. import { Emoji, useEmoji } from './emoji'
  29. const { getEmojiList } = useEmoji()
  30. const emojiList = computed(() => getEmojiList())
  31. /** 选择 emoji 表情 */
  32. const emits = defineEmits<{
  33. (e: 'select-emoji', v: Emoji)
  34. }>()
  35. const handleSelect = (item: Emoji) => {
  36. // 整个 emoji 数据传递出去,方便以后输入框直接显示表情
  37. emits('select-emoji', item)
  38. }
  39. </script>