wangjia
|
1b43dfc75d
|
refactor(client): Phase 1 照原型重建 app 外壳(顶栏两级品牌 + 主题器 + 通知铃 + 分组侧栏 + 状态栏)
照 shell.js/statusbar.js/atoms.css 把外壳从「旧单品牌+换色」彻底重建为原型样式:
- 顶栏:岩美酒库(线描山形 mark CustomPaint,软件品牌) │分隔│ 鼎晟酒行(门店字标+店名);
右侧 ThemePickerPill(主题器,从系统设置迁来,A/B/C 切换) + NotificationBell(通知)
- 侧栏(218w):分组 单据/经营/系统(nav-label) + nav(active 高亮) + 底部 side-user(头像/姓名/店·角色→菜单)
- 状态栏:AppStatusBar(原型 .statusbar,AppChrome 主题无关色):店号/操作员/登录/当前(走字) · 连接/版本/授权
- 保留全部既有行为:更新/强制更新/授权横幅与弹窗、离线横幅、心跳、apiMessage、窄屏 Drawer
- 新增 widgets/theme_picker_pill.dart · notification_bell.dart · app_status_bar.dart
- golden:加载真实 MaterialIcons 字体(消图标豆腐块,全 golden 受益);
app_shell golden 用 9 分支+冻结时钟(可测试缝)确定化,对齐原型数据(鼎晟酒行/王经理/库存激活)
- fidelity:外壳 vs 原型 diff 3.5% ≤ 阈,montage 目检 chrome 与原型一致
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 18:02:38 +08:00 |
|
wangjia
|
059122a5dc
|
feat(tools): Phase 0.2 fidelity 保真闸(Flutter golden vs 原型,替掉 golden 自比)
- tools/fidelity.mjs:逐屏注册表 → 注入统一字体截原型基准 → 与 Flutter golden
pixelmatch diff,超逐屏校准阈值即红。这才是真·跟原型比的保真证据。
- design-distill skill shoot-prototype.mjs 加 --inject-css(注入字体覆盖 --font)
- 验证:inventory 当前屏 vs 原型 diff=28.4% > 阈,立刻抓到「缺整个外壳」——
正是旧 golden 自比(永远 0%)发现不了的结构性差异
- 原型基准入库 client/test/golden/proto/;差异图 design/_fidelity/ 进 gitignore
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 17:43:18 +08:00 |
|
wangjia
|
55c23e869e
|
refactor(client): Phase 0.1 统一中文字体地基(golden 消豆腐块,可与原型保真比对)
- 打包 Noto Sans SC(pubspec fonts:),ThemeData.fontFamily 全平台统一
- golden_harness 用 FontLoader 注入 ttf + withGoldenFont,golden 渲染真实中文
- 修复 data_table_card 根因:DefaultTextStyle → .merge(替换式会吞掉继承字体,
导致所有表格屏表头/单元格渲染豆腐块);顺手 hover 硬编码色 → context.tokens.rowHover
- 全部 golden 用新字体重生成;test/golden/failures/ 加入 gitignore
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 17:39:23 +08:00 |
|
wangjia
|
e0a3081d9f
|
test(client): 更新登录 golden(注册链接改应用内「立即注册」)
登录页注册入口文案/行为变更(前往官网→应用内 /register)后重生基准。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 16:36:24 +08:00 |
|
wangjia
|
d9f0d3feca
|
feat(client): 应用内注册新门店(两栏品牌页 + 表单)
- 新增 RegisterScreen(左品牌面板 3 步引导 + 右表单:门店名/电话/地址/
管理员/账号/密码/确认 + 同意条款),还原原型两栏设计,全 token 化
- AuthRepository.register → POST /api/v1/register(后端已有),成功弹门店编号
引导去登录
- 路由加 /register(公开路由);登录页「前往官网注册」→ 应用内「立即注册」
- 整屏 golden ×三主题入回归闸
(购买流/通知中心按指示暂不做)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 16:34:48 +08:00 |
|
wangjia
|
36f2fe1526
|
feat(client): 基础数据加商品档案全量表 + 原型 5 tab 置前
非破坏式向原型靠拢:
- 新增「商品档案」tab(productListProvider 全量商品表:商品 name+code/系列/规格/
分类/单位/默认成本价/查看,行点进详情),原型头牌功能(此前基础数据页只管字典)
- tab 重排:原型 5 个(商品档案/商品介绍/系列/规格/香型)置前;描述文档→商品介绍
- 保留 商品名称/产地/保质期/储存/仓库 字典 tab 在后(不删管理入口、不孤立数据)
整屏 golden ×三主题入回归闸。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 16:22:47 +08:00 |
|
wangjia
|
8e01e7afe7
|
feat(client): 商品详情加价格历史卡(接 /products/:id/price-history)
repo.getPriceHistory → 详情异步加载,新增价格历史卡:date + 进价,按相邻点
算涨跌(绿涨/红跌箭头)。至此商品详情 100% 对齐原型富数据版
(KPI + 各仓库分布 + 价格历史 + 近期流水)。golden 三主题已含该卡。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 16:09:43 +08:00 |
|
wangjia
|
355ac0ebc3
|
feat(client): 商品详情升级富数据版(KPI + 仓库分布 + 流水)
接后端新能力:listInventory 加 productId 透传;详情异步拉本商品库存+流水(失败
静默不阻塞主数据),渲染原型富数据三件套:
- 3 KPI 卡(当前库存 / 库存货值=库存×进价 / 近30天出库=出库流水30天聚合)
- 各仓库库存分布(按仓库分组 数量+货值)
- 近期流水(StatusPill 入/出 + 增减量,最近 8 条)
价格历史待后端第二步。整屏 golden ×三主题入回归闸。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 15:34:57 +08:00 |
|
wangjia
|
1b8bf596c5
|
test(client): app 外壳(顶栏/侧栏/状态栏)整壳 golden ×三主题
外壳 chrome 是最显眼的主题面,但各屏 golden 都不含它。本 golden 用
MaterialApp.router + StatefulNavigationShell 渲染整壳(覆盖 auth/shop/license/
update/connectivity/heartbeat,跳过联网首检与心跳避免 Timer 泄漏),锁住
顶栏+侧栏+状态栏随 A/B/C 换色入回归闸。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 14:38:55 +08:00 |
|
wangjia
|
f47f6edcd3
|
feat(client): 入库/出库录单表单(旗舰屏)斑马行 token 化 + 整屏 golden
录单明细网格斑马行 Colors.white/FFFAFAFA → surface/bg(修暗色破绽,两表单
现 0 硬编码色残留);入库+出库录单表单整屏 golden ×三主题(桌面+移动)入回归闸,
锁住 单据信息卡 + 可编辑明细网格 + 底栏。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 14:33:46 +08:00 |
|
wangjia
|
d3134f633d
|
feat(client): 登录屏离线提示条 token 化 + 整屏 golden ×三主题
服务器不可达提示条 FFF8E1/F57F17/5D4037 → warnBg/warn;
品牌 hero + 表单整屏 golden 入回归闸(覆盖联网首检避免 Timer 泄漏)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 14:02:58 +08:00 |
|
wangjia
|
85052fd8f7
|
test(client): 关于我们整屏 golden ×三主题(桌面+移动)
该屏正文已全 token 化,加 golden 锁住版本/帮助/关于卡片随主题换色入回归闸
(覆盖更新检查器避免后台 Timer 泄漏)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 13:48:40 +08:00 |
|
wangjia
|
a8f5364aea
|
feat(client): 系统设置角色徽章 → StatusPill + 系统参数 Tab golden
- _RoleBadge(超管/管理员/操作员/只读)硬编码 FCE4EC/E3F2FD/E8F5E9/F5F5F5
→ StatusPill(danger/primary/success/muted + 对应软底,走 token)
- 系统参数 Tab golden ×三主题:锁住外观主题选择器三色板微缩预览 + 参数卡
- 残留 0xFF0F3057 为品牌标识色(--brand-deep,主题无关),保留
analyze 0 error.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 13:43:50 +08:00 |
|
wangjia
|
2d28b067d8
|
feat(client): 设备管理屏在线状态徽章 → StatusPill + golden
onlineBadge(在线/离线 圆点文字)→ StatusPill(圆点软底 pill,
success/okSoft 与 muted/infoSoft);整屏 golden ×三主题(桌面+移动)入回归闸。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 13:41:07 +08:00 |
|
wangjia
|
ae447f61e3
|
feat(client): 财务屏设计语言重建(KpiCard + StatusPill 徽章 + token 清扫)
- 3 张汇总卡 _SummaryCard → KpiCard(合计/未结清/已结清,info/warn/ok)
- _StatusBadge / _TypeBadge → StatusPill(结清状态 + 应收/应付/收款/付款,
硬编码 E3F2FD/FFEBEE/E8F5E9/FFF3E0/F5F5F5 全清,走 token)
- _OfflineBanner 离线条 FFF8E1/F57F17 → warnBg/warn
- 整屏 golden ×三主题(桌面+移动)入回归闸;该屏 0 硬编码色残留
analyze 0 error.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 13:38:41 +08:00 |
|
wangjia
|
539852c7b3
|
feat(client): 出库列表设计语言重建(副标 + 共享 StatusPill + golden)
副标「共 N 笔出库单」+ 详情弹窗斑马行 token 化;复用已升级的共享
StatusBadge→StatusPill;整屏 golden ×三主题(桌面+移动)入回归闸。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 13:32:28 +08:00 |
|
wangjia
|
99a2b533e6
|
feat(client): 入库列表 + 共享订单状态徽章设计语言重建
- StatusBadge → StatusPill(草稿/待审核/已审核/已拒绝 圆点软底,色走 token:
infoSoft/warnBg/successBg/dangerBg)——入库/出库列表共享,一处升级两屏受益
- 入库列表副标「共 N 笔入库单」+ 详情弹窗斑马行/灰字 token 化(修暗色破绽)
- 整屏 golden ×三主题(桌面+移动)入回归闸
analyze 0 error.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 13:29:56 +08:00 |
|
wangjia
|
f994fbd031
|
feat(client): 往来单位屏设计语言重建(副标/状态徽章/两行名称/响应式 toolbar)
- 副标「共 N 个供应商/客户」(还原 .head .sub)
- 状态 → StatusPill(启用绿/停用灰,新 _PartnerStatusPill),桌面+移动一致
- 编码+名称合并两行(name 加粗 + code 等宽 muted)
- toolbar 响应式(窄屏搜索独占一行 + 操作行)+ token 间距,修预存窄屏溢出
- 整屏 golden ×三主题(桌面+移动)入回归闸
暂缓(数据缺口/有意偏差):应收/应付列(Partner 模型无该字段)、
类型 chips(现保留 供应商/客户 两 Tab)。
analyze 0 error · flutter test +181(往来桌面/移动各 3 golden)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 13:05:12 +08:00 |
|
wangjia
|
1632f5f1d9
|
feat(client): 库存列表收尾——副标/toolbar 间距/移动端 golden
- 副标(还原原型 .head .sub):KPI 上方「共 N 个商品 · 数据实时」(千分位)
- toolbar 间距 token 化:搜索框对齐原型 240,间隔走 AppDims.sp2/sp3
- 移动端 golden:窄屏(390)卡片流路径 ×三主题入回归闸
- 顺带修 DataTableCard 分页条窄屏横向溢出(mobile 隐藏每页选择器,
golden 闸抓出的预存 bug)
analyze 0 error · flutter test +175(库存桌面/移动各 3 golden 全过)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 12:11:17 +08:00 |
|
wangjia
|
af1ed9aeff
|
test(client): 整屏 golden 还原闸 + 可复用 golden 骨架(基建)
test/support/golden_harness.dart:pumpGolden(viewport=physical÷dpr/给足高度/
provider 覆盖)+ goldenAcrossThemes(A/B/C 三主题组)。
test/golden/inventory_list_golden_test.dart:库存列表整屏 × 三主题 golden
(fake AsyncNotifier 喂 canned 数据 + isReadonly 覆盖 + SP mock),入库作回归闸。
保真目检:shoot 原型 + montage 与 goldens 并排(见 design-distill flutter-golden.md)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 11:08:44 +08:00 |
|
wangjia
|
8cfcb190b9
|
test(client): KPI 卡三主题 golden(design-distill 阶段4 Flutter 侧首个还原闸)
test/theme/kpi_card_golden_test.dart:4 张 KPI 卡 × A/B/C 三主题 golden,
产出 goldens/kpi_strip_{a,b,c}.png。验证 KpiCard 还原原型 .kpi 结构/色调
(icon 芯片 info/blue/warn/alert 分档着色、alert 值取 accent、软底随主题换)。
更新基准:flutter test --update-goldens test/theme/kpi_card_golden_test.dart
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
|
2026-06-25 07:01:19 +08:00 |
|
wangjia
|
6570ac792c
|
refactor(client): 往来/设备/登录/关于颜色迁移到 context.tokens
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-25 00:20:11 +08:00 |
|
wangjia
|
b37c46fb9c
|
refactor(client): widgets 颜色迁移到 context.tokens
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 23:12:20 +08:00 |
|
wangjia
|
82d1e860a7
|
feat(client): main 接入可切换三主题(启动恢复持久化选择)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 22:00:59 +08:00 |
|
wangjia
|
d743bb04b6
|
feat(client): 主题选择 controller + SharedPreferences 持久化
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 21:46:51 +08:00 |
|
wangjia
|
48b9340219
|
feat(client): context.tokens 取色扩展
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 21:44:03 +08:00 |
|
wangjia
|
ede33c8bf5
|
feat(client): 三套 ThemeData 构建(挂 AppTokens,B 为 dark)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 21:40:51 +08:00 |
|
wangjia
|
a95a4ac86b
|
feat(client): codegen 单源生成三主题 AppTokens(禁手写 hex)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 21:36:22 +08:00 |
|
wangjia
|
1ac2632c45
|
feat(client): 新增 AppTokens ThemeExtension 类型
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 21:30:31 +08:00 |
|
wangjia
|
84f99ef459
|
test: 补酒名搜索拼音/多租户与前端搜索限流用例
- backend: 入库酒名全拼(feitian)+首字母(ftmt)命中、不相关拼音不命中
- backend: 入库酒名反查的多租户隔离(店A搜茅台不串到店B)
- client: setKeyword 防抖(350ms内连发取最后一次)+去重(同词不重查)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-24 00:19:34 +08:00 |
|
wangjia
|
182adca282
|
feat(client): 列表日期列改名入库/出库时间删审核时间列 + 日期控件改可键入框带日历
Deploy Client / build-client-web (push) Successful in 41s
Deploy Client / build-windows (push) Successful in 2m34s
Deploy Client / build-macos (push) Successful in 2m20s
Deploy Client / build-android (push) Successful in 1m5s
Deploy Client / build-ios (push) Successful in 2m44s
Deploy Client / release-deploy-client (push) Successful in 1m26s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YZ4DskSRKsSiheQonFtQvx
|
2026-06-21 16:39:32 +08:00 |
|
wangjia
|
a76724b385
|
feat(client): 录单表单优化 + 可搜索下拉支持新建 + 日期选择器组件
新增 DatePickerField 日期选择器与 date_util;可搜索下拉 SearchableOptionField
支持内联新建选项;入库/出库录单表单、商品页、财务页、app_shell 导航相应调整。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-20 07:05:22 +08:00 |
|
wangjia
|
32bd64d676
|
feat(client): 实时授权状态与会话失效处理
- 心跳读取 /auth/ping 回带的授权概况,直接刷新横幅/状态栏/只读门禁,省去单独轮询 /license/info
- 账号被停用/删除(401 USER_DISABLED)即强制重新登录
- 令牌持久化经串行队列 + 会话代号守卫,杜绝续期写入与登出交叉把失效 token 写回
- 写操作门禁(write_guard)+ 授权文案(license_copy)按 grace/readonly/locked 分阶段降级
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-19 07:34:07 +08:00 |
|
wangjia
|
36564571fa
|
chore: 补提测试修复、新增测试工具和设计文档
- fix(test): 同步 listInventory 签名(补 series/spec 参数)
- test(backend): 新增 import_parse_test.go
- chore(backend): 新增 cmd/test_xls 调试工具
- docs: UI 筛选组件设计规范、Gemini 项目配置
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-06-15 11:17:35 +08:00 |
|
wangjia
|
93f4f87e44
|
fix(client): 打印字体改 TrueType,修复 Windows 打印卡死
打印字体实为 OpenType/CFF,dart_pdf 只支持 TrueType(glyf),渲染中文
抛 'does not support Unicode';标签打印时异常抛在原生 onLayout 回调内
导致打印插件死等->卡死。用 fonttools 将字体转为 TrueType/glyf 替换。
加回归测试防止退回 CFF 字体。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-05 01:08:45 +08:00 |
|
wangjia
|
9f94cc97b7
|
fix(test): 修复测试数据库 schema 和 Flutter 测试与屏幕重构的兼容性
- backend/testutil/setup.go: SQLite shops 表补充 business_hours 列
- stock_in_screen_test: 入库管理双 Tab 重构后,draft/pending 测试改为先切换到「入库审核」Tab
- stock_out_insufficient_stock_flow_test: Inventory 构造参数 productUnit→unit,补充必填 id
- inventory_repository_test: mock 数据改为平铺字段格式,补充必填 id
- docs: 新增 NAS + Gitea 部署文档(Runner 设置、Shadowrocket 中继说明)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-24 10:48:21 +08:00 |
|
wangjia
|
f5c41e04f3
|
fix: 修复测试 schema 缺失字段,标记过时测试为 skip
- testutil/setup.go 补充 products.public_id、description,partners.status
- 过时 products/stock 流程测试标记 skip(provider 已不挂载)
- deploy.sh 补充 PUBLIC_URL dart-define
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-30 00:46:25 +08:00 |
|
wangjia
|
5dd7c07138
|
feat(client): 网络恢复自动刷新 + 离线嗅探 + 连通性感知登录
网络嗅探与自动恢复:
- ConnectivityNotifier:在线时 30s 检测,离线时切换为 1min 嗅探
- 新增 networkRecoveryCountProvider:网络恢复时自增,各数据 provider
通过 ref.watch 实现自动重新加载
- inventory/product/stock_in/stock_out/partner provider 均已接入
FutureBuilder 类屏幕:
- finance_screen + batch_tracking_screen 通过 ref.listen 监听恢复事件
修复问题 1:API 超时 10s/30s → 5s/15s,减少无网络时等待
修复问题 2:offline banner 文字由"写操作已禁用"改为实际行为描述
连通性感知:
- app 启动时(_AppBootstrap)立即 forceCheck,路由跳转前状态已就绪
- 登录页:watch connectivityProvider,离线时显示警告 banner
- 登录按钮:离线状态下直接提示,不等待超时
测试:
- login_screen_test + login_flow_test 通过 ConnectivityNotifier(skipInit: true)
覆盖 provider,避免测试环境中 pending HTTP timer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-18 19:52:17 +08:00 |
|
wangjia
|
d717fb3735
|
feat(client): 全模块 API 对接 + 修复登陆跳转 + 菜单 UI 优化
API 对接:
- 入库/出库/库存/财务/往来单位/基础数据全部对接后端 REST API
- 新增 repositories、providers、models 层,统一分层架构
- auth 从 flutter_secure_storage 迁移到 shared_preferences
登陆跳转修复:
- 将 _RouterNotifier 提取为独立 Riverpod provider,appRouterProvider
使用 ref.read 避免依赖链导致 router 重建后跳回 /login
- redirect 函数新增 initialized 守卫,防止 auth 未恢复时误重定向
- 添加调试日志(Router/Auth/ApiClient)定位 401 触发的 logout 链路
退出菜单 UI:
- 去掉 ListTile,改用 Row + 自定义 padding,文字左对齐
- MouseRegion + AnimatedContainer 实现 hover 高亮(普通项蓝底/退出红底)
- 菜单圆角 6px,elevation 8,分割线高度 1px
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-07 22:20:28 +08:00 |
|
wangjia
|
37112d6599
|
feat(client): 登录历史下拉、macOS 兼容修复、UI 优化
- 替换 flutter_secure_storage 为 shared_preferences,解决 macOS Keychain 签名报错
- 登录页门店编号/用户名支持历史下拉(最多5条,LRU 淘汰),使用 Overlay + CompositedTransformFollower 实现浮层
- logout 仅删除 auth token,保留登录历史
- AppShell 时钟抽为独立 _ClockWidget,避免每秒 setState 导致 TabBarView 叠影
- ShellRoute 子路由改用 NoTransitionPage,消除切换页面时的过渡动画叠影
- 新增 auth_state_test、auth_repository_test、login_screen_test 共 14 个单元/Widget 测试
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-05 01:21:40 +08:00 |
|
wangjia
|
7849f6e7e5
|
chore: 添加 macOS/Web 平台支持 + 修复编译错误 + 开发环境文档
- 修复 CardTheme → CardThemeData(Flutter 3.41 API 变更)
- 修复 finance_screen 缺少 FormDialog import
- 修复工具栏 Row overflow(添加横向滚动)
- flutter create --platforms=macos,web 生成平台配置
- 添加 docs/dev-setup.md:完整开发环境配置指南
含 Go/Flutter/Docker 安装、已知 macOS 26 兼容问题及解决方案
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-04-04 13:36:39 +08:00 |
|