Commit Graph

531 Commits

Author SHA1 Message Date
wangjia fd45bece17 fix(scripts): local_test.sh 变量后紧跟全角括号致 unbound variable,加花括号
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 09:07:50 +08:00
wangjia b740cc6edf feat(client): iOS 上架合规——首启隐私同意弹窗 + 注销账号入口
个保法/审核 5.1.1:移动端首启全屏隐私同意(链接隐私政策/用户协议,
同意持久化;不同意 Android 退出、iOS 留提示);我的页 iOS 形态新增
「注销账号」(sheet 说明 + 预填 mailto 至 support@51yanmei.com)。
关于页隐私政策/服务条款链接已有,桌面/Web 零改动。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 08:56:26 +08:00
wangjia dddf402d92 feat(client): iOS App Store 合规——授权页隐藏外部购买 UI,补中性联系客服卡
苹果 3.1.1:iOS 包不渲染在线购买卡与套餐价格链接;兑换券保留(3.1.3(b)),
新增「联系客服」卡(mailto:support@51yanmei.com,无购买引导字样)。
其余平台零改动;开关 hideExternalPurchaseUi 供设备上限弹窗等复用。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 07:27:31 +08:00
wangjia faaeee0bfe feat(docs): 收银台原型(扫码/手机拉起/三态)+ 客服邮箱切换 support@51yanmei.com
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 06:49:23 +08:00
wangjia 6e10048e60 chore: release client-v1.1.4
Design Source Checks / design-source (push) Successful in 18s
Deploy Client / build-client-web (push) Successful in 51s
Deploy Client / build-windows (push) Successful in 2m7s
Deploy Client / build-macos (push) Successful in 2m43s
Deploy Client / build-android (push) Successful in 1m46s
Deploy Client / build-ios (push) Successful in 3m9s
Deploy Client / release-deploy-client (push) Successful in 1m32s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
client-v1.1.4
2026-07-05 01:13:19 +08:00
wangjia 533f36da00 chore: release client-v1.2.0
Design Source Checks / design-source (push) Successful in 20s
Deploy Client / build-client-web (push) Successful in 54s
Deploy Client / build-windows (push) Successful in 2m8s
Deploy Client / build-macos (push) Successful in 2m41s
Deploy Client / build-android (push) Waiting to run
Deploy Client / build-ios (push) Blocked by required conditions
Deploy Client / release-deploy-client (push) Blocked by required conditions
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 01:08:59 +08:00
wangjia c49ee3b1df feat(client): 库存抽屉打印标签 + 修本地构建版本号不对
- 商品编辑抽屉头部「预览」旁加「打印标签」(同入库管理:QR+品牌型号版本+
  门店信息 → LabelPreviewDialog;移动端无打印不渲染)
- 修版本号 bug:appVersionProvider/更新检查改为优先 APP_VERSION dart-define
  (本地与 iOS 手工构建不改 pubspec,PackageInfo 恒为旧值 1.0.52,App 内
  显示错且误弹更新横幅);版本比较容忍 -dev/+build 后缀(每段取前导数字)
- local_test.sh:版本标记 -dev(如 v1.1.4-dev)明确区分本地包;新增 --ios
  模式(开发签名构建 + devicectl 装 USB iPhone),双端同一版本注入链路

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 23:57:37 +08:00
wangjia c9217601a1 feat(client): 全列表下拉刷新 + 库存移动工具行移除
- DsTable 窄屏卡片流支持 onRefresh(RefreshIndicator,空态也可下拉)——
  等价桌面工具栏「刷新」;库存/入库/出库/往来/财务流水/用户/基础数据
  全 tab 接线(基础数据下拉一并重拉五个 tab 数据源)
