# 供应商结算管理 — 测试用例 > **依据**:`供应商结算管理功能需求.md`(v1.1)、`供应商结算管理技术方案.md`(v1.0) > **关联**:`../交易订单管理/交易订单管理测试用例.md`(结算单由订单「完成支付」生成) > **接口 Base Path**:`/tradeMarket/supplierSettlement`;鉴权与若依一致(Cookie / Token)。 **通用前置(无特殊说明)**:具备本模块权限的账号已登录(`tradeMarket:supplierSettlement:list|query|settle`)。宜复用交易订单测试样本并预置结算数据: | 类型 | 样本 | 要点 | | --- | --- | --- | | 供应商 | **S1** `id=1` 按头 `fee_method=2`,`fee_standard=10` | 与订单用例一致 | | 供应商 | **S2** `id=2` 按额 `fee_method=3`,费率 1%+0.5% | 快照校验用 | | 供应商 | **S3** `id=3` 按户 `fee_method=1` | 服务费=0 | | 交易订单+结算 | **SS-PEND** | 订单已完成;`settlement_status=0`;`order_no` 已知 | | 交易订单+结算 | **SS-DONE** | `settlement_status=1`;已有 `settle_voucher_url` | | 交易订单 | **TO-PAY** | `order_status=0`;用于联调「支付→生成待结算」 | | 凭证文件 | **V-OK** | `test.jpg` ≤10MB;**V-BAD** | `test.pdf` 或 >10MB | **完成结算 Body 示例**: ```json { "id": 1, "settleVoucherUrl": "http://localhost/profile/upload/2026/05/settle.jpg", "settleVoucherPath": "/profile/upload/2026/05/settle.jpg" } ``` **界面(UI)测试**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。组件路径:`tradeMarket/supplierSettlement/index`。 **自动化对照**:`SettlementNoGenerator`、`SettlementOnPayService`、`SettlementFeeCalculator`(订单包已有);`BizSupplierSettlement*`(实现后 JUnit5 / MockMvc)。**本期后端结算 Controller 待实现**,API/UI 用例按技术方案编写。 --- ## 一、单元测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-GYSJSGL-UT-001 | 结算编号 | 当日首号 | 单元测试 | JUnit5 | §3.1 | 当日无未删结算单 | `SettlementNoGenerator.next()` | `JSD`+`yyyyMMdd`+`001` | | ZCZX-GYSJSGL-UT-002 | 结算编号 | 递增与左补零 | 单元测试 | JUnit5 | §3.1 | 最大序号 `008` | `next()` | 末 3 位 `009`;总长 14 | | ZCZX-GYSJSGL-UT-003 | 结算编号 | 超 999 拒绝 | 单元测试 | JUnit5 | §3.1 | 当日已满 999 | `next()` | 抛业务异常 | | ZCZX-GYSJSGL-UT-004 | 结算编号 | 冲突重试 | 单元测试 | JUnit5+Mockito | 唯一键 | Mock `uk_settlement_no` 冲突一次 | 重试 `next()` | 第二次成功或明确失败 | | ZCZX-GYSJSGL-UT-005 | 结算生成 | 按头快照写入 | 单元测试 | JUnit5+Mockito | §3.5、§5.1 | S1 订单 3 头总金额 10000 | `createFromOrder` | `fee_method=2`;`service_fee_amount=30.00`;`payable_amount=9970.00` | | ZCZX-GYSJSGL-UT-006 | 结算生成 | 按额快照写入 | 单元测试 | JUnit5+Mockito | §3.5 | S2 订单总金额 10000 | `createFromOrder` | `fee_method=3`;费率字段与 S2 一致;`service_fee_amount=150.00` | | ZCZX-GYSJSGL-UT-007 | 结算生成 | 按户服务费 0 | 单元测试 | JUnit5+Mockito | §3.5 | S3 订单 | `createFromOrder` | `service_fee_amount=0`;`payable=total_amount` | | ZCZX-GYSJSGL-UT-008 | 结算生成 | 订单字段冗余一致 | 单元测试 | JUnit5+Mockito | §10.2 | 订单 `order_no`、头数、金额已知 | `createFromOrder` | `order_no`、`total_heads`、`total_amount`、`supplier_id` 与订单一致 | | ZCZX-GYSJSGL-UT-009 | 结算生成 | 初始待结算 | 单元测试 | JUnit5+Mockito | §2.2 | 合法订单 | `createFromOrder` | `settlement_status=0`;凭证、完成时间为空 | | ZCZX-GYSJSGL-UT-010 | 结算生成 | 幂等 uk_order_id | 单元测试 | JUnit5+Mockito | §4.1、§6.5 | 同 `order_id` 已有结算 | 再次 `createFromOrder` | 抛错;不插入第二条 | | ZCZX-GYSJSGL-UT-011 | 凭证校验 | 缺 url/path | 单元测试 | JUnit5 | §3.7、§6.2 | 无 | `validateSettleVoucher` 缺字段 | 失败;请上传结算凭证 | | ZCZX-GYSJSGL-UT-012 | 凭证校验 | 非法后缀 | 单元测试 | JUnit5 | §3.7 | 无 | `path` 为 `.pdf` | 失败;格式不符合 | | ZCZX-GYSJSGL-UT-013 | 凭证校验 | 合法 png | 单元测试 | JUnit5 | §3.7 | 无 | `path` 以 `.png` 结尾 | 通过 | | ZCZX-GYSJSGL-UT-014 | 完成结算 | 事务成功 | 单元测试 | JUnit5+Mockito | §6.3 | SS-PEND;合法凭证 | `completeSettle` | `settlement_status=1`;`settle_finish_time` 非空;凭证已存 | | ZCZX-GYSJSGL-UT-015 | 完成结算 | 非待结算拒绝 | 单元测试 | JUnit5+Mockito | §6.4 | SS-DONE | `completeSettle` | 失败;仅待结算可操作 | | ZCZX-GYSJSGL-UT-016 | 完成结算 | 关联订单非已完成 | 单元测试 | JUnit5+Mockito | §6.4 | Mock 订单 `order_status=0` | `completeSettle` | 失败;订单状态不满足 | | ZCZX-GYSJSGL-UT-017 | 完成结算 | 不回写订单 | 单元测试 | JUnit5+Mockito | §6.6 | SS-PEND | `completeSettle` 成功 | 未调用订单 `update`;订单仍为已完成 | | ZCZX-GYSJSGL-UT-018 | 完成结算 | 条件更新防并发 | 单元测试 | JUnit5+Mockito | §6.5 | Mock `update` 返回 0 | `completeSettle` | 失败;提示已完成或操作无效 | | ZCZX-GYSJSGL-UT-019 | 列表查询 | 双模糊 AND | 单元测试 | JUnit5+Mockito | §5.1 | 多条样本 | `selectList(settlementNo, orderNo)` | SQL 同时 `LIKE` 两条件 | | ZCZX-GYSJSGL-UT-020 | 列表查询 | 仅 del_flag=0 | 单元测试 | JUnit5 | §5.1 | 无 | 检查 `BizSupplierSettlementMapper.xml` 列表 SQL | `del_flag='0'`;`create_time DESC` | | ZCZX-GYSJSGL-UT-021 | 详情 | 收费方式中文 | 单元测试 | JUnit5 | §3.5 | `fee_method=2` | 组装详情 | `feeMethodName=按头计费`(`SupplierRules`) | | ZCZX-GYSJSGL-UT-022 | 费用计算 | 与订单共用公式 | 单元测试 | JUnit5 | §3.5 | S1/S2/S3 | `SettlementFeeCalculator` | 与订单 UT-018~020 结果一致(HALF_UP 2 位) | **自动化已实现**:`SettlementFeeCalculatorTest`、`BizTradeOrderServiceImplTest`(含 `createFromOrder`)、`SettlementValidationTest`(UT-011~013)、`BizSupplierSettlementServiceImplTest`(UT-014~016、018、021)、`BizSupplierSettlementControllerApiTest`(API-001、007、010、011、013)。 --- ## 二、接口测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-GYSJSGL-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman | §5.2 | 有结算数据 | `GET /list` | `code=200`;≤20 条;`createTime` 倒序 | | ZCZX-GYSJSGL-API-002 | 列表 | 结算单编号模糊 | 接口测试 | Postman | §5.1 | 编号含 `JSD20260520` | `settlementNo=0520` | 命中对应行 | | ZCZX-GYSJSGL-API-003 | 列表 | 关联订单编号模糊 | 接口测试 | Postman | §5.1 | 订单号片段已知 | `orderNo=0520` | 命中 `order_no` 匹配行 | | ZCZX-GYSJSGL-API-004 | 列表 | 组合筛选 AND | 接口测试 | Postman | §5.1 | 同时传两条件 | `settlementNo`+`orderNo` | 同时满足才命中 | | ZCZX-GYSJSGL-API-005 | 列表 | 不含逻辑删除 | 接口测试 | Postman | §5.1 | 某结算 `del_flag=2` | `GET /list` | 无该 id | | ZCZX-GYSJSGL-API-006 | 列表 | 列字段完整 | 接口测试 | Postman | §5.2 | SS-PEND、SS-DONE 各一条 | `GET /list` | 行含编号、创建时间、订单号、供应商名、头数、金额、服务费、应付、状态、凭证、完成时间 | | ZCZX-GYSJSGL-API-007 | 详情 | 待结算全字段 | 接口测试 | Postman | §7 | SS-PEND | `GET /{id}` | 含收费快照、`feeMethodName`;`settleVoucher` 为空;**无** `lineList` | | ZCZX-GYSJSGL-API-008 | 详情 | 已完成含凭证 | 接口测试 | Postman | §7 | SS-DONE | `GET /{id}` | `settlementStatus=1`;`settleFinishTime` 有值;凭证 URL 可访问 | | ZCZX-GYSJSGL-API-009 | 详情 | 无效/已删 id | 接口测试 | Postman | 异常 | 已登录 | 不存在或已删 id | 失败或 `data` 空 | | ZCZX-GYSJSGL-API-010 | 完成结算 | 合法待结算 | 接口测试 | Postman | §6 | SS-PEND;先 `POST /common/upload` | `PUT /completeSettle` Body 示例 | `code=200`;`settlementStatus=1`;`settleFinishTime` 非空 | | ZCZX-GYSJSGL-API-011 | 完成结算 | 缺结算凭证 | 接口测试 | Postman | §3.7 | SS-PEND | 无 `settleVoucherUrl` | 失败;请上传结算凭证 | | ZCZX-GYSJSGL-API-012 | 完成结算 | 非法文件后缀 | 接口测试 | Postman | §3.7 | SS-PEND | `settleVoucherPath` 为 `.pdf` | 失败;格式不符合 | | ZCZX-GYSJSGL-API-013 | 完成结算 | 已完成拒绝 | 接口测试 | Postman | §6.5 | SS-DONE | `PUT /completeSettle` | 失败;已完成无需重复 | | ZCZX-GYSJSGL-API-014 | 完成结算 | 不存在 id | 接口测试 | Postman | 异常 | 已登录 | `id=999999` | 失败 | | ZCZX-GYSJSGL-API-015 | 完成结算 | 订单已删拒绝 | 接口测试 | Postman | §10.6 | 结算在但订单 `del_flag=2`(异常数据) | `completeSettle` | 失败 | | ZCZX-GYSJSGL-API-016 | 约束 | 无新增接口 | 接口测试 | Postman | §4、§8.1 | 已登录 | `POST /` | 404 或方法不允许 | | ZCZX-GYSJSGL-API-017 | 约束 | 无修改删除 | 接口测试 | Postman | §8.1 | 已登录 | `PUT /` 改金额;`DELETE /{id}` | 均不允许 | | ZCZX-GYSJSGL-API-018 | 联调 | 支付生成待结算 | 接口测试 | Postman | §4.1 | TO-PAY;凭证齐备 | 订单 `PUT /tradeOrder/completePay` | 结算列表出现新行 `settlementStatus=0`;`uk_order_id` 唯一 | | ZCZX-GYSJSGL-API-019 | 联调 | 一对一不重复 | 接口测试 | Postman | §4.1 | 已对 TO-DONE 完成支付 | 再次对该订单 `completePay` | 订单侧失败;结算仍 1 条 | | ZCZX-GYSJSGL-API-020 | 快照 | 改供应商费率不重算 | 接口测试 | Postman | §3.5、§10.4 | SS-PEND 按头生成后 | 改 S1 `fee_standard`→99;`GET /{id}` | `service_fee_amount` 仍为生成时原值 | | ZCZX-GYSJSGL-API-021 | 快照 | 按额费率字段 | 接口测试 | Postman | §3.5 | S2 支付生成结算 | `GET /{id}` | `transactionFeeRate`、`managementFeeRate` 与支付时 S2 一致 | | ZCZX-GYSJSGL-API-022 | 约束 | 完成结算不回写订单 | 接口测试 | Postman | §6.6 | SS-PEND | `completeSettle` 后 `GET /tradeOrder/{orderId}` | 订单仍 `orderStatus=1`;支付凭证未变 | | ZCZX-GYSJSGL-API-023 | 端到端 | 支付→结算→完成 | 接口测试 | Postman | §10.7 | TO-PAY 样本齐备 | `completePay`→`list`→`completeSettle` | 每步 `code=200`;最终 `settlementStatus=1` | | ZCZX-GYSJSGL-API-024 | 端到端 | 平台闭环终点 | 接口测试 | Postman | §14 决策 9 | 上一步已完成结算 | 查本模块列表 | 无后续必办接口;状态已完成 | | ZCZX-GYSJSGL-API-025 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET /list` | 401 或统一未登录 | | ZCZX-GYSJSGL-API-026 | 权限 | 无 list 权限 | 接口测试 | Postman | §11 | 无 `list` | `GET /list` | 无权限失败 | | ZCZX-GYSJSGL-API-027 | 权限 | 无 settle 权限 | 接口测试 | Postman | §11 | 仅 list/query | `PUT /completeSettle` | 无权限失败 | | ZCZX-GYSJSGL-API-028 | 权限 | 无 query 详情 | 接口测试 | Postman | §11 | 仅 list | `GET /{id}` | 无权限失败 | | ZCZX-GYSJSGL-API-029 | 响应 | 失败 msg 可读 | 接口测试 | Postman | §12 | 已登录 | 触发缺凭证、已完成重复 | `msg` 与需求 §12 示例可区分 | | ZCZX-GYSJSGL-API-030 | 约束 | 详情无订单跳转字段 | 接口测试 | Postman | §3.2、§14 决策 10 | SS-PEND | `GET /{id}` JSON | **无** `orderDetailUrl`/`tradeOrderRoute` 等跳转字段 | --- ## 三、界面测试用例(UI) **测试工具**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-GYSJSGL-UI-001 | 列表 | 默认列展示 | UI 测试 | Playwright+Chrome | §5.2 | 已登录;有数据 | 进入「供应商结算管理」 | 列含结算单编号、创建时间、订单编号、供应商、头数、金额、服务费、应付、状态、凭证、完成时间、操作 | | ZCZX-GYSJSGL-UI-002 | 列表 | 结算单编号筛选 | UI 测试 | Playwright+Chrome | §5.1 | 已知 `JSD` 片段 | 填编号→搜索 | 仅匹配行 | | ZCZX-GYSJSGL-UI-003 | 列表 | 关联订单编号筛选 | UI 测试 | Playwright+Chrome | §5.1 | 已知订单号片段 | 填订单号→搜索 | 仅匹配行 | | ZCZX-GYSJSGL-UI-004 | 列表 | 组合筛选 | UI 测试 | Playwright+Chrome | §5.1 | 两条件均有数据 | 同时填→搜索 | 同时满足才显示 | | ZCZX-GYSJSGL-UI-005 | 列表 | 重置 | UI 测试 | Playwright+Chrome | §5.1 | 已筛选 | 搜索→重置 | 条件清空;列表恢复 | | ZCZX-GYSJSGL-UI-006 | 列表 | 无新增按钮 | UI 测试 | Playwright+Chrome | §4、§8.1 | 有 list 权限 | 看工具栏 | **无**「新增」;仅搜索、重置 | | ZCZX-GYSJSGL-UI-007 | 列表 | 待结算操作按钮 | UI 测试 | Playwright+Chrome | §8.2 | SS-PEND 行 | 看操作列 | 含「完成结算」「查看」;**无**打印凭证 | | ZCZX-GYSJSGL-UI-008 | 列表 | 已完成操作按钮 | UI 测试 | Playwright+Chrome | §8.2 | SS-DONE 行 | 看操作列 | 含「打印凭证」「查看」;**无**完成结算 | | ZCZX-GYSJSGL-UI-009 | 列表 | 待结算凭证列空 | UI 测试 | Playwright+Chrome | §5.2 | SS-PEND | 看结算凭证列 | 为空或「—」 | | ZCZX-GYSJSGL-UI-010 | 查看 | 只读含收费快照 | UI 测试 | Playwright+Chrome | §7 | SS-PEND | 点击查看 | 全字段只读;展示收费方式及费率快照;无编辑入口 | | ZCZX-GYSJSGL-UI-011 | 查看 | 不跳转订单 | UI 测试 | Playwright+Chrome | §3.2、§7 | 任意行 | 打开详情 | **无**「查看订单」「跳转订单」链接;订单编号纯文本 | | ZCZX-GYSJSGL-UI-012 | 查看 | 已完成凭证预览 | UI 测试 | Playwright+Chrome | §7 | SS-DONE | 查看详情 | 结算凭证图可预览;完成时间有值 | | ZCZX-GYSJSGL-UI-013 | 完成结算 | 弹窗文案 | UI 测试 | Playwright+Chrome | §6.1 | SS-PEND | 点「完成结算」 | 标题为「完成结算支付」 | | ZCZX-GYSJSGL-UI-014 | 完成结算 | 上传凭证成功 | UI 测试 | Playwright+Chrome | §6.2 | SS-PEND;V-OK | 上传 jpg→确定 | 成功提示;列表状态「已完成」;完成时间有值 | | ZCZX-GYSJSGL-UI-015 | 完成结算 | 取消不变 | UI 测试 | Playwright+Chrome | §6.2 | SS-PEND | 完成结算→取消 | 仍为待结算 | | ZCZX-GYSJSGL-UI-016 | 完成结算 | 缺凭证拦截 | UI 测试 | Playwright+Chrome | §3.7 | SS-PEND | 不上传直接确定 | 提示请上传结算凭证 | | ZCZX-GYSJSGL-UI-017 | 完成结算 | 非法格式拦截 | UI 测试 | Playwright+Chrome | §3.7 | SS-PEND | 上传 V-BAD | 前端或提交失败 | | ZCZX-GYSJSGL-UI-018 | 完成结算 | 二次确认(若有) | UI 测试 | Playwright+Chrome | §13 建议 | 前端已实现确认框 | 确定前弹窗 | 展示结算单号、供应商、实际应付(宜) | | ZCZX-GYSJSGL-UI-019 | 完成结算 | 已完成不可再结 | UI 测试 | Playwright+Chrome | §6.5 | SS-DONE | 找「完成结算」按钮 | 无按钮或不可点 | | ZCZX-GYSJSGL-UI-020 | 打印 | 仅已完成可打 | UI 测试 | Playwright+Chrome | §8.3 | SS-DONE | 打印凭证 | 预览含编号、订单号、供应商、头数、金额、服务费、应付、状态、创建/完成时间、**结算凭证图** | | ZCZX-GYSJSGL-UI-021 | 打印 | 不含订单支付凭证 | UI 测试 | Playwright+Chrome | §8.3 | SS-DONE | 检查打印内容 | **无**订单支付凭证、无采购耳标明细 | | ZCZX-GYSJSGL-UI-022 | 打印 | 待结算不可打 | UI 测试 | Playwright+Chrome | §8.3 | SS-PEND | 找打印按钮 | 无「打印凭证」 | | ZCZX-GYSJSGL-UI-023 | 端到端 | 订单支付到结算完成 | UI 集成 | Playwright+Chrome | §10.7 | 权限齐备 | 订单模块完成支付→本模块完成结算 | 新待结算行出现→上传凭证→已完成;订单模块仍为已完成 | | ZCZX-GYSJSGL-UI-024 | 端到端 | 闭环无后续引导 | UI 测试 | Playwright+Chrome | §14 决策 9 | 上一步已完成 | 完成后停留本模块 | **无**强制跳转订单页;无「下一步」必办 | | ZCZX-GYSJSGL-UI-025 | 权限 | 只读角色 | UI 测试 | Playwright+Chrome | §11 | 仅 list/query | 进入模块 | 无「完成结算」;可查看 | | ZCZX-GYSJSGL-UI-026 | 权限 | 无 settle | UI 测试 | Playwright+Chrome | §11 | 无 settle | SS-PEND 行 | 无「完成结算」按钮 | | ZCZX-GYSJSGL-UI-027 | 约束 | 金额不可编辑 | UI 测试 | Playwright+Chrome | §8.1 | 查看/列表 | 尝试改服务费、应付 | 无输入框;不可改 | --- ## Playwright 与谷歌浏览器(实施提示) - 安装:`npm i -D @playwright/test`;`npx playwright install chrome`。 - 配置:`use: { channel: 'chrome', locale: 'zh-CN', baseURL: 'http://localhost:80' }`;`storageState` 复用登录态。 - 路由:`await page.goto('/tradeMarket/supplierSettlement')`。 - 筛选:`page.getByPlaceholder('结算单编号').fill('JSD')` → `getByRole('button', { name: '搜索' }).click()`。 - 完成结算:`getByRole('button', { name: '完成结算' }).first().click()` → `locator('input[type=file]').setInputFiles('test.jpg')` → 对话框 `getByRole('button', { name: '确定' }).click()` → 断言列表状态「已完成」。 - 无跳转:`await expect(page.getByRole('link', { name: '查看订单' })).toHaveCount(0)`。 - 打印:`page.waitForEvent('popup')` 或断言打印 DOM 含 `settlementNo`、`payableAmount`,不含 `payVoucher`。 --- ## 覆盖对照 | 类别 | 单元 UT | 接口 API | 界面 UI | | --- | --- | --- | --- | | 正常流程 | UT-005~009、014、021 | API-001~010、018、023~024 | UI-001~005、010、014、020、023~024 | | 异常流程 | UT-010~013、015~016、018 | API-011~015、029 | UI-015~017、019 | | 业务约束 | UT-010、017、019~020 | API-016~017、019~022、030 | UI-006、011、021~022、027 | | 来源与 1:1 | UT-008、010 | API-018~019 | UI-023 | | 费用快照 | UT-005~007、020、022 | API-020~021 | UI-010 | | 凭证双轨 | UT-011~013 | API-011~012 | UI-014、016~017、021 | | 状态与操作矩阵 | UT-009、015 | API-013 | UI-007~009、019、022 | | 不回写订单 | UT-017 | API-022 | — | | 不跳转订单 | — | API-030 | UI-011、024 | | 闭环终点 | — | API-024 | UI-024 | | 列表筛选 | UT-019~020 | API-002~005 | UI-002~005 | | 权限/鉴权 | — | API-025~028 | UI-025~026 | | 打印 §8.3 | — | — | UI-020~022 | | 无 CRUD | — | API-016~017 | UI-006、027 | --- ## 功能需求追溯(自查) | 需求章节 | 要点 | 主要对应用例 | | --- | --- | --- | | §2 状态 | 待结算/已完成;不可逆 | UT-009、015;API-010、013;UI-007~009、019 | | §3 字段 | 编号、快照、凭证、时间 | UT-001~008、011~013;API-006~008、020~021;UI-001、010、012 | | §4 来源 | 仅支付生成;不可手工建 | UT-010;API-016~019;UI-006、023 | | §5 列表 | 双模糊 AND;列 | API-001~006;UI-001~005 | | §6 完成结算 | 凭证、事务、不回写 | UT-014~018;API-010~015、022;UI-013~019 | | §7 查看 | 只读;无跳转 | API-007、030;UI-010~012 | | §8 功能清单 | 无增删改;打印边界 | API-016~017;UI-006、020~022、027 | | §10 关联订单 | 协同、异常 | API-015、018~019、023;UI-023 | | §11 权限 | 分权 | API-025~028;UI-025~026 | | §12 提示语 | 失败可读 | UT-011;API-029;UI-016 | | §14 决策 | 闭环、不跳转 | API-024、030;UI-011、024 | --- ## 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:单元 22、接口 30、UI 27;覆盖正常/异常/约束、单元+接口+UI;Playwright+Chrome;前缀 **ZCZX-GYSJSGL**;对齐需求 v1.1、技术方案 v1.0 | | 1.1 | 标注后端已实现用例的自动化类名 |