Commit Graph

508 Commits

Author SHA1 Message Date
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
wangjia 24afb3b5fd refactor(client): 授权信息卡从「关于我们」迁至 设置→授权管理,替换授权到期时间卡
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 23:57:17 +08:00
wangjia cd6621d733 feat(client): 购买卡年付明示省 2 个月(tab 标注+划线原价+省钱说明行)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 23:50:20 +08:00
wangjia c3455ce7a7 feat(client): 授权管理拆四卡,首月特惠默认选中,关于页备案号加链接
- 授权管理面板拆四张卡:授权到期时间 / 在线购买续费 / 兑换券 / 到期降级规则;
  非管理员在购买卡位显示「联系管理员 + 查看套餐价格」引导
- 购买卡套餐 tab 首月特惠放第一位并默认选中;已享受过特惠则默认高级版年付
- 关于页页脚备案号可点击跳转工信部备案查询

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 23:46:40 +08:00
wangjia 2a5fea2647 fix(client): 关于页版本号不再显示 build 号,页脚版权加 ICP 备案号
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 23:39:18 +08:00
wangjia 02db118f61 feat(client): 在线购买改为设置页内联卡片,左侧菜单改「授权管理」
- purchase_dialog.dart → purchase_card.dart:弹窗改 PurchaseCard 内联卡片,
  三阶段(选套餐/待支付/成功)操作按钮改卡片内右对齐,新增「重新选择」回退
- 设置授权面板拆两张卡:授权管理(到期统计+兑换券+降级说明)+
  在线购买/续费(仅管理员可见,PurchaseCard 内联)
- 移除统计条与移动端的弹窗入口按钮

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 23:39:12 +08:00
wangjia 15ed05dc1e feat(client): 设置授权卡重排——在线购买/续费升为主 CTA
卡片改名「授权管理」,购买按钮升 primary 并排进到期统计条(窄屏通栏在统计条下方),
不再藏在「没有兑换券?」后面;兑换券降为次要入口;非管理员显示联系管理员+官网价格链接。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 23:21:34 +08:00
wangjia c15ffc7d32 chore: release site-v1.1.3(页脚 ICP 备案号)
Deploy Site / release-deploy-site (push) Successful in 25s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
site-v1.1.3
2026-07-03 23:09:16 +08:00
wangjia 633dadf84f chore: release client-v1.1.2
Deploy Client / build-client-web (push) Successful in 49s
Deploy Client / build-windows (push) Successful in 3m45s
Deploy Client / build-macos (push) Successful in 2m43s
Deploy Client / build-android (push) Successful in 1m38s
Deploy Client / build-ios (push) Successful in 3m12s
Deploy Client / release-deploy-client (push) Successful in 1m31s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
client-v1.1.2
2026-07-03 22:42:55 +08:00
wangjia fdab62b3bb chore: release site-v1.1.2
Deploy Site / release-deploy-site (push) Successful in 25s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
site-v1.1.2
2026-07-03 22:42:55 +08:00
wangjia d951549934 chore: release server-v1.1.3
Deploy Server / release-deploy-server (push) Successful in 1m1s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
server-v1.1.3
2026-07-03 22:42:55 +08:00
wangjia a996593b1c fix(backend): 特惠限次 webhook 兜底——第二笔已支付特惠单只标 paid 不叠加时长
按 pay-contract 看板要求:续期入账前事务内再查本店是否已有另一笔 paid 的
promo_first_month(防绕过前端/并发双买);命中则跳过 entitle、记 ALERT 告警,
回调仍回 SUCCESS(钱已收,退款人工处理)。补对应测试(双买不叠加/正常套餐不受影响)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 22:28:21 +08:00
wangjia b3c9d98eae feat: ¥1 首月特惠套餐(新店专享,每店限购一次,官网+App 同步上线)
- 后端:payPlans 新增 promo_first_month(¥1/30 天/标准版权益);下单强校验每店限购一次(仅 paid 计数,弃单可重下),已享用返回 409;新增 GET /license/promo-status 供前端置灰
- 官网:checkout 套餐段第二位插「🔥 首月特惠 ¥1」+ 推广横幅 + 划线原价 ¥299;首页价格区第二位插特惠卡(5 列);已享用自动置灰
- App:购买弹窗套餐段改三档(标准/特惠/高级),特惠选中显示推广横幅与划线价,已享用置灰并禁用提交
- 实付金额以 pay 侧为准,pay 需 seed promo_first_month 产品后生效

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 22:25:07 +08:00
wangjia c7de728c18 feat(site): 导航登录态下拉菜单 + 个人信息/退出登录页,登录不再直跳 App
- 导航「进入系统 · 名字」改为下拉:个人信息 / 进入系统 / 退出登录,导航可重入刷新(window.jiuNavRender)
- 新增 /profile/(账号 / 门店 / 授权三卡,authFetch 实时拉取)与 /logout/(撤销会话 + 清本地凭证)
- 登录成功默认落地 /profile/(?next= 站内白名单不变),不再直跳 /app/
- auth.js 增加 jiuAuth.clear();site.css 含本轮下拉 / profile / 特惠卡样式

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 22:24:55 +08:00
wangjia 24123eb93c feat(client): App 内在线购买/续费授权(管理员支付宝下单+到账轮询)
- 新增套餐目录 license_plans.dart(标准/高级 × 月付/年付,与官网 checkout 一致)
- license 模型/仓库新增 PurchaseOrder/PurchaseStatusInfo 与下单、查单接口
- 系统设置授权面板:管理员显示「在线购买 / 续费」按钮,弹窗选套餐→
  外部浏览器打开支付宝收银台→3s 轮询到账→自动刷新授权并展示新到期日
