PageQuerys.ts 806 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { nextTick, onMounted, ref, watch, type Ref } from "vue";
  2. import { useRoute } from "vue-router";
  3. export function useLoadQuerys<T extends Record<string, any>>(
  4. defaults: T,
  5. afterLoad?: (querys: T) => void
  6. ) {
  7. const querys = ref<T>(defaults) as Ref<T>;
  8. const route = useRoute();
  9. function loadQuerys() {
  10. const _querys = route.query;
  11. if (_querys) {
  12. for (const key in querys.value) {
  13. if (typeof defaults[key] === 'number')
  14. (querys.value as Record<string, any>)[key] = Number(_querys[key]);
  15. else
  16. querys.value[key] = _querys[key] as any;
  17. }
  18. }
  19. afterLoad?.(querys.value);
  20. }
  21. watch(route, () => {
  22. loadQuerys();
  23. });
  24. onMounted(() => {
  25. nextTick(() => {
  26. loadQuerys();
  27. });
  28. });
  29. return {
  30. querys,
  31. }
  32. }