Commit 1a4c1b8b authored by liguangyu06's avatar liguangyu06
Browse files

从 temp 选择性同步框架与用例到 main

合入自动化代码、用例 CSV/MD/spec/PO 及登录态修复;不含 knowledge-base、.cursor、data/scan 等 temp 全量备份内容。
parent f6eec849
# 基础管理-准入管理-准入任务分配 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-准入管理-准入任务分配-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-准入管理-准入任务分配-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/dataSync/dataSync/accessKind/list`
**定位器 YAML**:`locators/spd/admit-task.locator.yaml`
**元素扫描**:`data/scan/admit-task-elements.json`(158 项)
**版本**:2026-09-22
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/admit-task.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 准入管理 → 准入任务分配」权限。
**页面约定**:整页渲染,**无报表 iframe**。分类 Tab 为「待分类」「已分类」,分页含「跳至」。
**菜单导航**:展开「基础设置 → 准入管理」后,点击 `.ant-menu-item` 文案精确为「准入任务分配」。
**写操作**:不确认分配类型、不确认批量分配,避免改生产分类。
**动态取数约定**:
1. 在待分类默认查询后,从首行读取 `${sampleProductName}`、`${sampleProductCode}`、`${sampleSpec}`。
2. **禁止写死**产品名称与产品编号。
3. 总条数不足两页时,翻页与跳至用例 skip。已分类计数为 0 时,已分类用例只断言空态。
---
## 基础设置 · 准入管理
### 准入任务分配 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-TSK-001】【TP_ADMIT_TSK_001】菜单进入准入任务分配页
- 前置条件:已登录且具备准入管理权限
- 操作步骤:
1. 按菜单「基础设置 → 准入管理 → 准入任务分配」进入
2. 断言 URL 含 `/spd/basic/dataSync/dataSync/accessKind/list`
3. 断言可见「查 询」、「待分类」「已分类」、「批量分配」及列表表头
- 自动化断言:规划与 CSV `ADMIT-TSK-001` 及 `tests/spd/admit-task.spec.ts` 一致
###### 预期结果
进入准入任务分配页;不误入供货目录申请。
---
### 准入任务分配 · 筛选与分类
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-TSK-002】【TP_ADMIT_TSK_009】默认查询列表有数据或空态明确
- 前置条件:已进入准入任务分配页,当前为待分类
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行,或「暂无数据」且分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-TSK-002` 一致
###### 预期结果
查询无报错;有数据时分页「共 N 条」N≥1;无数据时空态明确。
---
##### 【P0】【TC-UI-ADMIT-TSK-003】【TP_ADMIT_TSK_011】产品名称筛选
- 前置条件:待分类至少 1 条数据
- 操作步骤:
1. 从首行读取 `${sampleProductName}`
2. 填入产品名称,新增日期与操作日期保持默认,点击「查 询」
3. 断言结果行「产品名称」均包含该关键字
- 自动化断言:规划与 CSV `ADMIT-TSK-003` 一致
###### 预期结果
产品名称与已填关键字匹配。
---
##### 【P0】【TC-UI-ADMIT-TSK-004】【TP_ADMIT_TSK_015】待分类与已分类切换
- 前置条件:已进入准入任务分配页
- 操作步骤:
1. 记录「待分类」括号数量 `${pendingCount}`
2. 点击「已分类」,断言分页总数等于已分类括号数量;为 0 时为空态
3. 再点「待分类」,断言分页总数等于 `${pendingCount}`
- 自动化断言:规划与 CSV `ADMIT-TSK-004` 一致
###### 预期结果
两个 Tab 的列表范围与各自计数一致,不串数据。
---
##### 【P1】【TC-UI-ADMIT-TSK-005】【TP_ADMIT_TSK_014】重置恢复默认
- 前置条件:已填入 `${sampleProductName}`
- 操作步骤:
1. 点击「重 置」
2. 断言产品名称等筛选恢复默认
- 自动化断言:规划与 CSV `ADMIT-TSK-005` 一致
###### 预期结果
筛选恢复默认;列表按默认规则刷新。
---
#### 异常验证点
##### 【P1】【TC-UI-ADMIT-TSK-006】【TP_ADMIT_TSK_019】无匹配结果空态(mock反例)
- 前置条件:当前在待分类
- 操作步骤:
1. 产品名称填入 `__NOT_EXIST_GOODS__99999`
2. 点击「查 询」
3. 断言空态且分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-TSK-006` 一致
###### 预期结果
无匹配时不报错;总数为 0。
---
### 准入任务分配 · 列表分页
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-TSK-007】【TP_ADMIT_TSK_021】列表核心列完整
- 前置条件:待分类至少 1 条数据
- 操作步骤:
1. 断言表头含准入类型、产品编号、产品名称、规格型号、规格、型号、器械注册人、操作
2. 断言待分类行操作含「分配类型」
- 自动化断言:规划与 CSV `ADMIT-TSK-007` 一致
###### 预期结果
核心列可见;待分类行可发起分配类型。
---
##### 【P1】【TC-UI-ADMIT-TSK-008】【TP_ADMIT_TSK_022】翻至第 2 页
- 前置条件:待分类总数大于每页条数
- 操作步骤:
1. 记录第 1 页首行产品名称或产品编号
2. 点击页码「2」或「下一页」
3. 断言页码为 2,首行与第 1 页不同
- 自动化断言:规划与 CSV `ADMIT-TSK-008` 一致
###### 预期结果
翻页成功且数据更换。不足两页则 skip。
---
##### 【P1】【TC-UI-ADMIT-TSK-009】【TP_ADMIT_TSK_036】跳至指定页
- 前置条件:总页数不少于 2,且存在「跳至」
- 操作步骤:
1. 跳至输入 `2` 并回车
2. 断言当前页为 2
- 自动化断言:规划与 CSV `ADMIT-TSK-009` 一致
###### 预期结果
跳转到第 2 页。无跳至或仅 1 页则 skip。
---
#### 边界验证点
##### 【P1】【TC-UI-ADMIT-TSK-010】【TP_ADMIT_TSK_023】第 1 页上一页不可用
- 前置条件:当前在第 1 页
- 操作步骤:
1. 断言「上一页」禁用,或点击后仍停留在第 1 页
- 自动化断言:规划与 CSV `ADMIT-TSK-010` 一致
###### 预期结果
第 1 页不能再向前翻。
---
### 准入任务分配 · 分配操作
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-TSK-011】【TP_ADMIT_TSK_027】单行分配类型取消
- 前置条件:待分类至少 1 行含「分配类型」
- 操作步骤:
1. 记录该行产品名称,以及待分类计数 `${pendingCount}`
2. 点击「分配类型」
3. 断言分配层打开
4. 取消或关闭,不确认
5. 断言该行仍在待分类,计数仍为 `${pendingCount}`
- 自动化断言:规划与 CSV `ADMIT-TSK-011` 一致
###### 预期结果
取消分配不改变分类。本条不点击确定。
---
##### 【P1】【TC-UI-ADMIT-TSK-012】【TP_ADMIT_TSK_024】未勾选时批量分配不可用
- 前置条件:待分类页无勾选行
- 操作步骤:
1. 点击「批量分配」
2. 断言按钮不可用,或提示先选择数据
3. 断言待分类计数不变
- 自动化断言:规划与 CSV `ADMIT-TSK-012` 一致
###### 预期结果
未勾选不分配任何行。
---
##### 【P0】【TC-UI-ADMIT-TSK-013】【TP_ADMIT_TSK_028】勾选后批量分配取消
- 前置条件:待分类至少 1 条
- 操作步骤:
1. 勾选 1 行,记录待分类计数
2. 点击「批量分配」
3. 若打开分配层或确认框,点取消或关闭
4. 断言该行仍在待分类,计数不变
- 自动化断言:规划与 CSV `ADMIT-TSK-013` 一致
###### 预期结果
取消批量分配不改变分类。本条不确认分配。
---
#### 异常验证点
##### 【P1】【TC-UI-ADMIT-TSK-014】【TP_ADMIT_TSK_032】已分类行不再按待分类分配
- 前置条件:已分类计数大于 0
- 操作步骤:
1. 切换到「已分类」
2. 断言首行无「分配类型」,或点击后被拒绝且该行仍留在已分类
3. 断言待分类计数不因此增加
- 自动化断言:规划与 CSV `ADMIT-TSK-014` 一致
###### 预期结果
已分类数据不会被这次操作退回待分类。已分类为 0 则 skip。
---
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **14** 条(P0=7 / P1=7) |
| 来源 | 从 36 条测试点选取查询、分类 Tab、翻页跳至、分配取消 |
| 未纳入自动化 | 未登录/权限、确认分配后的分类回写、未选分类时的提交拦截(依赖分配弹窗字段,扫描未打开该层) |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-准入管理-物料准入单列表 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-准入管理-物料准入单列表-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-准入管理-物料准入单列表-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/dataSync/dataSync/productOrder/zrlist`
**定位器 YAML**:`locators/spd/admit-material-list.locator.yaml`
**元素扫描**:`data/scan/admit-material-list-elements.json`(79 项)
**版本**:2026-09-22
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/admit-material-list.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 准入管理 → 物料准入单列表」权限。
**页面约定**:整页渲染,**无报表 iframe**。本页是单据查询,列表行操作是「详情」。
**菜单导航**:展开「基础设置 → 准入管理」后,点击 `.ant-menu-item` 文案精确为「物料准入单列表」。
**写操作**:不点击详情里的「通过」确定,避免推进真实审批。
**动态取数约定**:
1. 默认查询后从首行读取 `${sampleOrderNo}`、`${sampleAccessType}`、`${sampleProductCount}`、`${sampleStatus}`。
2. 单号筛选使用样本占位,**禁止写死**准入单号。
3. 状态 Tab:全部、审批中、已通过、已驳回。
---
## 基础设置 · 准入管理
### 物料准入单列表 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-MLS-001】【TP_ADMIT_MLS_001】菜单进入物料准入单列表
- 前置条件:已登录且具备准入管理权限
- 操作步骤:
1. 按菜单「基础设置 → 准入管理 → 物料准入单列表」进入
2. 断言 URL 含 `/spd/basic/dataSync/dataSync/productOrder/zrlist`,且不是 `productOrder/list`
3. 断言制单日期、查询、状态 Tab、列表表头可见
- 自动化断言:规划与 CSV `ADMIT-MLS-001` 及 `tests/spd/admit-material-list.spec.ts` 一致
###### 预期结果
进入物料准入单列表;不误入产品准入单列表。
---
### 物料准入单列表 · 筛选与状态
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-MLS-002】【TP_ADMIT_MLS_009】默认查询列表有数据或空态明确
- 前置条件:已进入物料准入单列表
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行,或「暂无数据」且分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-MLS-002` 一致
###### 预期结果
查询无报错;有数据时分页「共 N 条」N≥1;无数据时空态明确。
---
##### 【P0】【TC-UI-ADMIT-MLS-003】【TP_ADMIT_MLS_010】按准入单号筛选
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 从首行读取 `${sampleOrderNo}`
2. 若页面有准入单号条件则填入;否则用注册证号或产品名称中首行非空字段
3. 制单日期保持默认,点击「查 询」
4. 断言结果行包含该单号或该关键字
- 自动化断言:规划与 CSV `ADMIT-MLS-003` 一致
###### 预期结果
结果与已填单号或关键字匹配。列表筛选区没有单号框时,改用首行注册证号,并在用例备注中记录实际字段。
---
##### 【P1】【TC-UI-ADMIT-MLS-004】【TP_ADMIT_MLS_011】重置恢复默认
- 前置条件:已进入物料准入单列表
- 操作步骤:
1. 填入上一条使用的关键字
2. 点击「重 置」
3. 断言筛选恢复默认
- 自动化断言:规划与 CSV `ADMIT-MLS-004` 一致
###### 预期结果
筛选恢复默认;列表按默认规则刷新。
---
#### 异常验证点
##### 【P1】【TC-UI-ADMIT-MLS-005】【TP_ADMIT_MLS_018】无匹配结果空态(mock反例)
- 前置条件:已进入物料准入单列表
- 操作步骤:
1. 注册证号填入 `__NOT_EXIST_CERT__99999`
2. 点击「查 询」
3. 断言空态且分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-MLS-005` 一致
###### 预期结果
无匹配时不报错;总数为 0。
---
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-MLS-006】【TP_ADMIT_MLS_013】列表核心列完整
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 断言表头含准入类型、准入单号、进院供应商、二级供应商、产品名称、注册证号、耗材类型、产品条数、状态、操作
- 自动化断言:规划与 CSV `ADMIT-MLS-006` 一致
###### 预期结果
核心列可见;操作列为「详情」。
---
##### 【P0】【TC-UI-ADMIT-MLS-007】【TP_ADMIT_MLS_012】切换已通过 Tab
- 前置条件:已进入物料准入单列表
- 操作步骤:
1. 点击「已通过」
2. 断言有数据时「状态」列为已通过;计数为 0 时为空态
3. 读取 Tab 括号数量,断言与分页「共 N 条」一致
- 自动化断言:规划与 CSV `ADMIT-MLS-007` 一致
###### 预期结果
已通过 Tab 的状态列、计数与分页总数一致。
---
### 物料准入单列表 · 单据详情
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-MLS-008】【TP_ADMIT_MLS_020】打开详情后返回
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 记录首行 `${sampleOrderNo}`、`${sampleProductCount}`
2. 点击「详情」
3. 断言可见「审批进程」「单据日志」「返 回」
4. 点击「返 回」
5. 断言 URL 仍含 `productOrder/zrlist`
- 自动化断言:规划与 CSV `ADMIT-MLS-008` 一致
###### 预期结果
进入单据详情并可返回列表。
---
##### 【P0】【TC-UI-ADMIT-MLS-009】【TP_ADMIT_MLS_021】详情产品条数与列表一致
- 前置条件:已打开首行详情,且 `${sampleProductCount}` 为正整数
- 操作步骤:
1. 统计详情明细数据行数(跨页则读详情分页总数)
2. 断言等于列表「产品条数」`${sampleProductCount}`
- 自动化断言:规划与 CSV `ADMIT-MLS-009` 一致
###### 预期结果
详情明细条数与列表产品条数一致。
---
##### 【P1】【TC-UI-ADMIT-MLS-010】【TP_ADMIT_MLS_023】审批进程可打开
- 前置条件:已打开单据详情
- 操作步骤:
1. 点击「审批进程」
2. 断言进程层或区域可见
3. 关闭后仍停留在该单据
- 自动化断言:规划与 CSV `ADMIT-MLS-010` 一致
###### 预期结果
审批进程可查看;单据不被关掉。
---
##### 【P1】【TC-UI-ADMIT-MLS-011】【TP_ADMIT_MLS_026】详情导出不白屏
- 前置条件:已打开单据详情
- 操作步骤:
1. 点击「导 出」
2. 断言出现下载,或出现导出任务/成功提示
3. 断言页面仍为该单据详情,不白屏
- 自动化断言:规划与 CSV `ADMIT-MLS-011` 一致
###### 预期结果
导出有反馈;详情页仍在。无导出按钮则 skip。
---
#### 异常验证点
##### 【P1】【TC-UI-ADMIT-MLS-012】【TP_ADMIT_MLS_028】详情搜索无匹配(mock反例)
- 前置条件:已打开单据详情
- 操作步骤:
1. 在「请输入产品编码、名称」填入 `__NOT_EXIST_GOODS__99999`
2. 触发搜索
3. 断言明细空态,单据头(审批进程、返回)仍在
- 自动化断言:规划与 CSV `ADMIT-MLS-012` 一致
###### 预期结果
无匹配时只清空明细,不销毁单据头。
---
##### 【P0】【TC-UI-ADMIT-MLS-013】【TP_ADMIT_MLS_030】已通过单据不确认通过
- 前置条件:已通过 Tab 至少 1 条,并打开其详情
- 操作步骤:
1. 若「通过」不可见或禁用,断言该状态保持已通过后返回
2. 若「通过」可点,点击后出现确认框则点「取 消」
3. 返回列表,断言该单状态仍为已通过
- 自动化断言:规划与 CSV `ADMIT-MLS-013` 一致
###### 预期结果
本条不把已通过单据再次审批成功。已通过 Tab 无数据则 skip。
---
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **13** 条(P0=7 / P1=6) |
| 来源 | 从 34 条测试点选取可稳定自动化的查询、详情与审批门禁 |
| 未纳入自动化 | 未登录/权限、确认点击「通过」、与物料准入管理的跨页追溯、导出文件内容逐行比对 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-准入管理-物料准入管理 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-准入管理-物料准入管理-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-准入管理-物料准入管理-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/dataSync/dataSync/productApply/ZRlist`
**定位器 YAML**:`locators/spd/admit-material.locator.yaml`
**元素扫描**:`data/scan/admit-material-elements.json`(328 项)
**版本**:2026-09-22
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/admit-material.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号(凭据见 `.env`);具备「基础设置 → 准入管理 → 物料准入管理」权限。
**页面约定**:整页渲染,**无报表 iframe**;定位均在 `page` 上。
**菜单导航**:先点「基础设置」,展开左侧「准入管理」,再点击 `.ant-menu-item` 且文案精确为「物料准入管理」(现网子项不是 `menuitem` role)。
**写操作**:本文件不真实执行「生成申请单」「一键生成」「确认作废」「确认关联」,避免改生产准入数据。编辑类只做回填、取消和必填拦截。
**动态取数约定**:
1. 默认「查询」后从首行读取 `${sampleProductName}`、`${sampleSpec}`、`${sampleConsumableType}`、`${sampleSupplier}`。
2. 筛选关键字使用样本占位,**禁止写死**产品名称、供应商、注册证号。
3. 状态 Tab:全部、待申请、审批中、已通过、已驳回、已作废、生效失败、已生效。无「编辑」的行则编辑类用例 skip。
---
## 基础设置 · 准入管理
### 物料准入管理 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-MAT-001】【TP_ADMIT_MAT_001】菜单进入物料准入管理页
- 前置条件:已登录且具备准入管理权限
- 操作步骤:
1. 按菜单「基础设置 → 准入管理 → 物料准入管理」进入
2. 断言 URL 含 `/spd/basic/dataSync/dataSync/productApply/ZRlist`
3. 断言筛选区、「查 询」、状态 Tab、「关联产品」「生成申请单」「一键生成」「作 废」及列表表头可见
4. 断言当前高亮不是「产品准入申请」或「物料准入单列表」
- 自动化断言:规划与 CSV `ADMIT-MAT-001` 及 `tests/spd/admit-material.spec.ts` 一致
###### 预期结果
进入物料准入管理页;不误入同组其它准入页;筛选、状态 Tab 与工具栏可见。
---
### 物料准入管理 · 筛选查询
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-MAT-002】【TP_ADMIT_MAT_009】默认查询列表有数据或空态明确
- 前置条件:已进入物料准入管理页
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行,或「暂无数据」且分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-MAT-002` 一致
###### 预期结果
查询无报错;有数据时分页「共 N 条」N≥1;无数据时空态明确。
---
##### 【P0】【TC-UI-ADMIT-MAT-003】【TP_ADMIT_MAT_013】产品名称筛选
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 从首行读取 `${sampleProductName}`
2. 填入「产品名称」,新增日期保持页面默认,点击「查 询」
3. 断言结果行「产品名称」均包含该关键字
- 自动化断言:规划与 CSV `ADMIT-MAT-003` 一致
###### 预期结果
查询结果产品名称与已填关键字匹配;无未捕获异常。
---
##### 【P0】【TC-UI-ADMIT-MAT-004】【TP_ADMIT_MAT_012】耗材类型筛选
- 前置条件:默认查询至少 1 条且首行耗材类型非空
- 操作步骤:
1. 从首行读取 `${sampleConsumableType}`
2. 在耗材类型下拉选择该值,点击「查 询」
3. 断言结果行「耗材类型」与所选值一致
- 自动化断言:规划与 CSV `ADMIT-MAT-004` 一致
###### 预期结果
耗材类型列与所选条件一致。首行类型为空则 skip。
---
##### 【P0】【TC-UI-ADMIT-MAT-005】【TP_ADMIT_MAT_014】名称与耗材类型组合查询
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 读取首行 `${sampleProductName}`、`${sampleConsumableType}`
2. 同时填入名称与耗材类型(新增日期保持默认,勿改成单日)
3. 点击「查 询」
4. 断言结果同时满足两个条件
- 自动化断言:规划与 CSV `ADMIT-MAT-005` 一致
###### 预期结果
组合查询无报错;结果同时满足产品名称与耗材类型。
---
##### 【P1】【TC-UI-ADMIT-MAT-006】【TP_ADMIT_MAT_015】重置恢复默认
- 前置条件:已进入物料准入管理页
- 操作步骤:
1. 填入 `${sampleProductName}`
2. 点击「重 置」
3. 断言产品名称等筛选恢复默认
- 自动化断言:规划与 CSV `ADMIT-MAT-006` 一致
###### 预期结果
筛选字段恢复默认;列表按默认规则刷新。
---
##### 【P1】【TC-UI-ADMIT-MAT-007】【TP_ADMIT_MAT_016】收起后再展开保留条件
- 前置条件:已进入物料准入管理页
- 操作步骤:
1. 填入 `${sampleProductName}`
2. 点击「收起」,再展开筛选区
3. 断言产品名称仍为已填值
- 自动化断言:规划与 CSV `ADMIT-MAT-007` 一致
###### 预期结果
收起不丢失已填条件;展开后值仍在。
---
#### 异常验证点
##### 【P1】【TC-UI-ADMIT-MAT-008】【TP_ADMIT_MAT_021】无匹配结果空态(mock反例)
- 前置条件:已进入物料准入管理页
- 操作步骤:
1. 产品名称填入 mock 值 `__NOT_EXIST_GOODS__99999`
2. 点击「查 询」
3. 断言空态或「暂无数据」,分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-MAT-008` 一致
###### 预期结果
无匹配时不报错;空态明确;总数为 0。
---
### 物料准入管理 · 状态与列表
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-MAT-009】【TP_ADMIT_MAT_028】列表核心列完整
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 点击「查 询」
2. 断言表头含准入类型、产品编号、产品名称、规格型号、器械注册人、单位、耗材类型、默认进院供应商、操作
- 自动化断言:规划与 CSV `ADMIT-MAT-009` 一致
###### 预期结果
核心列可见;操作列含「详情」「日志」,待申请行另可见「编辑」。
---
##### 【P0】【TC-UI-ADMIT-MAT-010】【TP_ADMIT_MAT_023】切换待申请 Tab
- 前置条件:已进入物料准入管理页
- 操作步骤:
1. 点击状态 Tab「待申请」
2. 断言列表刷新;若有数据,行状态属于待申请(不出现已生效、已作废)
3. 再点「全部」,断言列表不再只限定待申请
- 自动化断言:规划与 CSV `ADMIT-MAT-010` 一致
###### 预期结果
待申请 Tab 只展示待申请数据;「全部」不额外收窄。计数为 0 时为空态且不报错。
---
##### 【P1】【TC-UI-ADMIT-MAT-011】【TP_ADMIT_MAT_024】待申请 Tab 计数与分页总数一致
- 前置条件:已进入物料准入管理页
- 操作步骤:
1. 读取「待申请」括号内数量 `${tabCount}`
2. 点击该 Tab 并查询稳定
3. 断言分页「共 N 条」的 N 等于 `${tabCount}`
- 自动化断言:规划与 CSV `ADMIT-MAT-011` 一致
###### 预期结果
Tab 计数与该状态下分页总数一致。
---
#### 异常验证点
##### 【P1】【TC-UI-ADMIT-MAT-012】【TP_ADMIT_MAT_033】未勾选时生成申请单不可用或提示
- 前置条件:已进入物料准入管理页,且当前无勾选行
- 操作步骤:
1. 确认表头复选框与行复选框均未选中
2. 点击「生成申请单」
3. 断言按钮不可用,或出现「请选择」类提示,且列表不新增申请单
- 自动化断言:规划与 CSV `ADMIT-MAT-012` 一致
###### 预期结果
未勾选不产生申请单。
---
### 物料准入管理 · 详情与编辑
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-MAT-013】【TP_ADMIT_MAT_046】打开详情后返回
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 记录首行 `${sampleProductName}`
2. 点击该行「详情」
3. 断言详情中产品名称、规格型号、注册证号可见,且名称包含 `${sampleProductName}`
4. 点击「返回」
5. 断言回到列表,URL 仍含 `productApply/ZRlist`
- 自动化断言:规划与 CSV `ADMIT-MAT-013` 一致
###### 预期结果
详情展示该行产品主数据;返回后仍在物料准入管理列表。
---
##### 【P1】【TC-UI-ADMIT-MAT-014】【TP_ADMIT_MAT_051】详情关键字段不可直接改写
- 前置条件:已打开首行详情
- 操作步骤:
1. 断言产品名称等主数据无可用的保存按钮,或输入框为只读
2. 返回列表,断言首行名称仍为 `${sampleProductName}`
- 自动化断言:规划与 CSV `ADMIT-MAT-014` 一致
###### 预期结果
详情态不能把产品名称改写入库。
---
##### 【P0】【TC-UI-ADMIT-MAT-015】【TP_ADMIT_MAT_047】待申请行编辑回填
- 前置条件:待申请 Tab 至少 1 行含「编辑」
- 操作步骤:
1. 在待申请列表读取首行 `${sampleProductName}`、`${sampleSpec}`
2. 点击「编辑」
3. 断言产品名称、规格型号与该行一致
4. 返回且不保存
- 自动化断言:规划与 CSV `ADMIT-MAT-015` 一致
###### 预期结果
编辑页回填与列表行一致。无「编辑」则 skip。
---
##### 【P1】【TC-UI-ADMIT-MAT-016】【TP_ADMIT_MAT_049】编辑取消不保存
- 前置条件:存在可编辑行
- 操作步骤:
1. 打开编辑,记录原产品名称
2. 将产品名称改为 `${uniqProductName}`(建议 `AUTO-MAT-${timestamp}`)后返回或取消,不保存
3. 再次打开编辑,断言名称仍为原值
- 自动化断言:规划与 CSV `ADMIT-MAT-016` 一致
###### 预期结果
取消后列表与回看均为修改前名称。
---
#### 异常验证点
##### 【P0】【TC-UI-ADMIT-MAT-017】【TP_ADMIT_MAT_052】编辑清空产品名称拦截(mock反例)
- 前置条件:存在可编辑行
- 操作步骤:
1. 打开编辑,将产品名称清空为 mock 空值
2. 点击保存
3. 断言必填提示,页面不关闭
4. 取消后再次打开,断言名称仍为原值
- 自动化断言:规划与 CSV `ADMIT-MAT-017` 一致
###### 预期结果
保存被拦截;原记录不被写成空。
---
##### 【P1】【TC-UI-ADMIT-MAT-018】【TP_ADMIT_MAT_053】已生效行不提供编辑
- 前置条件:已生效 Tab 计数大于 0
- 操作步骤:
1. 切换到「已生效」
2. 断言首行操作无「编辑」,或点击后保存被拒绝
- 自动化断言:规划与 CSV `ADMIT-MAT-018` 一致
###### 预期结果
已生效行不能改写成新的产品名称。计数为 0 则 skip。
---
### 物料准入管理 · 关联与作废
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-MAT-019】【TP_ADMIT_MAT_035】关联产品取消不落库
- 前置条件:已进入物料准入管理页
- 操作步骤:
1. 记录当前分页总数 `${sampleTotal}` 与首行默认进院供应商
2. 点击「关联产品」
3. 断言关联层打开
4. 取消或关闭,不确认
5. 断言总数不变,首行供应商不变
- 自动化断言:规划与 CSV `ADMIT-MAT-019` 一致
###### 预期结果
取消关联不产生申请单,也不改默认进院供应商。
---
##### 【P0】【TC-UI-ADMIT-MAT-020】【TP_ADMIT_MAT_040】作废确认后取消
- 前置条件:待申请至少 1 条可勾选
- 操作步骤:
1. 勾选 1 行,记录其产品名称与当前状态
2. 点击「作 废」
3. 断言出现确认框,含取消与确定
4. 点击「取 消」
5. 断言该行仍在,状态未变为已作废
- 自动化断言:规划与 CSV `ADMIT-MAT-020` 一致
###### 预期结果
作废需确认;取消后记录仍在。本条不点击确定,避免作废生产数据。
---
##### 【P1】【TC-UI-ADMIT-MAT-021】【TP_ADMIT_MAT_050】打开操作日志后关闭
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 点击首行「日志」
2. 断言出现操作日志层
3. 关闭后断言仍在列表页
- 自动化断言:规划与 CSV `ADMIT-MAT-021` 一致
###### 预期结果
日志层可打开可关闭;列表数据不变。
---
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **21** 条(P0=12 / P1=9) |
| 来源 | 从 54 条测试点选取可稳定自动化的主路径与关键反向 |
| 未纳入自动化 | 未登录/权限/会话过期、查询接口失败注入、一键生成与确认生成申请单、确认作废、确认关联落库、跨列表追溯 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-医院资料-公告管理 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-医院资料-公告管理-测试点分析-01.md`
**执行 CSV**:待生成 `testcase/基础管理-医院资料-公告管理-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/hospital/paltform/notice`
**定位器 YAML**:`locators/spd/basic-notice.locator.yaml`
**元素扫描**:`data/scan/basic-notice-elements.json`(82 项)
**版本**:2026-09-16
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/basic-notice.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号(凭据见 `.env`);具备「基础设置 → 医院资料 → 公告管理」权限。
**页面约定**:整页渲染,**无报表 iframe**;定位均在 `page` 上。
**菜单导航**:先展开「基础设置 → 医院资料」,再 `page.getByRole('menuitem', { name: '公告管理', exact: true })`。
**写操作用例**:标题使用 `${uniqNoticeTitle}`(建议 `AUTO-NTC-${timestamp}`),用例结束后删除或恢复,禁止写死生产公告标题。
**动态取数约定**:
1. 打开页面后默认「查询」,从首行读取 `${sampleNoticeTitle}`、`${samplePublishScope}`、`${samplePublishDate}`。
2. 筛选条件使用样本占位,**禁止写死**业务标题/日期。
3. 发布范围现网选项:全部 / 全院 / 中心库 / 进院供应商。
---
## 基础设置 · 医院资料
### 公告管理 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-BASIC-NTC-001】【TP_BASIC_NTC_001】菜单进入公告管理页
- 前置条件:已登录且具备医院资料权限
- 操作步骤:
1. 按菜单「基础设置 → 医院资料 → 公告管理」进入
2. 断言 URL 含 `/spd/basic/hospital/paltform/notice`
3. 断言筛选区、新增按钮、列表表头可见
- 自动化断言:规划与 CSV `BASIC-NTC-001` 及 `tests/spd/basic-notice.spec.ts` 一致
###### 预期结果
进入公告管理页;不误入医院信息登记/院区管理/财务月份设置;筛选区与列表可见。
---
### 公告管理 · 筛选查询
#### 功能验证点
##### 【P0】【TC-UI-BASIC-NTC-002】【TP_BASIC_NTC_009】默认查询列表有数据或空态明确
- 前置条件:已进入公告管理页
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行,或「暂无数据」且分页总数为 0
- 自动化断言:规划与 CSV `BASIC-NTC-002` 一致
###### 预期结果
查询无报错;有数据时分页「共 N 条」N≥1;无数据时空态明确。
---
##### 【P0】【TC-UI-BASIC-NTC-003】【TP_BASIC_NTC_010】公告标题模糊查询
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 从首行读取 `${sampleNoticeTitle}`
2. 填入筛选「公告标题」,点击「查 询」
3. 断言结果行「公告标题」均包含该关键字(或与产品模糊规则一致)
- 自动化断言:规划与 CSV `BASIC-NTC-003` 一致
###### 预期结果
查询结果标题与已填关键字匹配;无未捕获异常。
---
##### 【P0】【TC-UI-BASIC-NTC-004】【TP_BASIC_NTC_012】发布范围下拉查询
- 前置条件:已进入公告管理页
- 操作步骤:
1. 打开发布范围下拉,选择与首行 `${samplePublishScope}` 相同的选项(勿写死)
2. 点击「查 询」
3. 断言结果行「发布范围」列与所选值一致(选「全部」时不额外收窄)
- 自动化断言:规划与 CSV `BASIC-NTC-004` 一致
###### 预期结果
下拉选项含全部/全院/中心库/进院供应商;查询结果范围列与条件一致。
---
##### 【P0】【TC-UI-BASIC-NTC-005】【TP_BASIC_NTC_013】标题与范围组合查询
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 读取首行 `${sampleNoticeTitle}`、`${samplePublishScope}`
2. 填入标题与范围(发布日期保持页面默认,勿 fallback 单日)
3. 点击「查 询」
4. 断言结果同时满足两个已填条件
- 自动化断言:规划与 CSV `BASIC-NTC-005` 一致
###### 预期结果
组合查询无报错;结果同时满足标题与发布范围。
---
##### 【P1】【TC-UI-BASIC-NTC-006】【TP_BASIC_NTC_014】快捷区重置恢复默认
- 前置条件:已进入公告管理页
- 操作步骤:
1. 填入 `${sampleNoticeTitle}` 等筛选条件
2. 点击「重 置」
3. 断言标题/范围/日期恢复默认
- 自动化断言:规划与 CSV `BASIC-NTC-006` 一致
###### 预期结果
筛选字段恢复默认;列表按默认规则刷新。
---
#### 异常验证点
##### 【P1】【TC-UI-BASIC-NTC-007】【TP_BASIC_NTC_020】无匹配结果空态
- 前置条件:已进入公告管理页
- 操作步骤:
1. 公告标题填入 `__NOT_EXIST_NOTICE__99999`
2. 点击「查 询」
3. 断言空态或暂无数据,分页总数为 0
- 自动化断言:规划与 CSV `BASIC-NTC-007` 一致
###### 预期结果
无匹配时不报错;空态明确;总数为 0。
---
### 公告管理 · 列表分页
#### 功能验证点
##### 【P0】【TC-UI-BASIC-NTC-008】【TP_BASIC_NTC_022】查询后核心列展示
- 前置条件:已进入公告管理页
- 操作步骤:
1. 点击「查 询」
2. 断言表头含公告编号、公告标题、发布范围、发布科室、发布人、操作
- 自动化断言:规划与 CSV `BASIC-NTC-008` 一致
###### 预期结果
核心列完整;操作列可见「编辑」「删除」。
---
##### 【P1】【TC-UI-BASIC-NTC-009】【TP_BASIC_NTC_025】分页翻至第 2 页
- 前置条件:默认查询总条数大于一页
- 操作步骤:
1. 记录第 1 页首行公告编号
2. 点击页码「2」或「下一页」
3. 断言页码高亮为 2,首行编号与第 1 页不同
- 自动化断言:规划与 CSV `BASIC-NTC-009` 一致;总条数不足一页则 skip
###### 预期结果
翻页成功;数据更换;筛选条件保持。
---
##### 【P1】【TC-UI-BASIC-NTC-010】【TP_BASIC_NTC_027】跳至指定页
- 前置条件:总页数≥2
- 操作步骤:
1. 在分页「跳至」输入 `2` 并回车
2. 断言当前页为 2
- 自动化断言:规划与 CSV `BASIC-NTC-010` 一致;无 jumper 或仅 1 页则 skip
###### 预期结果
跳转至指定页;列表刷新为该页数据。
---
### 公告管理 · 新增公告
#### 功能验证点
##### 【P0】【TC-UI-BASIC-NTC-011】【TP_BASIC_NTC_033】打开新增公告弹窗
- 前置条件:已进入公告管理页
- 操作步骤:
1. 点击「新 增」
2. 断言弹窗标题为「新增公告」
3. 断言可见标题、发布范围、置顶、截止日期、富文本、取消、发布
- 自动化断言:规划与 CSV `BASIC-NTC-011` 一致
###### 预期结果
新增弹窗可见;必填/选填控件齐全;富文本容器 `.ql-editor` 可见。
---
##### 【P1】【TC-UI-BASIC-NTC-012】【TP_BASIC_NTC_039】新增取消不落库
- 前置条件:已进入公告管理页
- 操作步骤:
1. 打开新增,标题填 `${uniqNoticeTitle}`,内容填简短正文
2. 点击「取 消」
3. 按标题查询,断言无该记录
- 自动化断言:规划与 CSV `BASIC-NTC-012` 一致
###### 预期结果
弹窗关闭;列表不出现 `${uniqNoticeTitle}`。
---
##### 【P0】【TC-UI-BASIC-NTC-013】【TP_BASIC_NTC_034】合法必填发布成功
- 前置条件:已进入公告管理页;允许自动化写公告
- 操作步骤:
1. 打开新增,标题 `${uniqNoticeTitle}`,发布范围选「中心库」,内容写入 `.ql-editor`
2. 点击「发 布」
3. 按标题查询,断言出现该行且发布范围为中心库
4. 后置:删除该测试公告
- 自动化断言:规划与 CSV `BASIC-NTC-013` 一致;环境禁止写则 skip
###### 预期结果
弹窗关闭;列表出现新记录;字段与提交一致。
---
#### 异常验证点
##### 【P0】【TC-UI-BASIC-NTC-014】【TP_BASIC_NTC_043】标题为空发布拦截
- 前置条件:已进入公告管理页
- 操作步骤:
1. 打开新增,标题留空,填写内容后点「发 布」
2. 断言必填提示出现,弹窗仍打开
- 自动化断言:规划与 CSV `BASIC-NTC-014` 一致
###### 预期结果
发布被拦截;不落库;弹窗不关闭。
---
##### 【P0】【TC-UI-BASIC-NTC-015】【TP_BASIC_NTC_044】内容为空发布拦截
- 前置条件:已进入公告管理页
- 操作步骤:
1. 打开新增,填写标题,富文本留空,点「发 布」
2. 断言内容必填提示,弹窗仍打开
- 自动化断言:规划与 CSV `BASIC-NTC-015` 一致
###### 预期结果
发布被拦截;不落库。
---
### 公告管理 · 编辑与删除
#### 功能验证点
##### 【P0】【TC-UI-BASIC-NTC-016】【TP_BASIC_NTC_050】打开编辑公告并回填
- 前置条件:列表至少 1 条数据
- 操作步骤:
1. 点击首行「编辑」
2. 断言弹窗标题为「编辑公告」
3. 断言标题输入框值与该行 `${sampleNoticeTitle}` 一致(允许规范化空白)
- 自动化断言:规划与 CSV `BASIC-NTC-016` 一致
###### 预期结果
编辑弹窗可见;标题/范围/内容回填正确。
---
##### 【P1】【TC-UI-BASIC-NTC-017】【TP_BASIC_NTC_052】编辑取消不保存
- 前置条件:列表至少 1 条数据
- 操作步骤:
1. 打开首行编辑,记录原标题
2. 将标题改为 `${uniqNoticeTitle}` 后点「取 消」
3. 再次打开编辑,断言标题仍为原值
- 自动化断言:规划与 CSV `BASIC-NTC-017` 一致
###### 预期结果
取消后列表与回看均为修改前标题。
---
##### 【P0】【TC-UI-BASIC-NTC-018】【TP_BASIC_NTC_057】删除弹出确认框
- 前置条件:列表至少 1 条数据
- 操作步骤:
1. 点击首行「删除」
2. 断言出现确认框(标题含「提示」),可见「取 消」「确 定」
3. 点击「取 消」
4. 断言该行仍在
- 自动化断言:规划与 CSV `BASIC-NTC-018` 一致
###### 预期结果
删除需二次确认;取消后记录仍在。本条不断言真实删除,避免污染数据。
---
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **18** 条(P0=10 / P1=8) |
| 来源 | 从 63 条测试点选取可稳定自动化的主路径与关键反向 |
| 未纳入自动化 | 未登录/权限(由 auth.setup 覆盖)、发布后跨端可见、删除真实落库、接口失败注入 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-医院资料-医院信息登记 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-医院资料-医院信息登记-测试点分析-01.md`
**执行 CSV**:待生成 `testcase/基础管理-医院资料-医院信息登记-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/hospital/paltform/info`
**定位器 YAML**:`locators/spd/basic-hospital-info.locator.yaml`
**元素扫描**:`data/scan/basic-hospital-info-elements.json`(38 项)
**版本**:2026-09-16
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/basic-hospital-info.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 医院资料 → 医院信息登记」权限。
**页面约定**:整页渲染,**无报表 iframe**。
**菜单导航**:`page.getByRole('menuitem', { name: '医院信息登记', exact: true })`。
**写操作**:保存前读取原值 `${sampleLinkman}` / `${sampleContactWay}` / `${sampleShortName}`,用例结束必须恢复,禁止写死并留下脏数据。
---
## 基础设置 · 医院资料
### 医院信息登记 · 页面进入与查看
#### 功能验证点
##### 【P0】【TC-UI-BASIC-HOS-001】【TP_BASIC_HOS_001】菜单进入医院信息登记页
- 前置条件:已登录且具备医院资料权限
- 操作步骤:
1. 按菜单进入「医院信息登记」
2. 断言 URL 含 `/spd/basic/hospital/paltform/info`
3. 断言可见「编 辑」及医院编码/名称/地址等详情标签
- 自动化断言:规划与 CSV `BASIC-HOS-001` 及 `tests/spd/basic-hospital-info.spec.ts` 一致
###### 预期结果
进入详情页;不误入公告/院区/财务月份页;查看态「编辑」可见。
---
##### 【P0】【TC-UI-BASIC-HOS-002】【TP_BASIC_HOS_009】查看态只读字段不可改
- 前置条件:已进入医院信息登记且未点编辑
- 操作步骤:
1. 断言医院编码、医院名称、地址区域无可用输入框
2. 断言「保 存」「取 消」不可见
- 自动化断言:规划与 CSV `BASIC-HOS-002` 一致
###### 预期结果
查看模式下编码/名称/地址只读;不出现保存按钮。
---
##### 【P1】【TC-UI-BASIC-HOS-003】【TP_BASIC_HOS_011】已上传图片可预览
- 前置条件:当前医院已有登录页背景或 logo
- 操作步骤:
1. 点击「预览文件」(背景或 logo 任一可见项)
2. 断言预览打开或新预览层可见
- 自动化断言:规划与 CSV `BASIC-HOS-003` 一致;均无预览入口则 skip
###### 预期结果
预览可打开;不报错。
---
### 医院信息登记 · 编辑保存
#### 功能验证点
##### 【P0】【TC-UI-BASIC-HOS-004】【TP_BASIC_HOS_015】进入编辑模式
- 前置条件:已进入医院信息登记查看态
- 操作步骤:
1. 点击「编 辑」
2. 断言「保 存」「取 消」可见
3. 断言 `#form_item_linkman`、`#form_item_contactWay`、`#form_item_anotherName` 可编辑
- 自动化断言:规划与 CSV `BASIC-HOS-004` 一致
###### 预期结果
进入编辑态;三个可改文本框可输入;编码/名称/地址仍不可改。
---
##### 【P0】【TC-UI-BASIC-HOS-005】【TP_BASIC_HOS_016】编辑态只读字段仍不可改
- 前置条件:已进入编辑模式
- 操作步骤:
1. 点击「编 辑」
2. 断言医院编码、医院名称、地址仍无可用输入框
- 自动化断言:规划与 CSV `BASIC-HOS-005` 一致
###### 预期结果
编辑模式下系统分配字段保持只读。
---
##### 【P0】【TC-UI-BASIC-HOS-006】【TP_BASIC_HOS_018】取消不保存
- 前置条件:已进入查看态
- 操作步骤:
1. 点击「编 辑」,读取原联系人 `${sampleLinkman}`
2. 将联系人改为 `${uniqLinkman}` 后点「取 消」
3. 断言回到查看态,联系人展示仍为 `${sampleLinkman}`
- 自动化断言:规划与 CSV `BASIC-HOS-006` 一致
###### 预期结果
取消后不落库;查看态为修改前值。
---
##### 【P0】【TC-UI-BASIC-HOS-007】【TP_BASIC_HOS_017】保存后字段持久化
- 前置条件:已进入查看态;允许写医院资料
- 操作步骤:
1. 记录原联系人 `${sampleLinkman}`
2. 编辑为 `${uniqLinkman}` 并「保 存」
3. 刷新或重新打开本页,断言联系人为 `${uniqLinkman}`
4. 后置:再编辑回 `${sampleLinkman}` 并保存
- 自动化断言:规划与 CSV `BASIC-HOS-007` 一致;环境禁止写则 skip
###### 预期结果
保存后刷新仍为新值;用例结束恢复原值。
---
#### 异常验证点
##### 【P0】【TC-UI-BASIC-HOS-008】【TP_BASIC_HOS_022】联系人为空保存拦截
- 前置条件:已进入查看态
- 操作步骤:
1. 点击「编 辑」,清空联系人
2. 点击「保 存」
3. 断言必填提示,仍停留编辑态
- 自动化断言:规划与 CSV `BASIC-HOS-008` 一致
###### 预期结果
保存被拦截;原联系人不被写成空。
---
##### 【P0】【TC-UI-BASIC-HOS-009】【TP_BASIC_HOS_023】联系方式为空保存拦截
- 前置条件:已进入查看态
- 操作步骤:
1. 编辑态清空联系方式后点「保 存」
2. 断言必填提示,编辑态保持
- 自动化断言:规划与 CSV `BASIC-HOS-009` 一致
###### 预期结果
保存被拦截;联系方式不被清空落库。
---
##### 【P0】【TC-UI-BASIC-HOS-010】【TP_BASIC_HOS_024】医院简称为空保存拦截
- 前置条件:已进入查看态
- 操作步骤:
1. 编辑态清空医院简称后点「保 存」
2. 断言必填提示
- 自动化断言:规划与 CSV `BASIC-HOS-010` 一致
###### 预期结果
保存被拦截;简称不被写成空。
---
### 医院信息登记 · 图片上传
#### 功能验证点
##### 【P1】【TC-UI-BASIC-HOS-011】【TP_BASIC_HOS_030】编辑态存在背景与 logo 上传控件
- 前置条件:已进入查看态
- 操作步骤:
1. 点击「编 辑」
2. 断言存在登录页背景、医院 logo 对应 `input[type=file]`(`loginBgUploadInput` / `logoUploadInput`)
3. 点「取 消」,不实际上传
- 自动化断言:规划与 CSV `BASIC-HOS-011` 一致
###### 预期结果
编辑态两个上传控件可定位;本条不强制替换线上图片。
---
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **11** 条(P0=9 / P1=2) |
| 来源 | 从 38 条测试点选取可稳定自动化项 |
| 未纳入自动化 | 真实换登录页背景/logo(易污染环境)、登录页视觉生效、超限文件二进制、未登录 |
| 数据隔离 | 保存用例必须恢复原联系人 |
# 基础管理-医院资料-财务月份设置 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-医院资料-财务月份设置-测试点分析-01.md`
**执行 CSV**:待生成 `testcase/基础管理-医院资料-财务月份设置-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/hospital/balance/month`
**定位器 YAML**:`locators/spd/basic-finance-month.locator.yaml`
**元素扫描**:`data/scan/basic-finance-month-elements.json`(43 项)
**版本**:2026-09-16
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/basic-finance-month.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 医院资料 → 财务月份设置」权限。
**页面约定**:整页渲染,**无报表 iframe**;本页分页无跳至输入。
**菜单导航**:`page.getByRole('menuitem', { name: '财务月份设置', exact: true })`。
**写操作**:仅允许改「当前月份」行的自动结算日期。保存前读取 `${sampleAutoSettleDate}`,用例结束必须恢复,禁止写死日期并留下脏数据。
**动态取数约定**:
1. 默认查询后,从「当前月份」行读取 `${sampleFinanceMonth}`、`${sampleStartDate}`、`${sampleEndDate}`、`${sampleAutoSettleDate}`。
2. 筛选条件使用样本占位,**禁止写死**财务月份。
3. 「修改」只出现在当前月份行;历史月份无修改入口。
---
## 基础设置 · 医院资料
### 财务月份设置 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-BASIC-FMN-001】【TP_BASIC_FMN_001】菜单进入财务月份设置页
- 前置条件:已登录且具备医院资料权限
- 操作步骤:
1. 按菜单「基础设置 → 医院资料 → 财务月份设置」进入
2. 断言 URL 含 `/spd/basic/hospital/balance/month`
3. 断言筛选区(`#form_item_settleMonthDate`)、查询/重置、列表列头可见
- 自动化断言:规划与 CSV `BASIC-FMN-001` 及 `tests/spd/basic-finance-month.spec.ts` 一致
###### 预期结果
进入财务月份设置页;不误入公告/医院信息/院区页;筛选与列表可见。
---
### 财务月份设置 · 筛选查询
#### 功能验证点
##### 【P0】【TC-UI-BASIC-FMN-002】【TP_BASIC_FMN_009】默认查询列表有数据或空态明确
- 前置条件:已进入财务月份设置页
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行,或「暂无数据」且分页总数为 0
- 自动化断言:规划与 CSV `BASIC-FMN-002` 一致
###### 预期结果
查询无报错;有数据时分页「共 N 条」N≥1;无数据时空态明确。
---
##### 【P0】【TC-UI-BASIC-FMN-003】【TP_BASIC_FMN_010】按财务月份筛选
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 从首行或当前月份行读取 `${sampleFinanceMonth}`
2. 在 `#form_item_settleMonthDate` 选择该月份,点击「查 询」
3. 断言结果行「财务月份」均等于该月份(或与产品筛选规则一致)
- 自动化断言:规划与 CSV `BASIC-FMN-003` 一致
###### 预期结果
结果仅含所选财务月份;无未捕获异常。
---
##### 【P1】【TC-UI-BASIC-FMN-004】【TP_BASIC_FMN_011】重置恢复默认
- 前置条件:已按财务月份筛选
- 操作步骤:
1. 选择 `${sampleFinanceMonth}` 并查询
2. 点击「重 置」
3. 断言月份筛选恢复默认,列表按默认规则刷新
- 自动化断言:规划与 CSV `BASIC-FMN-004` 一致
###### 预期结果
重置后筛选清空或回到默认;列表可再查询。
---
### 财务月份设置 · 列表与状态
#### 功能验证点
##### 【P0】【TC-UI-BASIC-FMN-005】【TP_BASIC_FMN_017】列表核心列完整
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 断言表头包含财务月份、开始日期、结束日期、自动结算日期、状态、操作
- 自动化断言:规划与 CSV `BASIC-FMN-005` 一致
###### 预期结果
核心列均可见,不缺「状态」「操作」。
---
##### 【P0】【TC-UI-BASIC-FMN-006】【TP_BASIC_FMN_018】仅当前月份行可修改
- 前置条件:列表同时存在当前月份与历史月份(若仅一行当前月份则只断言该行)
- 操作步骤:
1. 定位状态为「当前月份」的行,断言操作列可见「修 改」(`modifyBtn`)
2. 对「历史月份」行断言无「修 改」或操作为「--」
- 自动化断言:规划与 CSV `BASIC-FMN-006` 一致;无历史月份则只校验当前月份入口
###### 预期结果
可修改入口只出现在当前月份行。
---
##### 【P1】【TC-UI-BASIC-FMN-007】【TP_BASIC_FMN_019】当前月份至多一行
- 前置条件:默认查询已出列表
- 操作步骤:
1. 统计状态为「当前月份」的行数
2. 断言行数 ≤ 1
- 自动化断言:规划与 CSV `BASIC-FMN-007` 一致
###### 预期结果
同一时点至多一行「当前月份」。
---
#### 异常验证点
##### 【P1】【TC-UI-BASIC-FMN-008】【TP_BASIC_FMN_022】历史月份无法进入编辑
- 前置条件:列表至少 1 条历史月份
- 操作步骤:
1. 对历史月份行尝试点击操作区
2. 断言不出现行内「保 存」「取 消」,自动结算日期仍为文本
- 自动化断言:规划与 CSV `BASIC-FMN-008` 一致;无历史月份则 skip
###### 预期结果
历史月份不能改开始/结束/自动结算日期。
---
### 财务月份设置 · 当前月份修改
#### 功能验证点
##### 【P0】【TC-UI-BASIC-FMN-009】【TP_BASIC_FMN_024】修改进入行内编辑
- 前置条件:存在状态为「当前月份」的行
- 操作步骤:
1. 点击该行「修 改」
2. 断言出现「保 存」「取 消」
3. 断言自动结算日期变为日期框(`autoSettleDateInput`)
- 自动化断言:规划与 CSV `BASIC-FMN-009` 一致
###### 预期结果
进入行内编辑;仅自动结算日可改。
---
##### 【P0】【TC-UI-BASIC-FMN-010】【TP_BASIC_FMN_025】编辑态开始结束日期只读
- 前置条件:已进入当前月份行内编辑
- 操作步骤:
1. 点击「修 改」
2. 断言开始日期、结束日期无可用输入框
3. 断言仅 `autoSettleDateInput` 可编辑
4. 点击「取 消」退出
- 自动化断言:规划与 CSV `BASIC-FMN-010` 一致
###### 预期结果
开始/结束日期保持只读;账期区间不被改写。
---
##### 【P0】【TC-UI-BASIC-FMN-011】【TP_BASIC_FMN_027】取消不保存自动结算日
- 前置条件:存在当前月份行
- 操作步骤:
1. 读取 `${sampleAutoSettleDate}`
2. 点「修 改」,将自动结算日改为当月区间内另一天 `${uniqAutoSettleDate}`
3. 点击「取 消」
4. 断言该行自动结算日仍为 `${sampleAutoSettleDate}`
- 自动化断言:规划与 CSV `BASIC-FMN-011` 一致
###### 预期结果
取消后不落库;日期恢复修改前值。
---
##### 【P0】【TC-UI-BASIC-FMN-012】【TP_BASIC_FMN_026】保存自动结算日期持久化
- 前置条件:存在当前月份行;允许写财务月份
- 操作步骤:
1. 记录 `${sampleAutoSettleDate}`、`${sampleStartDate}`、`${sampleEndDate}`
2. 将自动结算日改为区间内另一天 `${uniqAutoSettleDate}` 并「保 存」
3. 刷新或重新查询,断言该行自动结算日为 `${uniqAutoSettleDate}`
4. 后置:再改为 `${sampleAutoSettleDate}` 并保存
- 自动化断言:规划与 CSV `BASIC-FMN-012` 一致;环境禁止写则 skip
###### 预期结果
保存后刷新仍为新日期;用例结束恢复原值。
---
#### 异常验证点
##### 【P0】【TC-UI-BASIC-FMN-013】【TP_BASIC_FMN_031】自动结算日为空拦截
- 前置条件:存在当前月份行
- 操作步骤:
1. 点「修 改」,清空 `autoSettleDateInput`
2. 点击「保 存」
3. 断言必填或非法提示,行上日期仍为 `${sampleAutoSettleDate}`
- 自动化断言:规划与 CSV `BASIC-FMN-013` 一致
###### 预期结果
保存被拦截;原日期不被写成空。
---
##### 【P1】【TC-UI-BASIC-FMN-014】【TP_BASIC_FMN_032】自动结算日超出当月区间拦截
- 前置条件:存在当前月份行且能读到开始/结束日
- 操作步骤:
1. 点「修 改」,将日期改为早于 `${sampleStartDate}` 或晚于 `${sampleEndDate}`
2. 点击「保 存」
3. 断言拒绝保存并提示,原日期不变
4. 点「取 消」退出
- 自动化断言:规划与 CSV `BASIC-FMN-014` 一致;日期控件无法选出区间外日期则 skip 并记录产品限制
###### 预期结果
超出账期区间时拒绝保存;不脏写。
---
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **14** 条(P0=10 / P1=4) |
| 来源 | 从 38 条测试点选取可稳定自动化的主路径与关键反向 |
| 未纳入自动化 | 未登录/权限、自动结算任务调度联调、查询接口失败注入、最早/最晚月份边界 |
| 数据隔离 | 保存用例必须恢复原自动结算日 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-医院资料-院区管理 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-医院资料-院区管理-测试点分析-01.md`
**执行 CSV**:待生成 `testcase/基础管理-医院资料-院区管理-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/hospital/paltform/area`
**定位器 YAML**:`locators/spd/basic-branch.locator.yaml`
**元素扫描**:`data/scan/basic-branch-elements.json`(60 项)
**版本**:2026-09-16
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/basic-branch.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 医院资料 → 院区管理」权限。
**页面约定**:整页渲染,**无报表 iframe**;院区名称框即时或回车过滤,**无独立「查询」「重置」按钮**。
**菜单导航**:`page.getByRole('menuitem', { name: '院区管理', exact: true })`。
**写操作**:院区名称使用 `${uniqCampusName}`(建议 `AUTO-BRN-${timestamp}`),用例结束后停用/恢复或按环境约定清理,禁止写死生产院区名称。
**动态取数约定**:
1. 打开页面后从首行读取 `${sampleCampusName}`、`${sampleCampusId}`、`${sampleCampusAddress}`、`${sampleCampusStatus}`。
2. 搜索关键字使用样本占位,**禁止写死**院区名称。
3. 新增弹窗无院区编号、无启用云仓;编辑弹窗额外有 `#form_item_id` 与启用云仓;新增状态文案为停用/启用,编辑为禁用/启用。
---
## 基础设置 · 医院资料
### 院区管理 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-BASIC-BRN-001】【TP_BASIC_BRN_001】菜单进入院区管理页
- 前置条件:已登录且具备医院资料权限
- 操作步骤:
1. 按菜单「基础设置 → 医院资料 → 院区管理」进入
2. 断言 URL 含 `/spd/basic/hospital/paltform/area`
3. 断言「新 增」、院区名称搜索框(`campusNameInput`)、列表列头可见
4. 断言页面无独立「查 询」「重 置」按钮
- 自动化断言:规划与 CSV `BASIC-BRN-001` 及 `tests/spd/basic-branch.spec.ts` 一致
###### 预期结果
进入院区管理页;不误入公告/医院信息/财务月份页;搜索框与新增可见,无查询/重置。
---
### 院区管理 · 列表搜索
#### 功能验证点
##### 【P0】【TC-UI-BASIC-BRN-002】【TP_BASIC_BRN_009】默认列出院区或空态明确
- 前置条件:已进入院区管理页
- 操作步骤:
1. 等待列表稳定
2. 断言出现数据行,或「暂无数据」且分页总数为 0
- 自动化断言:规划与 CSV `BASIC-BRN-002` 一致
###### 预期结果
加载无报错;有数据时分页「共 N 条」N≥1;无数据时空态明确。
---
##### 【P0】【TC-UI-BASIC-BRN-003】【TP_BASIC_BRN_010】院区名称搜索过滤
- 前置条件:默认列表至少 1 条数据
- 操作步骤:
1. 从首行读取 `${sampleCampusName}`
2. 在 `campusNameInput` 填入该关键字(即时过滤或回车,以现网为准)
3. 断言结果行「院区名称」均包含该关键字
- 自动化断言:规划与 CSV `BASIC-BRN-003` 一致
###### 预期结果
过滤结果名称与已填关键字匹配;无未捕获异常。
---
##### 【P0】【TC-UI-BASIC-BRN-004】【TP_BASIC_BRN_011】列表核心列完整
- 前置条件:默认列表至少 1 条数据
- 操作步骤:
1. 断言表头包含序号、院区编号、院区名称、院区地址、状态、启用云仓、操作
- 自动化断言:规划与 CSV `BASIC-BRN-004` 一致
###### 预期结果
核心列均可见,操作列含「编 辑」。
---
##### 【P1】【TC-UI-BASIC-BRN-005】【TP_BASIC_BRN_015】清空搜索恢复全量
- 前置条件:已用 `${sampleCampusName}` 过滤
- 操作步骤:
1. 记录过滤后条数
2. 清空 `campusNameInput` 并等待列表刷新
3. 断言条数回到未过滤的默认集合(或不少于过滤后条数)
- 自动化断言:规划与 CSV `BASIC-BRN-005` 一致
###### 预期结果
清空后列表恢复默认集合。
---
#### 异常验证点
##### 【P1】【TC-UI-BASIC-BRN-006】【TP_BASIC_BRN_018】搜索无匹配空态
- 前置条件:已进入院区管理页
- 操作步骤:
1. 在院区名称框输入不存在关键字 `${uniqNoMatchCampus}`(建议 `NO-MATCH-BRN-${timestamp}`)
2. 断言「暂无数据」且分页总数为 0
- 自动化断言:规划与 CSV `BASIC-BRN-006` 一致
###### 预期结果
无匹配时空态明确,不白屏。
---
### 院区管理 · 新增院区
#### 功能验证点
##### 【P0】【TC-UI-BASIC-BRN-007】【TP_BASIC_BRN_020】打开新增院区弹窗
- 前置条件:已进入院区管理页
- 操作步骤:
1. 点击「新 增」
2. 断言弹窗标题为「新增院区」
3. 断言可见院区名称、所在地区、详细地址、主院区标志、状态、取消/确定
4. 断言无 `#form_item_id`、无启用云仓
5. 点击「取 消」关闭
- 自动化断言:规划与 CSV `BASIC-BRN-007` 一致
###### 预期结果
新增弹窗字段完整;不含院区编号与启用云仓。
---
##### 【P0】【TC-UI-BASIC-BRN-008】【TP_BASIC_BRN_025】新增取消不落库
- 前置条件:已进入院区管理页
- 操作步骤:
1. 记录当前分页总数 `${sampleTotal}`
2. 打开新增,填写名称 `${uniqCampusName}` 后点「取 消」
3. 断言列表总数不变,且无该名称行
- 自动化断言:规划与 CSV `BASIC-BRN-008` 一致
###### 预期结果
取消后不新增院区。
---
##### 【P0】【TC-UI-BASIC-BRN-009】【TP_BASIC_BRN_021】合法必填新增成功
- 前置条件:允许写院区;名称使用 `${uniqCampusName}`
- 操作步骤:
1. 打开新增,填写名称、所在地区、详细地址,主院区选「否」,状态选「启用」
2. 点击「确 定」
3. 断言弹窗关闭,列表出现该名称行且字段一致
4. 后置:按环境约定停用或清理该院区,避免污染主数据
- 自动化断言:规划与 CSV `BASIC-BRN-009` 一致;环境禁止写则 skip
###### 预期结果
新增成功且列表可见;用例结束清理或停用,不留生产脏数据。
---
#### 异常验证点
##### 【P0】【TC-UI-BASIC-BRN-010】【TP_BASIC_BRN_029】院区名称为空拦截
- 前置条件:已打开新增弹窗
- 操作步骤:
1. 名称留空,补齐地区与地址后点「确 定」
2. 断言必填提示,弹窗仍在,列表无新行
- 自动化断言:规划与 CSV `BASIC-BRN-010` 一致
###### 预期结果
确定被拦截;不落库。
---
##### 【P0】【TC-UI-BASIC-BRN-011】【TP_BASIC_BRN_030】所在地区为空拦截
- 前置条件:已打开新增弹窗
- 操作步骤:
1. 填写名称与地址,不选所在地区,点「确 定」
2. 断言必填提示,弹窗仍在
- 自动化断言:规划与 CSV `BASIC-BRN-011` 一致
###### 预期结果
确定被拦截;不落库。
---
##### 【P0】【TC-UI-BASIC-BRN-012】【TP_BASIC_BRN_031】详细地址为空拦截
- 前置条件:已打开新增弹窗
- 操作步骤:
1. 填写名称并选择地区,地址留空,点「确 定」
2. 断言必填提示,弹窗仍在
- 自动化断言:规划与 CSV `BASIC-BRN-012` 一致
###### 预期结果
确定被拦截;不落库。
---
### 院区管理 · 编辑院区
#### 功能验证点
##### 【P0】【TC-UI-BASIC-BRN-013】【TP_BASIC_BRN_037】打开编辑弹窗并回填
- 前置条件:列表至少 1 条数据
- 操作步骤:
1. 从首行读取 `${sampleCampusId}`、`${sampleCampusName}`、`${sampleCampusAddress}`
2. 点击「编 辑」
3. 断言弹窗标题为「编辑院区」
4. 断言 `#form_item_id` 等于 `${sampleCampusId}`,名称/地址回填正确
5. 断言额外可见「启用云仓」
6. 点击「取 消」
- 自动化断言:规划与 CSV `BASIC-BRN-013` 一致
###### 预期结果
编辑弹窗回填正确;相对新增多出院区编号与启用云仓。
---
##### 【P0】【TC-UI-BASIC-BRN-014】【TP_BASIC_BRN_038】编辑态院区编号不可换号
- 前置条件:已打开首行编辑
- 操作步骤:
1. 断言 `#form_item_id` 可见且值等于列表「院区编号」
2. 若编号只读则直接断言 disabled/readonly;若可输入则改写后点确定,刷新后编号仍为原值
3. 未改其它字段时点「取 消」
- 自动化断言:规划与 CSV `BASIC-BRN-014` 一致
###### 预期结果
院区编号与列表一致;保存后编号不变。
---
##### 【P1】【TC-UI-BASIC-BRN-015】【TP_BASIC_BRN_042】编辑取消不保存
- 前置条件:列表至少 1 条数据
- 操作步骤:
1. 打开首行编辑,记录原名称
2. 将名称改为 `${uniqCampusName}` 后点「取 消」
3. 再次打开编辑,断言名称仍为原值
- 自动化断言:规划与 CSV `BASIC-BRN-015` 一致
###### 预期结果
取消后列表与回看均为修改前名称。
---
##### 【P1】【TC-UI-BASIC-BRN-016】【TP_BASIC_BRN_040】编辑状态为禁用启用
- 前置条件:已打开编辑弹窗
- 操作步骤:
1. 断言状态选项文案为「禁用 / 启用」(不是新增弹窗的「停用 / 启用」)
2. 点「取 消」,不改状态
- 自动化断言:规划与 CSV `BASIC-BRN-016` 一致
###### 预期结果
编辑态状态文案与新增不同;本条不真实切换生产院区状态。
---
##### 【P1】【TC-UI-BASIC-BRN-017】【TP_BASIC_BRN_041】编辑可见启用云仓
- 前置条件:已打开编辑弹窗
- 操作步骤:
1. 断言「启用云仓」单选「是 / 否」可见
2. 点「取 消」,不改云仓标志
- 自动化断言:规划与 CSV `BASIC-BRN-017` 一致
###### 预期结果
编辑可看到启用云仓;本条不真实改生产院区云仓开关。
---
#### 异常验证点
##### 【P0】【TC-UI-BASIC-BRN-018】【TP_BASIC_BRN_045】编辑清空必填拦截
- 前置条件:列表至少 1 条数据
- 操作步骤:
1. 打开首行编辑,清空院区名称后点「确 定」
2. 断言必填提示,弹窗仍在
3. 点「取 消」后再打开,断言名称仍为原值
- 自动化断言:规划与 CSV `BASIC-BRN-018` 一致
###### 预期结果
确定被拦截;原记录不被写成空。
---
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **18** 条(P0=13 / P1=5) |
| 来源 | 从 50 条测试点选取可稳定自动化的主路径与关键反向 |
| 未纳入自动化 | 未登录/权限、主院区全局唯一、禁用后下游不可选、云仓能力联调、真实改生产院区状态 |
| 数据隔离 | 新增必须用唯一名称并清理/停用;编辑不改生产主数据 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-厂商管理-供应商节假日管理 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-厂商管理-供应商节假日管理-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-厂商管理-供应商节假日管理-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/mfrs/basic/prov/holiday`
**定位器 YAML**:`locators/spd/vendor-holiday.locator.yaml`
**元素扫描**:`data/scan/vendor-holiday-elements.json`(80 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-VENDOR-010.md`
**版本**:2026-09-30
**自动化框架**:Playwright + TypeScript(`tests/spd/vendor-holiday.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 厂商管理 → 供应商节假日管理」权限。
**页面约定**:整页渲染,**无报表 iframe**。
**写操作**:左侧新增只打开后取消;不批量删除真实数据。
**动态取数**:左侧首行读取 `${sampleHolidayName}`/年度;mock:`__NOT_EXIST_ORDER__99999`。
---
## 基础设置 · 厂商管理
### 供应商节假日管理 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-HLD-001】【TP_VENDOR_HLD_001】菜单进入供应商节假日管理页
- 前置条件:已登录且具备厂商管理权限
- 操作步骤:
1. 按菜单进入供应商节假日管理
2. 断言 URL 含 `prov/holiday`
3. 断言可见节假日主区与新增
- 自动化断言:与 CSV `VENDOR-HLD-001` 及 `tests/spd/vendor-holiday.spec.ts` 一致
###### 预期结果
进入供应商节假日管理页。
---
### 供应商节假日管理 · 左右分栏
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-HLD-002】【TP_VENDOR_HLD_009】选中左侧节假日展示详情
- 前置条件:左侧有数据
- 操作步骤:
1. 点击左侧首行
2. 断言默认假日详情或自定义列表区可见
- 自动化断言:与 CSV `VENDOR-HLD-002` 及 `tests/spd/vendor-holiday.spec.ts` 一致
###### 预期结果
详情联动成功。
---
#### 异常验证点
##### 【P1】【TC-UI-VENDOR-HLD-003】【TP_VENDOR_HLD_015】左侧搜索无匹配空态(mock反例)
- 前置条件:已进入供应商节假日管理页
- 操作步骤:
1. 左侧搜索框填 mock 并回车
2. 断言左侧列表空态
- 自动化断言:与 CSV `VENDOR-HLD-003` 及 `tests/spd/vendor-holiday.spec.ts` 一致
###### 预期结果
无匹配空态明确。
---
### 供应商节假日管理 · 维护
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-HLD-004】【TP_VENDOR_HLD_011】左侧新增取消
- 前置条件:已进入供应商节假日管理页
- 操作步骤:
1. 点击新增
2. 取消/关闭不保存
3. 断言仍停留本页且无异常
- 自动化断言:与 CSV `VENDOR-HLD-004` 及 `tests/spd/vendor-holiday.spec.ts` 一致
###### 预期结果
取消不落库。
---
### 供应商节假日管理 · 左右分栏
#### 功能验证点
##### 【P1】【TC-UI-VENDOR-HLD-005】【TP_VENDOR_HLD_012】自定义节假日列表区可见
- 前置条件:已进入供应商节假日管理页
- 操作步骤:
1. 选中左侧行
2. 断言「供应商自定义节假日列表」区域可见(可为空态)
- 自动化断言:与 CSV `VENDOR-HLD-005` 及 `tests/spd/vendor-holiday.spec.ts` 一致
###### 预期结果
自定义区可见。
---
### 供应商节假日管理 · 维护
#### 异常验证点
##### 【P0】【TC-UI-VENDOR-HLD-006】【TP_VENDOR_HLD_016】结束早于开始日期拦截
- 前置条件:已进入供应商节假日管理页
- 操作步骤:
1. 打开新增/编辑,结束日期早于开始日期尝试保存
2. 断言拒绝保存并提示
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
非法日期被拦截。
---
#### 边界验证点
##### 【P2】【TC-UI-VENDOR-HLD-007】【TP_VENDOR_HLD_015】开始结束为同一天
- 前置条件:已进入供应商节假日管理页
- 操作步骤:
1. 打开新增/编辑,开始与结束日期选同一天尝试保存(或仅校验控件)
2. 断言允许保存或明确提示规则(按产品规则),不报错白屏
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
同日区间规则明确。
---
### 供应商节假日管理 · 左右分栏
#### 集成验证点
##### 【P1】【TC-UI-VENDOR-HLD-008】【TP_VENDOR_HLD_018】进院供应商主数据一致
- 前置条件:已进入供应商节假日管理页
- 操作步骤:
1. 在自定义列表抽样进院供应商(若有数据)
2. 断言可在厂商/供应商主数据中找到对应记录
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
自定义节假日供应商与主数据一致。
# 基础管理-厂商管理-供应商资质管理 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-厂商管理-供应商资质管理-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-厂商管理-供应商资质管理-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/mfrs/basic/qcManage`
**定位器 YAML**:`locators/spd/vendor-qual.locator.yaml`
**元素扫描**:`data/scan/vendor-qual-elements.json`(99 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-VENDOR-002.md`
**版本**:2026-09-30
**自动化框架**:Playwright + TypeScript(`tests/spd/vendor-qual.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 厂商管理 → 供应商资质管理」权限。
**页面约定**:整页渲染,**无报表 iframe**。
**写操作**:本批只读:查看打开后关闭;不确认导出下载、不改证件。
**动态取数**:证件效期提醒 Tab 首行读取 `${sampleHospitalSupplier}`;mock:`__NOT_EXIST_SUPPLIER__99999`。
---
## 基础设置 · 厂商管理
### 供应商资质管理 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-QUL-001】【TP_VENDOR_QUL_001】菜单进入供应商资质管理页
- 前置条件:已登录且具备厂商管理权限
- 操作步骤:
1. 按菜单「基础设置 → 厂商管理 → 供应商资质管理」进入
2. 断言 URL 含 `/spd/basic/mfrs/basic/qcManage`
3. 断言可见「查 询」「重 置」及证件效期提醒相关入口
- 自动化断言:与 CSV `VENDOR-QUL-001` 及 `tests/spd/vendor-qual.spec.ts` 一致
###### 预期结果
进入供应商资质管理;不误入厂商查询。
---
### 供应商资质管理 · 筛选与 Tab
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-QUL-002】【TP_VENDOR_QUL_009】默认查询列表有数据或空态明确
- 前置条件:已进入供应商资质管理页
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行或空态明确
- 自动化断言:与 CSV `VENDOR-QUL-002` 及 `tests/spd/vendor-qual.spec.ts` 一致
###### 预期结果
查询无报错;有数据时分页 N≥1。
---
##### 【P0】【TC-UI-VENDOR-QUL-003】【TP_VENDOR_QUL_009】切换授权链路效期预警 Tab
- 前置条件:已进入供应商资质管理页
- 操作步骤:
1. 点击「授权链路效期预警」
2. 断言列表有数据或空态明确
- 自动化断言:与 CSV `VENDOR-QUL-003` 及 `tests/spd/vendor-qual.spec.ts` 一致
###### 预期结果
Tab 切换成功,列表字段可随 Tab 变化。
---
##### 【P0】【TC-UI-VENDOR-QUL-004】【TP_VENDOR_QUL_010】近三个月到期计数一致
- 前置条件:已进入供应商资质管理页
- 操作步骤:
1. 切换「近三个月到期」(或等价文案)
2. 若可读到括号/冒号计数,断言等于分页「共 N 条」
- 自动化断言:与 CSV `VENDOR-QUL-004` 及 `tests/spd/vendor-qual.spec.ts` 一致
###### 预期结果
计数与分页一致(可读时)。
---
##### 【P0】【TC-UI-VENDOR-QUL-005】【TP_VENDOR_QUL_011】按进院供应商筛选
- 前置条件:证件效期提醒至少 1 条且进院供应商非空
- 操作步骤:
1. 从首行读取 `${sampleHospitalSupplier}` 取关键字
2. 在进院供应商名称填入关键字并「查 询」
3. 断言结果行「进院供应商」包含关键字
- 自动化断言:与 CSV `VENDOR-QUL-005` 及 `tests/spd/vendor-qual.spec.ts` 一致
###### 预期结果
进院供应商列与条件一致。
---
##### 【P1】【TC-UI-VENDOR-QUL-006】【TP_VENDOR_QUL_011】重置恢复默认
- 前置条件:已进入供应商资质管理页
- 操作步骤:
1. 填写筛选条件后点击「重 置」
2. 断言列表按默认规则刷新
- 自动化断言:与 CSV `VENDOR-QUL-006` 及 `tests/spd/vendor-qual.spec.ts` 一致
###### 预期结果
筛选恢复默认。
---
#### 异常验证点
##### 【P1】【TC-UI-VENDOR-QUL-007】【TP_VENDOR_QUL_016】无匹配空态(mock反例)
- 前置条件:已进入供应商资质管理页
- 操作步骤:
1. 进院供应商名称填入 `__NOT_EXIST_SUPPLIER__99999`
2. 点击「查 询」
3. 断言空态且分页总数为 0
- 自动化断言:与 CSV `VENDOR-QUL-007` 及 `tests/spd/vendor-qual.spec.ts` 一致
###### 预期结果
无匹配时不报错;总数为 0。
---
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-QUL-008】【TP_VENDOR_QUL_012】证件效期提醒核心列完整
- 前置条件:已进入供应商资质管理页
- 操作步骤:
1. 处于证件效期提醒 Tab
2. 断言表头含序号、数据来源、进院供应商、有效期至、证件名称、证件类型、效期提醒、操作
- 自动化断言:与 CSV `VENDOR-QUL-008` 及 `tests/spd/vendor-qual.spec.ts` 一致
###### 预期结果
核心列可见。
---
### 供应商资质管理 · 查看与导出
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-QUL-009】【TP_VENDOR_QUL_014】打开查看后关闭
- 前置条件:列表至少 1 行含「查看」
- 操作步骤:
1. 点击首行「查 看」
2. 断言详情层可见
3. 关闭/返回,断言回到列表
- 自动化断言:与 CSV `VENDOR-QUL-009` 及 `tests/spd/vendor-qual.spec.ts` 一致
###### 预期结果
详情可打开;关闭后回到列表。
---
##### 【P1】【TC-UI-VENDOR-QUL-010】【TP_VENDOR_QUL_015】导出按钮可见
- 前置条件:已进入供应商资质管理页
- 操作步骤:
1. 断言「导出」或「导出明细」按钮可见(本批不确认下载)
- 自动化断言:与 CSV `VENDOR-QUL-010` 及 `tests/spd/vendor-qual.spec.ts` 一致
###### 预期结果
导出入口可见。
---
### 供应商资质管理 · 筛选与 Tab
#### 边界验证点
##### 【P2】【TC-UI-VENDOR-QUL-011】【TP_VENDOR_QUL_015】制单/效期日期起止同一天
- 前置条件:已进入供应商资质管理页
- 操作步骤:
1. 若存在日期区间筛选,起止选同一天并查询
2. 断言仅返回该日数据或空态明确,不报错
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
同日区间行为明确。
---
#### 集成验证点
##### 【P1】【TC-UI-VENDOR-QUL-012】【TP_VENDOR_QUL_018】效期提醒与有效期至抽样一致
- 前置条件:已进入供应商资质管理页
- 操作步骤:
1. 在近三个月到期列表抽样一行
2. 核对「效期提醒」文案与「有效期至」日期逻辑一致
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
提醒文案与有效期至不矛盾。
# 基础管理-厂商管理-厂商查询 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-厂商管理-厂商查询-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-厂商管理-厂商查询-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/mfrs/paltform/mfrsName/factory`
**定位器 YAML**:`locators/spd/vendor-query.locator.yaml`
**元素扫描**:`data/scan/vendor-query-elements.json`(47 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-VENDOR-001.md`
**版本**:2026-09-30
**自动化框架**:Playwright + TypeScript(`tests/spd/vendor-query.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 厂商管理 → 厂商查询」权限。
**页面约定**:整页渲染,**无报表 iframe**。
**写操作**:本页只读查询,无新增/编辑提交。
**动态取数**:从器械注册人 Tab 首行读取 `${sampleMfrsName}`;禁止写死厂商名称;mock:`__NOT_EXIST_MFRS__99999`。
---
## 基础设置 · 厂商管理
### 厂商查询 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-QRY-001】【TP_VENDOR_QRY_001】菜单进入厂商查询页
- 前置条件:已登录且具备厂商管理权限
- 操作步骤:
1. 按菜单「基础设置 → 厂商管理 → 厂商查询」进入
2. 断言 URL 含 `/spd/basic/mfrs/paltform/mfrsName/factory`
3. 断言可见「器械注册人」「经销商」Tab、厂商名称搜索框及列表表头
- 自动化断言:与 CSV `VENDOR-QRY-001` 及 `tests/spd/vendor-query.spec.ts` 一致
###### 预期结果
进入厂商查询页;不误入供应商资质管理。
---
### 厂商查询 · Tab 与搜索
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-QRY-002】【TP_VENDOR_QRY_009】默认器械注册人列表有数据或空态明确
- 前置条件:已进入厂商查询页
- 操作步骤:
1. 切换或停留「器械注册人」
2. 断言出现数据行,或「暂无数据」且分页总数为 0
- 自动化断言:与 CSV `VENDOR-QRY-002` 及 `tests/spd/vendor-query.spec.ts` 一致
###### 预期结果
器械注册人列表稳定;有数据时分页「共 N 条」N≥1。
---
##### 【P0】【TC-UI-VENDOR-QRY-003】【TP_VENDOR_QRY_010】切换经销商 Tab
- 前置条件:已进入厂商查询页
- 操作步骤:
1. 点击「经销商」
2. 断言 Tab 激活,列表有数据或空态明确
- 自动化断言:与 CSV `VENDOR-QRY-003` 及 `tests/spd/vendor-query.spec.ts` 一致
###### 预期结果
经销商列表加载成功;总数可与器械注册人不同。
---
##### 【P0】【TC-UI-VENDOR-QRY-004】【TP_VENDOR_QRY_011】按厂商名称搜索
- 前置条件:器械注册人至少 1 条且厂商名称非空
- 操作步骤:
1. 从首行读取 `${sampleMfrsName}` 取关键字
2. 在厂商名称搜索框填入关键字并回车
3. 断言结果行「厂商名称」包含关键字
- 自动化断言:与 CSV `VENDOR-QRY-004` 及 `tests/spd/vendor-query.spec.ts` 一致
###### 预期结果
厂商名称列与关键字匹配。
---
##### 【P1】【TC-UI-VENDOR-QRY-005】【TP_VENDOR_QRY_019】清空搜索恢复
- 前置条件:已按厂商名称过滤
- 操作步骤:
1. 在已过滤状态下清空搜索框并回车
2. 断言分页总数不少于过滤后
- 自动化断言:与 CSV `VENDOR-QRY-005` 及 `tests/spd/vendor-query.spec.ts` 一致
###### 预期结果
恢复更宽结果集。
---
#### 异常验证点
##### 【P1】【TC-UI-VENDOR-QRY-006】【TP_VENDOR_QRY_017】无匹配空态(mock反例)
- 前置条件:已进入厂商查询页
- 操作步骤:
1. 厂商名称填入 `__NOT_EXIST_MFRS__99999` 并回车
2. 断言空态且分页总数为 0
- 自动化断言:与 CSV `VENDOR-QRY-006` 及 `tests/spd/vendor-query.spec.ts` 一致
###### 预期结果
无匹配时不报错;总数为 0。
---
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-QRY-007】【TP_VENDOR_QRY_012】列表核心列完整
- 前置条件:已进入厂商查询页
- 操作步骤:
1. 断言表头含序号、厂商编号、厂商名称、产地、详细地址、简称、开户银行、银行账号
- 自动化断言:与 CSV `VENDOR-QRY-007` 及 `tests/spd/vendor-query.spec.ts` 一致
###### 预期结果
核心列可见。
---
##### 【P1】【TC-UI-VENDOR-QRY-008】【TP_VENDOR_QRY_013】分页翻至第 2 页
- 前置条件:器械注册人总数足够翻页
- 操作步骤:
1. 总数足够时翻到第 2 页
2. 断言列表可加载;不足两页则 skip
- 自动化断言:与 CSV `VENDOR-QRY-008` 及 `tests/spd/vendor-query.spec.ts` 一致
###### 预期结果
第 2 页可加载。
---
#### 边界验证点
##### 【P2】【TC-UI-VENDOR-QRY-009】【TP_VENDOR_QRY_015】仅空格关键字搜索
- 前置条件:已进入厂商查询页
- 操作步骤:
1. 厂商名称仅填空格并回车
2. 断言按空查询处理或提示,不白屏
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
不报错;行为明确。
---
### 厂商查询 · 页面进入
#### 异常验证点
##### 【P0】【TC-UI-VENDOR-QRY-010】【TP_VENDOR_QRY_005】未登录访问拦截
- 前置条件:使用独立 context,storageState 为空(不加载 test_1 登录态)
- 操作步骤:
1. 新建独立 BrowserContext,不加载 auth/user.json(`test.use` 空 storageState)
2. 直接打开厂商查询 URL
3. 断言跳转登录或不展示业务列表
- 自动化断言:与 CSV `VENDOR-QRY-010` 及 `tests/spd/vendor-query.spec.ts` 一致
###### 预期结果
未登录不可见厂商数据。
---
### 厂商查询 · Tab 与搜索
#### 集成验证点
##### 【P1】【TC-UI-VENDOR-QRY-011】【TP_VENDOR_QRY_018】厂商名称与资质管理进院供应商可对照
- 前置条件:已进入厂商查询页
- 操作步骤:
1. 记录厂商查询中某厂商名称(若有)
2. 打开供应商资质管理,用同源关键字检索或目视对照
3. 断言不出现明显主数据串名(允许一方无记录)
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
厂商主数据跨菜单可对照,不串名。
# 基础管理-厂商管理-授权变更初审 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-厂商管理-授权变更初审-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-厂商管理-授权变更初审-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/mfrs/paltform/mfrsName/authAudit`
**定位器 YAML**:`locators/spd/vendor-auth-first.locator.yaml`
**元素扫描**:`data/scan/vendor-auth-first-elements.json`(40 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-VENDOR-003.md`
**版本**:2026-09-30
**自动化框架**:Playwright + TypeScript(`tests/spd/vendor-audit.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 厂商管理 → 授权变更初审」权限。
**页面约定**:整页渲染,**无报表 iframe**。
**写操作**:审批写操作只打开详情后返回,不确认通过/驳回/提交。
**动态取数**:默认查询后从首行读取 `${sampleOrderNo}`;禁止写死单号;mock:`__NOT_EXIST_ORDER__99999`。
---
## 基础设置 · 厂商管理
### 授权变更初审 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-AF1-001】【TP_VENDOR_AF1_001】菜单进入授权变更初审页
- 前置条件:已登录且具备厂商管理权限
- 操作步骤:
1. 按菜单「基础设置 → 厂商管理 → 授权变更初审」进入
2. 断言 URL 含 `/spd/basic/mfrs/paltform/mfrsName/authAudit`
3. 断言可见「查 询」「重 置」及制单日期筛选
- 自动化断言:与 CSV `VENDOR-AF1-001` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
进入授权变更初审页;不误入其它变更审批菜单。
---
### 授权变更初审 · 筛选与列表
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-AF1-002】【TP_VENDOR_AF1_009】默认查询列表有数据或空态明确
- 前置条件:已进入授权变更初审页
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行或空态明确
- 自动化断言:与 CSV `VENDOR-AF1-002` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
查询无报错;有数据时分页 N≥1。
---
##### 【P0】【TC-UI-VENDOR-AF1-003】【TP_VENDOR_AF1_010】按单号筛选
- 前置条件:列表至少 1 条且单号非空
- 操作步骤:
1. 从首行读取 `${sampleOrderNo}` 取关键字
2. 单号填入关键字并「查 询」
3. 断言结果行「单号」包含关键字
- 自动化断言:与 CSV `VENDOR-AF1-003` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
单号列与条件一致。
---
##### 【P0】【TC-UI-VENDOR-AF1-004】【TP_VENDOR_AF1_011】按进院供应商筛选
- 前置条件:列表至少 1 条
- 操作步骤:
1. 按样本填写或选择「进院供应商」并查询
2. 断言结果列与条件匹配
- 自动化断言:与 CSV `VENDOR-AF1-004` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
筛选条件生效。
---
##### 【P1】【TC-UI-VENDOR-AF1-005】【TP_VENDOR_AF1_012】重置恢复默认
- 前置条件:已进入授权变更初审页
- 操作步骤:
1. 填写筛选项后点击「重 置」
2. 断言文本条件清空、列表按默认规则刷新
- 自动化断言:与 CSV `VENDOR-AF1-005` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
重置成功。
---
#### 异常验证点
##### 【P1】【TC-UI-VENDOR-AF1-006】【TP_VENDOR_AF1_016】无匹配空态(mock反例)
- 前置条件:已进入授权变更初审页
- 操作步骤:
1. 单号填入 `__NOT_EXIST_ORDER__99999` 并查询
2. 断言空态且分页总数为 0
- 自动化断言:与 CSV `VENDOR-AF1-006` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
无匹配时不报错;总数为 0。
---
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-AF1-007】【TP_VENDOR_AF1_013】列表核心列完整
- 前置条件:已进入授权变更初审页
- 操作步骤:
1. 断言表头含 进院供应商名称、单号、状态、制单时间、制单人、变更类型、原供应商、预转供应商、操作
2. 断言存在「详情」操作
- 自动化断言:与 CSV `VENDOR-AF1-007` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
核心列与详情入口可见。
---
### 授权变更初审 · 详情
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-AF1-008】【TP_VENDOR_AF1_014】打开详情后返回
- 前置条件:存在含「详情」的行
- 操作步骤:
1. 点击行内「详 情」
2. 断言详情层可见且含单号片段
3. 返回/关闭,不提交审批
- 自动化断言:与 CSV `VENDOR-AF1-008` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
详情只读可返回;列表状态不变。
---
### 授权变更初审 · 筛选与列表
#### 边界验证点
##### 【P2】【TC-UI-VENDOR-AF1-009】【TP_VENDOR_AF1_015】制单日期起止同一天
- 前置条件:已进入授权变更初审页
- 操作步骤:
1. 制单日期起止选同一天并查询
2. 断言仅返回该日单据或空态明确
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
同日区间行为明确。
---
### 授权变更初审 · 详情
#### 集成验证点
##### 【P0】【TC-UI-VENDOR-AF1-010】【TP_VENDOR_AF1_018】与终审单据衔接不串单
- 前置条件:已进入授权变更初审页
- 操作步骤:
1. 记录本页某单号后切换到对应终审菜单
2. 断言同业务单据状态流转合理、不串到非本业务菜单
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
初审/终审衔接正确。
# 基础管理-厂商管理-授权变更终审 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-厂商管理-授权变更终审-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-厂商管理-授权变更终审-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/mfrs/paltform/mfrsName/authAuditFinal`
**定位器 YAML**:`locators/spd/vendor-auth-final.locator.yaml`
**元素扫描**:`data/scan/vendor-auth-final-elements.json`(40 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-VENDOR-004.md`
**版本**:2026-09-30
**自动化框架**:Playwright + TypeScript(`tests/spd/vendor-audit.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 厂商管理 → 授权变更终审」权限。
**页面约定**:整页渲染,**无报表 iframe**。
**写操作**:审批写操作只打开详情后返回,不确认通过/驳回/提交。
**动态取数**:默认查询后从首行读取 `${sampleOrderNo}`;禁止写死单号;mock:`__NOT_EXIST_ORDER__99999`。
---
## 基础设置 · 厂商管理
### 授权变更终审 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-AF2-001】【TP_VENDOR_AF2_001】菜单进入授权变更终审页
- 前置条件:已登录且具备厂商管理权限
- 操作步骤:
1. 按菜单「基础设置 → 厂商管理 → 授权变更终审」进入
2. 断言 URL 含 `/spd/basic/mfrs/paltform/mfrsName/authAuditFinal`
3. 断言可见「查 询」「重 置」及制单日期筛选
- 自动化断言:与 CSV `VENDOR-AF2-001` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
进入授权变更终审页;不误入其它变更审批菜单。
---
### 授权变更终审 · 筛选与列表
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-AF2-002】【TP_VENDOR_AF2_009】默认查询列表有数据或空态明确
- 前置条件:已进入授权变更终审页
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行或空态明确
- 自动化断言:与 CSV `VENDOR-AF2-002` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
查询无报错;有数据时分页 N≥1。
---
##### 【P0】【TC-UI-VENDOR-AF2-003】【TP_VENDOR_AF2_010】按单号筛选
- 前置条件:列表至少 1 条且单号非空
- 操作步骤:
1. 从首行读取 `${sampleOrderNo}` 取关键字
2. 单号填入关键字并「查 询」
3. 断言结果行「单号」包含关键字
- 自动化断言:与 CSV `VENDOR-AF2-003` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
单号列与条件一致。
---
##### 【P0】【TC-UI-VENDOR-AF2-004】【TP_VENDOR_AF2_011】按进院供应商筛选
- 前置条件:列表至少 1 条
- 操作步骤:
1. 按样本填写或选择「进院供应商」并查询
2. 断言结果列与条件匹配
- 自动化断言:与 CSV `VENDOR-AF2-004` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
筛选条件生效。
---
##### 【P1】【TC-UI-VENDOR-AF2-005】【TP_VENDOR_AF2_012】重置恢复默认
- 前置条件:已进入授权变更终审页
- 操作步骤:
1. 填写筛选项后点击「重 置」
2. 断言文本条件清空、列表按默认规则刷新
- 自动化断言:与 CSV `VENDOR-AF2-005` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
重置成功。
---
#### 异常验证点
##### 【P1】【TC-UI-VENDOR-AF2-006】【TP_VENDOR_AF2_016】无匹配空态(mock反例)
- 前置条件:已进入授权变更终审页
- 操作步骤:
1. 单号填入 `__NOT_EXIST_ORDER__99999` 并查询
2. 断言空态且分页总数为 0
- 自动化断言:与 CSV `VENDOR-AF2-006` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
无匹配时不报错;总数为 0。
---
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-AF2-007】【TP_VENDOR_AF2_013】列表核心列完整
- 前置条件:已进入授权变更终审页
- 操作步骤:
1. 断言表头含 进院供应商名称、单号、状态、制单时间、制单人、变更类型、原供应商、预转供应商、操作
2. 断言存在「详情」操作
- 自动化断言:与 CSV `VENDOR-AF2-007` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
核心列与详情入口可见。
---
### 授权变更终审 · 详情
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-AF2-008】【TP_VENDOR_AF2_014】打开详情后返回
- 前置条件:存在含「详情」的行
- 操作步骤:
1. 点击行内「详 情」
2. 断言详情层可见且含单号片段
3. 返回/关闭,不提交审批
- 自动化断言:与 CSV `VENDOR-AF2-008` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
详情只读可返回;列表状态不变。
---
### 授权变更终审 · 筛选与列表
#### 边界验证点
##### 【P2】【TC-UI-VENDOR-AF2-009】【TP_VENDOR_AF2_015】制单日期起止同一天
- 前置条件:已进入授权变更终审页
- 操作步骤:
1. 制单日期起止选同一天并查询
2. 断言仅返回该日单据或空态明确
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
同日区间行为明确。
---
### 授权变更终审 · 详情
#### 集成验证点
##### 【P0】【TC-UI-VENDOR-AF2-010】【TP_VENDOR_AF2_018】与初审单据衔接不串单
- 前置条件:已进入授权变更终审页
- 操作步骤:
1. 记录本页某单号后切换到对应初审菜单
2. 断言同业务单据状态流转合理、不串到非本业务菜单
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
初审/终审衔接正确。
# 基础管理-厂商管理-注册证变更初审 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-厂商管理-注册证变更初审-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-厂商管理-注册证变更初审-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/mfrs/paltform/mfrsName/regCertAudit`
**定位器 YAML**:`locators/spd/vendor-cert-first.locator.yaml`
**元素扫描**:`data/scan/vendor-cert-first-elements.json`(40 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-VENDOR-005.md`
**版本**:2026-09-30
**自动化框架**:Playwright + TypeScript(`tests/spd/vendor-audit.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 厂商管理 → 注册证变更初审」权限。
**页面约定**:整页渲染,**无报表 iframe**。
**写操作**:审批写操作只打开详情后返回,不确认通过/驳回/提交。
**动态取数**:默认查询后从首行读取 `${sampleOrderNo}`;禁止写死单号;mock:`__NOT_EXIST_ORDER__99999`。
---
## 基础设置 · 厂商管理
### 注册证变更初审 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-CF1-001】【TP_VENDOR_CF1_001】菜单进入注册证变更初审页
- 前置条件:已登录且具备厂商管理权限
- 操作步骤:
1. 按菜单「基础设置 → 厂商管理 → 注册证变更初审」进入
2. 断言 URL 含 `/spd/basic/mfrs/paltform/mfrsName/regCertAudit`
3. 断言可见「查 询」「重 置」及制单日期筛选
- 自动化断言:与 CSV `VENDOR-CF1-001` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
进入注册证变更初审页;不误入其它变更审批菜单。
---
### 注册证变更初审 · 筛选与列表
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-CF1-002】【TP_VENDOR_CF1_009】默认查询列表有数据或空态明确
- 前置条件:已进入注册证变更初审页
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行或空态明确
- 自动化断言:与 CSV `VENDOR-CF1-002` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
查询无报错;有数据时分页 N≥1。
---
##### 【P0】【TC-UI-VENDOR-CF1-003】【TP_VENDOR_CF1_010】按单号筛选
- 前置条件:列表至少 1 条且单号非空
- 操作步骤:
1. 从首行读取 `${sampleOrderNo}` 取关键字
2. 单号填入关键字并「查 询」
3. 断言结果行「单号」包含关键字
- 自动化断言:与 CSV `VENDOR-CF1-003` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
单号列与条件一致。
---
##### 【P0】【TC-UI-VENDOR-CF1-004】【TP_VENDOR_CF1_011】按注册证号(新)筛选
- 前置条件:列表至少 1 条
- 操作步骤:
1. 按样本填写或选择「注册证号(新)」并查询
2. 断言结果列与条件匹配
- 自动化断言:与 CSV `VENDOR-CF1-004` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
筛选条件生效。
---
##### 【P1】【TC-UI-VENDOR-CF1-005】【TP_VENDOR_CF1_012】重置恢复默认
- 前置条件:已进入注册证变更初审页
- 操作步骤:
1. 填写筛选项后点击「重 置」
2. 断言文本条件清空、列表按默认规则刷新
- 自动化断言:与 CSV `VENDOR-CF1-005` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
重置成功。
---
#### 异常验证点
##### 【P1】【TC-UI-VENDOR-CF1-006】【TP_VENDOR_CF1_016】无匹配空态(mock反例)
- 前置条件:已进入注册证变更初审页
- 操作步骤:
1. 单号填入 `__NOT_EXIST_ORDER__99999` 并查询
2. 断言空态且分页总数为 0
- 自动化断言:与 CSV `VENDOR-CF1-006` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
无匹配时不报错;总数为 0。
---
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-CF1-007】【TP_VENDOR_CF1_013】列表核心列完整
- 前置条件:已进入注册证变更初审页
- 操作步骤:
1. 断言表头含 进院供应商名称、单号、状态、制单时间、制单人、变更类型、注册证号(新)、操作
2. 断言存在「详情」操作
- 自动化断言:与 CSV `VENDOR-CF1-007` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
核心列与详情入口可见。
---
### 注册证变更初审 · 详情
#### 功能验证点
##### 【P0】【TC-UI-VENDOR-CF1-008】【TP_VENDOR_CF1_014】打开详情后返回
- 前置条件:存在含「详情」的行
- 操作步骤:
1. 点击行内「详 情」
2. 断言详情层可见且含单号片段
3. 返回/关闭,不提交审批
- 自动化断言:与 CSV `VENDOR-CF1-008` 及 `tests/spd/vendor-audit.spec.ts` 一致
###### 预期结果
详情只读可返回;列表状态不变。
---
### 注册证变更初审 · 筛选与列表
#### 边界验证点
##### 【P2】【TC-UI-VENDOR-CF1-009】【TP_VENDOR_CF1_015】制单日期起止同一天
- 前置条件:已进入注册证变更初审页
- 操作步骤:
1. 制单日期起止选同一天并查询
2. 断言仅返回该日单据或空态明确
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
同日区间行为明确。
---
### 注册证变更初审 · 详情
#### 集成验证点
##### 【P0】【TC-UI-VENDOR-CF1-010】【TP_VENDOR_CF1_018】与终审单据衔接不串单
- 前置条件:已进入注册证变更初审页
- 操作步骤:
1. 记录本页某单号后切换到对应终审菜单
2. 断言同业务单据状态流转合理、不串到非本业务菜单
- 自动化断言:本条以手工/后续扩展为主;当前冒烟未覆盖
###### 预期结果
初审/终审衔接正确。
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment