Files
zkxw/web-admin/src/utils/qc-work-order-selection-expand.ts
T
2026-07-06 16:59:53 +08:00

45 lines
1.5 KiB
TypeScript

import type { QcWorkOrder } from '@/api/qc-work-order'
const INBOUND_SAMPLE_SOURCES = new Set(['cell_storage', 'research_donation'])
function isInboundSampleWorkOrder(row: QcWorkOrder) {
if ((row.workOrderType || 'inbound') !== 'inbound') return false
return INBOUND_SAMPLE_SOURCES.has((row.receptionSource || '').trim())
}
/** 入库样本组勾选/导出:按 receptionSource + sampleCode 聚合 sibling 工单 */
export function resolveInboundSampleSelectionKey(row: QcWorkOrder): string {
const sampleCode = (row.sampleCode || '').trim()
if (!sampleCode) return row.id
const source = (row.receptionSource || 'cell_storage').trim()
return `${source}:${sampleCode}`
}
export function collectInboundSampleSiblingIds(
workOrderId: string,
rows: QcWorkOrder[]
): string[] {
const row = rows.find((item) => item.id === workOrderId)
if (!row || !isInboundSampleWorkOrder(row)) return [workOrderId]
const key = resolveInboundSampleSelectionKey(row)
const siblingIds = rows
.filter((item) => isInboundSampleWorkOrder(item) && resolveInboundSampleSelectionKey(item) === key)
.map((item) => item.id)
return siblingIds.length ? siblingIds : [workOrderId]
}
export function expandInboundWorkOrderIdsForExport(
selectedIds: string[],
rows: QcWorkOrder[]
): string[] {
const expanded = new Set<string>()
for (const id of selectedIds) {
for (const siblingId of collectInboundSampleSiblingIds(id, rows)) {
expanded.add(siblingId)
}
}
return [...expanded]
}