useGreeting.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { ref, computed, onMounted, onUnmounted } from 'vue'
  2. /**
  3. * 问候语组合式函数
  4. * @param name - 用户名(可选)
  5. * @param realtime - 是否实时更新(默认false)
  6. */
  7. export function useGreeting(name?: string, realtime: boolean = false) {
  8. const currentHour = ref(new Date().getHours())
  9. // 问候语
  10. const greeting = computed(() => {
  11. const hour = currentHour.value
  12. let message = ''
  13. if (hour >= 5 && hour < 12) {
  14. message = 'Good Morning'
  15. } else if (hour >= 12 && hour < 18) {
  16. message = 'Good Afternoon'
  17. } else if (hour >= 18 && hour < 22) {
  18. message = 'Good Evening'
  19. } else {
  20. message = 'Good Night'
  21. }
  22. return name ? `${message}, ${name}!` : message
  23. })
  24. // 带Emoji的问候语
  25. const greetingWithEmoji = computed(() => {
  26. const hour = currentHour.value
  27. let message = ''
  28. let emoji = ''
  29. if (hour >= 5 && hour < 12) {
  30. message = 'Good Morning'
  31. emoji = '🌅'
  32. } else if (hour >= 12 && hour < 18) {
  33. message = 'Good Afternoon'
  34. emoji = '☀️'
  35. } else if (hour >= 18 && hour < 22) {
  36. message = 'Good Evening'
  37. emoji = '🌆'
  38. } else {
  39. message = 'Good Night'
  40. emoji = '🌙'
  41. }
  42. message = `${emoji} ${message}`
  43. return name ? `${message}, ${name}!` : message
  44. })
  45. // 更新时间
  46. const updateHour = () => {
  47. currentHour.value = new Date().getHours()
  48. }
  49. // 定时器
  50. let timer: ReturnType<typeof setInterval> | null = null
  51. onMounted(() => {
  52. if (realtime) {
  53. timer = setInterval(updateHour, 60000)
  54. }
  55. })
  56. onUnmounted(() => {
  57. if (timer) clearInterval(timer)
  58. })
  59. return {
  60. greeting,
  61. greetingWithEmoji,
  62. refresh: updateHour
  63. }
  64. }