feat: add contest clone button to admin contest list

This commit is contained in:
2026-05-21 19:21:40 -06:00
parent 2cf971b40b
commit 776cfdf9de
2 changed files with 20 additions and 0 deletions

View File

@@ -160,6 +160,10 @@ export function editContest(contest: Contest | BlankContest) {
return http.put("admin/contest", contest)
}
export function cloneContest(contest_id: number) {
return http.post("admin/contest/clone", { contest_id })
}
export function getContest(id: string) {
return http.get<Contest & { password: string }>("admin/contest", {
params: { id },

View File

@@ -1,11 +1,13 @@
<script lang="ts" setup>
import { Contest } from "utils/types"
import { cloneContest } from "../../api"
interface Props {
contest: Contest
}
const props = defineProps<Props>()
const router = useRouter()
const message = useMessage()
function goEdit() {
router.push({
@@ -28,6 +30,19 @@ function goACMHelper() {
})
}
async function clone() {
try {
const res = await cloneContest(props.contest.id)
message.success("复制成功")
router.push({
name: "admin contest edit",
params: { contestID: res.data.id },
})
} catch {
message.error("复制失败")
}
}
const isACM = computed(() => props.contest.rule_type === "ACM")
</script>
<template>
@@ -47,6 +62,7 @@ const isACM = computed(() => props.contest.rule_type === "ACM")
<n-button size="small" type="info" secondary @click="goEdit">
编辑
</n-button>
<n-button size="small" secondary @click="clone"> 复制 </n-button>
</n-flex>
</template>
<style scoped></style>