]> acesimba.cloud Git - words.git/log
words.git
29 hours agov1: 每日进度/代码更新 2026-09-30 01:00 master
codebuddy [Tue, 29 Sep 2026 17:00:07 +0000 (01:00 +0800)]
v1: 每日进度/代码更新 2026-09-30 01:00
[分支 master]

进度更新(study_logs 新增,status=completed):
(无进度数据库)

3 weeks agoV1: 回退 study_logs 写入 new_group_id(取消 V1→split 自动同步,恢复手动同步)
root [Wed, 2 Sep 2026 23:40:33 +0000 (07:40 +0800)]
V1: 回退 study_logs 写入 new_group_id(取消 V1→split 自动同步,恢复手动同步)

3 weeks agoV1: 修复学习进度回写 study_logs 缺失 new_group_id,使 split 可自动同步进度
root [Wed, 2 Sep 2026 23:25:21 +0000 (07:25 +0800)]
V1: 修复学习进度回写 study_logs 缺失 new_group_id,使 split 可自动同步进度

4 weeks agoV1: 提交最新背诵进度数据(DivS 切 split 分支前快照)
lexicon [Thu, 27 Aug 2026 02:55:14 +0000 (10:55 +0800)]
V1: 提交最新背诵进度数据(DivS 切 split 分支前快照)

5 weeks agoV1: 同步 8/20 修正后最新 study_logs (iPad 回写/后续进度)
lexicon [Wed, 26 Aug 2026 01:06:33 +0000 (09:06 +0800)]
V1: 同步 8/20 修正后最新 study_logs (iPad 回写/后续进度)

5 weeks agoV1: TTS 切换 Edge 神经嗓音(Sonia)+缩写展开; 修复 off_ed 同步误删进度; 补回 8/20 丢失记录
lexicon [Fri, 21 Aug 2026 12:06:01 +0000 (20:06 +0800)]
V1: TTS 切换 Edge 神经嗓音(Sonia)+缩写展开; 修复 off_ed 同步误删进度; 补回 8/20 丢失记录

- backend/main.py: /api/tts 引擎由有道/百度改为 Edge 神经嗓音(en-GB-SoniaNeural)首选,
  有道/百度作兜底; 合成前做无歧义缩写展开(sth->something 等); 缓存键加 edge_sonia_ 前缀
- frontend/public/sw.js: CACHE_VERSION v1->v2, 强制重新拉取 TTS 音频避免旧难听嗓音残留
- frontend/src/sync.js: 删除 phase 2b 破坏性删除逻辑, 同步改为只补不删(布尔并集),
  修复 Review2 等已完成进度被静默丢弃的问题
- backend/db/bcd.db: 修正 8/20 云端记录(G54 review3 补回; G56 review2/G57 review1 撤销)

5 weeks agofix: 补充 G53 review3 进度 (log_date=2026-08-18, created_at 21:00:00, 不影响 8/18 时长统计)
root [Wed, 19 Aug 2026 22:47:39 +0000 (06:47 +0800)]
fix: 补充 G53 review3 进度 (log_date=2026-08-18, created_at 21:00:00, 不影响 8/18 时长统计)

6 weeks agofix: 登录 token 改为永久有效(去除过期), 兼容旧格式 token
root [Wed, 19 Aug 2026 05:34:16 +0000 (13:34 +0800)]
fix: 登录 token 改为永久有效(去除过期), 兼容旧格式 token

6 weeks agofeat: 页面底部展示 ICP 备案号(陕ICP备2026022239号-1), 链接工信部备案查询
root [Wed, 19 Aug 2026 02:43:04 +0000 (10:43 +0800)]
feat: 页面底部展示 ICP 备案号(陕ICP备2026022239号-1), 链接工信部备案查询

