206 lines
5.0 KiB
Vue
206 lines
5.0 KiB
Vue
<template>
|
||
<view class="container">
|
||
<tn-form
|
||
ref="form"
|
||
class="tn-padding"
|
||
:model="form"
|
||
:errorType="errorType"
|
||
:labelPosition="labelPosition"
|
||
:labelWidth="labelWidth"
|
||
:labelAlign="labelAlign"
|
||
:labelStyle="{ fontSize: '32rpx', fontWeight: 'bold' }"
|
||
>
|
||
<tn-form-item label="旧密码" prop="oldPassword">
|
||
<tn-input
|
||
v-model="form.oldPassword"
|
||
type="password"
|
||
placeholder="请输入密码"
|
||
:border="border"
|
||
:passwordIcon="true"
|
||
:placeholderStyle="placeholderStyle"
|
||
/>
|
||
</tn-form-item>
|
||
<tn-form-item label="新密码" prop="newPassword">
|
||
<tn-input
|
||
v-model="form.newPassword"
|
||
type="password"
|
||
placeholder="请输入密码"
|
||
:border="border"
|
||
:passwordIcon="true"
|
||
:placeholderStyle="placeholderStyle"
|
||
/>
|
||
</tn-form-item>
|
||
<tn-form-item label="确认密码" prop="confirmPassword">
|
||
<tn-input
|
||
v-model="form.confirmPassword"
|
||
type="password"
|
||
placeholder="请输入密码"
|
||
:border="border"
|
||
:passwordIcon="true"
|
||
:placeholderStyle="placeholderStyle"
|
||
/>
|
||
</tn-form-item>
|
||
</tn-form>
|
||
|
||
<!-- 悬浮按钮-->
|
||
<view class="tn-flex tn-footerfixed">
|
||
<view
|
||
class="tn-flex-1 justify-content-item tn-margin-sm tn-text-center"
|
||
@click="handleSubmit"
|
||
>
|
||
<tn-button
|
||
shape="round"
|
||
backgroundColor="#1A73E8"
|
||
padding="40rpx 0"
|
||
width="60%"
|
||
shadow
|
||
fontBold
|
||
>
|
||
<!-- <text class="tn-icon-light tn-padding-right-xs tn-color-black"></text> -->
|
||
<text class="tn-color-white">保存</text>
|
||
<!-- <text class="tn-icon-light tn-padding-left-xs tn-color-black"></text> -->
|
||
</tn-button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import { changePassword } from "@/common/api/user.js";
|
||
|
||
export default {
|
||
data() {
|
||
return {
|
||
errorType: ["message", "border-bottom", "toast"],
|
||
labelPosition: "top",
|
||
labelAlign: "right",
|
||
labelWidth: 140,
|
||
border: false,
|
||
placeholderStyle: "color: #AAAAAA;fontSize: 32rpx,",
|
||
form: {
|
||
oldPassword: "",
|
||
newPassword: "",
|
||
confirmPassword: "",
|
||
},
|
||
rules: {
|
||
oldPassword: [
|
||
{
|
||
required: true,
|
||
message: "请输入旧密码",
|
||
trigger: ["change", "blur"],
|
||
},
|
||
],
|
||
newPassword: [
|
||
{
|
||
required: true,
|
||
message: "请输入新密码",
|
||
trigger: ["change", "blur"],
|
||
},
|
||
{
|
||
pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+\S{5,12}$/,
|
||
message: "需同时含有字母和数字,长度在6-12之间",
|
||
trigger: ["change", "blur"],
|
||
},
|
||
],
|
||
confirmPassword: [
|
||
{
|
||
required: true,
|
||
message: "请再次输入密码",
|
||
trigger: ["change", "blur"],
|
||
},
|
||
{
|
||
validator: (rule, value, callback) => {
|
||
return value === this.form.newPassword;
|
||
},
|
||
message: "两次输入的密码不相等",
|
||
trigger: ["change", "blur"],
|
||
},
|
||
],
|
||
},
|
||
};
|
||
},
|
||
methods: {
|
||
onReady() {
|
||
this.$refs.form.setRules(this.rules);
|
||
},
|
||
handleSubmit() {
|
||
this.$refs.form.validate((valid) => {
|
||
if (valid) {
|
||
// 验证通过
|
||
changePassword(this, this.form).then((res) => {
|
||
if (res.code === 1) {
|
||
// 替换新token
|
||
uni.setStorageSync("token", res.data.token);
|
||
|
||
this.utils.alert("修改成功", () => {
|
||
// uni.navigateBack();
|
||
uni.launch({
|
||
url: "/pages/user/user",
|
||
});
|
||
});
|
||
} else {
|
||
this.utils.alert(res.msg);
|
||
}
|
||
});
|
||
} else {
|
||
// 验证失败
|
||
}
|
||
});
|
||
},
|
||
},
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
page {
|
||
background-color: #fff !important;
|
||
}
|
||
|
||
.container {
|
||
background-color: #fff !important;
|
||
// 高度vh(100);
|
||
height: 100vh;
|
||
}
|
||
.input-group {
|
||
margin-bottom: 20px;
|
||
}
|
||
.input {
|
||
width: 100%;
|
||
padding: 10px;
|
||
border: none;
|
||
border-bottom: 2px solid #ccc;
|
||
outline: none;
|
||
}
|
||
.input:focus {
|
||
border-bottom-color: #1A73E8;
|
||
}
|
||
.submit-button {
|
||
width: 100%;
|
||
padding: 10px;
|
||
background-color: #1A73E8;
|
||
color: #fff;
|
||
border: none;
|
||
border-radius: 5px;
|
||
text-align: center;
|
||
}
|
||
|
||
/* 底部悬浮按钮 start*/
|
||
.tn-tabbar-height {
|
||
min-height: 100rpx;
|
||
height: calc(120rpx + env(safe-area-inset-bottom) / 2);
|
||
}
|
||
|
||
.tn-footerfixed {
|
||
position: fixed;
|
||
width: 100%;
|
||
bottom: calc(30rpx + env(safe-area-inset-bottom));
|
||
z-index: 1024;
|
||
box-shadow: 0 1rpx 6rpx rgba(0, 0, 0, 0);
|
||
}
|
||
/* 底部悬浮按钮 end*/
|
||
|
||
.tn-border-solid-bottom {
|
||
border-bottom: 1px solid #f8f9fb;
|
||
}
|
||
</style>
|