refactor: establish standalone application boundary

This commit is contained in:
leefer
2026-08-03 21:42:25 +08:00
parent cc5fb8d73e
commit e1e76cd51e
324 changed files with 63090 additions and 44743 deletions
File diff suppressed because it is too large Load Diff
+55
View File
@@ -0,0 +1,55 @@
<section id="themeLibraryView" class="workspace-view page redesigned-theme-view">
<header class="theme-page-head-v2 lad-head">
<div class="theme-title-v2">
<div><h2>题材库</h2><span>题材行情与成分股</span></div>
<span id="themeDateLabel" class="theme-date-v2">--</span>
</div>
<div class="theme-head-actions-v2">
<label class="theme-search-v2">
<i data-lucide="search" aria-hidden="true"></i>
<span class="visually-hidden">搜索题材</span>
<input id="themeSearch" type="search" placeholder="搜索题材名称或代码" autocomplete="off">
</label>
<button id="themeRefreshButton" class="button theme-refresh-v2" type="button"><i data-lucide="refresh-cw"></i><span>刷新题材</span></button>
</div>
</header>
<div id="themeSummary" class="theme-summary-v2" aria-live="polite"></div>
<div class="theme-library-workspace-v2 theme-grid">
<aside class="theme-directory-card-v2 card" aria-label="题材列表">
<header class="theme-card-head-v2 card-h">
<div><h3>题材排行</h3><span>按当日热度与行情排列</span></div>
<strong id="themeResultCount">0 个</strong>
</header>
<div class="theme-directory-labels-v2" aria-hidden="true"><span>题材</span><span>当日涨跌</span></div>
<div id="themeDirectory" class="theme-directory-v2"></div>
</aside>
<section class="theme-detail-column-v2" aria-live="polite">
<div id="themeDetailEmpty" class="empty-state theme-detail-empty-v2">选择题材查看行情与成分股</div>
<div id="themeDetailContent" class="theme-detail-stack-v2" hidden>
<section class="theme-market-card-v2 card">
<header class="theme-detail-heading-v2">
<div class="theme-detail-identity-v2">
<span class="theme-detail-kicker-v2">题材行情</span>
<div class="theme-detail-name-line-v2"><h3 id="themeDetailName">--</h3><small id="themeDetailCode">--</small></div>
</div>
<div class="theme-change-v2"><span>当日涨幅</span><strong id="themeDetailChange">--</strong></div>
</header>
<div id="themeDetailMetrics" class="theme-detail-metrics-v2"></div>
</section>
<section class="theme-members-card-v2 card">
<header class="theme-members-heading-v2">
<div><h3>成分股</h3><span>点击股票查看完整行情详情</span></div>
<strong id="themeMemberCount">0 只</strong>
</header>
<div class="theme-members-frame-v2 tbl-wrap">
<table class="data-table tbl theme-members-table-v2"><thead><tr><th class="num">序号</th><th>股票</th><th class="number num sortable">涨跌幅(%<span class="arr"></span></th><th class="number num sortable">收盘价(元)<span class="arr"></span></th><th class="number num sortable">成交额(亿)<span class="arr"></span></th></tr></thead><tbody id="themeMemberTableBody"></tbody></table>
</div>
</section>
</div>
</section>
</div>
</section>
+13 -2
View File
@@ -1,8 +1,8 @@
window.XiaobaiPageModules.register("themes", ["themeLibraryView"], {
bind: bindThemeLibraryEvents,
enter: ["loadThemes"],
});
/* PRESERVATION-SOURCE-BEGIN app.js:2482-2583 */
async function loadThemeLibrary(force = false) {
if (state.themeLoading) return;
state.themeLoading = true;
@@ -105,4 +105,15 @@ function renderThemeDetail() {
renderThemeDirectory();
}
/* PRESERVATION-SOURCE-END app.js:2482-2583 */
function bindThemeLibraryEvents() {
document.querySelector("#themeRefreshButton").addEventListener("click", () => loadThemeLibrary(true));
document.querySelector("#themeSearch").addEventListener("input", (event) => {
state.themeQuery = event.target.value.trim().toLocaleLowerCase("zh-CN");
renderThemeDirectory();
});
document.querySelector("#themeDirectory").addEventListener("click", (event) => {
const button = event.target.closest("[data-theme-code]");
if (button) selectTheme(button.dataset.themeCode);
});
}