Browse Source

优化h5微信授权逻辑;修改CountDown组件报错的问题

master
Gaoxs 5 years ago
parent
commit
59055982ab
  1. 81
      components/CountDown.vue
  2. 7
      libs/wechat.js
  3. 77
      main.js
  4. 21
      utils/index.js

81
components/CountDown.vue

@ -1,65 +1,67 @@
<template> <template>
<view class="time"> <view class="time">
<text v-if="rtipText">{{ rtipText }}</text> {{ tipText }}
<text class="styleAll" v-if="risDay === true">{{ rday }}</text> <text class="styleAll" v-if="isDay === true">{{ day }}</text>
<text class="timeTxt" v-if="rdayText">{{ rdayText }}</text> <text class="timeTxt">{{ dayText }}</text>
<text class="styleAll">{{ hour }}</text> <text class="styleAll">{{ hour }}</text>
<text class="timeTxt" v-if="rhourText">{{ rhourText }}</text> <text class="timeTxt">{{ hourText }}</text>
<text class="styleAll">{{ minute }}</text> <text class="styleAll">{{ minute }}</text>
<text class="timeTxt" v-if="rminuteText">{{ rminuteText }}</text> <text class="timeTxt">{{ minuteText }}</text>
<text class="styleAll">{{ second }}</text> <text class="styleAll">{{ second }}</text>
<text class="timeTxt" v-if="rsecondText">{{ rsecondText }}</text> <text class="timeTxt">{{ secondText }}</text>
</view> </view>
</template> </template>
<script> <script>
export default { export default {
name: "CountDown", name: "CountDown",
props: [ props: {
// //
'tipText', tipText: {
'dayText', type: String,
'hourText', default: "倒计时"
'minuteText', },
'secondText', dayText: {
'datatime', type: String,
'isDay' default: "天"
], },
hourText: {
type: String,
default: "时"
},
minuteText: {
type: String,
default: "分"
},
secondText: {
type: String,
default: "秒"
},
datatime: {
type: Number,
default: 0
},
isDay: {
type: Boolean,
default: true
}
},
data: function () { data: function () {
return { return {
day: "00", day: "00",
hour: "00", hour: "00",
minute: "00", minute: "00",
second: "00", second: "00"
rtipText: "倒计时",
rdayText: "天",
rhourText: "时",
rminuteText: "分",
rsecondText: "秒",
rdatatime: 0,
risDay: true
}; };
}, },
created: function () { created: function () {
// this.show_time();
},
mounted: function() {
this.rtipText = this.$props.tipText;
this.rdayText = this.$props.dayText;
this.rhourText = this.$props.hourText;
this.rminuteText = this.$props.minuteText;
this.rsecondText = this.$props.secondText;
this.rdatatime = this.$props.datatime;
this.risDay = this.$props.isDay;
this.show_time(); this.show_time();
}, },
mounted: function () {},
methods: { methods: {
show_time: function () { show_time: function () {
let that = this; let that = this;
this.runTime();
setInterval(this.runTime, 1000); function runTime() {
},
runTime() {
let that = this;
// //
let intDiff = that.datatime - Date.parse(new Date()) / 1000; // let intDiff = that.datatime - Date.parse(new Date()) / 1000; //
let day = 0, let day = 0,
@ -94,6 +96,9 @@ export default {
that.second = "00"; that.second = "00";
} }
} }
runTime();
setInterval(runTime, 1000);
}
} }
}; };
</script> </script>

7
libs/wechat.js

