From 6b2da418820fece40c475a9b2ff40b1cb75000d4 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Sun, 27 Sep 2026 15:15:37 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E9=A2=98=E5=8D=95=E5=90=8E=E5=8F=B0):?= =?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=20/=20=E7=BC=96=E8=BE=91=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E4=B8=A4=E4=B8=A4=E5=90=88=E5=B9=B6=E6=88=90=20Proble?= =?UTF-8?q?mModal=E3=80=81BadgeModal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AddBadgeModal / EditBadgeModal、AddProblemModal / EditProblemModal 各是两份八成相同 的组件,改一处表单项另一处总要漏。合并成一个组件,传了 badge / problem 就是编辑、 null 就是添加;两种模式分别 emit create / update,detail.vue 的四个 handler 不变。 表单项、校验、文案、提交的数据形状都照旧(题目弹窗添加时带 problemId、编辑时只显示 标题)。有一处刻意的行为变化:编辑弹窗原来只在换了一条记录时才重新填表,取消后再打开 同一条会看到上次没保存的改动;现在每次打开都按库里的值重新填。 Co-Authored-By: Claude Opus 5.5 --- .../problemset/components/AddBadgeModal.vue | 159 ------------------ .../problemset/components/AddProblemModal.vue | 103 ------------ .../{EditBadgeModal.vue => BadgeModal.vue} | 93 +++++----- .../components/EditProblemModal.vue | 100 ----------- .../problemset/components/ProblemModal.vue | 110 ++++++++++++ apps/web/src/admin/problemset/detail.vue | 53 +++--- 6 files changed, 182 insertions(+), 436 deletions(-) delete mode 100644 apps/web/src/admin/problemset/components/AddBadgeModal.vue delete mode 100644 apps/web/src/admin/problemset/components/AddProblemModal.vue rename apps/web/src/admin/problemset/components/{EditBadgeModal.vue => BadgeModal.vue} (58%) delete mode 100644 apps/web/src/admin/problemset/components/EditProblemModal.vue create mode 100644 apps/web/src/admin/problemset/components/ProblemModal.vue diff --git a/apps/web/src/admin/problemset/components/AddBadgeModal.vue b/apps/web/src/admin/problemset/components/AddBadgeModal.vue deleted file mode 100644 index 49392e2..0000000 --- a/apps/web/src/admin/problemset/components/AddBadgeModal.vue +++ /dev/null @@ -1,159 +0,0 @@ - - - diff --git a/apps/web/src/admin/problemset/components/AddProblemModal.vue b/apps/web/src/admin/problemset/components/AddProblemModal.vue deleted file mode 100644 index 1a6ef62..0000000 --- a/apps/web/src/admin/problemset/components/AddProblemModal.vue +++ /dev/null @@ -1,103 +0,0 @@ - - - diff --git a/apps/web/src/admin/problemset/components/EditBadgeModal.vue b/apps/web/src/admin/problemset/components/BadgeModal.vue similarity index 58% rename from apps/web/src/admin/problemset/components/EditBadgeModal.vue rename to apps/web/src/admin/problemset/components/BadgeModal.vue index abe6362..e5d8642 100644 --- a/apps/web/src/admin/problemset/components/EditBadgeModal.vue +++ b/apps/web/src/admin/problemset/components/BadgeModal.vue @@ -1,35 +1,37 @@ - - diff --git a/apps/web/src/admin/problemset/components/ProblemModal.vue b/apps/web/src/admin/problemset/components/ProblemModal.vue new file mode 100644 index 0000000..ebf2598 --- /dev/null +++ b/apps/web/src/admin/problemset/components/ProblemModal.vue @@ -0,0 +1,110 @@ + + + diff --git a/apps/web/src/admin/problemset/detail.vue b/apps/web/src/admin/problemset/detail.vue index 340c391..c7a8286 100644 --- a/apps/web/src/admin/problemset/detail.vue +++ b/apps/web/src/admin/problemset/detail.vue @@ -27,10 +27,8 @@ import ProblemSetInfo from "./components/ProblemSetInfo.vue" import ProblemManagement from "./components/ProblemManagement.vue" import BadgeManagement from "./components/BadgeManagement.vue" import ProgressManagement from "./components/ProgressManagement.vue" -import AddProblemModal from "./components/AddProblemModal.vue" -import EditProblemModal from "./components/EditProblemModal.vue" -import AddBadgeModal from "./components/AddBadgeModal.vue" -import EditBadgeModal from "./components/EditBadgeModal.vue" +import ProblemModal from "./components/ProblemModal.vue" +import BadgeModal from "./components/BadgeModal.vue" const route = useRoute() const router = useRouter() @@ -48,11 +46,9 @@ const problems = ref([]) const badges = ref([]) const progress = ref([]) -// 模态框状态 -const showAddProblemModal = ref(false) -const showEditProblemModal = ref(false) -const showAddBadgeModal = ref(false) -const showEditBadgeModal = ref(false) +// 模态框状态。添加和编辑共用一个弹窗,editing* 为 null 就是添加 +const showProblemModal = ref(false) +const showBadgeModal = ref(false) // 编辑数据 const editingProblem = ref(null) @@ -98,7 +94,7 @@ async function handleAddProblem(data: AddProblemToSetRequest) { try { await addProblemToSet(problemSetId.value, data) message.success("题目添加成功") - showAddProblemModal.value = false + showProblemModal.value = false loadProblems() loadProblemSetDetail() // 刷新题目数量 } catch (err) { @@ -123,7 +119,7 @@ async function handleEditProblem(data: UpdateProblemInSetRequest) { try { await editProblemInSet(problemSetId.value, editingProblem.value.id, data) message.success("题目编辑成功") - showEditProblemModal.value = false + showProblemModal.value = false loadProblems() } catch (err) { message.error("编辑题目失败:" + errorMessage(err, "未知错误")) @@ -134,7 +130,7 @@ async function handleAddBadge(data: BadgeFormData) { try { await createProblemSetBadge(problemSetId.value, data) message.success("奖章创建成功") - showAddBadgeModal.value = false + showBadgeModal.value = false loadBadges() } catch (err) { message.error("创建奖章失败:" + errorMessage(err, "未知错误")) @@ -157,7 +153,7 @@ async function handleEditBadge(data: BadgeFormData) { try { await editProblemSetBadge(problemSetId.value, editingBadge.value.id, data) message.success("奖章编辑成功") - showEditBadgeModal.value = false + showBadgeModal.value = false loadBadges() } catch (err) { message.error("编辑奖章失败:" + errorMessage(err, "未知错误")) @@ -175,21 +171,23 @@ async function handleRemoveUser(userId: number) { } function openAddProblemModal() { - showAddProblemModal.value = true + editingProblem.value = null + showProblemModal.value = true } function openAddBadgeModal() { - showAddBadgeModal.value = true + editingBadge.value = null + showBadgeModal.value = true } function openEditProblemModal(problem: AdminProblemSetProblem) { editingProblem.value = problem - showEditProblemModal.value = true + showProblemModal.value = true } function openEditBadgeModal(badge: AdminProblemSetBadge) { editingBadge.value = badge - showEditBadgeModal.value = true + showBadgeModal.value = true } onMounted(() => { @@ -247,23 +245,18 @@ onMounted(() => { - - - - - -