317 lines
8.7 KiB
Vue
317 lines
8.7 KiB
Vue
<template>
|
|
<view class="pages-user-login " v-if="isLoad">
|
|
<uni-nav-bar :fixed="true" :shadow="false" :statusBar="true" :color="`#000`" backgroundColor="#fff" v-if="launchFlag">
|
|
<view class="flex-center" slot="left">
|
|
<view @tap="$util.goUrl({url:1,openType:`navigateBack`})"
|
|
:class="[{'back-user-ios': configInfo.isIos},{'back-user-android': !configInfo.isIos}]">
|
|
<view class="iconfont icon-home"></view>
|
|
<view class="back-user_text">返回上页</view>
|
|
</view>
|
|
</view>
|
|
</uni-nav-bar>
|
|
<view class="page-height flex-center flex-column" v-if="launchFlag">
|
|
<image mode="aspectFill" lazy-load class="logo-img mb-md" :src="base_info.app_logo"></image>
|
|
<view class="f-caption c-caption">{{base_info.app_text}}</view>
|
|
<view style="height: 200rpx;"></view>
|
|
<view @tap="toChooseLogin('weixin')" class="login-btn wechat flex-center f-title c-base radius"><i
|
|
class="iconfont icon-weixin mr-md"></i>微信登录
|
|
</view>
|
|
<view @tap="toChooseLogin('apple')" class="login-btn apple flex-center f-title c-black radius"
|
|
v-if="is_ios_login && base_info.ios_login"><i class="iconfont icon-apple mr-sm"></i>Sign in with Apple
|
|
</view>
|
|
</view>
|
|
<view class="banner-info" :style="{height:`${windowHeight}px`}" v-else>
|
|
<image mode="aspectFill" lazy-load class="banner-img fix" :src="base_info.app_banner[0]" />
|
|
<view @tap="launchApp" class="swiper-to-home flex-center f-caption c-base radius fix" v-if="time>0">
|
|
跳过 {{time}}s
|
|
</view>
|
|
</view>
|
|
<uni-popup ref="show_rule_item" type="center" :maskClick="false">
|
|
<view class="common-popup-content fill-base pd-lg radius-34">
|
|
<view class="title">温馨提示</view>
|
|
<view class="f-desc c-title mt-lg">
|
|
登录即表示您已详细阅读并同意<span @tap.stop="goDetail(1)" :style="{color:primaryColor}">
|
|
《用户隐私协议》
|
|
</span>与<span @tap.stop="goDetail(2)" :style="{color:primaryColor}">
|
|
《个人信息保护指引》
|
|
</span>
|
|
</view>
|
|
<view class="button">
|
|
<view @tap.stop="$refs.show_rule_item.close()" class="item-child">取消</view>
|
|
<view @tap.stop="wxLogin" class="item-child c-base"
|
|
:style="{background: primaryColor,color:'#fff'}">确定</view>
|
|
</view>
|
|
</view>
|
|
</uni-popup>
|
|
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
mapState,
|
|
mapActions,
|
|
mapMutations
|
|
} from 'vuex';
|
|
import siteInfo from '@/siteinfo.js';
|
|
export default {
|
|
components: {},
|
|
data() {
|
|
return {
|
|
isLoad: false,
|
|
base_info: {},
|
|
is_ios_login: false,
|
|
launchFlag: false,
|
|
windowHeight: uni.getSystemInfoSync().windowHeight,
|
|
time: 5,
|
|
timer: null
|
|
}
|
|
},
|
|
async onLoad(options) {
|
|
let {
|
|
type = 0
|
|
} = options
|
|
type = type * 1
|
|
console.log(options, "======login options")
|
|
this.launchFlag = type == 1
|
|
let [syserr, sysinfo] = await uni.getSystemInfo()
|
|
let {
|
|
browserVersion = '',
|
|
platform
|
|
} = sysinfo
|
|
console.log(sysinfo, type)
|
|
this.is_ios_login = platform === 'ios' && browserVersion.split('.')[0] * 1 > 12
|
|
this.base_info = await this.$api.base.getConfig()
|
|
this.isLoad = true
|
|
if (type == 1) return
|
|
let time = 5
|
|
this.timer = setInterval(() => {
|
|
if (time == 1) {
|
|
this.launchApp()
|
|
}
|
|
if (time === 0) {
|
|
clearTimeout(this.timer)
|
|
return
|
|
}
|
|
time--
|
|
this.time = time
|
|
console.log(time, "==========onload time")
|
|
}, 1000)
|
|
},
|
|
computed: mapState({
|
|
primaryColor: state => state.config.configInfo.primaryColor,
|
|
subColor: state => state.config.configInfo.subColor,
|
|
configInfo: state => state.config.configInfo,
|
|
autograph: state => state.user.autograph,
|
|
appLogin: state => state.user.appLogin,
|
|
loginType: state => state.user.loginType,
|
|
loginPage: state => state.user.loginPage,
|
|
push_id: state => state.user.push_id,
|
|
userInfo: state => state.user.userInfo,
|
|
}),
|
|
methods: {
|
|
...mapActions(['getConfigInfo', 'getUserInfo']),
|
|
...mapMutations(['updateConfigItem', 'updateUserItem']),
|
|
launchApp() {
|
|
this.timer && clearTimeout(this.timer)
|
|
console.log(this.time, this.timer, "==========launchApp")
|
|
this.$util.goUrl({
|
|
url: `/pages/home`,
|
|
openType: `reLaunch`
|
|
})
|
|
|
|
// let {
|
|
// autograph = '',
|
|
// appLogin = ''
|
|
// } = this
|
|
// if (autograph && appLogin) {
|
|
// this.toLogin(appLogin, 2)
|
|
// return
|
|
// }
|
|
// this.launchFlag = true
|
|
},
|
|
toChooseLogin(type) {
|
|
this.updateUserItem({
|
|
key: 'loginType',
|
|
val: type
|
|
})
|
|
this.$refs.show_rule_item.open()
|
|
},
|
|
//微信登录
|
|
async wxLogin() {
|
|
this.$refs.show_rule_item.close()
|
|
let {
|
|
loginType: provider
|
|
} = this
|
|
// if (provider == 'apple') {
|
|
// this.toLogin({
|
|
// "openId": "000676.61e8347753f6453f93d32423c23262d0.0350",
|
|
// "fullName": {
|
|
// "familyName": "肖",
|
|
// "giveName": "丽",
|
|
// "givenName": "丽"
|
|
// },
|
|
// "email": "1148960431@qq.com",
|
|
// "authorizationCode": "cbfab854d7cae49a689b69bf4c628a890.0.swxw.O_BwdO3dG60HUKbn9IG80w",
|
|
// "identityToken": "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnN1b2hhZmFybS5zYyIsImV4cCI6MTY2MzczMjIzMiwiaWF0IjoxNjYzNjQ1ODMyLCJzdWIiOiIwMDA2NzYuNjFlODM0Nzc1M2Y2NDUzZjkzZDMyNDIzYzIzMjYyZDAuMDM1MCIsImNfaGFzaCI6Ik80MDdrMGdmRUZXeGZSdlhnXzRUa1EiLCJlbWFpbCI6IjExNDg5NjA0MzFAcXEuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiYXV0aF90aW1lIjoxNjYzNjQ1ODMyLCJub25jZV9zdXBwb3J0ZWQiOnRydWUsInJlYWxfdXNlcl9zdGF0dXMiOjF9.Q9Vjsvnk_cQH1Dt_N7wvunP_nq2KwKt_bqj0onKQMCwaM8SinkGavUG0bs-HdaEqQ368n8iZR_VwiLM2mPyOBhgNOT87WB0tTWxi66r3hGIOUhOG4aapPr1XZ81O4NySjRCwAhbnUsxY7xPBW1y6ghgwIgEGlSICRj4XE7gJOwoZFNI_FVOqCeGao4xHbub9-gJuQYuuwlTY7oPnyU1BBZqk3HBHG6fchrF0bnev-PjjjClKqz1FoNnbiZr6-H_CrvgKo2ZIlzxGIpCuABT4UkMuwjMEac-mNd-akFFovSoeWyXB2oLlZd33GsOhZVTiXWrb5CAJ6SUWSBWdYLkpbQ",
|
|
// "realUserStatus": 1,
|
|
// "push_id": ""
|
|
// }, 1)
|
|
// return
|
|
// }
|
|
try {
|
|
let [providerErr, providerData] = await uni.getProvider({
|
|
service: 'oauth',
|
|
});
|
|
let [loginErr, loginData] = await uni.login({
|
|
provider
|
|
});
|
|
let [infoErr, infoData] = await uni.getUserInfo({
|
|
provider
|
|
})
|
|
let {
|
|
userInfo = {}
|
|
} = infoData
|
|
let {
|
|
openId = ''
|
|
} = userInfo
|
|
if (!openId) return
|
|
this.$util.showLoading({
|
|
title: "登录中..."
|
|
})
|
|
userInfo.push_id = this.push_id
|
|
try {
|
|
console.log(userInfo, "=======userInfo")
|
|
this.toLogin(userInfo, 1)
|
|
} catch (e) {
|
|
this.$util.hideAll()
|
|
}
|
|
} catch (e) {
|
|
console.log('请先安装微信或升级版本')
|
|
this.$util.showToast({
|
|
title: `没有获取到用户信息,请确认已登录`
|
|
});
|
|
}
|
|
},
|
|
async toLogin(userInfo, init) {
|
|
let {
|
|
loginType
|
|
} = this
|
|
|
|
let methodModel = loginType == 'weixin' ? 'logappLoginin' : 'iosLogin'
|
|
let user_info = await this.$api.base[methodModel]({
|
|
data: userInfo
|
|
})
|
|
console.log(loginType, user_info, "========user_info")
|
|
if (init == 1) {
|
|
this.updateUserItem({
|
|
key: 'appLogin',
|
|
val: userInfo
|
|
})
|
|
}
|
|
let {
|
|
autograph,
|
|
data
|
|
} = user_info
|
|
this.$util.hideAll()
|
|
this.updateUserItem({
|
|
key: 'userInfo',
|
|
val: data
|
|
})
|
|
this.updateUserItem({
|
|
key: 'autograph',
|
|
val: autograph
|
|
})
|
|
this.updateUserItem({
|
|
key: 'isShowLogin',
|
|
val: false
|
|
})
|
|
let {
|
|
phone = ''
|
|
} = data
|
|
let url = loginType == 'weixin' && !phone ? `/mine/pages/phone` : this.loginPage || `/pages/home`
|
|
let openType = loginType == 'weixin' && !phone ? `reLaunch` : `switchTab`
|
|
console.log(url, openType, "====url")
|
|
this.$util.goUrl({
|
|
url,
|
|
openType
|
|
})
|
|
},
|
|
goDetail(type) {
|
|
let {
|
|
siteroot
|
|
} = siteInfo
|
|
let href = siteroot.split('index.php')[0]
|
|
let page = type == 1 ? 'protocol' : 'information'
|
|
let url = `${href}${page}.html`
|
|
this.$util.goUrl({
|
|
url,
|
|
openType: 'web'
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
page {
|
|
background: #fff;
|
|
height: 100%;
|
|
}
|
|
|
|
.pages-user-login {
|
|
|
|
.page-height {
|
|
height: 100vh;
|
|
}
|
|
|
|
.logo-img {
|
|
width: 160rpx;
|
|
height: 160rpx;
|
|
}
|
|
|
|
|
|
|
|
.login-btn {
|
|
width: 220pt;
|
|
height: 44pt;
|
|
font-size: 15pt;
|
|
border: 1rpx solid #000;
|
|
transform: rotateZ(360deg);
|
|
|
|
.iconfont {
|
|
font-size: 19pt;
|
|
}
|
|
}
|
|
|
|
.wechat {
|
|
border: none;
|
|
font-size: 13pt;
|
|
background: linear-gradient(90deg, #177541 0%, #00BF56 99%);
|
|
box-shadow: 0 18rpx 9rpx 0 rgba(0, 188, 82, 0.07);
|
|
}
|
|
|
|
.apple {
|
|
margin-top: 40rpx;
|
|
}
|
|
|
|
.banner-info {
|
|
width: 100%;
|
|
|
|
.banner-img {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
.swiper-to-home {
|
|
width: 122rpx;
|
|
height: 47rpx;
|
|
z-index: 999;
|
|
right: 40rpx;
|
|
top: 80rpx;
|
|
background: rgba(0, 0, 0, 0.3);
|
|
}
|
|
}
|
|
}
|
|
</style>
|