Files
app-govern/pages/user/changePwd.vue
2023-08-11 11:03:31 +08:00

242 lines
8.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<Cn-page :loading="loading">
<view slot="body">
<view class="index">
<uni-forms ref="form" :modelValue="formData" :rules="rules">
<uni-forms-item name="phone">
<uni-easyinput
maxlength="11"
disabled
type="text"
v-model="formData.showPhone"
placeholder="请输入手机号"
/>
</uni-forms-item>
<uni-forms-item name="code">
<view class="login-box-input">
<uni-easyinput type="number" v-model="formData.code" placeholder="请输入手机验证码" />
<view
class="ml40"
style="
margin-left: 40rpx;
font-size: 28rpx;
color: #666;
width: 200rpx;
text-align: center;
"
v-if="waitTime > 0"
>{{ waitTime + 's后重新获取' }}</view
>
<button class="login-box-input-btn" v-else @click="getCode" size="mini">获取验证码</button>
</view>
</uni-forms-item>
<uni-forms-item name="password">
<uni-easyinput type="password" v-model="formData.password" placeholder="请输入新的登录密码" />
</uni-forms-item>
<uni-forms-item name="password2">
<uni-easyinput type="password" v-model="formData.password2" placeholder="请再次确认密码" />
</uni-forms-item>
</uni-forms>
<button type="default" class="submit-btn" @click="submit">提交</button>
<view class="login-box-tips">
<view style="color: #999">说明密码需要包含特殊字符字母数字长度为8-16</view>
</view>
</view>
</view>
</Cn-page>
</template>
<script>
import { apiGetYms, apiModifyPsd, gongkey } from '@/common/api/user'
import { sm2, encrypt } from '@/common/js/sm2.js'
import { sm3Digest } from '@/common/js/sm3.js'
export default {
name: 'ChangePWd',
data() {
return {
loading: false,
waitTime: 0,
// 表单数据
formData: {
showPhone: '',
phone: '',
code: '',
password: '',
password2: '',
},
rules: {
phone: {
rules: [
{
required: true,
errorMessage: '请填写手机号',
},
],
},
code: {
rules: [
{
required: true,
errorMessage: '请填写验证码',
},
],
},
password: {
rules: [
{
required: true,
errorMessage: '请填写新密码',
},
],
},
password2: {
rules: [
{
required: true,
errorMessage: '请填写确认密码',
},
],
},
},
}
},
onLoad() {
// 手机号中间四位隐藏
this.formData.phone = uni.getStorageSync('userInfo').user_name
this.formData.showPhone = this.formData.phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
},
methods: {
getCode() {
uni.showLoading({
title: '请稍等',
})
apiGetYms({
phone: this.formData.phone,
type: 2,
})
.then((res) => {
uni.hideLoading()
console.log(res)
this.waitTime = 60
this.inter = setInterval(() => {
if (this.waitTime == 0) {
clearInterval(this.inter)
} else {
this.waitTime--
}
}, 1000)
})
.catch((err) => {
uni.hideLoading()
console.log(err)
})
},
submit() {
this.$refs.form.validate((valid) => {
console.log(valid)
if (!valid) {
if (this.formData.password != this.formData.password2) {
uni.showToast({
title: '两次密码不一致',
icon: 'none',
})
} else {
// 密码需要包含特殊字符字母数字长度为8-16
if (
!/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[#@!~%^&*.])[a-zA-Z\d#@!~%^&*.]{8,16}$/.test(
this.formData.password,
)
) {
return this.$util.toast('密码需要包含特殊字符字母数字长度为8-16')
}
let loginName = encrypt(this.formData.phone)
gongkey({ loginName }).then((response) => {
let publicKey = response.data
let sm3Pwd = sm3Digest(this.formData.password)
let jiamipassword = sm2(sm3Pwd + '|' + this.formData.password, publicKey, 0)
// apiPwdLogin({
// username: loginName,
// password: jiamipassword,
// imageCode: '',
// grant_type: 'captcha',
// verifyCode: 0,
// }).then((res) => {
// this.$util.loginSuccess(res.data)
// })
apiModifyPsd({
phone: this.formData.phone,
code: this.formData.code,
password: jiamipassword,
})
.then((res) => {
console.log(res)
uni.showToast({
title: '修改成功',
icon: 'none',
})
setTimeout(() => {
uni.navigateBack({
delta: 1,
})
}, 1000)
})
.catch((err) => {
console.log(err)
})
})
}
}
})
},
},
}
</script>
<style lang="scss">
.index {
padding: 20rpx;
.submit-btn {
background: $uni-theme-color;
color: #fff;
}
.login-box-tips {
margin-top: 60rpx;
display: flex;
justify-content: center;
font-size: 20rpx;
}
.login-box-input {
display: flex;
align-items: center;
border-bottom: 1rpx solid #f0f0f0;
.login-box-input-icon {
width: 40rpx;
margin-right: 40rpx;
}
.login-box-input-main {
font-size: 28rpx;
flex: 1;
height: 100rpx;
line-height: 100rpx;
}
.login-box-input-btn {
padding:0 40rpx;
margin-left: 40rpx;
background: $uni-theme-color;
color: #fff;
}
.login-box-input-img {
margin-left: 40rpx;
background: skyblue;
height: 80rpx;
width: 200rpx;
}
}
}
</style>