feat(lesson-preparation): add readonly view, anchor node selector, and type guards

- Add lesson-plan-readonly-view for viewing published plans

- Add anchor-node-selector and textbook-segments for canvas anchor positioning

- Add i18n-errors and type-guards lib utilities

- Add lesson-plan-provider-setup for provider initialization

- Update actions, data-access (knowledge, versions, main), publish-service

- Update blocks (blackboard, exercise, homework, import, key-point, objective, reflection)

- Update editor, node-editor, node-edit-panel, pickers, and providers
This commit is contained in:
SpecialX
2026-06-24 12:02:42 +08:00
parent a48e7d0e27
commit 6bc113eaff
39 changed files with 2129 additions and 571 deletions

View File

@@ -1,12 +1,13 @@
import { z } from "zod";
// V3 修复Zod 错误消息使用 i18n 键,由 actions 层通过 translateFieldErrors() 翻译
export const createLessonPlanSchema = z.object({
title: z.string().min(1, "请输入课案标题").max(255),
title: z.string().min(1, "error.titleRequired").max(255, "error.titleTooLong"),
textbookId: z.string().optional(),
chapterId: z.string().optional(),
subjectId: z.string().optional(),
gradeId: z.string().optional(),
templateId: z.string().min(1, "请选择模板"),
templateId: z.string().min(1, "error.templateRequired"),
});
export const updateLessonPlanContentSchema = z.object({
@@ -47,12 +48,12 @@ export const getKnowledgePointOptionsSchema = z.object({
// 发布作业输入校验
const dateStringSchema = z
.string()
.refine((v) => !Number.isNaN(new Date(v).getTime()), "Invalid date format");
.refine((v) => !Number.isNaN(new Date(v).getTime()), "error.invalidDate");
export const publishLessonPlanHomeworkSchema = z.object({
planId: z.string().min(1),
blockId: z.string().min(1),
classIds: z.array(z.string().min(1)).min(1, "至少选择一个班级"),
classIds: z.array(z.string().min(1)).min(1, "error.classRequired"),
availableAt: dateStringSchema.optional(),
dueAt: dateStringSchema.optional(),
});