现在每次打开「商品列表」都要现调 erp/shop/all。这条链路要先完成货憨憨登录 (取 CID/CST → 验证码 → OCR → 登录 → 验证 token),任何一环失败下拉框就是空的, 连店铺名都看不到,使用者无法判断是网络问题还是账号问题。
erp/shop/all
改为:店铺列表缓存进 SQLite,启动时后台刷新,刷新失败时弹窗说明并回退到缓存。
shops
店铺在货憨憨被删除或停用后,缓存必须跟着消失。若只做 upsert, 已删除的店铺会永远留在下拉框里,选中后拉不到任何数据。 实现:在同一个事务里先 DELETE FROM shops 再批量插入。
DELETE FROM shops
实现:startup 里判断 cfg.Huohanhan.Account 和 Password 都非空才 起协程刷新;结果通过 Wails 事件推给前端。
startup
cfg.Huohanhan.Account
Password
弹窗关掉就没了,但「我现在用的是不是旧数据」应当一直可见。
只说「更新失败」使用者无法判断该不该继续用。 文案示例:「店铺列表更新失败:<原因>。当前使用 2026-09-02 17:30 缓存的 19 个店铺,可能已过期。」
internal/store/store.go
internal/store/shop.go
shop_test.go
internal/huohanhan/shop.go
app.go
RefreshShops
GetCachedShops
ListShops
frontend/src/views/ProductListView.vue
go vet ./... go test ./... cd frontend; npx vite build
真实断网与真实店铺变更由负责人在界面验证。
本工单由本机 Codex CLI(模型 gpt-5.6-sol)实施,由 Claude 审核。
gpt-5.6-sol
Codex 必须遵守:
AGENTS.md
main.go
internal/
go test
go vet ./...
go build ./...
go test ./...
docs/
No dependencies set.
The note is not visible to the blocked user.
基本信息
依赖与并行
原始需求
使用sqlite里的店铺列表」
要解决什么
现在每次打开「商品列表」都要现调
erp/shop/all。这条链路要先完成货憨憨登录(取 CID/CST → 验证码 → OCR → 登录 → 验证 token),任何一环失败下拉框就是空的,
连店铺名都看不到,使用者无法判断是网络问题还是账号问题。
改为:店铺列表缓存进 SQLite,启动时后台刷新,刷新失败时弹窗说明并回退到缓存。
做什么 / 不做什么
shops表;缓存读写;启动后台刷新;失败弹窗;下拉框旁显示缓存时间;保留手动刷新。
不做定时自动刷新。
已确认方案(四点必须按此实现,都是实际会遇到的坑)
1. 刷新是全量替换,不是合并
店铺在货憨憨被删除或停用后,缓存必须跟着消失。若只做 upsert,
已删除的店铺会永远留在下拉框里,选中后拉不到任何数据。
实现:在同一个事务里先
DELETE FROM shops再批量插入。2. 启动刷新走后台协程,且未配置账号时不刷新
一开机就弹「登录失败」,体验很差。
实现:
startup里判断cfg.Huohanhan.Account和Password都非空才起协程刷新;结果通过 Wails 事件推给前端。
3. 下拉框旁常驻显示「更新于 X」
弹窗关掉就没了,但「我现在用的是不是旧数据」应当一直可见。
4. 弹窗必须同时说明失败原因和缓存时间
只说「更新失败」使用者无法判断该不该继续用。
文案示例:「店铺列表更新失败:<原因>。当前使用 2026-09-02 17:30 缓存的
19 个店铺,可能已过期。」
预计修改文件
internal/store/store.go(在 migrations 末尾追加建表语句,不得修改已有条目)internal/store/shop.go、shop_test.go(新建:缓存读写)internal/huohanhan/shop.go(不改 ListShops 本身,只在需要时补导出)app.go(新增RefreshShops、GetCachedShops;startup 后台刷新;ListShops改为先读缓存)frontend/src/views/ProductListView.vue(缓存时间显示、刷新按钮、失败弹窗)验收标准
shops表通过在 migrations 末尾追加建立,已有迁移条目未被改动验证方式
真实断网与真实店铺变更由负责人在界面验证。
交给 Codex 实施的约定
本工单由本机 Codex CLI(模型
gpt-5.6-sol)实施,由 Claude 审核。Codex 必须遵守:
AGENTS.md,第 10 节「项目专用规则」是不可违反的红线。main.go和app.go;internal/不许 import wails。go test覆盖;不能联网的部分用假数据测,不要写需要真实账号才能跑的测试。go vet ./...、go build ./...、go test ./...。docs/下的任何文件(那是 Wiki 镜像)。