From 8e29b6955844410939a0ebc3cc3de16042e49f77 Mon Sep 17 00:00:00 2001 From: lion <120344285@qq.com> Date: Fri, 7 Aug 2026 13:07:41 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=84=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/admin/applications.ts | 12 + src/api/admin/types.ts | 12 +- .../portal/ApplicationSignupDetailFields.vue | 15 +- src/views/admin/AdminDashboardView.vue | 2 +- .../admin/competition/CompetitionFormView.vue | 116 +++++-- src/views/manage/ManageDashboardView.vue | 2 +- src/views/manage/ManageProjectDetailView.vue | 41 +-- src/views/manage/ManageProjectsView.vue | 17 +- .../ReviewerApplicationDetailView.vue | 298 +++++++++--------- 9 files changed, 296 insertions(+), 219 deletions(-) diff --git a/src/api/admin/applications.ts b/src/api/admin/applications.ts index ebca323..36f856e 100644 --- a/src/api/admin/applications.ts +++ b/src/api/admin/applications.ts @@ -47,6 +47,18 @@ export async function getAdminApplication( return data as AdminApplicationDetail } +export async function updateAdminApplicationReviewEligible( + competitionId: number, + applicationId: number, + reviewEligible: boolean, +): Promise<{ id: number; review_eligible: boolean }> { + const { data } = await adminHttp.patch<{ id: number; review_eligible: boolean }>( + `/competitions/${competitionId}/applications/${applicationId}/review-eligible`, + { review_eligible: reviewEligible }, + ) + return data +} + export async function impersonateAdminApplication( competitionId: number, applicationId: number, diff --git a/src/api/admin/types.ts b/src/api/admin/types.ts index 0d6d4be..7b790e1 100644 --- a/src/api/admin/types.ts +++ b/src/api/admin/types.ts @@ -147,6 +147,8 @@ export interface AdminApplicationListParams { signup_channel_id?: number public_source_channel_id?: number review_result?: 'passed' | 'rejected' | 'pending' | '' + /** true/false;不传则不过滤 */ + review_eligible?: boolean sort_by?: 'team_avg' | 'submitted_at' sort_dir?: 'asc' | 'desc' } @@ -195,6 +197,8 @@ export interface AdminApplicationRow { review_result: 'passed' | 'rejected' | null review_result_note: string | null review_result_at: string | null + /** 是否参与评审;否时不出现在评审端 */ + review_eligible: boolean degree?: string location_label?: string public_source_channel: { id: number; source_code: string; source_name: string } | null @@ -497,5 +501,11 @@ export interface ManageReportData { track: string items: Array<{ rank: number; name: string; avg: number }> }> - summary: { total: number; passed: number; rejected: number; pending_review: number } + summary: { + total: number + passed: number + rejected: number + pending_review: number + reviewed: number + } } diff --git a/src/components/portal/ApplicationSignupDetailFields.vue b/src/components/portal/ApplicationSignupDetailFields.vue index 4f3c61e..df30b77 100644 --- a/src/components/portal/ApplicationSignupDetailFields.vue +++ b/src/components/portal/ApplicationSignupDetailFields.vue @@ -21,9 +21,16 @@ export interface PortalApplicationDetailLike { submitted_at?: string | null } -defineProps<{ - detail: PortalApplicationDetailLike -}>() +withDefaults( + defineProps<{ + detail: PortalApplicationDetailLike + /** 评审端等场景可隐藏推荐方 */ + showRecommend?: boolean + }>(), + { + showRecommend: true, + }, +) + + + @@ -2171,6 +2219,17 @@ onMounted(() => { {{ applicationDetail.recommend || '—' }} + + + 否:不出现在评审端 +

项目简介

@@ -2209,11 +2268,6 @@ onMounted(() => { - - - diff --git a/src/views/manage/ManageDashboardView.vue b/src/views/manage/ManageDashboardView.vue index 375d030..3e52e46 100644 --- a/src/views/manage/ManageDashboardView.vue +++ b/src/views/manage/ManageDashboardView.vue @@ -40,7 +40,7 @@ onMounted(() => void load())