import CompareDraw from '../shared/service/compareDraw'; import { createMathPage, CanvasDataState, } from '../shared/common/mathPageMixin'; // 获取公共方 createMathPage({ canvas: null as Canvas | null, ctx: null as RenderingContext | null, boxHeight: 0, boxWidth: 0, drawService: null as CompareDraw | null, compareData: null as { problems: Array<{ leftCount: number; rightCount: number; leftImageIndex: number; rightImageIndex: number; imageType: 'fruits' | 'twelve-animals'; }>; } | null, data: { pageTitle: '数一数,比大小', subTitle: '数一数,比较数量,在⭕️中填入>、<、=', functionId: '', hasContent: false, showShareDialog: false, } as CanvasDataState, onLoad(options: { id?: string }) { const functionId = options.id || 'compare'; this.initPageInfo(functionId, '数一数,比大小'); }, onReady() { this.initCanvas({ createDrawService: ( canvas: Canvas, ctx: RenderingContext, options?: Record, ) => { return new CompareDraw(canvas, ctx, options); }, drawServiceOptions: { subTitle: this.data.subTitle, }, onCanvasReady: () => { // Canvas 初始化完成后,生成初始数据 this.onRandom(); }, }); }, /** * 绘制Canvas内容 */ async drawCanvas() { if (!this.ctx || !this.drawService || !this.compareData) { return; } try { await this.drawService.draw(this.compareData); this.setData({ hasContent: true }); } catch (error) { console.error('绘制失败:', error); this.setData({ hasContent: false }); } }, /** * 随机生成 */ onRandom() { this.generateCompareData(); this.drawCanvas(); }, /** * 生成比较数据 */ generateCompareData() { const problems: Array<{ leftCount: number; rightCount: number; leftImageIndex: number; rightImageIndex: number; imageType: 'fruits' | 'twelve-animals'; }> = []; // 生成6道题目 for (let i = 0; i < 12; i++) { // 随机选择图片类型 const imageType: 'fruits' | 'twelve-animals' = Math.random() < 0.5 ? 'fruits' : 'twelve-animals'; // 根据图片类型确定最大索引 const maxImageIndex = imageType === 'fruits' ? 22 : 12; // 生成左右两边的数量(1-10) const leftCount = Math.floor(Math.random() * 10) + 1; const rightCount = Math.floor(Math.random() * 10) + 1; // 随机选择图片索引 const leftImageIndex = Math.floor(Math.random() * maxImageIndex) + 1; const rightImageIndex = Math.floor(Math.random() * maxImageIndex) + 1; problems.push({ leftCount, rightCount, leftImageIndex, rightImageIndex, imageType, }); } this.compareData = { problems }; }, });