feat(frontend): add position filter to strategy plaza
This commit is contained in:
parent
e6ab2f113f
commit
c6f3555bd3
@ -320,11 +320,13 @@ export default function StrategyPlazaPage() {
|
|||||||
type SymbolFilter = "ALL" | "BTCUSDT" | "ETHUSDT" | "XRPUSDT" | "SOLUSDT";
|
type SymbolFilter = "ALL" | "BTCUSDT" | "ETHUSDT" | "XRPUSDT" | "SOLUSDT";
|
||||||
type StatusFilter = "all" | "running" | "paused" | "error";
|
type StatusFilter = "all" | "running" | "paused" | "error";
|
||||||
type PnlFilter = "all" | "positive" | "negative";
|
type PnlFilter = "all" | "positive" | "negative";
|
||||||
|
type PositionFilter = "all" | "with_open" | "no_open";
|
||||||
type SortKey = "recent" | "net_usdt_desc" | "net_usdt_asc" | "pnl24h_desc" | "pnl24h_asc";
|
type SortKey = "recent" | "net_usdt_desc" | "net_usdt_asc" | "pnl24h_desc" | "pnl24h_asc";
|
||||||
|
|
||||||
const [symbolFilter, setSymbolFilter] = useState<SymbolFilter>("ALL");
|
const [symbolFilter, setSymbolFilter] = useState<SymbolFilter>("ALL");
|
||||||
const [statusFilter, setStatusFilter] = useState<StatusFilter>("all");
|
const [statusFilter, setStatusFilter] = useState<StatusFilter>("all");
|
||||||
const [pnlFilter, setPnlFilter] = useState<PnlFilter>("all");
|
const [pnlFilter, setPnlFilter] = useState<PnlFilter>("all");
|
||||||
|
const [positionFilter, setPositionFilter] = useState<PositionFilter>("all");
|
||||||
const [sortKey, setSortKey] = useState<SortKey>("net_usdt_desc");
|
const [sortKey, setSortKey] = useState<SortKey>("net_usdt_desc");
|
||||||
|
|
||||||
const fetchData = useCallback(async () => {
|
const fetchData = useCallback(async () => {
|
||||||
@ -366,6 +368,8 @@ export default function StrategyPlazaPage() {
|
|||||||
if (statusFilter !== "all" && s.status !== statusFilter) return false;
|
if (statusFilter !== "all" && s.status !== statusFilter) return false;
|
||||||
if (pnlFilter === "positive" && s.net_usdt <= 0) return false;
|
if (pnlFilter === "positive" && s.net_usdt <= 0) return false;
|
||||||
if (pnlFilter === "negative" && s.net_usdt >= 0) return false;
|
if (pnlFilter === "negative" && s.net_usdt >= 0) return false;
|
||||||
|
if (positionFilter === "with_open" && s.open_positions <= 0) return false;
|
||||||
|
if (positionFilter === "no_open" && s.open_positions > 0) return false;
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
@ -469,7 +473,7 @@ export default function StrategyPlazaPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* 右侧:状态 + 排序 */}
|
{/* 右侧:状态 + 持仓 + 排序 */}
|
||||||
<div className="flex flex-wrap items-center gap-2">
|
<div className="flex flex-wrap items-center gap-2">
|
||||||
<div className="flex items-center gap-1 text-[11px] text-slate-400">
|
<div className="flex items-center gap-1 text-[11px] text-slate-400">
|
||||||
<span>状态:</span>
|
<span>状态:</span>
|
||||||
@ -495,6 +499,29 @@ export default function StrategyPlazaPage() {
|
|||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
<div className="flex items-center gap-1 text-[11px] text-slate-400">
|
||||||
|
<span>持仓:</span>
|
||||||
|
{[
|
||||||
|
{ key: "all" as PositionFilter, label: "全部" },
|
||||||
|
{ key: "with_open" as PositionFilter, label: "有持仓" },
|
||||||
|
{ key: "no_open" as PositionFilter, label: "无持仓" },
|
||||||
|
].map((opt) => {
|
||||||
|
const active = positionFilter === opt.key;
|
||||||
|
return (
|
||||||
|
<button
|
||||||
|
key={opt.key}
|
||||||
|
onClick={() => setPositionFilter(opt.key)}
|
||||||
|
className={`px-2 py-0.5 rounded-full border text-[11px] ${
|
||||||
|
active
|
||||||
|
? "border-amber-500 bg-amber-50 text-amber-600"
|
||||||
|
: "border-slate-200 text-slate-500 hover:bg-slate-50"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{opt.label}
|
||||||
|
</button>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
<div className="flex items-center gap-1 text-[11px] text-slate-400">
|
<div className="flex items-center gap-1 text-[11px] text-slate-400">
|
||||||
<span>排序:</span>
|
<span>排序:</span>
|
||||||
<select
|
<select
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user