6 weeks agofeat: 新增登录鉴权(单用户 Simba), 未登录无法使用; 后端 HMAC token + 中间件保护 /api/*, 前端登录页与路由守卫
root [Wed, 19 Aug 2026 02:11:59 +0000 (10:11 +0800)]
feat: 新增登录鉴权(单用户 Simba), 未登录无法使用; 后端 HMAC token + 中间件保护 /api/*, 前端登录页与路由守卫

6 weeks agofix: 前端 HTTPS 构建用同源相对 API_BASE, 修复 acesimba.cloud 跨域导致同步失败/误判离线
root [Wed, 19 Aug 2026 01:35:39 +0000 (09:35 +0800)]
fix: 前端 HTTPS 构建用同源相对 API_BASE, 修复 acesimba.cloud 跨域导致同步失败/误判离线

6 weeks agochore: 更新 nginx 跟踪副本, 补上 80/443 备案核验 server 块(与线上一致)
root [Tue, 18 Aug 2026 23:24:04 +0000 (07:24 +0800)]
chore: 更新 nginx 跟踪副本, 补上 80/443 备案核验 server 块(与线上一致)

6 weeks agofix: 恢复 G55 服务端进度(被误 git checkout 删除的 study+test, 2026-08-18)
root [Tue, 18 Aug 2026 23:01:21 +0000 (07:01 +0800)]
fix: 恢复 G55 服务端进度(被误 git checkout 删除的 study+test, 2026-08-18)

6 weeks agofeat: 学习日历显示每日实际学习时长(各次学习时段之和, 不含间隔)
root [Tue, 18 Aug 2026 15:22:50 +0000 (23:22 +0800)]
feat: 学习日历显示每日实际学习时长(各次学习时段之和, 不含间隔)

- 改为方案B: 记录每次学习的真实起止时长并按时长求和
- 前端 StudyMode/TestMode: 进入时记录 sessionStartRef, 完成时计算 durationSec 传入 putProgress
- db.putProgress 增加 duration_sec 字段; sync push/pull 携带 duration_sec(双向同步)
- 后端 SyncEvent/ProgressUpdate 增加 duration_sec; sync/push 写入, sync/pull 返回
- /api/calendar 改为按日 SUM(duration_sec) 得实际学习分钟(替代之前的跨度算法)
- 日历离线降级同样按本地 duration_sec 求和; 日期左侧"N分钟"徽标不变
- 历史记录 duration_sec 多为0, 故旧日期不显示时长, 仅新学习的日期开始累计

6 weeks agofeat: 学习日历按日显示学习时长(分钟), 置于日期左侧
root [Tue, 18 Aug 2026 15:04:21 +0000 (23:04 +0800)]
feat: 学习日历按日显示学习时长(分钟), 置于日期左侧

- 后端 /api/calendar 新增 duration_min: 当天最早一项到最后一项的时间跨度(中国时间)
  历史 created_at 为 UTC、新记录为中国时间, 用 CASE 归一化到中国时间(与 log_date 对齐), 避免混算虚高
- 前端 StudyCalendar: 在线读 duration_min, 离线按本地 completed_at 同类计算; 日期单元格头部左侧显示"N分钟"徽标
- 仅 display>0 时显示; 离线降级与在线一致

6 weeks agofix: 恢复 G54 复习1 进度(误删, 用户确认应保留)
root [Tue, 18 Aug 2026 13:23:18 +0000 (21:23 +0800)]
fix: 恢复 G54 复习1 进度(误删, 用户确认应保留)

- 重新插入 study_logs id=401 (group_id=54, op_type=review1, log_date=2026-08-18)
- 仅数据恢复, 前端删除回写逻辑保持不变; 下次同步会自动补回本地进度

6 weeks agofix: 支持进度撤销-服务端删除已确认进度回写本地; 删除G54复习1
root [Tue, 18 Aug 2026 13:21:42 +0000 (21:21 +0800)]
fix: 支持进度撤销-服务端删除已确认进度回写本地; 删除G54复习1

- 新增 deleteProgress(); sync pull 在拉取成功后, 对本地非 dirty 且服务端已不存在的进度执行本地删除
  仅当 serverEvents 非空时执行, 防止服务端异常空响应误删; 绝不删 dirty(未推送)记录
- 删除 study_logs 中 G54 review1(id 401), 该进度记为未执行; 下次同步自动从本地移除

6 weeks agofix: 同步拉取时按日期LWW覆盖本地进度时间, 让首页进度与云端一致
root [Tue, 18 Aug 2026 12:05:04 +0000 (20:05 +0800)]
fix: 同步拉取时按日期LWW覆盖本地进度时间, 让首页进度与云端一致

- 之前 pull 仅在本地缺失时才补入, 导致服务端已修正的 log_date(如时区误记)
  不会回写本地 IndexedDB, 首页进度页仍显示旧 UTC 日期
- 改为本地已存在(同 group,op)时, 若云端日期更新则覆盖本地 completed_at(只升不降, 按日期比较)
- 日期比较避免触碰其他历史记录; 仅云端日期确实更晚的(如本次 8/17->8/18)被更新

6 weeks agofix: 时区bug-StudyMode/TestMode改用中国时间; 修正8/17误记到前一天的记录
root [Tue, 18 Aug 2026 11:58:32 +0000 (19:58 +0800)]
fix: 时区bug-StudyMode/TestMode改用中国时间; 修正8/17误记到前一天的记录

- 新增 localTimestamp() 生成 Asia/Shanghai(UTC+8) 时间戳, 替代 toISOString()(UTC)
  避免凌晨学习被记到前一天
- StudyMode/TestMode 完成学习时写入中国本地时间
- 修正 study_logs 中 id 395-398 因 UTC completed_at 被错误记到 2026-08-17 的问题
  (实际为北京时间 8/18 早上 7点多, created_at UTC 23:39-23:55), 改为 2026-08-18
- 其他 100+ 历史误记记录按用户要求保持不变

6 weeks agofix: TTS 支持含斜杠短语 + 提交学习进度 + 修正 gitignore
root [Sat, 15 Aug 2026 10:17:28 +0000 (18:17 +0800)]
fix: TTS 支持含斜杠短语 + 提交学习进度 + 修正 gitignore

1. 后端 /api/tts 新增 ?w= 查询参数路由:词内字面 "/"(如
   "in the/a form of")不再与 URL 路径分隔符冲突导致 404;
   原 /api/tts/{word} 路径路由保留向后兼容。
2. 前端 ttsUrl 改为 /api/tts?w= 形式(api.js 一处改动覆盖
   StudyMode/TestMode/离线预取所有调用点)。
3. SW 缓存规则改为匹配 /api/tts(无尾斜杠),保证新形式
   音频仍走 cache-first,离线可用。
4. frontend/.gitignore 修正为 build-https/(原 frontend/build-https/
   无效),构建产物不再误入库。
5. 提交今日 iPad 离线学习进度(db/bcd.db)。

已验证端到端:含斜杠短语经 :8443 → :1060 均返回 200 音频。

6 weeks agofix: TTS 增加百度翻译兜底,覆盖有道无法合成的短语
root [Sat, 15 Aug 2026 10:12:26 +0000 (18:12 +0800)]
fix: TTS 增加百度翻译兜底,覆盖有道无法合成的短语

有道 dictvoice 对词库中约 45% 的短语词(41/92)返回 500,
导致这些短语学习时无音频。后端 get_tts 改为先试有道,
失败(URLError / 空响应 / JSON 错误)时回退百度翻译 TTS
(本机可达,无需 key),同源缓存。已验证端到端 :8443 正常。

6 weeks agofix: sync/push 422 — group_id 接受 int/str 并归一化
root [Fri, 14 Aug 2026 13:59:19 +0000 (21:59 +0800)]
fix: sync/push 422 — group_id 接受 int/str 并归一化

iPad 离线学习后恢复连线同步失败,根因为前端 IndexedDB 以 int
存储 group_id,而 Pydantic 模型声明为 str,导致 /api/sync/push
返回 422。将 ProgressUpdate/SyncEvent 的 group_id 改为
Union[str, int] 并加 field_validator 在校验前转 str,修复上传。

6 weeks agofeat: HTTPS 同源部署 + 离线预取修复(PWA 离线缓存生效)
root [Fri, 14 Aug 2026 10:11:28 +0000 (18:11 +0800)]
feat: HTTPS 同源部署 + 离线预取修复(PWA 离线缓存生效)

## 背景
思维导图/语音此前在离线模式不缓存,根因是 Service Worker 在非安全上下文
(http://IP:端口)下不激活。本次完成 HTTPS 部署(Let's Encrypt 证书 + nginx
反代),使 SW 在安全上下文中激活,并修复预取逻辑两处 bug,离线缓存终于生效。

## 改动点
1. HTTPS 同源部署(零风险,原 :55 完全不动)
   - api.js: API_BASE 改为读取 REACT_APP_API_BASE(默认值仍为本机 IP:1060,:55 行为不变)
   - 新增 build-https(REACT_APP_API_BASE="" → 同源相对路径)
   - 新增 deploy/lexicon-frontend-https.service(:8444 同源前端 serve)
   - 新增 deploy/certbot-auth-hook.sh(DNS-01 手动挑战钩子,轮询等待 TXT 生效)
   - 新增 deploy/nginx-words-https.conf(:8443 TLS → /:8444,/api/:1060)
   - 新增 deploy/nginx-conf.d-words.conf.disabled(原占用 :55 的旧 nginx 站点,已停用)
   - 在 /etc/nginx 中禁用占用 :55 的 lexicon 与 conf.d/words.conf,避免与 :55 冲突
   - certbot 签发 acesimba.cloud 证书(DNS-01 手动,Plan B),已配置自动续期

2. 修复离线预取(sync.js)
   - 去重逻辑由 meta.prefetchedGroups 改为直接查 SW 缓存 caches.match(url),
     避免 SW 未接管时请求绕过 SW 未真正缓存却被误标"已完成"导致永久跳过
   - 预取目标仍为 G48–G60(未完成组 + 未开始组前 10 组)的每组首词思维导图 + 每词语音

3. SW 接管时机(index.js)
   - 在 navigator.serviceWorker.ready 之后再触发一次同步+预取,
     确保预取请求被 SW 拦截并写入缓存(首屏即可缓存,无需手动刷新)

4. 前端标题(index.html):单词学习 → Words

5. 云端日志:补充 G38 review3(完成时间 2026-08-03)

## 验证
- https://acesimba.cloud:8443 可打开,SW 激活
- 联网同步后 G48–G60 思维导图/语音写入 Cache Storage(words-pwa-v1)
- 离线模式打开 G48–G60 各组思维导图正常显示
- :55 原学习路径保持可用

6 weeks agofeat: PWA 离线优先同步方案(9+11 规格)+ 日历日期修复 + 云端日志重建
root [Thu, 13 Aug 2026 09:38:47 +0000 (17:38 +0800)]
feat: PWA 离线优先同步方案(9+11 规格)+ 日历日期修复 + 云端日志重建

## 任务一:PWA 离线学习方案(满足 9 条规格)
搭建离线能力底座:
- 前端:Service Worker (public/sw.js)、manifest.json、PWA 注册 (index.js/App.js)
- IndexedDB 封装 (db.js):words/progress/meta 三 store,离线进度读写、dirty 标记、meta 元数据
- 同步骨架 (sync.js):sync_push 布尔并集、sync_pull 拉取
- 在线状态探测 (useOnlineStatus.js):navigator.onLine + online/offline 事件
- 学习日历离线降级 (StudyCalendar.js)
- 后端 main.py:sync_push/sync_pull、/api/calendar、/api/home 等
- 配套样式与组件:SyncNotifications.css/js、Home/StudyMode/TestMode 离线改造

## 任务二:PWA 离线优先同步重构(满足 11 条规格)
在底座之上实现离线优先 + 后台自动同步体系,核心规则:
1. 本地 IndexedDB 始终优先显示(Home 直接读本地,不依赖云端)
2. 严格脏数据推送(strict dirty-push):sync.js 只上传 dirty=true 记录,
   非脏(pull 所得)不上传,避免回声/重复
3. 布尔并集合并(boolean-union):任一方完成某 (group,op) 即完成,不删、不比时间
4. 同步状态机(idle / syncing[upload|merge|init] / synced / failed),
   经 subscribeSyncStatus 发布订阅
5. 联网后台自动同步 triggerAutoSync(幂等锁),不覆盖本地已学进度
6. 顶部状态条 7 种状态:初始化中 / 上传中 / 合并中 / 同步完成 / 同步失败 /
   离线待同步 / 离线可用(含周日);synced 4s 自动隐藏;失败显示重试按钮
7. 首次离线阻塞学习 (needInit);同步中且有 dirty 阻塞新学习 (blocking)
8. StudyMode/TestMode 完成即写本地 dirty 并在线触发自动同步
9. iOS Safari 在线不可靠 → useOnlineStatus 每 5s 主动 fetch 探测兜底
10. 保留周日提示;本地优先完成学习/测试/复习

修改文件:sync.js(状态机+triggerAutoSync+recomputeLearnableGroups)、db.js(isInitialized)、
Home.js(本地优先+needInit/blocking)、SyncNotifications.js/.css(状态条重写)、
StudyMode.js/TestMode.js(写 dirty+自动同步)、useOnlineStatus.js、api.js 及
GroupView/UploadPicture/StudyCalendar/App/index 适配。

## 任务三:修复学习日历日期分组 bug + 云端日志重建
日历 bug 根因:/api/calendar、sync_pull、get_progress_from_db、update_progress 均优先或仅用
created_at(入库时间)作日期,导致批量插入记录全显示为插入当天(8/13)。
修复 backend/main.py:
- /api/calendar 改用 COALESCE(log_date, substr(created_at,1,10)) 优先业务日期
- sync_pull: MAX(COALESCE(log_date, created_at))
- get_progress_from_db: MAX(COALESCE(log_date, created_at))
- update_progress: 在线写入补 log_date,去重条件同步改为按 log_date

云端日志重建 (bcd.db):按梯度学习规则(学 G_N = G_N 学+测 + G_(N-1)R1 + G_(N-2)R2 + G_(N-3)R3)
重建 8/1–8/12 连续进度:
- 8/3、8/6 改为仅 R3 执行日
- 8/8、8/9 补学(原为空),保证 8 月每天都有学习进度
- 8/12 严格保持:学 G49、测 G49、R1 G48、R2 G47、R3 G46
- 当前最大组 G49,最大日期 2026-08-12

7 weeks agofeat: 测试/复习模式强制英文小写输入
words [Tue, 11 Aug 2026 02:54:22 +0000 (10:54 +0800)]
feat: 测试/复习模式强制英文小写输入

- sanitize 增加 toLowerCase: 实时压制首字母自动大写
- 输入框只显示小写英文, 中文/全角/emoji 仍被剔除
- 抄写比较改大小写不敏感(5处), 保证 Arctic 等大写词抄写匹配
- 测试答题比较本就 toLowerCase, 无需改

7 weeks agofix: 修复进度重复记录 bug (数据+前端+后端三层)
words [Sun, 9 Aug 2026 13:23:15 +0000 (21:23 +0800)]
fix: 修复进度重复记录 bug (数据+前端+后端三层)

问题: 完成按钮被按住Enter时浏览器原生key-repeat触发多次finishTest,
后端盲插导致 study_logs 出现重复记录(8月共25条多余行)

修复:
- 数据: 清理 study_logs 25条重复, 247->222, 每组保留最早一条
- 前端 StudyMode/TestMode: 加 submittedRef 防重入, 完成按钮 disabled
- 后端 /api/progress/update: 插入前查当天同(group_id,op_type)记录, 存在则跳过
- 备份: bcd.db.bak_pre-dedup_20260809_210635

2 months agofeat: 学习日历功能
words [Thu, 30 Jul 2026 03:45:55 +0000 (11:45 +0800)]
feat: 学习日历功能

- 后端新增 GET /api/calendar: 按日期聚合 study_logs 返回活动记录
- 前端新建 StudyCalendar 组件: 周一起始日历网格, 当前月置顶, 其余月份倒序
- 有学习记录的日期浅蓝底, 无记录灰底, 今天蓝边框
- 单日全量列出活动: 学/测/R1/R2/R3 + group
- 颜色: 学测橙色突出, R1/R2/R3 暗淡蓝绿
- 月份标题显示当月学习 group 数(小字号灰蓝色)
- Home.js 加'学习日历'入口按钮, App.js 加 /calendar 路由

2 months agostyle: GroupView 表格单元格文字居左对齐
words [Thu, 30 Jul 2026 01:05:47 +0000 (09:05 +0800)]
style: GroupView 表格单元格文字居左对齐

覆盖 Home.css 全局 td{text-align:center} 对预览表格的影响

2 months agofeat: 新增组别只读预览功能
words [Thu, 30 Jul 2026 01:02:30 +0000 (09:02 +0800)]
feat: 新增组别只读预览功能

- 新建 GroupView 组件: 点击首页 Group 名称进入 /group/:groupId
- 上方显示该组思维导图, 下方完整词汇表(单词/词性/释义/词根/词缀/例句)
- 纯查看, 不触发学习/测试/复习记录
- App.js 加路由, Home.js 组名单元格改为可点击
- 响应式: 移动端表格可横向滚动

2 months agofix: 删除 4 个短语 word 字段中的括号
words [Wed, 29 Jul 2026 14:41:54 +0000 (22:41 +0800)]
fix: 删除 4 个短语 word 字段中的括号

- ID 150: prefer to do A (rather) than do B -> prefer to do A rather than do B
- ID 452: make a(n)...impression on sb -> make a...impression on sb (按要求 a(n)->a)
- ID 518: admit (to) doing sth -> admit to doing sth
- ID 1203: insist on (doing) sth -> insist on doing sth
- 仅改 word 字段, 保留括号前后空格

2 months agofeat: 词库扩充 groups 39-105 (新增 1278 词)
words [Wed, 29 Jul 2026 14:29:50 +0000 (22:29 +0800)]
feat: 词库扩充 groups 39-105 (新增 1278 词)

- 删除原 groups 39-52 旧数据 (234 词)
- 导入 groups 39-105 新数据 (1278 词, 来源 /home/tools/words_insert_39_105.sql)
- 词库总数: 808 -> 1852, 覆盖 Group 1-105
- picture_id 沿用 = groupid 约定, 引用均指向已存在 pictures
- 备份: bcd.db.bak_pre-major-change_20260729_221405

2 months agofix: 复习 III 列样式与复习 I/II 一致
words [Tue, 28 Jul 2026 10:23:55 +0000 (18:23 +0800)]
fix: 复习 III 列样式与复习 I/II 一致

Home.css 第6列(复习III)此前单独设置了 color:#64748b、font-size:13px,
导致该列比复习I/II 更浅更小,视觉上被弱化。
现统一为仅设宽度,与前5列一致。

2 months agochore: 将 systemd 服务文件纳入版本控制 (deploy/)
words [Fri, 24 Jul 2026 09:47:58 +0000 (17:47 +0800)]
chore: 将 systemd 服务文件纳入版本控制 (deploy/)

- deploy/lexicon-backend.service: uvicorn 0.0.0.0:1060
- deploy/lexicon-frontend.service: serve -s build -l 55
- 便于灾难恢复与迁移部署

2 months agofix: 复习模式进度记录 bug(WEB 版)
words [Thu, 23 Jul 2026 14:05:18 +0000 (22:05 +0800)]
fix: 复习模式进度记录 bug(WEB 版)

- Home.js: 点击复习时通过 ?type=review1/2/3 传递活动类型
- TestMode.js: 读取 URL 的 type 参数,finishTest 按类型写入 op_type
  修复前 op_type 写死为 'test',导致复习完成不被记录;
  必须再点一次复习才能记录(与线下版本行为不一致)
- 重建前端 build

2 months ago测试/复习模式: 放大错题思维导图
root [Thu, 23 Jul 2026 13:49:18 +0000 (21:49 +0800)]
测试/复习模式: 放大错题思维导图

- .fb-image 宽度 300px→480px (flex:0 0 480px),面板向左扩展
- .fb-image img 最大高度 300px→460px,思维导图更清晰
- 移动端(<=768px)图片最大高度 260px→360px

2 months ago修复进度记录: 补录group32 review2与group33 review1
root [Thu, 23 Jul 2026 13:46:02 +0000 (21:46 +0800)]
修复进度记录: 补录group32 review2与group33 review1

- group32 review2、group33 review1 今日(2026-07-23)已完成但因BUG未记录
- 现已补录为 completed, created_at=2026-07-23 21:45:42
- 数据库随本次提交纳入版本控制

2 months ago数据库同步: 合并离线CS版本词库与进度
root [Wed, 22 Jul 2026 14:33:46 +0000 (22:33 +0800)]
数据库同步: 合并离线CS版本词库与进度

- 词库: 从离线版 /home/BCD/DDD/code/db/bcd.db 导入新增 426 个词
  (WEB原有372词为其严格子集,导入后共808词,覆盖Group 1-52)
- 进度: 从 /home/BCD/DDD/code/a/log.txt 解析 PROGRESS_UPDATE,
  按日期粒度补入 93 条 study_logs (WEB原63条为其严格子集,
  现共156条,覆盖Group 1-33,与离线版进度一致)
- pictures 表源/WEB完全一致(105张),未改动
- .gitignore 移除 *.db 忽略规则,数据库纳入版本跟踪;
  新增 *.bak* 忽略本地备份文件
- 线上API已验证: /api/words/27 返回14词,/api/home 词数808

3 months ago手机端输入框: 强制英文输入法、首字母不大写、防遮挡
root [Fri, 26 Jun 2026 15:12:30 +0000 (23:12 +0800)]
手机端输入框: 强制英文输入法、首字母不大写、防遮挡

- inputProps 增加 lang="en"、type="text",配合 inputMode="latin"
  在 iOS/Android 上唤起英文/拉丁字母软键盘,避免中文输入法
- autoCapitalize="off" 禁止首字母自动大写
- 输入框 CSS 加 scroll-margin-bottom: 80px,软键盘弹出时
  浏览器自动滚动保证输入框可见,避免被遮挡

3 months ago响应式适配: 手机/iPad竖屏可操作
root [Fri, 26 Jun 2026 15:09:10 +0000 (23:09 +0800)]
响应式适配: 手机/iPad竖屏可操作

StudyMode.css:
- 768px以下学习卡片改 flex-direction column,思维导图在上、词汇信息在下
- 字号、padding、按钮尺寸缩小
- 闪记/抄写输入框 width 100% 自适应,避免横向溢出
- 480px以下进一步压缩

TestMode.css:
- 768px以下反馈区改 flex-direction column,思维导图与输入框上下结构
- 答题输入行改纵向,输入框 width 100% 自适应
- 抄写输入框宽度自适应
- 字号、padding 全面缩小
- 480px以下进一步压缩

3 months ago学习模式: 朗读期间禁止进入闪记模式
root [Fri, 26 Jun 2026 14:40:41 +0000 (22:40 +0800)]
学习模式: 朗读期间禁止进入闪记模式

- 新增 isSpeaking 状态,朗读期间为 true
- 键盘 Enter 监听在 isSpeaking 时直接 return
- 进入闪记按钮 disabled={isSpeaking},文案切换为朗读中,请稍候...
- 两遍音频全部播完(或播放失败)才 setIsSpeaking(false)

3 months agoTTS: 替换浏览器内置发音为有道美式发音
root [Fri, 26 Jun 2026 14:34:35 +0000 (22:34 +0800)]
TTS: 替换浏览器内置发音为有道美式发音

- 后端新增 /api/tts/{word} 端点,代理有道 dictvoice type=2 美式发音
- 音频文件缓存到 backend/db/tts_cache/,二次请求直接读缓存
- 前端 StudyMode/TestMode 改用 new Audio() 播放后端 TTS
- 学习模式保留读两遍+500ms间隔,测试模式读一遍
- .gitignore 忽略 TTS 缓存目录

3 months ago修复闪记重试输入框残留旧字符,确保所有输入框出现时为空
root [Thu, 18 Jun 2026 00:15:57 +0000 (08:15 +0800)]
修复闪记重试输入框残留旧字符,确保所有输入框出现时为空

3 months ago输入框禁用粘贴与输入法联想,强制逐字母输入
root [Thu, 18 Jun 2026 00:12:03 +0000 (08:12 +0800)]
输入框禁用粘贴与输入法联想,强制逐字母输入

3 months ago修改不可在页面复制内容
root [Thu, 18 Jun 2026 00:09:02 +0000 (08:09 +0800)]
修改不可在页面复制内容

3 months ago测试模式初版,学习模式问题修复,by codebuddy
root [Sun, 7 Jun 2026 14:37:51 +0000 (22:37 +0800)]
测试模式初版,学习模式问题修复,by codebuddy

3 months agocodebuddy开始接手
root [Sun, 7 Jun 2026 03:00:11 +0000 (11:00 +0800)]
codebuddy开始接手

4 months ago学习模式雏形已有,可以发音和闪记,但是不显示词根和词缀,闪记模式下还有左侧思维导图
root [Mon, 25 May 2026 15:26:32 +0000 (23:26 +0800)]
学习模式雏形已有,可以发音和闪记,但是不显示词根和词缀,闪记模式下还有左侧思维导图

4 months ago首页可以正常显示进度
root [Mon, 25 May 2026 15:14:59 +0000 (23:14 +0800)]
首页可以正常显示进度

4 months ago修改首页CSS
root [Sun, 24 May 2026 12:48:21 +0000 (20:48 +0800)]
修改首页CSS

4 months ago修改icon
root [Sun, 24 May 2026 12:11:48 +0000 (20:11 +0800)]
修改icon

4 months ago初始提交words
root [Sun, 24 May 2026 11:49:45 +0000 (19:49 +0800)]
初始提交words

4 months agoInitialize project using Create React App
root [Sat, 23 May 2026 13:11:31 +0000 (21:11 +0800)]
Initialize project using Create React App