# 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`, 可重复跑不撞唯一约束)+ 开单/收款前后 `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 行业专版:按规格跳过,未建模。