diff --git a/static/hub.css b/static/hub.css
index 82079e0..d0009c2 100644
--- a/static/hub.css
+++ b/static/hub.css
@@ -98,6 +98,36 @@ body.page-login .main {
font-weight: 600;
letter-spacing: 0.04em;
}
+.overview-bj-clock {
+ margin-left: auto;
+ display: inline-flex;
+ align-items: baseline;
+ gap: 8px;
+ padding: 6px 12px;
+ border-radius: 999px;
+ border: 1px solid rgba(56, 189, 248, 0.22);
+ background: rgba(8, 14, 24, 0.72);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
+}
+.overview-bj-label {
+ font-size: 0.72rem;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ color: var(--accent);
+ font-weight: 600;
+}
+.overview-bj-time {
+ font-family: var(--font-display);
+ font-size: 0.95rem;
+ font-weight: 600;
+ letter-spacing: 0.04em;
+ color: var(--text);
+ font-variant-numeric: tabular-nums;
+}
+@media (max-width: 720px) {
+ .page-head { flex-wrap: wrap; }
+ .overview-bj-clock { margin-left: 0; order: 3; width: 100%; justify-content: center; }
+}
.muted { color: var(--muted); font-size: 0.9rem; }
.flash {
background: rgba(14, 165, 233, 0.12);
diff --git a/static/hub.js b/static/hub.js
index 0beb176..fe894e0 100644
--- a/static/hub.js
+++ b/static/hub.js
@@ -331,9 +331,52 @@
}
}
+ function formatBeijingNow() {
+ try {
+ return new Intl.DateTimeFormat("zh-CN", {
+ timeZone: "Asia/Shanghai",
+ year: "numeric",
+ month: "2-digit",
+ day: "2-digit",
+ hour: "2-digit",
+ minute: "2-digit",
+ second: "2-digit",
+ hour12: false,
+ }).format(new Date());
+ } catch (e) {
+ const d = new Date();
+ const utc = d.getTime() + d.getTimezoneOffset() * 60000;
+ const bj = new Date(utc + 8 * 3600000);
+ const p = function (n) {
+ return String(n).padStart(2, "0");
+ };
+ return (
+ bj.getFullYear() +
+ "/" +
+ p(bj.getMonth() + 1) +
+ "/" +
+ p(bj.getDate()) +
+ " " +
+ p(bj.getHours()) +
+ ":" +
+ p(bj.getMinutes()) +
+ ":" +
+ p(bj.getSeconds())
+ );
+ }
+ }
+
+ function tickBeijingClock() {
+ const el = document.getElementById("overview-bj-time");
+ if (!el) return;
+ el.textContent = formatBeijingNow();
+ }
+
function boot() {
const btn = document.getElementById("btn-refresh");
if (btn) btn.addEventListener("click", refresh);
+ tickBeijingClock();
+ setInterval(tickBeijingClock, 1000);
refresh();
setInterval(refresh, 10000);
}
diff --git a/templates/dashboard.html b/templates/dashboard.html
index df6454e..4d2a9fb 100644
--- a/templates/dashboard.html
+++ b/templates/dashboard.html
@@ -1,14 +1,18 @@
-{% extends "base.html" %}
-{% block title %}总览 · 期权中控{% endblock %}
-{% block body %}
-期权持仓总览
-
-
加载中…
- -{% endblock %} -{% block scripts %} - - -{% endblock %} +{% extends "base.html" %} +{% block title %}总览 · 期权中控{% endblock %} +{% block body %} +加载中…
+ +{% endblock %} +{% block scripts %} + + +{% endblock %}