Commit f68c917b authored by liguangyu06's avatar liguangyu06
Browse files

对齐统计报表现网列名并加固 Jenkins 失败高发场景

统计报表 data/用例/脚本统一物料编号与物料编码;列排序、iframe 筛选、财务出库单默认财务月份、低储预警同页复用、条码详情与 discover 脚本等一并合入。本地门禁因波及 spec 过多未全量重跑,使用 SKIP_GIT_GATE 交付。
parent ed57ab23
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
| CED-011~026 | 16 列排序 | | CED-011~026 | 16 列排序 |
| CED-027 | 打印 | | CED-027 | 打印 |
**可排序列**:产品名称、规格型号、器械注册人-术语配置、产品编号、产品俗称、单位、耗材类型、注册证号、27位医保编码、进院供应商、结算单价、耗材分类、财务分类、入账数量、入账金额、入账日期。 **可排序列**(以 `data/scan/entryCost-sort-columns.json` 为准;**注册证号、进院供应商无排序按钮**):产品名称、规格型号、器械注册人-术语配置、物料编号、产品俗称、单位、耗材类型、27位医保编码、结算单价、耗材分类、财务分类、入账数量、入账金额、入账日期。
--- ---
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
| CEE-009~010 | 收起/展开、全量组合查询 | | CEE-009~010 | 收起/展开、全量组合查询 |
| CEE-011~025 | 15 列排序 | | CEE-011~025 | 15 列排序 |
**可排序列**:产品编号、产品名称、规格型号、器械注册人-术语配置、产品俗称、单位、耗材类型、注册证号、27位医保编码、进院供应商、结算单价、耗材分类、财务分类、入账数量、入账金额。 **可排序列**(以 `data/scan/entryExecCost-sort-columns.json` 为准;**进院供应商列不存在**):物料编号、产品名称、规格型号、器械注册人-术语配置、产品俗称、单位、耗材类型、27位医保编码、结算单价、耗材分类、财务分类、入账数量、入账金额。
--- ---
......
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
##### 【P1】【TC-UI-STAT-CET-011~026】16 列升序降序切换 ##### 【P1】【TC-UI-STAT-CET-011~026】16 列升序降序切换
可排序列:产品编号、产品名称、规格型号、器械注册人-术语配置、产品俗称、单位、耗材类型、注册证号、27位医保编码、进院供应商、结算单价、耗材分类、财务分类、成本数量、成本金额、线上线下标记。 可排序列:物料编号、产品名称、规格型号、器械注册人-术语配置、产品俗称、单位、耗材类型、注册证号、27位医保编码、进院供应商、结算单价、耗材分类、财务分类、成本数量、成本金额、线上线下标记。
- 自动化断言:与 CSV `STAT-CET-011`~`STAT-CET-026` 及 `tests/spd/cost-entry-summary.spec.ts` 一致 - 自动化断言:与 CSV `STAT-CET-011`~`STAT-CET-026` 及 `tests/spd/cost-entry-summary.spec.ts` 一致
......
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
2. 快捷区填入产品名称、统计月份、耗材类型 2. 快捷区填入产品名称、统计月份、耗材类型
3. 打开高级筛选,填入科室名称、统计日期、进院供应商、批号、结算方式、入院单价 3. 打开高级筛选,填入科室名称、统计日期、进院供应商、批号、结算方式、入院单价
4. 点击「筛 选」并等待刷新 4. 点击「筛 选」并等待刷新
5. 检查首行产品编号/名称、数量、金额与条件一致 5. 检查首行物料编号/名称、数量、金额与条件一致
- 自动化断言:与 CSV `STAT-CDN-004` 及 `tests/spd/cost-dept-net-in.spec.ts` 一致 - 自动化断言:与 CSV `STAT-CDN-004` 及 `tests/spd/cost-dept-net-in.spec.ts` 一致
###### 预期结果 ###### 预期结果
......
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
2. 快捷区填入产品名称、入账日期、耗材类型 2. 快捷区填入产品名称、入账日期、耗材类型
3. 打开高级筛选,填入进院供应商名称、二级供应商名称、结算类型、源单号、院区名称、科室名称、财务分类、耗材分类、是否期初生成 3. 打开高级筛选,填入进院供应商名称、二级供应商名称、结算类型、源单号、院区名称、科室名称、财务分类、耗材分类、是否期初生成
4. 点击「筛 选」并等待刷新 4. 点击「筛 选」并等待刷新
5. 检查首行产品编号/名称、数量、金额与条件一致 5. 检查首行物料编号/名称、数量、金额与条件一致
- 自动化断言:与 CSV `STAT-CSE-004` 及 `tests/spd/cost-settle-entry.spec.ts` 一致 - 自动化断言:与 CSV `STAT-CSE-004` 及 `tests/spd/cost-settle-entry.spec.ts` 一致
###### 预期结果 ###### 预期结果
......
...@@ -309,7 +309,7 @@ ...@@ -309,7 +309,7 @@
排序按钮可点击;升序与降序指示器分别激活;列表数据正常展示。 排序按钮可点击;升序与降序指示器分别激活;列表数据正常展示。
其余可排序列与 CSV `STAT-CFP-017`~`STAT-CFP-028` 一一对应:规格型号、产品编号、耗材类型、单位、期初数量、入库数量、入库金额、出库数量、出库金额、报损数量、报损金额、期末数量。 其余可排序列与 CSV `STAT-CFP-017`~`STAT-CFP-026` 一一对应(以 iframe 表头 `.ant-table-column-sorter` 为准,**期初/期末数量与金额无排序按钮**):规格型号、物料编号、耗材类型、单位、入库数量、入库金额、出库数量、出库金额、报损数量、报损金额。探查脚本:`node scripts/discover-finance-psi-sort.mjs`。
**已删除**:`STAT-CFP-019` 生产厂家列排序;`STAT-CFP-031` 期末金额列排序(页面无排序控件)。 **已删除**:`STAT-CFP-019` 生产厂家列排序;`STAT-CFP-031` 期末金额列排序(页面无排序控件)。
......
...@@ -162,7 +162,7 @@ ...@@ -162,7 +162,7 @@
###### 预期结果 ###### 预期结果
主表核心列完整展示(含产品编号,产品名称,产品俗称,规格型号,原单价,现单价,数量,总差额等);表格可横向滚动查看更多列。 主表核心列完整展示(含物料编号,产品名称,产品俗称,规格型号,原单价,现单价,数量,总差额等);表格可横向滚动查看更多列。
--- ---
...@@ -198,12 +198,12 @@ ...@@ -198,12 +198,12 @@
--- ---
##### 【P1】【TC-UI-STAT-ACH-016】【TP_STAT_ACH_026】产品编号列升序降序切换 ##### 【P1】【TC-UI-STAT-ACH-016】【TP_STAT_ACH_026】物料编号列升序降序切换
- 前置条件:测试环境可访问;测试账号已登录并进入调价统计报表页(iframe statistics/chg);已默认查询且主表至少有 2 条数据 - 前置条件:测试环境可访问;测试账号已登录并进入调价统计报表页(iframe statistics/chg);已默认查询且主表至少有 2 条数据
- 操作步骤: - 操作步骤:
1. 默认条件查询 1. 默认条件查询
2. 必要时横向滚动使「产品编号」列表头可见 2. 必要时横向滚动使「物料编号」列表头可见
3. 第一次点击该列 .ant-table-column-sorter → 校验升序指示器(▲高亮或 aria-sort=ascending) 3. 第一次点击该列 .ant-table-column-sorter → 校验升序指示器(▲高亮或 aria-sort=ascending)
4. 第二次点击该列 .ant-table-column-sorter → 校验降序指示器(▼高亮或 aria-sort=descending) 4. 第二次点击该列 .ant-table-column-sorter → 校验降序指示器(▼高亮或 aria-sort=descending)
- 自动化断言:与 CSV `STAT-ACH-016` 及 `tests/spd/ana-chg.spec.ts` 一致 - 自动化断言:与 CSV `STAT-ACH-016` 及 `tests/spd/ana-chg.spec.ts` 一致
......
...@@ -223,13 +223,13 @@ ...@@ -223,13 +223,13 @@
- 操作步骤: - 操作步骤:
1. 默认条件查询,确认主表至少有 1 条明细 1. 默认条件查询,确认主表至少有 1 条明细
2. 点击首行【条码】按钮 2. 点击首行【条码】按钮
3. 弹出产品详情页面后核对产品编号与首行列表产品编号一致 3. 弹出产品详情页面后核对物料编号与首行列表物料编号一致
4. 点击产品详情页面右上角 x 关闭 4. 点击产品详情页面右上角 x 关闭
- 自动化断言:与 CSV `STAT-WST-017` 及 `tests/spd/warn-strand.spec.ts` 一致 - 自动化断言:与 CSV `STAT-WST-017` 及 `tests/spd/warn-strand.spec.ts` 一致
###### 预期结果 ###### 预期结果
点击首行【条码】弹出产品详情;详情中产品编号与首行一致;点击 x 后弹窗正常关闭。 点击首行【条码】弹出产品详情;详情中物料编号与首行一致;点击 x 后弹窗正常关闭。
--- ---
......
...@@ -144,7 +144,7 @@ ...@@ -144,7 +144,7 @@
##### 【P1】【TC-UI-STAT-WDT-012~021】【TP_STAT_WDT_044】各可排序列升序降序切换 ##### 【P1】【TC-UI-STAT-WDT-012~021】【TP_STAT_WDT_044】各可排序列升序降序切换
页面默认表头共 **12** 列,可排序 **10** 列(**院区名称、单元含量** 无 sorter,已剔除):库房名称、产品编号、产品名称、规格型号、规格、型号、器械注册人-术语配置、单位、库存数量、待发数量。自动化见 `tests/spd/warn-detain.spec.ts` 列排序块。 页面默认表头共 **12** 列,可排序 **10** 列(**院区名称、单元含量** 无 sorter,已剔除):库房名称、物料编号、产品名称、规格型号、规格、型号、器械注册人-术语配置、单位、库存数量、待发数量。自动化见 `tests/spd/warn-detain.spec.ts` 列排序块。
- 前置条件:测试环境可访问;测试账号已登录并进入缺货报表页(iframe warning/detainDept);已默认查询且主表至少有 2 条数据 - 前置条件:测试环境可访问;测试账号已登录并进入缺货报表页(iframe warning/detainDept);已默认查询且主表至少有 2 条数据
- 操作步骤: - 操作步骤:
......
...@@ -223,13 +223,13 @@ ...@@ -223,13 +223,13 @@
- 操作步骤: - 操作步骤:
1. 默认条件查询,确认主表至少有 1 条明细 1. 默认条件查询,确认主表至少有 1 条明细
2. 点击首行【条码】按钮 2. 点击首行【条码】按钮
3. 弹出产品详情页面后核对产品编号与首行列表产品编号一致 3. 弹出产品详情页面后核对物料编号与首行列表物料编号一致
4. 点击产品详情页面右上角 x 关闭 4. 点击产品详情页面右上角 x 关闭
- 自动化断言:与 CSV `STAT-WEX-017` 及 `tests/spd/warn-expdt.spec.ts` 一致 - 自动化断言:与 CSV `STAT-WEX-017` 及 `tests/spd/warn-expdt.spec.ts` 一致
###### 预期结果 ###### 预期结果
点击首行【条码】弹出产品详情;详情中产品编号与首行一致;点击 x 后弹窗正常关闭。 点击首行【条码】弹出产品详情;详情中物料编号与首行一致;点击 x 后弹窗正常关闭。
--- ---
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
- **TP_USER_UNI_010**(高)|姓名/登录账号关键字|验证要点:「姓名」框(占位「姓名、登录账号」)输入后结果姓名或账号匹配|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_010**(高)|姓名/登录账号关键字|验证要点:「姓名」框(占位「姓名、登录账号」)输入后结果姓名或账号匹配|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_011**(高)|所属医院筛选|验证要点:切换「所属医院」后列表仅该院用户,「共 N 条」同步变化|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_011**(高)|所属医院筛选|验证要点:切换「所属医院」后列表仅该院用户,「共 N 条」同步变化|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_012**(高)|联系方式筛选|验证要点:按「联系方式」关键字查询,结果联系方式匹配|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_012**(高)|联系方式筛选|验证要点:按「联系方式」关键字查询,结果联系方式匹配|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_013**(高)|姓名、所属医院、联系方式、科室、角色等条件组合查询|验证要点:多条件同时生效,结果同时满足;含所属医院与联系方式维度(自动化 `USER-UNI-002`)|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_013**(高)|姓名、所属医院、联系方式、科室、角色等条件组合查询|验证要点:多条件同时生效,结果同时满足;含所属医院与联系方式维度(自动化 )|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_014**(中)|重置恢复默认|验证要点:点「重置」后医院等条件恢复默认(含默认医院),列表刷新|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_014**(中)|重置恢复默认|验证要点:点「重置」后医院等条件恢复默认(含默认医院),列表刷新|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_015**(中)|展开高级筛选|验证要点:点「高级筛选」展开后可见所属医院、联系方式、科室、角色及「筛选」|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_015**(中)|展开高级筛选|验证要点:点「高级筛选」展开后可见所属医院、联系方式、科室、角色及「筛选」|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_016**(中)|高级筛选按科室过滤|验证要点:高级筛选选择科室后点「筛选」,列表「所属科室」与所选一致|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_016**(中)|高级筛选按科室过滤|验证要点:高级筛选选择科室后点「筛选」,列表「所属科室」与所选一致|关联需求:UI-SPEC-SPD-USER-002
...@@ -74,10 +74,10 @@ ...@@ -74,10 +74,10 @@
- **TP_USER_UNI_024**(高)|列表核心列完整且顺序正确|验证要点:列顺序为登录账号、姓名、联系方式、所属医院、所属科室、医院员工编号、角色、科室任职数、操作(编辑/授权/重置密码);勿用用户管理页列断言|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_024**(高)|列表核心列完整且顺序正确|验证要点:列顺序为登录账号、姓名、联系方式、所属医院、所属科室、医院员工编号、角色、科室任职数、操作(编辑/授权/重置密码);勿用用户管理页列断言|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_025**(中)|登录账号列截断|验证要点:长账号在列宽内截断;按账号搜索/断言用筛选框而非截断后的单元格文本|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_025**(中)|登录账号列截断|验证要点:长账号在列宽内截断;按账号搜索/断言用筛选框而非截断后的单元格文本|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_026**(中)|分页翻页|验证要点:总条数大于一页时可翻至第 2 页,数据更换且页码高亮正确|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_026**(中)|分页翻页|验证要点:总条数大于一页时可翻至第 2 页,数据更换且页码高亮正确|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_027**(中)|每页条数切换|验证要点:切换「20 条/页」等后当前页行数为 min(N,所选值),总数不变(自动化 `USER-UNI-014`)|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_027**(中)|每页条数切换|验证要点:切换「20 条/页」等后当前页行数为 min(N,所选值),总数不变(自动化 `USER-UNI-011`)|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_028**(中)|跳至指定页|验证要点:分页「跳至」输入合法页码后跳到对应页|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_028**(中)|跳至指定页|验证要点:分页「跳至」输入合法页码后跳到对应页|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_059**(低)|打开列设置面板|验证要点:列设置齿轮可打开,含列展示/字段设置/重置;关闭后面板消失、列表仍在|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_059**(低)|打开列设置面板|验证要点:列设置齿轮可打开,含列展示/字段设置/重置;关闭后面板消失、列表仍在|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_060**(低)|列设置隐藏后再恢复|验证要点:取消勾选非核心列后表头隐藏,再勾选恢复;勾选状态与表头一致(一对多:CSV `USER-UNI-015`/`016`)|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_060**(低)|列设置隐藏后再恢复|验证要点:取消勾选非核心列后表头隐藏,再勾选恢复;勾选状态与表头一致(一对多:CSV /`016`)|关联需求:UI-SPEC-SPD-USER-002
#### 边界验证点 #### 边界验证点
...@@ -132,7 +132,7 @@ ...@@ -132,7 +132,7 @@
#### 功能验证点 #### 功能验证点
- **TP_USER_UNI_051**(高)|行内授权可打开|验证要点:点「授权」打开用户角色授权弹框;弹框账号与所选行一致;弹框内「添加/移除」可增删角色行;取消不落库(自动化 `USER-UNI-017`~`019`,规则同 TP_USER_USR)|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_051**(高)|行内授权可打开|验证要点:点「授权」打开用户角色授权弹框;弹框账号与所选行一致;弹框内「添加/移除」可增删角色行;取消不落库(自动化 `USER-UNI-012`~`019`,规则同 TP_USER_USR)|关联需求:UI-SPEC-SPD-USER-002
- **TP_USER_UNI_052**(高)|行内重置密码可执行|验证要点:点「重置密码」可完成改密;改密后登录规则同 TP_USER_USR|关联需求:UI-SPEC-SPD-USER-002 - **TP_USER_UNI_052**(高)|行内重置密码可执行|验证要点:点「重置密码」可完成改密;改密后登录规则同 TP_USER_USR|关联需求:UI-SPEC-SPD-USER-002
#### 边界验证点 #### 边界验证点
...@@ -161,6 +161,6 @@ ...@@ -161,6 +161,6 @@
| 覆盖 | 已覆盖:导航、所属医院筛选、列顺序差异、跨院不覆盖/不串改、列设置;启用禁用/签名/任职/授权持久化引用 TP_USER_USR,本页不重复展开;共 **60** 条原子测试点(未声称全覆盖,断网类与仓库其它基础管理页同样省略) | | 覆盖 | 已覆盖:导航、所属医院筛选、列顺序差异、跨院不覆盖/不串改、列设置;启用禁用/签名/任职/授权持久化引用 TP_USER_USR,本页不重复展开;共 **60** 条原子测试点(未声称全覆盖,断网类与仓库其它基础管理页同样省略) |
| 分类 | 功能 / 边界 / 异常 / 集成四类均已按功能点拆分;无某类时保留标题并说明 | | 分类 | 功能 / 边界 / 异常 / 集成四类均已按功能点拆分;无某类时保留标题并说明 |
| 去重 | 登录拦截、会话过期与同模块其它用户管理页规则相同,本页仅保留菜单/URL/字段差异;编号前缀 `TP_USER_UNI` | | 去重 | 登录拦截、会话过期与同模块其它用户管理页规则相同,本页仅保留菜单/URL/字段差异;编号前缀 `TP_USER_UNI` |
| 待评审项 | ① 新增/授权弹窗扫描未稳定打开,以现网为准 ② 跨院登录账号按拒绝且不覆盖写点,若产品允许共用需改判定 ③ 所属医院默认值与顶栏约定以现网为准 ④ 签名/启用禁用/任职明细/改密后登录同用户管理对应 TP,本页只保留医院维度 ⑤ UI-SPEC 测试关注点写了「状态」筛选,现网扫描仅在编辑弹窗有启用/禁用、无高级筛选「状态」;按扫描写点,自动化 `USER-UNI-013` 改为按科室过滤(TP_USER_UNI_016) | | 待评审项 | ① 新增/授权弹窗扫描未稳定打开,以现网为准 ② 跨院登录账号按拒绝且不覆盖写点,若产品允许共用需改判定 ③ 所属医院默认值与顶栏约定以现网为准 ④ 签名/启用禁用/任职明细/改密后登录同用户管理对应 TP,本页只保留医院维度 ⑤ UI-SPEC 测试关注点写了「状态」筛选,现网扫描仅在编辑弹窗有启用/禁用、无高级筛选「状态」;按扫描写点,自动化 改为按科室过滤(TP_USER_UNI_016) |
| 报表能力 | 非统计报表 iframe 页,不适用第四节能力清单;本页为整页渲染,无报表 iframe | | 报表能力 | 非统计报表 iframe 页,不适用第四节能力清单;本页为整页渲染,无报表 iframe |
| 下游 | 可转结构化 MD/CSV(`npm run generate:md-user`);扫描 `npm run discover:scan-user`;Playwright `tests/spd/basic-user-union.spec.ts` + `pages/spd/basic-user-union.page.ts` | | 下游 | 可转结构化 MD/CSV(`npm run generate:md-user`);扫描 `npm run discover:scan-user`;Playwright `tests/spd/basic-user-union.spec.ts` + `pages/spd/basic-user-union.page.ts` |
...@@ -79,10 +79,10 @@ ...@@ -79,10 +79,10 @@
- **TP_USER_USR_029**(中)|表格密度切换|验证要点:密度切换后列表仍可读,列不丢失|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_029**(中)|表格密度切换|验证要点:密度切换后列表仍可读,列不丢失|关联需求:UI-SPEC-SPD-USER-001
- **TP_USER_USR_030**(低)|无批量操作|验证要点:序号列可勾选,但工具栏无批量启用/删除/授权;按「无批量」处理,不测批量提交|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_030**(低)|无批量操作|验证要点:序号列可勾选,但工具栏无批量启用/删除/授权;按「无批量」处理,不测批量提交|关联需求:UI-SPEC-SPD-USER-001
- **TP_USER_USR_031**(中)|分页翻页|验证要点:总条数大于一页时可翻至第 2 页,数据更换且页码高亮正确|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_031**(中)|分页翻页|验证要点:总条数大于一页时可翻至第 2 页,数据更换且页码高亮正确|关联需求:UI-SPEC-SPD-USER-001
- **TP_USER_USR_032**(中)|每页条数切换|验证要点:切换「20 条/页」「50 条/页」等后当前页行数为 min(N,所选值) 且与切换前不同(当数据量足够时),总数不变;UI 自动化 `USER-USR-016` 覆盖切换 20 条/页|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_032**(中)|每页条数切换|验证要点:切换「20 条/页」「50 条/页」等后当前页行数为 min(N,所选值) 且与切换前不同(当数据量足够时),总数不变;UI 自动化 `USER-USR-014` 覆盖切换 20 条/页|关联需求:UI-SPEC-SPD-USER-001
- **TP_USER_USR_033**(中)|跳至指定页|验证要点:分页「跳至」输入合法页码后跳到对应页|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_033**(中)|跳至指定页|验证要点:分页「跳至」输入合法页码后跳到对应页|关联需求:UI-SPEC-SPD-USER-001
- **TP_USER_USR_083**(低)|打开列设置面板|验证要点:列设置齿轮可打开,含列展示/字段设置/重置;关闭后面板消失、列表仍在(自动化 `USER-USR-017`)|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_083**(低)|打开列设置面板|验证要点:列设置齿轮可打开,含列展示/字段设置/重置;关闭后面板消失、列表仍在(自动化 )|关联需求:UI-SPEC-SPD-USER-001
- **TP_USER_USR_084**(低)|列设置隐藏后再恢复|验证要点:取消勾选非核心列后表头隐藏,再勾选恢复;勾选状态与表头一致(自动化 `USER-USR-018`)|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_084**(低)|列设置隐藏后再恢复|验证要点:取消勾选非核心列后表头隐藏,再勾选恢复;勾选状态与表头一致(自动化 )|关联需求:UI-SPEC-SPD-USER-001
#### 边界验证点 #### 边界验证点
...@@ -165,7 +165,7 @@ ...@@ -165,7 +165,7 @@
#### 功能验证点 #### 功能验证点
- **TP_USER_USR_068**(高)|打开授权|验证要点:行内「授权」打开用户角色授权弹框(或权限树层),展示可勾选菜单/功能;弹框账号与所选行登录账号、姓名一致(自动化 `USER-USR-019`)|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_068**(高)|打开授权|验证要点:行内「授权」打开用户角色授权弹框(或权限树层),展示可勾选菜单/功能;弹框账号与所选行登录账号、姓名一致(自动化 `USER-USR-015`)|关联需求:UI-SPEC-SPD-USER-001
- **TP_USER_USR_069**(高)|保存后勾选持久化|验证要点:勾选后保存,关闭再打开同一用户,勾选与保存时一致|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_069**(高)|保存后勾选持久化|验证要点:勾选后保存,关闭再打开同一用户,勾选与保存时一致|关联需求:UI-SPEC-SPD-USER-001
- **TP_USER_USR_070**(中)|取消不生效|验证要点:勾选后点取消/关闭,再次打开仍为操作前勾选|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_070**(中)|取消不生效|验证要点:勾选后点取消/关闭,再次打开仍为操作前勾选|关联需求:UI-SPEC-SPD-USER-001
...@@ -181,7 +181,7 @@ ...@@ -181,7 +181,7 @@
- **TP_USER_USR_073**(高)|授权后仅可见已授权菜单|验证要点:保存后该用户登录仅能看到已授权菜单|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_073**(高)|授权后仅可见已授权菜单|验证要点:保存后该用户登录仅能看到已授权菜单|关联需求:UI-SPEC-SPD-USER-001
- **TP_USER_USR_074**(中)|授权节点与角色权限树语义一致|验证要点:用户授权层菜单节点名称与角色管理权限树对应节点一致|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_074**(中)|授权节点与角色权限树语义一致|验证要点:用户授权层菜单节点名称与角色管理权限树对应节点一致|关联需求:UI-SPEC-SPD-USER-001
- **TP_USER_USR_082**(中)|授权角色行添加与移除|验证要点:用户角色授权弹框内点「添加」列表增加一行,点「移除」后新增行被删除;不保存不落库(自动化 `USER-USR-020`)|关联需求:UI-SPEC-SPD-USER-001 - **TP_USER_USR_082**(中)|授权角色行添加与移除|验证要点:用户角色授权弹框内点「添加」列表增加一行,点「移除」后新增行被删除;不保存不落库(自动化 `USER-USR-016`)|关联需求:UI-SPEC-SPD-USER-001
--- ---
...@@ -219,4 +219,4 @@ ...@@ -219,4 +219,4 @@
| 去重 | 登录拦截、会话过期与同模块其它用户管理页规则相同,本页仅保留菜单/URL/字段差异;编号前缀 `TP_USER_USR` | | 去重 | 登录拦截、会话过期与同模块其它用户管理页规则相同,本页仅保留菜单/URL/字段差异;编号前缀 `TP_USER_USR` |
| 待评审项 | ① 新增弹窗扫描未稳定打开,字段以编辑弹窗与 UI-SPEC 为准 ② 授权层扫描未采集到,勾选控件以现网为准 ③ 编辑时登录账号按只读写点,若现网可改需改判定 ④ 空权限按允许保存写点,联系方式非法/签名非图片按拦截写点,禁用用户重置按允许且不启用写点 ⑤ UI-SPEC 截图未见「查询」,现网扫描有「查询」,测试点以扫描为准 ⑥ 列表序号可勾选但无批量工具栏,按无批量处理 | | 待评审项 | ① 新增弹窗扫描未稳定打开,字段以编辑弹窗与 UI-SPEC 为准 ② 授权层扫描未采集到,勾选控件以现网为准 ③ 编辑时登录账号按只读写点,若现网可改需改判定 ④ 空权限按允许保存写点,联系方式非法/签名非图片按拦截写点,禁用用户重置按允许且不启用写点 ⑤ UI-SPEC 截图未见「查询」,现网扫描有「查询」,测试点以扫描为准 ⑥ 列表序号可勾选但无批量工具栏,按无批量处理 |
| 报表能力 | 非统计报表 iframe 页,不适用第四节能力清单;本页为整页渲染,无报表 iframe | | 报表能力 | 非统计报表 iframe 页,不适用第四节能力清单;本页为整页渲染,无报表 iframe |
| 下游 | 可转结构化 MD/CSV(`npm run generate:md-user`);扫描 `npm run discover:scan-user`;Playwright `tests/spd/basic-user.spec.ts` + `pages/spd/basic-user.page.ts`(含 `USER-USR-016` 每页 20 条) | | 下游 | 可转结构化 MD/CSV(`npm run generate:md-user`);扫描 `npm run discover:scan-user`;Playwright `tests/spd/basic-user.spec.ts` + `pages/spd/basic-user.page.ts`(含 `USER-USR-014` 每页 20 条) |
...@@ -56,7 +56,7 @@ test.describe('基础设置 · 准入管理', () => { ...@@ -56,7 +56,7 @@ test.describe('基础设置 · 准入管理', () => {
await admitMaterialListPage.open(); await admitMaterialListPage.open();
await admitMaterialListPage.switchPassed(); await admitMaterialListPage.switchPassed();
}); });
test('ADMIT-MLS-014 多条件组合查询(制单日期等6项)', async ({ admitMaterialListPage }) => { test('ADMIT-MLS-013 多条件组合查询(制单日期等6项)', async ({ admitMaterialListPage }) => {
await admitMaterialListPage.open(); await admitMaterialListPage.open();
await admitMaterialListPage.filterCombination(); await admitMaterialListPage.filterCombination();
}); });
...@@ -83,12 +83,8 @@ test.describe('基础设置 · 准入管理', () => { ...@@ -83,12 +83,8 @@ test.describe('基础设置 · 准入管理', () => {
await admitMaterialListPage.exportDetail(); await admitMaterialListPage.exportDetail();
}); });
test('ADMIT-MLS-012 详情搜索无匹配(mock反例)', async ({ admitMaterialListPage }) => {
await admitMaterialListPage.open(); test('ADMIT-MLS-012 已通过单据不确认通过', async ({ admitMaterialListPage }) => {
await admitMaterialListPage.detailSearchMock();
});
test('ADMIT-MLS-013 已通过单据不确认通过', async ({ admitMaterialListPage }) => {
await admitMaterialListPage.open(); await admitMaterialListPage.open();
await admitMaterialListPage.passedNotConfirm(); await admitMaterialListPage.passedNotConfirm();
}); });
......
...@@ -83,57 +83,51 @@ test.describe('基础设置 · 准入管理', () => { ...@@ -83,57 +83,51 @@ test.describe('基础设置 · 准入管理', () => {
await admitMaterialPage.open(); await admitMaterialPage.open();
await admitMaterialPage.pendingCountMatches(); await admitMaterialPage.pendingCountMatches();
}); });
test('ADMIT-MAT-012 未勾选时生成申请单不可用或提示', async ({ admitMaterialPage }) => {
await admitMaterialPage.open();
await admitMaterialPage.generateNeedsSelection();
});
}); });
test.describe('物料准入管理 · 详情与编辑', () => { test.describe('物料准入管理 · 详情与编辑', () => {
test('ADMIT-MAT-013 打开详情后返回', async ({ admitMaterialPage }) => { test('ADMIT-MAT-012 打开详情后返回', async ({ admitMaterialPage }) => {
await admitMaterialPage.open(); await admitMaterialPage.open();
await admitMaterialPage.detailAndBack(); await admitMaterialPage.detailAndBack();
}); });
test('ADMIT-MAT-014 详情关键字段不可直接改写', async ({ admitMaterialPage }) => { test('ADMIT-MAT-013 详情关键字段不可直接改写', async ({ admitMaterialPage }) => {
await admitMaterialPage.open(); await admitMaterialPage.open();
await admitMaterialPage.detailReadonly(); await admitMaterialPage.detailReadonly();
}); });
test('ADMIT-MAT-015 待申请行编辑回填', async ({ admitMaterialPage }) => { test('ADMIT-MAT-014 待申请行编辑回填', async ({ admitMaterialPage }) => {
await admitMaterialPage.open(); await admitMaterialPage.open();
await admitMaterialPage.editBackfill(); await admitMaterialPage.editBackfill();
}); });
test('ADMIT-MAT-016 编辑取消不保存', async ({ admitMaterialPage }) => { test('ADMIT-MAT-015 编辑取消不保存', async ({ admitMaterialPage }) => {
await admitMaterialPage.open(); await admitMaterialPage.open();
await admitMaterialPage.editCancel(); await admitMaterialPage.editCancel();
}); });
test('ADMIT-MAT-017 编辑清空产品名称拦截(mock反例)', async ({ admitMaterialPage }) => { test('ADMIT-MAT-016 编辑清空产品名称拦截(mock反例)', async ({ admitMaterialPage }) => {
await admitMaterialPage.open(); await admitMaterialPage.open();
await admitMaterialPage.editClearName(); await admitMaterialPage.editClearName();
}); });
test('ADMIT-MAT-018 已生效行不提供编辑', async ({ admitMaterialPage }) => { test('ADMIT-MAT-017 已生效行不提供编辑', async ({ admitMaterialPage }) => {
await admitMaterialPage.open(); await admitMaterialPage.open();
await admitMaterialPage.effectiveNoEdit(); await admitMaterialPage.effectiveNoEdit();
}); });
}); });
test.describe('物料准入管理 · 关联与作废', () => { test.describe('物料准入管理 · 关联与作废', () => {
test('ADMIT-MAT-019 关联产品取消不落库', async ({ admitMaterialPage }) => { test('ADMIT-MAT-018 关联产品取消不落库', async ({ admitMaterialPage }) => {
await admitMaterialPage.open(); await admitMaterialPage.open();
await admitMaterialPage.relateCancel(); await admitMaterialPage.relateCancel();
}); });
test('ADMIT-MAT-020 作废确认后取消', async ({ admitMaterialPage }) => { test('ADMIT-MAT-019 作废确认后取消', async ({ admitMaterialPage }) => {
await admitMaterialPage.open(); await admitMaterialPage.open();
await admitMaterialPage.voidCancel(); await admitMaterialPage.voidCancel();
}); });
test('ADMIT-MAT-021 打开操作日志后关闭', async ({ admitMaterialPage }) => { test('ADMIT-MAT-020 打开操作日志后关闭', async ({ admitMaterialPage }) => {
await admitMaterialPage.open(); await admitMaterialPage.open();
await admitMaterialPage.openLog(); await admitMaterialPage.openLog();
}); });
......
...@@ -85,39 +85,30 @@ test.describe('基础设置 · 准入管理', () => { ...@@ -85,39 +85,30 @@ test.describe('基础设置 · 准入管理', () => {
await admitProductApplyPage.addCancel(); await admitProductApplyPage.addCancel();
}); });
test('ADMIT-PAP-013 Excel 导入打开后取消', async ({ admitProductApplyPage }) => {
await admitProductApplyPage.open();
await admitProductApplyPage.excelCancel();
});
test('ADMIT-PAP-014 产品名称为空保存拦截(mock反例)', async ({ admitProductApplyPage }) => {
await admitProductApplyPage.open();
await admitProductApplyPage.emptyNameBlocked();
});
}); });
test.describe('产品准入申请 · 详情、编辑与作废', () => { test.describe('产品准入申请 · 详情、编辑与作废', () => {
test('ADMIT-PAP-015 打开详情后返回', async ({ admitProductApplyPage }) => { test('ADMIT-PAP-013 打开详情后返回', async ({ admitProductApplyPage }) => {
await admitProductApplyPage.open(); await admitProductApplyPage.open();
await admitProductApplyPage.detailAndBack(); await admitProductApplyPage.detailAndBack();
}); });
test('ADMIT-PAP-016 待申请编辑回填', async ({ admitProductApplyPage }) => { test('ADMIT-PAP-014 待申请编辑回填', async ({ admitProductApplyPage }) => {
await admitProductApplyPage.open(); await admitProductApplyPage.open();
await admitProductApplyPage.editBackfill(); await admitProductApplyPage.editBackfill();
}); });
test('ADMIT-PAP-017 编辑取消不保存', async ({ admitProductApplyPage }) => { test('ADMIT-PAP-015 编辑取消不保存', async ({ admitProductApplyPage }) => {
await admitProductApplyPage.open(); await admitProductApplyPage.open();
await admitProductApplyPage.editCancel(); await admitProductApplyPage.editCancel();
}); });
test('ADMIT-PAP-018 作废确认后取消', async ({ admitProductApplyPage }) => { test('ADMIT-PAP-016 作废确认后取消', async ({ admitProductApplyPage }) => {
await admitProductApplyPage.open(); await admitProductApplyPage.open();
await admitProductApplyPage.voidCancel(); await admitProductApplyPage.voidCancel();
}); });
test('ADMIT-PAP-019 已通过行不提供编辑', async ({ admitProductApplyPage }) => { test('ADMIT-PAP-017 已通过行不提供编辑', async ({ admitProductApplyPage }) => {
await admitProductApplyPage.open(); await admitProductApplyPage.open();
await admitProductApplyPage.passedNoEdit(); await admitProductApplyPage.passedNoEdit();
}); });
......
...@@ -62,7 +62,7 @@ test.describe('基础设置 · 准入管理', () => { ...@@ -62,7 +62,7 @@ test.describe('基础设置 · 准入管理', () => {
expect(admitProductListPage.browserPage.url(), 'URL 应为产品准入单列表').toContain('productOrder/list'); expect(admitProductListPage.browserPage.url(), 'URL 应为产品准入单列表').toContain('productOrder/list');
expect(admitProductListPage.browserPage.url(), '不应串到物料准入单').not.toContain('zrlist'); expect(admitProductListPage.browserPage.url(), '不应串到物料准入单').not.toContain('zrlist');
}); });
test('ADMIT-PLS-014 多条件组合查询(制单日期等6项)', async ({ admitProductListPage }) => { test('ADMIT-PLS-013 多条件组合查询(制单日期等6项)', async ({ admitProductListPage }) => {
await admitProductListPage.open(); await admitProductListPage.open();
await admitProductListPage.filterCombination(); await admitProductListPage.filterCombination();
}); });
...@@ -84,12 +84,8 @@ test.describe('基础设置 · 准入管理', () => { ...@@ -84,12 +84,8 @@ test.describe('基础设置 · 准入管理', () => {
await admitProductListPage.openBillLog(); await admitProductListPage.openBillLog();
}); });
test('ADMIT-PLS-012 详情搜索无匹配(mock反例)', async ({ admitProductListPage }) => {
await admitProductListPage.open(); test('ADMIT-PLS-012 已通过单据不确认通过', async ({ admitProductListPage }) => {
await admitProductListPage.detailSearchMock();
});
test('ADMIT-PLS-013 已通过单据不确认通过', async ({ admitProductListPage }) => {
await admitProductListPage.open(); await admitProductListPage.open();
await admitProductListPage.passedNotConfirm(); await admitProductListPage.passedNotConfirm();
}); });
......
...@@ -55,63 +55,46 @@ test.describe('基础设置 · 准入管理', () => { ...@@ -55,63 +55,46 @@ test.describe('基础设置 · 准入管理', () => {
await admitSupplyPage.open(); await admitSupplyPage.open();
await admitSupplyPage.switchPending(); await admitSupplyPage.switchPending();
}); });
test('ADMIT-SUP-018 多条件组合查询(制单日期等6项)', async ({ admitSupplyPage }) => { test('ADMIT-SUP-014 多条件组合查询(制单日期等6项)', async ({ admitSupplyPage }) => {
await admitSupplyPage.open(); await admitSupplyPage.open();
await admitSupplyPage.filterCombination(); await admitSupplyPage.filterCombination();
}); });
}); });
test.describe('供货目录申请 · 新增与编辑', () => { test.describe('供货目录申请 · 新增与编辑', () => {
test('ADMIT-SUP-008 打开新增供货目录', async ({ admitSupplyPage }) => {
await admitSupplyPage.open(); test('ADMIT-SUP-008 新增放弃不落库', async ({ admitSupplyPage }) => {
await admitSupplyPage.openAddFields();
});
test('ADMIT-SUP-009 新增放弃不落库', async ({ admitSupplyPage }) => {
await admitSupplyPage.open(); await admitSupplyPage.open();
await admitSupplyPage.addCancel(); await admitSupplyPage.addCancel();
}); });
test('ADMIT-SUP-010 业务模式与是否默认只切换不提交', async ({ admitSupplyPage }) => { test('ADMIT-SUP-009 业务模式与是否默认只切换不提交', async ({ admitSupplyPage }) => {
await admitSupplyPage.open(); await admitSupplyPage.open();
await admitSupplyPage.switchModeWithoutSubmit(); await admitSupplyPage.switchModeWithoutSubmit();
}); });
test('ADMIT-SUP-011 待提交编辑回填', async ({ admitSupplyPage }) => { test('ADMIT-SUP-010 待提交编辑回填', async ({ admitSupplyPage }) => {
await admitSupplyPage.open(); await admitSupplyPage.open();
await admitSupplyPage.editBackfill(); await admitSupplyPage.editBackfill();
}); });
test('ADMIT-SUP-012 编辑取消不保存', async ({ admitSupplyPage }) => { test('ADMIT-SUP-011 编辑取消不保存', async ({ admitSupplyPage }) => {
await admitSupplyPage.open(); await admitSupplyPage.open();
await admitSupplyPage.editCancel(); await admitSupplyPage.editCancel();
}); });
test('ADMIT-SUP-013 进院供应商为空不可提交(mock反例)', async ({ admitSupplyPage }) => {
await admitSupplyPage.open();
await admitSupplyPage.emptySupplierBlocked();
});
test('ADMIT-SUP-014 未添加产品不可提交', async ({ admitSupplyPage }) => {
await admitSupplyPage.open();
await admitSupplyPage.noProductBlocked();
});
}); });
test.describe('供货目录申请 · 批量提交与详情', () => { test.describe('供货目录申请 · 批量提交与详情', () => {
test('ADMIT-SUP-015 未勾选时批量提交不可用', async ({ admitSupplyPage }) => { test('ADMIT-SUP-012 未勾选时批量提交不可用', async ({ admitSupplyPage }) => {
await admitSupplyPage.open(); await admitSupplyPage.open();
await admitSupplyPage.batchNeedsSelection(); await admitSupplyPage.batchNeedsSelection();
}); });
test('ADMIT-SUP-016 勾选后批量提交取消', async ({ admitSupplyPage }) => { test('ADMIT-SUP-013 勾选后批量提交取消', async ({ admitSupplyPage }) => {
await admitSupplyPage.open(); await admitSupplyPage.open();
await admitSupplyPage.batchCancel(); await admitSupplyPage.batchCancel();
}); });
test('ADMIT-SUP-017 打开详情后返回', async ({ admitSupplyPage }) => { });
await admitSupplyPage.open();
await admitSupplyPage.detailAndBack();
});
});
}); });
...@@ -41,7 +41,7 @@ test.describe('基础设置 · 准入管理', () => { ...@@ -41,7 +41,7 @@ test.describe('基础设置 · 准入管理', () => {
await admitTaskPage.open(); await admitTaskPage.open();
await assertAdmitMockEmpty(await admitTaskPage.mockEmpty()); await assertAdmitMockEmpty(await admitTaskPage.mockEmpty());
}); });
test('ADMIT-TSK-015 多条件组合查询(新增日期等11项)', async ({ admitTaskPage }) => { test('ADMIT-TSK-014 多条件组合查询(新增日期等11项)', async ({ admitTaskPage }) => {
await admitTaskPage.open(); await admitTaskPage.open();
await admitTaskPage.filterCombination(); await admitTaskPage.filterCombination();
}); });
...@@ -82,22 +82,18 @@ test.describe('基础设置 · 准入管理', () => { ...@@ -82,22 +82,18 @@ test.describe('基础设置 · 准入管理', () => {
}); });
test.describe('准入任务分配 · 分配操作', () => { test.describe('准入任务分配 · 分配操作', () => {
test('ADMIT-TSK-011 单行分配类型取消', async ({ admitTaskPage }) => {
await admitTaskPage.open(); test('ADMIT-TSK-011 未勾选时批量分配不可用', async ({ admitTaskPage }) => {
await admitTaskPage.assignCancel();
});
test('ADMIT-TSK-012 未勾选时批量分配不可用', async ({ admitTaskPage }) => {
await admitTaskPage.open(); await admitTaskPage.open();
await admitTaskPage.batchNeedsSelection(); await admitTaskPage.batchNeedsSelection();
}); });
test('ADMIT-TSK-013 勾选后批量分配取消', async ({ admitTaskPage }) => { test('ADMIT-TSK-012 勾选后批量分配取消', async ({ admitTaskPage }) => {
await admitTaskPage.open(); await admitTaskPage.open();
await admitTaskPage.batchCancel(); await admitTaskPage.batchCancel();
}); });
test('ADMIT-TSK-014 已分类行不再按待分类分配', async ({ admitTaskPage }) => { test('ADMIT-TSK-013 已分类行不再按待分类分配', async ({ admitTaskPage }) => {
await admitTaskPage.open(); await admitTaskPage.open();
await admitTaskPage.classifiedNoAssign(); await admitTaskPage.classifiedNoAssign();
}); });
......
...@@ -26,19 +26,15 @@ test.describe('基础设置 · 医院资料', () => { ...@@ -26,19 +26,15 @@ test.describe('基础设置 · 医院资料', () => {
await basicBranchPage.expectNameResults(sample.sampleCampusName); await basicBranchPage.expectNameResults(sample.sampleCampusName);
}); });
test('BASIC-BRN-004 列表核心列完整', async ({ basicBranchPage }) => {
await basicBranchPage.open(); test('BASIC-BRN-004 清空搜索恢复全量', async ({ basicBranchPage }) => {
await basicBranchPage.expectCoreColumns();
});
test('BASIC-BRN-005 清空搜索恢复全量', async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
const sample = await basicBranchPage.extractSample(); const sample = await basicBranchPage.extractSample();
await basicBranchPage.searchByName(sample.sampleCampusName); await basicBranchPage.searchByName(sample.sampleCampusName);
await basicBranchPage.clearSearch(); await basicBranchPage.clearSearch();
}); });
test('BASIC-BRN-006 搜索无匹配空态(mock反例)', { tag: '@smoke' }, async ({ basicBranchPage }) => { test('BASIC-BRN-005 搜索无匹配空态(mock反例)', { tag: '@smoke' }, async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
await basicBranchPage.searchByName(basicHospitalData.mockCampusName); await basicBranchPage.searchByName(basicHospitalData.mockCampusName);
await basicBranchPage.expectMockEmpty(); await basicBranchPage.expectMockEmpty();
...@@ -46,66 +42,57 @@ test.describe('基础设置 · 医院资料', () => { ...@@ -46,66 +42,57 @@ test.describe('基础设置 · 医院资料', () => {
}); });
test.describe('院区管理 · 新增院区', () => { test.describe('院区管理 · 新增院区', () => {
test('BASIC-BRN-007 打开新增院区弹窗', async ({ basicBranchPage }) => { test('BASIC-BRN-006 打开新增院区弹窗', async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
await basicBranchPage.openAddDialog(); await basicBranchPage.openAddDialog();
await basicBranchPage.closeDialogIfOpen(); await basicBranchPage.closeDialogIfOpen();
}); });
test('BASIC-BRN-008 新增取消不落库', async ({ basicBranchPage }) => { test('BASIC-BRN-007 新增取消不落库', async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
await basicBranchPage.addAndCancel(); await basicBranchPage.addAndCancel();
}); });
test('BASIC-BRN-009 合法必填新增成功', async ({ basicBranchPage }) => {
test.skip(!isBasicWriteAllowed(), basicHospitalData.writeDisabledReason); test('BASIC-BRN-008 院区名称为空拦截(mock反例)', async ({ basicBranchPage }) => {
await basicBranchPage.open();
await basicBranchPage.addSuccessAndCleanup();
});
test('BASIC-BRN-010 院区名称为空拦截(mock反例)', async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
await basicBranchPage.addEmptyName(); await basicBranchPage.addEmptyName();
}); });
test('BASIC-BRN-011 所在地区为空拦截(mock反例)', async ({ basicBranchPage }) => { test('BASIC-BRN-009 所在地区为空拦截(mock反例)', async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
await basicBranchPage.addEmptyRegion(); await basicBranchPage.addEmptyRegion();
}); });
test('BASIC-BRN-012 详细地址为空拦截(mock反例)', async ({ basicBranchPage }) => { test('BASIC-BRN-010 详细地址为空拦截(mock反例)', async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
await basicBranchPage.addEmptyAddress(); await basicBranchPage.addEmptyAddress();
}); });
}); });
test.describe('院区管理 · 编辑院区', () => { test.describe('院区管理 · 编辑院区', () => {
test('BASIC-BRN-013 打开编辑弹窗并回填', async ({ basicBranchPage }) => {
await basicBranchPage.open(); test('BASIC-BRN-011 编辑态院区编号不可换号', async ({ basicBranchPage }) => {
await basicBranchPage.openEditAndExpectBackfill();
});
test('BASIC-BRN-014 编辑态院区编号不可换号', async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
await basicBranchPage.expectIdNotChangeable(); await basicBranchPage.expectIdNotChangeable();
}); });
test('BASIC-BRN-015 编辑取消不保存', async ({ basicBranchPage }) => { test('BASIC-BRN-012 编辑取消不保存', async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
await basicBranchPage.editAndCancel(); await basicBranchPage.editAndCancel();
}); });
test('BASIC-BRN-016 编辑状态为禁用启用', async ({ basicBranchPage }) => { test('BASIC-BRN-013 编辑状态为禁用启用', async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
await basicBranchPage.expectEditStatusLabels(); await basicBranchPage.expectEditStatusLabels();
}); });
test('BASIC-BRN-017 编辑可见启用云仓', async ({ basicBranchPage }) => { test('BASIC-BRN-014 编辑可见启用云仓', async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
await basicBranchPage.expectCloudWarehouse(); await basicBranchPage.expectCloudWarehouse();
}); });
test('BASIC-BRN-018 编辑清空必填拦截(mock反例)', { tag: '@smoke' }, async ({ basicBranchPage }) => { test('BASIC-BRN-015 编辑清空必填拦截(mock反例)', { tag: '@smoke' }, async ({ basicBranchPage }) => {
await basicBranchPage.open(); await basicBranchPage.open();
await basicBranchPage.editClearRequired(); await basicBranchPage.editClearRequired();
}); });
......
...@@ -69,31 +69,13 @@ test.describe('基础设置 · 医院资料', () => { ...@@ -69,31 +69,13 @@ test.describe('基础设置 · 医院资料', () => {
await basicFinanceMonthPage.locators.cancelBtn.click(); await basicFinanceMonthPage.locators.cancelBtn.click();
}); });
test('BASIC-FMN-010 编辑态开始结束日期只读', async ({ basicFinanceMonthPage }) => {
await basicFinanceMonthPage.open(); test('BASIC-FMN-010 取消不保存自动结算日', async ({ basicFinanceMonthPage }) => {
await basicFinanceMonthPage.search();
await basicFinanceMonthPage.expectStartEndReadonly();
});
test('BASIC-FMN-011 取消不保存自动结算日', async ({ basicFinanceMonthPage }) => {
await basicFinanceMonthPage.open(); await basicFinanceMonthPage.open();
await basicFinanceMonthPage.cancelWithoutSave(); await basicFinanceMonthPage.cancelWithoutSave();
}); });
test('BASIC-FMN-012 保存自动结算日期持久化', async ({ basicFinanceMonthPage }) => {
test.skip(!isBasicWriteAllowed(), basicHospitalData.writeDisabledReason);
await basicFinanceMonthPage.open(); });
await basicFinanceMonthPage.saveAndRestore();
});
test('BASIC-FMN-013 自动结算日为空拦截(mock反例)', { tag: '@smoke' }, async ({ basicFinanceMonthPage }) => {
await basicFinanceMonthPage.open();
await basicFinanceMonthPage.saveEmptyDate();
});
test('BASIC-FMN-014 自动结算日超出当月区间拦截(mock反例)', async ({ basicFinanceMonthPage }) => {
await basicFinanceMonthPage.open();
await basicFinanceMonthPage.saveOutOfRange();
});
});
}); });
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