Improve desktop settings and trades list UX.

Fold backup/WeCom help into rules; backup list one-per-line (5 visible); trades table with 10/page; hide funds bar on mobile.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-29 19:31:30 +08:00
parent 0ee1d8be5d
commit e1da830eac
4 changed files with 311 additions and 73 deletions
+40 -40
View File
@@ -51,6 +51,7 @@ export default function SettingsPage() {
const [stratSub, setStratSub] = useState<StratSub>("position");
const [stratRulesOpen, setStratRulesOpen] = useState(false);
const [runtimeRulesOpen, setRuntimeRulesOpen] = useState(false);
const [backupRulesOpen, setBackupRulesOpen] = useState(false);
const [newUsername, setNewUsername] = useState(getUsername() || "admin");
const [currentPassword, setCurrentPassword] = useState("");
@@ -1000,18 +1001,6 @@ export default function SettingsPage() {
<section className="settings-section">
<h3></h3>
<p style={{ color: "var(--muted)", marginTop: 0 }}>
Webhook MarkdownOPEN/CLOSE/START/PAUSE/FAULT
<span className="mono">
{" "}
{wecomMeta?.venue_label ||
(runtime?.mode === "LIVE"
? `实盘·${(runtime.exchange || "okx").toUpperCase()}`
: "模拟盘")}
</span>
////·
</p>
<div className="settings-fields">
<div className="field">
<label htmlFor="wecomEn"></label>
@@ -1082,6 +1071,17 @@ export default function SettingsPage() {
= LIVE
Passphrase
</li>
<li>
Webhook MarkdownOPEN/CLOSE/START/PAUSE/FAULT
<span className="mono">
{wecomMeta?.venue_label ||
(runtime?.mode === "LIVE"
? `实盘·${(runtime.exchange || "okx").toUpperCase()}`
: "模拟盘")}
</span>
////·
</li>
<li>
Webhook
URL 5
@@ -1336,14 +1336,6 @@ export default function SettingsPage() {
<form onSubmit={onSaveBackupSettings}>
<section className="settings-section">
<h3></h3>
<p style={{ color: "var(--muted)", marginTop: 0 }}>
SQLite +{" "}
<span className="mono">.env</span>
<span className="mono">
{" "}
{backup?.backup_dir || "/root/eth_hedge_backups"}
</span>
</p>
<div className="settings-fields">
<div className="field">
<label htmlFor="bakAuto"></label>
@@ -1401,21 +1393,12 @@ export default function SettingsPage() {
<section className="settings-section">
<h3></h3>
{backup?.items && backup.items.length > 0 ? (
<div className="settings-fields">
<div className="backup-list" role="list">
{backup.items.map((it) => (
<div
key={it.name}
className="field"
style={{
display: "flex",
flexWrap: "wrap",
gap: 8,
alignItems: "center",
}}
>
<span className="mono" style={{ flex: "1 1 220px" }}>
<div key={it.name} className="backup-list-row" role="listitem">
<span className="mono backup-list-name">
{it.name}
<span style={{ color: "var(--muted)" }}>
<span className="backup-list-meta">
{" "}
· {(it.size_bytes / 1024).toFixed(1)} KB ·{" "}
{new Date(it.mtime_ms).toLocaleString()}
@@ -1439,13 +1422,6 @@ export default function SettingsPage() {
<section className="settings-section">
<h3></h3>
<p style={{ color: "var(--muted)", marginTop: 0 }}>
zip{" "}
<span className="mono">.env</span>
{" "}
<span className="mono">RESTORE</span>
</p>
<div className="settings-fields">
<div className="field">
<label htmlFor="bakFile"> zip</label>
@@ -1480,6 +1456,30 @@ export default function SettingsPage() {
</button>
</div>
</section>
<RulesFold
open={backupRulesOpen}
onToggle={() => setBackupRulesOpen((v) => !v)}
>
<ul className="settings-rules-list">
<li>
SQLite +{" "}
<span className="mono">.env</span>
<span className="mono">
{backup?.backup_dir || "/root/eth_hedge_backups"}
</span>
</li>
<li>
zip{" "}
<span className="mono">.env</span>
{" "}
<span className="mono">RESTORE</span>
</li>
</ul>
</RulesFold>
</div>
) : null}
</div>