Files
rating/utils/page.js
2026-05-20 23:16:53 +08:00

112 lines
3.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 页面跳转相关工具方法
*/
/**
* 智能返回方法默认返回上一页如果页面栈只有1层没有上一页则返回到首页
*
* @param {Object} options 配置参数
* @param {number} options.delay 延迟执行的时间,单位毫秒,默认 0
* @param {string} options.homePath 首页的路径,默认为 '/pages/index/index'
*/
export const smartNavigateBack = (options = {}) => {
const { delay = 0, homePath = '/pages/index/index' } = options;
const executeBack = () => {
const pages = getCurrentPages();
if (pages.length > 1) {
// 有上一页,直接返回
uni.navigateBack({
delta: 1
});
} else {
// 页面栈只有一层,返回首页
uni.switchTab({
url: homePath,
fail: () => {
// 如果首页不是 tabBar 页面,则使用 reLaunch
uni.reLaunch({
url: homePath
});
}
});
}
};
if (delay > 0) {
setTimeout(executeBack, delay);
} else {
executeBack();
}
};
/**
* 对象转 URL 参数
* @param {Object} obj 要转换的对象
* @returns {string} 返回 a=1&b=2 格式的字符串
*/
export const objToUrlParams = (obj) => {
if (!obj || typeof obj !== 'object') return '';
const params = [];
for (let key in obj) {
if (obj.hasOwnProperty(key) && obj[key] !== undefined && obj[key] !== null) {
// 过滤掉 undefined 和 null 的参数
params.push(`${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`);
}
}
return params.join('&');
};
/**
* 封装带参数的跳转方法
* @param {string} url 跳转的页面路径
* @param {Object} params 要传递的参数对象
*/
export const navigateToWithParams = (url, params = {}) => {
const queryStr = objToUrlParams(params);
const finalUrl = queryStr ? `${url}${url.includes('?') ? '&' : '?'}${queryStr}` : url;
uni.navigateTo({
url: finalUrl
});
};
/**
* 获取当前页面的实例
* @returns {Object|null} 当前页面实例
*/
export const getCurrentPage = () => {
const pages = getCurrentPages();
return pages.length > 0 ? pages[pages.length - 1] : null;
};
/**
* 刷新当前页面(重新调用 onLoad 和 onShow
* 注意:部分复杂页面可能需要根据具体业务逻辑单独实现刷新机制
*/
export const refreshCurrentPage = () => {
const currentPage = getCurrentPage();
if (currentPage) {
if (typeof currentPage.onLoad === 'function') {
currentPage.onLoad(currentPage.options || {});
}
if (typeof currentPage.onShow === 'function') {
currentPage.onShow();
}
}
};
/**
* 检查当前是否是指定页面
* @param {string} route 页面路由,例如 'pages/index/index'
* @returns {boolean}
*/
export const isCurrentPage = (route) => {
const currentPage = getCurrentPage();
if (!currentPage) return false;
// 去除可能的首字符 '/'
const checkRoute = route.startsWith('/') ? route.substring(1) : route;
return currentPage.route === checkRoute;
};