feat: 优化批量匹配和分页默认值 (#244)
This commit is contained in:
+31
-8
@@ -93,22 +93,18 @@
|
||||
}
|
||||
|
||||
/* ── 每页条数立即生效 ─────────────────────────
|
||||
普通 GET 表单仍是无 JavaScript 时的完整回退;脚本只做渐进增强,让采购员
|
||||
选择 20/50/100 后不用再点一次“应用”。select 不能禁用,否则浏览器提交时
|
||||
会丢掉 page_size。 */
|
||||
采购员选择 20/50/100 后直接提交 GET 表单。select 不能禁用,否则浏览器
|
||||
提交时会丢掉 page_size。 */
|
||||
function setupPageSizeForms() {
|
||||
document.querySelectorAll("[data-page-size-form]").forEach(function (form) {
|
||||
var select = form.querySelector("[data-page-size-select]");
|
||||
var submit = form.querySelector("[data-page-size-submit]");
|
||||
var loading = form.querySelector("[data-page-size-loading]");
|
||||
if (!select) return;
|
||||
|
||||
function beginSubmit() {
|
||||
if (form.getAttribute("aria-busy") === "true") return false;
|
||||
form.setAttribute("aria-busy", "true");
|
||||
if (submit) {
|
||||
submit.disabled = true;
|
||||
submit.textContent = "加载中…";
|
||||
}
|
||||
if (loading) loading.hidden = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -126,6 +122,32 @@
|
||||
});
|
||||
}
|
||||
|
||||
/* 操作结果通过 POST/Redirect/GET 返回。成功提示固定定位并自动消失,错误交给
|
||||
通用弹窗;两者都不占表格高度。页面读到结果后清掉临时查询参数,避免 F5
|
||||
重复弹出同一条反馈。 */
|
||||
function setupTransientFeedback() {
|
||||
var feedbacks = document.querySelectorAll("[data-transient-feedback]");
|
||||
if (!feedbacks.length) return;
|
||||
|
||||
var paramsToRemove = {};
|
||||
feedbacks.forEach(function (feedback) {
|
||||
(feedback.getAttribute("data-transient-query") || "").split(/\s+/).forEach(function (name) {
|
||||
if (name) paramsToRemove[name] = true;
|
||||
});
|
||||
if (feedback.hasAttribute("data-auto-dismiss-toast")) {
|
||||
window.setTimeout(function () {
|
||||
feedback.hidden = true;
|
||||
feedback.remove();
|
||||
}, 4000);
|
||||
}
|
||||
});
|
||||
|
||||
var current = new URL(window.location.href);
|
||||
Object.keys(paramsToRemove).forEach(function (name) { current.searchParams.delete(name); });
|
||||
var cleanURL = current.pathname + (current.search ? current.search : "") + current.hash;
|
||||
window.history.replaceState(window.history.state, "", cleanURL);
|
||||
}
|
||||
|
||||
/* ── 全选 / 反选 ──────────────────────────────
|
||||
表头的勾选框控制本表格所有行的勾选框。 */
|
||||
function setupCheckAll(root) {
|
||||
@@ -888,6 +910,7 @@
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
setupModuleNavigationState();
|
||||
setupPageSizeForms();
|
||||
setupTransientFeedback();
|
||||
document.querySelectorAll("table").forEach(setupCheckAll);
|
||||
setupConfirmDelete();
|
||||
setupConfirmSubmit();
|
||||
|
||||
Reference in New Issue
Block a user