Files
zkxw/web-admin/src/utils/protocol-source-attachment.ts
T
zlwuandCursor 67a209298c fix(web-admin): 样本接收弹窗恢复展示协议附件
验收反馈要求协议附件可见;细胞存储分组恢复为知情同意书、孕妇健康调查表、协议附件三项。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-09 13:57:26 +08:00

82 lines
2.5 KiB
TypeScript

export type ProtocolSourceAttachmentMeta = {
label: string
files: Array<Record<string, unknown>>
}
function normalizeAttachmentFiles(raw: unknown): Array<Record<string, unknown>> {
if (!Array.isArray(raw)) return []
return raw.filter((item) => item && typeof item === 'object') as Array<Record<string, unknown>>
}
/** 按来源返回协议级主附件标签与文件列表(细胞存储=孕妇健康调查表,科研捐赠=传染病检测报告) */
export function getSourceProtocolAttachment(
row: Record<string, unknown>
): ProtocolSourceAttachmentMeta {
const source = String(row.sourceType || 'cell_storage').trim()
if (source === 'research_donation') {
return {
label: '传染病检测报告',
files: normalizeAttachmentFiles(row.infectiousDiseaseReportAttachmentFiles)
}
}
return {
label: '孕妇健康调查表',
files: normalizeAttachmentFiles(row.healthSurveyAttachmentFiles)
}
}
/** 知情同意书(细胞存储与科研捐赠共用字段) */
export function getConsentProtocolAttachment(
row: Record<string, unknown>
): ProtocolSourceAttachmentMeta {
return {
label: '知情同意书',
files: normalizeAttachmentFiles(row.consentAttachmentFiles)
}
}
/**
* 样本接收弹窗:按来源返回质检需查看的协议附件分组。
* 细胞存储:知情同意书 / 孕妇健康调查表 / 协议附件
* 科研捐赠:知情同意书 / 传染病检测报告 / 其他附件
* 兼容 attachments 别名(协议详情字段名)。
*/
export function getSourceProtocolAttachmentGroups(
row: Record<string, unknown>
): ProtocolSourceAttachmentMeta[] {
const source = String(row.sourceType || 'cell_storage').trim()
const protocolFiles = normalizeAttachmentFiles(
row.protocolAttachmentFiles ?? row.attachments
)
if (source === 'research_donation') {
return [
{
label: '知情同意书',
files: normalizeAttachmentFiles(row.consentAttachmentFiles)
},
{
label: '传染病检测报告',
files: normalizeAttachmentFiles(row.infectiousDiseaseReportAttachmentFiles)
},
{
label: '其他附件',
files: normalizeAttachmentFiles(row.attachmentFiles ?? row.otherAttachmentFiles)
}
]
}
return [
{
label: '知情同意书',
files: normalizeAttachmentFiles(row.consentAttachmentFiles)
},
{
label: '孕妇健康调查表',
files: normalizeAttachmentFiles(row.healthSurveyAttachmentFiles)
},
{
label: '协议附件',
files: protocolFiles
}
]
}