guozhi-wechat/pages/user/password.vue
2025-07-22 18:31:50 +08:00

206 lines
5.0 KiB
Vue
Raw Permalink 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>
<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>