Skip to content
whaleal-devPublic

About

雅思

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

IELTS Studio

无后端的雅思学习网站,使用 Vue 3、Vite 和 PrimeVue 4,构建产物为纯静态文件。 网站导航与模块导航均位于顶部,包含单词、王璐听力语料库、同义词、单词播放四个模块。 四个模块的日期统一显示在顶部右上角,使用北京时间,手机端也显示;日期前的设置图标按钮暂未开放功能。 单选、多选、复选框和练习模式使用 PrimeVue 组件,延续蓝白玻璃风格;章节、分组和发音人可搜索,听力分组多选支持勾选、已选标签和清除,无需按住 Command/Ctrl。

本地使用

需要 Node.js 和 npm。首次运行安装项目依赖:

npm install
npm run dev

访问 学习网站 、单词模块入口 、听力语料库 、同义词 或 单词播放 。 框架源文件通过 HTTP 访问,不再直接双击 HTML 入口。

单词学习

  • 词库仅提供「雅思主题词汇」,按章节、分组学习;旧的核心词、阅读考点词或听力考点词选择恢复到主题词汇,已有学习记录与章节进度保留。
  • 支持单词卡片、中文选择题、听音拼写、本地英音播放与自动播放。
  • 单词难度为 0~10,新词默认 0;卡片提供「-1」「+1」「难度+3」,选中文或听音拼写答错自动+3,最高为 10,答对不自动减分。可独立标记已掌握;「我的笔记」默认展开,可手动收起,输入后自动保存当前单词笔记。
  • 「难度复习」支持独立搜索、难度上下限、全部/到期筛选和难度升降序排列,默认展示难度 1~10;设最低难度为 0 可查看难度为 0 的词。列表内可直接调整难度,点击词条与「练习筛选结果」均练习当前列表,「复习到期词」也遵守搜索与难度范围;增加难度立即到期,降至 0 后不再安排到期复习。
  • 隐藏单词与隐藏释义开关位于「难度+3」「标记已掌握」所在操作区,手机排列为两列;隐藏时保留占位,切词、切组与刷新后保持设置。
  • 开发阶段不兼容旧难词标记、不读取旧整包单词记录;难度、笔记、掌握状态和复习进度按当前逐词记录保存。
  • 英文、中文释义和音标可以用于搜索。
  • 学习统计包括词条掌握度、近期学习量与连续学习天数。
  • 左右方向键切词,空格播放或暂停;输入框和设置窗口不会触发学习快捷键。
  • 暂不提供学习记录备份、导入、导出功能;单词自定义词库上传列为后续计划。

浏览器存储

学习记录不上传服务器。IndexedDB 使用现有 apple-word-trainer 数据库、版本 1、对象存储 kv。 新的设置、词条状态、笔记、位置与每日统计使用独立的 ielts-words-v1: 键。

  • 每条新记录按序列化后的 UTF-8 大小检查,包含记录键后不超过 8 KiB。
  • 新笔记限制为 400 个 UTF-16 代码单元,较长笔记按大小分块保存。
  • 每日学习词条用位图计数,完整主词库的一天统计小于 1 KiB,不追加逐次日志。
  • 保存失败时保留当前页面内的待保存数据,显示错误与重试按钮;有未保存内容时离开页面会提示。
  • IndexedDB 不可用时按记录回退到 localStorage,并显示兼容存储提示;容量不足时不会显示已保存。
  • 单词页顶部显示保存状态,移除存储说明弹窗;保存失败时仍可重试。听力的学习记录窗口保留占用与可用空间估算。
  • 单词模块仅读取当前逐词记录,不读取旧 apple-word-trainer-v4 整包记录。

浏览器按访问来源隔离数据。旧 file://、localhost、127.0.0.1、不同端口与不同浏览器的记录互不共享。 旧本地 HTML 记录不会自动出现在新 HTTP 页面;日常使用请固定访问地址。

听力语料库

  • 以原 listening-word/王璐语料库_源码.html 的章节内容为基准,保留 Chapter 3、4、5、8、11 共 88 个分组,分组内去重后有 9330 条语料。
  • 原始数据单独保存在 listening-word/data/corpus.json,不混入旧 word.json 的额外语料。
  • 听写模式支持判题、重播、暂停、显示答案、本轮错词复练;答错、显示答案和音频结束后超时均记为错词,答对自动进入下一条。
  • 「播放设置」默认展开,始终展示听音顺序(顺序播放/乱序播放)、单词循环次数与大循环播放次数;这三项用于听音模式,次数为正整数,不限制为最多 20 次,不写入听写成绩。单词与词组可分别设置倍速。
  • 每词间隔设置为 0 时手动继续;听写答对仍自动前进。暂停会暂停音频与计时。
  • 听音时可用当前单词旁的按钮显示或隐藏拼写,与下方语料列表分别控制;「本轮进度」可隐藏或展开,默认展开。两个开关均会保存,播放或暂停中切换不会改变播放状态。
  • 「查看或调整本组语料」默认展开,语料用中文分号分隔并自动换行,一行可放多条;编辑本组语料或粘贴自定义列表时支持换行、中英文分号与中英文逗号,优先匹配词库中含逗号的完整语料,保留词组空格。自动去重并区分词库不存在与不属于所选分组的语料。
  • 错词本支持分组多选筛选、搜索、低正确率/多次错误/最近 7 天筛选、多选复练、试听和错误等级调整。
  • 完整分组听写完成才计入章节成绩,按分组与日期汇总次数、累计正确率、最好成绩和最近成绩;听音、子集、错词复练与包含音频跳过的练习不计入。
  • 使用本地原声音频,9330 条语料由 9325 个文件覆盖;已从原音频来源补齐 sea otter 并修复 lecture theatre 的无效文件。后续发现缺失时开始前明确提示并跳过;运行时播放失败也支持重播或跳过,跳过不会计为答错。
  • 方向键上重播,听音模式左右切词,空格暂停/继续;输入框和弹窗不会触发练习快捷键。

