<script setup lang="ts">
import {ref} from "vue";
import CustomFromItem from "@/components/custom/CustomFromItem.vue";
import CustomInput from "@/components/custom/CustomInput.vue";
import CustomFrom from "@/components/custom/CustomFrom.vue";
import {findBackPassword} from "@/api/user/user.ts";
import type {ForgetPassword} from "@/types/interface/forgetPassoword/ForgetPasswordInfo.ts";
import {ElMessage} from "element-plus";
// 当前步骤
const active = defineModel('active');
// 邮箱地址
const forgetPasswordInfo = defineModel<ForgetPassword>('forgetPasswordInfo', {
default: {
email: '',
password: ''
}
})
// 确认密码
const confirmPassword = ref('')
const forgetPasswordResetInfoRef = ref()
// 表单输入校验
const rules = {
password: [
{required: true, message: "请输入至少六位数的密码", trigger: "blur"},
{min: 6, message: '请输入至少六位的密码', trigger: "blur"}
],
confirmPassword: [
{required: true, message: "请输入密码", trigger: "blur"},
{min: 6, message: "请输入至少六位的密码", trigger: "blur"},
{
validator: (value: any) => {
return value !== forgetPasswordInfo.value.password ? '两次输入的密码不一致' : ''
},
trigger: "blur"
}
]
}
/**
* 重置密码
*/
const resetPassword = () => {
if (forgetPasswordResetInfoRef.value?.isValid()) {
findBackPassword(forgetPasswordInfo.value).then((res) => {
if (res.data.code === 200) {
active.value = 4
ElMessage.success("密码重置成功!")
return
}
ElMessage.error("密码修改失败,请重试!")
})
}
}
</script>
<template>
<custom-from :validator="true" :rules="rules" ref="forgetPasswordResetInfoRef">
<custom-from-item label="密码">
<custom-input placeholder="至少输入6位" name="password" type="password"
icon="src/assets/img/login/password.svg" v-model:input-value="forgetPasswordInfo.password"/>
</custom-from-item>
<custom-from-item label="确认密码">
<custom-input placeholder="再次输入密码" name="confirmPassword" type="password"
icon="src/assets/img/login/password.svg"
v-model:input-value="confirmPassword"/>
</custom-from-item>
<button class="reset-password" @click="resetPassword"> 重置密码</button>
</custom-from>
</template>
<style scoped lang="scss">
// 表单点击按钮
.reset-password {
background-color: #E5E7EB;
color: #ffffff;
width: 100%;
padding: 12px 0;
line-height: 35px;
font-size: 18px;
border-radius: 12px;
display: flex;
justify-content: center;
font-weight: 600;
border: none;
outline: none;
transition-duration: 300ms;
background-image: linear-gradient(to right, #615fff, #9810fa, #ec4899);
// 移入抬起
&:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15),
0 2px 4px rgba(0, 0, 0, 0.1);
}
// 点击时 有按下的效果
&:active {
transform: translateY(0);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
}
}
</style>