UNPKG

my-uniapp-tools

Version:

一个简洁稳定的 uni-app 开发工具库,提供剪贴板、本地存储、导航、系统信息等常用功能

2 lines (1 loc) 3.07 kB
import{debounce as t}from"./utils.js";import{ErrorHandler as n,UniAppToolsError as e}from"./core.js";const o=n.getInstance();let i={defaultHomePage:"/pages/index/index"};function r(t){t&&"object"==typeof t&&(i={...i,...t})}function c(t,n){const e="string"==typeof t?t:String(t??"");if(!n||"object"!=typeof n)return e;const o=Object.entries(n).map(([t,n])=>`${encodeURIComponent(t)}=${encodeURIComponent(String(n))}`).join("&");return o?e+(e.includes("?")?"&":"?")+o:e}const a=c;function s(t,n,i){const r=i?.errMsg?`${n} - ${i.errMsg}`:n;o.handleError(new e(t,r,"navigation"),"navigation")}function u(){return"function"==typeof getCurrentPages?getCurrentPages():[]}function f(){return"undefined"==typeof uni?null:uni}async function l(t="",n={}){return new Promise(e=>{const o=n&&"object"==typeof n?n:{},i="number"==typeof o.delta&&Number.isFinite(o.delta)&&o.delta>0?Math.floor(o.delta):1,r="number"==typeof o.timeout&&Number.isFinite(o.timeout)&&o.timeout>0?o.timeout:5e3,c=f();if(!c||"function"!=typeof c.navigateBack)return s("NAVIGATION_ENV_ERROR","当前环境不支持 navigateBack"),void e(!1);const a=u();if(a.length<=i)return console.warn(`[navigation] 无法返回${i}页,当前页面栈深度不足(当前: ${a.length})`),void e(!1);let l=!1;const g=setTimeout(()=>{l||(l=!0,console.warn("[navigation] 页面init回调执行超时"),e(!1))},r);c.navigateBack({delta:i,success:()=>{clearTimeout(g),setTimeout(()=>{if(!l)try{const n=u();if(n.length>0){const e=n[n.length-1];e.$vm&&"function"==typeof e.$vm.init&&e.$vm.init(t)}l=!0,e(!0)}catch(t){s("PAGE_CALLBACK_ERROR",`页面回调执行失败: ${t instanceof Error?t.message:String(t)}`),l=!0,e(!0)}},100)},fail:t=>{clearTimeout(g),s("NAVIGATE_BACK_FAILED","导航返回失败",t),l=!0,e(!1)}})})}async function g(t="",n={}){const e=n&&"object"==typeof n?n:{},o=u(),r="number"==typeof e.delta&&Number.isFinite(e.delta)&&e.delta>0?Math.floor(e.delta):1;if(o.length>r)return await l(t,n);const a=e.homePage||i.defaultHomePage,g=a.startsWith("/")?a:`/${a}`;return console.info(`[navigation] 页面栈深度不足,重定向到首页: ${g}`),new Promise(t=>{const n=f();if(!n||"function"!=typeof n.reLaunch)return s("NAVIGATION_ENV_ERROR","当前环境不支持 reLaunch"),void t(!1);const o=c(g,e.homeParams);n.reLaunch({url:o,success:()=>t(!0),fail:n=>{s("RELAUNCH_FAILED",`重新启动失败: ${o}`,n),t(!1)}})})}const m=t(l,300);function p(){try{const t=u();if(0===t.length)return null;const n=t[t.length-1];return{route:n.route||"",options:n.options||{}}}catch(t){return s("GET_CURRENT_PAGE_ERROR",`获取当前页面信息失败: ${t instanceof Error?t.message:String(t)}`),null}}const d=p;function E(){try{return u().map(t=>({route:t.route||"",options:t.options||{}}))}catch(t){return s("GET_PAGE_STACK_ERROR",`获取页面栈信息失败: ${t instanceof Error?t.message:String(t)}`),[]}}const R=E;export{a as buildUrl,r as configureNavigation,d as getCurrentPageInfo,R as getPageStack,l as useBack,m as useBackDebounced,g as useBackOrHome,c as useBuildUrl,p as useCurrentPageInfo,E as usePageStack};