Fix options review empty lists when search box has symbol text.
Treat the filter as fuzzy q over underlying/inst/strategy (BTCUSDT->BTC) instead of exact strategy_tag, which always wiped pending rows. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -591,12 +591,29 @@ def enrich_trade_row(row: dict[str, Any], entry: dict[str, Any] | None = None) -
|
||||
return out
|
||||
|
||||
|
||||
def _review_search_tokens(q: str) -> list[str]:
|
||||
"""自由搜索词:BTCUSDT 同时匹配 BTC / BTCUSDT."""
|
||||
raw = str(q or "").strip()
|
||||
if not raw:
|
||||
return []
|
||||
tokens = [raw]
|
||||
u = raw.upper()
|
||||
for suf in ("-USDT", "-USD", "-USDC", "USDT", "USD", "USDC"):
|
||||
if u.endswith(suf) and len(u) > len(suf):
|
||||
base = u[: -len(suf)].rstrip("-_")
|
||||
if base and base not in {t.upper() for t in tokens}:
|
||||
tokens.append(base)
|
||||
break
|
||||
return tokens
|
||||
|
||||
|
||||
def _review_trades_filters(
|
||||
*,
|
||||
source_type: str | None = None,
|
||||
underlying: str | None = None,
|
||||
opt_type: str | None = None,
|
||||
strategy_tag: str | None = None,
|
||||
q: str | None = None,
|
||||
reviewed: str | None = None,
|
||||
include_hedge_legs: bool = False,
|
||||
closed_from: str | None = None,
|
||||
@@ -635,9 +652,26 @@ def _review_trades_filters(
|
||||
if closed_to:
|
||||
wheres.append("COALESCE(t.closed_at,'')<=?")
|
||||
args.append(closed_to)
|
||||
if strategy_tag:
|
||||
wheres.append("e.strategy_tag=?")
|
||||
# 兼容旧参数:精确策略标签;前端已改用 q 模糊搜索
|
||||
if strategy_tag and not q:
|
||||
wheres.append("UPPER(COALESCE(e.strategy_tag,''))=UPPER(?)")
|
||||
args.append(strategy_tag)
|
||||
search_tokens = _review_search_tokens(q or "")
|
||||
if search_tokens:
|
||||
token_ors: list[str] = []
|
||||
for tok in search_tokens:
|
||||
like = f"%{tok}%"
|
||||
token_ors.append(
|
||||
"""(
|
||||
UPPER(COALESCE(t.underlying,'')) LIKE UPPER(?)
|
||||
OR UPPER(COALESCE(t.inst_id,'')) LIKE UPPER(?)
|
||||
OR UPPER(COALESCE(t.legs_json,'')) LIKE UPPER(?)
|
||||
OR UPPER(COALESCE(e.strategy_tag,'')) LIKE UPPER(?)
|
||||
OR UPPER(COALESCE(e.result_tag,'')) LIKE UPPER(?)
|
||||
)"""
|
||||
)
|
||||
args.extend([like, like, like, like, like])
|
||||
wheres.append("(" + " OR ".join(token_ors) + ")")
|
||||
if reviewed == "1" or reviewed == "yes":
|
||||
wheres.append("e.id IS NOT NULL")
|
||||
elif reviewed == "0" or reviewed == "no":
|
||||
@@ -653,6 +687,7 @@ def count_review_trades(
|
||||
underlying: str | None = None,
|
||||
opt_type: str | None = None,
|
||||
strategy_tag: str | None = None,
|
||||
q: str | None = None,
|
||||
reviewed: str | None = None,
|
||||
include_hedge_legs: bool = False,
|
||||
closed_from: str | None = None,
|
||||
@@ -664,6 +699,7 @@ def count_review_trades(
|
||||
underlying=underlying,
|
||||
opt_type=opt_type,
|
||||
strategy_tag=strategy_tag,
|
||||
q=q,
|
||||
reviewed=reviewed,
|
||||
include_hedge_legs=include_hedge_legs,
|
||||
closed_from=closed_from,
|
||||
@@ -688,6 +724,7 @@ def list_review_trades(
|
||||
underlying: str | None = None,
|
||||
opt_type: str | None = None,
|
||||
strategy_tag: str | None = None,
|
||||
q: str | None = None,
|
||||
reviewed: str | None = None,
|
||||
include_hedge_legs: bool = False,
|
||||
closed_from: str | None = None,
|
||||
@@ -701,6 +738,7 @@ def list_review_trades(
|
||||
underlying=underlying,
|
||||
opt_type=opt_type,
|
||||
strategy_tag=strategy_tag,
|
||||
q=q,
|
||||
reviewed=reviewed,
|
||||
include_hedge_legs=include_hedge_legs,
|
||||
closed_from=closed_from,
|
||||
|
||||
Reference in New Issue
Block a user