PageAction.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import { type App } from "vue";
  2. /**
  3. * 说明:页面导航相关函数封装。
  4. */
  5. /**
  6. * 页面跳转: 后退至上一个页面。
  7. */
  8. function back() {
  9. uni.navigateBack({ delta: 1 });
  10. }
  11. /**
  12. * 页面跳转: 后退并返回数据至上一个页面的 onPageBack 方法。
  13. * @param data 要返回的数据
  14. */
  15. function backReturnData(data: Record<string, unknown>) {
  16. var pages = getCurrentPages(); // 获取页面栈
  17. var prevPage = pages[pages.length - 2] as { $vm: Record<string, unknown> }; // 上一个页面
  18. for (const key in data) {
  19. if (Object.prototype.hasOwnProperty.call(data, key)) {
  20. prevPage.$vm[key] = data[key];
  21. }
  22. }
  23. uni.navigateBack({ delta: 1 });
  24. }
  25. /**
  26. * 页面跳转: 关闭当前页面,跳转到应用内的某个页面
  27. * @param url 页面路径
  28. * @param data 要传递的数据
  29. */
  30. function redirectTo(url: string, data: Record<string, unknown> = {}) {
  31. var dataString = '';
  32. for (const key in data) {
  33. if (Object.prototype.hasOwnProperty.call(data, key))
  34. dataString += `&${key}=${data[key]}`;
  35. }
  36. uni.redirectTo({
  37. url: url + (url.includes('?') ? '&' : '?') + dataString,
  38. fail: (err) => {
  39. console.error('页面跳转失败:', err);
  40. },
  41. });
  42. }
  43. /**
  44. * 页面跳转: 跳转到指定页面
  45. * @param url 页面路径
  46. * @param data 要传递的数据
  47. */
  48. function navTo(url: string, data: Record<string, unknown> = {}) {
  49. var dataString = '';
  50. for (const key in data)
  51. dataString += `&${key}=${encodeURIComponent('' + data[key])}`;
  52. uni.navigateTo({
  53. url: url + (url.includes('?') ? '&' : '?') + dataString,
  54. fail: (err) => {
  55. console.error('页面跳转失败:', err);
  56. },
  57. });
  58. }
  59. /**
  60. * 页面数据传递: 调用上一个页面的 onPageBack 方法
  61. * @param name 方法名
  62. * @param data 要传递的数据
  63. */
  64. function callPrevOnPageBack(name: string, data: Record<string, unknown>) {
  65. var pages = getCurrentPages(); // 获取页面栈
  66. var prevPage = pages[pages.length - 2] as { $vm: Record<string, unknown> }; // 上一个页面
  67. if (typeof prevPage.$vm.onPageBack === 'function')
  68. prevPage.$vm.onPageBack(name, data);
  69. }
  70. /**
  71. * 页面跳转: 调用上一个页面的 onPageBack 方法并返回至上一个页面
  72. * @param name 方法名
  73. * @param data 要传递的数据
  74. */
  75. function backAndCallOnPageBack(name: string, data: Record<string, unknown>) {
  76. var pages = getCurrentPages(); // 获取页面栈
  77. var prevPage = pages[pages.length - 2] as { $vm: Record<string, unknown> }; // 上一个页面
  78. if (typeof prevPage.$vm.onPageBack === 'function')
  79. prevPage.$vm.onPageBack(name, data);
  80. uni.navigateBack({ delta: 1 });
  81. }
  82. export {
  83. redirectTo,
  84. back,
  85. backReturnData,
  86. backAndCallOnPageBack,
  87. navTo,
  88. callPrevOnPageBack,
  89. }
  90. export function getCurrentPageUrl() {
  91. const pages = getCurrentPages();
  92. const currentPagePath = pages[pages.length - 1]?.route
  93. return currentPagePath
  94. }
  95. export default {
  96. install(app: App<Element>) : void {
  97. const p = {
  98. redirectTo,
  99. back,
  100. backReturnData,
  101. backAndCallOnPageBack,
  102. callPrevOnPageBack,
  103. navTo,
  104. };
  105. app.config.globalProperties.$p = p;
  106. },
  107. }