EngMentor

你的AI英语私教,随时在线

不背单词、不刷题库
通过真实对话,让你自然开口说英语

语音对练 智能纠错 遗忘曲线 四六级
Emma老师 · 水平评估

下午好 ☀️

新同学

连续7天
A2
今日经验值 45 / 100 XP

再完成1次对话即可达标 💪

今日课程

Ordering Coffee

学会在咖啡店自信点单

约10分钟
+30 XP
8
🧠

错题复盘

今日8个待复习

🎓

四六级专区

听力 · 阅读 · 写作

本周学习数据 3月第3周
156
学习分钟
42
新词掌握
87%
正确率
E
Ordering Coffee
03:24
E
Welcome to today's lesson! 🎉 Imagine you just walked into a cozy coffee shop. I'm the barista. Let's practice ordering!

想象你走进了一家温馨的咖啡店,我是咖啡师。来练习点单吧!
E
Hi there! Welcome to Starlight Coffee. What can I get for you today? ☕
你好!欢迎来到星光咖啡。今天想喝点什么?
I want a coffee... hot. And big one.
E
小小纠正
I want a coffee... hot. And big one.
I'd like a large hot coffee, please.
💡 点单时用 "I'd like..." 比 "I want" 更礼貌。把大小和温度放在名词前面:large hot coffee。别忘了加 please
E
latte /ˈlɑːteɪ/
n. 拿铁咖啡
"Could I have an iced latte with oat milk?"
E
Great effort! Now try again — this time, can you order a latte using "I'd like"? And maybe ask about sizes! 😊
说得不错!再试一次——这次用"I'd like"来点一杯拿铁,也可以问问杯型大小!

今日复习

剩余 5 / 8 张
24
已掌握
13
学习中
5
新学习
点击翻转
comprehensive
/ˌkɒmprɪˈhensɪv/
adj. 全面的,综合的
"This book provides a comprehensive guide to English grammar."
🔥 四级高频词汇

四六级专区

1. Campus Conversation

Q: What does the woman suggest?

问:女士建议做什么?
2. Airport Announcement

Q: What is the cause of the delay?

问:延误的原因是什么?
3. Job Interview

Q: What position is the man applying for?

问:男士申请的是什么职位?
4. Science Lecture

Q: What is the main topic?

问:主要话题是什么?
5. Restaurant Order

Q: What does the customer order?

问:顾客点了什么?
🌟

新同学

CEFR A2 · 初级学习者
lulu@example.com
2006-08-20
CEFR 等级进度
A1A2B1B2C1C2
📚
268
已学单词
⏱️
12.5h
累计学习
🔥
7天
最长连续
🎯
~380
CET-4 预估分
深色模式
学习提醒
每日目标
退出登录

📅 今日学习墙

2026-03-28
🎯
50单词
学习目标
⏱️
45分钟
学习时长
🔥
7天
连续学习
🎧 今日重点 8分钟

今日难点单词训练MP3

包含你最近出错的5个单词 + 发音练习,专为你个性化生成。

vocabulary entrepreneur phenomenon pronunciation communication
📝

今日学习日记

刚刚发布

今天学会了虚拟语气的用法,感觉很有用!老师讲解得很清楚,我终于分清了if I were和if I was的区别。

AI批改 Emma老师

"Great! 虚拟语气用得很准确。if I were用于假设情况,if I was用于过去事实,区分得很好!"

🏆

最新成就

发音大师
连续学习7天
难点攻克者
📈

学习进度

