yitisheng-mini-app/pages/zyb/login.vue

498 lines
13 KiB
Vue

<!--登录页面-->
<script>
import ApiConstant from "@/common/ApiConstant";
import Request from '@/common/request'
import StaticConstant from "@/common/StaticConstant";
import commonTool from "../../common/js/commonTool";
import {stringIsNotEmpty} from "../../common/util";
let request = new Request()
export default {
name: "home",
components: {},
computed: {
StaticConstant() {
return StaticConstant
}
},
data() {
return {
systemName:'',
checkFlag: false,
showType: 1,
formData: {
userName: '',
password: '',
password2:''
},
isTick: true,
showFlag:false
}
},
onReady() {
},
onShow(){
// #ifdef MP-TOUTIAO
this.dyLogin()
// #endif
// #ifdef MP-WEIXIN
this.showFlag =true
// #endif
},
methods: {
//其他设备下线提示
otherSystemMessage(r){
if (r.result.loginState && r.result.loginState === 'more') {
uni.showToast({
title: '其他设备已下线,请稍等',
icon: 'none'
})
}
},
//刷新到首页
reloadHome(){
setTimeout(function () {
wx.reLaunch({
url: '/pages/zyb/home',
})
}, 500)
},
//抖音登录
dyLogin(){
//今日头条用户信息授权
let that = this
uni.login({
provider: 'toutiao',
success: function(loginRes) {
console.log(loginRes);
request.post(ApiConstant.User.dyLogin, {
code: loginRes.code,
anonymousCode: loginRes.anonymousCode,
}).then(r => {
console.log('请求登录', r)
if (r.success) {
console.log(r)
that.otherSystemMessage(r)
//token
uni.setStorageSync('token', r.result.token)
//用户信息
if (r.result.userInfo) {
uni.setStorageSync('userInfo', r.result.userInfo)
}
//vip信息
commonTool.checkVipInfo(r.result.vipInfo)
//重新打开首页
that.reloadHome()
} else {
uni.showToast({
title: r.message,
icon: 'none'
})
}
}).catch(err => {
}).finally(() => {
});
}
});
},
getPhoneNumber(e) {
console.log(e.detail.errMsg);
console.log(e.detail.iv);
console.log(e.detail.encryptedData);
if (!this.checkFlag) {
uni.showToast({
title: '请阅读后同意《'+this.systemName+'用户协议》',
icon: 'none'
})
return
}
var sessionKey = ''
if (e && e.detail && e.detail.code) {
//选择授权
uni.login({
success: (res) => {
console.log('获取code', res)
if (res.code) {
let code = res.code
request.post(ApiConstant.User.wxLogin, {
code: code,
encryptedData: e.detail.encryptedData,
iv: e.detail.iv
}).then(r => {
console.log('请求登录', r)
if (r.success) {
console.log(r)
this.otherSystemMessage(r)
//token
uni.setStorageSync('token', r.result.token)
//用户信息
if (r.result.userInfo) {
uni.setStorageSync('userInfo', r.result.userInfo)
}
//vip信息
commonTool.checkVipInfo(r.result.vipInfo)
//重新打开首页
this.reloadHome()
} else {
uni.showToast({
title: '微信授权登录失败',
icon: 'none'
})
}
}).catch(err => {
}).finally(() => {
});
} else {
uni.showModal({
title: '未获取到code'
})
}
}
});
} else {
uni.showToast({
title: '授权失败,请同意授权',
icon: 'none'
})
return
}
console.log(e)
},
//密码登录
pwdLogin() {
if (!stringIsNotEmpty(this.formData.userName)) {
uni.showToast({
title: '请输入用户名',
icon: 'none'
})
return
}
if (!stringIsNotEmpty(this.formData.password)) {
uni.showToast({
title: '请输入密码',
icon: 'none'
})
return
}
request.post(ApiConstant.User.login, {
username: this.formData.userName,
password: this.formData.password
}).then(r => {
if (r.success) {
console.log(r)
this.otherSystemMessage(r)
//token
uni.setStorageSync('token', r.result.token)
//用户信息
if (r.result.userInfo) {
uni.setStorageSync('userInfo', r.result.userInfo)
}
//vip信息
commonTool.checkVipInfo(r.result.vipInfo)
//重新打开首页
this.reloadHome()
} else {
uni.showToast({
title: r.message,
icon: 'none'
})
}
}).catch(err => {
}).finally(() => {
});
},
register(){
if (!stringIsNotEmpty(this.formData.userName)) {
uni.showToast({
title: '请输入手机号码',
icon: 'none'
})
return
}
let phoneNumberPattern = /^1[3-9]\d{9}$/;
let isValidPhoneNumber = phoneNumberPattern.test(this.formData.userName);
if (!isValidPhoneNumber) {
uni.showToast({
title: '手机号码格式不正确',
icon: 'none'
})
return
}
if (!stringIsNotEmpty(this.formData.password)) {
uni.showToast({
title: '请输入密码',
icon: 'none'
})
return
}
if (this.formData.password!==this.formData.password2) {
uni.showToast({
title: '两次密码不一致',
icon: 'none'
})
return
}
request.post(ApiConstant.User.register, {
username: this.formData.userName,
password: this.formData.password
}).then(r => {
if (r.success) {
console.log(r)
setTimeout(function () {
uni.showToast({
title: '注册成功',
icon: 'none'
})
}, 100)
//token
uni.setStorageSync('token', r.result.token)
//用户信息
if (r.result.userInfo) {
uni.setStorageSync('userInfo', r.result.userInfo)
}
//vip信息
commonTool.checkVipInfo(r.result.vipInfo)
//重新打开首页
this.reloadHome()
} else {
uni.showToast({
title: r.message,
icon: 'none'
})
}
}).catch(err => {
}).finally(() => {
});
},
//显示密码输入框
showPwdInput() {
},
gotoMianze() {
uni.navigateTo({
url: '/pages/zyb/other/disclaimer'
})
},
gotoXieyi() {
uni.navigateTo({
url: '/pages/zyb/other/userAgreement'
})
},
checkboxChange(r) {
console.log(r)
if (r.detail.value && r.detail.value.length > 0) {
this.checkFlag = true
} else {
this.checkFlag = false
}
}
},
onload() {
this.systemName = commonTool.getSystemName()
}
}
</script>
<template>
<view class="header" style="border-top:3rpx solid #f6f6f6"></view>
<view class="content" v-if="showFlag">
<view class="textcenter">
<view class="flex">
<view class="title">
{{ StaticConstant.systemName }}
</view>
</view>
</view>
<view class="textcenter">
<text class="low-title">
<!-- 全国<text style="font-size: 35rpx">600</text>+考生的选择-->
艺术生 更轻松的报志愿
</text>
</view>
<view style="margin-top: 200rpx" v-if="showType===1">
<button class='login-but' v-if="!checkFlag" @click="getPhoneNumber">
/*#ifdef MP-TOUTIAO*/
抖音一键登录
/*#endif*/
/*#ifdef MP-WEIXIN*/
手机号快捷登录
/*#endif*/
</button>
/*#ifdef MP-TOUTIAO*/
<button class='login-but' v-if="checkFlag" @click="dyLogin">
抖音一键登录
</button>
/*#endif*/
/*#ifdef MP-WEIXIN*/
<button class='login-but' v-if="checkFlag" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
手机号快捷登录
</button>
/*#endif*/
<button class='login-pwd-but margin-top-20' @click="showType=2">
账号密码登录
</button>
</view>
<view style="margin-top: 180rpx" class="uni-padding-wrap border-top" v-if="showType===2">
<view class="forms">
<view class="form-item">
<view class="form-item-view form-input">
<input class="uni-input" type="text"
v-model="formData.userName"
name="contactPersonPhone"
:placeholder="'请输入用户名或手机号'"/>
</view>
</view>
<view class="form-item">
<view class="form-item-view form-input">
<input class="uni-input" type="password" password="true"
v-model="formData.password"
name="password"
:placeholder="'请输入密码'"/>
</view>
</view>
<view class="form-item">
<button class='login-but margin-top-20' :disabled="!checkFlag" :class="checkFlag?'':'login-but-disabled'"
@click="pwdLogin">
登录
</button>
</view>
</view>
<view>
<text @click="showType=1" class="redOrange">快捷登录</text>
</view>
</view>
<!--注册-->
<view style="margin-top: 180rpx" class="uni-padding-wrap border-top" v-if="showType===3">
<view class="forms">
<view class="form-item">
<view class="form-item-view form-input">
<input class="uni-input" type="text"
v-model="formData.userName"
name="contactPersonPhone"
:placeholder="'请输入手机号'"/>
</view>
</view>
<view class="form-item">
<view class="form-item-view form-input">
<input class="uni-input" type="password" password="true"
v-model="formData.password"
name="password"
:placeholder="'请输入密码'"/>
</view>
</view>
<view class="form-item">
<view class="form-item-view form-input">
<input class="uni-input" type="password" password="true"
v-model="formData.password2"
name="password2"
:placeholder="'请再次输入密码'"/>
</view>
</view>
</view>
<view>
<text @click="showType=1" class="redOrange">快捷登录</text>
</view>
</view>
<view class="uni-flex flex" style="margin-top: 100rpx">
<checkbox-group @change="checkboxChange">
<label>
<checkbox value="cb"/>
登录代表{{ systemName }}
<text style="color: #4975fd" @click="gotoXieyi">{{systemName}}用户协议、</text>
<text style="color: #4975fd" @click="gotoMianze">免责声明</text>,并授权使用您的{{ systemName }}账号信息(如昵称、头像)以便您统一管理
</label>
</checkbox-group>
</view>
</view>
</template>
<style scoped lang="scss">
.content {
margin-top: 200rpx;
padding: 30rpx;
}
.container {
height: 100%;
}
.uni-form-item .title {
padding: 20rpx 0;
}
/*表单 start*/
.form-item {
display: flex;
align-items: center;
margin: 30rpx 0;
}
.form-item-label {
width: 20%;
}
.form-item-view {
width: 100%;
min-height: 80rpx;
}
.form-input {
border: 1rpx solid #e6e6e6;
}
.uni-input {
border: none;
}
.textcenter {
text-align: center;
margin: 30rpx 0;
}
/*标题*/
.title {
font-family: "Bookshelf Symbol 7";
margin: 0 auto;
//color:white;
font-size: 90rpx;
font-weight: 600;
}
/*小标题*/
.low-title {
font-size: 40rpx;
}
.login-pwd-but {
color: #222222;
width: 500rpx;
background: #eeeeee;
//background-color: ;
border-radius: 10rpx;
font-weight: 550;
}
///登录按钮
.login-but {
color: white;
width: 500rpx;
//background: linear-gradient(rgba(52, 145, 212, 0.83), #3658d0);
background: linear-gradient(#f96543, #f96543);
//background-color: ;
border-radius: 10rpx;
font-weight: 550;
}
.login-but-disabled {
background: #eeeeee;
}
</style>