等待后端更新接口

This commit is contained in:
2026-08-03 16:49:26 +08:00
parent ac5823547a
commit 5b79893650
131 changed files with 5324 additions and 1392 deletions
+52 -19
View File
@@ -143,15 +143,32 @@
return values;
}
function setStatus(form, message) {
function setStatus(form, type, message) {
var status = query('[data-security-status]', form);
if (status) status.textContent = message;
if (!status) return;
if (root.ProfileUI && root.ProfileUI.setApiState && type) {
root.ProfileUI.setApiState(status, type, message);
return;
}
status.textContent = message || '';
}
function setSubmitting(form, isSubmitting) {
queryAll('button[type="submit"]', form).forEach(function (button) {
if (!button.dataset.defaultLabel) button.dataset.defaultLabel = button.textContent;
button.disabled = isSubmitting;
button.textContent = isSubmitting ? '提交中…' : button.dataset.defaultLabel;
});
}
function setBoundPhoneStatus(type, message) {
queryAll('[data-security-bound-phone]').forEach(function (node) {
if (root.ProfileUI && root.ProfileUI.setApiState && type) {
root.ProfileUI.setApiState(node, type, message);
return;
}
node.textContent = message || '';
});
}
@@ -211,6 +228,7 @@
if (!api || !documentRef) return;
if (redirectUnauthorized(api)) return;
setBoundPhoneStatus('loading', '正在读取已绑定手机号…');
try {
profile = await api.currentProfile();
@@ -218,14 +236,10 @@
message = isPhone(boundPhone)
? '验证码将发送至 ' + maskPhone(boundPhone)
: '未获取到已绑定手机号';
queryAll('[data-security-bound-phone]').forEach(function (node) {
node.textContent = message;
});
setBoundPhoneStatus('', message);
} catch (error) {
if (redirectUnauthorized(api, error)) return;
queryAll('[data-security-bound-phone]').forEach(function (node) {
node.textContent = '读取已绑定手机号失败';
});
setBoundPhoneStatus('error', '读取已绑定手机号失败,请刷新后重试。');
showMessage(error.message || '账号资料加载失败');
}
}
@@ -236,28 +250,31 @@
if (redirectUnauthorized(api)) return;
if (!values.oldPassword || !values.newPassword) {
setStatus(form, 'error', '请填写当前密码和新密码');
showMessage('请填写原密码和新密码');
return;
}
if (String(values.newPassword).length < 6) {
setStatus(form, 'error', '新密码至少需要 6 位');
showMessage('新密码至少需要 6 位');
return;
}
if (values.newPassword !== values.confirmPassword) {
setStatus(form, 'error', '两次新密码不一致');
showMessage('两次新密码不一致');
return;
}
try {
setSubmitting(form, true);
setStatus(form, '提交中...');
setStatus(form, 'loading', '正在修改密码…');
await api.changePassword(buildPasswordChangeBody(values));
setStatus(form, '密码已修改');
setStatus(form, '', '密码已修改');
showMessage('密码已修改');
form.reset();
} catch (error) {
if (redirectUnauthorized(api, error)) return;
setStatus(form, '修改失败');
setStatus(form, 'error', '修改失败,请稍后重试。');
showMessage(error.message || '密码修改失败');
} finally {
setSubmitting(form, false);
@@ -270,32 +287,33 @@
if (redirectUnauthorized(api)) return;
if (!body.phone || !body.smsCode) {
setStatus(form, 'error', '请填写新手机号和验证码');
showMessage('请填写新手机号和验证码');
return;
}
if (!isPhone(body.phone)) {
setStatus(form, 'error', '请输入正确的新手机号');
showMessage('请输入正确的新手机号');
return;
}
if (!isSmsCode(body.smsCode)) {
setStatus(form, 'error', '请输入正确的短信验证码');
showMessage('请输入正确的短信验证码');
return;
}
try {
setSubmitting(form, true);
setStatus(form, '提交中...');
setStatus(form, 'loading', '正在换绑手机号…');
await api.changePhone(body);
boundPhone = body.phone;
queryAll('[data-security-bound-phone]').forEach(function (node) {
node.textContent = '验证码将发送至 ' + maskPhone(boundPhone);
});
setStatus(form, '手机号已换绑');
setBoundPhoneStatus('', '验证码将发送至 ' + maskPhone(boundPhone));
setStatus(form, '', '手机号已换绑');
showMessage('手机号已换绑');
form.reset();
} catch (error) {
if (redirectUnauthorized(api, error)) return;
setStatus(form, '换绑失败');
setStatus(form, 'error', '换绑失败,请稍后重试。');
showMessage(error.message || '手机号换绑失败');
} finally {
setSubmitting(form, false);
@@ -311,6 +329,7 @@
if (!form || redirectUnauthorized(api)) return;
values = getFormValues(form);
if (!isPhone(values.phone)) {
setStatus(form, 'error', '请输入正确的新手机号');
showMessage('请输入正确的新手机号');
return;
}
@@ -318,16 +337,19 @@
values = getFormValues(form);
values.validToken = takeCaptchaToken(form);
button.disabled = true;
setStatus(form, 'loading', '正在发送验证码…');
try {
await api.sendSmsCode(getCaptchaOperation('phone'), {
phone: values.phone,
validToken: values.validToken || ''
});
setStatus(form, '', '验证码已发送,请查收短信。');
showMessage('验证码已发送');
startSmsCooldown(button);
} catch (error) {
if (redirectUnauthorized(api, error)) return;
setStatus(form, 'error', '验证码发送失败,请稍后重试。');
showMessage(error.message || '验证码发送失败');
button.disabled = false;
}
@@ -340,6 +362,7 @@
if (!form || redirectUnauthorized(api)) return;
if (!isPhone(boundPhone)) {
setStatus(form, 'error', '未获取到已绑定手机号,请刷新后重试。');
showMessage('未获取到已绑定手机号,请刷新后重试');
return;
}
@@ -347,16 +370,19 @@
values = getFormValues(form);
values.validToken = takeCaptchaToken(form);
button.disabled = true;
setStatus(form, 'loading', '正在发送验证码…');
try {
await api.sendSmsCode(getCaptchaOperation('deactivate'), {
phone: boundPhone,
validToken: values.validToken || ''
});
setStatus(form, '', '验证码已发送,请查收短信。');
showMessage('验证码已发送');
startSmsCooldown(button);
} catch (error) {
if (redirectUnauthorized(api, error)) return;
setStatus(form, 'error', '验证码发送失败,请稍后重试。');
showMessage(error.message || '验证码发送失败');
button.disabled = false;
}
@@ -368,10 +394,12 @@
if (redirectUnauthorized(api)) return;
if (!isSmsCode(values.smsCode)) {
setStatus(form, 'error', '请输入正确的短信验证码');
showMessage('请输入正确的短信验证码');
return;
}
if (!isDangerConfirmed(values.confirmText)) {
setStatus(form, 'error', '请完整输入“确认注销”');
showMessage('请完整输入“确认注销”');
return;
}
@@ -379,13 +407,13 @@
try {
setSubmitting(form, true);
setStatus(form, '提交中...');
setStatus(form, 'loading', '正在提交注销申请…');
await api.deactivateAccount(buildDeactivateBody(values));
showMessage('账号已提交注销');
root.location.href = 'index.html';
} catch (error) {
if (redirectUnauthorized(api, error)) return;
setStatus(form, '注销失败');
setStatus(form, 'error', '注销失败,请稍后重试。');
showMessage(error.message || '账号注销失败');
} finally {
setSubmitting(form, false);
@@ -415,6 +443,11 @@
if (!form) return;
event.preventDefault();
if (!form.checkValidity()) {
setStatus(form, 'error', '请检查表单填写是否正确');
form.reportValidity();
return;
}
formType = form.getAttribute('data-security-form');
if (formType === 'password') submitPassword(form);