notification.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <template>
  2. <!-- 通知 -->
  3. <div class="w-10 h-10 grid place-items-center rounded-full mt-3 hover:cursor-pointer" ref="messageRef" v-click-outside="onClickOutside">
  4. <el-badge :value="3">
  5. <Icon name="bell" />
  6. </el-badge>
  7. <el-popover ref="popoverRef" :virtual-ref="messageRef" trigger="hover" virtual-triggering :width="300">
  8. <el-tabs model-value="message">
  9. <el-tab-pane label="消息(8)" name="message">
  10. <div>
  11. <div class="flex flex-row w-full border-b border-b-slate-300 dark:border-b-slate-500 mt-2" v-for="(message, key) in messages" :key="key">
  12. <div>
  13. <el-avatar src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png" class="w-2 h-2" />
  14. </div>
  15. <div class="ml-2 h-10 mt-2">
  16. {{ message }}
  17. </div>
  18. </div>
  19. </div>
  20. </el-tab-pane>
  21. <el-tab-pane label="通知(1)" name="notice">
  22. <div>
  23. <div class="flex flex-row w-full border-b border-b-slate-300 dark:border-b-slate-500 mt-2" v-for="(message, key) in messages" :key="key">
  24. <div>
  25. <el-avatar src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png" class="w-2 h-2" />
  26. </div>
  27. <div class="ml-2 h-10 mt-2">
  28. {{ message }}
  29. </div>
  30. </div>
  31. </div>
  32. </el-tab-pane>
  33. </el-tabs>
  34. </el-popover>
  35. </div>
  36. </template>
  37. <script setup lang="ts">
  38. import { ref, unref } from 'vue'
  39. import { ClickOutside as vClickOutside } from 'element-plus'
  40. const messageRef = ref()
  41. const popoverRef = ref()
  42. const onClickOutside = () => {
  43. unref(popoverRef).popperRef?.delayHide?.()
  44. }
  45. const messages = ref()
  46. messages.value = ['你收到 catchadmin 的好友申请', '你收到 catchadmin pro 的 license 授权', '你收到 catchadmin 通知']
  47. </script>