152 lines
4.2 KiB
Vue
152 lines
4.2 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="main bg-w">
|
|||
|
|
<view :style="{'height': statusBarHeight + 'px'}"></view>
|
|||
|
|
<text class="iconfont color-b3 nav" @tap="$navigateBack()"></text>
|
|||
|
|
<text class="title">支付密码</text>
|
|||
|
|
<view class="form">
|
|||
|
|
<view class="form-item flex flex-align-end">
|
|||
|
|
<input type="number" :disabled="true" :maxlength="11" placeholder="手机号" placeholder-class="placeholder" v-model="form.mobile" />
|
|||
|
|
</view>
|
|||
|
|
<view class="form-item flex flex-align-end">
|
|||
|
|
<input type="number" :maxlength="6" placeholder="验证码" placeholder-class="placeholder" v-model="form.code" />
|
|||
|
|
<sms :phone="form.mobile" :username="form.username" typeCode="4"></sms>
|
|||
|
|
</view>
|
|||
|
|
<view class="form-item flex flex-align-end">
|
|||
|
|
<input :password="!showPassword" :maxlength="6" type="number" placeholder="支付密码(长度为6位数字)" placeholder-class="placeholder" class="flex-grow" v-model="password" />
|
|||
|
|
<text class="iconfont font40 eye" @tap="showPassword = !showPassword" v-if="showPassword"></text>
|
|||
|
|
<text class="iconfont font40 eye" @tap="showPassword = !showPassword" v-else></text>
|
|||
|
|
</view>
|
|||
|
|
<view class="form-item flex flex-align-end">
|
|||
|
|
<input :password="!confirmPwd" :maxlength="6" type="number" placeholder="确认密码(长度为6位数字)" placeholder-class="placeholder" class="flex-grow" v-model="confimpassword" />
|
|||
|
|
<text class="iconfont font40 eye" @tap="confirmPwd = !confirmPwd" v-if="confirmPwd"></text>
|
|||
|
|
<text class="iconfont font40 eye" @tap="confirmPwd = !confirmPwd" v-else></text>
|
|||
|
|
</view>
|
|||
|
|
<view class="btn flex flex-center flex-column">
|
|||
|
|
<button type="primary" class="bg-base btn-item" :loading="loading" :disabled="loading" @tap="onSave">确认</button>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import sms from "@/components/sms.vue"
|
|||
|
|
import url from "@/common/http/url.js"
|
|||
|
|
import publics from "@/common/utils/public.js"
|
|||
|
|
import { mapState } from "vuex"
|
|||
|
|
export default{
|
|||
|
|
components: { sms },
|
|||
|
|
data(){
|
|||
|
|
return {
|
|||
|
|
statusBarHeight: getApp().statusBarHeight,
|
|||
|
|
loading: false,
|
|||
|
|
rsaKey: "",
|
|||
|
|
confimpassword: "",
|
|||
|
|
password: "",
|
|||
|
|
form: {},
|
|||
|
|
showPassword: false,
|
|||
|
|
confirmPwd: false
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
computed: {
|
|||
|
|
...mapState(["userInfo"])
|
|||
|
|
},
|
|||
|
|
async onLoad() {
|
|||
|
|
let res = await this.$http("GET", url.login.getPublicKey)
|
|||
|
|
this.rsaKey = res.data
|
|||
|
|
if (this.userInfo.mobile) {
|
|||
|
|
this.$set(this.form, 'mobile', this.userInfo.mobile)
|
|||
|
|
this.form.username = this.userInfo.username
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
async onSave(){
|
|||
|
|
if (!this.form.mobile) return this.$msg("请输入手机号")
|
|||
|
|
if (!this.form.code) return this.$msg("请输入短信验证码")
|
|||
|
|
if (!this.password) return this.$msg("请输入密码")
|
|||
|
|
if (this.confimpassword !== this.password) return this.$msg("两次密码不一致")
|
|||
|
|
this.loading = true
|
|||
|
|
this.form.payPassword = await this.passwordEncryption(this.rsaKey, this.password)
|
|||
|
|
this.$http("POST", url.login.payPasswordByCode, this.form).then(res => {
|
|||
|
|
if (res.code === 200) {
|
|||
|
|
this.$msg(res.data)
|
|||
|
|
this.$navigateBack()
|
|||
|
|
}
|
|||
|
|
}).catch(()=>{
|
|||
|
|
this.loading = false
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
passwordEncryption(rsaKey, password){
|
|||
|
|
return publics.passwordEncryption(rsaKey, password)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.main{
|
|||
|
|
min-height: 100vh;
|
|||
|
|
.nav{
|
|||
|
|
font-size: 50rpx;
|
|||
|
|
padding-top: 30rpx;
|
|||
|
|
display: block;
|
|||
|
|
padding-left: 30rpx;
|
|||
|
|
}
|
|||
|
|
.title{
|
|||
|
|
margin: 80rpx 50rpx;
|
|||
|
|
display: block;
|
|||
|
|
font-size: 54rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.form{
|
|||
|
|
margin: 0 50rpx;
|
|||
|
|
&-item{
|
|||
|
|
border-bottom: 2rpx solid #eee;
|
|||
|
|
height: 100rpx;
|
|||
|
|
justify-content: space-between;
|
|||
|
|
padding-bottom: 20rpx;
|
|||
|
|
.eye{
|
|||
|
|
color: #d4d5d8;
|
|||
|
|
}
|
|||
|
|
.placeholder{
|
|||
|
|
color: #999;
|
|||
|
|
font-size: 30rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.btn{
|
|||
|
|
margin-top: 80rpx;
|
|||
|
|
&-item{
|
|||
|
|
width: 80%;
|
|||
|
|
border-radius: 50rpx;
|
|||
|
|
margin-bottom: 50rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.btn::after{ border: none;}
|
|||
|
|
}
|
|||
|
|
.forget{
|
|||
|
|
margin-top: 20rpx;
|
|||
|
|
}
|
|||
|
|
.other{
|
|||
|
|
width: 100%;
|
|||
|
|
margin-top: 80rpx;
|
|||
|
|
.xian{
|
|||
|
|
color: #e1e3e6;
|
|||
|
|
}
|
|||
|
|
.text{
|
|||
|
|
color: #bebfc1;
|
|||
|
|
margin: 0 20rpx;
|
|||
|
|
}
|
|||
|
|
.icon{
|
|||
|
|
color: #21b6fa;
|
|||
|
|
font-size: 80rpx;
|
|||
|
|
margin: 30rpx 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.fixed{
|
|||
|
|
position: fixed;
|
|||
|
|
bottom: 50rpx;
|
|||
|
|
left: 0;
|
|||
|
|
right: 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|