- 用户手册(docs.md + user-manual.html)同步补充在线购买入口说明

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 21:57:03 +08:00
wangjia e0f721117f chore: release site-v1.1.1
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.1
2026-07-03 21:18:28 +08:00
wangjia c010d8b416 fix(site): 官网 401 自动用 refresh_token 续签重试;资产加构建版本号破缓存
- 新增共享 auth.js(jiuAuth):access token 60 分钟过期后,checkout 提交/
  结果页轮询遇 401 自动 POST /auth/refresh 换新 token 并重试一次,仍失败
  才跳登录——修复「已登录点提交订单却被踢回登录页」
- 登录判定放宽为 access 或 refresh token 任一存在(refresh 7 天有效)
- 所有 JS/CSS 引用加 ?v=构建版本号:修复旧版 nav.js 被浏览器缓存后在新
  页面执行(右上角错位的旧用户面板、带引号的 "张三" 显示)
- nav.js 改经 jiuAuth 读 localStorage(JSON 解码,去掉引号显示)
- 登录页回填上次的门店编号与账号

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 21:08:13 +08:00
wangjia 71909a76d7 chore: release site-v1.1.0(版本序列对齐,内容同 1.0.56)
Deploy Site / release-deploy-site (push) Successful in 26s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
site-v1.1.0
2026-07-03 20:49:31 +08:00
wangjia a79a4d4468 chore: release site-v1.0.56
Deploy Site / release-deploy-site (push) Successful in 25s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
site-v1.0.56
2026-07-03 20:42:56 +08:00
wangjia f4197e3c7d chore: release server-v1.1.2
Deploy Server / release-deploy-server (push) Successful in 1m3s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
server-v1.1.2
2026-07-03 20:41:55 +08:00
wangjia b856f5fec8 docs: 用户/开发手册 HTML 版、db-schema 补 license_purchases、CLAUDE.md 文档地图、pay 对接指南
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 20:40:21 +08:00
wangjia d256e7ac85 feat(site): 官网全新重建(App 真相源风格)+ 四档套餐 + 在线购买流
- tokens.css/site.css 逐值对齐原型设计系统,icons 雪碧图,零外链;首页/下载/帮助/法务全站重皮肤,真实截图
- 注册与登录在官网内完成(写 shared_preferences_web 兼容 localStorage,不再跳 App)
- 价格区四档:免费/标准 299/高级 599/定制;登录后标准/高级按钮变「购买 / 续费」
- 新增 /checkout/(套餐+月付年付切换)与 /license/result/(支付回跳轮询到账)
- 登录页支持 ?next= 站内回跳;二维码措辞改「扫码看详情可分享」
- 下载页构建期真实下载链接+运行时 release 刷新;旧 features 页/死 CSS/dist 产物清理

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 20:40:21 +08:00
wangjia 18925d7d15 feat(backend): 在线购买/续费对接 pay 收款中枢——下单/webhook 验签入账/续期叠加/查单兜底
- POST /license/purchase(仅管理员)建单并调 pay 下单,返回收银台 pay_url
- POST /pay/callback 公开接收器:HMAC 验签+时间戳窗口+按 out_trade_no 幂等+金额逐分核对,同事务续期
- 续期与兑换券同口径:未过期从到期日叠加、已过期从现在起算,写入 tier/max_devices/features
- 后台每 60s 查单兜底防 webhook 丢失;closed 标 failed
- 新表 license_purchases(schema.sql/AutoMigrate/testutil 同步);配置 PAY_SECRET/PAY_BASE_URL/PAY_RETURN_URL
- 契约真相源 ~/code/pay-contract openapi.yaml v1.0.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
2026-07-03 20:40:06 +08:00
wangjia fbcf573034 chore: release client-v1.1.1
Deploy Client / build-client-web (push) Successful in 53s
Deploy Client / build-windows (push) Successful in 2m10s
Deploy Client / build-macos (push) Successful in 3m19s
Deploy Client / build-android (push) Successful in 1m22s
Deploy Client / build-ios (push) Successful in 3m19s
Deploy Client / release-deploy-client (push) Successful in 1m32s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
client-v1.1.1
2026-07-03 14:32:34 +08:00