- 库存移动端「盘点/表格视图/导出/列设置/刷新」工具行移除(2026-07-04
  拍板:刷新改下拉手势、盘点入口在「我的」、其余桌面专属),
  库存移动 golden 随更新

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 23:52:06 +08:00
wangjia 99ceaa87bb fix(client): 通知铃菜单贴顶栏弹出(收回 40px 悬空偏移,修手机端漂移)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 23:05:34 +08:00
wangjia 86611dc9ee feat(client): 在线购买完成后选择页默认落到 高级版·年付
支付成功即把套餐 tab 置为高级版、周期置为年付(特惠单同时本地置灰
「已享受」)——继续购买/复购时直接主推年付高级档

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 22:46:36 +08:00
wangjia 59d56d7e30 chore: release site-v1.1.5
Design Source Checks / design-source (push) Successful in 17s
Deploy Site / release-deploy-site (push) Successful in 27s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
site-v1.1.5
2026-07-04 22:00:49 +08:00
wangjia c6d95edf12 chore: release server-v1.1.5
Deploy Server / release-deploy-server (push) Successful in 54s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
server-v1.1.5
2026-07-04 22:00:49 +08:00
wangjia a773a33779 feat: App→网页免登录(一次性换票 SSO)——移动/桌面点链接直达已登录官网
- backend:POST /auth/web-ticket(需登录,签 60s 单次票据,每用户限频)+
  POST /auth/web-ticket/exchange(公开,原子即焚兑换正常登录态,响应同
  /auth/login 另带 shop_code);web_tickets 新表 + user_sessions.kind 列
  (sso 会话:web 平台、refresh 12h 硬到期、不占设备并发配额、设备管理可见
  可踢);清理任务顺带清过期票据;schema.sql/AutoMigrate/testutil 同步
- web:/sso 落地页——兑票写入与 Web 版共享的 localStorage 后跳 redirect;
  redirect 白名单只收本站相对路径(防 open redirect),票据即时从地址栏抹除
- client:launchAuthedWebPath(ref, path) 封装(签票→拼 /sso URL→launchUrl,
  失败降级未登录直开;桌面/移动同一套);授权面板「查看套餐价格」接入

test(backend): web_ticket_test 三用例(兑换+续期/单次即焚/过期拒绝/
sso 不占配额双向验证)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 21:30:08 +08:00
wangjia 11413df3db fix(client): 底部 sheet 打开时横滑改为关 sheet,不再切 tab
- showMSheet 登记「打开中 sheet」关闭器栈(任何方式关闭都注销)
- 壳层横滑手势先查栈:有 sheet 开着 → 从左往右滑关顶层 sheet,
  任何方向都不切 tab / 不退二级屏;无 sheet 才走原 tab 切换/返回逻辑

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 20:55:31 +08:00
wangjia f9d5bc79c7 fix(client): 关于页「检查更新」按钮与反馈按钮同规格对齐(38h 通栏)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 20:48:15 +08:00
wangjia 02cffcb9ba feat(client): 切页滑动过渡 + 二级屏返回手势方向修正 + 授权三格横排
- 窄屏切页加方向感知滑入过渡(240ms easeOutCubic + 渐显):tab 间按左右
  次序、进二级屏从右滑入、返回从左滑入;桌面无动画。控制器在 initState
  创建(惰性 late 到 dispose 才求值会在已卸载树上找 Ticker 崩溃)
- 二级屏返回手势方向修正:从左往右滑=退出(iOS 返回习惯),向左滑无响应
- 授权信息三格(状态/到期日/剩余天数)窄屏改横排:间距收窄 + FittedBox
  缩放值文本防溢出,桌面不变

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 20:39:31 +08:00
wangjia 9efd1177b7 feat(client): 移动端横滑手势——tab 根左右滑切 tab、二级屏左滑退出
- tab 根(库存/入库/出库/财务/我的):左滑下一个 tab、右滑上一个(不循环)
- 二级屏:左滑返回(同顶栏返回箭头语义),右滑无响应
- 仅窄屏生效;内容区横向滚动(分段 tab/表格横滚)在手势竞技场优先,不冲突

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 20:31:33 +08:00
wangjia 980e38e020 feat(client): 库存/出入库移动卡片与详情 sheet 逐一对齐原型结构
- 新增 MCard(原型 .m-card 双栏:mc-main 标题+副行 mono | mc-right 徽章行+
  金额 mono | › | mc-foot ⓘ脚注)+ DsIconBadge(.badge.ico 22px 纯图标)/
  DsTextIconBadge(.badge.bi 图标+文字) + statusToneOf 状态词配色表——
  替换原 MobileListCard「标签:值」布局与各屏本地 _icoBadge/_statusColors
- 出入库卡:单号 + 供应商/客户·N 项 + 状态/退单/待定价图标徽章 + 合计金额 +
  日期·经手人·审核 脚注;库存卡:品名 + 编码·规格 + 状态徽章 + 数量(缺货红/
  预警黄);移动卡不再有行内操作(对齐原型,操作统一在详情 sheet;打标签=
  打印,移动端裁剪)
