|
|
|
@ -7,26 +7,26 @@ import https from "../../../utils/https.js" |
|
|
|
Page({ |
|
|
|
data: { |
|
|
|
webUrl: "", |
|
|
|
shareTitle: "", |
|
|
|
shareUrl: "", |
|
|
|
shareTitle: "", // 给一个默认标题
|
|
|
|
shareUrl: "", // 暂时没用到,可以用 currentUrl 替代更清晰
|
|
|
|
currentShareUrl: "", // 【新增】用于存储 H5 传回来的最新 URL
|
|
|
|
currentShareImg: "", // 【新增】用于存储 H5 传回来的分享图片
|
|
|
|
|
|
|
|
cachedOptions: null, |
|
|
|
isWaitingLogin: false, |
|
|
|
}, |
|
|
|
|
|
|
|
onLoad: function (options) { |
|
|
|
// onLoad 只负责存参数,不执行任何跳转逻辑,防止和页面初始化冲突
|
|
|
|
console.log('onLoad options:', options); |
|
|
|
this.data.cachedOptions = options; |
|
|
|
}, |
|
|
|
|
|
|
|
onShow: function () { |
|
|
|
// 将所有逻辑移到 onShow,确保页面加载完毕后再执行跳转
|
|
|
|
this.checkLoginAndLoad(); |
|
|
|
}, |
|
|
|
|
|
|
|
checkLoginAndLoad: function() { |
|
|
|
// 1. 防白屏容错:检查参数
|
|
|
|
// ... (你的原有逻辑保持不变) ...
|
|
|
|
let options = this.data.cachedOptions; |
|
|
|
if (!options || !options.weburl) { |
|
|
|
setTimeout(() => { wx.navigateBack(); }, 100); |
|
|
|
@ -35,9 +35,7 @@ Page({ |
|
|
|
|
|
|
|
let token = wx.getStorageSync('jstrip_token'); |
|
|
|
|
|
|
|
// 2. 有 Token:正常加载
|
|
|
|
if (token) { |
|
|
|
// 如果是刚登录回来,或者页面还没加载过 URL
|
|
|
|
if (this.data.isWaitingLogin || !this.data.webUrl) { |
|
|
|
console.log('已登录,开始加载页面'); |
|
|
|
this.data.isWaitingLogin = false; |
|
|
|
@ -46,37 +44,32 @@ Page({ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 3. 无 Token:处理跳转
|
|
|
|
// 3.1 如果 isWaitingLogin 为 true,说明是刚从登录页返回(用户取消了登录)
|
|
|
|
if (this.data.isWaitingLogin) { |
|
|
|
console.log('用户取消登录,返回上一页'); |
|
|
|
wx.navigateBack(); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 3.2 第一次检测到未登录,跳转登录页
|
|
|
|
console.log('未登录,延时跳转登录页'); |
|
|
|
this.data.isWaitingLogin = true; |
|
|
|
|
|
|
|
// ★关键修复★:使用 setTimeout 延迟跳转,解决 "navigateTo with an already exist webviewId" 报错
|
|
|
|
setTimeout(() => { |
|
|
|
wx.navigateTo({ |
|
|
|
url: '/pages/login/index', |
|
|
|
fail: (err) => { |
|
|
|
console.error('跳转失败:', err); |
|
|
|
this.data.isWaitingLogin = false; // 重置标记以便重试
|
|
|
|
this.data.isWaitingLogin = false; |
|
|
|
} |
|
|
|
}); |
|
|
|
}, 300); // 延迟 300ms 足够让页面初始化完成
|
|
|
|
}, 300); |
|
|
|
}, |
|
|
|
|
|
|
|
handleUrlProcess: function () { |
|
|
|
// ... (你的原有逻辑保持不变) ...
|
|
|
|
let options = this.data.cachedOptions; |
|
|
|
// 双重检查
|
|
|
|
if (!options || !options.weburl) return; |
|
|
|
|
|
|
|
let weburl = decodeURIComponent(options.weburl) |
|
|
|
|
|
|
|
let webParam = {} |
|
|
|
let baseUrl = "" |
|
|
|
try { |
|
|
|
@ -91,11 +84,8 @@ Page({ |
|
|
|
} catch (e) { console.log(e) } |
|
|
|
|
|
|
|
let lowerUrl = weburl.toLowerCase() |
|
|
|
|
|
|
|
// 此时 Token 肯定存在
|
|
|
|
let token = wx.getStorageSync('jstrip_token'); |
|
|
|
|
|
|
|
// 1. 宠你有礼
|
|
|
|
if (lowerUrl.indexOf('petyou2024') != -1 && webParam.cnylCode) { |
|
|
|
commonApi._get("uservice/user/loginByCnyl", { cnylCode: webParam.cnylCode }) |
|
|
|
.then(res => { |
|
|
|
@ -105,7 +95,6 @@ Page({ |
|
|
|
} |
|
|
|
}).finally(() => { this.setUrl(weburl) }) |
|
|
|
} |
|
|
|
// 2. 遇见昆山
|
|
|
|
else if (lowerUrl.indexOf('couponAndKs') != -1 && webParam.ksCode) { |
|
|
|
commonApi._get("uservice/user/loginBykunshan", { code: webParam.ksCode }) |
|
|
|
.then(res => { |
|
|
|
@ -115,9 +104,7 @@ Page({ |
|
|
|
} |
|
|
|
}).finally(() => { this.setUrl(weburl) }) |
|
|
|
} |
|
|
|
// 3. 君到苏州
|
|
|
|
else if (lowerUrl.indexOf('m.cloud.sz-trip.com') != -1) { |
|
|
|
|
|
|
|
delete webParam.token |
|
|
|
delete webParam.lon |
|
|
|
delete webParam.lat |
|
|
|
@ -139,13 +126,13 @@ Page({ |
|
|
|
|
|
|
|
this.handleLocationAndSetUrl(weburl, webParam, token); |
|
|
|
} |
|
|
|
// 4. 其他
|
|
|
|
else { |
|
|
|
this.setUrl(weburl) |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
handleLocationAndSetUrl(weburl, webParam, token) { |
|
|
|
// ... (你的原有逻辑保持不变) ...
|
|
|
|
let that = this; |
|
|
|
try { |
|
|
|
let lonAndLat = wx.getStorageSync('lonAndLat') |
|
|
|
@ -180,6 +167,7 @@ Page({ |
|
|
|
}, |
|
|
|
|
|
|
|
appendLocation(url, lon, lat, webParam, token) { |
|
|
|
// ... (你的原有逻辑保持不变) ...
|
|
|
|
if (Object.keys(webParam).length > 0 || token) { |
|
|
|
return url + `&lon=${lon}&lat=${lat}`; |
|
|
|
} else { |
|
|
|
@ -188,6 +176,7 @@ Page({ |
|
|
|
}, |
|
|
|
|
|
|
|
saveLoginInfo(data) { |
|
|
|
// ... (你的原有逻辑保持不变) ...
|
|
|
|
wx.setStorageSync("jstrip_userid", data.id) |
|
|
|
wx.setStorageSync("jstrip_token", data.token) |
|
|
|
wx.setStorageSync("jstrip_userInfo", data) |
|
|
|
@ -199,20 +188,49 @@ Page({ |
|
|
|
this.setData({ webUrl: url }) |
|
|
|
}, |
|
|
|
|
|
|
|
handleMessage(data) {}, |
|
|
|
// 1. 【修改】处理 H5 传来的消息
|
|
|
|
handleMessage(e) { |
|
|
|
console.log('接收到 H5 消息:', e.detail); |
|
|
|
if (e.detail && e.detail.data) { |
|
|
|
const dataArr = e.detail.data; |
|
|
|
// 取最后一条消息(通常是最新的状态)
|
|
|
|
const lastMsg = dataArr[dataArr.length - 1]; |
|
|
|
|
|
|
|
if (lastMsg.type === 'share') { |
|
|
|
this.setData({ |
|
|
|
shareTitle: lastMsg.title || this.data.shareTitle, |
|
|
|
currentShareUrl: lastMsg.url, |
|
|
|
currentShareImg: lastMsg.imgUrl || "" |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
loginByCode() {}, |
|
|
|
|
|
|
|
onShareAppMessage: function () { |
|
|
|
// 2. 【修改】分享给好友
|
|
|
|
onShareAppMessage: function (options) { |
|
|
|
// 优先使用 H5 传回来的 URL,其次使用 webViewUrl (微信自动捕获的),最后兜底使用初始 webUrl
|
|
|
|
let shareLink = this.data.currentShareUrl || options.webViewUrl || this.data.webUrl; |
|
|
|
|
|
|
|
console.log('分享好友 URL:', shareLink); |
|
|
|
|
|
|
|
return { |
|
|
|
title: this.data.shareTitle, |
|
|
|
path: `/pages/pbService/web/index?weburl=${encodeURIComponent(this.data.webUrl)}`, |
|
|
|
path: `/pages/pbService/web/index?weburl=${encodeURIComponent(shareLink)}`, |
|
|
|
imageUrl: this.data.currentShareImg || "" // 如果 H5 传了封面图就用,没有就默认截图
|
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
// 3. 【修改】分享到朋友圈
|
|
|
|
onShareTimeline: function () { |
|
|
|
let shareLink = this.data.currentShareUrl || this.data.webUrl; |
|
|
|
console.log('分享朋友圈 URL:', shareLink); |
|
|
|
|
|
|
|
return { |
|
|
|
title: this.data.shareTitle, |
|
|
|
path: `/pages/pbService/web/index?weburl=${encodeURIComponent(this.data.webUrl)}`, |
|
|
|
query: `weburl=${encodeURIComponent(shareLink)}`, |
|
|
|
imageUrl: this.data.currentShareImg || "" |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
|