usePage.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * @Author: fxs bjnsfxs@163.com
  3. * @Date: 2024-09-10 10:31:42
  4. * @LastEditors: fxs bjnsfxs@163.com
  5. * @LastEditTime: 2024-09-11 16:28:26
  6. * @FilePath: \Game-Backstage-Management-System\src\hooks\usePage.ts
  7. * @Description:
  8. *
  9. */
  10. import { onActivated, onDeactivated, watch } from 'vue'
  11. import { compareWatchData, saveWatchData } from '@/utils/common'
  12. export function usePage() {
  13. const watchPageChange = (
  14. watchData: () => Array<any>,
  15. bakcupData: any,
  16. cb: (...argus: any[]) => void
  17. ) => {
  18. let watchStop: (() => void) | null = null
  19. onActivated(() => {
  20. const currentData = watchData()
  21. if (!compareWatchData(bakcupData, currentData)) {
  22. cb(...currentData)
  23. }
  24. if (!watchStop) {
  25. watchStop = watch(
  26. () => watchData(),
  27. (newData) => {
  28. cb(...newData)
  29. },
  30. { deep: true }
  31. )
  32. }
  33. })
  34. onDeactivated(() => {
  35. if (watchStop) {
  36. const currentData = watchData()
  37. saveWatchData(currentData, bakcupData)
  38. watchStop()
  39. watchStop = null
  40. }
  41. })
  42. }
  43. return {
  44. watchPageChange
  45. }
  46. }