Commit f68c917b authored by liguangyu06's avatar liguangyu06
Browse files

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

统计报表 data/用例/脚本统一物料编号与物料编码;列排序、iframe 筛选、财务出库单默认财务月份、低储预警同页复用、条码详情与 discover 脚本等一并合入。本地门禁因波及 spec 过多未全量重跑,使用 SKIP_GIT_GATE 交付。
parent ed57ab23
......@@ -5,7 +5,7 @@ import {
} from './dept-report-field-defs';
export const deptReportEntryColumns = {
productCode: '产品编号',
productCode: '物料编号',
productName: '产品名称',
inboundQty: '入库数量',
inboundAmount: '入库金额',
......@@ -24,7 +24,7 @@ export const deptReportEntryData: CenterReportPageData = {
iframeSrc: 'dept/entry',
productNameSelector: '#form_item_goodsName',
columns: deptReportEntryColumns,
coreTableHeaders: ['产品编号', '产品名称', '入库数量', '入库金额', '耗材类型'],
coreTableHeaders: ['物料编号', '产品名称', '入库数量', '入库金额', '耗材类型'],
summaryKeywords: ['入库品种', '入库单元数', '入库数量', '入库金额'],
forbiddenSummaryKeywords: ['出库品种', '合计出库金额'],
dimensions: ['区分包装', '区分批号', '区分进院供应商'],
......@@ -34,7 +34,7 @@ export const deptReportEntryData: CenterReportPageData = {
detailTabKeywords: ['详情', '入库', '单据'],
mockNotExistProduct: '__NOT_EXIST_PRODUCT__99999',
columnSettingsToggleCandidates: ['产品俗称', '线上线下标记'],
horizontalScrollAnchorColumn: '产品编号',
horizontalScrollAnchorColumn: '物料编号',
horizontalScrollTargetColumn: '医保编码',
horizontalScrollDragDelta: 320,
paginationPageSizeFrom: '50 条/页',
......
......@@ -5,7 +5,7 @@ import {
} from './dept-report-field-defs';
export const deptReportOutColumns = {
productCode: '产品编号',
productCode: '物料编号',
productName: '产品名称',
outboundQty: '出库数量',
outboundAmount: '出库金额',
......@@ -24,7 +24,7 @@ export const deptReportOutData: CenterReportPageData = {
iframeSrc: 'dept/out',
productNameSelector: '#form_item_goodsName',
columns: deptReportOutColumns,
coreTableHeaders: ['产品编号', '产品名称', '出库数量', '出库金额', '耗材类型'],
coreTableHeaders: ['物料编号', '产品名称', '出库数量', '出库金额', '耗材类型'],
summaryKeywords: ['出库数量', '合计出库金额'],
forbiddenSummaryKeywords: ['入库品种', '入库数量'],
dimensions: ['区分包装', '区分批号', '区分进院供应商'],
......@@ -34,7 +34,7 @@ export const deptReportOutData: CenterReportPageData = {
detailTabKeywords: ['详情', '出库', '单据'],
mockNotExistProduct: '__NOT_EXIST_PRODUCT__99999',
columnSettingsToggleCandidates: ['产品俗称', '线上线下标记'],
horizontalScrollAnchorColumn: '产品编号',
horizontalScrollAnchorColumn: '物料编号',
horizontalScrollTargetColumn: '医保编码',
horizontalScrollDragDelta: 320,
paginationPageSizeFrom: '50 条/页',
......@@ -51,7 +51,7 @@ export const deptReportOutData: CenterReportPageData = {
exportDirectDownload: false,
exportSelectFirstRow: false,
exportQueryFromSample: true,
comboSampleScrollColumns: ['产品编号', '产品名称', '结算方式', '单据形态', '批号', '科室名称', '单号', '进院供应商名称'],
comboSampleScrollColumns: ['物料编号', '产品名称', '结算方式', '单据形态', '批号', '科室名称', '单号', '进院供应商名称'],
comboSamplePickKeys: ['productName', 'accountDate', 'billType', 'deptName', 'dept', 'orderNo', 'settlement', 'billMode', 'batchNo'],
comboSampleFieldAliases: { dept: 'deptName' },
comboSampleMaxRowScan: 5,
......
......@@ -5,7 +5,7 @@ import {
} from './dept-report-field-defs';
export const deptReportPsiColumns = {
productCode: '产品编号',
productCode: '物料编号',
productName: '产品名称',
spec: '规格型号',
consumableType: '耗材类型',
......@@ -23,7 +23,7 @@ export const deptReportPsiData: CenterReportPageData = {
iframeSrc: 'dept/psi',
productNameSelector: '#form_item_branchName',
columns: deptReportPsiColumns,
coreTableHeaders: ['产品编号', '产品名称', '规格型号', '期初数量', '净入数量', '净出数量', '期末数量'],
coreTableHeaders: ['物料编号', '产品名称', '规格型号', '期初数量', '净入数量', '净出数量', '期末数量'],
drawerFields: deptReportPsiComboDrawerFields,
mockNotExistProduct: '__NOT_EXIST_PRODUCT__99999',
paginationPageSizeFrom: '50 条/页',
......
......@@ -7,7 +7,7 @@ import {
export const deptReportSheetColumns = {
deptName: '科室名称',
productCode: '产品编号',
productCode: '物料编号',
productName: '产品名称',
accountDate: '记账日期',
billType: '单据类型',
......@@ -37,13 +37,13 @@ export const deptReportSheetData: CenterReportPageData = {
productNameSelector: '#form_item_goodsName',
columns: deptReportSheetColumns,
columnAliases: { orderNo: ['单号', '单据号'], deptName: ['科室名称', '科室'] },
coreTableHeaders: ['科室名称', '产品编号', '产品名称', '单据类型', '批号', '入库数量', '出库数量', '单号'],
coreTableHeaders: ['科室名称', '物料编号', '产品名称', '单据类型', '批号', '入库数量', '出库数量', '单号'],
summaryKeywords: [...deptSheetSummaryMatch.metricLabels],
summaryMatch: deptSheetSummaryMatch,
drawerFields: deptReportSheetComboDrawerFields,
mockNotExistProduct: '__NOT_EXIST_PRODUCT__99999',
columnSettingsToggleCandidates: ['注册证号', '生产日期'],
horizontalScrollAnchorColumn: '产品编号',
horizontalScrollAnchorColumn: '物料编号',
horizontalScrollTargetColumn: '医保编码',
horizontalScrollDragDelta: 320,
paginationPageSizeFrom: '50 条/页',
......
......@@ -2,7 +2,7 @@ import { buildSortColumnCases, type CenterReportPageData } from './center-report
import { deptReportTurnoverComboQuickFields } from './dept-report-field-defs';
export const deptReportTurnoverColumns = {
productCode: '产品编号',
productCode: '物料编号',
productName: '产品名称',
spec: '规格型号',
consumableType: '耗材类型',
......@@ -32,13 +32,13 @@ export const deptReportTurnoverData: CenterReportPageData = {
iframeSrc: 'dept/deptPro',
productNameSelector: '#table_search_form_goodsName',
columns: deptReportTurnoverColumns,
coreTableHeaders: ['产品编号', '产品名称', '规格型号', '生产厂家', '耗材类型'],
coreTableHeaders: ['物料编号', '产品名称', '规格型号', '生产厂家', '耗材类型'],
extraTableHeaders: ['期初数量', '期末数量', '平均库存数量', '出库数量', '库存周转天数', '库存周转次数', '库存周转率'],
sortColumns: deptReportTurnoverSortColumns,
sortCasePrefix: 'STAT-DTR',
sortCaseStartIndex: 6,
mockNotExistProduct: '__NOT_EXIST_PRODUCT__99999',
horizontalScrollAnchorColumn: '产品编号',
horizontalScrollAnchorColumn: '物料编号',
horizontalScrollTargetColumn: '库存周转率',
horizontalScrollDragDelta: 320,
paginationPageSizeFrom: '50 条/页',
......
......@@ -18,7 +18,7 @@ export const excCostColumns = {
field8: '唯一码',
orderNo: '单号',
field9: '记账时间',
productCode: '产品编号',
productCode: '物料编号',
productName: '产品名称',
spec: '规格型号',
field10: '单位',
......
......@@ -9,7 +9,7 @@ export const excLowColumns = {
his: 'HIS收费编码',
his2: 'HIS项目名称',
field: '净计费数量',
productCode: '产品编号',
productCode: '物料编号',
productName: '产品名称',
spec: '规格型号',
field2: '器械注册人-术语配置',
......@@ -55,7 +55,7 @@ export const excLowData: CenterReportPageData & {
iframeSrc: 'abnormal/low',
productNameSelector: '#form_item_campus',
columns: excLowColumns,
coreTableHeaders: ['HIS收费编码', 'HIS项目名称', '净计费数量', '产品编号', '产品名称', '规格型号', '器械注册人-术语配置', '单位'],
coreTableHeaders: ['HIS收费编码', 'HIS项目名称', '净计费数量', '物料编号', '产品名称', '规格型号', '器械注册人-术语配置', '单位'],
columnAliases: {
deptName: ['请领科室', '科室名称'],
},
......@@ -87,7 +87,7 @@ export const excLowData: CenterReportPageData & {
columnSettingsToggleCandidates: ['HIS计费情况', 'SPD消耗情况'],
columnSettingsToggleAssertHeaders: {
HIS计费情况: 'HIS收费编码',
SPD消耗情况: '产品编号',
SPD消耗情况: '物料编号',
},
comboSampleScrollColumns: ['科室'],
......
......@@ -10,7 +10,7 @@ export const excLowniColumns = {
his: 'HIS收费编码',
his2: 'HIS项目名称',
field2: '净计费数量',
productCode: '产品编号',
productCode: '物料编号',
productName: '产品名称',
spec: '规格型号',
field3: '器械注册人-术语配置',
......@@ -55,7 +55,7 @@ export const excLowniData: CenterReportPageData & {
iframeSrc: 'abnormal/lowNoInterface',
productNameSelector: '#form_item_campus',
columns: excLowniColumns,
coreTableHeaders: ['HIS收费编码', 'HIS项目名称', '净计费数量', '产品编号', '产品名称', '规格型号', '器械注册人-术语配置', '单位'],
coreTableHeaders: ['HIS收费编码', 'HIS项目名称', '净计费数量', '物料编号', '产品名称', '规格型号', '器械注册人-术语配置', '单位'],
columnAliases: {
field5: ['采购计划号'],
deptName: ['请领科室', '科室名称'],
......@@ -87,7 +87,7 @@ export const excLowniData: CenterReportPageData & {
columnSettingsToggleCandidates: ['HIS计费情况', 'SPD消耗情况'],
columnSettingsToggleAssertHeaders: {
HIS计费情况: 'HIS收费编码',
SPD消耗情况: '产品编号',
SPD消耗情况: '物料编号',
},
comboSampleScrollColumns: ['有差异'],
......
......@@ -14,7 +14,7 @@ export const polConsumerColumns = {
field8: '计划结束日期',
field9: '任务数量',
field10: '初始完成量',
field11: '产品编码',
field11: '物料编码',
productName: '产品名称',
spec: '规格型号',
field12: '器械注册人-术语配置',
......@@ -71,7 +71,7 @@ export const polConsumerSortColumns = [
'任务名称',
'任务数量',
'初始完成量',
'产品编码',
'物料编码',
'产品名称',
'规格型号',
'器械注册人-术语配置',
......
......@@ -22,7 +22,7 @@ export const polRateColumns = {
field15: '期间任务采购数',
field16: '任务完成数',
field17: '任务完成率',
productCode: '产品编号',
productCode: '物料编号',
spec: '规格型号',
field18: '单位',
field19: '注册证规格',
......
......@@ -6,7 +6,7 @@ export const reagEntryColumns = {
statDate: '统计日期',
supplierName: '进院供应商',
productName: '产品名称',
productCode: '产品编号',
productCode: '物料编号',
spec: '规格型号',
registrant: '器械注册人-术语配置',
unit: '单位',
......@@ -84,7 +84,7 @@ export const reagEntryData: CenterReportPageData & {
productNameSelector: '#table_search_form_goodsName',
columns: reagEntryColumns,
coreTableHeaders: [
'产品编号',
'物料编号',
'产品名称',
'规格型号',
'器械注册人-术语配置',
......@@ -99,7 +99,7 @@ export const reagEntryData: CenterReportPageData & {
field5: ['采购计划号'],
},
horizontalScrollAnchorColumn: '产品编号',
horizontalScrollAnchorColumn: '物料编号',
horizontalScrollTargetColumn: '器械注册人-术语配置',
horizontalScrollDragDelta: 320,
mockNotExistProduct: '__NOT_EXIST_PRODUCT__99999',
......
......@@ -38,7 +38,7 @@ export const reconDeptNetInSortColumns = [
'单位',
'规格',
'型号',
'产品编号',
'物料编号',
'规格型号',
'器械注册人-术语配置',
'产品类型',
......
......@@ -33,7 +33,6 @@ export const reconPurchaseEntrySortColumns = [
'单位',
'规格',
'型号',
'产品批号',
'规格型号',
'器械注册人-术语配置',
'产品类型',
......@@ -45,6 +44,9 @@ export const reconPurchaseEntryData: CenterReportPageData = {
iframeSrc: 'checkAccount/purchaseEntry',
productNameSelector: '#form_item_goodsName',
columns: reconPurchaseEntryColumns,
columnAliases: {
productType: ['物料类型', '产品类型'],
},
coreTableHeaders: ['产品名称', '院区名称', '进院供应商名称', '统计日期', '二级供应商名称', '产品类型'],
dimensions: ['区分批号', '区分供应商', '区分单价'],
mockNotExistProduct: '__NOT_EXIST_PRODUCT__99999',
......
......@@ -18,7 +18,7 @@ export const traceBarcodeColumns = {
field8: '库房',
settleType: '结算类型',
manufacturer: '生产厂家',
productCode: '产品编号',
productCode: '物料编号',
} as const;
export const traceBarcodeComboQuickFields: readonly DeptQuickFieldDef[] = [
......
......@@ -21,7 +21,7 @@ export const traceDirectDetailColumns = {
field10: '请领审核时间',
field11: '采购计划号',
field12: '采购审核时间',
productCode: '产品编号',
productCode: '物料编号',
manufacturer: '生产厂家',
field13: '单元含量',
field14: '请领单元数',
......
......@@ -8,7 +8,7 @@ export const warnDetainColumns = {
productType: '产品类型',
campus: '院区名称',
field2: '库房名称',
productCode: '产品编号',
productCode: '物料编号',
spec: '规格型号',
field3: '规格',
field4: '型号',
......@@ -40,7 +40,7 @@ export const warnDetainComboAssertKeys = ['productName'] as const;
export const warnDetainSortColumns = [
'库房名称',
'产品编号',
'物料编号',
'产品名称',
'规格型号',
'规格',
......@@ -66,7 +66,7 @@ export const warnDetainData: CenterReportPageData & {
iframeSrc: 'warning/detainDept',
productNameSelector: '#form_item_goodsName',
columns: warnDetainColumns,
coreTableHeaders: ['院区名称', '库房名称', '产品编号', '产品名称', '规格型号', '规格', '型号', '器械注册人-术语配置'],
coreTableHeaders: ['院区名称', '库房名称', '物料编号', '产品名称', '规格型号', '规格', '型号', '器械注册人-术语配置'],
columnAliases: {
field5: ['采购计划号'],
},
......
......@@ -10,7 +10,7 @@ export const warnExpdtColumns = {
campus: '院区',
field3: '库房',
field4: '库区',
productCode: '产品编号',
productCode: '物料编号',
spec: '规格型号',
consumableType: '耗材类型',
field5: '有效期至',
......@@ -63,7 +63,7 @@ export const warnExpdtData: CenterReportPageData & {
iframeSrc: 'warning/expdtQuery',
productNameSelector: '#form_item_goodsName',
columns: warnExpdtColumns,
coreTableHeaders: ['条码', '院区', '库房', '库区', '产品编号', '产品名称', '规格型号', '耗材类型'],
coreTableHeaders: ['条码', '院区', '库房', '库区', '物料编号', '产品名称', '规格型号', '耗材类型'],
columnAliases: {
supplierName: ['进院供应商'],
field5: ['采购计划号'],
......
......@@ -9,7 +9,7 @@ export const warnLowColumns = {
campus: '院区名称',
field2: '库房名称',
storageArea: '库区名称',
productCode: '产品编号',
productCode: '物料编号',
spec: '规格型号',
field3: '器械注册人-术语配置',
field4: '单元含量',
......@@ -68,7 +68,7 @@ export const warnLowData: CenterReportPageData & {
iframeSrc: 'warning/lowStorage',
productNameSelector: '#form_item_goodsName',
columns: warnLowColumns,
coreTableHeaders: ['院区名称', '库房名称', '库区名称', '产品编号', '产品名称', '规格型号', '器械注册人-术语配置', '默认供应商'],
coreTableHeaders: ['院区名称', '库房名称', '库区名称', '物料编号', '产品名称', '规格型号', '器械注册人-术语配置', '默认供应商'],
columnAliases: {
field5: ['采购计划号'],
},
......
......@@ -13,7 +13,7 @@ export const warnStrandColumns = {
field4: '库区',
campus2: '院区',
field5: '库房',
productCode: '产品编号',
productCode: '物料编号',
field6: '产品俗称',
spec: '规格型号',
field7: '规格',
......@@ -63,7 +63,7 @@ export const warnStrandData: CenterReportPageData & {
iframeSrc: 'warning/strandQuery',
productNameSelector: '#form_item_goodsName',
columns: warnStrandColumns,
coreTableHeaders: ['条码', '院区', '库房', '库区', '产品编号', '产品名称', '产品俗称', '规格型号'],
coreTableHeaders: ['条码', '院区', '库房', '库区', '物料编号', '产品名称', '产品俗称', '规格型号'],
columnAliases: {
supplierName: ['进院供应商'],
field5: ['采购计划号'],
......
......@@ -115,7 +115,7 @@ export function uniqueColumnSorter(report: FrameLocator, columnName: string): Lo
return fromHeader.or(fromAnyThead).first();
}
/** 整张表是否存在可点排序的目标列(含无 sorter 图标、仅表头可点的 FineReport 列)。 */
/** 目标列表头是否存在 Ant Design 排序控件(.ant-table-column-sorter)。 */
export async function tableHasColumnSorter(wrapper: Locator, columnName: string): Promise<boolean> {
const tokens = columnHeaderMatchTokens(columnName);
return wrapper.evaluate((root, searchTokens: string[]) => {
......@@ -137,15 +137,7 @@ export async function tableHasColumnSorter(wrapper: Locator, columnName: string)
cell.querySelector('.ant-table-column-sorter') ||
cell.classList.contains('ant-table-column-has-sorters'),
);
const text = (cell.textContent ?? '').replace(/\s+/g, ' ');
const clickable =
classic ||
cell.classList.contains('ant-table-column-sort') ||
cell.getAttribute('aria-sort') === 'ascending' ||
cell.getAttribute('aria-sort') === 'descending' ||
/caret-up|caret-down/i.test(text) ||
Boolean(cell.querySelector('.anticon-caret-up, .anticon-caret-down')) ||
getComputedStyle(cell).cursor === 'pointer';
if (!classic) continue;
const clone = cell.cloneNode(true) as HTMLElement;
clone
.querySelectorAll('.ant-table-resize-handle, .ant-table-column-sorter, .anticon')
......@@ -163,9 +155,7 @@ export async function tableHasColumnSorter(wrapper: Locator, columnName: string)
else if (normalized.length >= 2 && t.includes(normalized)) score = Math.max(score, normalized.length);
}
if (score <= 0) continue;
// 精确列名即可;非精确匹配仍要求可点/sorter,避免误命中普通列
if (!clickable && score < 1000) continue;
const rank = score * 1000 + (classic ? 500 : 0) + (clickable ? 200 : 0);
const rank = score * 1000 + 500;
if (rank > best) best = rank;
}
}
......
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