feat: 完成分龄页开发
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
# Skill: generate-age-weekly-plans
|
||||
|
||||
> 生成分龄页各年龄段的「4 周推荐学习路线」,更新 `age.config.ts` 中的 `AGE_WEEK_PLANS`。
|
||||
|
||||
## 触发条件
|
||||
|
||||
当用户提到以下内容时触发:
|
||||
- "生成学习路线"、"更新学习路线"、"更新周计划"、"generate weekly plans"
|
||||
- "更新分龄页第三部分"、"更新分龄路线"
|
||||
|
||||
## 任务描述
|
||||
|
||||
你是一位拥有 15 年经验的儿童早教专家,专注于 3-8 岁儿童的系统化学习规划。你需要基于当前系统中已上线的所有 worksheet(打印练习册),为 5 个年龄段设计科学的 4 周学习路线,确保每周推荐的练习都是系统中实际存在的 worksheet。
|
||||
|
||||
## 执行步骤
|
||||
|
||||
### Step 1:获取 worksheet 数据
|
||||
|
||||
`page-config.json` 存储在微信云存储中(路径:`/content/page-config.json`),本地项目中不存在此文件。按以下优先级获取数据:
|
||||
|
||||
**方式一:读取本地缓存(优先)**
|
||||
|
||||
1. 使用 Glob 搜索 `.cache/page-config.json` 是否存在
|
||||
2. 如果存在,读取 `category.categories` 数组,提取每个分类下的 `items[]`
|
||||
3. 从每个 item 中提取关键信息(与 `pageContentBuild` 下发的 `category.items[]` 一致):
|
||||
- `id`(云 worksheet `_id`,写入配置时作为 `_id` 字段)
|
||||
- `title`、`subtitle`、`path`
|
||||
- 可选辅助:`ageMin` / `ageMax`、`category`、`difficulty`、`downloads`、`likes`
|
||||
|
||||
**方式二:通过微信开发者工具下载**
|
||||
|
||||
如果本地缓存不存在,提示用户按以下步骤获取:
|
||||
|
||||
1. 打开微信开发者工具
|
||||
2. 进入「云开发控制台」→「存储」
|
||||
3. 找到 `/content/page-config.json` 文件,点击下载
|
||||
4. 将文件保存到项目根目录的 `.cache/page-config.json`
|
||||
|
||||
```bash
|
||||
# 确保 .cache 目录存在
|
||||
mkdir -p .cache
|
||||
# 用户手动将下载的文件放入:.cache/page-config.json
|
||||
```
|
||||
|
||||
**方式三:通过云函数调用获取**
|
||||
|
||||
如果用户已安装 `tcb` CLI(腾讯云开发 CLI),可以直接下载:
|
||||
|
||||
```bash
|
||||
mkdir -p .cache
|
||||
tcb storage:download /content/page-config.json .cache/page-config.json
|
||||
```
|
||||
|
||||
> **重要**:请在获取数据后告知用户文件中有多少个 worksheet,以及覆盖了哪些分类和年龄段,让用户确认数据是最新的。
|
||||
|
||||
### Step 2:按年龄段分组和分析
|
||||
|
||||
1. 将所有 worksheet 按年龄段(`ageBand`)分组
|
||||
2. 在每个年龄段内,按分类统计 worksheet 数量
|
||||
3. 记录每个 worksheet 的难度等级(`difficulty`)
|
||||
4. 按 `downloads + likes` 排序,优先选择受欢迎的 worksheet
|
||||
|
||||
当前系统的分类体系:
|
||||
- `math` - 数感启蒙
|
||||
- `puzzle` - 益智游戏
|
||||
- `pinyin` - 汉语拼音
|
||||
- `chinese` - 趣味识字
|
||||
- `english` - 英语启蒙
|
||||
- `craft` - 创意手工
|
||||
|
||||
年龄段定义(来自 `core/data/difficulty.ts`):
|
||||
- `3-4`:3-4 岁
|
||||
- `4-5`:4-5 岁
|
||||
- `5-6`:5-6 岁
|
||||
- `6-7`:6-7 岁
|
||||
- `7-8`:7-8 岁
|
||||
|
||||
### Step 3:设计 4 周学习路线
|
||||
|
||||
以早教专家视角,为每个年龄段设计 4 周学习计划。
|
||||
|
||||
**编排原则:**
|
||||
|
||||
1. **由易到难**:第 1 周以基础入门为主,逐周提升难度
|
||||
2. **跨领域覆盖**:4 周合计应覆盖该年龄段可用的多个学科分类,避免单一
|
||||
3. **主题连贯**:每周设定一个明确的学习主题(如"数感启蒙""形状与空间""趣味文字"等)
|
||||
4. **基于实际内容**:每个练习必须对应系统中实际存在的 worksheet,**必须**带上真实的 `_id`、`subtitle`、`path`(与数据源一致,禁止手写虚构 path)
|
||||
5. **合理搭配**:每周 3 个练习应尽量来自不同分类,提供多元学习体验
|
||||
6. **第 4 周综合**:最后一周安排综合练习,涵盖前 3 周的核心技能
|
||||
|
||||
**主题命名规范:**
|
||||
- 简洁明了,4-6 个汉字
|
||||
- 体现该周的学习重点
|
||||
- 示例:数感启蒙、形状与连线、趣味专注、综合练习、拼音入门、创意手工
|
||||
|
||||
**当 worksheet 不足时的处理:**
|
||||
- 如果某个年龄段的 worksheet 不足 12 个(4 周 × 3 个),允许同一 worksheet 在不同周出现
|
||||
- 如果某个年龄段完全没有 worksheet,使用相邻年龄段的内容并标注
|
||||
- 若某年龄段可用 worksheet 不足,可放宽年龄筛选,但每条仍须来自数据源中的真实 `id/title/subtitle/path`,**不要**编造 `_id` 或 path
|
||||
|
||||
### Step 4:更新 age.config.ts
|
||||
|
||||
1. 读取 `miniprogram/pages/age/age.config.ts` 文件
|
||||
2. 找到 `AGE_WEEK_PLANS` 常量(如果不存在则在现有代码中 `MOCK_WEEKS` 的位置创建)
|
||||
3. 替换为新生成的数据
|
||||
|
||||
**`WeekExercise` 输出结构(写入 `age.config.ts`,与小程序分龄页跳转一致):**
|
||||
|
||||
```ts
|
||||
export type WeekExercise = {
|
||||
_id: string; // 等于数据源 item.id(即云 worksheets._id)
|
||||
title: string; // item.title
|
||||
subtitle: string; // item.subtitle
|
||||
path: string; // item.path,可含 query;点击「去练习」将按 path 跳转
|
||||
};
|
||||
```
|
||||
|
||||
**`AGE_WEEK_PLANS` 示例片段:**
|
||||
|
||||
```ts
|
||||
export const AGE_WEEK_PLANS: Record<AgeBandKey, WeekPlan[]> = {
|
||||
'3-4': [
|
||||
{
|
||||
week: 1,
|
||||
theme: '数感启蒙',
|
||||
exercises: [
|
||||
{
|
||||
_id: 'xxxxxxxx',
|
||||
title: '找数字,涂一涂',
|
||||
subtitle: '在数字方阵中找出目标数字并涂色',
|
||||
path: '/mathPages/mathDraw/mathDraw?id=number-find',
|
||||
},
|
||||
// ...
|
||||
],
|
||||
},
|
||||
// week 2–4
|
||||
],
|
||||
// '4-5' … '7-8'
|
||||
};
|
||||
```
|
||||
|
||||
**数据规范:**
|
||||
- 每个年龄段必须有 4 个 `WeekPlan`
|
||||
- 每个 `WeekPlan` 必须有 3 个 `exercises`
|
||||
- 每个 `exercises[]` 元素必须四字段齐全:`_id`、`title`、`subtitle`、`path`
|
||||
- `_id` 与 `path` 必须与 `.cache/page-config.json`(或云函数拉取结果)中对应 worksheet **逐字一致**
|
||||
- `theme` 简洁描述本周学习主题
|
||||
- 列表 `wx:key` 使用 `_id`,避免同 title 重复导致渲染异常
|
||||
|
||||
### Step 5:验证
|
||||
|
||||
1. **结构完整性**:5 个年龄段 × 4 周 × 3 练习 = 60 个练习项
|
||||
2. **内容真实性**:抽查每条 `_id`、`path`、`subtitle` 是否与数据源一致(可复制粘贴比对)
|
||||
3. **递进合理性**:确认每个年龄段的内容难度符合该年龄段认知水平
|
||||
4. **跨周不重复**:尽量避免同一 worksheet 在同一年龄段的不同周重复出现
|
||||
5. **主题覆盖度**:检查 4 周主题是否覆盖了该年龄段的主要学科
|
||||
6. **类型匹配**:确认数据结构与 `WeekPlan` 和 `WeekExercise` 类型定义一致
|
||||
|
||||
## 相关文件
|
||||
|
||||
- `miniprogram/pages/age/age.config.ts` — 输出目标文件
|
||||
- `miniprogram/pages/age/age.ts` — 分龄页逻辑(引用 config)
|
||||
- `miniprogram/core/data/difficulty.ts` — AGE_BANDS 定义
|
||||
- `miniprogram/core/data/categories.ts` — CATEGORY_LIST 分类定义
|
||||
- `.cache/page-config.json` — worksheet 数据本地缓存(从云存储下载)
|
||||
- 云存储 `/content/page-config.json` — worksheet 数据源(Source of Truth)
|
||||
- `cloudfunctions/worksheetsQuery/` — 查询 worksheet 的云函数(备选数据源)
|
||||
- `docs/分龄页内容管理方案.md` — 方案文档
|
||||
Reference in New Issue
Block a user