useSyncUpdate.hook.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { watch } from 'vue'
  2. import { useRoute } from 'vue-router'
  3. import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  4. import { useSync } from '@/views/chart/hooks/useSync.hook'
  5. import { ChartEnum } from '@/enums/pageEnum'
  6. import { SavePageEnum } from '@/enums/editPageEnum'
  7. import { editToJsonInterval } from '@/settings/designSetting'
  8. const { updateComponent } = useSync()
  9. const chartEditStore = useChartEditStore()
  10. // 侦听器更新
  11. const useSyncUpdateHandle = () => {
  12. // 定义侦听器变量
  13. let timer: any
  14. const updateFn = (e: any) => updateComponent(e!.detail, true, false)
  15. const syncData = async () => {
  16. dispatchEvent(new CustomEvent(SavePageEnum.CHART, { detail: chartEditStore.getStorageInfo }))
  17. }
  18. // 开启侦听
  19. const use = () => {
  20. // // 1、定时同步数据
  21. // timer = setInterval(() => {
  22. // // 窗口激活并且处于工作台
  23. // document.hasFocus() && syncData()
  24. // }, editToJsonInterval)
  25. // 2、失焦同步数据
  26. addEventListener('blur', syncData)
  27. // 【监听JSON代码 刷新工作台图表】
  28. addEventListener(SavePageEnum.JSON, updateFn)
  29. }
  30. // 关闭侦听
  31. const unUse = () => {
  32. // clearInterval(timer)
  33. removeEventListener(SavePageEnum.JSON, updateFn)
  34. removeEventListener('blur', syncData)
  35. }
  36. // 路由变更时处理
  37. const watchHandler = (toName: any, fromName: any) => {
  38. if (fromName == ChartEnum.CHART_HOME_NAME) {
  39. unUse()
  40. }
  41. if (toName == ChartEnum.CHART_HOME_NAME) {
  42. use()
  43. }
  44. }
  45. return watchHandler
  46. }
  47. export const useSyncUpdate = () => {
  48. const routerParamsInfo = useRoute()
  49. watch(() => routerParamsInfo.name, useSyncUpdateHandle(), { immediate: true })
  50. }