fix(web-admin): 采集大表导出将 sdfq 等作废编码显示为文案
科研捐赠导出把作废类型编码原样写入储存状态和废弃原因。改为走字典并回退协议状态文案。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
411a4cb57c
commit
348c5c1d3c
6 files changed
+71
-6
No files matched your search
@@ -154,6 +154,38 @@ describe('buildResearchLedgerRows', () => {
|
||||
assert.equal(row[20], '顺产')
|
||||
assert.equal(row[23], '1')
|
||||
})
|
||||
|
||||
it('maps sdfq void type code to 属地废弃 labels', () => {
|
||||
const flat = {
|
||||
protocol: {
|
||||
donationStatus: 'yzf',
|
||||
voidType: 'sdfq',
|
||||
voidDesc: '',
|
||||
monthlyVerifyNo: ''
|
||||
},
|
||||
sampleIndex: 0,
|
||||
sampleCollectTime: '2025-08-29 12:27:00',
|
||||
motherName: '测试',
|
||||
sampleTypeName: '围产期造血干细胞',
|
||||
regionName: '亳州',
|
||||
hospitalName: '涡阳县人民医院',
|
||||
labStorageCode: 'A0000002',
|
||||
salesUserName: '',
|
||||
regionManagerUserName: '',
|
||||
transportType: '',
|
||||
newbornDeliveryTime: '',
|
||||
newbornSex: '',
|
||||
newbornWeightGram: '',
|
||||
deliveryMode: '',
|
||||
birthOrder: '',
|
||||
maternalBloodCollectTime: '',
|
||||
consentFormUrls: '',
|
||||
remark: ''
|
||||
} as unknown as ProtocolAuditFlatRow
|
||||
const [row] = buildResearchLedgerRows([flat])
|
||||
assert.equal(row[6], '已作废(属地废弃)')
|
||||
assert.equal(row[7], '属地废弃')
|
||||
})
|
||||
})
|
||||
|
||||
describe('buildCustomerServiceLedgerRows', () => {
|
||||
|
||||
@@ -166,12 +166,16 @@ const PROTOCOL_STATUS: Record<string, string> = {
|
||||
zckc: '转细胞存储'
|
||||
}
|
||||
|
||||
/** 作废类型兜底;与 void-type-dict 默认项一致,并覆盖误写入作废类型的状态码。 */
|
||||
const VOID_TYPE: Record<string, string> = {
|
||||
khhc: '客户毁存',
|
||||
jcbhg: '检测不合格',
|
||||
sysfq: '实验室废弃'
|
||||
}
|
||||
|
||||
/** 导出前由字典填充;单元测试环境可为空。 */
|
||||
let runtimeVoidLabels: Record<string, string> = {}
|
||||
|
||||
const PAY_MODE: Record<string, string> = {
|
||||
dj: '趸交',
|
||||
fq: '分期',
|
||||
@@ -275,16 +279,37 @@ function dayText(value: unknown): string {
|
||||
return parts ? String(parts.day) : ''
|
||||
}
|
||||
|
||||
/** 作废类型:字典 → 本地兜底 → 协议状态码文案(如 sdfq→属地废弃)。 */
|
||||
function voidTypeText(value: unknown): string {
|
||||
const code = text(value)
|
||||
if (!code) return ''
|
||||
return (
|
||||
runtimeVoidLabels[code] ||
|
||||
VOID_TYPE[code] ||
|
||||
PROTOCOL_STATUS[code] ||
|
||||
code
|
||||
)
|
||||
}
|
||||
|
||||
function statusText(status: unknown, voidType: unknown): string {
|
||||
const code = text(status)
|
||||
const base = PROTOCOL_STATUS[code] || code
|
||||
if (code !== 'yzf') return base
|
||||
const reason = label(VOID_TYPE, voidType)
|
||||
const reason = voidTypeText(voidType)
|
||||
return reason ? `${base}(${reason})` : base
|
||||
}
|
||||
|
||||
function voidReason(row: Row): string {
|
||||
return text(row.voidDesc) || label(VOID_TYPE, row.voidType)
|
||||
return text(row.voidDesc) || voidTypeText(row.voidType)
|
||||
}
|
||||
|
||||
/** 导出前加载作废类型字典,避免列表外的编码原样写入 Excel。 */
|
||||
export async function prepareCollectionLedgerExport(): Promise<void> {
|
||||
const { loadVoidTypeDict, getVoidTypeOptions } = await import('./void-type-dict')
|
||||
await loadVoidTypeDict()
|
||||
runtimeVoidLabels = Object.fromEntries(
|
||||
getVoidTypeOptions().map((item) => [String(item.value), String(item.label)])
|
||||
)
|
||||
}
|
||||
|
||||
function payModeText(value: unknown, fallback = ''): string {
|
||||
|
||||
Reference in new issue
Block a user