diff --git a/public/badge-1.png b/public/badge-1.png new file mode 100644 index 0000000..5bb14aa Binary files /dev/null and b/public/badge-1.png differ diff --git a/public/badge-2.png b/public/badge-2.png new file mode 100644 index 0000000..7610c6b Binary files /dev/null and b/public/badge-2.png differ diff --git a/public/badge-3.png b/public/badge-3.png new file mode 100644 index 0000000..73247e2 Binary files /dev/null and b/public/badge-3.png differ diff --git a/public/badge-4.png b/public/badge-4.png new file mode 100644 index 0000000..dae57cc Binary files /dev/null and b/public/badge-4.png differ diff --git a/public/badge-5.png b/public/badge-5.png new file mode 100644 index 0000000..2ccd831 Binary files /dev/null and b/public/badge-5.png differ diff --git a/src/admin/api.ts b/src/admin/api.ts index f78e270..7e60162 100644 --- a/src/admin/api.ts +++ b/src/admin/api.ts @@ -314,7 +314,6 @@ export function createProblemSet(data: { title: string description: string difficulty: string - is_public: boolean status: string }) { return http.post("admin/problemset/", data) @@ -325,7 +324,6 @@ export function editProblemSet(data: { title?: string description?: string difficulty?: string - is_public?: boolean status?: string visible?: boolean }) { @@ -350,7 +348,7 @@ export function getProblemSetProblems(problemSetId: number) { } export function addProblemToSet(problemSetId: number, data: { - problem_id: number + problem_id: string order?: number is_required?: boolean score?: number @@ -359,8 +357,17 @@ export function addProblemToSet(problemSetId: number, data: { return http.post(`admin/problemset/${problemSetId}/problems/`, data) } -export function removeProblemFromSet(problemSetId: number, problemId: number) { - return http.delete(`admin/problemset/${problemSetId}/problems/${problemId}/`) +export function editProblemInSet(problemSetId: number, problemSetProblemId: number, data: { + order?: number + is_required?: boolean + score?: number + hint?: string +}) { + return http.put(`admin/problemset/${problemSetId}/problems/${problemSetProblemId}/`, data) +} + +export function removeProblemFromSet(problemSetId: number, problemSetProblemId: number) { + return http.delete(`admin/problemset/${problemSetId}/problems/${problemSetProblemId}/`) } // 题单奖章管理 API @@ -379,6 +386,17 @@ export function createProblemSetBadge(problemSetId: number, data: { return http.post(`admin/problemset/${problemSetId}/badges/`, data) } +export function editProblemSetBadge(problemSetId: number, badgeId: number, data: { + name?: string + description?: string + icon?: string + condition_type?: string + condition_value?: number + level?: number +}) { + return http.put(`admin/problemset/${problemSetId}/badges/${badgeId}/`, data) +} + export function deleteProblemSetBadge(problemSetId: number, badgeId: number) { return http.delete(`admin/problemset/${problemSetId}/badges/${badgeId}/`) } diff --git a/src/admin/problemset/components/AddBadgeModal.vue b/src/admin/problemset/components/AddBadgeModal.vue new file mode 100644 index 0000000..06b85c6 --- /dev/null +++ b/src/admin/problemset/components/AddBadgeModal.vue @@ -0,0 +1,154 @@ + + + diff --git a/src/admin/problemset/components/AddProblemModal.vue b/src/admin/problemset/components/AddProblemModal.vue new file mode 100644 index 0000000..dd8bf04 --- /dev/null +++ b/src/admin/problemset/components/AddProblemModal.vue @@ -0,0 +1,99 @@ + + + diff --git a/src/admin/problemset/components/BadgeManagement.vue b/src/admin/problemset/components/BadgeManagement.vue new file mode 100644 index 0000000..30f6d1d --- /dev/null +++ b/src/admin/problemset/components/BadgeManagement.vue @@ -0,0 +1,102 @@ + + + diff --git a/src/admin/problemset/components/EditBadgeModal.vue b/src/admin/problemset/components/EditBadgeModal.vue new file mode 100644 index 0000000..d0fe361 --- /dev/null +++ b/src/admin/problemset/components/EditBadgeModal.vue @@ -0,0 +1,156 @@ + + + diff --git a/src/admin/problemset/components/EditProblemModal.vue b/src/admin/problemset/components/EditProblemModal.vue new file mode 100644 index 0000000..db37376 --- /dev/null +++ b/src/admin/problemset/components/EditProblemModal.vue @@ -0,0 +1,94 @@ + + + diff --git a/src/admin/problemset/components/ProblemManagement.vue b/src/admin/problemset/components/ProblemManagement.vue new file mode 100644 index 0000000..65d21a1 --- /dev/null +++ b/src/admin/problemset/components/ProblemManagement.vue @@ -0,0 +1,77 @@ + + + diff --git a/src/admin/problemset/components/ProblemSetInfo.vue b/src/admin/problemset/components/ProblemSetInfo.vue new file mode 100644 index 0000000..d5a1cc2 --- /dev/null +++ b/src/admin/problemset/components/ProblemSetInfo.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/admin/problemset/components/ProgressManagement.vue b/src/admin/problemset/components/ProgressManagement.vue new file mode 100644 index 0000000..feefc84 --- /dev/null +++ b/src/admin/problemset/components/ProgressManagement.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/admin/problemset/detail.vue b/src/admin/problemset/detail.vue index 0950e20..080bdee 100644 --- a/src/admin/problemset/detail.vue +++ b/src/admin/problemset/detail.vue @@ -1,19 +1,32 @@ diff --git a/src/admin/problemset/list.vue b/src/admin/problemset/list.vue index 436f062..8a68180 100644 --- a/src/admin/problemset/list.vue +++ b/src/admin/problemset/list.vue @@ -106,7 +106,7 @@ const columns: DataTableColumn[] = [ { title: "选项", key: "actions", - width: 200, + width: 300, render: (row) => h(Actions, { problemSetId: row.id, @@ -162,7 +162,7 @@ watch(() => [query.page, query.limit, query.difficulty, query.status], listProbl 新建题单 - + 难度: { if (path === "/") return "return to OJ" if (path === "/admin") return "admin home" if (path.startsWith("/admin/config")) return "admin config" + if (path.startsWith("/admin/problemset")) return "admin problemset list" if (path.startsWith("/admin/problem")) return "admin problem list" if (path.startsWith("/admin/contest")) return "admin contest list" if (path.startsWith("/admin/user")) return "admin user list" diff --git a/src/utils/types.ts b/src/utils/types.ts index 69119e3..c065904 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -191,7 +191,6 @@ export interface ProblemSet { create_time: Date difficulty: "Easy" | "Medium" | "Hard" status: "active" | "archived" | "draft" - is_public: boolean visible: boolean problems_count: number completed_count: number @@ -234,7 +233,6 @@ export interface ProblemSetBadge { icon: string condition_type: "all_problems" | "problem_count" | "score" condition_value: number - level: number } export interface ProblemSetProgress { @@ -252,7 +250,6 @@ export interface CreateProblemSetData { title: string description: string difficulty: "Easy" | "Medium" | "Hard" - is_public: boolean status: "active" | "archived" | "draft" } @@ -261,7 +258,6 @@ export interface EditProblemSetData { title?: string description?: string difficulty?: "Easy" | "Medium" | "Hard" - is_public?: boolean status?: "active" | "archived" | "draft" visible?: boolean }