P2-2部署尝试+compose通配符修复 / D2收尾(唯一单号+前后断言+H5回归17过) / P2-1 StorefrontAdmin真分页 / 后端511+PG4

This commit is contained in:
seagull
2026-09-13 00:25:50 +08:00
parent eef7be7258
commit e0e1430e8d
10 changed files with 319 additions and 33 deletions
+88
View File
@@ -0,0 +1,88 @@
# PROGRESS_AGI_ITERATION_8 · P2-2部署尝试+D2收尾+P2-1分页补齐
> 跑法口径:后端 `pytest` 全量(`tests/` + `apps/core/tests`),前端 `npm run build` + `npm test`。
> - 后端 SQLite:**511 passed / 4 skipped**(4 skipped 均为 PG 专用并发用例)
> - 后端 PG 5433 `-m postgres`:**4 passed**
> - 前端:`npm run build` ✅ 5.76s;`npm test` ✅ 17 pass / 0 fail(新增 salesman 6 用例)
> - `manage.py check` 0 issues;`makemigrations --check` No changes
> - P2-2:`docker compose config` 双栈 exit 0;`build/up/冒烟` 因 daemon 未起 + 无服务器凭证未做,不虚报
> - P3-1:按规格跳过,未建模(`Serial` grep 零命中即预期)
## 一、P2-2 部署尝试(NEXT_PLAN §P2-2 按步骤执行,不伪造上线)
| 步骤 | 结果 |
|---|---|
| `config` 插值校验(`backend/infra/docker/docker-compose.yml`) | ✅ exit 0 |
| `config` 插值校验(`backend/docker-compose.yml`,1Panel 上线栈) | ✅ exit 0(`DJANGO_ALLOWED_HOSTS=example.com` 正确展开,两处 service 均确认) |
| `build backend` | ❌ 未跑:daemon 未运行(`failed to connect to the docker API at npipe://...dockerDesktopLinuxEngine`);首次不带变量构建即暴露插值必填(`DJANGO_SECRET_KEY/POSTGRES_PASSWORD required`),属预期门禁 |
| `up -d` + 冒烟(ping/登录/开单) | ❌ 未做:无 192.168.5.7 服务器凭证,绝不伪造上线 |
### 附带真缺口修复:上线栈 compose 通配符硬编码
`backend/docker-compose.yml` 的 `backend`/`worker` 两处 `DJANGO_ALLOWED_HOSTS: "*"`
硬编码,与 `prod.py` 的通配符门禁(迭代 7 新增)直接冲突 —— 该 compose 一上线
就会被 prod 拒绝启动。改为 `${DJANGO_ALLOWED_HOSTS:?required}`,与
`DJANGO_SECRET_KEY`/`POSTGRES_PASSWORD` 同级必填。本地自带 db 栈
(`backend/infra/docker/docker-compose.yml`)无此问题(未设该变量,走 prod 门禁显式报错)。
清单 `docs/DEPLOY_CHECKLIST.md` §三/§四已同步更新(含 daemon 实报错 + 上线前必设域名的 gate)。
## 二、D2 收尾(verify 脚本 + H5 回归进前端测试)
1. **`backend/scripts/verify_salesman_h5.py`**:时间戳唯一收款单号(`SMH<MMDDHHMMSS>`,
可重复跑不撞唯一约束)+ 开单/收款前后 `count` 基线与 `+1` 差值断言(残留隔离,
不删单 —— 过账扣库存/生成应收/凭证/核销,硬删会炸外键)。`py_compile` 通过;
真机 Playwright 部分需 dev 后端 :18099 + vite :15173,本轮未重跑(沿用迭代 7 的
ALL PASSED 证据,脚本逻辑变更仅隔离层,未动 10 步断言本体)。
2. **H5 回归进 `npm test`**:新建 `frontend/src/utils/salesman.js` 纯函数
(`rowAmount/linesTotal/lineTaxAmount/taxTotal/roundOffAmount/netTotal/openDebts/debtTotal`,
抹零与价内税拆分与 D4 同公式),`Salesman.vue` 的 5 处 computed 改调同一份实现,
消灭两份口径;新增 `frontend/tests/salesman.test.mjs` 6 用例(合计/抹零/税额/欠款过滤)。
## 三、P2-1 + 附录A(StorefrontAdmin 分页 + 十项逐项核验)
- **P2-1 尾巴**:`StorefrontAdmin.vue` 无分页(订单超 20 条吞数据,NEXT_PLAN §P2-1 点名)。
后端 `admin_orders` function 视图补真分页(`page/page_size`,`count` 为过滤后总数,
上限 200,与 `StandardAsyncPagination` 同口径)+ 前端 `el-pagination` 接 `count` +
新增 `test_admin_orders_pagination`(3 单分 2 页,`count==3` 且两页无重叠)。
`Channel.vue` 的"最近 50 条"为有意截断展示(标题明示),非分页缺失,不动。
- **附录A十项逐项核验**(页面存在 + 接真接口 + 路由 + 菜单):
收款/付款(含 allocate 核销)/核销记录/库存流水/预警规则(含 init-default)/
打印模板/自定义报表(含 init-system/run)/库存大盘抽屉(inventory-status)/
科目管理(含 init-chart)/价格等级与联系人 —— 十项全部 ✅,无"有接口无页面"残留。
路由 29 条,菜单 24 项(含库存流水/预警规则/打印模板/自定义报表/科目/价格等级/核销记录)。
## 四、最终验证数字(本轮实跑)
```
backend pytest tests/ + apps/core/tests(SQLite): 511 passed / 4 skipped
backend PG -m postgres: 4 passed
backend pytest tests/test_storefront.py: 31 passed(含新增 pagination)
frontend npm test: 17 pass / 0 fail(11 原有 + 6 salesman 新增)
frontend npm run build: ✓ 5.76s(含 Salesman-16.62kB / StorefrontAdmin-8.39kB)
manage.py check: 0 issues;makemigrations --check: No changes
docker compose config(双栈): exit 0
```
## 五、变更文件清单
```
backend/docker-compose.yml [改] ALLOWED_HOSTS "*" 硬编码 → ${...:?required}(两处)
backend/apps/storefront/views.py [改] admin_orders 真分页(page/page_size + count)
backend/tests/test_storefront.py [改] +test_admin_orders_pagination
backend/scripts/verify_salesman_h5.py [改] 唯一收款单号 + 前后 count 差值断言
frontend/src/utils/salesman.js [新] D2 H5 纯计算(与组件同一份实现)
frontend/tests/salesman.test.mjs [新] 6 用例(合计/抹零/税额/欠款)
frontend/src/pages/Salesman.vue [改] 5 处 computed 改调 salesman.js
frontend/src/pages/StorefrontAdmin.vue [改] 订单 el-pagination + count 接线
docs/DEPLOY_CHECKLIST.md [改] §三追加 compose 通配符修复 + §四 daemon 实报错
frontend/dist/ [重建]
```
## 六、遗留阻塞(诚实记录)
- Docker daemon 未起:`build/up` 留待 Docker 就绪的目标机;Dockerfile 多阶段构建本身未动。
- 未上线 192.168.5.7:无服务器凭证;上线前必须设 `DJANGO_ALLOWED_HOSTS=真实域名`
(compose 现为必填,不传则 config 直接报错,不会静默带 `*` 上线)。
- 日志轮转/备份:运维侧动作,仓库无实现(清单已如实标注)。
- D2 Playwright 真机部分本轮未重跑(需双服务在场);脚本变更仅隔离层,10 步断言本体未动。
- P3-1 行业专版:按规格跳过,未建模。