Add lean review issues: up to two problem tags plus short note.

Persist review_issues, enforce max two on save, and show issue breakdown in stats.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-10-21 20:56:32 +08:00
parent 1bf353c505
commit 01ed885646
6 changed files with 165 additions and 10 deletions
+14 -2
View File
@@ -278,6 +278,7 @@ def register_routes(app: Flask) -> None:
t["hold_duration"] = _fmt_hold(t.get("open_time"), t.get("close_time"))
if not closed and t.get("open_time"):
t["hold_duration"] = t["hold_duration"] + "(持仓中)"
t["review_issues_list"] = database.parse_review_issues(t.get("review_issues"))
def _dashboard_payload(u: dict) -> dict:
# 总览只看当前持仓(未平仓),历史成交在「交易复盘」
@@ -1005,12 +1006,17 @@ def register_routes(app: Flask) -> None:
mid - span / 2.0,
mid + span / 2.0,
)
trade["review_issues_list"] = database.parse_review_issues(
trade.get("review_issues")
)
return render_template(
"record_detail.html",
trade=trade,
charts=charts,
entry_styles=database.ENTRY_STYLES,
entry_patterns=database.ENTRY_PATTERN_TYPES,
review_issues=database.REVIEW_ISSUES,
review_issues_max=database.REVIEW_ISSUES_MAX,
)
@app.post("/records/<int:tid>/annotate")
@@ -1019,6 +1025,12 @@ def register_routes(app: Flask) -> None:
u = current_user()
entry_style = (request.form.get("entry_style") or "").strip()
note = (request.form.get("review_note") or "").strip()
raw_issues = request.form.getlist("review_issues")
issues = database.parse_review_issues(raw_issues)
if len(issues) > database.REVIEW_ISSUES_MAX:
flash(f"主要问题最多选 {database.REVIEW_ISSUES_MAX} 个", "error")
return redirect(url_for("record_detail", tid=tid))
issues_s = database.serialize_review_issues(issues)
allowed = set(database.ENTRY_STYLES)
with database.get_db() as conn:
trade = database.get_trade(conn, tid)
@@ -1031,8 +1043,8 @@ def register_routes(app: Flask) -> None:
flash("入场形式不在可选列表中", "error")
return redirect(url_for("record_detail", tid=tid))
conn.execute(
"UPDATE trades SET entry_style=?, review_note=? WHERE id=?",
(entry_style, note, tid),
"UPDATE trades SET entry_style=?, review_issues=?, review_note=? WHERE id=?",
(entry_style, issues_s, note, tid),
)
flash("复盘标注已保存", "ok")
return redirect(url_for("record_detail", tid=tid))