Skip to content

v3.17.40 重构阶段3(第一批) · Vue 去 window 数据镜像

Choose a tag to compare

@LMG-arch LMG-arch released this 11 Sep 01:29
· 0 commits to main since this release

v3.17.40 重构阶段 3(第一批)· Vue 去 window 数据镜像

依据 docs/重构计划-2026-09-11.md 阶段 3 执行(第一批)。

步骤 改动
S3.1a todoStore:初始状态不再取 window.allTodos(改 ref([]),数据由 loadTodos() 经原生桥加载);isDone() 改查自身 todos;deleteTodo()/updateTodo() 改为先更新自身状态再发布到 window(过渡期兼容)
S3.1b reminderStore:reminders/reminderRecords 初始为空;refreshFromWindow() / refreshReminderList() / refreshReminderHistory() 增加类型守卫,不再把 window 当数据源
S3.2a TodoModal:农历换算改为 import { lunarToSolar } from '../utils.js';修复隐患——文件内原有同名本地包装函数,直接 import 同名会造成自我递归,改为 import 原名 + 本地薄封装 lunarDateToSolar

原则:Vue 不再读 window 镜像;仍保留写(经典层未下线,属过渡期兼容,阶段 4 一并移除)。

验证(agent-browser 实测)

  • window.allReminders 仍被 store 加载后发布(4 条),过渡期兼容未破坏
  • 打卡页:喝水 8 杯、提醒相关元素 24、待办行 4 → 列表渲染正常
  • 日历页:Vue 网格 35 格(+ 隐藏经典 35 格);记账页占比条 4 段;总览时间线 5 行
  • 全流程 window.onerror = 0

顺序修订(重要)

执行中发现 S3.1c 反向依赖 S4.1:window.allData 由经典层 calendar.js loadAllData() 产出,只有先把数据服务迁到 Vue 侧才能去掉读取。故 S3.1c + S3.2b + S3.3 与 S4.1 合并推进(详见计划文档 §9)。

下一步(阶段 3 第二批 / 阶段 4 起点)

src/lib/dataService.js(迁移 loadAllData/refreshAllData)→ 去掉 calendarStore/StatsPage 对 window.allData 的读取 → CalendarView/StatsPage 直连 holidays → src/lib/bridge.js 统一 calendarAPI → exportStatsAsImage 迁移 → 删除 .app 死壳与经典渲染层 → 收窄 shims.js。