66 lines
2.3 KiB
JavaScript
66 lines
2.3 KiB
JavaScript
// SaaSShop Admin JS
|
||
// 说明:用于增强总台管理的运营交互体验(尽量保持小而可治理)。
|
||
// 原则:不引入复杂构建链;以渐进增强为主,页面无 JS 也应可用。
|
||
|
||
(function () {
|
||
if (window.__SAASSHOP_ADMIN_JS__) {
|
||
return;
|
||
}
|
||
window.__SAASSHOP_ADMIN_JS__ = true;
|
||
|
||
function qs(sel, root) {
|
||
return (root || document).querySelector(sel);
|
||
}
|
||
|
||
// 续费缺订阅治理:绑定成功后自动滚动到顶部提示区(让运营立刻看到 success/warning/error)
|
||
// 说明:由后端 redirect url 追加 attached_subscription=1 触发。
|
||
if (window.location && window.location.search && window.location.search.indexOf('attached_subscription=1') >= 0) {
|
||
try {
|
||
window.scrollTo({ top: 0, behavior: 'smooth' });
|
||
} catch (e) {
|
||
window.scrollTo(0, 0);
|
||
}
|
||
}
|
||
|
||
// 通用:表单提交后禁用按钮,避免运营重复点击造成重复请求
|
||
// 用法:form 标记 data-action="disable-on-submit"。
|
||
(function () {
|
||
var forms = document.querySelectorAll('form[data-action="disable-on-submit"]');
|
||
if (!forms || forms.length === 0) {
|
||
return;
|
||
}
|
||
|
||
forms.forEach(function (form) {
|
||
form.addEventListener('submit', function () {
|
||
try {
|
||
var btns = form.querySelectorAll('button, input[type="submit"]');
|
||
btns.forEach(function (b) {
|
||
b.disabled = true;
|
||
// 尽量不改文案(避免影响断言/文案口径);只做禁用
|
||
});
|
||
} catch (e) {}
|
||
});
|
||
});
|
||
})();
|
||
|
||
// 续费缺订阅治理:订单详情页“绑定订阅ID”输入框,小交互增强:
|
||
// - 输入后按 Enter 直接提交
|
||
// - 自动聚焦,减少点击
|
||
var attachInput = qs('#attach_site_subscription_id');
|
||
if (attachInput) {
|
||
try {
|
||
attachInput.focus();
|
||
} catch (e) {}
|
||
|
||
attachInput.addEventListener('keydown', function (e) {
|
||
if (e && (e.key === 'Enter' || e.keyCode === 13)) {
|
||
var form = attachInput.form;
|
||
if (form) {
|
||
e.preventDefault();
|
||
form.submit();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
})();
|