75%
本月目标
28 → 16
难点单词减少
function showStudentInfoModal() { const modal = document.getElementById("studentInfoModal"); if (modal) { // 修改标题文字 const titleEl = modal.querySelector("h2") || modal.querySelector(".modal-title"); if (titleEl) titleEl.textContent = "为了给你更精准的英语指导,请告诉我一点信息~"; modal.style.display = "flex"; document.getElementById("studentName").focus(); }} // Student info modal functions function closeStudentInfoModal() { document.getElementById("studentInfoModal").style.display = "none"; } } finally { // 恢复按钮状态 if (submitBtn) submitBtn.disabled = false; } } // Restore student info on page load (function() { const saved = localStorage.getItem("engmentor_student"); if (saved) { try { APP.student = JSON.parse(saved); } catch(e) {} } })();

📅 今日学习墙

2026-03-28
🎯
50单词
学习目标
⏱️
45分钟
学习时长
🔥
7天
连续学习
🎧 今日重点 8分钟

今日难点单词训练MP3

包含你最近出错的5个单词 + 发音练习,专为你个性化生成。

vocabulary entrepreneur phenomenon pronunciation communication
📝

今日学习日记

刚刚发布

今天学会了虚拟语气的用法,感觉很有用!老师讲解得很清楚,我终于分清了if I were和if I was的区别。

AI批改 Emma老师

"Great! 虚拟语气用得很准确。if I were用于假设情况,if I was用于过去事实,区分得很好!"

🏆

最新成就

发音大师
连续学习7天
难点攻克者
📈

学习进度

75%
本月目标
28 → 16
难点单词减少
// 学习墙相关函数 function downloadTodayMP3() { showToast('正在生成今日MP3...'); // 这里可以调用后端API生成MP3 setTimeout(() => { showToast('🎵 MP3已生成,开始下载...'); // 模拟下载 const link = document.createElement('a'); link.href = '/api/mp3/today-difficult'; link.download = '今日难点训练.mp3'; document.body.appendChild(link); link.click(); document.body.removeChild(link); }, 1500); } // 标记难点单词 function markAsDifficult(word) { if (!APP.student) { showToast('请先登录'); return; } // 调用后端API标记难点单词 fetch('/api/student/mark-difficult', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ word: word }) }) .then(response => response.json()) .then(data => { if (data.success) { showToast('✅ "' + word + '" 已标记为难点单词'); // 更新学习墙显示 updateLearningWall(); } else { showToast('标记失败: ' + (data.error || '未知错误')); } }) .catch(error => { console.error('标记难点单词失败:', error); showToast('网络错误,请稍后重试'); }); } // 更新学习墙数据 function updateLearningWall() { if (!APP.student) return; // 获取今日数据 fetch('/api/learning-wall/today') .then(response => response.json()) .then(data => { if (data.success) { // 更新今日概览 const statsElements = document.querySelectorAll('.today-overview .stats div .font-mono'); if (statsElements.length >= 3) { statsElements[0].textContent = data.target_words + '单词'; statsElements[1].textContent = data.study_time; statsElements[2].textContent = data.streak_days + '天'; } // 更新日期 const dateElement = document.querySelector('.today-overview span.font-mono'); if (dateElement) { dateElement.textContent = data.date; } // 更新难点单词列表 const wordList = document.querySelector('.word-list'); if (wordList && data.difficult_words) { wordList.innerHTML = ''; data.difficult_words.forEach(word => { const span = document.createElement('span'); span.style.cssText = 'font-family:var(--font-body);font-size:0.85rem;color:var(--ink);background:var(--cream-dark);padding:4px 10px;border-radius:16px;border:1px solid var(--cream-dark);margin-right:8px;margin-bottom:8px;'; span.textContent = word; wordList.appendChild(span); }); } } }) .catch(error => { console.error('更新学习墙失败:', error); }); } // 页面加载时初始化学习墙 document.addEventListener('DOMContentLoaded', function() { // 当导航到学习墙时更新数据 const originalNavigateTo = navigateTo; navigateTo = function(pageId) { originalNavigateTo(pageId); if (pageId === 'learning-wall') { setTimeout(() => { updateLearningWall(); }, 300); } }; // 初始加载 setTimeout(() => { if (APP.currentPage === 'learning-wall') { updateLearningWall(); } }, 1000); }); // 学习墙相关函数 function downloadTodayMP3() { showToast('MP3下载功能开发中...'); // 实际实现:调用后端API生成并下载MP3 // fetch('/api/mp3/generate-today') // .then(res => res.blob()) // .then(blob => { // const url = window.URL.createObjectURL(blob); // const a = document.createElement('a'); // a.href = url; // a.download = '今日难点训练.mp3'; // document.body.appendChild(a); // a.click(); // document.body.removeChild(a); // window.URL.revokeObjectURL(url); // }); } // 加载学习墙数据 async function loadLearningWall() { console.log('加载学习墙数据...'); // 更新日期 const today = new Date(); const dateStr = today.toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', weekday: 'short' }); const dateElement = document.querySelector('.today-overview span'); if (dateElement) { dateElement.textContent = dateStr; } // 这里可以添加从后端加载学习数据的逻辑 // const data = await API.getLearningWallData(); // if (data) { // updateLearningWall(data); // } } // 页面切换时加载学习墙数据 const originalNavigateTo = navigateTo; navigateTo = function(pageId) { originalNavigateTo(pageId); if (pageId === 'learning-wall') { setTimeout(() => { loadLearningWall(); }, 300); } }; // 初始化:如果当前页面是学习墙,加载数据 document.addEventListener('DOMContentLoaded', function() { if (APP.currentPage === 'learning-wall') { setTimeout(() => { loadLearningWall(); }, 500); } });

我的难点词库

0个单词
🔥
0
当前难点
🎯
0
已攻克

快速操作

难点单词列表

📚
暂无难点单词
遇到难记的单词时,点击"标记为难点"

📅 复习计划

30%
0
今日到期
明天
下次复习
// 开始聊天体验函数 function startChatExperience() { console.log('开始聊天体验...'); // 1. 先检查是否有学生信息 const saved = localStorage.getItem('engmentor_student'); if (saved) { try { APP.student = JSON.parse(saved); console.log('已有学生信息:', APP.student.name); } catch(e) { console.error('解析学生信息失败:', e); } } // 2. 直接跳转到对话页面 navigateTo('tutor-chat'); // 3. 显示欢迎提示 showToast('欢迎来到EngMentor!开始与Emma老师对话吧 🎉'); // 4. 导航函数会自动触发checkAndShowStudentInfoModal() // 因为我们在navigateTo中已经添加了相关逻辑 } // 紧急修复:简化按钮点击逻辑 document.addEventListener('DOMContentLoaded', function() { const btn = document.getElementById('btnStart'); if (btn) { // 移除旧的onclick,添加新的事件监听 btn.removeAttribute('onclick'); btn.addEventListener('click', function() { console.log('开始体验按钮被点击'); // 直接显示信息收集弹窗 const modal = document.getElementById('studentInfoModal'); if (modal) { modal.style.display = 'flex'; console.log('显示信息收集弹窗'); } else { console.error('找不到studentInfoModal'); } }); console.log('按钮事件已修复'); } }); // 最简单的修复函数 function showSimpleModal() { console.log("showSimpleModal被调用"); const modal = document.getElementById("studentInfoModal"); if (modal) { modal.style.display = "flex"; // 修改标题 const titleEl = modal.querySelector("h2"); if (titleEl) titleEl.textContent = "为了给你更精准的英语指导,请告诉我一点信息~"; // 显示提示 const toast = document.getElementById("toast"); const toastText = document.getElementById("toastText"); if (toast && toastText) { toastText.textContent = "为了让Emma老师更好地帮你练习,请补充一点信息~"; toast.classList.add("show"); setTimeout(() => toast.classList.remove("show"), 2500); } console.log("弹窗已显示"); return true; } console.error("找不到弹窗"); return false;} return false; } // 最简单的修复:按钮直接显示模态框 document.addEventListener('DOMContentLoaded', function() { const btn = document.getElementById('btnStart'); if (btn) { btn.onclick = function() { const modal = document.getElementById('studentInfoModal'); if (modal) { // 最简单直接的解决方案 function showModalAndToast() { try { // 显示模态框 const modal = document.getElementById('studentInfoModal'); if (modal) { modal.style.display = 'flex'; // 修改标题 const titleEl = modal.querySelector('h2'); if (titleEl) { titleEl.textContent = '为了给你更精准的英语指导,请告诉我一点信息~'; } // 显示提示 const toast = document.getElementById('toast'); const toastText = document.getElementById('toastText'); if (toast && toastText) { toastText.textContent = '为了让Emma老师更好地帮你练习,请补充一点信息~'; toast.classList.add('show'); setTimeout(function() { toast.classList.remove('show'); }, 2500); } return true; } } catch(e) { console.error('显示模态框错误:', e); } return false; } // 绝对可靠的修复方案 (function() { // 等待页面完全加载 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } function init() { console.log('开始修复按钮...'); var btn = document.getElementById('btnStart'); if (!btn) { console.error('找不到按钮'); return; } // 移除旧的onclick btn.removeAttribute('onclick'); // 添加新的事件监听器 btn.addEventListener('click', function(event) { event.preventDefault(); event.stopPropagation(); console.log('按钮被点击'); // 显示模态框 var modal = document.getElementById('studentInfoModal'); if (modal) { modal.style.display = 'flex'; console.log('模态框显示成功'); // 修改标题 var title = modal.querySelector('h2'); if (title) { title.textContent = '为了给你更精准的英语指导,请告诉我一点信息~'; } // 显示提示 var toast = document.getElementById('toast'); var toastText = document.getElementById('toastText'); if (toast && toastText) { toastText.textContent = '为了让Emma老师更好地帮你练习,请补充一点信息~'; toast.classList.add('show'); setTimeout(function() { toast.classList.remove('show'); }, 2500); } return false; } else { console.error('找不到模态框'); } }); console.log('按钮修复完成'); } })();