LoadQuerys.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { onLoad } from "@dcloudio/uni-app";
  2. import { nextTick, ref, type Ref } from "vue";
  3. /**
  4. * 用于在页面加载时获取并处理页面参数的组合式函数。
  5. * @param defaults - 页面参数的默认值对象,其类型为泛型 T,T 需继承自 Record<string, any>。
  6. * @param afterLoad - 可选的回调函数,在页面加载完成且参数处理完毕后执行,接收处理后的参数对象作为参数。
  7. */
  8. export function useLoadQuerys<T extends Record<string, any>>(
  9. defaults: T,
  10. afterLoad?: (querys: T) => void
  11. ) {
  12. const querys = ref<T>(defaults) as Ref<T>;
  13. const rawQuerys = ref({}) as Ref<Record<string, any>>;
  14. onLoad((_querys) => {
  15. rawQuerys.value = _querys || {};
  16. if (_querys) {
  17. for (const key in defaults) {
  18. const isDefined = _querys[key] !== undefined && _querys[key] !== 'undefined';
  19. if (typeof defaults[key] === 'number')
  20. (querys.value as Record<string, any>)[key] = isDefined ? Number(_querys[key]) : defaults[key];
  21. else if (typeof defaults[key] === 'boolean')
  22. (querys.value as Record<string, any>)[key] = isDefined ? Boolean(_querys[key]) && _querys[key] != 'false' : defaults[key];
  23. else if (typeof defaults[key] === 'object')
  24. (querys.value as Record<string, any>)[key] = isDefined ? JSON.parse(decodeURIComponent(_querys[key])) : defaults[key];
  25. else
  26. querys.value[key] = isDefined ? decodeURIComponent(decodeURIComponent(_querys[key])) as any : defaults[key];
  27. }
  28. console.log('querys', querys.value);
  29. }
  30. nextTick(() => {
  31. afterLoad?.(querys.value);
  32. });
  33. });
  34. return {
  35. querys,
  36. rawQuerys,
  37. }
  38. }
  39. export function stringDotNumbersToNumbers(a: number|number[]|string|undefined): number|number[]|undefined {
  40. if (typeof a === 'string') {
  41. if (a.includes(','))
  42. return a.split(',').map(stringDotNumbersToNumbers) as number[];
  43. else
  44. return Number(a.replace(/\./g, ''));
  45. }
  46. return a;
  47. }