utils.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { h } from 'vue'
  2. import { NIcon } from 'naive-ui'
  3. import screenfull from 'screenfull'
  4. import debounce from 'lodash/debounce'
  5. /**
  6. * * 生成一个用不重复的ID
  7. * @param { Number } randomLength
  8. */
  9. export function getUUID(randomLength: number) {
  10. return Number(
  11. Math.random().toString().substr(2, randomLength) + Date.now()
  12. ).toString(36)
  13. }
  14. /**
  15. * * render 图标
  16. */
  17. export const renderIcon = (icon: any, set = {}) => {
  18. return () => h(NIcon, set, { default: () => h(icon) })
  19. }
  20. /**
  21. * * 处理 vite 中无法使用 require 的问题,utils 文件为根路径
  22. * @param path
  23. * @param name
  24. * @returns url
  25. */
  26. export const requireUrl = (path: string, name: string) => {
  27. return new URL(`${path}/${name}`, import.meta.url).href
  28. }
  29. /**
  30. * * 获取错误处理图片,默认 404 图
  31. * @param path
  32. * @param name
  33. * @returns url
  34. */
  35. export const requireFallbackImg = (path?: string, name?: string) => {
  36. const url = path && name
  37. return new URL(
  38. url ? `${path}/${name}` : '../assets/images/exception/image-404.png',
  39. import.meta.url
  40. ).href
  41. }
  42. export const screenfullFn = (isFullscreen?: boolean, isEnabled?: boolean) => {
  43. // 是否是全屏
  44. if (isFullscreen) return screenfull.isFullscreen
  45. // 是否支持全屏
  46. if (isEnabled) return screenfull.isEnabled
  47. if (screenfull.isEnabled) {
  48. screenfull.toggle()
  49. return
  50. }
  51. // TODO lang
  52. window['$message'].warning('您的浏览器不支持全屏功能!')
  53. }
  54. /**
  55. * * 挂载监听
  56. * @returns url
  57. */
  58. export const goAddEventListener = <K extends keyof WindowEventMap>(
  59. target: EventTarget,
  60. type: K,
  61. listener: EventListenerOrEventListenerObject,
  62. options?: boolean | AddEventListenerOptions | undefined
  63. ) => {
  64. if(!target) return
  65. target.addEventListener(
  66. type,
  67. debounce(listener, 300, {
  68. leading: true,
  69. trailing: false
  70. }),
  71. options
  72. )
  73. }
  74. /**
  75. * * 卸载监听
  76. * @returns url
  77. */
  78. export const goRemoveEventListener = <K extends keyof WindowEventMap>(
  79. target: EventTarget,
  80. type: K,
  81. listener: EventListenerOrEventListenerObject
  82. ) => {
  83. if(!target) return
  84. target.removeEventListener(type, listener)
  85. }