mall_client/zyhs3_uniapp/pages/setting/payPwd.vue

152 lines
4.2 KiB
Vue
Raw Permalink Normal View History

2026-03-13 07:50:35 +00:00
<template>
<view class="main bg-w">
<view :style="{'height': statusBarHeight + 'px'}"></view>
<text class="iconfont color-b3 nav" @tap="$navigateBack()">&#xe771;</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">&#xe7c0;</text>
<text class="iconfont font40 eye" @tap="showPassword = !showPassword" v-else>&#xe7bf;</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">&#xe7c0;</text>
<text class="iconfont font40 eye" @tap="confirmPwd = !confirmPwd" v-else>&#xe7bf;</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>