ai_admin/templates/re_password.html
2024-09-20 04:29:09 +00:00

238 lines
8.4 KiB
HTML
Executable File
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.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>找回密码</title>
<link rel="stylesheet" href="https://file.guimiaokeji.com/layui/css/layui.css">
<style>
body {
background: linear-gradient(to right, #1e3c72, #2a5298);
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
font-family: 'Arial', sans-serif;
color: #fff;
}
.container {
background: rgba(255, 255, 255, 0.1);
padding: 30px;
border-radius: 10px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
width: 90%;
max-width: 400px;
animation: fadeIn 1s ease-in-out;
backdrop-filter: blur(10px);
}
.layui-form-item {
margin-bottom: 20px;
}
.layui-btn {
width: 100%;
}
.input-with-button {
display: flex;
align-items: center;
}
.input-with-button input {
flex: 3;
}
.input-with-button button {
flex: 1;
margin-left: 10px;
padding: 9px 12px;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(-20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
input::-webkit-input-placeholder {
color: rgba(255, 255, 255, 0.7);
}
input:-ms-input-placeholder {
color: rgba(255, 255, 255, 0.7);
}
input::-ms-input-placeholder {
color: rgba(255, 255, 255, 0.7);
}
input::placeholder {
color: rgba(255, 255, 255, 0.7);
}
.layui-form-item .layui-input {
background: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(255, 255, 255, 0.3);
color: #fff;
}
.layui-form-item .layui-input:focus {
border-color: #3b82ec;
}
.layui-form-label {
color: #fff;
}
.loading-spinner {
display: none;
border: 4px solid rgba(0, 0, 0, 0.1);
border-radius: 50%;
border-top: 4px solid #fff;
width: 40px;
height: 40px;
animation: spin 1s linear infinite;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
</head>
<body>
<div class="container">
<div class="loading-spinner" id="loadingSpinner"></div>
<form class="layui-form" id="resetPasswordForm">
{% csrf_token %}
<div class="layui-form-item">
<label class="layui-form-label">手机号或邮箱</label>
<div class="layui-input-block input-with-button">
<input type="text" name="contact" required lay-verify="required" placeholder="手机号或邮箱" class="layui-input">
<button type="button" class="layui-btn layui-btn-normal" style="line-height: 10px;" id="sendCodeButton">发送验证码</button>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">验证码</label>
<div class="layui-input-block">
<input type="text" name="code" required lay-verify="required" placeholder="验证码" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">新密码</label>
<div class="layui-input-block">
<input type="password" name="new_password" required lay-verify="required" placeholder="新密码" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">确认密码</label>
<div class="layui-input-block">
<input type="password" name="confirm_password" required lay-verify="required" placeholder="确认密码" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<button class="layui-btn" type="button" id="resetPasswordButton">重置密码</button>
</div>
</form>
</div>
<script src="https://file.guimiaokeji.com/layui/jquery-3.6.0.min.js"></script>
<script src="https://file.guimiaokeji.com/layui/layui.js"></script>
<script>
layui.use(['form', 'layer'], function() {
var form = layui.form;
var $ = layui.jquery;
var layer = layui.layer;
// 显示加载动画
function showLoading() {
$('#loadingSpinner').show();
}
// 隐藏加载动画
function hideLoading() {
$('#loadingSpinner').hide();
}
// 验证密码强度
function validatePasswordStrength(password) {
var minLength = 6;
var hasNumber = /\d/;
var hasLetter = /[a-zA-Z]/;
return password.length >= minLength && hasNumber.test(password) && hasLetter.test(password);
}
// 发送验证码逻辑
$('#sendCodeButton').on('click', function() {
var contact = $('input[name="contact"]').val();
if (!contact) {
layer.msg('请输入正确的手机号或邮箱');
return;
}
showLoading();
$.ajax({
type: 'POST',
url: '/api/send-verification-code/',
contentType: 'application/json',
data: JSON.stringify({contact: contact}),
success: function(response) {
hideLoading();
console.log("验证码发送成功", response);
layer.msg('验证码发送成功');
},
error: function(xhr, status, error) {
hideLoading();
console.error("验证码发送失败", error);
layer.msg('验证码发送失败');
}
});
});
// 重置密码逻辑
$('#resetPasswordButton').on('click', function() {
var resetData = {
contact: $('input[name="contact"]').val(),
code: $('input[name="code"]').val(),
new_password: $('input[name="new_password"]').val(),
confirm_password: $('input[name="confirm_password"]').val()
};
if (!resetData.contact || !resetData.code || !resetData.new_password || !resetData.confirm_password) {
layer.msg('请填写所有必填字段');
return;
}
if (resetData.new_password !== resetData.confirm_password) {
layer.msg('两次密码输入不一致');
return;
}
if (!validatePasswordStrength(resetData.new_password)) {
layer.msg('密码必须至少6位并且包含数字和字母');
return;
}
showLoading();
$.ajax({
type: 'POST',
url: '/api/reset-password/',
contentType: 'application/json',
data: JSON.stringify(resetData),
success: function(response) {
hideLoading();
console.log("密码重置成功", response);
if (response.code === 200) {
layer.msg('密码重置成功', function() {
window.location.href = '/';
});
} else {
layer.msg(response.message);
console.error("密码重置失败", response.message);
}
},
error: function(xhr, status, error) {
hideLoading();
console.error("密码重置失败", error);
layer.msg('密码重置失败', error);
}
});
});
});
</script>
</body>
</html>