shop-applet/pages/users/user_modify_pwd/index.vue

332 lines
7.9 KiB
Vue
Raw Permalink Normal View History

2024-05-14 17:25:13 +08:00
<template>
<view :style="viewColor">
<form report-submit='true'>
<view>
<view class="ChangePassword">
<view class="list">
<view class="item">
<text class="phone">{{userInfo.phone}}</text>
</view>
<view class="item acea-row row-between-wrapper codeVal">
<input type='number' maxlength="4" placeholder='验证码' placeholder-class='placeholder'
class="codeIput" v-model="captcha"></input>
<button class="code" :class="disabled === true ? 'on' : ''" :disabled='disabled'
@click="handleVerify">
{{ text }}
</button>
</view>
<view class="border"></view>
<block v-if="type == 'payPwd'">
<view class="item" @click="showPopup(1)">
<input style="pointer-events: none;" type='password' placeholder="请设置支付密码"
placeholder-class='placeholder' v-model="password" autocomplete="off"></input>
</view>
<view class="item" @click="showPopup(2)">
<input style="pointer-events: none;" type='password' placeholder="请再次设置支付密码"
placeholder-class='placeholder' v-model="repassword" autocomplete="off"></input>
</view>
</block>
<block v-else>
<view class="item">
<input type='password' placeholder="请设置密码" placeholder-class='placeholder'
v-model="password" autocomplete="off"></input>
</view>
<view class="item">
<input type='password' placeholder="请再次设置密码" placeholder-class='placeholder'
v-model="repassword" autocomplete="off"></input>
</view>
</block>
</view>
</view>
<button form-type="submit" @click="confirmSubmit" class="confirmBnt">确认</button>
</view>
</form>
<Verify @success="success" :captchaType="'blockPuzzle'" :imgSize="{ width: '330px', height: '155px' }"
ref="verify"></Verify>
<popups ref="popups" isPay title="请设置支付密码" @confirm="handleConfirm" @clear="handleClear" @change="handleChange">
</popups>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import sendVerifyCode from "@/mixins/SendVerifyCode";
import {
modifyPassword,
verifyCode,
appletsDecrypt,
setPayPwd
} from '@/api/api.js';
import {
getUserInfo
} from '@/api/user.js';
import {
registerVerify
} from '@/api/user.js'
import {
mapGetters
} from "vuex";
import {
toLogin
} from '@/libs/login.js';
import Verify from '@/components/verify/verify.vue';
import popups from "@/components/popups/index.vue";
export default {
mixins: [sendVerifyCode],
components: {
Verify,
popups
},
data() {
return {
userInfo: {},
phone: '',
repassword: '',
password: '',
captcha: '',
key: '',
codeVal: '',
disabled: false,
type: '',
set_type: '',
};
},
computed: mapGetters(['isLogin', 'viewColor']),
onLoad(opt) {
let that = this
this.type = opt.type;
if (this.isLogin) {
this.getUserInfo()
} else {
toLogin()
}
// #ifdef MP
wx.login({
success(res) {
if (res.code) {
that.codeVal = res.code
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
// #endif
},
methods: {
/**
* 获取个人用户信息
*/
getUserInfo: function() {
let that = this;
getUserInfo().then(res => {
that.userInfo = res.data
});
},
showPopup(type) {
this.set_type = type;
this.$refs.popups.handleOpen();
},
// 输入密码回调
handleConfirm(e) {
if (this.set_type == 1) this.password = e;
else this.repassword = e;
},
handleClear() {},
handleChange() {},
confirmSubmit: function() {
let that = this;
if (!that.password) return that.$util.Tips({
title: '请填写密码!'
});
if (!that.repassword) return that.$util.Tips({
title: '请确认新密码!'
});
if (that.password !== that.repassword) return that.$util.Tips({
title: '两次密码不一致,请重新填写!'
});
if (!that.captcha) return that.$util.Tips({
title: '请填写验证码'
});
if (this.type == 'payPwd') { //支付提现密码
setPayPwd({
password: that.password,
repassword: that.repassword,
sms_code: that.captcha,
}).then(res => {
that.$util.Tips({
title: '修改成功!',
icon: 'success'
}, () => {
uni.navigateBack();
});
}).catch(err => {
that.$util.Tips({
title: err,
icon: 'none'
})
})
} else { // 登录密码
modifyPassword({
password: that.password,
repassword: that.repassword,
sms_code: that.captcha
}).then(res => {
return that.$util.Tips({
title: '修改成功!',
icon: 'success'
}, {
tab: 5,
url: '/pages/users/user_info/index'
});
}).catch(err => {
return that.$util.Tips({
title: err
});
})
}
},
/**
* 发送验证码
*
*/
async code(data) {
let that = this;
// if (!(/^1(3|4|5|7|8|9|6)\d{9}$/i.test(that.userInfo.phone))) return that.$util.Tips({
// title: '请输入正确的手机号码!'
// });
this.disabled = true
await registerVerify({
phone: that.userInfo.phone,
code: that.captcha,
type: this.type == 'payPwd' ? 'pay_pwd' : 'change_pwd',
captchaType: 'blockPuzzle',
captchaVerification: data.captchaVerification
}).then(res => {
this.disabled = false
that.$util.Tips({
title: res.msg
});
that.sendCode();
}).catch(err => {
this.disabled = false
return that.$util.Tips({
title: err
});
});
},
success(data) {
this.$refs.verify.hide();
this.code(data);
},
handleVerify() {
this.$refs.verify.show();
}
}
}
</script>
<style lang="scss" scoped>
.ChangePassword {
background: #fff;
padding-top: 53rpx;
}
.ChangePassword .phone {
font-size: 32rpx;
}
.ChangePassword .list .item {
width: 580rpx;
margin: 0 auto;
height: 110rpx;
border-bottom: 2rpx solid #f0f0f0;
display: flex;
align-items: center;
}
.ChangePassword .list .item input {
width: 100%;
font-size: 32rpx;
}
/deep/.uni-input-input {
// box-shadow: inset 0 0 0 0 #fff;
}
.ChangePassword .list .item .placeholder {
color: #b9b9bc;
}
.ChangePassword .list .item input.codeIput {
width: 340rpx;
}
.ChangePassword .list .item .code {
font-size: 32rpx;
position: relative;
padding-left: 26rpx;
color: var(--view-theme);
&::before {
content: "";
width: 1rpx;
height: 30rpx;
position: absolute;
top: 10rpx;
left: 0;
background: #DDDDDD;
display: inline-block;
}
}
.ChangePassword .list .item .code.on {
color: #b9b9bc !important;
}
.ChangePassword .list .border {
width: 100%;
height: 21rpx;
background: #F5F5F5;
}
.confirmBnt {
font-size: 32rpx;
width: 580rpx;
height: 90rpx;
border-radius: 45rpx;
color: #fff;
margin: 70rpx auto 0 auto;
text-align: center;
line-height: 90rpx;
background-color: var(--view-theme);
}
.getPhoneBtn {
font-size: 32rpx;
width: 580rpx;
height: 90rpx;
border-radius: 45rpx;
border: 1px solid var(--view-theme);
color: var(--view-theme);
margin: 40rpx auto 0 auto;
text-align: center;
line-height: 90rpx;
.iconfont {
font-size: 32rpx;
margin-right: 12rpx;
}
}
</style>