chore(release): 1.2.0 —— 数据迁移功能发版

- 版本号 1.1.1 → 1.2.0(root / backend / frontend 与两个 lockfile):
  部署后 /api/health 与「系统与更新」能直接分辨线上跑的是哪份代码,否则换库前后都显示 1.1.1。
- API 测试补齐:只导订单的包内容、/api/data/catalog、换类别预览(replan)、取消上传后不可再导。
- 文档补排查表:413、版本确认、权限位缺失、SQLITE_BUSY、包过期、整体回滚。
- 已验证 data.transfer 只补给超级管理员组(admin),董事长/总经理/销售经理都拿不到。
This commit is contained in:
Drsakura
2026-10-23 13:51:13 +08:00
parent 1e7c3fdcc1
commit 5acfbcea7d
7 changed files with 82 additions and 10 deletions
+16 -2
View File
@@ -86,11 +86,14 @@ git pull
cd backend && npm install --omit=dev --ignore-scripts
cd ../frontend && npm install && npm run build
systemctl restart erp
sleep 3 && curl -s http://127.0.0.1:4300/api/health
sleep 3 && curl -s http://127.0.0.1:4300/api/health # 应返回 "version":"1.2.0"
```
版本号从 `1.1.1` 升到 `1.2.0` 就是为了这一步:/api/health 与「设置 → 系统与更新」都能一眼看出线上跑的是哪份代码。
部署后**现有账号与设置保持不变**(这正是与整库替换的区别);新增的权限点 `data.transfer`
会由 `db.js` 的 `syncNewPermissions()` 自动补进超级管理员组。
会由 `db.js` 的 `syncNewPermissions()` 自动补进超级管理员组 —— 已实测:只补给「超级管理员组 / admin」,
董事长、总经理、销售经理都拿不到。
反向也成立:云端 → 本地同样走这一页,包是同一个格式。
@@ -131,6 +134,17 @@ cd /opt/1panel/www/sites/erp.foohere.de/index/backend
全部要登录 + `data.transfer` 权限;导出与导入都会写 `audit_log`。
## 排查
| 现象 | 原因与处理 |
| --- | --- |
| 上传后 413 / 上传被截断 | nginx(或 CDN)的 `client_max_body_size` 小于包体积。加 `client_max_body_size 100m;` 后 reload;急的话改走命令行通道 |
| 接口 401、页面打不开 | 新代码没部署:`curl -s http://127.0.0.1:4300/api/health` 应返回 `1.2.0` |
| 侧栏没有「数据迁移」 | 权限点只给超管组。用 admin 登录;或在权限组管理里给对应组勾上 `data.transfer` |
| 导入报 `SQLITE_BUSY` | 有别的长事务(例如大合同解析)占着写锁。等几秒重试,或先 `systemctl stop erp` 再用命令行导入 |
| 「数据包已过期」 | 上传的包只保留 24 小时,重新上传即可 |
| 想整体回滚 | `systemctl stop erp` 后用 `backend/data/backups/pre-import-*.db` 覆盖 `trade.db`,并删掉 `trade.db-wal` / `trade.db-shm`,再启动 |
## 限制
- 单包上限 **100 MB / 200 万行**,超过请按类别分开导;