/** 登记未用完物料 · Demo 模拟数据 */ const DEMO_UNUSED_LINES = [ { id: 1, fromBatch: true, stockInNo: 'RK202506001', stockInDate: '2025-06-01', expireDate: '2026-12-31', materialCode: 'QC-M-001', materialName: '胎牛血清 FBS', specModel: '500ml/瓶', unit: '瓶', catalogNo: 'SH30071.03', batchNo: 'A241205', manufacturer: 'HyClone', unitPrice: 1280, unusedQty: 2, holder: '张三', remark: '' }, { id: 2, fromBatch: true, stockInNo: 'RK202506008', stockInDate: '2025-06-03', expireDate: '2026-08-15', materialCode: 'QC-M-012', materialName: 'DMEM 高糖培养基', specModel: '500ml', unit: '瓶', catalogNo: 'C11995500BT', batchNo: 'B250301', manufacturer: 'Gibco', unitPrice: 86.5, unusedQty: 5, holder: '李四', remark: '4℃ 存放' }, { id: 3, fromBatch: true, stockInNo: 'RK202506015', stockInDate: '2025-06-05', expireDate: '2027-01-20', materialCode: 'QC-M-028', materialName: '青霉素-链霉素双抗', specModel: '100ml', unit: '瓶', catalogNo: '15140122', batchNo: 'PS24088', manufacturer: 'Thermo', unitPrice: 245, unusedQty: 1, holder: '王五', remark: '' }, { id: 4, fromBatch: true, stockInNo: 'RK202506022', stockInDate: '2025-06-08', expireDate: '2026-05-30', materialCode: 'QC-M-045', materialName: '0.25% 胰酶-EDTA', specModel: '100ml', unit: '瓶', catalogNo: '25200072', batchNo: 'T241102', manufacturer: 'Gibco', unitPrice: 168, unusedQty: 3, holder: '赵六', remark: '' }, { id: 5, fromBatch: true, stockInNo: 'RK202506031', stockInDate: '2025-06-10', expireDate: '2026-11-01', materialCode: 'QC-M-067', materialName: 'PBS 缓冲液', specModel: '500ml', unit: '瓶', catalogNo: '10010023', batchNo: 'P250115', manufacturer: 'HyClone', unitPrice: 32, unusedQty: 8, holder: '张三', remark: '' }, { id: 6, fromBatch: false, stockInNo: '', stockInDate: '', expireDate: '', materialCode: '', materialName: '细胞冻存液 DMSO 配方', specModel: '50ml', unit: '瓶', catalogNo: '', batchNo: '手工-001', manufacturer: '自配', unitPrice: 0, unusedQty: 2, holder: '李四', remark: '非系统批次' }, { id: 7, fromBatch: true, stockInNo: 'RK202506044', stockInDate: '2025-06-12', expireDate: '2026-09-20', materialCode: 'QC-M-089', materialName: '细胞计数板', specModel: '一次性', unit: '盒', catalogNo: 'C-Chip DHC-N01', batchNo: 'CC250601', manufacturer: 'NanoEntek', unitPrice: 420, unusedQty: 1, holder: '王五', remark: '' }, { id: 8, fromBatch: true, stockInNo: 'RK202506051', stockInDate: '2025-06-14', expireDate: '2026-06-14', materialCode: 'QC-M-102', materialName: '无血清培养添加物', specModel: '10ml', unit: '支', catalogNo: 'A1349801', batchNo: 'S241208', manufacturer: 'Gibco', unitPrice: 890, unusedQty: 4, holder: '赵六', remark: '' }, { id: 9, fromBatch: true, stockInNo: 'RK202506058', stockInDate: '2025-06-15', expireDate: '2027-03-10', materialCode: 'QC-M-115', materialName: '支原体检测试剂盒', specModel: '20T', unit: '盒', catalogNo: 'MP00250', batchNo: 'M250401', manufacturer: 'Lonza', unitPrice: 3200, unusedQty: 1, holder: '张三', remark: '留样' }, { id: 10, fromBatch: true, stockInNo: 'RK202506063', stockInDate: '2025-06-16', expireDate: '2026-04-01', materialCode: 'QC-M-128', materialName: 'DAPI 染色液', specModel: '1mg', unit: '支', catalogNo: 'D9542', batchNo: 'D241015', manufacturer: 'Sigma', unitPrice: 156, unusedQty: 2, holder: '李四', remark: '' } ] function formatMoney(v) { if (v == null || v === '' || Number.isNaN(Number(v))) return '—' return Number(v).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) } function calcAmount(unitPrice, qty) { return (Number(unitPrice) || 0) * (Number(qty) || 0) } function materialSummary(row) { const parts = [row.materialName] if (row.batchNo) parts.push(`批号 ${row.batchNo}`) if (row.stockInNo) parts.push(row.stockInNo) return parts.join(' · ') }