@ -88,7 +88,7 @@ let wechatObj;
let appId let appId
let wechatLoading = false let wechatLoading = false
export async function wechat() { export function wechat() {
console.log('初始化微信配置') console.log('初始化微信配置')
wechatLoading = false wechatLoading = false
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -148,7 +148,7 @@ export async function oAuth() {
}) })
} }
export function auth(code) { export async function auth(code) {
console.log('获取微信授权') console.log('获取微信授权')
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let loginType = cookie.get(LOGINTYPE); let loginType = cookie.get(LOGINTYPE);
@ -170,7 +170,7 @@ export function auth(code) {
}) })
} }
export function toAuth() { export async function toAuth() {
if (wechatLoading) { if (wechatLoading) {
return return
} }
@ -187,7 +187,6 @@ function getAuthUrl(appId) {
// #ifdef H5 // #ifdef H5
// #endif // #endif
debugger
cookie.set('redirect', window.location.href) cookie.set('redirect', window.location.href)
const redirect_uri = encodeURIComponent(`${location.origin}/pages/Loading/index`); const redirect_uri = encodeURIComponent(`${location.origin}/pages/Loading/index`);
// const redirect_uri = encodeURIComponent(`${location.origin}/pages/Loading/index?path=${encodeURIComponent(window.location.href)}`); // const redirect_uri = encodeURIComponent(`${location.origin}/pages/Loading/index?path=${encodeURIComponent(window.location.href)}`);

77
main.js

@ -82,6 +82,29 @@ Object.defineProperty(Vue.prototype, '$yroute', {
Vue.prototype.$VUE_APP_RESOURCES_URL = VUE_APP_RESOURCES_URL Vue.prototype.$VUE_APP_RESOURCES_URL = VUE_APP_RESOURCES_URL
Vue.prototype.$VUE_APP_API_URL = VUE_APP_API_URL Vue.prototype.$VUE_APP_API_URL = VUE_APP_API_URL
Vue.component('cu-custom', cuCustom); Vue.component('cu-custom', cuCustom);
// #ifdef APP-PLUS
// App平台编译的代码
Vue.prototype.$deviceType = 'app'
store.commit('updateDevicetype', 'app')
Vue.prototype.$platform = uni.getSystemInfoSync().platform
// #endif
// #ifdef MP-WEIXIN
// 微信小程序编译的代码
Vue.prototype.$deviceType = 'routine'
store.commit('updateDevicetype', 'routine')
// #endif
// !!! ps 不建议在 template 中使用 $deviceType 去判断当前环境,很有可能出现 $deviceType 为 undefined 导致判断出错的问题,可以在 script 模块中正常使用
// 建议通过 store 去获取 $deviceType 可以保证 template 中取到的值有效
// import { mapState, mapMutations, mapActions } from 'vuex';
// computed: {
// ...mapState(['$deviceType'])
// },
// #ifdef H5 // #ifdef H5
// H5编译的代码 // H5编译的代码
@ -102,8 +125,6 @@ import {
} from '@/libs/wechat' } from '@/libs/wechat'
import { isWeixin } from '@/utils' import { isWeixin } from '@/utils'
const CACHE_KEY = "clear_0.0.1"; const CACHE_KEY = "clear_0.0.1";
if (!cookie.has(CACHE_KEY)) { if (!cookie.has(CACHE_KEY)) {
@ -122,56 +143,36 @@ if (urlSpread !== undefined) {
cookie.set("spread", urlSpread || 0); cookie.set("spread", urlSpread || 0);
} }
} }
// #endif
Vue.prototype.wechat = wechat async function init() {
Vue.prototype.clearAuthStatus = clearAuthStatus
Vue.prototype.oAuth = oAuth
Vue.prototype.auth = auth
Vue.prototype.toAuth = toAuth
Vue.prototype.pay = pay
Vue.prototype.openAddress = openAddress
Vue.prototype.openShareAll = openShareAll
Vue.prototype.openShareAppMessage = openShareAppMessage
Vue.prototype.openShareTimeline = openShareTimeline
Vue.prototype.wechatEvevt = wechatEvevt
Vue.prototype.ready = ready
Vue.prototype.wxShowLocation = wxShowLocation
// #ifdef H5
// H5编译的代码
// 判断是否是微信浏览器 // 判断是否是微信浏览器
if (isWeixin()) { if (isWeixin()) {
Vue.prototype.$deviceType = 'weixin' Vue.prototype.$deviceType = 'weixin'
store.commit('updateDevicetype', 'weixin') store.commit('updateDevicetype', 'weixin')
let wechat = await wechat() let wechatInit = await wechat()
if (wechat) { console.log(wechatInit)
if (wechatInit) {
await oAuth() await oAuth()
app.$mount()
} }
} else { } else {
Vue.prototype.$deviceType = 'weixinh5' Vue.prototype.$deviceType = 'weixinh5'
store.commit('updateDevicetype', 'weixinh5') store.commit('updateDevicetype', 'weixinh5')
} app.$mount()
// #endif
// #ifdef APP-PLUS }
// App平台编译的代码
Vue.prototype.$deviceType = 'app'
store.commit('updateDevicetype', 'app')
Vue.prototype.$platform = uni.getSystemInfoSync().platform
// #endif // #endif
// #ifdef MP-WEIXIN // #ifndef H5
// 微信小程序编译的代码 app.$mount()
Vue.prototype.$deviceType = 'routine'
store.commit('updateDevicetype', 'routine')
// #endif // #endif
// !!! ps 不建议在 template 中使用 $deviceType 去判断当前环境,很有可能出现 $deviceType 为 undefined 导致判断出错的问题,可以在 script 模块中正常使用 }
// 建议通过 store 去获取 $deviceType 可以保证 template 中取到的值有效
// import { mapState, mapMutations, mapActions } from 'vuex';
// computed: {
// ...mapState(['$deviceType'])
// },
app.$mount() init()

21
utils/index.js

@ -204,25 +204,25 @@ export const authorize = (authorizeStr) => {
} }
export const login = () => { export const login = () => {
debugger;
console.log(Vue.prototype)
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (Vue.prototype.$deviceType == 'weixin') { if (Vue.prototype.$deviceType == 'weixin') {
// 微信授权登录 // 微信授权登录
const { code } = parseQuery() const { code } = parseQuery()
debugger;
if (code) { if (code) {
auth(code) auth(code)
.then(() => { .then(() => {
// location.replace(
// decodeURIComponent(decodeURIComponent(this.$route.params.url))
// );
let redirect = cookie.get('redirect') let redirect = cookie.get('redirect')
console.log(redirect) console.log(redirect)
debugger; if (redirect) {
location.href = decodeURIComponent( redirect = redirect.split('/pages')[1]
decodeURIComponent(this.$route.params.url) reLaunch({
); path: '/pages' + redirect,
});
} else {
reLaunch({
path: '/pages/home/index',
});
}
}) })
.catch(() => { .catch(() => {
reject('当前运行环境为微信浏览器') reject('当前运行环境为微信浏览器')
@ -866,7 +866,6 @@ export const handleLoginFailure = () => {
store.commit("updateAuthorization", false); store.commit("updateAuthorization", false);
let currentPageUrl = getCurrentPageUrl() let currentPageUrl = getCurrentPageUrl()
debugger
if (store.state.$deviceType == 'weixin') { if (store.state.$deviceType == 'weixin') {
// 如果不是授权页面, // 如果不是授权页面,
if (!store.getters.isAuthorizationPage) { if (!store.getters.isAuthorizationPage) {

Loading…
Cancel
Save