| | |
| | | var remaining = orderTotal; |
| | | var selectedCount = 0; |
| | | |
| | | // 对库位数据进行排序,优先选择相同库位的库存 |
| | | // allData.sort(function(a, b) { |
| | | // // 先按库位号排序 |
| | | // if (a.locNo !== b.locNo) { |
| | | // return a.locNo.localeCompare(b.locNo); |
| | | // } |
| | | // // 再按批次排序 |
| | | // return a.batch.localeCompare(b.batch); |
| | | // }); |
| | | // 使用原始顺序的副本,从第一页第一个开始勾选 |
| | | var sortedData = allData.slice(); |
| | | |
| | | for (var i = 0; i < allData.length; i++) { |
| | | var item = allData[i]; |
| | | // 选择集合(使用唯一键避免索引错乱) |
| | | var selectionKeys = {}; |
| | | for (var i = 0; i < sortedData.length; i++) { |
| | | var item = sortedData[i]; |
| | | var itemAnfme = parseFloat(item.anfme || 0); |
| | | |
| | | if (itemAnfme <= 0) { |
| | | continue; // 跳过数量为0的记录 |
| | | } |
| | | |
| | | // 如果剩余数量大于等于当前项的数量,全部勾选 |
| | | if (itemAnfme <= 0) continue; |
| | | var key = (item.locNo || '') + '|' + (item.batch || '') + '|' + (item.matnr || '') + '|' + (item.anfme || 0); |
| | | if (remaining >= itemAnfme) { |
| | | allData[i].LAY_CHECKED = true; |
| | | selectedTotal += itemAnfme; |
| | | selectionKeys[key] = true; |
| | | remaining -= itemAnfme; |
| | | selectedCount++; |
| | | window.autoSelectedData.push(item); |
| | | } |
| | | // 否则只勾选剩余部分(实际操作中,整个记录都会被勾选,但会在提交时处理数量) |
| | | else if (remaining > 0) { |
| | | allData[i].LAY_CHECKED = true; |
| | | selectedTotal += itemAnfme; |
| | | // 这里不修改item.anfme,因为这是表格显示的数据 |
| | | } else if (remaining > 0) { |
| | | selectionKeys[key] = true; |
| | | remaining = 0; |
| | | selectedCount++; |
| | | window.autoSelectedData.push(item); |
| | | break; |
| | | } else { |
| | | break; // 已满足订单数量,停止勾选 |
| | | break; |
| | | } |
| | | } |
| | | |
| | | // 如果已经满足订单数量,停止勾选 |
| | | if (remaining <= 0) { |
| | | break; |
| | | // 根据选择集合同步原始数据的勾选标记,并重新计算选中数量 |
| | | selectedTotal = 0; |
| | | for (var i = 0; i < allData.length; i++) { |
| | | var k = (allData[i].locNo || '') + '|' + (allData[i].batch || '') + '|' + (allData[i].matnr || '') + '|' + (allData[i].anfme || 0); |
| | | allData[i].LAY_CHECKED = !!selectionKeys[k]; |
| | | if (allData[i].LAY_CHECKED) { |
| | | selectedTotal += parseFloat(allData[i].anfme || 0); |
| | | } |
| | | } |
| | | |