<!-- src/main/resources/static/register.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
<h2>用户注册</h2>
<form id="regForm">
    <label>用户名：</label>
    <input type="text" name="username" required>
    <label>邮箱：</label>
    <input type="email" name="email" required>
    <button type="button" id="sendCode">发送验证码</button>
    <label>邮箱验证码：</label>
    <input type="text" name="verificationCode" required>
    <label>密码：</label>
    <input type="password" name="password" required>
    <label>身份证号（8 位数字）：</label>
    <input type="number" name="identificationNumber" required>
    <button type="submit">注册</button>
</form>
<script>
    document.getElementById('sendCode')
        .addEventListener('click', async () => {
            const form = new URLSearchParams();
            form.set('email', document.querySelector('[name=email]').value);
            const res = await fetch('/sendVerification', {
                method: 'POST',
                body: form
            });
            alert((await res.json()).msg);
        });
    document.getElementById('regForm')
        .addEventListener('submit', async e => {
            e.preventDefault();
            const form = new URLSearchParams(new FormData(e.target));
            const res = await fetch('/register', {
                method: 'POST',
                body: form
            });
            const json = await res.json();
            alert(json.msg);
            if (res.ok && json.code===0) {
                window.location.href='login.html';
            }
        });
</script>
</body>
</html>
