diff --git a/src/admin/problem/detail.vue b/src/admin/problem/detail.vue index 61c1ac6..d914f7d 100644 --- a/src/admin/problem/detail.vue +++ b/src/admin/problem/detail.vue @@ -71,6 +71,7 @@ const problem = useLocalStorage(STORAGE_KEY.ADMIN_PROBLEM, { hint: "", source: "", prompt: "", + answers: [], io_mode: { io_mode: "Standard IO", input: "input.txt", @@ -91,10 +92,11 @@ const tags = useLocalStorage(STORAGE_KEY.ADMIN_PROBLEM_TAGS, { upload: [], }) -// 这三个用的少,就不缓存本地了 +// 这几个用的少,就不缓存本地了 const [needTemplate, toggleNeedTemplate] = useToggle(false) const template = reactive(JSON.parse(JSON.stringify(CODE_TEMPLATES))) -const currentActiveTemplate = ref("C") +const currentActiveTemplate = ref("Python3") +const currentActiveAnswer = ref("Python3") // 给 TextEditor 用 const [ready, toggleReady] = useToggle(false) @@ -150,6 +152,14 @@ async function getProblemDetail() { problem.value.hint = data.hint problem.value.source = data.source problem.value.prompt = data.prompt + if (data.answers && data.answers.length) { + problem.value.answers = data.answers + } else { + problem.value.answers = data.languages.map((lang: LANGUAGE) => ({ + language: lang, + code: "", + })) + } problem.value.io_mode = data.io_mode if (problem.value.contest_id) { problem.value.contest_id = problem.value.contest_id @@ -302,11 +312,18 @@ function filterHint() { } } +function filterAnswers() { + problem.value.answers = problem.value.answers.filter( + (ans) => ans.code.trim() !== "", + ) +} + async function submit() { const notCompleted = detectProblemCompletion() if (notCompleted) return filterHint() getTemplate() + filterAnswers() const api = { "admin problem create": createProblem, "admin problem edit": editProblem, @@ -374,6 +391,19 @@ watch( problem.value.tags = uniqueTags }, ) +watch( + () => problem.value.languages, + (langs) => { + const answers = langs.map((lang) => { + const existing = problem.value.answers.find( + (ans) => ans.language === lang, + ) + return existing || { language: lang, code: "" } + }) + problem.value.answers = answers + }, + { immediate: true }, +)