Commit Graph

5 Commits

Author SHA1 Message Date
lc fb3bc6c045 fix: CSS custom properties not resolving from inline style
Root cause: WXSS compiler resolves var(--primary) at compile time
against page{} declarations in app.wxss. The orange defaults
(--primary:#FF6B35 etc.) were being baked into compiled WXSS,
so the inline style theme override on .container was ignored.
Records and settings pages always rendered orange regardless of
the user's theme choice.

Fix:
1. Remove --primary, --primary-light, --primary-bg, --primary-rgb
   from page{} in app.wxss, forcing WXSS to resolve var() at
   runtime from inline style on .container
2. Expand BASE_VARS in theme.js to include default orange theme
   vars, so the initial render (before onLoad) still has valid
   CSS custom properties — no flash of unstyled content
3. Export BASE_VARS from theme.js
4. Change all 4 pages + custom-tab-bar initial data.themeStyle
   from '' to themeMod.BASE_VARS, eliminating the empty-string
   gap between first render and onLoad
2026-06-04 17:03:09 +08:00
lc e2186b2502 fix: theme persistence — error handling, backup, stale highlight
Bug 1 (critical): setTheme lacked try/catch around wx.setStorageSync.
  If storage write throws (full / permission), the theme silently
  fails to persist but UI has already changed → on next cold start
  getCurrentTheme falls back to orange.
  → Wrap in try/catch; still apply UI change even if storage fails
    (better to see the right color now than revert immediately).

Bug 2 (display): settings onShow called applyThemeToPage (updates
  'theme' object) but never refreshed 'currentThemeId'. After tab
  switching, the radio highlight showed the wrong theme.
  → Add setData({ currentThemeId }) in onShow.

Redundancy: theme now also saved as themeId in user_settings.
  getCurrentTheme falls back to user_settings.themeId if app_theme
  key is unexpectedly missing, providing a recovery path.
2026-06-04 16:43:32 +08:00
lc 5d155e41fe fix: tab bar icons invisible due to CSS variable isolation
Root cause: WeChat miniprogram components have style isolation by default.
Changing tab bar hardcoded #888/#666 to var(--text-secondary) broke
because --text-secondary was only defined on page{} in app.wxss and
couldn't cascade into the custom-tab-bar component.

Fix:
1. theme.js: inject BASE_VARS (--text, --text-secondary, --border, etc.)
   into themeStyle string so they're available via inline style everywhere
2. Add styleIsolation: apply-shared to all 3 component JSONs so page-level
   CSS variables cascade into components
2026-06-04 16:39:17 +08:00
lc 8c7f633541 refactor: ES6+ modernization + 2 bugfixes
- var→const/let, function→arrow/class across all 13 JS files
- Timer: prototype→class with ES6 getters
- plan days: IIFE→Array.from declarative generation
- storage/plan: unified formatDate via util.js
- Bugfix: getPlanDay now filters by planId (plan switch accuracy)
- Bugfix: getTodayRecord searches all months (cross-month boundary)
- WXML/WXSS unchanged; public API unchanged
2026-06-04 16:29:25 +08:00
lc ff2700c067 backup: snapshot before optimization 2026-06-04 16:25:43 +08:00