docs(admin-portal): 新增 nextstep-v2.md 记录下游核查结果

v1 声称完成的下游工作经核查实际未完成:
- api-gateway: /api/admin/graphql 路由未注册,go vet 编译失败
- teacher-bff: resolver 已完成但 schema 未同步(命名空间 vs 扁平)
- iam: proto 缺 BatchGetUsers rpc 声明

v2 记录详细核查证据和修复要求
This commit is contained in:
SpecialX
2026-07-14 08:26:27 +08:00
parent 99580fa13a
commit 0b42302a64
42 changed files with 4804 additions and 637 deletions

View File

@@ -0,0 +1,381 @@
{
"common": {
"brand": "Edu",
"brandSubtitle": "Teacher Portal",
"button": {
"save": "Save",
"cancel": "Cancel",
"edit": "Edit",
"export": "Export",
"search": "Search",
"delete": "Delete",
"retry": "Retry"
},
"label": {
"search": "Search",
"loading": "Loading...",
"student": "Student",
"studentNo": "Student No.",
"score": "Score",
"feedback": "Feedback",
"class": "Class",
"subject": "Subject",
"name": "Name",
"email": "Email",
"roles": "Roles"
},
"status": {
"loading": "Loading...",
"saved": "Saved"
},
"error": {
"loadFailed": "Failed to load: {message}",
"pageError": "Something went wrong"
},
"nav": {
"empty": "No viewports available",
"loadError": "Navigation failed to load: {message}",
"logout": "Log out",
"noRoles": "No roles"
},
"locale": {
"label": "Language",
"zhCN": "中文",
"en": "English"
},
"navLabel": {
"dashboard": "Dashboard",
"classes": "Classes",
"exams": "Exams",
"homework": "Homework",
"grades": "Grades",
"analytics": "Analytics",
"knowledgeGraph": "Knowledge Graph",
"notifications": "Notifications",
"aiAssist": "AI Assist",
"aiLessonPlan": "AI Lesson Plan",
"aiReport": "AI Report",
"attendance": "Attendance",
"questions": "Questions",
"textbooks": "Textbooks",
"lessonPlans": "Lesson Plans",
"coursePlans": "Course Plans",
"diagnostic": "Diagnostic",
"errorBook": "Error Book",
"practice": "Practice",
"elective": "Elective",
"leave": "Leave Requests",
"scheduleChanges": "Schedule Changes",
"settings": "Settings",
"students": "Students"
}
},
"auth": {
"title": "Login"
},
"dashboard": {
"title": "Welcome",
"greeting": "Welcome, {name}",
"subtitle": "{email} · Roles: {roles} · Data scope: {dataScope}",
"subtitleNoRoles": "None",
"error": {
"loadFailed": "Dashboard failed to load: {message}"
},
"empty": {
"title": "No data",
"description": "Dashboard data is not ready yet"
},
"stats": {
"classes": "Total Classes",
"exams": "Total Exams",
"pendingGrading": "Pending Grading"
},
"classes": {
"title": "My Classes",
"count": "{count} total",
"viewAll": "View all",
"emptyTitle": "No classes",
"emptyDescription": "Please contact the administrator to assign classes",
"grade": "Grade: {gradeId}",
"studentCount": "{count} students",
"viewStudents": "View students"
}
},
"classes": {
"title": "Classes"
},
"exams": {
"title": "Exams"
},
"homework": {
"title": "Homework"
},
"grades": {
"title": "Grades",
"subtitle": "GraphQL ExamGradesQuery + RecordGradeMutation · core-edu domain (P3 extension, MSW mock)",
"button": {
"exportCsv": "Export CSV",
"excelImport": "Excel Import",
"showForm": "Enter Grade",
"hideForm": "Collapse Form"
},
"nav": {
"entry": "Grade Entry",
"stats": "Statistics",
"analytics": "Analytics",
"reportCard": "Report Card"
},
"label": {
"examId": "Exam ID"
},
"placeholder": {
"examId": "Enter exam UUID"
},
"form": {
"title": "Enter Grade",
"label": {
"studentId": "Student ID",
"score": "Score",
"feedback": "Feedback"
},
"placeholder": {
"studentId": "Student UUID",
"feedback": "Optional: grading feedback"
},
"button": {
"submitting": "Saving...",
"save": "Save Grade",
"cancel": "Cancel"
},
"status": {
"saved": "Saved"
}
},
"error": {
"studentIdRequired": "Please enter a student ID",
"examIdRequired": "Please specify an exam ID first",
"scoreInvalid": "Score must be a number",
"fileRequired": "Please select a file",
"noValidData": "No valid data parsed (format: studentId,score)",
"importFailed": "Import failed: {message}",
"fileReadFailed": "Failed to read file"
},
"success": {
"imported": "Imported {count} grade(s)"
},
"empty": {
"noExamIdTitle": "Please enter an exam ID",
"noExamIdDescription": "Enter an exam UUID to query grades",
"noGradesTitle": "No grades",
"noGradesDescription": "No grades have been entered for this exam"
},
"analysis": {
"title": "Grade Analysis",
"label": {
"average": "Average",
"max": "Highest",
"min": "Lowest",
"passRate": "Pass Rate"
},
"chart": {
"title": "Score Distribution"
}
},
"list": {
"title": "Grade List",
"label": {
"studentId": "Student ID: {id}",
"feedback": "Feedback: {feedback}",
"exam": "Exam: {id}",
"homeworkScore": "Homework Score"
},
"button": {
"exportCsv": "Export CSV"
}
},
"entry": {
"back": "← Back to Grades",
"title": "Batch Grade Entry",
"subtitle": "GraphQL GradeEntryQuery + SaveGradeEntriesMutation · core-edu domain (P7 extension, MSW mock)",
"label": {
"class": "Class",
"exam": "Exam Paper"
},
"placeholder": {
"selectClass": "Select a class",
"selectExam": "Select an exam paper",
"feedback": "Optional: grading feedback"
},
"info": {
"sameGrade": "Same grade classes: {names} (Grade {gradeId})"
},
"empty": {
"title": "Please select class and exam",
"description": "Select a class first, then an exam paper to load the student grade entry list"
},
"error": {
"loadFailed": "Failed to load: {message}",
"classExamRequired": "Please select class and exam first",
"noValidEntries": "Please fill in at least one valid grade"
},
"emptyStudents": {
"title": "No students",
"description": "No student roster has been imported for this class"
},
"table": {
"title": "Student Grade Entry",
"studentCount": "{count} students",
"header": {
"student": "Student",
"studentNo": "Student No.",
"score": "Score",
"feedback": "Feedback"
}
},
"button": {
"submitting": "Saving...",
"saveAll": "Save All"
},
"success": {
"saved": "Saved {count} grade(s)",
"savedRecords": "Saved {count} grade record(s)"
}
},
"stats": {
"back": "← Back to Grades",
"title": "Class Grade Statistics",
"subtitle": "GraphQL GradeStatsQuery · core-edu domain (P7 extension, MSW mock)",
"button": {
"exportCsv": "Export CSV"
},
"label": {
"class": "Class",
"subject": "Subject"
},
"placeholder": {
"selectClass": "Select a class"
},
"error": {
"loadFailed": "Failed to load: {message}"
},
"empty": {
"title": "No statistics data",
"description": "Please select a class and subject"
},
"stats": {
"average": "Average",
"median": "Median",
"max": "Highest",
"min": "Lowest",
"passRate": "Pass Rate",
"footer": "Std. dev. σ = {stdDev} · {count} students total"
},
"ranking": {
"title": "Student Ranking",
"header": {
"rank": "Rank",
"studentNo": "Student No.",
"name": "Name",
"totalScore": "Total Score",
"level": "Level"
}
}
}
},
"analytics": {
"title": "Analytics"
},
"knowledgeGraph": {
"title": "Knowledge Graph"
},
"notifications": {
"title": "Notifications"
},
"aiAssist": {
"title": "AI Assist"
},
"aiLessonPlan": {
"title": "AI Lesson Plan"
},
"aiReport": {
"title": "AI Report"
},
"attendance": {
"title": "Attendance"
},
"questions": {
"title": "Questions"
},
"textbooks": {
"title": "Textbooks"
},
"lessonPlans": {
"title": "Lesson Plans"
},
"coursePlans": {
"title": "Course Plans"
},
"diagnostic": {
"title": "Diagnostic"
},
"errorBook": {
"title": "Error Book"
},
"practice": {
"title": "Practice"
},
"elective": {
"title": "Elective"
},
"leave": {
"title": "Leave Requests"
},
"scheduleChanges": {
"title": "Schedule Changes"
},
"settings": {
"title": "Settings",
"subtitle": "GraphQL MeQuery + UpdateUserMutation · P3 edit mode",
"button": {
"edit": "Edit"
},
"error": {
"loadFailed": "Failed to load: {message}",
"nameRequired": "Name cannot be empty",
"emailInvalid": "Invalid email format"
},
"empty": "No user information available",
"edit": {
"title": "Edit Profile"
},
"form": {
"label": {
"name": "Name",
"email": "Email"
},
"button": {
"submitting": "Saving...",
"save": "Save",
"cancel": "Cancel"
},
"status": {
"saved": "Saved successfully"
}
},
"info": {
"title": "Basic Information",
"label": {
"userId": "User ID",
"name": "Name",
"email": "Email",
"roles": "Roles",
"dataScope": "Data Scope"
},
"noRoles": "No roles",
"editHint": "P3 editing is enabled (UpdateUserMutation). Click the \"Edit\" button in the top right to modify your name and email."
}
},
"students": {
"title": "Students"
}
}

View File

@@ -0,0 +1,381 @@
{
"common": {
"brand": "Edu",
"brandSubtitle": "教师端",
"button": {
"save": "保存",
"cancel": "取消",
"edit": "编辑",
"export": "导出",
"search": "搜索",
"delete": "删除",
"retry": "重试"
},
"label": {
"search": "搜索",
"loading": "加载中...",
"student": "学生",
"studentNo": "学号",
"score": "分数",
"feedback": "反馈",
"class": "班级",
"subject": "学科",
"name": "姓名",
"email": "邮箱",
"roles": "角色"
},
"status": {
"loading": "加载中...",
"saved": "已保存"
},
"error": {
"loadFailed": "加载失败:{message}",
"pageError": "页面出错了"
},
"nav": {
"empty": "暂无可用视口",
"loadError": "导航加载失败:{message}",
"logout": "退出登录",
"noRoles": "无角色"
},
"locale": {
"label": "语言",
"zhCN": "中文",
"en": "English"
},
"navLabel": {
"dashboard": "仪表盘",
"classes": "班级管理",
"exams": "考试管理",
"homework": "作业管理",
"grades": "成绩查询",
"analytics": "学情分析",
"knowledgeGraph": "知识图谱",
"notifications": "通知中心",
"aiAssist": "AI 辅助",
"aiLessonPlan": "AI 教案",
"aiReport": "AI 学情报告",
"attendance": "考勤管理",
"questions": "题库",
"textbooks": "教材",
"lessonPlans": "备课",
"coursePlans": "课程计划",
"diagnostic": "诊断报告",
"errorBook": "错题本",
"practice": "练习分析",
"elective": "选修课",
"leave": "请假审批",
"scheduleChanges": "调课申请",
"settings": "个人设置",
"students": "学生"
}
},
"auth": {
"title": "登录"
},
"dashboard": {
"title": "欢迎",
"greeting": "欢迎,{name}",
"subtitle": "{email} · 角色:{roles} · 数据范围:{dataScope}",
"subtitleNoRoles": "无",
"error": {
"loadFailed": "仪表盘加载失败:{message}"
},
"empty": {
"title": "暂无数据",
"description": "仪表盘数据尚未就绪"
},
"stats": {
"classes": "班级总数",
"exams": "考试总数",
"pendingGrading": "待批改"
},
"classes": {
"title": "我的班级",
"count": "{count} 个",
"viewAll": "查看全部",
"emptyTitle": "暂无班级",
"emptyDescription": "请联系管理员分配班级",
"grade": "年级:{gradeId}",
"studentCount": "{count} 名学生",
"viewStudents": "查看学生"
}
},
"classes": {
"title": "班级管理"
},
"exams": {
"title": "考试管理"
},
"homework": {
"title": "作业管理"
},
"grades": {
"title": "成绩查询",
"subtitle": "GraphQL ExamGradesQuery + RecordGradeMutation · core-edu 域P3 扩展MSW mock",
"button": {
"exportCsv": "导出 CSV",
"excelImport": "Excel 导入",
"showForm": "录入成绩",
"hideForm": "收起录入"
},
"nav": {
"entry": "录入成绩",
"stats": "统计",
"analytics": "分析",
"reportCard": "报告卡"
},
"label": {
"examId": "考试 ID"
},
"placeholder": {
"examId": "输入考试 UUID"
},
"form": {
"title": "录入成绩",
"label": {
"studentId": "学生 ID",
"score": "分数",
"feedback": "反馈"
},
"placeholder": {
"studentId": "学生 UUID",
"feedback": "可选:批改意见"
},
"button": {
"submitting": "录入中...",
"save": "保存成绩",
"cancel": "取消"
},
"status": {
"saved": "已保存"
}
},
"error": {
"studentIdRequired": "请填写学生 ID",
"examIdRequired": "请先指定考试 ID",
"scoreInvalid": "分数必须为数字",
"fileRequired": "请选择文件",
"noValidData": "未解析到有效数据(格式:学号,分数)",
"importFailed": "导入失败:{message}",
"fileReadFailed": "文件读取失败"
},
"success": {
"imported": "已导入 {count} 条成绩"
},
"empty": {
"noExamIdTitle": "请输入考试 ID",
"noExamIdDescription": "输入考试 UUID 后查询成绩",
"noGradesTitle": "暂无成绩",
"noGradesDescription": "该考试尚未录入成绩"
},
"analysis": {
"title": "成绩分析",
"label": {
"average": "平均分",
"max": "最高分",
"min": "最低分",
"passRate": "及格率"
},
"chart": {
"title": "分数段分布"
}
},
"list": {
"title": "成绩列表",
"label": {
"studentId": "学生 ID: {id}",
"feedback": "反馈: {feedback}",
"exam": "考试: {id}",
"homeworkScore": "作业成绩"
},
"button": {
"exportCsv": "导出 CSV"
}
},
"entry": {
"back": "← 返回成绩查询",
"title": "成绩批量录入",
"subtitle": "GraphQL GradeEntryQuery + SaveGradeEntriesMutation · core-edu 域P7 扩展MSW mock",
"label": {
"class": "班级",
"exam": "试卷"
},
"placeholder": {
"selectClass": "请选择班级",
"selectExam": "请选择试卷",
"feedback": "可选:批改意见"
},
"info": {
"sameGrade": "同年级班级:{names}(年级 {gradeId}"
},
"empty": {
"title": "请选择班级和试卷",
"description": "选择班级后选择试卷,再拉取学生成绩录入列表"
},
"error": {
"loadFailed": "加载失败:{message}",
"classExamRequired": "请先选择班级和试卷",
"noValidEntries": "请至少填写一条有效成绩"
},
"emptyStudents": {
"title": "暂无学生",
"description": "该班级尚未导入学生名单"
},
"table": {
"title": "学生成绩录入",
"studentCount": "{count} 名学生",
"header": {
"student": "学生",
"studentNo": "学号",
"score": "分数",
"feedback": "反馈"
}
},
"button": {
"submitting": "保存中...",
"saveAll": "保存全部"
},
"success": {
"saved": "已保存 {count} 条成绩",
"savedRecords": "已保存 {count} 条成绩记录"
}
},
"stats": {
"back": "← 返回成绩查询",
"title": "班级成绩统计",
"subtitle": "GraphQL GradeStatsQuery · core-edu 域P7 扩展MSW mock",
"button": {
"exportCsv": "导出 CSV"
},
"label": {
"class": "班级",
"subject": "学科"
},
"placeholder": {
"selectClass": "请选择班级"
},
"error": {
"loadFailed": "加载失败:{message}"
},
"empty": {
"title": "暂无统计数据",
"description": "请选择班级和学科"
},
"stats": {
"average": "平均分",
"median": "中位数",
"max": "最高分",
"min": "最低分",
"passRate": "及格率",
"footer": "标准差 σ = {stdDev} · 共 {count} 名学生"
},
"ranking": {
"title": "学生排名",
"header": {
"rank": "排名",
"studentNo": "学号",
"name": "姓名",
"totalScore": "总分",
"level": "等级"
}
}
}
},
"analytics": {
"title": "学情分析"
},
"knowledgeGraph": {
"title": "知识图谱"
},
"notifications": {
"title": "通知中心"
},
"aiAssist": {
"title": "AI 辅助"
},
"aiLessonPlan": {
"title": "AI 教案"
},
"aiReport": {
"title": "AI 学情报告"
},
"attendance": {
"title": "考勤管理"
},
"questions": {
"title": "题库"
},
"textbooks": {
"title": "教材"
},
"lessonPlans": {
"title": "备课"
},
"coursePlans": {
"title": "课程计划"
},
"diagnostic": {
"title": "诊断报告"
},
"errorBook": {
"title": "错题本"
},
"practice": {
"title": "练习分析"
},
"elective": {
"title": "选修课"
},
"leave": {
"title": "请假审批"
},
"scheduleChanges": {
"title": "调课申请"
},
"settings": {
"title": "个人设置",
"subtitle": "GraphQL MeQuery + UpdateUserMutation · P3 编辑模式",
"button": {
"edit": "编辑"
},
"error": {
"loadFailed": "加载失败:{message}",
"nameRequired": "姓名不能为空",
"emailInvalid": "邮箱格式不正确"
},
"empty": "暂无用户信息",
"edit": {
"title": "编辑个人信息"
},
"form": {
"label": {
"name": "姓名",
"email": "邮箱"
},
"button": {
"submitting": "保存中...",
"save": "保存",
"cancel": "取消"
},
"status": {
"saved": "保存成功"
}
},
"info": {
"title": "基本信息",
"label": {
"userId": "用户 ID",
"name": "姓名",
"email": "邮箱",
"roles": "角色",
"dataScope": "数据范围"
},
"noRoles": "无角色",
"editHint": "P3 已启用编辑功能UpdateUserMutation。点击右上角“编辑”按钮修改姓名与邮箱。"
}
},
"students": {
"title": "学生"
}
}