- DsTable 窄屏卡片流去外层大卡容器(卡直接铺页面底色,对齐原型 m-scroll)——
  往来/基础数据等全部卡片流屏同步受益
- 出入库详情窄屏改 sheet 专属布局(原型 openOrder):drow 字段行 + 明细
  pe-card(头行 图标+「明细 · N 项」+ 行=品名+系列·×数量 | 金额/待定价徽章)+
  合计 drow + 等分按钮行(无组标签);桌面右滑抽屉布局不变
- 相关移动 golden 全量重生成(出入库/库存/往来/基础数据 ×3 主题),
  桌面 golden 零漂移;283 测试全绿

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 19:30:40 +08:00
wangjia 145bf06ff8 devops: production.env 同步通道修复——render-env 切 ali + 发版漂移告警
2026-07-04 二维码 IP 事故复盘:env 不随发版同步(by design,密钥走
render-env 手动通道),但 render-env 还停在 EC2 时代且割接后没跑过,
线上 env 的 STORAGE_*/CORS 一直是割接临时 IP。三处修复:

- deploy/render-env.sh:目标改 ssh 别名 ali(可 JIU_DEPLOY_SSH 覆盖)、
  SECRET_KEYS 补 PAY_SECRET(旧模板缺此行,直接 deploy 会删掉线上支付
  密钥)、健康检查改 :8081、覆盖前先备份线上 env
- deploy/production.env.template:SERVER_PORT 8080→8081(对齐 ali nginx
  反代口径)、补 PAY_SECRET 占位
- scripts/ci/deploy-server.sh(ali 分支):部署后比对模板与线上 env 的
  非密钥项,漂移只告警不覆盖——手改线上配置不再长期无人发现