听力记录沿用 ielts-dictation-data-db、版本 1、对象存储 kv,新记录使用 ielts-listening-v1: 键。 错词和每词统计按章节+语料保存,章节成绩按分组+日期保存,自定义文本按块保存,每条新记录包含键和元数据不超过 8 KiB。 保存失败时保留页面内的待保存数据并支持重试,IndexedDB 不可用时回退 localStorage。 刷新会恢复设置、语料列表、错词与成绩,正在播放的轮次需要重新开始。 同来源可读取旧 IndexedDB 和 localStorage 设置与记录;原键保留,不覆盖整个旧数据对象。 音频不缓存到浏览器数据库,暂不提供备份、导入、导出功能。

同义词

  • 支持 TXT 多文件词库导入,按选择顺序合并并替换当前词库;格式错误时保留当前词库。
  • 单个文件最大 2 MB(2 × 1024 × 1024 字节)。成功导入后分别缓存在当前浏览器,最多 20 个;同名文件替换并视为最新上传,超过上限时移除最早导入的文件。
  • 导入弹窗的「已缓存文件」列表支持点击「选择」多选或取消选择,再统一确认,按列表显示顺序合并加载;新上传文件按选择顺序追加。选择缓存不会改变淘汰顺序。
  • 每个缓存文件可手动删除,删除后释放缓存名额并清空其内容块,当前已加载词库、笔记及其他学习记录保留;保存失败可重试。
  • TXT 使用 UTF-8 编码,每行一组,用英文或中文逗号分隔,空行忽略,无需标题行。「示例词库」旁的「示例文件」按钮说明如何编写和上传词表,对照展示逗号分隔(英文/中文)、英文词组和中英标签三种文件内容及实际解析后的分组;中文标签及「test测试」等中英混合词条标明仅展示。
  • 保留词组与中文标签,含中文词条只展示,不加入发音队列。单个词条最大 200 个字符。
  • 默认示例为用户指定的「同义词-听力179考点词」词库,共 179 组、672 个词条;首次进入且没有已保存词库时自动加载,已有词库优先恢复,默认示例不占文件缓存名额。可搜索单词或同义词,搜索结果按完整分组展示。
  • 词库操作、「播放设置」与播放控制位于同一张卡片,内部用细分隔线区分;桌面英文发音人下拉框最多 360 px,与播放行居中同排且等高、靠左紧凑排列,手机上下排列;当前词与播放按钮位于卡片底部。设置标题、内边距与控件行距复用单词播放样式。
  • 滑块可调整每词播放 1/2/3/5/10 次、每组循环 1/2/3/5/10 轮、0.5~2 倍速、0~5 秒词间间隔;桌面四列、手机两列。
  • 每组完成设定轮数后进入下一组;点击英文词条可试听,自动播放中点击词条会从该词继续。
  • 「播放行居中」按钮默认关闭,选择会保存在当前浏览器;开启后当前单词所在组滚动到屏幕中央,播放和切词时跟随,关闭后不主动滚动。切换不打断播放,超出已展示范围的播放组会自动展开,最后一组也可居中。
  • 支持上下词、播放/暂停、当前词高亮,以及已有笔记的编辑和移除;页面已移除「添加笔记」入口。
  • 词库、设置、笔记与播放位置刷新后恢复,刷新不自动发音。暂停后继续会重新播放当前词。
  • 左右方向键切词,空格播放/暂停;输入框、选择框、按钮和弹窗不触发全局快捷键。

单词播放

  • 粘贴英文单词或词组,按英文/中文逗号或换行解析;过滤含中文词条,按英文大小写与空格去重,并显示过滤数量。单个词条最大 200 个字符。
  • 使用 Web 英文语音,默认优先英音,也可选择浏览器提供的英文发音人;已移除百度发音,旧百度设置恢复为 Web 语音。
  • 支持 0.5~1.5 倍速、每词播放 1~5 次、0.5~5 秒词间间隔,顺序播放完本轮后停止。
  • 支持播放/暂停、重播、上下词、点击列表跳转与一键乱序。乱序会重置位置;暂停后继续会重新播放当前词。
  • 听写模式隐藏当前词和列表拼写,逐词重复后等待输入,不自动切到下一词;检查答案忽略大小写与连续空格,也可显示答案。
  • 词表、设置、播放位置与完成状态刷新后恢复,刷新不自动发音;清空操作仅清空新版模块的词表和设置,旧参考页记录保留。
  • 左右方向键切词,空格播放/暂停,R 重播;输入框、选择框与按钮不触发全局快捷键。
  • 发音失败时显示错误并停止播放,可重播或更换英文发音人。

