fix(textbooks): 规范核查修复 — 安全漏洞+功能缺失+i18n+类型安全

安全:createPrerequisiteAction 补充 prerequisiteKpId 归属校验;deletePrerequisiteAction 补充双知识点归属校验,防止跨教材越权。

功能:实现图谱添加/删除前置依赖(Dialog + Select 选择知识点 + 调用 Server Action + 自动刷新图谱),替换原 no-op 回调。

i18n:修复 8 处硬编码英文字符串(textbook-reader/chapter-sidebar-list/textbook-card/textbook-form-dialog/textbook-settings-dialog/create-chapter-dialog/teacher-textbook-reader),新增 saveFailed/createFailed/updateFailed/deleteFailed/questionCreatorDefaultContent 等 key。

类型安全:graph-prerequisite-edge.tsx 使用 GraphEdgeData 类型经 unknown 安全转换,替代裸 as 断言。

规范:analytics.tsx 移动 use client 指令到文件第一行;同步架构文档 005 JSON 类型定义(GraphNodeData/GraphEdgeData/MasteryLevel)。

验证:教材模块 lint 零错误、tsc 零错误、193 个单元测试全部通过。
This commit is contained in:
SpecialX
2026-06-23 00:30:14 +08:00
parent 58656da983
commit ec87cd9efa
14 changed files with 388 additions and 104 deletions

View File

@@ -48,6 +48,11 @@
"cancel": "Cancel",
"save": "Save",
"saving": "Saving...",
"saveFailed": "Failed to save",
"createFailed": "Failed to create",
"updateFailed": "Failed to update",
"deleteFailed": "Failed to delete",
"questionCreatorDefaultContent": "Please explain the knowledge point: {name}",
"addKnowledgePoint": "Add Knowledge Point",
"clickToViewKp": "Click to view knowledge point details",
"noChapters": "No chapters",
@@ -228,12 +233,20 @@
"viewAllQuestions": "View all questions",
"editPrerequisite": "Edit prerequisites",
"addPrerequisite": "Add prerequisite",
"addPrerequisiteTitle": "Add Prerequisite Knowledge Point",
"addPrerequisiteDesc": "Select a knowledge point as the prerequisite of the current one.",
"selectPrerequisite": "Select a prerequisite knowledge point",
"removePrerequisite": "Remove",
"noPrerequisites": "No prerequisite knowledge points",
"noSuccessors": "No successor knowledge points",
"masteryNotAssessed": "Not assessed",
"correctRate": "Correct rate",
"totalQuestions": "Total questions"
"totalQuestions": "Total questions",
"prerequisiteAdded": "Prerequisite added",
"prerequisiteRemoved": "Prerequisite removed",
"cancel": "Cancel",
"confirm": "Confirm",
"saving": "Saving..."
},
"toolbar": {
"search": "Search knowledge points",

View File

@@ -48,6 +48,11 @@
"cancel": "取消",
"save": "保存",
"saving": "保存中...",
"saveFailed": "保存失败",
"createFailed": "创建失败",
"updateFailed": "更新失败",
"deleteFailed": "删除失败",
"questionCreatorDefaultContent": "请讲解知识点:{name}",
"addKnowledgePoint": "添加知识点",
"clickToViewKp": "点击查看知识点详情",
"noChapters": "暂无章节",
@@ -228,12 +233,20 @@
"viewAllQuestions": "查看全部题目",
"editPrerequisite": "编辑前置依赖",
"addPrerequisite": "添加前置",
"addPrerequisiteTitle": "添加前置知识点",
"addPrerequisiteDesc": "选择一个知识点作为当前知识点的前置依赖。",
"selectPrerequisite": "请选择前置知识点",
"removePrerequisite": "移除",
"noPrerequisites": "暂无前置知识点",
"noSuccessors": "暂无后置知识点",
"masteryNotAssessed": "未测评",
"correctRate": "正确率",
"totalQuestions": "总题数"
"totalQuestions": "总题数",
"prerequisiteAdded": "前置依赖已添加",
"prerequisiteRemoved": "前置依赖已移除",
"cancel": "取消",
"confirm": "确认",
"saving": "保存中..."
},
"toolbar": {
"search": "搜索知识点",