From 3f96c9c6502243b06efd4bb34a189e72e3a5557c Mon Sep 17 00:00:00 2001
From: yearning <10538594+wangweifeng1999@user.noreply.gitee.com>
Date: 星期一, 28 九月 2026 19:24:55 +0800
Subject: [PATCH] 复制项目
---
frontend/src/scoreQueryParams.ts | 40 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 40 insertions(+), 0 deletions(-)
diff --git a/frontend/src/scoreQueryParams.ts b/frontend/src/scoreQueryParams.ts
new file mode 100644
index 0000000..90ee1da
--- /dev/null
+++ b/frontend/src/scoreQueryParams.ts
@@ -0,0 +1,40 @@
+export type ScoreListQuery = {
+ name?: string;
+ id_card?: string;
+ subject?: string;
+ page?: number;
+ page_size?: number;
+};
+
+export function readScoreListQuery(search: string | URLSearchParams): ScoreListQuery {
+ const sp = typeof search === "string" ? new URLSearchParams(search) : search;
+ const page = parseInt(sp.get("page") || "1", 10);
+ const page_size = parseInt(sp.get("page_size") || "20", 10);
+ return {
+ name: sp.get("name") || undefined,
+ id_card: sp.get("id_card") || undefined,
+ subject: sp.get("subject") || undefined,
+ page: Number.isFinite(page) && page > 0 ? page : 1,
+ page_size: Number.isFinite(page_size) && page_size > 0 ? page_size : 20,
+ };
+}
+
+export function writeScoreListQuery(q: ScoreListQuery): URLSearchParams {
+ const sp = new URLSearchParams();
+ if (q.name) sp.set("name", q.name);
+ if (q.id_card) sp.set("id_card", q.id_card);
+ if (q.subject) sp.set("subject", q.subject);
+ if (q.page && q.page > 1) sp.set("page", String(q.page));
+ if (q.page_size && q.page_size !== 20) sp.set("page_size", String(q.page_size));
+ return sp;
+}
+
+export function scoresListPath(q: ScoreListQuery = {}): string {
+ const s = writeScoreListQuery(q).toString();
+ return s ? `/scores?${s}` : "/scores";
+}
+
+export function attemptDetailPath(attemptId: string, q: ScoreListQuery = {}): string {
+ const s = writeScoreListQuery(q).toString();
+ return s ? `/attempts/${attemptId}?${s}` : `/attempts/${attemptId}`;
+}
--
Gitblit v1.8.0