两个新模块复用 apple-word-trainer、版本 1、对象存储 kv,分别使用 ielts-synonyms-v1: 和 ielts-word-player-v1: 独立键。 词库、自定义词表、词库来源与长笔记按块保存,设置与位置单独保存,每条新记录包含键和元数据后不超过 8 KiB。 同义词文件缓存使用独立键和 20 个固定槽位,与当前导入词库一批保存;同名替换或淘汰时清空旧文件多余内容块,保存失败不显示已缓存,可在弹窗中重试。 同来源可读取旧 ielts_notes_v4 笔记与 ielts_listen_repeat 词表/设置,原键保留。容量不足或存储被禁用时明确提示,保留页面内修改并支持重试。 原 同义词学习/同义词学习.html 和 发音/发音和听写.html 保留为参考,不修改其内容。

同义词与单词播放页面最下方均显示「建议使用 Google 浏览器+VPN」。进入这两个模块时,非 Google Chrome 弹窗提示「请使用 Google 浏览器」,同来源两个模块共用 localStorage 提醒日期,按北京时间自然日最多弹窗一次,刷新与模块切换不会重复提醒。不能保存提醒日期时仅展示底部建议,避免反复弹窗。 Chrome 识别优先读取浏览器品牌信息,不支持时回退到浏览器标识;相关接口与标识规则见 Chrome 文档 和 MDN 文档 。

构建与验证

npm test
npm run build
npm run preview

dist/ 包含五个 HTML 入口、脚本、样式、精简章节数据及本地单词与听力音频。 预览与开发使用相同的 http://127.0.0.1:5173/ 地址,切换前先停止当前开发或预览进程。 此本地构建流程不执行公开发布。

服务器部署

服务器为 47.100.74.187,使用系统 Nginx 提供纯静态网站,访问地址为 IELTS Studio 。服务器不运行 Vite 开发服务,也不需要 Node.js 或数据库参与网站运行。

  • 版本目录:/var/www/ielts-studio/releases/。
  • 当前版本入口:/var/www/ielts-studio/current,指向已校验的版本目录。
  • 站点配置:/etc/nginx/conf.d/ielts-studio.conf,项目副本为 deploy/ielts-studio.nginx.conf。
  • 日志:/var/log/nginx/ielts-studio.access.log 与 /var/log/nginx/ielts-studio.error.log。
  • 发布文件 SHA-256 清单:/var/lib/ielts-studio/,不放在公开站点目录中。

更新时先在本地通过测试和构建,将新的静态文件上传到独立版本目录并核对 SHA-256,再切换 current,通过 nginx -t 后重载 Nginx。历史版本保留,HTML 每次访问校验更新,带内容哈希的脚本和样式使用长期缓存,音频缓存 30 天。

运行状态与配置可在服务器检查:

systemctl status nginx
systemctl is-enabled nginx
nginx -t
readlink -f /var/www/ielts-studio/current

当前使用 HTTP 地址;学习记录仍按浏览器来源保存,本地开发地址的记录不会自动出现在此服务器地址下。

目录

  • src/:Vue 界面、词库读取、学习逻辑、浏览器存储和样式。
  • src/listening/:听力语料界面、播放、判题、错词、统计与旧记录读取。
  • src/synonyms/:同义词导入、分组搜索、循环播放和笔记。
  • src/word-player/:自定义词表、播放队列、乱序、听写和位置恢复。
  • src/practice/:共用的发音、分块存储、发音人选择和页面样式。
  • synonyms/ 与 word-player/:两个新模块的 HTML 入口。
  • src/generated/:精简单词章节与听力章节、音频映射和缺失报告,开发和构建前自动准备,不提交。
  • words/data/:现有词库与相关词来源。
  • words/assets/audio/eng/:本地单词音频。
  • listening-word/data/corpus.json:从用户指定 HTML 提取的原始听力语料。
  • listening-word/assets/audio/、chunks/、chapter8/:已有听力音频。
  • scripts/:单词/听力数据准备和静态音频复制。
  • deploy/:Nginx 静态站点配置。
  • tests/:单词难度边界与复习间隔、存储大小、容量失败、连续写入、判题、音频映射、其他模块旧记录、每日统计、词库解析、分组循环与播放取消的回归测试。

修改分组 JSON 后运行 npm run prepare:words,再刷新页面。 修改听力源 JSON 或本地音频后运行 npm run prepare:listening,再刷新页面;缺失情况见 src/generated/listening-audio-report.json。 项目规范见 CLAUDE.md,实际进度与最近验证见 ROADMAP.md。

About

雅思

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages