feat: 完成三类字母描红开发

This commit is contained in:
R524809
2026-04-17 15:59:55 +08:00
parent 6c98e96506
commit 15ad5cce75
13 changed files with 565 additions and 233 deletions
@@ -1,15 +1,19 @@
import { ALPHABET_BY_LETTER, LETTERS_UPPER } from '../data/alphabet';
/** 字母描红的布局模式(与产品文档类练习一致) */
/** 字母描红的布局模式(与产品文档类练习一致) */
export type LetterTracingMode =
/** 4 看图描红:教学区 + 6 行描红(前三行大写、后三行小写) */
/** 1 看图识字:教学区 + 描红(前三行大写、后三行小写) */
| 'picture-tracing'
/** 1 大小写配对:左栏 A–M、右栏 N–Z,每行最多 4 组 Aa */
/** 2 字母总览:Uppercase / Lowercase 分区,每区四行 7+7+6+6 */
| 'overview'
/** 3 大小写配对:左栏 A–M、右栏 N–Z,每行最多 4 组 Aa */
| 'case-pairing'
/** 2 分栏对照:半组字母,左栏大写、右栏小写,每行 4 个 */
/** 4 分栏对照:半组字母,左栏大写、右栏小写,每行 4 个 */
| 'column-compare'
/** 3 字母总览:Uppercase / Lowercase 分区,每区 9+9+8 */
| 'overview';
/** 5 三字母精练:每页聚焦 3 个字母,各含大写行 + 小写行 */
| 'triple-focus'
/** 6 单字母逐行:每行一个字母,13 字母半表(A–M 或 N–Z) */
| 'single-line';
/** 字母大小写模式(部分模式不使用) */
export type LetterCaseMode = 'upper' | 'lower' | 'both';
@@ -24,8 +28,10 @@ export interface LetterTracingGeneratorConfig {
selectedLetter?: string;
repetitions: number;
fadePattern: 'gradient' | 'first-only';
/** 分栏对照:练习 A–M 或 N–Z */
/** 分栏对照 / 单字母逐行:练习 AM 或 NZ */
alphabetHalf?: AlphabetHalf;
/** 三字母精练:当前页聚焦的 3 个字母(如 ['A','B','C'] */
tripleLetters?: [string, string, string];
}
/** 单个描红格子的数据 */
@@ -184,9 +190,14 @@ function chunk<T>(arr: T[], size: number): T[][] {
return out;
}
/** 总览区 26 字母拆成 9 + 9 + 8 三行 */
/** 总览区 26 字母拆成 7 + 7 + 6 + 6 四行(前两行 7 个、后两行 6 个,与四线三格排版一致) */
function overviewRowsFrom(letters: string[]): string[][] {
return [letters.slice(0, 9), letters.slice(9, 18), letters.slice(18, 26)];
return [
letters.slice(0, 7),
letters.slice(7, 14),
letters.slice(14, 20),
letters.slice(20, 26),
];
}
/**
@@ -194,7 +205,7 @@ function overviewRowsFrom(letters: string[]): string[][] {
* - picture-tracing:教学区 + 6 行描红
* - case-pairing:左 AM / 右 N–Z,每行最多 4 组大小写配对
* - column-compare:半表,左大写右小写,每行 4 个
* - overviewUppercase / Lowercase Letters9+9+8
* - overviewUppercase / Lowercase Letters每区四行 7+7+6+6
*/
export function generateLetterTracing(
config: LetterTracingGeneratorConfig,
@@ -295,5 +306,7 @@ export function mergeLetterTracingConfig(
alphabetHalf: (overrides.alphabetHalf ??
base.alphabetHalf ??
'A-M') as AlphabetHalf,
tripleLetters: overrides.tripleLetters ??
base.tripleLetters ?? ['A', 'B', 'C'],
};
}