编辑器存量 rubric 徽标/题型切换清理/分值输入修复(最终复核 R1-R3)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Haiku 4.5
parent
5e4904742a
commit
5ce33f3edf
@@ -61,6 +61,18 @@ describe("QuestionList 结构化编辑", () => {
|
|||||||
expect(screen.getByText("AI 逐评分点判分(存量题,保留原评分点)")).toBeInTheDocument();
|
expect(screen.getByText("AI 逐评分点判分(存量题,保留原评分点)")).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("编辑存量无 judgeMode 字段的题显示 AI 判分徽标与必填参考解答语义", () => {
|
||||||
|
render(
|
||||||
|
<QuestionList
|
||||||
|
value={[{ type: "solve", stem: "解方程", points: 10, reference: "x=2", rubric: [{ point: "过程", score: 6 }], explain: "e" }]}
|
||||||
|
onChange={() => {}}
|
||||||
|
/>,
|
||||||
|
);
|
||||||
|
fireEvent.click(screen.getByLabelText("编辑第 1 题"));
|
||||||
|
expect(screen.getByText("AI 逐评分点判分(存量题,保留原评分点)")).toBeInTheDocument();
|
||||||
|
expect(screen.getByText("参考解答(完整解题过程,展示给孩子)")).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
it("题干为空保存时报错,不写入列表", async () => {
|
it("题干为空保存时报错,不写入列表", async () => {
|
||||||
const user = userEvent.setup();
|
const user = userEvent.setup();
|
||||||
let saved: QuizQ[] = [];
|
let saved: QuizQ[] = [];
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ export function QuestionList({
|
|||||||
aria-label="题型"
|
aria-label="题型"
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
const t = e.target.value as QuizQ["type"];
|
const t = e.target.value as QuizQ["type"];
|
||||||
update({ type: t, options: undefined, answers: undefined, reference: undefined, judgeMode: undefined, points: undefined, ...(t === "solve" ? { judgeMode: "answer", points: 10 } : {}) });
|
update({ type: t, options: undefined, answers: undefined, reference: undefined, rubric: undefined, judgeMode: undefined, points: undefined, ...(t === "solve" ? { judgeMode: "answer", points: 10 } : {}) });
|
||||||
}}
|
}}
|
||||||
className="ml-2 h-8 rounded-lg border border-slate-200 bg-white px-2 text-sm"
|
className="ml-2 h-8 rounded-lg border border-slate-200 bg-white px-2 text-sm"
|
||||||
>
|
>
|
||||||
@@ -205,15 +205,16 @@ export function QuestionList({
|
|||||||
aria-label="分值"
|
aria-label="分值"
|
||||||
type="number"
|
type="number"
|
||||||
min={1}
|
min={1}
|
||||||
value={draft.points ?? 10}
|
placeholder="10"
|
||||||
|
value={draft.points ?? ""}
|
||||||
onChange={(e) => update({ points: Number(e.target.value) || undefined })}
|
onChange={(e) => update({ points: Number(e.target.value) || undefined })}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="rounded-md bg-slate-50 px-3 py-2 text-xs text-slate-600">
|
<div className="rounded-md bg-slate-50 px-3 py-2 text-xs text-slate-600">
|
||||||
{draft.judgeMode === "rubric" ? "AI 逐评分点判分(存量题,保留原评分点)" : "仅最终答案(秒判)"}
|
{draft.judgeMode === "answer" ? "仅最终答案(秒判)" : "AI 逐评分点判分(存量题,保留原评分点)"}
|
||||||
</div>
|
</div>
|
||||||
<div className="space-y-1">
|
<div className="space-y-1">
|
||||||
<Label>参考解答(可选,给孩子看)</Label>
|
<Label>{draft.judgeMode === "answer" ? "参考解答(可选,给孩子看)" : "参考解答(完整解题过程,展示给孩子)"}</Label>
|
||||||
<Input aria-label="参考解答" value={draft.reference ?? ""} onChange={(e) => update({ reference: e.target.value })} />
|
<Input aria-label="参考解答" value={draft.reference ?? ""} onChange={(e) => update({ reference: e.target.value })} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user