refactor: establish standalone application boundary
This commit is contained in:
@@ -4,9 +4,8 @@ window.XiaobaiPageModules.register("pools", [
|
||||
"downView",
|
||||
"yesterdayView",
|
||||
"performanceView",
|
||||
]);
|
||||
], { bind: bindPoolEvents });
|
||||
|
||||
/* PRESERVATION-SOURCE-BEGIN app.js:1517-1915 */
|
||||
function getVisibleStocks() {
|
||||
if (!state.dashboard) return [];
|
||||
let rows = [...(state.dashboard.limits || [])];
|
||||
@@ -406,4 +405,93 @@ function renderPerformanceConclusion(rows) {
|
||||
`;
|
||||
}
|
||||
|
||||
/* PRESERVATION-SOURCE-END app.js:1517-1915 */
|
||||
|
||||
function changeSort(key) {
|
||||
if (state.sortKey === key) state.sortDirection = state.sortDirection === "asc" ? "desc" : "asc";
|
||||
else {
|
||||
state.sortKey = key;
|
||||
state.sortDirection = ["name", "code", "sector", "first_time", "last_time"].includes(key) ? "asc" : "desc";
|
||||
}
|
||||
renderLimitTable();
|
||||
}
|
||||
|
||||
function compareRows(left, right) {
|
||||
const leftValue = left[state.sortKey] ?? "";
|
||||
const rightValue = right[state.sortKey] ?? "";
|
||||
let result = typeof leftValue === "number" || typeof rightValue === "number"
|
||||
? number(leftValue) - number(rightValue)
|
||||
: String(leftValue).localeCompare(String(rightValue), "zh-CN", { numeric: true });
|
||||
if (result === 0 && state.sortKey !== "first_time") result = String(left.first_time || "").localeCompare(String(right.first_time || ""));
|
||||
return state.sortDirection === "asc" ? result : -result;
|
||||
}
|
||||
|
||||
function updateSortHeaders() {
|
||||
document.querySelectorAll("#limitTable th[data-sort]").forEach((header) => {
|
||||
header.classList.remove("sort-asc", "sort-desc", "sorted");
|
||||
const active = header.dataset.sort === state.sortKey;
|
||||
if (active) header.classList.add(state.sortDirection === "asc" ? "sort-asc" : "sort-desc", "sorted");
|
||||
const arrow = header.querySelector(".arr");
|
||||
if (arrow) arrow.textContent = active ? (state.sortDirection === "asc" ? "▲" : "▼") : "↕";
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function bindPoolEvents() {
|
||||
document.querySelector("#stockSearch").addEventListener("input", (event) => {
|
||||
state.query = event.target.value.trim().toLowerCase();
|
||||
renderLimitTable();
|
||||
});
|
||||
document.querySelectorAll("[data-table-search]").forEach((input) => {
|
||||
input.addEventListener("input", () => {
|
||||
const query = input.value.trim().toLowerCase();
|
||||
const body = document.querySelector(`#${CSS.escape(input.dataset.tableSearch)}`);
|
||||
body?.querySelectorAll("tr").forEach((row) => {
|
||||
row.hidden = Boolean(query) && !row.textContent.toLowerCase().includes(query);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelectorAll("[data-filter]").forEach((button) => {
|
||||
button.addEventListener("click", () => {
|
||||
document.querySelectorAll("[data-filter]").forEach((item) => item.classList.remove("active"));
|
||||
button.classList.add("active");
|
||||
state.filter = button.dataset.filter;
|
||||
renderLimitTable();
|
||||
});
|
||||
});
|
||||
document.querySelectorAll("#limitTable th[data-sort]").forEach((header) => {
|
||||
header.addEventListener("click", () => changeSort(header.dataset.sort));
|
||||
});
|
||||
document.querySelector("#brokenSearch").addEventListener("input", (event) => {
|
||||
state.brokenQuery = event.target.value.trim().toLowerCase();
|
||||
renderBrokenTable(state.dashboard?.broken || []);
|
||||
});
|
||||
document.querySelectorAll("#brokenTable th[data-broken-sort]").forEach((header) => {
|
||||
header.addEventListener("click", () => changeBrokenSort(header.dataset.brokenSort));
|
||||
});
|
||||
document.querySelector("#downSearch").addEventListener("input", (event) => {
|
||||
state.downQuery = event.target.value.trim().toLowerCase();
|
||||
renderDownTable(state.dashboard?.down_limits || []);
|
||||
});
|
||||
document.querySelectorAll("#downTable th[data-down-sort]").forEach((header) => {
|
||||
header.addEventListener("click", () => changeDownSort(header.dataset.downSort));
|
||||
});
|
||||
document.querySelector("#yesterdaySearch").addEventListener("input", (event) => {
|
||||
state.yesterdayQuery = event.target.value.trim().toLowerCase();
|
||||
renderYesterdayTable(state.dashboard?.yesterday_limits || []);
|
||||
});
|
||||
document.querySelectorAll("[data-yesterday-filter]").forEach((button) => {
|
||||
button.addEventListener("click", () => {
|
||||
state.yesterdayFilter = button.dataset.yesterdayFilter;
|
||||
renderYesterdayTable(state.dashboard?.yesterday_limits || []);
|
||||
});
|
||||
});
|
||||
document.querySelectorAll("#yesterdayTable th[data-yesterday-sort]").forEach((header) => {
|
||||
header.addEventListener("click", () => changeYesterdaySort(header.dataset.yesterdaySort));
|
||||
});
|
||||
document.querySelector("#exportButton").addEventListener("click", exportStocks);
|
||||
document.querySelector("#brokenExportButton").addEventListener("click", exportBroken);
|
||||
document.querySelector("#downExportButton").addEventListener("click", exportDown);
|
||||
document.querySelector("#yesterdayExportButton").addEventListener("click", exportYesterday);
|
||||
document.querySelector("#reasonForm").addEventListener("submit", saveReasonOverride);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user