import { fetchReceivedCouponCount, receiveCoupon, checkCouponAlert } from '@/services/api/coupon.js' const state = { expiredNum: 0, // 已过期 unusedNum: 0, // 未使用 usedNum: 0, // 已使用 couponAlertType: 0, // 优惠券弹窗类型 0: 不弹出 1: 全部用户 2: 新人用户 couponNoticeFlag: false // 新优惠券领取通知 } const mutations = { //设置优惠券数量 SET_COUPON_COUNT: (state, data) => { state.expiredNum = data.expiredNum state.unusedNum = data.unusedNum state.usedNum = data.usedNum }, // 设置优惠券弹窗类型 SET_COUPON_ALERT_TYPE: (state, data) => { typeof data === 'number' ? state.couponAlertType = data : state.couponAlertType++ }, // 设置新优惠券通知 SET_COUPON_NITICE_FLAG: (state, data) => { state.couponNoticeFlag = data } } const actions = { // 领取优惠券 async receiveCoupon({ rootGetters, dispatch }, { couponId, couponShareId }) { if (!rootGetters.userId) { const pages = getCurrentPages() const page = pages[pages.length - 1] uni.setStorageSync('LOGIN_REDIRECT_URL', page.$page.fullPath) uni.redirectTo({ url: '/pages/authorize/login-custom' }) return Promise.reject('用户未登录') } try { const res = await receiveCoupon({ couponId, couponShareId, userId: rootGetters.userId }) await dispatch('initCouponCount') setTimeout(() => { uni.showToast({ mask: true, icon: 'success', title: '领取成功' }) }, 200) return res } catch (e) { console.log('领取优惠券失败') return Promise.reject(e) } }, // 初始化已领取优惠券数量 async initCouponCount({ commit, rootGetters }) { try { const res = await fetchReceivedCouponCount({ userId: rootGetters.userId }) commit('SET_COUPON_COUNT', res.data) return res } catch (e) { console.log('初始化已领取优惠券数量失败') return Promise.reject(e) } }, // 优惠券弹窗验证 async checkCouponAlert({ commit, rootGetters }) { try { const result = await checkCouponAlert({ userId: rootGetters.userId }) const { newUserCouponFlag, actCouponFlag, otherCouponFlag } = result.data // 活动优惠券弹窗(全部用户) if (actCouponFlag !== 0) { commit('SET_COUPON_ALERT_TYPE') } // 新用户优惠券弹窗(新用户) if (newUserCouponFlag !== 0) { commit('SET_COUPON_ALERT_TYPE') } // 其它优惠券弹窗(可领取优惠券弹窗) if (otherCouponFlag !== 0) { commit('SET_COUPON_NITICE_FLAG', true) setTimeout(() => { commit('SET_COUPON_NITICE_FLAG', false) }, 5000) } } catch (e) { console.log('优惠券弹窗校验失败') return Promise.reject(e) } } } export default { namespaced: true, state, mutations, actions }