185 lines
4.5 KiB
TypeScript
185 lines
4.5 KiB
TypeScript
import { CATEGORIES } from '../../core/data/categories';
|
||
import { AGE_BANDS, AgeBandKey } from '../../core/data/difficulty';
|
||
|
||
const CATEGORY_TABS = [
|
||
{ id: 'all', name: '全部' },
|
||
...CATEGORIES.map((c) => ({ id: c.id, name: c.name })),
|
||
];
|
||
|
||
const AGE_BAND_ICONS = ['🌱', '🚀', '🎓', '🧠', '🏆'] as const;
|
||
|
||
type HomeTrackCard = {
|
||
id: string;
|
||
title: string;
|
||
subtitle: string;
|
||
icon: string;
|
||
topBg: string;
|
||
};
|
||
|
||
const MOCK_MATH_TRACK: HomeTrackCard[] = [
|
||
{
|
||
id: 'm1',
|
||
title: '认识数字1-10',
|
||
subtitle: '启蒙第一课',
|
||
icon: '🔢',
|
||
topBg: '#fff3c4',
|
||
},
|
||
{
|
||
id: 'm2',
|
||
title: '形状对对碰',
|
||
subtitle: '空间感训练',
|
||
icon: '📐',
|
||
topBg: '#f5e6dc',
|
||
},
|
||
{
|
||
id: 'm3',
|
||
title: '数量比一比',
|
||
subtitle: '数感小游戏',
|
||
icon: '⚖️',
|
||
topBg: '#d8f0d0',
|
||
},
|
||
{
|
||
id: 'm4',
|
||
title: '规律找一找',
|
||
subtitle: '逻辑思维',
|
||
icon: '🔍',
|
||
topBg: '#e8f4ff',
|
||
},
|
||
{
|
||
id: 'm5',
|
||
title: '简单加减',
|
||
subtitle: '动手练一练',
|
||
icon: '➕',
|
||
topBg: '#fce4ec',
|
||
},
|
||
];
|
||
|
||
const MOCK_CHINESE_TRACK: HomeTrackCard[] = [
|
||
{
|
||
id: 'c1',
|
||
title: '基础笔画连连看',
|
||
subtitle: '书法初体验',
|
||
icon: '🖌',
|
||
topBg: '#f5e6dc',
|
||
},
|
||
{
|
||
id: 'c2',
|
||
title: '看图识汉字',
|
||
subtitle: '字形联想',
|
||
icon: '📖',
|
||
topBg: '#d8f0d0',
|
||
},
|
||
{
|
||
id: 'c3',
|
||
title: '拼音小闯关',
|
||
subtitle: '声母韵母',
|
||
icon: '🔤',
|
||
topBg: '#fff3c4',
|
||
},
|
||
{
|
||
id: 'c4',
|
||
title: '词语搭配',
|
||
subtitle: '词汇积累',
|
||
icon: '✏️',
|
||
topBg: '#e8f4ff',
|
||
},
|
||
{
|
||
id: 'c5',
|
||
title: '古诗诵读',
|
||
subtitle: '语感培养',
|
||
icon: '🎵',
|
||
topBg: '#fce4ec',
|
||
},
|
||
];
|
||
|
||
const MOCK_HOT_RECOMMENDS = [
|
||
{
|
||
id: 'hot-1',
|
||
title: '100以内的加减法',
|
||
desc: '让算术变得像游戏一样简单',
|
||
tag: '数学',
|
||
score: '4.8',
|
||
emoji: '🍊',
|
||
},
|
||
{
|
||
id: 'hot-2',
|
||
title: '创意涂鸦大作战',
|
||
desc: '释放孩子的艺术想象力',
|
||
tag: '艺术',
|
||
score: '4.9',
|
||
emoji: '🎨',
|
||
},
|
||
] as const;
|
||
|
||
const { statusBarHeight } = wx.getWindowInfo();
|
||
|
||
Page({
|
||
data: {
|
||
statusBarHeight,
|
||
tabs: CATEGORY_TABS,
|
||
activeTab: 'all',
|
||
ageBands: AGE_BANDS.map((item, idx) => ({
|
||
...item,
|
||
icon: AGE_BAND_ICONS[idx] || '🌟',
|
||
})),
|
||
activeAgeBand: AGE_BANDS[0].key as AgeBandKey,
|
||
hotRecommends: [...MOCK_HOT_RECOMMENDS],
|
||
mathTrackCards: MOCK_MATH_TRACK,
|
||
chineseTrackCards: MOCK_CHINESE_TRACK,
|
||
},
|
||
|
||
onTabChange(e: WechatMiniprogram.CustomEvent) {
|
||
this.setData({ activeTab: e.detail.id });
|
||
},
|
||
|
||
onTapAgeBand(e: WechatMiniprogram.TouchEvent) {
|
||
const key = e.currentTarget.dataset.key as AgeBandKey | undefined;
|
||
if (!key) return;
|
||
this.setData({ activeAgeBand: key });
|
||
},
|
||
|
||
onTapHotRecommend(e: WechatMiniprogram.TouchEvent) {
|
||
const title = e.currentTarget.dataset.title as string | undefined;
|
||
if (!title) return;
|
||
wx.showToast({ title: `已选择:${title}`, icon: 'none' });
|
||
},
|
||
|
||
onTapAgeMore() {
|
||
wx.showToast({ title: '分龄全部 即将上线', icon: 'none' });
|
||
},
|
||
|
||
onTapHotMore() {
|
||
wx.showToast({ title: '热门推荐 即将上线', icon: 'none' });
|
||
},
|
||
|
||
onTapTrackMore(e: WechatMiniprogram.TouchEvent) {
|
||
const category = e.currentTarget.dataset.category as string | undefined;
|
||
if (!category) return;
|
||
wx.navigateTo({
|
||
url: `/pages/category/category?category=${category}`,
|
||
});
|
||
},
|
||
|
||
onTapTrackCard(e: WechatMiniprogram.TouchEvent) {
|
||
const title = e.currentTarget.dataset.title as string | undefined;
|
||
if (!title) return;
|
||
wx.showToast({ title, icon: 'none' });
|
||
},
|
||
|
||
onShareAppMessage() {
|
||
return {
|
||
title: '涂鸦丫 - 快来生成宝宝的专属学习卡',
|
||
path: '/pages/home/home',
|
||
imageUrl:
|
||
'https://cdn.joeyone.cn/doodle/share-img/index-share-v2.png',
|
||
};
|
||
},
|
||
|
||
onShareTimeline() {
|
||
return {
|
||
title: '涂鸦丫 - 快来生成宝宝的专属学习卡',
|
||
query: '',
|
||
};
|
||
},
|
||
});
|