diff --git a/core/app.js b/core/app.js index 6b3dd4c..1b4e2c5 100644 --- a/core/app.js +++ b/core/app.js @@ -118,19 +118,24 @@ export const navTo = (url, query = {}, modo = 'navigateTo') => { uni.switchTab({ url: `/${url}` }) return true } - // 生成query参数 - const queryStr = !util.isEmpty(query) ? '?' + util.urlEncode(query) : '' - // 普通页面, 使用navigateTo - modo === 'navigateTo' && uni.navigateTo({ - url: `/${url}${queryStr}` - }) - // 特殊指定, 使用redirectTo - modo === 'redirectTo' && uni.redirectTo({ - url: `/${url}${queryStr}` - }) + goPageByToken(url, query, modo, false) return true } +// 根据token跳转页面 +export const goPageByToken = (url, query, modo = 'navigateTo', needLogin = true) => { + if (needLogin && !checkLogin()) { + uni.navigateTo({ + url: "/pages/login/index" + }) + return false + } + const queryStr = !util.isEmpty(query) ? '?' + util.urlEncode(query) : '' + uni[modo]({ + url: `/${url}${queryStr}` + }) +} + /** * 获取当前页面数据 * @param {object} diff --git a/main.js b/main.js index 424ceda..5d843f5 100644 --- a/main.js +++ b/main.js @@ -4,7 +4,7 @@ import store from './store' import bootstrap from './core/bootstrap' import mixin from './core/mixins/app' import uView from './uni_modules/vk-uview-ui' -import { navTo, showToast, showSuccess, showError, getShareUrlParams, checkModuleKey, checkModules } from './core/app' +import { navTo, goPageByToken, showToast, showSuccess, showError, getShareUrlParams, checkModuleKey, checkModules } from './core/app' // 不能修改createApp方法名,不能修改从Vue中导入的createSSRApp export function createApp() { @@ -16,6 +16,7 @@ export function createApp() { app.config.globalProperties.$success = showSuccess app.config.globalProperties.$error = showError app.config.globalProperties.$navTo = navTo + app.config.globalProperties.$goPageByToken = goPageByToken app.config.globalProperties.$getShareUrlParams = getShareUrlParams app.config.globalProperties.$checkModule = checkModuleKey app.config.globalProperties.$checkModules = checkModules diff --git a/pages/address/index.vue b/pages/address/index.vue index bed2734..8a1d084 100644 --- a/pages/address/index.vue +++ b/pages/address/index.vue @@ -93,12 +93,12 @@ }, // 添加新地址 handleCreate() { - this.$navTo('pages/address/create') + this.$goPageByToken('pages/address/create') }, // 编辑地址 handleUpdate(item) { const data = encodeURIComponent(JSON.stringify(item)) - this.$navTo('pages/address/update', { data }) + this.$goPageByToken('pages/address/update', { data }) }, // 删除收货地址 handleRemove(addressId) { diff --git a/pages/cart/index.vue b/pages/cart/index.vue index e800af1..e0a7b9e 100644 --- a/pages/cart/index.vue +++ b/pages/cart/index.vue @@ -247,7 +247,7 @@ skuInfo: item.skuInfo })) storage.set('goods', arr) - app.$navTo('pages/checkout/index', { mode: 'cart' }) + app.$goPageByToken('pages/checkout/index', { mode: 'cart' }) } }, diff --git a/pages/checkout/cashier/index.vue b/pages/checkout/cashier/index.vue index 61a28a8..2cd99f7 100644 --- a/pages/checkout/cashier/index.vue +++ b/pages/checkout/cashier/index.vue @@ -302,7 +302,7 @@ if (lastPage && inArray(lastPage.route, backRoutes)) { uni.navigateBack() } else { - this.$navTo('pages/order/index', {}, 'redirectTo') + this.$goPageByToken('pages/order/index', {}, 'redirectTo') } }, 1200) }, diff --git a/pages/checkout/index.vue b/pages/checkout/index.vue index fb44c26..0e2f1ff 100644 --- a/pages/checkout/index.vue +++ b/pages/checkout/index.vue @@ -329,7 +329,7 @@ import storage from '@/utils/storage' methods: { // 快递配送:选择收货地址 onSelectAddress() { - this.$navTo('pages/address/index', { from: 'checkout' }) + this.$goPageByToken('pages/address/index', { from: 'checkout' }) }, // 跳转到商品详情页 @@ -359,10 +359,10 @@ import storage from '@/utils/storage' // 判断订单是否已支付: 已支付跳转订单列表 未支付跳转支付页 if (!res.data.package) { app.showToast(result.message, 1500) - setTimeout(() => app.$navTo('pages/order/index', {}, 'redirectTo'), 1500) + setTimeout(() => app.$goPageByToken('pages/order/index', {}, 'redirectTo'), 1500) } else { // 订单未支付: 跳转到订单支付页 - setTimeout(() => app.$navTo('pages/checkout/cashier/index', res.data, 'redirectTo'), 100) + setTimeout(() => app.$goPageByToken('pages/checkout/cashier/index', res.data, 'redirectTo'), 100) } }).finally(() => setTimeout(() => app.disabled = false, 1600)) }, diff --git a/pages/goods/components/SkuPopup.vue b/pages/goods/components/SkuPopup.vue index ee205a0..5d3252f 100644 --- a/pages/goods/components/SkuPopup.vue +++ b/pages/goods/components/SkuPopup.vue @@ -154,7 +154,7 @@ price: selectShop.price, buy_num: selectShop.buy_num }]) - this.$navTo('pages/checkout/index', { mode: 'buyNow' }) + this.$goPageByToken('pages/checkout/index', { mode: 'buyNow' }) // 隐藏当前弹窗 this.onChangeValue(false) } diff --git a/pages/index/index.vue b/pages/index/index.vue index b1ce31f..87306bc 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -44,13 +44,10 @@ export default { async getPageData(callback) { const app = this; app.setPageBar() - console.warn('----- my data is 22: ', 22) app.items = await this.handleGetHomeData().finally(() => callback && callback()); }, async handleGetHomeData() { - console.warn('----- my data is 33: ', 33) const res = await apiGetCommodityList({}); - console.warn('----- my data is res.data: ', res.data) return mockData.map(item => { if (item.type === 'goods') { item.data = res.data.rows diff --git a/pages/login/components/mp-weixin.vue b/pages/login/components/mp-weixin.vue index 540cdf9..a601680 100644 --- a/pages/login/components/mp-weixin.vue +++ b/pages/login/components/mp-weixin.vue @@ -97,7 +97,7 @@ store.dispatch('LoginMpWx', { code }) .then(result => { // 一键登录成功 - app.$toast(result.message) + app.$toast('登录成功') // 相应全局事件订阅: 刷新上级页面数据 uni.$emit('syncRefresh', true) // 跳转回原页面 diff --git a/pages/order/detail.vue b/pages/order/detail.vue index 1c32a7f..3e18cda 100644 --- a/pages/order/detail.vue +++ b/pages/order/detail.vue @@ -296,7 +296,7 @@ // 跳转到物流跟踪页面 handleTargetExpress(trackNumber) { - this.$navTo('pages/order/express/index', { trackNumber }) + this.$goPageByToken('pages/order/express/index', { trackNumber }) }, // 跳转到商品详情页面 @@ -306,7 +306,7 @@ // 跳转到申请售后页面 handleApplyRefund(orderGoodsId) { - this.$navTo('pages/refund/apply', { orderGoodsId }) + this.$goPageByToken('pages/refund/apply', { orderGoodsId }) }, // 取消订单 @@ -437,11 +437,11 @@ }, // 点击去支付 onPay(orderId) { - this.$navTo('pages/checkout/cashier/index', { orderId }) + this.$goPageByToken('pages/checkout/cashier/index', { orderId }) }, // 跳转到订单评价页 handleTargetComment(orderId) { - this.$navTo('pages/order/comment/index', { orderId }) + this.$goPageByToken('pages/order/comment/index', { orderId }) }, }, onClickBtn(orderId, action) { diff --git a/pages/order/index.vue b/pages/order/index.vue index 1f0aa4e..cb59321 100644 --- a/pages/order/index.vue +++ b/pages/order/index.vue @@ -330,17 +330,17 @@ }, // 点击去支付 onPay(orderId) { - this.$navTo('pages/checkout/cashier/index', { tradeOrderId: orderId }) + this.$goPageByToken('pages/checkout/cashier/index', { tradeOrderId: orderId }) }, // 跳转到订单详情页 handleTargetDetail(orderId) { - this.$navTo('pages/order/detail', { tradeOrderId: orderId }) + this.$goPageByToken('pages/order/detail', { tradeOrderId: orderId }) }, // 跳转到订单评价页 handleTargetComment(orderId) { - this.$navTo('pages/order/comment/index', { tradeOrderId: orderId }) + this.$goPageByToken('pages/order/comment/index', { tradeOrderId: orderId }) }, onReceipt(orderId, url) { const app = this diff --git a/pages/refund/index.vue b/pages/refund/index.vue index b467a27..16df2fa 100644 --- a/pages/refund/index.vue +++ b/pages/refund/index.vue @@ -163,7 +163,7 @@ // 跳转到售后单详情页 handleTargetDetail(orderRefundId) { - this.$navTo('pages/refund/detail', { orderRefundId }) + this.$goPageByToken('pages/refund/detail', { orderRefundId }) }, } diff --git a/pages/user/index.vue b/pages/user/index.vue index 82f1297..913b578 100644 --- a/pages/user/index.vue +++ b/pages/user/index.vue @@ -221,12 +221,12 @@ // 跳转到绑定手机号页面 handleBindMobile() { - this.$navTo('pages/user/bind/index') + this.$goPageByToken('pages/user/bind/index') }, // 跳转到修改个人信息页 /* handlePersonal() { - this.$navTo('pages/user/personal/index') + this.$goPageByToken('pages/user/personal/index') }, */ // 退出登录 @@ -257,23 +257,23 @@ }, // 跳转到钱包页面 onTargetWallet() { - this.$navTo('pages/wallet/index') + this.$goPageByToken('pages/wallet/index') }, // 跳转到订单页 onTargetOrder(item) { - this.$navTo('pages/order/index', { dataType: item.id }) + this.$goPageByToken('pages/order/index', { dataType: item.id }) }, // 跳转到我的积分页面 onTargetPoints() { - this.$navTo('pages/points/log') + this.$goPageByToken('pages/points/log') }, // 跳转到我的优惠券页 onTargetMyCoupon() { - this.$navTo('pages/my-coupon/index') + this.$goPageByToken('pages/my-coupon/index') }, // 跳转到服务页面 handleService({ url }) { - this.$navTo(url) + this.$goPageByToken(url) } }, /** diff --git a/pages/wallet/index.vue b/pages/wallet/index.vue index fd67841..ccdd0a4 100644 --- a/pages/wallet/index.vue +++ b/pages/wallet/index.vue @@ -90,17 +90,17 @@ // 跳转充值页面 onTargetRecharge() { - this.$navTo('pages/wallet/recharge/index') + this.$goPageByToken('pages/wallet/recharge/index') }, // 跳转充值记录页面 onTargetRechargeOrder() { - this.$navTo('pages/wallet/recharge/order') + this.$goPageByToken('pages/wallet/recharge/order') }, // 跳转账单详情页面 onTargetBalanceLog() { - this.$navTo('pages/wallet/balance/log') + this.$goPageByToken('pages/wallet/balance/log') } } diff --git a/pages/wallet/recharge/index.vue b/pages/wallet/recharge/index.vue index 8e7108b..f4e4e1a 100644 --- a/pages/wallet/recharge/index.vue +++ b/pages/wallet/recharge/index.vue @@ -320,7 +320,7 @@ setTimeout(() => uni.navigateBack(), 1000) } else { setTimeout(() => { - this.$navTo('pages/wallet/index', {}, 'redirectTo') + this.$goPageByToken('pages/wallet/index', {}, 'redirectTo') }, 1200) } }, diff --git a/store/modules/user.js b/store/modules/user.js index 2dac087..1cd64f7 100644 --- a/store/modules/user.js +++ b/store/modules/user.js @@ -1,4 +1,3 @@ -import { ACCESS_TOKEN, USER_ID, FLAG } from '@/store/mutation-types' import storage from '@/utils/storage' import * as LoginApi from '@/api/login' @@ -65,7 +64,7 @@ const user = { Logout({ commit }, data) { const store = this return new Promise((resolve, reject) => { - if (store.getters.userId > 0) { + if (store.getters.buyerId > 0) { storage.remove('user_info') commit('SET_USER_INFO', { token: '', flag: '', buyerId: '' }) resolve() diff --git a/store/mutation-types.js b/store/mutation-types.js index 28fc415..a269541 100644 --- a/store/mutation-types.js +++ b/store/mutation-types.js @@ -1,5 +1,4 @@ export const ACCESS_TOKEN = 'AccessToken' -export const USER_ID = 'userId' export const FLAG = 'flag' export const PLATFORM = 'platform' export const APP_THEME = 'appTheme' diff --git a/utils/request/axios.js b/utils/request/axios.js index 7581f09..bdc9262 100644 --- a/utils/request/axios.js +++ b/utils/request/axios.js @@ -23,6 +23,7 @@ export const HttpMethod = { class HttpRequest { static instance = null; + static loginModal = false; constructor() {} static getInstance() { if (!this.instance) { @@ -109,25 +110,30 @@ class HttpRequest { resolve(data); } } else if (code === 401) { - // 未授权 - !requestConfig.noShowMsg && - uni.showModal({ - title: "登录失效", - content: "登录失效,请重新登录", - success: (resModa) => { - if (resModa.confirm) { + // 防止重复弹窗 + if (!HttpRequest.loginModal) { + HttpRequest.loginModal = true + // 弹窗告诉用户去登录 + uni.showModal({ + title: '温馨提示', + content: '此时此刻需要您登录喔~', + // showCancel: false, + confirmText: "去登录", + cancelText: "再逛会", + success: res => { + if (res.confirm) { uni.removeStorageSync("user_info"); - uni.navigateTo({ url: "/pages/login/index" }); - } else if (resModa.cancel) { - try { - uni.removeStorageSync("user_info"); - uni.reLaunch({ url: "/pages/index/index" }); - } catch (e) { - console.log("登录失效catch:", e); + uni.navigateTo({ + url: "/pages/login/index" + }) } - } - }, - }); + if (res.cancel && getCurrentPages().length > 1) { + uni.navigateBack() + } + HttpRequest.loginModal = false + } + }) + } reject({ code, msg: "未登录", data: data }); } else { //非200及401状态码-数据处理