Files
zkxw/web-admin/src/utils/inbound-sample-special-mark.ts
T
2026-07-01 16:37:33 +08:00

50 lines
1.7 KiB
TypeScript

import type { QcWorkOrder } from '@/api/qc-work-order'
import { resolveGateWorkOrderForSampleGroup } from '@/utils/qc-work-order-groups'
export type InboundSampleSpecialMarkTarget = {
receptionSource: 'cell_storage' | 'research_donation'
protocolSampleId: string
sampleCode: string
isSpecial: boolean
specialRemark: string
}
export function canEditInboundSampleSpecialMark(row: QcWorkOrder): boolean {
const source = (row.receptionSource || '').trim()
if (source !== 'cell_storage' && source !== 'research_donation') return false
return !!(row.protocolSampleId || '').trim()
}
export function resolveInboundSampleSpecialMarkTarget(
workOrders: QcWorkOrder[]
): InboundSampleSpecialMarkTarget | null {
const gate = resolveGateWorkOrderForSampleGroup(workOrders)
if (!gate || !canEditInboundSampleSpecialMark(gate)) return null
const source = (gate.receptionSource || 'cell_storage').trim() as
| 'cell_storage'
| 'research_donation'
return {
receptionSource: source,
protocolSampleId: String(gate.protocolSampleId || '').trim(),
sampleCode: String(gate.sampleCode || '').trim(),
isSpecial: !!gate.isSpecial,
specialRemark: String(gate.specialRemark || '').trim()
}
}
export function resolveInboundSampleSpecialMarkTargetFromRow(
row: QcWorkOrder
): InboundSampleSpecialMarkTarget | null {
if (!canEditInboundSampleSpecialMark(row)) return null
const source = (row.receptionSource || 'cell_storage').trim() as
| 'cell_storage'
| 'research_donation'
return {
receptionSource: source,
protocolSampleId: String(row.protocolSampleId || '').trim(),
sampleCode: String(row.sampleCode || '').trim(),
isSpecial: !!row.isSpecial,
specialRemark: String(row.specialRemark || '').trim()
}
}