diff --git a/common/auth.js b/common/auth.js new file mode 100644 index 0000000..a2bbe48 --- /dev/null +++ b/common/auth.js @@ -0,0 +1,37 @@ +/** + * 未登录时不强制跳转,仅在用户主动操作(下单、加购等)时提示登录 + */ +export function getToken(vm) { + return vm?.vuex_token || uni.getStorageSync('lifeData')?.vuex_token || '' +} + +/** + * @returns {Promise} 用户确认去登录为 true + */ +export function promptLogin(vm, options = {}) { + const { + title = '提示', + content = '登录后可继续操作,是否前往登录?', + confirmText = '去登录', + } = options + return new Promise((resolve) => { + uni.showModal({ + title, + content, + confirmText, + cancelText: '暂不登录', + success: (res) => { + if (res.confirm) { + vm.$u.route({ + url: '/pages/login/login', + type: 'navigateTo', + }) + resolve(true) + } else { + resolve(false) + } + }, + fail: () => resolve(false), + }) + }) +} diff --git a/common/http.interceptor.js b/common/http.interceptor.js index e8d3004..a5cf69a 100644 --- a/common/http.interceptor.js +++ b/common/http.interceptor.js @@ -33,18 +33,22 @@ const install = (Vue, vm) => { if (res.statusCode === 200) { if (res.data.hasOwnProperty("errcode")) { if (res.data.errcode === 40001) { - Vue.prototype.$u.debounce(() => { - uni.showToast({ - icon: "none", - title: "登陆过期,请重新登录" - }) - setTimeout(() => { - uni.redirectTo({ - url: '/pages/login/login' + const token = vm.vuex_token || uni.getStorageSync('lifeData')?.vuex_token; + // 仅已登录用户 token 失效时引导重新登录;未登录浏览不强制跳转 + if (token) { + Vue.prototype.$u.debounce(() => { + uni.showToast({ + icon: "none", + title: "登陆过期,请重新登录" }) - }, 1500) - }) - + setTimeout(() => { + uni.navigateTo({ + url: '/pages/login/login' + }) + }, 1500) + }) + } + return false } else { uni.showToast({ icon: "none", diff --git a/package_sub/pages/ServiceDetail/ServiceDetail.vue b/package_sub/pages/ServiceDetail/ServiceDetail.vue index 91ab6f3..cacce60 100644 --- a/package_sub/pages/ServiceDetail/ServiceDetail.vue +++ b/package_sub/pages/ServiceDetail/ServiceDetail.vue @@ -95,11 +95,12 @@