在App.vue,里的onLaunch: async function() { }
加入如下代码:
javascript
// 全局跳转日志(已修复 navigateBack 的 undefined 问题)
const ROUTE_METHODS = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab', 'navigateBack']
ROUTE_METHODS.forEach(method => {
uni.addInterceptor(method, {
invoke(args) {
const pages = getCurrentPages()
const curRoute = pages[pages.length - 1]?.route || '启动页'
// ✅ 修复点 1:处理 navigateBack 的目标页
let targetRoute = args.url
if (method === 'navigateBack') {
// navigateBack 没有 args.url,需要手动算上一页
const prevPage = pages[pages.length - 2]
targetRoute = prevPage ? prevPage.route : '已退出应用'
}
// ✅ 修复点 2:更稳健的 UID 获取(避免 uni-id-pages-user-info 为空)
let uid = '未登录'
try {
// 优先从 uni-id-pages 的标准存储取
const storedUser = uni.getStorageSync('uni-id-pages-user-info')
if (storedUser && storedUser.uid) {
uid = storedUser.uid
} else {
// 兜底从 uniCloud 运行时取
const cloudUser = uniCloud.getCurrentUserInfo()
if (cloudUser && cloudUser.uid) {
uid = cloudUser.uid
}
}
} catch (e) {
// 存储读取失败,保持 '未登录'
}
console.log(`🔐 [${method}] 从=${curRoute} 到=${targetRoute},UID=${uid}`)
return args
}
})
})