feat: 新增控笔练习,增加首页公告

This commit is contained in:
R524809
2026-05-29 10:21:39 +08:00
parent 2f0c4ab591
commit a6e8f4df02
28 changed files with 1045 additions and 672 deletions
@@ -1,99 +1,8 @@
import type { LetterTracingMode } from './generators/letter-tracing-generator';
import type { DebugPublishMeta } from '../../utils/debugPublish';
import { inferGradeFromAge } from '../../utils/debugPublish';
import { LETTER_TRACING_WORKSHEET_DEFINITIONS } from '../../config/worksheets/letterTracing';
/** 本地 worksheet 元数据(与云库 `worksheets` 文档 `_id` 对齐) */
interface LetterTracingWorksheetDefinition {
id: LetterTracingMode;
icon: string;
title: string;
subtitle: string;
ageMin: number;
ageMax: number;
difficulty: 1 | 2 | 3 | 4;
tags: string[];
sortOrder: number;
}
export const LETTER_TRACING_WORKSHEET_DEFINITIONS = [
{
id: 'letter-tracing-single',
icon: 'start-a',
title: '字母默认字帖',
subtitle: '配图、例句与描红',
ageMin: 4,
ageMax: 7,
difficulty: 1,
tags: ['字母', '描红', '看图描红'],
sortOrder: 42,
},
{
id: 'letter-tracing-upper-lower',
icon: 'draw-o',
title: '字母基础描红',
subtitle: 'Uppercase / Lowercase 总览',
ageMin: 5,
ageMax: 7,
difficulty: 1,
tags: ['字母', '描红', '字母总览'],
sortOrder: 44,
},
{
id: 'letter-tracing-case-pairing',
icon: 'font-size',
title: '大小写对照',
subtitle: '半组字母左大写右小写',
ageMin: 5,
ageMax: 7,
difficulty: 1,
tags: ['字母', '描红', '大小写练习'],
sortOrder: 45,
},
{
id: 'letter-tracing-two-column',
icon: 'two-columns',
title: '两列描红',
subtitle: '左 AM、右 NZ 配对描红',
ageMin: 5,
ageMax: 7,
difficulty: 1,
tags: ['字母', '描红', '两列练习'],
sortOrder: 43,
},
{
id: 'letter-tracing-half',
icon: 'square-half',
title: '13字母半表',
subtitle: '每行一个字母,13 字母半表',
ageMin: 5,
ageMax: 8,
difficulty: 2,
tags: ['字母', '描红', '半表练习'],
sortOrder: 47,
},
{
id: 'letter-tracing-three',
icon: 'ABC-list',
title: '三字母精练',
subtitle: '每页聚焦 3 个字母深度书写',
ageMin: 5,
ageMax: 7,
difficulty: 2,
tags: ['字母', '描红', '三字母精练'],
sortOrder: 46,
},
{
id: 'letter-tracing-daily-checkin',
icon: 'task-o',
title: '字母每日打卡',
subtitle: '四宫格每日字母打卡练习',
ageMin: 5,
ageMax: 7,
difficulty: 2,
tags: ['字母', '描红', '每日打卡'],
sortOrder: 48,
},
] as const satisfies ReadonlyArray<LetterTracingWorksheetDefinition>;
export { LETTER_TRACING_WORKSHEET_DEFINITIONS };
type LetterTracingWorksheetRow =
(typeof LETTER_TRACING_WORKSHEET_DEFINITIONS)[number];