diff --git a/apps/web/src/oj/submission/list.vue b/apps/web/src/oj/submission/list.vue index d475c76..ad9a2a7 100644 --- a/apps/web/src/oj/submission/list.vue +++ b/apps/web/src/oj/submission/list.vue @@ -195,7 +195,21 @@ async function rejudge(submissionID: string) { } async function retryFlowchart(submissionId: string) { - await retryFlowchartSubmission(submissionId) + // 后端会拒掉「还在评分中」的提交(409 retry-not-allowed),也可能撞上限流。 + // 不兜住的话拦截器静默 reject,老师点下去完全没反应。 + // 按错误码分支而不是 match 文案(见 utils/api.ts 的约定)——后端文案是英文的, + // 直接弹给老师看不合适 + const retryTips: Record = { + "retry-not-allowed": "这条还在评分中,等出了结果再重新评分", + "too-many-submissions": "操作太频繁了,缓一下再试", + "flowchart-not-found": "提交不存在,或者没有权限", + } + try { + await retryFlowchartSubmission(submissionId) + } catch (err: any) { + message.error(retryTips[err?.error] ?? "重新评分失败") + return + } message.success("重新评分已提交") listSubmissions() } diff --git a/apps/web/src/shared/components/FlowchartStatisticsPanel.vue b/apps/web/src/shared/components/FlowchartStatisticsPanel.vue index b110438..79f2204 100644 --- a/apps/web/src/shared/components/FlowchartStatisticsPanel.vue +++ b/apps/web/src/shared/components/FlowchartStatisticsPanel.vue @@ -203,6 +203,8 @@ interface Props { const props = defineProps() +const message = useMessage() + const durationOptions: SelectOption[] = [ { label: "10分钟内", value: "minutes:10" }, { label: "20分钟内", value: "minutes:20" }, @@ -528,12 +530,18 @@ async function handleStatistics() { query.duration === "all" ? { end } : { start: formatISO(sub(current, subOptions.value)), end } - const res = await getFlowchartStatistics( - duration, - query.problem, - query.username, - ) - Object.assign(data, res) + try { + const res = await getFlowchartStatistics( + duration, + query.problem, + query.username, + ) + Object.assign(data, res) + } catch (error) { + message.error("获取流程图统计失败") + console.error("获取流程图统计失败:", error) + return + } await nextTick() renderWordCloud() }