Add refresh buttons to hub plan and calculator pages.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -188,6 +188,37 @@
|
||||
fillExchangeSelect($("calc-roll-exchange"));
|
||||
}
|
||||
|
||||
function fmtRefreshTime() {
|
||||
const d = new Date();
|
||||
const h = String(d.getHours()).padStart(2, "0");
|
||||
const m = String(d.getMinutes()).padStart(2, "0");
|
||||
const s = String(d.getSeconds()).padStart(2, "0");
|
||||
return h + ":" + m + ":" + s;
|
||||
}
|
||||
|
||||
async function refreshPage() {
|
||||
const btn = $("calc-btn-refresh");
|
||||
const status = $("calc-refresh-status");
|
||||
const trendId = $("calc-trend-exchange") && $("calc-trend-exchange").value;
|
||||
const rollId = $("calc-roll-exchange") && $("calc-roll-exchange").value;
|
||||
if (btn) btn.disabled = true;
|
||||
if (status) status.textContent = "刷新中…";
|
||||
Object.keys(marketCache).forEach(function (k) {
|
||||
delete marketCache[k];
|
||||
});
|
||||
try {
|
||||
await loadCalculatorExchanges();
|
||||
fillExchangeSelect($("calc-trend-exchange"), trendId);
|
||||
fillExchangeSelect($("calc-roll-exchange"), rollId);
|
||||
await Promise.all([refreshMarket("calc-trend"), refreshMarket("calc-roll")]);
|
||||
if (status) status.textContent = "已刷新 " + fmtRefreshTime();
|
||||
} catch (err) {
|
||||
if (status) status.textContent = "刷新失败";
|
||||
} finally {
|
||||
if (btn) btn.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
function bindMarket(prefix) {
|
||||
const exchangeEl = $(prefix + "-exchange");
|
||||
const baseEl = $(prefix + "-base");
|
||||
@@ -557,12 +588,23 @@
|
||||
bindRollLegsUI();
|
||||
bindMarket("calc-trend");
|
||||
bindMarket("calc-roll");
|
||||
const refreshBtn = $("calc-btn-refresh");
|
||||
if (refreshBtn) {
|
||||
refreshBtn.addEventListener("click", function () {
|
||||
void refreshPage();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
window.hubCalculatorPage = {
|
||||
init: function () {
|
||||
bindOnce();
|
||||
if (inited) {
|
||||
void refreshPage();
|
||||
return;
|
||||
}
|
||||
void bindOnce();
|
||||
},
|
||||
refresh: refreshPage,
|
||||
destroy: function () {},
|
||||
};
|
||||
})();
|
||||
|
||||
@@ -66,6 +66,10 @@
|
||||
<h1><span class="head-tag">PLN</span> 开仓计划</h1>
|
||||
<p class="page-desc">计划录入 · 进行中跟踪 · 历史归档与胜率统计</p>
|
||||
</div>
|
||||
<div class="toolbar">
|
||||
<button type="button" id="plan-btn-refresh" class="primary">刷新</button>
|
||||
<span id="plan-refresh-status" class="toolbar-meta"></span>
|
||||
</div>
|
||||
<div class="plan-layout">
|
||||
<aside class="plan-left-panel">
|
||||
<section class="plan-form-section card">
|
||||
@@ -709,6 +713,10 @@
|
||||
<h1><span class="head-tag">CAL</span> 策略计算器</h1>
|
||||
<p class="page-desc">历史行情测算 · 以损定仓 · 价格均为手动输入</p>
|
||||
</div>
|
||||
<div class="toolbar">
|
||||
<button type="button" id="calc-btn-refresh" class="primary">刷新</button>
|
||||
<span id="calc-refresh-status" class="toolbar-meta"></span>
|
||||
</div>
|
||||
<div class="calc-layout">
|
||||
<section class="calc-card card">
|
||||
<h2>趋势回调计算器</h2>
|
||||
@@ -1039,8 +1047,8 @@
|
||||
<script src="https://unpkg.com/lightweight-charts@4.2.0/dist/lightweight-charts.standalone.production.js"></script>
|
||||
<script src="/assets/chart_draw.js?v=20260609-market-day-split"></script>
|
||||
<script src="/assets/chart.js?v=20260609-prev-day-lines"></script>
|
||||
<script src="/assets/plan.js?v=20260614-entry-plan-scheme"></script>
|
||||
<script src="/assets/calculator.js?v=2"></script>
|
||||
<script src="/assets/plan.js?v=20260614-plan-refresh"></script>
|
||||
<script src="/assets/calculator.js?v=3"></script>
|
||||
<script src="/assets/archive.js?v=20260612-archive-ai-chat"></script>
|
||||
<script src="/assets/funds.js?v=20260609-hub-funds-fold"></script>
|
||||
<script src="/assets/dashboard.js?v=20260612-dash-monitor-count"></script>
|
||||
|
||||
@@ -349,6 +349,31 @@
|
||||
await Promise.all([loadActive(), loadHistory(), loadStats()]);
|
||||
}
|
||||
|
||||
function fmtRefreshTime() {
|
||||
const d = new Date();
|
||||
const h = String(d.getHours()).padStart(2, "0");
|
||||
const m = String(d.getMinutes()).padStart(2, "0");
|
||||
const s = String(d.getSeconds()).padStart(2, "0");
|
||||
return h + ":" + m + ":" + s;
|
||||
}
|
||||
|
||||
async function refreshPage() {
|
||||
const btn = $("plan-btn-refresh");
|
||||
const status = $("plan-refresh-status");
|
||||
if (btn) btn.disabled = true;
|
||||
if (status) status.textContent = "刷新中…";
|
||||
try {
|
||||
await loadMeta();
|
||||
await refreshAll();
|
||||
if (status) status.textContent = "已刷新 " + fmtRefreshTime();
|
||||
} catch (e) {
|
||||
toast(e.message || "刷新失败", true);
|
||||
if (status) status.textContent = "刷新失败";
|
||||
} finally {
|
||||
if (btn) btn.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
function readCreateForm() {
|
||||
const dir = document.querySelector('input[name="plan-direction"]:checked');
|
||||
return {
|
||||
@@ -524,6 +549,13 @@
|
||||
}
|
||||
|
||||
function bindEvents() {
|
||||
const refreshBtn = $("plan-btn-refresh");
|
||||
if (refreshBtn) {
|
||||
refreshBtn.addEventListener("click", function () {
|
||||
void refreshPage();
|
||||
});
|
||||
}
|
||||
|
||||
const createForm = $("plan-create-form");
|
||||
if (createForm) {
|
||||
createForm.addEventListener("submit", function (ev) {
|
||||
@@ -719,7 +751,7 @@
|
||||
|
||||
async function init() {
|
||||
if (inited) {
|
||||
await refreshAll();
|
||||
await refreshPage();
|
||||
return;
|
||||
}
|
||||
inited = true;
|
||||
@@ -727,6 +759,8 @@
|
||||
try {
|
||||
await loadMeta();
|
||||
await refreshAll();
|
||||
const status = $("plan-refresh-status");
|
||||
if (status) status.textContent = "已刷新 " + fmtRefreshTime();
|
||||
} catch (e) {
|
||||
toast(e.message || "加载失败", true);
|
||||
}
|
||||
@@ -734,5 +768,5 @@
|
||||
|
||||
function destroy() {}
|
||||
|
||||
window.hubPlanPage = { init: init, destroy: destroy };
|
||||
window.hubPlanPage = { init: init, refresh: refreshPage, destroy: destroy };
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user