4.6 KiB
4.6 KiB
每日一练绘制服务重构方案
本项目对英语字母描红打卡服务(dailyCheckinDraw.ts)与拼音每日一练打卡服务(PinyinDailyDraw.ts)的绘制逻辑进行重构。主要目标是提取公共的 Header/Footer 绘制方法,统一绘制样式(字体、字号等与英语打卡一致),并在 Footer 引入随机鼓励语功能。
1. 重构目标
- 样式与布局统一:
- 提取每日练习每个 Section 的 Header(包含标题、日期/姓名输入横线)和 Footer(包含鼓励语、页码/天数)的绘制逻辑。
- 所有字体、字号、颜色和边距均统一以
dailyCheckinDraw.ts中的设计规范为准(原拼音打卡字体使用了 Microsoft Yahei,重构后统一使用serif字体,以与英语打卡一致)。
- 随机鼓励语机制:
- 在 Footer 中引入 20 条经典励志鼓励语(如“书山有路勤为径”、“日拱一卒 不期而至”等),不再固定显示单一短语,每次绘制时随机展示。
- 移除拼音展示区:
- 在
PinyinDailyDraw.ts中完全移除原有的drawSectionDisplay绘制区域。 - 相应调整拼音网格的起始高度,使其能够填满去除了展示区后的上方空白,以获得更好的排版空间。
- 在
2. 详细设计与实现方案
2.1 新增公共模块:dailyPracticeDrawHelper.ts
在 miniprogram/core/draw 目录下新建 dailyPracticeDrawHelper.ts,内容包含:
-
统一布局常量:
SECTION_PADDING_TOP = 12SECTION_PADDING_BOTTOM = 10HEADER_TITLE_GAP = 32HEADER_META_GAP = 22CONTENT_TOP_GAP = 14FOOTER_PHRASE_GAP = 26FOOTER_INDEX_GAP = 22
-
鼓励语词库:
- 维护一个包含 20 条无标点符号的励志短语数组
ENCOURAGEMENT_PHRASES。 - 提供
getRandomEncouragementPhrase(): string方法进行随机抽取。
- 维护一个包含 20 条无标点符号的励志短语数组
-
通用绘制函数:
drawSectionHeader(ctx, rect, title): 绘制统一字体的 Header。drawSectionFooter(ctx, rect, phrase, labelText): 绘制统一字体的 Footer。
2.2 英语打卡绘制服务重构:dailyCheckinDraw.ts
- 移除本地冗余定义的布局常量和绘制 Header/Footer 的私有方法。
- 引入
dailyPracticeDrawHelper.ts的常量及绘制函数。 - 在
drawSection方法中:- 调用
getRandomEncouragementPhrase()随机获取鼓励语。 - 调用
drawSectionHeader(标题传"每日打卡")。 - 调用
drawSectionFooter(索引标签传"- ${section.pageNumber} -")。
- 调用
2.3 拼音打卡绘制服务重构:PinyinDailyDraw.ts
- 移除本地定义的布局常量及
drawSectionHeader/drawSectionFooter/drawSectionDisplay等方法。 - 引入
dailyPracticeDrawHelper.ts中的常量和绘制函数。 - 在
drawSectionGrid方法中:- 将
contentTop原来的+ 40 + 10偏置去除,修正为与dailyCheckinDraw.ts完全一致的逻辑高度起点。这样能使网格向上延伸,充分填充空出的上方空间。 - 实现多列拼音声调绘制逻辑(全部采用
TONEOZ_PINYIN字体绘制):- 5 列布局(字符长度 <= 2):若
variants不为空,则在绘制描红行时,第 1 列展示基础字符char,第 2~5 列分别展示variants中带声调的拼音;若variants为空,则全部列均展示基础字符char。 - 4 列布局(字符长度 > 2):共绘制 4 个非空行。其中第 1 行(Row 0)全列展示
variants[0],第 2 行(Row 1)全列展示variants[1],第 3 行(Row 3)全列展示variants[2],第 4 行(Row 5)全列展示variants[3]。
- 5 列布局(字符长度 <= 2):若
- 将
- 在
drawSection方法中:- 移除对
drawSectionDisplay的调用。 - 调用
getRandomEncouragementPhrase()随机获取鼓励语。 - 调用
drawSectionHeader(标题传"拼音每日一练")。 - 调用
drawSectionFooter(索引标签传"第 ${dayIndex} 天")。
- 移除对
3. 20 条鼓励语词库清单
重构方案中使用的鼓励语清单如下(均不带标点符号,排版更美观):
- 书山有路勤为径
- 日拱一卒 不期而至
- 宝剑锋从磨砺出
- 梅花香自苦寒来
- 业精于勤荒于嬉
- 行百里者半九十
- 锲而不舍金石可镂
- 读万卷书行万里路
- 滴水穿石非一日之功
- 天下无难事只怕有心人
- 熟能生巧功到自然成
- 敏而好学不耻下问
- 学而不思则罔
- 思而不学则殆
- 欲速则不达
- 不积跬步无以至千里
- 不积小流无以成江海
- 温故而知新
- 读书破万卷下笔如有神
- 千里之行始于足下