main
parent
c4d4c58bba
commit
037a86c086
@ -0,0 +1,557 @@ |
||||
<template> |
||||
<view class="wrapper" :style="colorStyle"> |
||||
<view class="page-form"> |
||||
<view style="margin:24rpx;border-radius:20rpx;overflow: hidden;"> |
||||
<view class="item"> |
||||
<view class="itemTitle"> |
||||
手机号码 |
||||
</view> |
||||
<input type='number' :placeholder='$t(`填写手机号码`)' placeholder-class='placeholder' v-model="phone" |
||||
:maxlength="11"></input> |
||||
</view> |
||||
<view class="item acea-row row-between-wrapper"> |
||||
<view class="itemTitle"> |
||||
短信验证码 |
||||
</view> |
||||
<input type='number' :placeholder='$t(`填写验证码`)' placeholder-class='placeholder' :maxlength="6" |
||||
class="codeIput" v-model="captcha"></input> |
||||
<view class="line"> |
||||
|
||||
</view> |
||||
<button class="code font-num" :class="disabled === true ? 'on' : ''" :disabled='disabled' @click="code"> |
||||
{{ text }} |
||||
</button> |
||||
</view> |
||||
</view> |
||||
<view class="newPsd" style="margin:24rpx;border-radius:20rpx;overflow: hidden;"> |
||||
<view class="item"> |
||||
<view class="itemTitle"> |
||||
新密码 |
||||
</view> |
||||
<input :placeholder='$t(`请输入`)' placeholder-class='placeholder' v-model="newPsd" |
||||
></input> |
||||
</view> |
||||
<view class="item"> |
||||
<view class="itemTitle"> |
||||
确认密码 |
||||
</view> |
||||
<input type='number' :placeholder='$t(`请输入`)' placeholder-class='placeholder' v-model="renewPsd" |
||||
></input> |
||||
</view> |
||||
</view> |
||||
<view class="btn" @click="submitData"> |
||||
确认 |
||||
</view> |
||||
</view> |
||||
<view class="protocol" v-if="pageType == 0 && !canGetPrivacySetting"> |
||||
<checkbox-group @click.stop='ChangeIsDefault'> |
||||
<checkbox :class="inAnimation?'trembling':''" @animationend='inAnimation=false' |
||||
:checked="protocol ? true : false" /> <text @click.stop='ChangeIsDefault'>{{$t(`已阅读并同意`)}}</text> |
||||
<text class="main-color" @click.stop="privacy(4)">{{$t(`《用户协议》`)}}</text> |
||||
{{$t(`与`)}}<text class="main-color" @click.stop="privacy(3)">{{$t(`《隐私协议》`)}}</text> |
||||
</checkbox-group> |
||||
</view> |
||||
<Verify @success="success" :captchaType="'clickWord'" :imgSize="{ width: '330px', height: '155px' }" |
||||
ref="verify"></Verify> |
||||
<editUserModal :isShow="isShow" @closeEdit="closeEdit" @editSuccess="editSuccess"> |
||||
</editUserModal> |
||||
<!-- #ifdef MP --> |
||||
<privacyAgreementPopup v-if="canGetPrivacySetting" @onReject="onReject" @onAgree="onAgree"> |
||||
</privacyAgreementPopup> |
||||
<!-- #endif --> |
||||
|
||||
</view> |
||||
</template> |
||||
|
||||
<script> |
||||
const app = getApp(); |
||||
let statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px'; |
||||
import sendVerifyCode from "@/mixins/SendVerifyCode"; |
||||
import colors from '@/mixins/color.js'; |
||||
import editUserModal from '@/components/eidtUserModal/index.vue' |
||||
import privacyAgreementPopup from '@/components/privacyAgreementPopup/index.vue' |
||||
import { |
||||
bindingUserPhone, |
||||
verifyCode, |
||||
registerVerify, |
||||
updatePhone |
||||
} from '@/api/api.js'; |
||||
import { |
||||
loginMobile, |
||||
getCodeApi, |
||||
getUserInfo, |
||||
phoneSilenceAuth |
||||
} from "@/api/user.js"; |
||||
import { |
||||
phoneLogin, |
||||
wechatBindingPhone |
||||
} from '@/api/public.js' |
||||
import Routine from '@/libs/routine'; |
||||
import Verify from '../components/verify/index.vue'; |
||||
import Cache from '@/utils/cache'; |
||||
export default { |
||||
mixins: [sendVerifyCode, colors], |
||||
components: { |
||||
Verify, |
||||
editUserModal, |
||||
privacyAgreementPopup |
||||
}, |
||||
data() { |
||||
return { |
||||
statusBarHeight: statusBarHeight, |
||||
pageType: 1, // 0 登录 1 绑定手机 |
||||
phone: '', |
||||
captcha: '', |
||||
text: '获取验证码', |
||||
isShow: false, |
||||
protocol: false, |
||||
inAnimation: false, |
||||
authKey: "", |
||||
backUrl: "", |
||||
pageTitle: '绑定手机号', |
||||
configData: Cache.get('BASIC_CONFIG'), |
||||
canGetPrivacySetting: false, |
||||
newPsd:null, |
||||
renewPsd:null, |
||||
} |
||||
}, |
||||
onLoad(options) { |
||||
if (options.authKey) { |
||||
this.authKey = options.authKey |
||||
} |
||||
// #ifdef MP |
||||
if (wx.getPrivacySetting) { |
||||
this.canGetPrivacySetting = true |
||||
} |
||||
// #endif |
||||
|
||||
this.backUrl = options.backUrl || '' |
||||
if (options.pageType) { |
||||
this.pageType = options.pageType || 1 |
||||
this.pageTitle = options.pageType == 1 ? '绑定手机号' : '手机号登录' |
||||
} |
||||
let pages = getCurrentPages(); |
||||
let prePage = pages[pages.length - 2]; |
||||
if (prePage && prePage.route == 'pages/order_addcart/order_addcart') { |
||||
this.isHome = true; |
||||
} else { |
||||
this.isHome = false; |
||||
} |
||||
}, |
||||
methods: { |
||||
onAgree() { |
||||
this.protocol = true |
||||
}, |
||||
submitData() { |
||||
let that = this; |
||||
if (this.pageType == 0) { |
||||
this.isLogin() |
||||
return |
||||
} |
||||
if (!this.rules()) return |
||||
if (!this.authKey) { |
||||
let key = this.$Cache.get('snsapiKey'); |
||||
this.phoneAuth(key) |
||||
} else { |
||||
this.phoneAuth(this.authKey) |
||||
} |
||||
}, |
||||
rules() { |
||||
let that = this; |
||||
if (!this.protocol && this.pageType == 0) { |
||||
uni.showToast({ |
||||
title: this.$t('请先阅读并同意协议'), |
||||
icon: 'none', |
||||
duration: 2000 |
||||
}); |
||||
return false |
||||
} |
||||
if (!that.phone) { |
||||
that.$util.Tips({ |
||||
title: that.$t(`请填写手机号码`) |
||||
}); |
||||
return false |
||||
} |
||||
if (!(/^1(3|4|5|7|8|9|6)\d{9}$/i.test(that.phone))) { |
||||
that.$util.Tips({ |
||||
title: that.$t(`请输入正确的手机号码`) |
||||
}); |
||||
return false |
||||
} |
||||
if (!that.captcha) { |
||||
return that.$util.Tips({ |
||||
title: that.$t(`请填写验证码`) |
||||
}); |
||||
return false |
||||
} |
||||
return true |
||||
}, |
||||
isLogin() { |
||||
if (!this.rules()) return |
||||
|
||||
uni.showLoading({ |
||||
title: this.$t(`正在登录中`) |
||||
}); |
||||
Routine.getCode() |
||||
.then(code => { |
||||
phoneLogin({ |
||||
code, |
||||
spread_spid: app.globalData.spid, |
||||
spread_code: app.globalData.code, |
||||
phone: this.phone, |
||||
captcha: this.captcha, |
||||
}).then(res => { |
||||
uni.hideLoading(); |
||||
let time = res.data.expires_time - this.$Cache.time(); |
||||
this.$store.commit('LOGIN', { |
||||
token: res.data.token, |
||||
time: time |
||||
}); |
||||
this.getUserInfo(res.data.bindName); |
||||
}) |
||||
.catch(err => { |
||||
uni.hideLoading(); |
||||
uni.showToast({ |
||||
title: err, |
||||
icon: 'none', |
||||
duration: 2000 |
||||
}); |
||||
}); |
||||
}) |
||||
.catch(err => { |
||||
console.log(err) |
||||
}); |
||||
}, |
||||
phoneAuth(key) { |
||||
uni.showLoading({ |
||||
title: this.$t(`正在登录中`) |
||||
}); |
||||
let met |
||||
// #ifdef MP |
||||
met = phoneLogin |
||||
// #endif |
||||
// #ifndef MP |
||||
met = wechatBindingPhone |
||||
// #endif |
||||
met({ |
||||
phone: this.phone, |
||||
captcha: this.captcha, |
||||
key |
||||
}).then(res => { |
||||
let time = res.data.expires_time - this.$Cache.time(); |
||||
this.$store.commit('LOGIN', { |
||||
token: res.data.token, |
||||
time: time |
||||
}); |
||||
this.getUserInfo(res.data.bindName); |
||||
}).catch(error => { |
||||
uni.hideLoading() |
||||
this.$util.Tips({ |
||||
title: error |
||||
}) |
||||
}) |
||||
}, |
||||
/** |
||||
* 获取个人用户信息 |
||||
*/ |
||||
getUserInfo(new_user) { |
||||
let that = this; |
||||
getUserInfo().then(res => { |
||||
uni.hideLoading(); |
||||
that.userInfo = res.data; |
||||
uni.setStorageSync('mark',res.data.renzheng.company_name) |
||||
that.$store.commit('SETUID', res.data.uid); |
||||
that.$store.commit('UPDATE_USERINFO', res.data); |
||||
if (new_user) { |
||||
this.isShow = true |
||||
} else { |
||||
// // #ifdef MP |
||||
// that.$util.Tips({ |
||||
// title: that.$t(`登录成功`), |
||||
// icon: 'success' |
||||
// }, { |
||||
// tab: 3, |
||||
// url: this.configData.wechat_auth_switch ? 2 : 1 |
||||
// }); |
||||
// // #endif |
||||
// // #ifndef MP |
||||
// that.$util.Tips({ |
||||
// title: that.$t(`登录成功`), |
||||
// icon: 'success' |
||||
// }, { |
||||
// url: this.backUrl || 'pages/user/index' |
||||
// }); |
||||
// // #endif |
||||
|
||||
if(res.data.renzheng.status==1){ |
||||
uni.showToast({ |
||||
title: '登录成功', |
||||
icon: 'none', |
||||
duration: 2000 |
||||
}); |
||||
uni.switchTab({ |
||||
url:"/pages/user/index", |
||||
}) |
||||
}else{ |
||||
uni.showToast({ |
||||
title: '登录成功', |
||||
icon: 'none', |
||||
duration: 2000 |
||||
}); |
||||
uni.redirectTo({ |
||||
url:"/pages/users/shiming/index" |
||||
}) |
||||
|
||||
} |
||||
|
||||
} |
||||
}); |
||||
}, |
||||
success(data) { |
||||
this.$refs.verify.hide() |
||||
let that = this; |
||||
verifyCode().then(res => { |
||||
registerVerify(that.phone, 'reset', res.data.key, this.captchaType, data.captchaVerification) |
||||
.then(res => { |
||||
that.$util.Tips({ |
||||
title: res.msg |
||||
}); |
||||
that.sendCode(); |
||||
}).catch(err => { |
||||
return that.$util.Tips({ |
||||
title: err |
||||
}); |
||||
}); |
||||
}); |
||||
}, |
||||
/** |
||||
* 发送验证码 |
||||
* |
||||
*/ |
||||
async code() { |
||||
let that = this; |
||||
if (!that.phone) return that.$util.Tips({ |
||||
title: that.$t(`请填写手机号码`) |
||||
}); |
||||
if (!(/^1(3|4|5|7|8|9|6)\d{9}$/i.test(that.phone))) return that.$util.Tips({ |
||||
title: that.$t(`请输入正确的手机号码`) |
||||
}); |
||||
this.$refs.verify.show(); |
||||
return; |
||||
}, |
||||
ChangeIsDefault() { |
||||
this.$set(this, 'protocol', !this.protocol); |
||||
}, |
||||
closeEdit() { |
||||
this.isShow = false |
||||
this.$util.Tips({ |
||||
title: this.$t(`登录成功`), |
||||
icon: 'success' |
||||
}, { |
||||
tab: 3, |
||||
url: 2 |
||||
}); |
||||
}, |
||||
editSuccess() { |
||||
this.isShow = false |
||||
}, |
||||
back() { |
||||
uni.navigateBack({ |
||||
delta: this.configData.wechat_auth_switch ? 2 : 1 |
||||
}) |
||||
}, |
||||
privacy(type) { |
||||
uni.navigateTo({ |
||||
url: "/pages/users/privacy/index?type=" + type |
||||
}) |
||||
}, |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
.wrapper { |
||||
background-color: #F5F6F7; |
||||
min-height: 100vh; |
||||
position: relative; |
||||
|
||||
.bag { |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
width: 750rpx; |
||||
height: 460rpx; |
||||
background: var(--view-linear); |
||||
} |
||||
|
||||
.page-msg { |
||||
padding-top: 160rpx; |
||||
margin-left: 72rpx; |
||||
|
||||
.title { |
||||
font-size: 48rpx; |
||||
font-weight: 500; |
||||
color: #333333; |
||||
line-height: 68rpx; |
||||
} |
||||
|
||||
.tip { |
||||
font-size: 28rpx; |
||||
font-weight: 400; |
||||
color: #333333; |
||||
line-height: 40rpx; |
||||
} |
||||
} |
||||
|
||||
.page-form { |
||||
|
||||
|
||||
.item { |
||||
// width: 100%; |
||||
/* height: 88rpx; */ |
||||
// background: #F5F5F5; |
||||
/* border-radius: 45rpx; */ |
||||
padding: 40rpx 30rpx; |
||||
// margin-bottom: 32rpx; |
||||
display: flex; |
||||
border-bottom: 1px solid #EAEAEA; |
||||
background-color: #fff; |
||||
.itemTitle{ |
||||
width:200rpx; |
||||
} |
||||
input { |
||||
flex:1; |
||||
height: 100%; |
||||
font-size: 32rpx; |
||||
} |
||||
|
||||
.placeholder { |
||||
color: #BBBBBB; |
||||
font-size: 28rpx; |
||||
} |
||||
|
||||
input.codeIput { |
||||
width: 300rpx; |
||||
} |
||||
|
||||
.line { |
||||
width: 2rpx; |
||||
height: 28rpx; |
||||
background: #CCCCCC; |
||||
} |
||||
|
||||
.code { |
||||
font-size: 28rpx; |
||||
color: var(--view-theme); |
||||
background-color: rgba(255, 255, 255, 0); |
||||
} |
||||
|
||||
.code.on { |
||||
color: #BBBBBB !important; |
||||
} |
||||
} |
||||
|
||||
.btn { |
||||
margin: 80rpx 24rpx; |
||||
height: 98rpx; |
||||
background: var(--view-theme); |
||||
border-radius: 200rpx 200rpx 200rpx 200rpx; |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
font-size: 32rpx; |
||||
font-family: PingFang SC-Regular, PingFang SC; |
||||
font-weight: 400; |
||||
color: #FFFFFF; |
||||
line-height: 44rpx; |
||||
|
||||
letter-spacing: 1px; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.title-bar { |
||||
position: relative; |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
font-size: 34rpx; |
||||
font-weight: 500; |
||||
color: #333333; |
||||
line-height: 48rpx; |
||||
} |
||||
|
||||
.icon { |
||||
position: absolute; |
||||
left: 30rpx; |
||||
top: 0; |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
width: 80rpx; |
||||
height: 80rpx; |
||||
|
||||
image { |
||||
width: 35rpx; |
||||
height: 35rpx; |
||||
} |
||||
} |
||||
|
||||
.protocol { |
||||
position: fixed; |
||||
bottom: 52rpx; |
||||
left: 0; |
||||
width: 100%; |
||||
margin: 0 auto; |
||||
color: #999999; |
||||
font-size: 24rpx; |
||||
line-height: 22rpx; |
||||
text-align: center; |
||||
bottom: calc(52rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/ |
||||
bottom: calc(52rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/ |
||||
|
||||
.main-color { |
||||
color: var(--view-theme); |
||||
} |
||||
|
||||
.trembling { |
||||
animation: shake 0.6s; |
||||
} |
||||
} |
||||
|
||||
/deep/ uni-checkbox .uni-checkbox-input { |
||||
width: 28rpx; |
||||
height: 28rpx; |
||||
} |
||||
|
||||
/deep/ uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked::before { |
||||
font-size: 24rpx; |
||||
} |
||||
|
||||
/deep/ uni-checkbox .uni-checkbox-wrapper { |
||||
margin-bottom: 1px; |
||||
} |
||||
|
||||
/*checkbox 选项框大小 */ |
||||
/deep/ checkbox .wx-checkbox-input { |
||||
width: 28rpx; |
||||
height: 28rpx; |
||||
} |
||||
|
||||
/*checkbox选中后样式 */ |
||||
/deep/ checkbox .wx-checkbox-input.wx-checkbox-input-checked { |
||||
background: white; |
||||
} |
||||
|
||||
/*checkbox选中后图标样式 */ |
||||
/deep/ checkbox .wx-checkbox-input.wx-checkbox-input-checked::before { |
||||
width: 28rpx; |
||||
height: 28rpx; |
||||
line-height: 28rpx; |
||||
text-align: center; |
||||
font-size: 22rpx; |
||||
background: transparent; |
||||
transform: translate(-50%, -50%) scale(1); |
||||
-webkit-transform: translate(-50%, -50%) scale(1); |
||||
} |
||||
</style> |
Loading…
Reference in new issue