jif2.zhang
|
a915a08f4d
|
修复 OTA 后顶部内容顶到状态栏 (未让出电量/信号栏)
现象: 直装 APK 时头部正常让开状态栏; 经 OTA 升级到 V0.2 前端后,
页面从屏幕最顶部开始, 与电量/信号栏重叠.
根因: 顶部让位一直只依赖 antd-mobile 的 <SafeArea position="top" />,
它只是一个空 div, 高度完全来自 env(safe-area-inset-top). 而 Android
WebView (Tauri) 下该变量常返回 0.
旧版每页顶部都有 45px 的 antd-mobile <NavBar>, 视觉上兜住了状态栏,
掩盖了 inset 失效; V0.2 把 NavBar 换成 23px 的 PageHeader
(「我」页甚至无头部), 兜底消失后问题暴露. 与 OTA 机制本身无关.
修复:
- MobileShell: <SafeArea> 换成 .app-safe-top, 高度由 --safe-top 控制
- main.jsx: 新增 calibrateSafeTop(), 用临时元素测 env(safe-area-inset-top),
并与 screen.height - visualViewport.height 交叉校验, 取较大值写入
--safe-top; 两者都不可用时保底 24px; 监听旋转/视口变化重算
- globals.css: --safe-top 保留 env() 表达式, 新增 .app-safe-top 样式
这样无论 WebView 是否上报 inset, 顶部都能正确让位.
|
2026-10-24 08:05:19 +08:00 |
|
jif2.zhang
|
2ea0da758f
|
修复 OTA 后顶部内容顶到状态栏 (未让出电量/信号栏)
Docker Build and Push / build-image (push) Successful in 4m2s
现象: 直装 APK 时头部正常让开状态栏; 经 OTA 升级到 V0.2 前端后,
页面从屏幕最顶部开始, 与电量/信号栏重叠.
根因: 顶部让位一直只依赖 antd-mobile 的 <SafeArea position="top" />,
它只是一个空 div, 高度完全来自 env(safe-area-inset-top). 而 Android
WebView (Tauri) 下该变量常返回 0.
旧版每页顶部都有 45px 的 antd-mobile <NavBar>, 视觉上兜住了状态栏,
掩盖了 inset 失效; V0.2 把 NavBar 换成 23px 的 PageHeader
(「我」页甚至无头部), 兜底消失后问题暴露. 与 OTA 机制本身无关.
修复:
- MobileShell: <SafeArea> 换成 .app-safe-top, 高度由 --safe-top 控制
- main.jsx: 新增 calibrateSafeTop(), 用临时元素测 env(safe-area-inset-top),
并与 screen.height - visualViewport.height 交叉校验, 取较大值写入
--safe-top; 两者都不可用时保底 24px; 监听旋转/视口变化重算
- globals.css: --safe-top 保留 env() 表达式, 新增 .app-safe-top 样式
这样无论 WebView 是否上报 inset, 顶部都能正确让位.
|
2026-10-24 08:05:15 +08:00 |
|
jif2.zhang
|
2f55865092
|
合并 dev-0.2 到 master: V0.2 功能 + 米家修复 + 分支策略调整
Docker Build and Push / build-image (push) Successful in 8m0s
|
2026-10-24 07:36:58 +08:00 |
|
jif2.zhang
|
5e6ea552d1
|
调整分支策略: 仅 master 部署, 取消 dev-* 自动发布
分支规则 (写入 readme):
- master 主分支, 唯一部署出口, push 即发布生产
- dev-* 开发集成分支, 只跑 CI 校验, 不部署; 上线先合到 master
- tmp-* 临时分支, 针对单个问题, 合到 dev-* 后删除
- android-* 仅触发 APK 外壳构建, 构建前须与 master 同步
CI 变更:
- .gitea/workflows/docker-build.yml 触发分支收窄为 master
此前 dev-* 与 master 共用同一套生产环境, 推送开发分支即直接发布,
容易把半成品带上线, 现取消该触发
- 同步修正工作流内相关注释 (迁移时机, 版本校验范围)
文档变更:
- readme 新增「分支规则」章节: 职责表/流程图/CI 触发范围/变更说明
- readme 原「分支与 CI/CD」章节与新规则冲突, 已按新策略重写
(dev-* 不再触发部署; 数据库迁移只在 master 发布时应用)
- 明确团队约定的 main 主分支在本仓库落地为 master
|
2026-10-24 07:36:53 +08:00 |
|
jif2.zhang
|
a66ddb457a
|
修复扫码弹窗一闪而过
现象: 米家授权过期后, 扫码弹窗从底部弹出但瞬间消失, 看不到二维码.
三处缺陷:
1. 服务端 startQrLogin() 在已有流程运行时提前 return, 未清 done.
上一轮成功残留的 done=true 会让前端第一次轮询就拿到
{running:false, done:true}, 误判为扫码成功立即关窗.
改为复用流程时显式返回 done:false.
2. 前端 AuthPopup 的成功/失败判定没有幂等保护, 且 onClose/onOk 是
父组件每次渲染新建的函数. 父级轮询触发重渲染后, 回调身份变化
会波及弹窗关闭路径. 改用 ref 持有最新回调 + settledRef 保证
一轮流程只结算一次.
3. 弹窗遮罩绑定 onMaskClick=cancel, 手机端极易误触; 关闭遮罩点击,
只允许显式点「取消」关闭.
注意: 前端需重新构建发布, 服务端需重启后生效.
|
2026-10-24 07:27:03 +08:00 |
|
jif2.zhang
|
3de002aae8
|
修复米家会话失效后不弹登录二维码
根因一: 过期检测形同虚设
- @zythum02/mijia-api 的 refreshToken() 在本地凭证字段齐全时直接返回成功,
根本不发请求, 因此 checkAuth() 永远判定 ok, 过期后既不出横幅也不出扫码入口
- checkAuth() 改为真打一次 getHomesList() 验证 token; 成功缓存 5 分钟,
失败只缓存 30 秒(便于网络恢复后自愈); 增加并发探测合并; 状态未变不写库
- getStatus() 以实时探测结果为准, DB 里的 status 仅在探测为 unknown 时兜底,
避免残留的 ok 遮蔽已失效状态
根因二: 二维码图片 401 导致弹窗空白
- /api/mihome/reauthorize/qr-image 在 authRequired 之后, 而 <img src> 无法携带
Authorization 头, 图片请求被拒, 用户看到的是空白/裂图
- 新增 fetchMihomeQrImage(): 带 JWT fetch 后转 blob URL 给 <img>, 并在卸载/换码时释放
其他修复
- EnvView 的 load 依赖 [status] 且成功回调又 setStatus, 造成 /status 无限重复请求;
改为空依赖 + 函数式 setStatus; 首屏与重试走 ?force=1 强查
- 会话失效(非网络类错误)时自动弹出扫码窗, 每次挂载仅弹一次
- 扫码状态机新增 done 标记, 只有真正登录成功才算成功, 避免取消后误判
- 二维码 120s 超时自动续码(最多 2 次), 慢扫不再直接失败
- 取消后不再丢弃可能已成功的扫码结果
- scripts/mihome-login.mjs 适配 done 语义
- 同步更新设计文档 §5.2 / §5.4 / §6
注意: 前端需重新构建发布后生效。
|
2026-10-24 07:26:59 +08:00 |
|
jif2.zhang
|
d1f36b3b8f
|
修复扫码弹窗一闪而过
Docker Build and Push / build-image (push) Successful in 4m5s
现象: 米家授权过期后, 扫码弹窗从底部弹出但瞬间消失, 看不到二维码.
三处缺陷:
1. 服务端 startQrLogin() 在已有流程运行时提前 return, 未清 done.
上一轮成功残留的 done=true 会让前端第一次轮询就拿到
{running:false, done:true}, 误判为扫码成功立即关窗.
改为复用流程时显式返回 done:false.
2. 前端 AuthPopup 的成功/失败判定没有幂等保护, 且 onClose/onOk 是
父组件每次渲染新建的函数. 父级轮询触发重渲染后, 回调身份变化
会波及弹窗关闭路径. 改用 ref 持有最新回调 + settledRef 保证
一轮流程只结算一次.
3. 弹窗遮罩绑定 onMaskClick=cancel, 手机端极易误触; 关闭遮罩点击,
只允许显式点「取消」关闭.
注意: 前端需重新构建发布, 服务端需重启后生效.
|
2026-10-24 06:30:00 +08:00 |
|
jif2.zhang
|
95b9985e8b
|
修复米家会话失效后不弹登录二维码
Docker Build and Push / build-image (push) Successful in 5m46s
根因一: 过期检测形同虚设
- @zythum02/mijia-api 的 refreshToken() 在本地凭证字段齐全时直接返回成功,
根本不发请求, 因此 checkAuth() 永远判定 ok, 过期后既不出横幅也不出扫码入口
- checkAuth() 改为真打一次 getHomesList() 验证 token; 成功缓存 5 分钟,
失败只缓存 30 秒(便于网络恢复后自愈); 增加并发探测合并; 状态未变不写库
- getStatus() 以实时探测结果为准, DB 里的 status 仅在探测为 unknown 时兜底,
避免残留的 ok 遮蔽已失效状态
根因二: 二维码图片 401 导致弹窗空白
- /api/mihome/reauthorize/qr-image 在 authRequired 之后, 而 <img src> 无法携带
Authorization 头, 图片请求被拒, 用户看到的是空白/裂图
- 新增 fetchMihomeQrImage(): 带 JWT fetch 后转 blob URL 给 <img>, 并在卸载/换码时释放
其他修复
- EnvView 的 load 依赖 [status] 且成功回调又 setStatus, 造成 /status 无限重复请求;
改为空依赖 + 函数式 setStatus; 首屏与重试走 ?force=1 强查
- 会话失效(非网络类错误)时自动弹出扫码窗, 每次挂载仅弹一次
- 扫码状态机新增 done 标记, 只有真正登录成功才算成功, 避免取消后误判
- 二维码 120s 超时自动续码(最多 2 次), 慢扫不再直接失败
- 取消后不再丢弃可能已成功的扫码结果
- scripts/mihome-login.mjs 适配 done 语义
- 同步更新设计文档 §5.2 / §5.4 / §6
注意: 前端需重新构建发布后生效。
|
2026-10-23 22:21:08 +08:00 |
|
cheney
|
072f304cc2
|
docs(V0.2): 界面设计同步 2026-10-23 调整 (含日历+打卡合并草案) + 设计文档 §11
Docker Build and Push / build-image (push) Successful in 4m14s
界面设计.html
- 新增 2.12「V0.2.1 界面调整」章节: 头部统一 / 日历·打卡合并 / 模板分类 / 宏观 tab 溢出
- 已实现部分 (①③④) 与待确认草案 (②) 分别标注
- 2.9 宏观截图同步新 tab 顺序与右侧透支提示; 2.3 / 2.7 清单补「模板」分段
- 全部原型头部改用 23px 紧凑头部, 「我」页去掉头部条
设计文档.md
- 新增 §11 界面调整: 变更清单、头部统一对照表、模板接口与排序口径、宏观 tab 顺序与溢出实现、
待确认的日历+打卡合并方案 (含确认后需改动的文件与样式段)
|
2026-10-23 16:41:04 +08:00 |
|
cheney
|
c765755906
|
feat(UI): 四 Tab 头部统一 + 清单模板分类 + 宏观 tab 顺序与溢出提示
头部统一
- 新增 PageHeader 组件: 高度 23px (原 NavBar 45px 的一半), 标题 12px 主色加粗, 背景取页面底色
- 打卡 / 宏观 / 监控 三页各自引用, 互不影响; 宏观与监控补齐「宏观」「监控」标题
- 「我」页移除 NavBar 空白条, 蓝色头像区直接贴顶 (不引用 PageHeader, 与其余三页解耦)
- 清理失效样式 .me-navbar
清单模板分类
- 分段由 2 项扩为 3 项: 进行中 / 已归档 / 模板; 右上角按钮随分段切换
- 模板独立增删改查: 新增 GET /templates/:id、PUT /templates/:id; 预置模板拒绝改删
- 模板按名称字母顺序排序 (Intl.Collator zh-Hans-CN, 中文按拼音/数字按数值), 前后端同口径
- 新建清单去掉场景选择器, 仅保留名称; scene 改为沿用模板自带场景
- 模板改为从右侧滑出 78vw 面板选择, 首项「不使用模板」
宏观 tab
- 顺序改为 报警 → 新闻 → 油价 → 经济数据 → 策略研究 → 经济文章, 默认选中新闻
- /macro 由路由直接重定向到 /macro/news, activeFromPath 兜底同样返回 news
- SwipeTabs 增加右侧溢出提示: 渐变遮罩 + 主色圆底箭头, 可点击向右翻页, 滚到末尾自动消失
- 切换 tab 时自动把激活项滚到可视区中央
|
2026-10-23 16:40:32 +08:00 |
|
cheney
|
5f41cb05b7
|
chore(V0.2): 统一 APK 与 OTA 版本规则 —— 同一版本号, APK 裸写 / OTA 加 -ota
Docker Build and Push / build-image (push) Successful in 10m16s
- readme: 版本管理章节重写, 明确 APK=0.2.0 无后缀, OTA=0.2.0-ota 多一个标记
并补充 APK versionName/versionCode 的生成链路 (tauri.properties, major*1e6+minor*1e3+patch)
- scripts/ci/check-version.mjs: 新增四处一致性校验
(package.json / tauri.conf.json / Cargo.toml / Cargo.lock), 并禁止 version 带 -ota
- android-build.yml: 构建前也执行版本校验 (tauri.conf.json 的 version 就是 APK versionName)
- 需求文档 F-OT-01a、设计文档 §10.2 同步该规则
|
2026-10-22 17:34:22 +08:00 |
|
cheney
|
4a04720a5e
|
feat(V0.2): OTA 版本与判新口径 + Tab 结构调整
1) 版本对齐分支
- package.json / tauri.conf.json / Cargo.toml / Cargo.lock: 0.1.0 -> 0.2.0, OTA 包版本变为 0.2.0-ota
- 新增 scripts/ci/check-version.mjs: 分支 dev-x.y 与 package.json 版本不一致时 CI 直接失败
- docker-build.yml / ota-build.yml: min_binary_version 与前端版本解耦, 固定 0.1.0
(现有 APK 原生层仍是 0.1.0, 抬高会导致旧 APK 收不到更新)
2) 我的页 OTA「开发版本」开关 (默认关, 持久化 localStorage.iboard_ota_dev_mode)
- 关: 按版本号逐字段比较 (src/utils/version.js), 服务端 version 更高才算新
- 开: 按 build sequence 判新 (hotswap checkUpdate), 每次构建都能推到设备
- Web 端: 开发口径退化为版本不同即算新; 生产口径严格比较大小
3) 打卡 Tab 移到最左并默认选中, 移除特效开关
- BottomNav: 打卡/宏观/监控/我; 删除 home 图标
- App: / 与 404 均重定向到 /checkin
- RingProgress/Celebrate: 删除 effectsEnabled/setEffectsEnabled, 特效恒开
- HabitView: 去掉头部「特效开/关」按钮
4) 取消首页 Tab, 报警/新闻并入宏观
- 新增 pages/macro/AlertsView.jsx、NewsView.jsx; 删除 HomePage.jsx
- MacroPage: 6 个子 Tab (油价/经济数据/策略研究/经济文章/报警/新闻), 报警角标保留
- 新闻详情 /news/:id -> /macro/news/:id (宏观 Tab 保持高亮)
5) 文档: 需求文档补 F-OT 需求点与已决策项; 设计文档新增 §10 变更记录与判新设计;
界面设计.html 11 屏 (Tab 4 项/去掉特效开关/宏观合并/我的 OTA 开关 关+开 两态)
|
2026-10-22 17:17:29 +08:00 |
|
cheney
|
e1e0880ce6
|
ci: dev-* 分支纳入 docker-build 触发范围 (构建/部署/数据库自动升级)
Docker Build and Push / build-image (push) Successful in 6m53s
- docker-build.yml: push branches 增加 'dev-*', 与 main/master 同环境部署
- Apply DB migrations 步骤加 migrate status 输出并强调在 Remove old container 之前执行
- readme: 新增「分支与 CI/CD」章节, 说明分支触发矩阵与数据库升级约定
|
2026-10-22 15:20:28 +08:00 |
|
cheney
|
9b4705870d
|
docs(V0.2): 新增设计文档 / 数据库设计文档 / 界面设计静态原型
- 设计文档.md: 架构与分层、目录结构、周期口径与边界规则、前端组件与交互、
后端接口清单、关键流程时序、非功能设计、测试验证、风险与演进
- 数据库设计文档.md: ER、5 张表逐字段、索引与外键级联、关键设计决策
(date 用 VARCHAR(10) 的原因 / 不冗余计数 / seq 幂等 / 归档语义 / 模板 JSON)、
容量估算、典型 SQL、迁移与回滚、V0.3 预留
- 界面设计.html: 420x820 静态高保真原型 8 屏 (打卡/日历/清单/新建弹窗/
完成特效/明天计划视图/清单完成/空态) + 设计规范、组件状态表、动效与适配约定
|
2026-10-22 14:12:24 +08:00 |
|
cheney
|
004f8c262d
|
feat(V0.2): 打卡 / 日历 / 清单模块
- 数据: Habit/CheckIn/CheckList/CheckListItem/CheckListTemplate + 迁移 + 重新生成 client
- 后端: server/checkin/period.js 周期计算(日/周/月/年, 周一起始, Asia/Shanghai)
/api/checkin/* 打卡项CRUD/打卡/撤销/补打/某日详情/月历
/api/checklists/* 清单与检查项CRUD/勾选/全选/复制/模板(系统预置出差·回老家)
- 前端: 底部新增「打卡」Tab -> /checkin, 页内三视图
环形进度 RingProgress + 完成特效(粒子/光晕/触感, 可关闭)
打卡视图: 待办列表/乐观更新/撤销/新建编辑
日历视图: 月历网格 + 今天·昨天·明天 + 日期标记/完成率
清单视图: 场景清单/勾选进度条/模板生成/另存模板/归档
- 文档: docs/V0.2/需求文档.md 补充实现约定(附录B)与接口清单
|
2026-10-22 11:37:16 +08:00 |
|
cheney
|
54a3224f00
|
docs(V0.2): 新增打卡/日历/清单模块需求文档 (总体描述 + 分类编号需求点 + 里程碑 + 数据实体草案)
|
2026-10-22 10:03:09 +08:00 |
|
cheney
|
3140eae7db
|
chore: 版本号统一为 V0.1 (package.json 1.0.0 -> 0.1.0, 与 tauri.conf.json/Cargo.toml 对齐) + readme 补充版本管理约定
|
2026-10-22 09:59:26 +08:00 |
|
jif2.zhang
|
7b4e59957b
|
修复容器内 news/oil 定时失效: 运行时镜像携带 scripts/ + axios 转生产依赖 + cron 脚本模块惰性加载降级
Docker Build and Push / build-image (push) Failing after 9m34s
|
2026-09-21 14:09:18 +08:00 |
|
jif2.zhang
|
1d69915cf3
|
米家调度独立模块注册, 避免被容器中无法加载的旧 cron.js 连带失效
Docker Build and Push / build-image (push) Successful in 4m36s
|
2026-09-21 11:52:24 +08:00 |
|
jif2.zhang
|
8e2c6ffa35
|
新增米家环境监控模块 (采集/聚合/历史/前端 EnvView) + CI 挂载米家凭证目录并自动应用迁移
Docker Build and Push / build-image (push) Successful in 6m54s
|
2026-09-21 11:42:58 +08:00 |
|
jif2.zhang
|
53f63e0986
|
新增 CI secrets 同步到注册中心的独立 workflow
Docker Build and Push / build-image (push) Successful in 10m57s
|
2026-09-20 20:32:54 +08:00 |
|
cheney
|
508419180c
|
调整App头部显示,固定头部和分类
Docker Build and Push / build-image (push) Successful in 4m56s
|
2026-08-08 19:40:39 +08:00 |
|
cheney
|
4f2becb99a
|
调整App头部显示,避免与系统消息栏重合
Docker Build and Push / build-image (push) Successful in 4m51s
|
2026-08-08 19:20:30 +08:00 |
|
cheney
|
2fa7c7fc70
|
remove pagespy
Docker Build and Push / build-image (push) Successful in 4m56s
|
2026-08-08 18:12:48 +08:00 |
|
cheney
|
1b330bdd4d
|
移除 reasonix.toml
Docker Build and Push / build-image (push) Successful in 5m0s
|
2026-08-08 11:44:12 +08:00 |
|
cheney
|
5822a01ed7
|
fix rust env
Android Build & Publish / build-android (push) Successful in 18m36s
|
2026-08-08 10:40:33 +08:00 |
|
cheney
|
b0bc1e9727
|
开放 http
Android Build & Publish / build-android (push) Failing after 2m12s
|
2026-08-08 10:32:28 +08:00 |
|
cheney
|
68998fa07e
|
token 名字修改
Android Build & Publish / build-android (push) Successful in 42m17s
|
2026-08-08 09:13:23 +08:00 |
|
cheney
|
d5a31e5366
|
修改签名脚本
Android Build & Publish / build-android (push) Failing after 39m54s
|
2026-08-08 08:28:49 +08:00 |
|
cheney
|
05ad191913
|
环境变量
Android Build & Publish / build-android (push) Failing after 23m5s
|
2026-08-08 07:52:39 +08:00 |
|
cheney
|
9ecbf8d8e0
|
更新脚本
Android Build & Publish / build-android (push) Failing after 18m32s
|
2026-08-08 07:01:50 +08:00 |
|
cheney
|
44d60471ca
|
fix: 修复登录成功但未跳转内部页面的竞态
Docker Build and Push / build-image (push) Successful in 6m12s
LoginPage.onSubmit 在 setUser 异步提交前手动 navigate(from),
切到受保护页时 user 仍为 null, 被 RequireAuth 立即踢回 /login,
导致提示登录成功却进不去内部页面。改为依赖组件顶部
<Navigate to={from} replace/> 在 user 就绪后可靠跳转。
|
2026-08-08 05:37:40 +08:00 |
|
cheney
|
60628775ac
|
ota 升级地址
Docker Build and Push / build-image (push) Successful in 5m9s
|
2026-08-07 18:11:43 +08:00 |
|
cheney
|
add3ff8831
|
修改 ota cicd
Docker Build and Push / build-image (push) Successful in 6m37s
|
2026-08-07 17:10:07 +08:00 |
|
cheney
|
22a36fb213
|
fix 打开 ota 授权
Docker Build and Push / build-image (push) Successful in 2m51s
|
2026-08-07 16:24:10 +08:00 |
|
cheney
|
a5bc8ef1f1
|
功能完成
Docker Build and Push / build-image (push) Successful in 2m53s
|
2026-08-07 14:56:27 +08:00 |
|
cheney
|
b9ec6fbe0b
|
油价集成
|
2026-08-07 14:36:57 +08:00 |
|
cheney
|
8999b29646
|
跟新 CICD,每次制作 ota 升级包
Docker Build and Push / build-image (push) Successful in 2m50s
|
2026-08-07 10:04:57 +08:00 |
|
cheney
|
4f5cdb4325
|
OTA
Docker Build and Push / build-image (push) Successful in 2m55s
|
2026-08-07 09:50:42 +08:00 |
|
cheney
|
dbe04b7da3
|
ota
|
2026-08-07 09:49:26 +08:00 |
|
cheney
|
ac8a4b8cd2
|
准备切换分支
|
2026-08-07 09:10:40 +08:00 |
|
cheney
|
6bacda05f8
|
fix bugs
Docker Build and Push / build-image (push) Successful in 3m2s
|
2026-08-06 17:43:21 +08:00 |
|
cheney
|
f2e53df25b
|
怎加版本
|
2026-08-06 17:27:23 +08:00 |
|
cheney
|
4f39f428bd
|
热加载
Docker Build and Push / build-image (push) Successful in 3m0s
|
2026-08-06 17:12:32 +08:00 |
|
cheney
|
eddddc56ae
|
完成基础功能
Docker Build and Push / build-image (push) Successful in 3m1s
|
2026-08-06 16:55:03 +08:00 |
|
cheney
|
4d02439ecb
|
更新首页
|
2026-08-06 16:41:47 +08:00 |
|
cheney
|
547181d333
|
更新首页
|
2026-08-06 15:39:59 +08:00 |
|
cheney
|
ec15f40323
|
数据源修改
|
2026-08-06 15:24:55 +08:00 |
|
cheney
|
b10b1c44db
|
修改数据获取方式
|
2026-08-06 14:00:11 +08:00 |
|
cheney
|
4da9489662
|
修改数据获取方法
|
2026-08-06 13:58:56 +08:00 |
|