diff --git a/assets/css/routes/user-center/settings.css b/assets/css/routes/user-center/settings.css index b6b24beb..879d8667 100644 --- a/assets/css/routes/user-center/settings.css +++ b/assets/css/routes/user-center/settings.css @@ -647,7 +647,7 @@ position: relative; z-index: 0; margin-top: 120px; - padding: 18px 15px 0; + padding: 18px 15px; } .aksrt-settings-modal__fields { padding: 0 2px; } @@ -685,19 +685,6 @@ .aksrt-settings-modal .pwd-strength__text.level-medium { color: var(--color-warning, #f59e0b); } .aksrt-settings-modal .pwd-strength__text.level-strong { color: var(--color-success, #10b981); } .aksrt-settings-modal .aksrt-captcha-wrap { margin: 12px 0 8px; } -.aksrt-settings-modal__footer { - margin: 0 -15px; - padding: 12px 15px 15px; - border-top: 1px solid var(--main-border-color, var(--color-line, rgba(50, 50, 50, .12))); - border-radius: 0 0 var(--main-radius, 8px) var(--main-radius, 8px); -} -.aksrt-settings-modal__footer > .but { - display: block; - width: 100%; - min-height: 46px; - margin: 0; -} -.aksrt-settings-modal__footer > .but:disabled { opacity: .5; cursor: wait; } @media (max-width: 768px) { .aksrt-modal-runtime.aksrt-user-settings-modal.aksrt-modal-runtime--bottom .aksrt-modal-runtime__dialog { diff --git a/assets/js/routes/user-center.js b/assets/js/routes/user-center.js index 1bcb6d17..2c1e8ab3 100644 --- a/assets/js/routes/user-center.js +++ b/assets/js/routes/user-center.js @@ -40,6 +40,11 @@ if (window.AKSRTCaptcha) window.AKSRTCaptcha.reset(scene, scope); } + function setSettingsSubmitLabel(button, text) { + var label = button && button.querySelector('[data-aksrt-settings-submit-label]'); + if (label) label.textContent = text; + } + /* ==================== Dashboard 导航 ==================== */ function initDashboardNavigation() { if (document.documentElement.dataset.aksrtUserCenterNavigationInitialized === 'true') return; @@ -907,7 +912,8 @@ fm.addEventListener('submit', function(e) { e.preventDefault(); var btn = fm.querySelector('[type=submit]'); - var orig = btn ? btn.textContent : ''; + var submitLabel = btn && btn.querySelector('[data-aksrt-settings-submit-label]'); + var orig = submitLabel ? submitLabel.textContent : ''; var toastId = fid === 'pwd-form' ? 'aksrt-settings-password-toast' : 'aksrt-settings-email-toast'; @@ -924,40 +930,40 @@ return; } } - if (btn) { btn.disabled = true; btn.textContent = i18n.submitting || '提交中...'; } - notyf(i18n.submitting || '正在提交…', 'load', '', toastId); - var scene = fid === 'pwd-form' ? 'change_password' : 'change_email'; - runCaptcha(scene, fm).then(function(captchaPayload) { - if (captchaPayload === null) { - if (btn) { btn.disabled = false; btn.textContent = orig; } - return null; - } - if (container.dataset && container.dataset.aksrtSettingsModalClosed === 'true') return null; - var modalShell = fm.closest('.aksrt-user-settings-modal'); - if (modalShell && modalShell.dataset.aksrtSettingsModalClosed === 'true') return null; - var d = new FormData(fm); - d.set('action', act); - d.set('_settings_nonce', settingsNonce); - Object.keys(captchaPayload || {}).forEach(function(key) { d.set(key, captchaPayload[key]); }); - return fetch(ajaxUrl, { method: 'POST', credentials: 'same-origin', body: d }); - }) + if (btn) { btn.disabled = true; setSettingsSubmitLabel(btn, i18n.submitting || '提交中...'); } + notyf(i18n.submitting || '正在提交…', 'load', '', toastId); + var scene = fid === 'pwd-form' ? 'change_password' : 'change_email'; + runCaptcha(scene, fm).then(function(captchaPayload) { + if (captchaPayload === null) { + if (btn) { btn.disabled = false; setSettingsSubmitLabel(btn, orig); } + return null; + } + if (container.dataset && container.dataset.aksrtSettingsModalClosed === 'true') return null; + var modalShell = fm.closest('.aksrt-user-settings-modal'); + if (modalShell && modalShell.dataset.aksrtSettingsModalClosed === 'true') return null; + var d = new FormData(fm); + d.set('action', act); + d.set('_settings_nonce', settingsNonce); + Object.keys(captchaPayload || {}).forEach(function(key) { d.set(key, captchaPayload[key]); }); + return fetch(ajaxUrl, { method: 'POST', credentials: 'same-origin', body: d }); + }) .then(function(r) { return r ? r.json() : null; }) .then(function(r) { if (!r) return; - if (btn) { btn.disabled = false; btn.textContent = orig; } - if (r.success) { - notyf((r.data && r.data.message) || '操作成功', 'success', 5, toastId); - var activeModal = window.AksrtModalRuntime && window.AksrtModalRuntime.getActive(); - if (activeModal && activeModal.classList.contains('aksrt-user-settings-modal') && activeModal.contains(fm)) { - window.AksrtModalRuntime.close('settings-submit'); + if (btn) { btn.disabled = false; setSettingsSubmitLabel(btn, orig); } + if (r.success) { + notyf((r.data && r.data.message) || '操作成功', 'success', 5, toastId); + var activeModal = window.AksrtModalRuntime && window.AksrtModalRuntime.getActive(); + if (activeModal && activeModal.classList.contains('aksrt-user-settings-modal') && activeModal.contains(fm)) { + window.AksrtModalRuntime.close('settings-submit'); + } + if (r.data && r.data.redirect_to) setTimeout(function() { window.location.href = r.data.redirect_to; }, 2500); + } else { + notyf((r.data && r.data.message) || i18n.operationFailed || '操作失败', 'danger', 5, toastId); } - if (r.data && r.data.redirect_to) setTimeout(function() { window.location.href = r.data.redirect_to; }, 2500); - } else { - notyf((r.data && r.data.message) || i18n.operationFailed || '操作失败', 'danger', 5, toastId); - } - }) + }) .catch(function() { - if (btn) { btn.disabled = false; btn.textContent = orig; } + if (btn) { btn.disabled = false; setSettingsSubmitLabel(btn, orig); } notyf(i18n.networkError || '网络错误', 'danger', 5, toastId); }) .finally(function() { @@ -1207,10 +1213,11 @@ return; } var submitBtn = form.querySelector('[type="submit"]'); - var submitIdleText = submitBtn ? submitBtn.textContent : ''; + var submitLabel = submitBtn && submitBtn.querySelector('[data-aksrt-settings-submit-label]'); + var submitIdleText = submitLabel ? submitLabel.textContent : ''; if (submitBtn) { - submitBtn.disabled = true; - submitBtn.textContent = '绑定中...'; + submitBtn.disabled = true; + setSettingsSubmitLabel(submitBtn, '绑定中...'); } function doBind(captcha) { var toastId = 'aksrt-settings-phone-bind-toast'; @@ -1240,14 +1247,14 @@ notyf((res.json && (res.json.message || res.json.error)) || '绑定失败', 'danger', 5, toastId); if (submitBtn) { submitBtn.disabled = false; - submitBtn.textContent = submitIdleText; + setSettingsSubmitLabel(submitBtn, submitIdleText); } }) .catch(function () { notyf('网络错误', 'danger', 5, toastId); if (submitBtn) { submitBtn.disabled = false; - submitBtn.textContent = '确认绑定'; + setSettingsSubmitLabel(submitBtn, submitIdleText); } }); } @@ -1255,7 +1262,7 @@ if (captchaPayload === null) { if (submitBtn) { submitBtn.disabled = false; - submitBtn.textContent = submitIdleText; + setSettingsSubmitLabel(submitBtn, submitIdleText); } return null; } diff --git a/inc/helpers/user-center-renderers/settings-account.php b/inc/helpers/user-center-renderers/settings-account.php index b541956b..b30a4334 100644 --- a/inc/helpers/user-center-renderers/settings-account.php +++ b/inc/helpers/user-center-renderers/settings-account.php @@ -97,7 +97,7 @@ $render_row = static function (string $icon, string $title, string $value, strin