effect.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import { Emitter } from '@/enum/emitter'
  2. import mitt from 'mitt'
  3. import { setBaseUrl } from '@/service/request'
  4. import { useRoute } from 'vue-router'
  5. import { ref, onUnmounted, onMounted } from 'vue'
  6. const emitter = mitt()
  7. export const useEmitter = () => {
  8. const _on = (key: keyof typeof Emitter, cb: () => void) => emitter.on(key, cb)
  9. const _emit = (key: keyof typeof Emitter) => emitter.emit(key)
  10. const _off = (key: keyof typeof Emitter, cb: () => void) => emitter.off(key, cb)
  11. return {
  12. on: _on,
  13. emit: _emit,
  14. off: _off
  15. }
  16. }
  17. export const useScheduler = (callback: () => void, delay: number) => {
  18. const timer = ref<any>()
  19. function start () {
  20. timer.value = setInterval(callback, delay)
  21. }
  22. function stop () {
  23. clearInterval(timer.value)
  24. }
  25. onUnmounted(() => {
  26. stop()
  27. })
  28. return {
  29. start,
  30. stop
  31. }
  32. }
  33. export const useSchedulerOnce = (callback: () => void, delay: number) => {
  34. const timeId = ref()
  35. timeId.value = setTimeout(() => {
  36. callback()
  37. clearTimeout(timeId.value)
  38. }, delay)
  39. onUnmounted(() => {
  40. clearTimeout(timeId.value)
  41. })
  42. }
  43. export const usePort = (title: string) => {
  44. if (title === '物联网') {
  45. setBaseUrl('/iot')
  46. } else if (title === '视联网') {
  47. setBaseUrl('/cvs')
  48. } else if (title === '用户群组') {
  49. setBaseUrl('/user')
  50. } else {
  51. setBaseUrl('/user')
  52. }
  53. }
  54. /**
  55. * `useDeviceResolution` 函数是一个 TypeScript 函数,允许您跟踪设备的屏幕宽度和高度,并在屏幕大小调整时执行回调函数。
  56. * @param {Function} cb - 参数“cb”是一个回调函数,每当设备分辨率发生变化时就会调用该函数。
  57. * @returns 函数“useDeviceResolution”返回一个具有两个属性的对象:“screenWidth”和“screenHeight”。
  58. */
  59. export const useDeviceResolution = (cb: Function) => {
  60. const screenWidth = ref(window.innerWidth)
  61. const screenHeight = ref(window.innerHeight)
  62. const handleResize = () => {
  63. screenWidth.value = window.innerWidth
  64. screenHeight.value = window.innerHeight
  65. cb()
  66. }
  67. onMounted(() => {
  68. window.addEventListener('resize', handleResize)
  69. })
  70. onUnmounted(() => {
  71. window.removeEventListener('resize', handleResize)
  72. })
  73. return {
  74. screenWidth,
  75. screenHeight
  76. }
  77. }
  78. /**
  79. * @description 获取当前模块信息
  80. * @example
  81. * const module = useModule()
  82. * console.log(module.name)
  83. * console.log(module.path)
  84. */
  85. export const useModule = () => {
  86. const route = useRoute()
  87. return {
  88. name: route.matched[0].name,
  89. path: route.matched[0].path
  90. }
  91. }