usePage.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import type { RouteLocationRaw, Router } from 'vue-router';
  2. import { PageEnum } from '@/enums/pageEnum';
  3. // import { RedirectName } from '@/router/constant'
  4. import { useRouter } from 'vue-router';
  5. import { isString } from '@/utils/is';
  6. import { unref } from 'vue';
  7. export type RouteLocationRawEx = Omit<RouteLocationRaw, 'path'> & {
  8. path: PageEnum;
  9. };
  10. function handleError(e: Error) {
  11. console.error(e);
  12. }
  13. /**
  14. * 页面切换
  15. */
  16. export function useGo(_router?: Router) {
  17. let router;
  18. if (!_router) {
  19. router = useRouter();
  20. }
  21. const { push, replace }: any = _router || router;
  22. function go(
  23. opt: PageEnum | RouteLocationRawEx | string = PageEnum.BASE_HOME,
  24. isReplace = false
  25. ) {
  26. if (!opt) {
  27. return;
  28. }
  29. if (isString(opt)) {
  30. isReplace
  31. ? replace(opt).catch(handleError)
  32. : push(opt).catch(handleError);
  33. } else {
  34. const o = opt as RouteLocationRaw;
  35. isReplace ? replace(o).catch(handleError) : push(o).catch(handleError);
  36. }
  37. }
  38. return go;
  39. }
  40. /**
  41. * 重做当前页面
  42. */
  43. export const useRedo = (_router?: Router) => {
  44. const { push, currentRoute } = _router || useRouter();
  45. const { query, params = {}, name, fullPath } = unref(currentRoute.value);
  46. function redo(): Promise<boolean> {
  47. return new Promise(resolve => {
  48. // if (name === RedirectName) {
  49. // resolve(false)
  50. // return
  51. // }
  52. // if (name && Object.keys(params).length > 0) {
  53. // params['_redirect_type'] = 'name'
  54. // params['path'] = String(name)
  55. // } else {
  56. // params['_redirect_type'] = 'path'
  57. // params['path'] = fullPath
  58. // }
  59. // push({ name: RedirectName, params, query }).then(() => resolve(true))
  60. });
  61. }
  62. return redo;
  63. };