From 951a6e0826d91befc778b7625729fc5dea855e10 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Tue, 27 Oct 2026 12:02:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=96=B0=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E4=BD=9C=E5=93=81=E5=B1=95=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 作品改成缩略图卡片:手动排序时用 ← → 调整顺序,有新提交的显示“换成最新的”, 点缩略图在抽屉里打开批改面板,撤下用页面内确认 - 奖项列表可以上下调整顺序(不用再填排序数字);设置有改动才能保存;删除奖项说明会撤下几件作品 - 去掉按提交 ID 添加作品(前端、类型和 /manage/submissions 接口),改为提示在批改面板里“加入作品展” - 管理接口返回作品代码,画缩略图用 Co-Authored-By: Claude Opus 5.5 --- client/src/api.ts | 10 - client/src/pages/ShowcaseManage.vue | 1098 +++++++++++++-------------- client/src/utils/type.ts | 14 +- server/src/routes/showcase.ts | 30 +- 4 files changed, 549 insertions(+), 603 deletions(-) diff --git a/client/src/api.ts b/client/src/api.ts index 142ab91..e489a5c 100644 --- a/client/src/api.ts +++ b/client/src/api.ts @@ -17,7 +17,6 @@ import type { AwardItemManageOut, GradebookOut, GradebookQuery, - ShowcaseSubmissionLookupOut, ShowcaseDetail, PromptRound, RandomRatingItem, @@ -519,15 +518,6 @@ export const Showcase = { return res.data }, - async findSubmissionForAward( - submissionId: string, - ): Promise { - const res = await http.get( - `/submission/showcase/manage/submissions/${submissionId}`, - ) - return res.data - }, - async addAwardItem( id: number, payload: AwardItemIn, diff --git a/client/src/pages/ShowcaseManage.vue b/client/src/pages/ShowcaseManage.vue index ae6b1d2..f9500a9 100644 --- a/client/src/pages/ShowcaseManage.vue +++ b/client/src/pages/ShowcaseManage.vue @@ -1,427 +1,238 @@ diff --git a/client/src/utils/type.ts b/client/src/utils/type.ts index 16e4737..d1e06db 100644 --- a/client/src/utils/type.ts +++ b/client/src/utils/type.ts @@ -302,17 +302,6 @@ export interface AwardItemUpdateIn { sort_order: number } -export interface ShowcaseSubmissionLookupOut { - submission_id: string - username: string - task_title: string - task_display: number - task_type: TASK_TYPE - score: number - view_count: number - has_prompt_chain: boolean -} - export interface AwardItemManageOut { id: number submission_id: string @@ -326,6 +315,9 @@ export interface AwardItemManageOut { awarded_at: string has_prompt_chain: boolean is_stale: boolean + html: string | null + css: string | null + js: string | null } export interface ShowcaseDetail { diff --git a/server/src/routes/showcase.ts b/server/src/routes/showcase.ts index faaa3b9..9c65374 100644 --- a/server/src/routes/showcase.ts +++ b/server/src/routes/showcase.ts @@ -41,6 +41,10 @@ function itemManageOut(r: any) { awarded_at: iso(r.awarded_at), has_prompt_chain: bool(r.has_prompt_chain), is_stale: bool(r.is_stale), + // 管理页的缩略图要用 + html: r.html, + css: r.css, + js: r.js, } } @@ -164,32 +168,6 @@ router.delete("/manage/awards/:award_id", (c) => { return c.json({ message: "删除成功" }) }) -router.get("/manage/submissions/:submission_id", (c) => { - requireAdmin(c) - const id = uuidParam(c, "submission_id") - const s = orNotFound( - get( - `SELECT s.id, u.username, t.title AS task_title, t.display AS task_display, t.task_type, - s.score, s.view_count, ${HAS_CHAIN} - FROM submission_submission s - JOIN account_user u ON u.id = s.user_id - JOIN task_task t ON t.id = s.task_id - WHERE s.id = $id`, - { id }, - ), - ) - return c.json({ - submission_id: uuidOut(s.id), - username: s.username, - task_title: s.task_title, - task_display: s.task_display, - task_type: s.task_type, - score: s.score, - view_count: s.view_count, - has_prompt_chain: bool(s.has_prompt_chain), - }) -}) - router.get("/manage/awards/:award_id/items", (c) => { requireAdmin(c) const award = orNotFound(