线上 env 已手工修正(STORAGE_BASE_URL/STORAGE_PUBLIC_URL/SERVER_CORS_ORIGIN
→ https://jiu.51yanmei.com,退役 LICENSE_* 三行清除,改前有备份)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 19:20:53 +08:00
wangjia cd477ce81a fix(client): 抽屉内操作不再收抽屉(原地刷新)+ 日期输入框垂直居中
- 出入库详情抽屉:通过/拒绝/撤回/提交/结清/退单/确认定价/打印 全部不收抽屉,
  操作完成后原地重拉单据刷新内容(StatefulBuilder+refresh);仅 遮罩/X/
  修改·删除(离开语义)关闭——对齐拍板「点抽屉外才收回」
- 往来抽屉「编辑」、财务往来抽屉「登记收款/付款」(完成后流水原地刷新)、
  商品编辑抽屉「保存」同规则;「取消」保持关闭语义
- 日期组件输入框 forceStrutHeight 锁行盒:修等宽字体 ascent/descent 不对称
  导致的文字垂直偏移

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 18:09:21 +08:00
wangjia fb236018f3 refactor(client): 日期选择统一为扁平组件——输入框+滚轮同宽居中入面板,桌面/移动全覆盖
- wheel_date_picker.dart 重构为统一组件:单日期 showDsDateDropdown(面板=
  可输入框+三列滚轮+今天/确定)、范围 showDateRangeDropdown(起始|结束双窗格
  并排+共用底栏);桌面锚定下拉(透明遮罩不冻结窗口)、窄屏底部 sheet 同内容
  (范围纵排)——同一套窗格两端复用
- 扁平化:输入框与滚轮同宽 248、文字水平垂直居中(mono)、去掉全部阴影/立体
  效果(滚轮外框仅 1px 边框,中心高亮带去描边)
- DsDateCell(录单日期格)与 DatePickerField(登记收支)改为触发器:点选/
  回车打开统一面板,键入在面板内完成;出库工具栏时间 chip 补切到新组件
- 旧 showWheelDatePicker/showWheelDateRange 两步弹窗删除;组件测试改写为
  新契约(触发器+面板键入+词法归一),表单 golden 随形态更新

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 17:49:17 +08:00
wangjia 06dc68245a feat(client): 日期范围改锚定下拉——起止并排双滚轮 + 可键入,不再冻结窗口
- 新增 showDateRangeDropdown:锚定触发控件下方(透明遮罩点外关闭,形态同
  DsMenu 下拉),起始/结束两列并排,各带可输入框(键入/回车/失焦归一
  yyyy-MM-dd)与滚轮,输入↔滚轮双向联动;共用底栏显示当前范围 + 确定,
  起止倒置自动交换;窄屏回落既有两步滚轮弹窗
- WheelDatePanel 加 showFooter/onChanged(滚动即回调),供范围面板复用
- 出入库列表 6 处调用切换:工具栏时间 chip「自定义…」、桌面详搜弹窗、
  窄屏详搜 sheet 的日期区间字段均锚定在各自控件下方

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 17:29:21 +08:00
wangjia 0425939d7e feat(client): 录单日期格支持直接键入(DsDateCell 可输入 + 滚轮并存)
- DsDateCell 由纯点选改为可键入:支持 2024 / 2024-5-12 / 20240512 等,
  失焦或回车归一为 yyyy-MM-dd;回车提交并推进下一格(键盘流保留 Tab/Esc);
  日历图标仍打开滚轮面板,滚轮确定回填输入框
- 归一词法抽为共享 normalizeYmd(core/utils/date_util.dart),
  DatePickerField 改为复用同一实现(登记收支等处词法一致)
- 出入库表单 golden 基准随日期格形态更新(桌面+移动 ×3 主题)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 17:20:03 +08:00
wangjia 6d58ace4a7 chore: release server-v1.1.4
Design Source Checks / design-source (push) Successful in 16s
Deploy Server / release-deploy-server (push) Successful in 55s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
server-v1.1.4
2026-07-04 14:02:29 +08:00
wangjia c9e3664d68 fix(backend): 登录设备配额三修复——过期会话不占坑/同设备重登不叠加/配额跟套餐档位
S003 线上登录锁死根因修复:
- 活跃会话统计排除 refresh 已过期的行(此前过期未清理的会话把配额占满,
  正常用户被锁在门外,需等 cleanup retention 天后才释放)
- 同 shop+user+device_id 重登先吊销旧会话(reason=relogin),重装/重复登录
  不再叠占配额
- effectiveTotalQuota 接线套餐档位:session_policy 运维覆盖 > 有效授权
  max_devices(标准 2/高级 5,floor 2 兜底 trial=1)> 全局默认 5(无有效授权)

test(backend): session_quota_test.go 五用例覆盖三分支 + policy 优先级 + trial 兜底

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 13:46:59 +08:00
wangjia 5b9262a166 docs(design): 移动端落地收尾——CONTRACT 台账入表 + 实现计划 HTML 阅读版登记
- CONTRACT 块4:移动壳/我的/授权/盘点入验收表(同步·golden);通知两屏登记二期、
  建单两屏登记拍板不落地;「移动愿景原型」小节改记 2026-07-04 已落地;
  授权面板代码先行行更新为公共 license_panel.dart
- docs/plans/mobile-screens-implementation.html:实现计划阅读版(Stage0/四包/合流验收),
  登记 docs/index.html「实现计划」分类

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 12:23:27 +08:00
wangjia 9445042cb4 feat(client): 设置/用户/设备/关于窄屏对齐移动原型(hub 形态/卡片流/sheet/无打印)
- 系统设置窄屏改 hub 三组(门店/偏好/数据):门店信息/编号规则/默认仓库走
  底部 sheet,主题外观接 showThemeSheet,?tab= 深链窄屏忽略;桌面 subnav 不动
- 用户管理窄屏:m-section + 头像卡片流 + 角色图标徽章 + FAB 新增;
  点卡开详情 sheet(drow + 重置密码/启停/编辑),表单复用为 sheet 形态
- 设备管理窄屏:会话卡流(本机标注/在线图标徽章)+ 外设卡流(mc-foot 脚注),
  「+ 添加设备」在区块标题行右侧(m-pill 选择 sheet),打印模板窄屏不渲染
- 关于我们窄屏:品牌 hero + hub 链接组 + 产品信息 drow 卡 + 时间线 pill 标签
  + 意见反馈 sheet(类型 pill/描述/联系方式);授权信息不显示(已迁 /me/license)
- golden:四屏窄屏基准独立成 *_mobile_golden_test.dart(390×844 @2x 三主题),
  桌面 golden 零漂移

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 12:19:15 +08:00
wangjia dde87a32b6 feat(client): 库存/盘点/财务窄屏对齐移动原型(KPI 网格/卡片流/图标徽章/sheet)
- 库存列表:窄屏隐藏页内大标题头;KPI 2×2 MKpiGrid(缺货卡 warn+点击筛选);
  MSearchRow(详搜钮开筛选 sheet:状态/规格/系列);卡片徽章换图标变体
- 库存盘点:窄屏卡片流(单号/范围·项数/进行中徽章带图标/差异/日期)+
  详情 sheet(drow 键值行)+ 底部操作条;DateTime.now→appNow 可注入时钟
- 财务:窄屏隐藏大标题头;KPI 2×2(收入 up 绿/支出 down 红/应收 warn);
  DsSeg 应收/应付/流水三分段 + 卡片流(类型徽章带图标、金额正负色)
- golden:新增 m_inventory / m_inventory_check / m_finance 三屏×三主题
  (390×844@2x);重生成既有 inventory_list_mobile / finance_mobile 基准
  (桌面 golden 零改动)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 12:18:17 +08:00
wangjia ff7b4194ec feat(client): 出入库列表窄屏对齐移动原型(KPI 筛选/搜索行/状态与详搜 sheet/图标徽章)
- 窄屏隐藏页内大标题头与新增/导出/打印入口(移动端无建单与打印——拍板)
- KPI 改 MKpiGrid 2×2:待审核/草稿卡可点切换状态筛选(再点取消,selected 联动)
- 工具栏改 MSearchRow:搜索(provider 内置防抖)+ 纯文字状态钮 + 图标详搜钮
- 状态筛选/详细搜索改 showMSheet 底部 sheet(详搜字段与桌面完全同集,重置/应用在 actions)
- 卡片流徽章换图标变体(含派生态待定价/部分退单/已退单)+ › 箭头,行内操作收进详情 sheet
- 确认进价/确认售价窄屏走 showMSheet;窄屏详情操作组不出打印
- 新增 390×844 三主题 golden(m_stock_in_list/m_stock_out_list);重生成既有 390×1300 移动 golden 基准(桌面 golden 零漂移)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 12:17:31 +08:00
wangjia 4287f5a876 feat(client): 往来/基础数据/商品详情窄屏对齐移动原型(卡片流/图标徽章/sheet 表单)
- 往来单位:窄屏隐藏页内大标题(标题在壳顶栏);MSearchRow 搜索行;
  类型 pills 全部/供应商/客户/两者(两者=客户端过滤,服务端 FIND_IN_SET 无独立值);
  卡片流类型+状态徽章换图标变体、mc-sub mono 编码
- 基础数据:窄屏隐藏大标题;各 tab 搜索行换 MSearchRow(清空 × 并入,重置钮撤);
  档案/字典卡片副行 mono 编码;系列/规格/仓库 新增编辑窄屏走 showMSheet 底部 sheet 轻表单
- 商品详情:窄屏 padding 收紧 sp4;信息卡 Wrap→单列;图片缩略图行窄屏横滚防溢出;
  二维码弹窗宽度走 context.dialogWidth
- golden:新增 m_partners / m_products / m_products_series(390×844 @2x 三主题);
  重生成既有 partners_mobile / products_archive_mobile 基准(桌面 golden 零漂移)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 12:13:38 +08:00
wangjia be9afcf68d feat(client): 移动壳基建——底部 5 tab + 我的 hub + 统一底部 sheet + 移动组件四件套
对齐移动原型体系(m-*.html)的 Stage 0 共享基建,桌面形态零改动:

- 导航:router 新增 branch 9(/me 我的 + /me/license 授权屏);窄屏 tab 根
  (库存/入库/出库/财务/我的)出底部 MTabBar,二级屏隐藏 tabbar + 顶栏返回箭头
  (PopScope 拦系统返回键防退 app);窄屏 Drawer/汉堡删除;窄屏顶栏对齐 m-top
  (标题 + 主题/通知铃/头像→我的)
- sheet:showMSheet(grip/标题/86vh/键盘避让)+ showAdaptiveSheet;六个共享
  弹层呈现函数加窄屏 sheet 分支(订单/往来/财务往来/商品编辑抽屉 + 退单/登记收支
  dialog 的 asSheet 形态)
- 徽章:DsBadge/StatusPill/StatusBadge 加图标变体(默认圆点零漂移)+
  status_icon_map 转录原型 BADGE_ICON 28 词
- 组件:MKpiGrid(2×2 可点 KPI)/ MSearchRow(搜索+状态钮+详搜钮)/
  MHubGroup(hub 入口组)/ showThemeSheet(主题外观 sheet)
- 授权:_LicensePanel/_SettingsCard 抽取为公共 LicensePanel/SettingsCard,
  窄屏授权跳转 /me/license
- golden:app_shell_mobile + me 各三主题(390×844@2x);全量 259 测试绿,
  check_ds_code / check-l1-sync 闸过

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 11:56:04 +08:00
wangjia b683adece9 docs(design): 授权管理上升为独立移动屏,入口移至「我的」系统组用户管理下
- 新建 m-license.html(授权信息/在线购买三阶段/兑换券/降级规则,自 m-settings
  二级视图整体迁出,m-top 返回导航)
- m-me 系统组 用户管理 之下加「授权管理」入口
- m-settings 撤内嵌授权视图与入口,回归纯 hub(门店/编号规则/偏好等 sheet 保留)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 10:43:37 +08:00
wangjia 781e2c5e2d docs(design): 移动原型 设备/设置/授权管理/关于 四屏对齐桌面能力
- m-devices:补 登录设备管理 卡片流(用户/平台/IP/最近活跃 + 本机标识 + 详情
  sheet 强制下线);外设卡补 连接方式/最近活动 + 测试/配置/解绑;添加设备入口
  移至区块行(无 FAB),sheet 表单登记;打印模板区块按拍板裁剪
- m-settings:hub 升级为真实 5 面板——门店信息 sheet 表单 / 用户与角色 /
  编号规则(新)/ 授权管理(改词+二级视图)/ 偏好(主题+默认仓库,打印偏好删)
- 授权管理二级视图:授权信息三行 + 在线购买卡(特惠/标准/高级 tab、年付省2月
  划线原价与省钱行、支付宝支付 → waiting → success 三阶段)+ 兑换券 + 降级规则,
  对齐 settings_screen 四卡与 purchase_card 三阶段
- m-about:hero 下补 官网/微信客服/隐私政策/服务条款 链接组;反馈升级为
  sheet 表单(类型 chip+描述+联系方式);页脚 © + 京ICP备2026039814号;
  授权信息块删除(随真相源迁设置);版本示例 v1.1.3
- CONTRACT 增「移动愿景原型」小节:m-* 为移动目标设计(tab+我的),与 Flutter
  当前响应式复用为有意愿景超前;登记已对齐屏与「移动无建单/无打印」裁剪口径

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 10:35:27 +08:00
wangjia f3cfdcadca feat: 购买下单透传终端类型,手机端收银台拉起支付宝 App(契约 v1.1.0)
根因:pay 判手机/PC 用下单请求 UA,而下单由 jiu 后端 Go client 发出,
恒被判 PC 扫码页——手机用户拿不到 wap 拉起页。

- backend:/license/purchase 请求体加可选 client_type(oneof=pc mobile),
  缺省按本请求 UA 兜底(官网浏览器购买自动受益);CreatePurchase 透传给 pay;
  单测断言透传 + 既有用例补参
- client:createPurchase 支持 clientType;PurchaseCard 按平台声明
  (iOS/Android=mobile,桌面=pc,Web 不传走 UA),kIsWeb 先于 dart:io;
  launchUrl 外部浏览器不变,wap 收银台自动拉起支付宝
- 配套:pay-contract v1.1.0(744725b)+ pay 侧 resolveIsMobile(dbdadd1)已各自提交

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 10:31:49 +08:00
wangjia aa3aad417c docs(design): 澄清回滚——去图标仅限状态筛选钮,其余恢复图标形态
状态筛选钮保持纯文字无箭头;详细搜索钮/卡片图标徽章/详情 sheet 图标+文字徽章/
卡片 › 箭头恢复上一版;+ 移除与搜索行位于 KPI 下不变

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 10:06:56 +08:00
wangjia 5036c0ba42 docs(design): 移动出入库回归纯文字工具栏与徽章(用户拍板),搜索行移至 KPI 下
- 新增(+)按钮移除:移动端暂不支持建单
- 搜索/状态/详细搜索 一行移到 KPI 卡之下;状态与详细搜索改纯文字按钮
  (无图标无箭头,选中/激活转 primary,详细搜索带条件计数)
- 卡片徽章弃纯图标圆钮,改纯文字 .bi 徽章(无圆点无图标,可换行右对齐);
  详情 sheet 徽章同步纯文字;卡片右侧 › 箭头移除
- 全局 BADGE_ICON 图标化机制保留(桌面端及其他屏不受影响,.bi 自动跳过)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 10:04:42 +08:00
wangjia 6e19373382 docs(design): 在线/离线徽章图标 勾/叉 → Wi-Fi/Wi-Fi断开(i-wifi/i-wifi-off 新增)
信号点按 i-info 同法用实心圆替代 lucide h.01 发丝点,小尺寸清晰;sprite 两端同步

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 09:59:31 +08:00
wangjia e9b0dfd652 docs(design): 在售徽章图标 勾 → 购物车(i-cart 新增,sprite 两端同步)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 09:58:35 +08:00
wangjia 0d43c43c29 docs(design): 移动出入库工具栏全图标化(新增去文字、状态去文字箭头)
- 新增按钮只留 + 图标(primary 方钮,title 提示)
- 状态筛选改纯图标钮:默认漏斗,选中某状态后按钮图标切换为该状态的
  BADGE_ICON 代表图标并转 primary 高亮,取消回漏斗 ghost

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 09:57:41 +08:00
wangjia 6cadc276bd docs(design): 全系统徽章圆点统一图标化(icons.js BADGE_ICON 单源自动注入)
- icons.js 新增 BADGE_ICON 全量状态映射(库存/单据/往来/角色/设备/盘点/兑换券/
  收付 28 词)+ MutationObserver 运行时增强:任何屏渲染的 .badge.b-* 自动注入
  代表图标并隐藏圆点,动态重渲染同样生效,屏内无需手写 svg
- 新增状态只需在 BADGE_ICON 登记一行即全局生效;已手写 .bi/.ico 的徽章跳过
- index.html 徽章登记区注明机制;实测 index 47/47、库存/往来/移动出入库全部命中

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 09:55:13 +08:00
wangjia 4d82d37495 docs(design): 提示条图标换清晰变体 i-info/i-alert(h.01 发丝点改实心圆)
小尺寸下 lucide info/alert 的 h.01 点状路径细如没画完;新增点为 r1.1 实心圆的
i-info/i-alert(sprite 两端同步),替换 index 示例、出入库桌面/移动提示条、
移动卡片 foot 信息图标(i-ic24/i-ic42/i-ic69 原图标保留供他处沿用)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 09:51:52 +08:00
wangjia 0a2f407868 docs(design): 待定价徽章图标 价签 → ¥(i-yen 新增,sprite 两端同步)
用户建议货币符号更直观;产品金额全为 ¥,故用 lucide japanese-yen(与人民币
符号同形)而非 $,四屏 STICON 与 index.html 登记区同步更新

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 09:49:18 +08:00
wangjia ed2a933956 docs(design): 移动出入库筛选合一行(状态下拉+漏斗) + 详情字段对齐桌面 + 库存去FAB
- 搜索/状态/详细搜索/新增 合为一行:状态 pills 撤除改 m-select 下拉
  (底部选项 sheet 带图标徽章,激活高亮),详细搜索改漏斗图标按钮(激活转 primary)
- 详情 sheet 字段名与顺序对齐桌面抽屉:单号升为标题,补 仓库/商品数 行,
  明细标签改 入库明细/出库明细,合计金额(出库+合计利润)移至明细卡之后
- 样本数据补 wh 仓库字段
- 库存屏 FAB 移除(入库建档铁律,库存不手工新增)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 09:46:49 +08:00
wangjia 84e0653443 docs(design): 单据状态徽章图标化 + 移动出入库列表补 KPI 卡/新增按钮进搜索行
- atoms.css 徽章新增两变体并登记 index.html:.bi 代表性图标替代圆点(桌面),
  .ico 纯图标紧凑徽章(移动卡片,22px 圆)
- 图标映射:草稿=文件 待审核=时钟 已审核=勾 已拒绝=叉 退单=撤回箭头(i-undo 新增
  lucide undo-2,原型/官网 sprite 两端同步) 待定价=价签
- 桌面 stock-in/out-list 表格与抽屉状态徽章圆点 → 图标
- 移动 m-stock-*-list:卡片徽章改纯图标横排(解决竖排文字徽章过大);详情 sheet
  用图标+文字徽章;FAB 移除,「新增」primary 按钮放搜索框旁;补 2×2 KPI 卡
  (近30天笔数/金额 + 待审核/草稿 点击筛选,对齐桌面滚动窗口径)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 09:38:58 +08:00
wangjia 12952ea9ae docs(design): 移动出入库列表原型补齐桌面近期功能(简化版)
- 新状态词对齐桌面/后端:已通过/已驳回 → 已审核/已拒绝,新增 部分退单/已退单
  徽章与筛选 pill(return_state: partial/full)
- 新增「详细搜索」pill 入口 + 底部 sheet(与 Flutter 详细搜索同字段集,竖排
  单列,select 内联展开 m-opt 选项,激活计数高亮)
- 详情 sheet 补 审核员 行与退单徽章;已审核单加「退单」入口
- 新增 退单 sheet(勾选明细+数量+全部退单,入库=从库存删除/出库=加回库存文案)
- 确认进价(入库)升级为 sheet 表单;出库新增 确认售价 sheet(先卖后定价)
- 出库详情补 合计利润 行(管理员可见)与明细待定价徽章

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 09:24:32 +08:00
wangjia 9b37568fdb ci: 设计真相源检查挂 CI(PR + main push 自动跑四道闸)
Design Source Checks / design-source (push) Successful in 16s
- 新增 tools/check-l1-sync.mjs:L1 同源四道——tokens 快照逐字节、icons
  两端同集同内容、官网 token 值对齐原型主题 A、web 硬编码 hex 扫描
  (白名单 #fff/#1677ff,ds-allow 可豁免);注入测试验证红绿行为
- 新增 .gitea/workflows/checks.yml:pull_request + push(main) 触发,
  串跑 check-ds 12 道 / check-l1-sync / check_ds_code / codegen 新鲜度
  (regen→dart format→零 diff,消除重跑假 diff 问题)
- 修复 web/checkout.njk 对公转账图标底色硬编码 #8A94A6 → var(--faint)
- CLAUDE.md「设计真相源分层」登记 CI 闸与本地等价命令

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 07:14:49 +08:00
wangjia e0fdb8c12f docs(design): 设计真相源分层治理落地(原型漂移拍板)
- CLAUDE.md 新增「设计真相源分层」强制规则:L1 设计系统层原型单源不变;
  L2 屏级三态(同步/快照/代码先行);L3 新屏仍 design-first;漂移改定期体检
- CONTRACT 块 4 加「真相源」列(14 屏同步 / register 快照),新增代码先行
  屏小节(授权管理面板/购买卡/官网 checkout 等,不反向补原型)
- screens.mjs 注释明确只登记「同步」态屏,与 CONTRACT 互为镜像
- 附带体检:golden 84 用例全绿(failures 264 张陈留物已清);
  fidelity 36 屏×主题全部阈内(≤8%);check-ds 12 道闸全过

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 06:56:17 +08:00
wangjia e022494f63 chore: release site-v1.1.4
Deploy Site / release-deploy-site (push) Successful in 24s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
site-v1.1.4
2026-07-04 00:22:32 +08:00
wangjia 31024cfda6 chore: release client-v1.1.3
Deploy Client / build-client-web (push) Successful in 58s
Deploy Client / build-windows (push) Successful in 2m6s
Deploy Client / build-macos (push) Successful in 2m44s
Deploy Client / build-android (push) Successful in 1m25s
Deploy Client / build-ios (push) Successful in 3m11s
Deploy Client / release-deploy-client (push) Successful in 1m36s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
client-v1.1.3
2026-07-04 00:21:56 +08:00
wangjia 0e91768da4 feat(site): 下载页平台专属图标 + 检测卡放大重排
- 图标 sprite 新增 i-apple / i-android(simple-icons 品牌图标,填充式)与
  i-tablet-smartphone(lucide),先登记原型 icons.js 再同步官网 icons.njk
- 下载页 macOS/Android/iOS 卡片及当前平台检测卡换用专属图标(原为 copy/phone-call/funnel 错配)
- 检测卡高度加倍:icbox 44→84、标题 16→22、内边距加大,新增引导行与版本徽章,
  描述文字由 muted 灰改为正文色;窄屏按钮转全宽

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-04 00:08:01 +08:00