Commit 97840769 authored by liguangyu06's avatar liguangyu06
Browse files

新增期初管理全链路自动化资产,并加固产品管理用例与清理冗余截图。

紧急放行原因:用户要求立即推送今日改动备份,门禁用例待后续补跑。
parent 3dbf401d
/** 期初管理:路径、菜单、mock、列表列(与 CSV/MD 一致)。 */
export const openMenuGroup = '期初管理';
export const openMock = '__NOT_EXIST_OPEN__99999';
export type OpenPageKey = 'entry' | 'detail' | 'scan';
/** 组合查询字段(对齐 STAT-IOD-004:配置驱动,样本有值才写)。 */
export type OpenComboFieldDef = {
key: string;
label: string;
type: 'text' | 'date' | 'select';
/** 列表取样列名 */
column: string;
/** 可选:精确 form input 选择器 */
formId?: string;
};
export type OpenPageMeta = {
key: OpenPageKey;
code: string;
name: string;
path: string;
pathPart: string;
forbidden: string[];
mock: string;
headers: string[];
rowOps: string[];
page2Header: string;
mockPlaceholder: RegExp;
addLabel?: string;
columnSettingsToggleCandidates?: readonly string[];
sortColumns?: readonly string[];
/** 进页前置默认日期区间(如扫码日期),写入后查询 */
defaultDateRange?: { label: string; start: string; end: string; formId?: string };
fixture: string;
specFile: string;
csv: string;
};
/** 快速盘点记录 CSV 前置:扫码日期默认区间。 */
export const openScanDefaultDateRange = {
label: '扫码日期',
start: '2026-05-06',
end: '2026-11-06',
formId: '#table_search_form_scanDate',
} as const;
/** 产品「重置」后扫码日期默认:近一个月(结束日=当天)。 */
export function openScanProductResetDateRange(now = new Date()): { start: string; end: string } {
const pad = (n: number) => String(n).padStart(2, '0');
const fmt = (d: Date) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
const end = new Date(now.getFullYear(), now.getMonth(), now.getDate());
const start = new Date(end);
start.setMonth(start.getMonth() - 1);
return { start: fmt(start), end: fmt(end) };
}
/** 快速盘点记录 · 快捷区全量可见条件(展开后含扫码人;无高级筛选抽屉)。 */
export const openScanComboQuickFields: readonly OpenComboFieldDef[] = [
{ key: 'scanDate', label: '扫码日期', type: 'date', column: '扫码时间', formId: '#table_search_form_scanDate' },
{ key: 'deptName', label: '科室名称', type: 'text', column: '科室名称', formId: '#table_search_form_deptName' },
{ key: 'barcodeNo', label: '条码号', type: 'text', column: '条码号', formId: '#table_search_form_code' },
{ key: 'scanUser', label: '扫码人', type: 'text', column: '扫码人', formId: '#table_search_form_createUser' },
];
/** 本页无高级筛选抽屉,保持空数组以对齐 searchWithQuickAndDrawerCombo 契约。 */
export const openScanComboDrawerFields: readonly OpenComboFieldDef[] = [];
export const openScanComboAssertKeys = ['deptName', 'barcodeNo', 'scanUser'] as const;
/** 期初明细查询 · 快捷区(库房 / 期初单号 / 耗材类型)。 */
export const openDetailComboQuickFields: readonly OpenComboFieldDef[] = [
{ key: 'warehouse', label: '库房', type: 'select', column: '库房' },
{
key: 'orderNo',
label: '期初单号',
type: 'text',
column: '期初单号',
formId: '#form_item_orderNo',
},
{ key: 'purMode', label: '耗材类型', type: 'select', column: '耗材类型' },
];
/**
* 期初明细查询 · 高级筛选抽屉。
* 物料名称在宽表右侧,取样列名为「物料名称」。
*/
export const openDetailComboDrawerFields: readonly OpenComboFieldDef[] = [
{ key: 'inSettlement', label: '结算方式', type: 'select', column: '结算方式' },
{
key: 'goodsName',
label: '物料名称',
type: 'text',
column: '物料名称',
formId: '#form_item_goodsName',
},
{
key: 'generateTime',
label: '生成时间',
type: 'date',
column: '生成时间',
formId: '#form_item_generateTime',
},
];
export const openDetailComboAssertKeys = [
'warehouse',
'orderNo',
'purMode',
'inSettlement',
'goodsName',
] as const;
const paths = {
entry: 'init/import',
detail: 'init/detail',
scan: 'init/scanRecord',
} as const;
const forbiddenOthers = (own: string): string[] =>
Object.values(paths).filter((p) => p !== own);
export const openPages: Record<OpenPageKey, OpenPageMeta> = {
entry: {
key: 'entry',
code: 'OPEN-ENT',
name: '期初录入',
path: '/spd/start/init/import',
pathPart: paths.entry,
forbidden: forbiddenOthers(paths.entry),
mock: openMock,
headers: ['期初单号', '库房', '库区', '耗材类型', '品规数', '状态', '操作'],
rowOps: ['录入', '删除', '查看详情'],
page2Header: '期初单号',
mockPlaceholder: /期初单号|单号/,
addLabel: '新增',
columnSettingsToggleCandidates: ['制单人', '制单时间', '生成时间'],
fixture: 'openEntryPage',
specFile: 'open-entry.spec.ts',
csv: '期初管理-期初录入-UI自动化测试用例-01.csv',
},
detail: {
key: 'detail',
code: 'OPEN-DTL',
name: '期初明细查询',
path: '/spd/start/init/detail',
pathPart: paths.detail,
forbidden: forbiddenOthers(paths.detail),
mock: openMock,
headers: ['期初单号', '库房', '库区', '规格型号', '耗材类型', '库存数量'],
rowOps: [],
page2Header: '期初单号',
mockPlaceholder: /期初单号|单号|物料名称/,
columnSettingsToggleCandidates: ['制单人', '批号', '结算方式'],
fixture: 'openDetailPage',
specFile: 'open-detail.spec.ts',
csv: '期初管理-期初明细查询-UI自动化测试用例-01.csv',
},
scan: {
key: 'scan',
code: 'OPEN-SCN',
name: '快速盘点记录',
path: '/spd/start/init/scanRecord',
pathPart: paths.scan,
forbidden: forbiddenOthers(paths.scan),
mock: openMock,
headers: ['扫码时间', '科室名称', '条码号', '扫码人'],
rowOps: [],
page2Header: '条码号',
mockPlaceholder: /条码号|科室名称|扫码人/,
columnSettingsToggleCandidates: ['扫码人', '科室名称'],
defaultDateRange: openScanDefaultDateRange,
fixture: 'openScanPage',
specFile: 'open-scan.spec.ts',
csv: '期初管理-快速盘点记录-UI自动化测试用例-01.csv',
},
};
......@@ -4,6 +4,49 @@ export const prodmMenuGroup = '产品管理';
export const prodmMock = '__NOT_EXIST_PRODM__99999';
/** 组合查询字段(对齐 STAT-IOD-004:配置驱动,样本有值才写)。 */
export type ProdmComboFieldDef = {
key: string;
label: string;
type: 'text' | 'select';
/** 列表取样列名 */
column: string;
/** 可选:精确 form input 选择器 */
formId?: string;
};
export type ProdmComboSample = Record<string, string>;
/** 产品供应关系维护 · 快捷区全量可见条件(无高级筛选抽屉)。 */
export const prodmSupplyComboQuickFields: readonly ProdmComboFieldDef[] = [
{
key: 'goodsName',
label: '物料名称',
type: 'text',
column: '物料名称',
formId: '#form_item_goodsName',
},
{
key: 'purMode',
label: '耗材类型',
type: 'select',
column: '耗材类型',
formId: '#form_item_purModes',
},
{
key: 'onlineKind',
label: '线上线下标记',
type: 'select',
column: '线上线下标记',
formId: '#form_item_onlineKind',
},
];
/** 本页无高级筛选抽屉,保持空数组以对齐 searchWithQuickAndDrawerCombo 契约。 */
export const prodmSupplyComboDrawerFields: readonly ProdmComboFieldDef[] = [];
export const prodmSupplyComboAssertKeys = ['goodsName', 'purMode', 'onlineKind'] as const;
export type ProdmPageKey =
| 'checkReinit'
| 'maintain'
......@@ -47,6 +90,10 @@ export type ProdmPageMeta = {
layout?: 'left_tree';
columnSettingsToggleCandidates?: readonly string[];
sortColumns?: readonly string[];
/** 列表上方状态 Tab / 分段(有则 clickStatusTabs 依次切换) */
statusTabs?: readonly string[];
/** 业务用例默认左侧树节点(树页;001/002 等树本身用例除外) */
defaultTreeNode?: string;
fixture: string;
specFile: string;
csv: string;
......@@ -113,6 +160,44 @@ export const prodmPages: Record<ProdmPageKey, ProdmPageMeta> = {
addLabel: '添加',
layout: 'left_tree',
columnSettingsToggleCandidates: ["阳采ID", "规格型号"],
sortColumns: [
'物料编号',
'HIS编码',
'阳采ID',
'规格型号',
'器械注册人',
'单位',
'耗材类型',
'品牌',
'器械注册证号',
'医保编码',
'27位医保编码',
'医保通用名',
'一级分类',
'二级分类',
'三级分类',
'阳采编码',
'69码',
'hrp编码',
'招标文号',
'单价',
'规格',
'型号',
'专科专用耗材',
'备注',
'是否RFID管理',
'创建时间',
'默认DI',
'erp编码',
'运输条件',
'是否植入',
'默认二级供应商erp编码',
'是否限量采购',
'默认销售商',
'默认供应商',
'物料名称',
'物料俗称',
],
fixture: 'prodmMaintainPage',
specFile: 'prodm-maintain.spec.ts',
csv: '基础管理-产品管理-产品维护-UI自动化测试用例-01.csv',
......@@ -147,6 +232,8 @@ export const prodmPages: Record<ProdmPageKey, ProdmPageMeta> = {
rowOps: ["详情", "审核", "编辑"],
page2Header: '物料编号',
addLabel: '产品初审核对',
statusTabs: ['待审核', '全部产品'],
columnSettingsToggleCandidates: ['耗材类型', '品牌', '产地'],
fixture: 'prodmFirstAuditPage',
specFile: 'prodm-first-audit.spec.ts',
csv: '基础管理-产品管理-产品初审核对-UI自动化测试用例-01.csv',
......@@ -164,7 +251,20 @@ export const prodmPages: Record<ProdmPageKey, ProdmPageMeta> = {
page2Header: '物料编号',
layout: 'left_tree',
columnSettingsToggleCandidates: ["业务类型", "状态"],
sortColumns: ["物料名称"],
sortColumns: [
'物料编号',
'物料名称',
'规格型号',
'单位',
'耗材类型',
'采购单价',
'业务类型',
'状态',
'器械注册人',
'供应商',
'线上线下标记',
],
defaultTreeNode: '国药控股医学检验(山东)有限公司',
fixture: 'prodmSupplyPage',
specFile: 'prodm-supply.spec.ts',
csv: '基础管理-产品管理-产品供应关系维护-UI自动化测试用例-01.csv',
......@@ -178,9 +278,11 @@ export const prodmPages: Record<ProdmPageKey, ProdmPageMeta> = {
forbidden: forbiddenOthers('paltform/product/priceCheck'),
mock: prodmMock,
headers: ["物料编号", "物料名称", "规格型号", "器械注册人", "单位", "耗材类型"],
rowOps: ["详情", "审核", "编辑"],
rowOps: ["详情", "审核", "编辑", "调整是否收费"],
page2Header: '物料编号',
addLabel: '批量审核',
statusTabs: ['待审核', '全部产品'],
columnSettingsToggleCandidates: ['耗材类型', '品牌'],
fixture: 'prodmPriceCheckPage',
specFile: 'prodm-price-check.spec.ts',
csv: '基础管理-产品管理-产品物价核对-UI自动化测试用例-01.csv',
......@@ -296,7 +398,7 @@ export const prodmPages: Record<ProdmPageKey, ProdmPageMeta> = {
forbidden: forbiddenOthers('platform/price'),
mock: prodmMock,
headers: ["单号", "制单时间", "计划生效时间", "实际生效时间", "备注", "状态"],
rowOps: ["再次调价", "详情", "打印"],
rowOps: ["详情", "再次调价"],
page2Header: '单号',
addLabel: '新增',
columnSettingsToggleCandidates: ["制单", "计划"],
......@@ -313,7 +415,7 @@ export const prodmPages: Record<ProdmPageKey, ProdmPageMeta> = {
forbidden: forbiddenOthers('platform/product-info'),
mock: prodmMock,
headers: ["单号", "变更类型", "制单人", "制单时间", "计划生效时间", "实际生效时间"],
rowOps: ["详情", "打印"],
rowOps: ["详情", "编辑", "打印"],
page2Header: '单号',
addLabel: '新增',
columnSettingsToggleCandidates: ["制单时间", "状态"],
......@@ -332,7 +434,25 @@ export const prodmPages: Record<ProdmPageKey, ProdmPageMeta> = {
headers: ["物料名称", "物料编号", "规格型号", "规格", "型号", "器械注册人"],
rowOps: ["详情", "查看"],
page2Header: '物料名称',
sortColumns: ["物料名称"],
sortColumns: [
'物料名称',
'物料编号',
'规格型号',
'规格',
'型号',
'器械注册人',
'变更前',
'变更后',
'变更单号',
'状态',
'制单时间',
'计划生效时间',
'实际生效时间',
'备注',
'耗材类型',
],
columnSettingsToggleCandidates: ["规格", "型号"],
statusTabs: ['全部', '暂存', '待审核', '待生效', '已生效', '生效失败', '作废', '退回'],
fixture: 'prodmChangeDetailPage',
specFile: 'prodm-change-detail.spec.ts',
csv: '基础管理-产品管理-变更单明细查询-UI自动化测试用例-01.csv',
......@@ -460,6 +580,7 @@ export const prodmPages: Record<ProdmPageKey, ProdmPageMeta> = {
headers: ["变更单号", "变更类型", "销售商(自定义)", "制单人", "制单时间", "状态"],
rowOps: ["详情"],
page2Header: '变更单号',
statusTabs: ['全部', '待提交', '待审核', '已完成', '已驳回'],
columnSettingsToggleCandidates: ["状态", "产品"],
fixture: 'prodmDiChangePage',
specFile: 'prodm-di-change.spec.ts',
......@@ -474,9 +595,10 @@ export const prodmPages: Record<ProdmPageKey, ProdmPageMeta> = {
forbidden: forbiddenOthers('product/rules'),
mock: prodmMock,
headers: ["医院名称", "规则名称", "产品性质", "境内/境外", "管理类别", "创建人"],
rowOps: ["详情", "编辑", "日志"],
rowOps: ["编辑"],
page2Header: '医院名称',
addLabel: '新增',
columnSettingsToggleCandidates: ["创建人", "产品性质"],
fixture: 'prodmQualRulePage',
specFile: 'prodm-qual-rule.spec.ts',
csv: '基础管理-产品管理-产品资质齐全规则-UI自动化测试用例-01.csv',
......@@ -490,13 +612,13 @@ export const prodmPages: Record<ProdmPageKey, ProdmPageMeta> = {
forbidden: forbiddenOthers('product/overview'),
mock: prodmMock,
headers: ["物料编号", "物料名称", "产品性质", "境内/境外", "管理类别", "器械注册人"],
rowOps: ["详情", "查看"],
rowOps: ["追溯", "查看"],
page2Header: '物料编号',
addLabel: '资质判断结果',
fixture: 'prodmQualOverviewPage',
specFile: 'prodm-qual-overview.spec.ts',
csv: '基础管理-产品管理-产品资质一览-UI自动化测试用例-01.csv',
},
materialChgDetail: {
key: 'materialChgDetail',
code: 'PRODM-MCD',
......
......@@ -69,5 +69,73 @@
"器械注册人",
"单位",
"耗材类型"
],
"prodm-change-detail": [
"物料名称",
"物料编号",
"规格型号",
"规格",
"型号",
"器械注册人",
"变更前",
"变更后",
"变更单号",
"状态",
"制单时间",
"计划生效时间",
"实际生效时间",
"备注",
"耗材类型"
],
"prodm-supply": [
"物料编号",
"物料名称",
"规格型号",
"单位",
"耗材类型",
"采购单价",
"业务类型",
"状态",
"器械注册人",
"供应商",
"线上线下标记"
],
"prodm-maintain": [
"物料编号",
"HIS编码",
"阳采ID",
"规格型号",
"器械注册人",
"单位",
"耗材类型",
"品牌",
"器械注册证号",
"医保编码",
"27位医保编码",
"医保通用名",
"一级分类",
"二级分类",
"三级分类",
"阳采编码",
"69码",
"hrp编码",
"招标文号",
"单价",
"规格",
"型号",
"专科专用耗材",
"备注",
"是否RFID管理",
"创建时间",
"默认DI",
"erp编码",
"运输条件",
"是否植入",
"默认二级供应商erp编码",
"是否限量采购",
"默认销售商",
"默认供应商",
"物料名称",
"物料俗称"
]
}
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