1、今天工作中遇到一个有意思的需求,下面是整个解决过程:
场景:
物品扫码出库时,扫码接口返回的码要对应当前页面列表的某一列数据,发货数量固定,扫码数量要等于发货数量,并且该数据要高亮显示。
重点:返回的码对应的数据很可能是多条,高亮显示的其中一条数据
重点:得到的数据要覆盖原数据
思路:
1、由于有相同的数据,且无法分别,没有唯一字段。那么添加唯一性字段,这个字段用数据的key来表示,而这个key正好用来做高亮数据
2、过滤,筛选相同相同的数据(且 发货数量 不等于 扫码数量)
3、再数据中,默认给第一条数据,扫码数量加一 ,存储该数据的key
代码:
function screenNumber(data: string | undefined) { result.accessoryDeliveryNotifyDetails?.map( (items: any, index: number) => (items.indexes = index), ); // 筛选 返回的值等于code 且发货数量不等于扫码数量 const array = result.accessoryDeliveryNotifyDetails?.filter((items: any) => items.availableCode === data && items.deliveryCount !== items.scanCount); //判断筛选的数据是否多条还是无 if (array.length < 0) { return false; } else if (array.length == 1) { const newScan = array[0].scanCount + 1; array[0].scanCount = newScan; const _selectedRowKeys = [...selectedRowKeys]; _selectedRowKeys.push(array[0].indexes); setSelectedRowKeys(_selectedRowKeys); return true; } else if (array.length > 1) { // 给数组的第一项加一 其他的项不加 array[0] const newScan = array[0].scanCount + 1; array[0].scanCount = newScan; const _selectedRowKeys = [...selectedRowKeys]; _selectedRowKeys.push(array[0].indexes); setSelectedRowKeys(_selectedRowKeys); return true; } setResult({ ...result, ...array }); return true; }
提一句高亮怎么显示:
// ProTable 属性 上面扫码成功后 给数组追加数据的key值。这边样式高亮 rowClassName={(row, rowKey) => { if (selectedRowKeys.includes(rowKey)) { return styles.highlight; } return ''; }}