diff --git a/apps/web/src/admin/problem/components/SQLTestcaseEditor.vue b/apps/web/src/admin/problem/components/SQLTestcaseEditor.vue
index f1aa2ba..17324c0 100644
--- a/apps/web/src/admin/problem/components/SQLTestcaseEditor.vue
+++ b/apps/web/src/admin/problem/components/SQLTestcaseEditor.vue
@@ -44,6 +44,8 @@ const refSQL = computed(
"",
)
+/** 已有脚本读取失败时的提示。空白编辑器和「本来就没测试点」长得一样,必须区分开 */
+const loadError = ref("")
const isPreviewing = ref(false)
const isUploading = ref(false)
const isGenerating = ref(false)
@@ -79,7 +81,20 @@ onMounted(async () => {
if (res.data.length) {
scripts.value = res.data.map((f) => ({ ...blankEntry(), sql: f.content }))
}
- } catch {}
+ } catch (err: any) {
+ // 新题、以及旧格式(非 SQL)测试点,后端回 404/409,保持空白就是对的,不该报错。
+ // 但**其它**失败必须说出来:读不出来时编辑器长得和「这题本来就没测试点」一模一样,
+ // 教师看不出区别,会以为要自己重新填。保存本身是安全的(后端读不到测试点信息会拒绝
+ // 整个保存),所以这里只提示、不阻塞。
+ const code = err?.error
+ if (code && code !== "problem-not-found" && code !== "not-sql-test-case") {
+ // 后端那句话(如"测试点信息读取失败")只说了现象,教师需要的是「下面是空的、别存」
+ const detail = err?.data ? `(${err.data})` : ""
+ loadError.value =
+ `已有测试点脚本没能读出来${detail}。下方是空白模板,不是本题真实的测试点 —— ` +
+ `直接保存不会丢数据(后端会拒绝),但也不会生效。请先排查测试点文件,或重新上传。`
+ }
+ }
})
function add() {
@@ -195,6 +210,14 @@ async function upload() {
>
还没有填写 SQL 标准答案,请先在上方"本题参考答案"中填写,再来编写测试点
+
+ {{ loadError }}
+
清空