feat: 开发完成拼音每日一练
This commit is contained in:
@@ -0,0 +1,186 @@
|
||||
/**
|
||||
* 拼音每日一练分组数据
|
||||
* 每页 4 个部分(四宫格),每个部分聚焦一个拼音及其相关练习
|
||||
*/
|
||||
|
||||
export interface PinyinDailyTask {
|
||||
char: string; // 核心字母,如 'a'
|
||||
variants: string[]; // 变体,如 ['ā', 'á', 'ǎ', 'à']
|
||||
type: 'shengmu' | 'yunmu' | 'zhengti';
|
||||
}
|
||||
|
||||
export const PINYIN_DAILY_GROUPS: PinyinDailyTask[][] = [
|
||||
// Day 1: 单韵母 a o e i
|
||||
[
|
||||
{ char: 'a', variants: ['ā', 'á', 'ǎ', 'à'], type: 'yunmu' },
|
||||
{ char: 'o', variants: ['ō', 'ó', 'ǒ', 'ò'], type: 'yunmu' },
|
||||
{ char: 'e', variants: ['ē', 'é', 'ě', 'è'], type: 'yunmu' },
|
||||
{ char: 'i', variants: ['ī', 'í', 'ǐ', 'ì'], type: 'yunmu' },
|
||||
],
|
||||
// Day 2: 单韵母 u ü + 声母 b p
|
||||
[
|
||||
{ char: 'u', variants: ['ū', 'ú', 'ǔ', 'ù'], type: 'yunmu' },
|
||||
{ char: 'ü', variants: ['ǖ', 'ǘ', 'ǚ', 'ǜ'], type: 'yunmu' },
|
||||
{ char: 'b', variants: [], type: 'shengmu' },
|
||||
{ char: 'p', variants: [], type: 'shengmu' },
|
||||
],
|
||||
// Day 3: 声母 m f d t
|
||||
[
|
||||
{ char: 'm', variants: [], type: 'shengmu' },
|
||||
{ char: 'f', variants: [], type: 'shengmu' },
|
||||
{ char: 'd', variants: [], type: 'shengmu' },
|
||||
{ char: 't', variants: [], type: 'shengmu' },
|
||||
],
|
||||
// Day 4: 声母 n l g k
|
||||
[
|
||||
{ char: 'n', variants: [], type: 'shengmu' },
|
||||
{ char: 'l', variants: [], type: 'shengmu' },
|
||||
{ char: 'g', variants: [], type: 'shengmu' },
|
||||
{ char: 'k', variants: [], type: 'shengmu' },
|
||||
],
|
||||
// Day 5: 声母 h j q x
|
||||
[
|
||||
{ char: 'h', variants: [], type: 'shengmu' },
|
||||
{ char: 'j', variants: [], type: 'shengmu' },
|
||||
{ char: 'q', variants: [], type: 'shengmu' },
|
||||
{ char: 'x', variants: [], type: 'shengmu' },
|
||||
],
|
||||
// Day 6: 声母 zh ch sh r
|
||||
[
|
||||
{ char: 'zh', variants: [], type: 'shengmu' },
|
||||
{ char: 'ch', variants: [], type: 'shengmu' },
|
||||
{ char: 'sh', variants: [], type: 'shengmu' },
|
||||
{ char: 'r', variants: [], type: 'shengmu' },
|
||||
],
|
||||
// Day 7: 声母 z c s y
|
||||
[
|
||||
{ char: 'z', variants: [], type: 'shengmu' },
|
||||
{ char: 'c', variants: [], type: 'shengmu' },
|
||||
{ char: 's', variants: [], type: 'shengmu' },
|
||||
{ char: 'y', variants: [], type: 'shengmu' },
|
||||
],
|
||||
// Day 8: 声母 w + 复韵母 ai ei ui
|
||||
[
|
||||
{ char: 'w', variants: [], type: 'shengmu' },
|
||||
{ char: 'ai', variants: ['āi', 'ái', 'ǎi', 'ài'], type: 'yunmu' },
|
||||
{ char: 'ei', variants: ['ēi', 'éi', 'ěi', 'èi'], type: 'yunmu' },
|
||||
{ char: 'ui', variants: ['uī', 'uí', 'uǐ', 'uì'], type: 'yunmu' },
|
||||
],
|
||||
// Day 9: 复韵母 ao ou iu ie
|
||||
[
|
||||
{ char: 'ao', variants: ['āo', 'áo', 'ǎo', 'ào'], type: 'yunmu' },
|
||||
{ char: 'ou', variants: ['ōu', 'óu', 'ǒu', 'òu'], type: 'yunmu' },
|
||||
{ char: 'iu', variants: ['iū', 'iú', 'iǔ', 'iù'], type: 'yunmu' },
|
||||
{ char: 'ie', variants: ['iē', 'ié', 'iě', 'iè'], type: 'yunmu' },
|
||||
],
|
||||
// Day 10: 复韵母 üe er + 前鼻韵母 an en
|
||||
[
|
||||
{ char: 'üe', variants: ['üē', 'üé', 'üě', 'üè'], type: 'yunmu' },
|
||||
{ char: 'er', variants: ['ēr', 'ér', 'ěr', 'èr'], type: 'yunmu' },
|
||||
{ char: 'an', variants: ['ān', 'án', 'ǎn', 'àn'], type: 'yunmu' },
|
||||
{ char: 'en', variants: ['ēn', 'én', 'ěn', 'èn'], type: 'yunmu' },
|
||||
],
|
||||
// Day 11: 前鼻韵母 in un ün + 后鼻韵母 ang
|
||||
[
|
||||
{ char: 'in', variants: ['īn', 'ín', 'ǐn', 'ìn'], type: 'yunmu' },
|
||||
{ char: 'un', variants: ['ūn', 'ún', 'ǔn', 'ùn'], type: 'yunmu' },
|
||||
{ char: 'ün', variants: ['ǖn', 'ǘn', 'ǚn', 'ǜn'], type: 'yunmu' },
|
||||
{ char: 'ang', variants: ['āng', 'áng', 'ǎng', 'àng'], type: 'yunmu' },
|
||||
],
|
||||
// Day 12: 后鼻韵母 eng ing ong + 整体认读 zhi
|
||||
[
|
||||
{ char: 'eng', variants: ['ēng', 'éng', 'ěng', 'èng'], type: 'yunmu' },
|
||||
{ char: 'ing', variants: ['īng', 'íng', 'ǐng', 'ìng'], type: 'yunmu' },
|
||||
{ char: 'ong', variants: ['ōng', 'óng', 'ǒng', 'òng'], type: 'yunmu' },
|
||||
{
|
||||
char: 'zhi',
|
||||
variants: ['zhī', 'zhí', 'zhǐ', 'zhì'],
|
||||
type: 'zhengti',
|
||||
},
|
||||
],
|
||||
// Day 13: 整体认读 chi shi ri zi
|
||||
[
|
||||
{
|
||||
char: 'chi',
|
||||
variants: ['chī', 'chí', 'chǐ', 'chì'],
|
||||
type: 'zhengti',
|
||||
},
|
||||
{
|
||||
char: 'shi',
|
||||
variants: ['shī', 'shí', 'shǐ', 'shì'],
|
||||
type: 'zhengti',
|
||||
},
|
||||
{ char: 'ri', variants: ['rī', 'rí', 'rǐ', 'rì'], type: 'zhengti' },
|
||||
{ char: 'zi', variants: ['zī', 'zí', 'zǐ', 'zì'], type: 'zhengti' },
|
||||
],
|
||||
// Day 14: 整体认读 ci si yi wu
|
||||
[
|
||||
{ char: 'ci', variants: ['cī', 'cí', 'cǐ', 'cì'], type: 'zhengti' },
|
||||
{ char: 'si', variants: ['sī', 'sí', 'sǐ', 'sì'], type: 'zhengti' },
|
||||
{ char: 'yi', variants: ['yī', 'yí', 'yǐ', 'yì'], type: 'zhengti' },
|
||||
{ char: 'wu', variants: ['wū', 'wú', 'wǔ', 'wù'], type: 'zhengti' },
|
||||
],
|
||||
// Day 15: 整体认读 yu ye yue yuan
|
||||
[
|
||||
{ char: 'yu', variants: ['yū', 'yú', 'yǔ', 'yù'], type: 'zhengti' },
|
||||
{ char: 'ye', variants: ['yē', 'yé', 'yě', 'yè'], type: 'zhengti' },
|
||||
{
|
||||
char: 'yue',
|
||||
variants: ['yuē', 'yué', 'yuě', 'yuè'],
|
||||
type: 'zhengti',
|
||||
},
|
||||
{
|
||||
char: 'yuan',
|
||||
variants: ['yuān', 'yuán', 'yuǎn', 'yuàn'],
|
||||
type: 'zhengti',
|
||||
},
|
||||
],
|
||||
// Day 16: 整体认读 yin yun ying
|
||||
[
|
||||
{
|
||||
char: 'yin',
|
||||
variants: ['yīn', 'yín', 'yǐn', 'yìn'],
|
||||
type: 'zhengti',
|
||||
},
|
||||
{
|
||||
char: 'yun',
|
||||
variants: ['yūn', 'yún', 'yǔn', 'yùn'],
|
||||
type: 'zhengti',
|
||||
},
|
||||
{
|
||||
char: 'ying',
|
||||
variants: ['yīng', 'yíng', 'yǐng', 'yìng'],
|
||||
type: 'zhengti',
|
||||
},
|
||||
],
|
||||
];
|
||||
|
||||
/** 每日打卡选择器展示项 */
|
||||
export interface PinyinDailyPickerItem {
|
||||
index: number;
|
||||
label: string;
|
||||
subtitle: string;
|
||||
}
|
||||
|
||||
const CHIP_CHAR_MAX = 3;
|
||||
const CHIP_SUBTITLE_MAX = 14;
|
||||
|
||||
function shortCharForChip(char: string): string {
|
||||
if (char.length <= CHIP_CHAR_MAX) return char;
|
||||
return `${char.slice(0, CHIP_CHAR_MAX - 1)}…`;
|
||||
}
|
||||
|
||||
/** 构建「第 N 组 + 拼音摘要」选择器数据 */
|
||||
export function buildPinyinDailyPickerItems(): PinyinDailyPickerItem[] {
|
||||
return PINYIN_DAILY_GROUPS.map((group, idx) => {
|
||||
let subtitle = group.map((t) => shortCharForChip(t.char)).join('·');
|
||||
if (subtitle.length > CHIP_SUBTITLE_MAX) {
|
||||
subtitle = `${subtitle.slice(0, CHIP_SUBTITLE_MAX - 1)}…`;
|
||||
}
|
||||
return {
|
||||
index: idx,
|
||||
label: `第 ${idx + 1} 组`,
|
||||
subtitle,
|
||||
};
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user