wangjia
|
503ee7372e
|
chore: git remote 迁移至 git.51yanmei.com,新增 Android 平台支持
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-25 00:49:22 +08:00 |
|
wangjia
|
62dc54fe1c
|
docs: 补充开发完成标准(DoD),明确测试通过前不得提交
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-24 23:37:34 +08:00 |
|
wangjia
|
626efa9c34
|
fix(ci): flutter analyze 忽略 warning/info,只在 error 时失败
Deploy / deploy (push) Successful in 1m16s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v1.0.0
|
2026-05-24 23:20:02 +08:00 |
|
wangjia
|
b69c23c88a
|
feat(deploy): 部署完成后发送 Telegram 通知
Deploy / deploy (push) Failing after 48s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-24 23:09:09 +08:00 |
|
wangjia
|
53f56ce086
|
feat(deploy): SemVer 版本管理 + 自动化发版流水线
- deploy.yml: tag 触发(v*.*.*),四阶段调脚本(compile/test/release/deploy)
- manual.yml: workflow_dispatch 支持手动回滚,checkout 指定 tag
- scripts/ci/compile.sh: 构建 Go 二进制 + Flutter Web,打包 dist/
- scripts/ci/test.sh: go test + flutter analyze
- scripts/ci/release.sh: 解析 CHANGELOG.md → 更新 version.yaml → 创建 Forgejo Release
- scripts/ci/deploy.sh: 从 Release 下载产物(自动/手动均可)→ 部署到 EC2
- CHANGELOG.md: Keep a Changelog 格式,初始 v1.0.0 条目
- backend: GetRelease 改读 version.yaml,移除 ENV 变量依赖
- backend/config/version.yaml: 重置为 v1.0.0
- web/download.html: 动态拉取 /api/v1/public/release 展示版本号和更新内容
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-24 22:41:08 +08:00 |
|
wangjia
|
d48f9f4bd0
|
fix(client): 商品公开页暂无图片时显示门店名首字,替换硬编码岩美
Deploy / deploy (push) Successful in 1m20s
_EmptyGalleryContent 接收 shopName 参数,无图片时展示
门店名第一个字符的文字头像,不再显示品牌名。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.2100
|
2026-05-24 20:59:17 +08:00 |
|
wangjia
|
b591bc522d
|
fix(web): 禁用深色模式自动适配,修复渲染叠层问题
Deploy / deploy (push) Successful in 2m9s
Flutter Web canvas 在系统深色模式下背景透明,导致底层 HTML
内容透出形成叠层。营销站点未声明 color-scheme,浏览器自动调色
也会破坏白色背景设计。
- client/web/index.html: 添加 color-scheme=light meta 及 body 白色背景
- web/index.html: 添加 color-scheme=light meta
- web/assets/colors_and_type.css: :root 声明 color-scheme: light
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.2048
|
2026-05-24 20:40:03 +08:00 |
|
wangjia
|
b15e422953
|
fix(nginx): /product/ 路径转发给 Flutter Web,修复扫码跳转营销页问题
Deploy / deploy (push) Successful in 1m16s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.2035
|
2026-05-24 20:34:28 +08:00 |
|
wangjia
|
634162e0d9
|
fix(nginx): index.html 禁用缓存,确保发版后立即生效
Deploy / deploy (push) Successful in 1m17s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.2029
|
2026-05-24 20:28:48 +08:00 |
|
wangjia
|
fbb4f90ebd
|
fix(test): shops 测试表补加 logo_url 列
Deploy / deploy (push) Successful in 1m15s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.2016
|
2026-05-24 20:15:39 +08:00 |
|
wangjia
|
a05f9bd4ec
|
feat(shop): 门店 logo 上传 + 侧边栏品牌替换
Deploy / deploy (push) Failing after 8s
- shops 表新增 logo_url 字段,AutoMigrate 自动建列
- 后端新增 POST /api/v1/shop/logo 接口(管理员),图片裁剪为 256×256 JPEG 存储
- UpdateInfo 支持传入 logo_url
- 侧边栏「岩美」替换为门店真实名称 + 自定义 logo
- 无 logo 时显示店名首字文字头像(深蓝底白字)
- 设置页「酒行信息」展示 logo 预览,编辑弹窗新增「更换 Logo」上传按钮
- 修复库存导入计数逻辑:total/imported/updated/errors 四项分别统计
- 库存导入去重改为双路索引(编号 + 名称|系列|规格),避免 key 不一致误判新增
- settings 页导入结果统一显示「重复 X 条」,兼容 skipped 和 updated 两个字段
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-24 20:03:43 +08:00 |
|
wangjia
|
831dbc5959
|
fix(import): 库存列头动态识别 + 格式不匹配诊断信息
Deploy / deploy (push) Failing after 59s
商品名称/编号/系列/规格/单位列索引从固定 0-4 改为从表头动态识别,
支持更多列名变体(品名/名称/货品名称/编码等)。
全部跳过时在 errors 中返回识别到的表头,便于诊断列格式问题。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1546
|
2026-05-24 15:45:39 +08:00 |
|
wangjia
|
d5dc499c6b
|
fix(import): 修复导入 504 超时 + 添加上传进度显示
Deploy / deploy (push) Successful in 1m15s
nginx:
- 新增 /api/v1/import/ 专属 location,proxy_read_timeout 延长至 300s
后端:
- ImportInventory 预加载商品/仓库/库存(3 次 bulk query 替代 N+1)
- 批量写 inventory_log(CreateInBatches 替代逐行 Create)
前端:
- settings 导入行:显示"上传 XX%"进度条和"导入数据(Ns)"计时
- Dio 超时设置为 send=120s / receive=300s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1513
|
2026-05-24 15:12:59 +08:00 |
|
wangjia
|
5725e84971
|
fix(nginx): 增加上传文件大小限制至 20MB
Deploy / deploy (push) Successful in 1m16s
默认 1MB 导致 Excel 文件上传返回 413。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1504
|
2026-05-24 15:03:21 +08:00 |
|
wangjia
|
86baaf3a1c
|
fix(model): users 唯一索引改为 (shop_id, username) 复合索引
Deploy / deploy (push) Successful in 1m13s
原来 uniqueIndex:uk_shop_username 只在 Username 字段上,导致用户名全局唯一。
S002/S003 的 admin 用户与 S001 冲突,INSERT 被静默跳过,无法登录。
将 User 的 TenantBase 改为直接定义 ShopID,使其参与复合唯一索引。
需要 Reset DB 使新索引生效。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1451
|
2026-05-24 14:50:34 +08:00 |
|
wangjia
|
fcf92675b1
|
fix(seeds): 修复 clear_shop.sql collation 冲突
Deploy / deploy (push) Successful in 1m13s
用 BINARY 比较绕过 utf8mb4_unicode_ci 与 utf8mb4_0900_ai_ci 的冲突。
shop code 均为纯 ASCII,BINARY 比较结果完全一致。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1435
|
2026-05-24 14:34:14 +08:00 |
|
wangjia
|
d81b2d1fac
|
fix(seed.yml): 两步走避免 S001 因 id 冲突被跳过
Deploy / deploy (push) Successful in 1m17s
清空和写入分两个独立循环:先清空所有门店,再依次写入。
避免 S001(硬编码 id=1) 在 S002 尚未清除时被 INSERT IGNORE 跳过。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1431
|
2026-05-24 14:30:46 +08:00 |
|
wangjia
|
acf2b22201
|
fix(seeds): 修复多门店种子数据互不干扰
Deploy / deploy (push) Successful in 1m14s
- S001.sql: 修复 INSERT IGNORE INTO 缺少空格的语法错误
- S002.sql: 重写为动态 @shop_id 模式,移除 TRUNCATE,改用 INSERT IGNORE INTO
- clear_shop.sql: 新增按 @shop_code 清空单店数据的参数化脚本
- scripts/dev.sh: seed 命令支持 --clear 参数(先清空再写入)
- seed.yml: 新增 clear 输入参数,支持按需清空后写入
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1354
|
2026-05-24 13:52:47 +08:00 |
|
wangjia
|
8adb94a9a4
|
fix(deploy): 修复多 shop seed 互相 TRUNCATE 问题 + 补 utf8mb4 charset
Deploy / deploy (push) Successful in 1m12s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1342
|
2026-05-24 13:41:34 +08:00 |
|
wangjia
|
a6e0edbc00
|
chore(deploy): 新增 debug-db workflow,查询线上数据库内容
Deploy / deploy (push) Successful in 1m14s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1320
|
2026-05-24 13:19:38 +08:00 |
|
wangjia
|
2b180be926
|
chore(deploy): 新增 reset-db workflow,清库重建表结构并写入 seed 数据
Deploy / deploy (push) Successful in 1m16s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1259
|
2026-05-24 12:58:34 +08:00 |
|
wangjia
|
1bf1f7563f
|
chore(deploy): 新增 seed workflow,支持手动触发写入门店测试数据
Deploy / deploy (push) Successful in 1m13s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1252
|
2026-05-24 12:51:08 +08:00 |
|
wangjia
|
988a941b41
|
chore(deploy): 简化 nginx 路由 + 自动部署 nginx config + 删除 .github workflows
Deploy / deploy (push) Successful in 1m16s
- nginx: /app/ → Flutter,/ 兜底 → 营销站,移除零散 location 块
- deploy.yml: 每次部署自动 scp nginx-jiu.conf 到服务器并 nginx -t reload
- deploy.yml: Release 附件新增 configs.tar.gz(nginx/systemd/compose 配置)
- 删除 .github/workflows/(已全部迁移到 .gitea/)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1245
|
2026-05-24 12:44:50 +08:00 |
|
wangjia
|
32ea281dfa
|
fix(ci): 修复 deploy.yml YAML 解析错误
Deploy / deploy (push) Has been cancelled
多行 bash 字符串的续行未缩进到 run: | 块内,YAML 解析器
将 '- **版本**' 误判为列表项。改用 printf 单行拼接 BODY。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v20260524.1114
|
2026-05-24 10:54:35 +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
|
b90a89790f
|
feat(web): 五个营销页面完整还原设计稿
统一 nav(5 个链接含支持、auth-aware 用户下拉菜单)、
docs 页补充面包屑/搜索/版本栏三栏布局、
footer 完整 5 列、所有内链替换为生产绝对路径。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-24 00:57:32 +08:00 |
|
wangjia
|
30a8e791a3
|
feat: 扫码商品详情页重设计 + 宣传主页 + nginx 路由完善
- public_product_screen: 1:1 复刻设计稿,新增商品介绍、批次防伪(自定义圆形印章)、完整商品参数表、门店营业时间、页脚链接
- app_theme: 完整品牌色系(brand/gray/accent/semantic)
- shop model: 新增 business_hours 字段,public 接口同步返回
- nginx: 新增 /product/ → Flutter app 扫码入口,修复 /docs /download html 后缀兼容
- web/: 新增宣传主页、功能页、文档页、扫码 HTML 及设计资源
- app_shell: 界面优化
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-23 18:58:04 +08:00 |
|
wangjia
|
1b4ca0c675
|
fix(test): 修复测试文件类型错误和测试数据库 schema 过期问题
- 修正 stock_in/out 测试中 WarehouseID/ProductID 指针误用(StockOrder 用 uint64,Inventory 用 *uint64)
- 更新 testutil/setup.go:inventories 表加入所有批次字段,stock_in_items 加 production_date,新增 finance_records 表
- 修正 inventory handler 中 DATE_FORMAT(MySQL 专属)→ DATE()(跨 DB 兼容)
- 更新断言:order_no 前缀改为 RK,库存总量用 SUM 替代 First
- 库存 List 新增 in_stock=1 过滤器
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-23 14:16:10 +08:00 |
|
wangjia
|
c1ed81dfab
|
feat: 财务结清、酒行信息、库存备注编辑、标签溯源、入库必填校验
后端
- 新增 shop handler:GET/PUT /shop/info(管理员权限)
- 新增 finance CloseByRef:按单据 ref_type+ref_id 结清账款
- 新增 inventory UpdateRemark:PUT /inventory/:id/remark
- 入库/出库审批自动生成财务应付/应收记录(去除金额>0限制)
- 种子数据 S001-S003 补充真实门店信息
前端
- 设置页新增「酒行信息」Tab,管理员可编辑门店名称/地址/电话/负责人
- 入库单列表新增结清按钮(含确认弹窗),出库单同步
- 入库表单:规格、系列、生产日期、供应商、商品名称改为提交必填
- 入库/出库列表新增入库时间、出库时间、创建时间列
- 商品标签标题改为读取 shop 表门店名,扫码文案改为「扫码溯源 · TRACE」
- 标签页脚显示门店地址和电话(从 API 读取,不再依赖编译时 dart-define)
- 库存备注支持点击编辑,超4字截断显示+Hover展示全文
- ApiClient 新增 patch() 方法(已改用 PUT 规避 CORS)
文档
- 新增 docs/user-manual.md 完整用户操作手册(12章)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-23 14:05:41 +08:00 |
|
wangjia
|
c77e1c1490
|
fix(scripts): run --help 不再误启动服务,新增完整帮助文档
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-19 09:01:56 +08:00 |
|
wangjia
|
91343a2349
|
fix: 修复库存导入 500 错误 + 开启全局文字选中
- findOrCreateProductFn 补充 PublicID(UUID),避免 unique 约束冲突导致事务 500
- main.dart 加 SelectionArea builder,全局开启 Web 文字复制选中能力
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-19 08:59:21 +08:00 |
|
wangjia
|
86738c903e
|
feat: 新增 superadmin 角色和数据清空功能
后端:
- User.Role enum 增加 superadmin,启动时 ALTER TABLE 兼容已有 DB
- 新增 SuperAdminOnly() 中间件
- 新增 POST /api/v1/admin/clear-data 接口(按表名白名单删除,多租户隔离)
前端:
- AppUser/AuthUser 支持 role 字段持久化与传递
- 数据导入 Tab 末尾增加「危险操作 — 数据清空」区块(仅 superadmin 可见)
- 支持多选:入库单/出库单/库存管理/商品详情/往来单位
- 红色警告框 + 二次确认弹窗(需手动输入"确认清空")
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-19 01:07:56 +08:00 |
|
wangjia
|
56e0d9d5b2
|
fix(client): 开启 macOS 打印沙盒权限
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-19 00:59:35 +08:00 |
|
wangjia
|
142e92f151
|
feat(client): 新增入库单/出库单打印,增强商品标签打印布局
- 商品标签改为 4×2 英寸横向,二维码右置,左侧展示系列/规格/批次/生产日期
- 新增 printStockInOrder:A4 入库单,含单号/供应商/仓库/明细表/签字栏
- 新增 printStockOutOrder:A4 出库通知单(温馨提示),含客户/明细表/签字栏
- 入库单/出库单编辑页加载完成后显示「打印」按钮
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-19 00:50:54 +08:00 |
|
wangjia
|
7ac06a409d
|
feat: 库存 XLS 导入功能(后端接口 + 前端导入按钮)
|
2026-05-19 00:22:17 +08:00 |
|
wangjia
|
b243ad885f
|
chore(deploy): 更新 NAS 部署配置和本地部署脚本
- docker-compose: 切换为 gitea/gitea 镜像,修正备份挂载路径
- scripts/deploy.sh: 新增本地一键部署脚本(测试→编译→发版→部署)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-08 02:30:03 +08:00 |
|
wangjia
|
bf38217e2b
|
feat(ci): Release 添加 commit、构建时间、最近提交记录
|
2026-05-08 02:29:10 +08:00 |
|
wangjia
|
35d73a93a1
|
chore: 重新触发(修复 EC2_SSH_KEY 格式)
Deploy / deploy (push) Successful in 1m11s
v20260508.0225
|
2026-05-08 02:24:19 +08:00 |
|
wangjia
|
b3a0c132b7
|
chore: 重新触发部署(修复 FORGEJO_TOKEN)
Deploy / deploy (push) Failing after 56s
v20260508.0223
|
2026-05-08 02:22:50 +08:00 |
|
wangjia
|
41c8bd4732
|
chore: 触发部署测试
Deploy / deploy (push) Failing after 43s
|
2026-05-08 02:18:30 +08:00 |
|
wangjia
|
7c90661d1a
|
fix(ci): 修复备份路径和 SSH key 换行问题
Deploy / deploy (push) Failing after 1m5s
|
2026-05-08 02:03:27 +08:00 |
|
wangjia
|
cb68b5bdc5
|
chore: 触发 mac runner 测试
Deploy / deploy (push) Has been cancelled
|
2026-05-08 02:00:31 +08:00 |
|
wangjia
|
315a328570
|
chore(ci): 改用 Mac 本机 runner,直接使用已安装的 Go/Flutter
Deploy / deploy (push) Has been cancelled
|
2026-05-08 01:57:47 +08:00 |
|
wangjia
|
a70fdc90b0
|
chore(ci): 打印 Release API 响应便于排错
Deploy / deploy (push) Failing after 31m28s
|
2026-05-08 01:00:55 +08:00 |
|
wangjia
|
ecd72e8b0a
|
chore(ci): 预装 Go/Flutter 到 NAS,CI 直接挂载使用
Deploy / deploy (push) Failing after 7m29s
|
2026-05-08 00:49:06 +08:00 |
|
wangjia
|
6a875db001
|
chore(ci): 添加 Go/Flutter/依赖缓存,避免每次重复下载
Deploy / deploy (push) Has been cancelled
|
2026-05-08 00:11:41 +08:00 |
|
wangjia
|
4e20203ed1
|
chore(ci): 用国内镜像替换 GitHub 下载(Go/Flutter)
Deploy / deploy (push) Has been cancelled
|
2026-05-08 00:09:00 +08:00 |
|
wangjia
|
f26565b871
|
chore: trigger CI/CD test
Deploy / deploy (push) Has been cancelled
|
2026-05-07 23:41:12 +08:00 |
|
wangjia
|
89d3433a9d
|
ci: 修复 actions 镜像地址
Deploy / deploy (push) Failing after 10m48s
|
2026-05-07 23:22:49 +08:00 |
|
wangjia
|
c738543e86
|
ci: 修复 runner instance URL
Deploy / deploy (push) Failing after 7m9s
|
2026-05-07 08:38:01 +08:00 |
|