| | |
| | | const gridRef = useGridApiRef(); |
| | | const [rows, setRows] = useState([]); |
| | | const [fetchRows, setFetchRows] = useState([]); |
| | | const [isLoading, setIsLoading] = useState(false); |
| | | const translate = useTranslate(); |
| | | const [rowSelectedIds, setRowSelectedIds] = useState([]); |
| | | const [selectedMatnr, setSelectedMatnr] = useState([]); |
| | |
| | | const [selectedValue, setSelectedValue] = useState({}); |
| | | |
| | | useEffect(() => { |
| | | console.log('useEffect triggered - selectedMatnr:', selectedMatnr, 'fetchRows length:', fetchRows.length); |
| | | if (selectedMatnr.length < 1) { |
| | | console.log('没有选中物料,显示所有数据'); |
| | | setRows(fetchRows) |
| | | } else { |
| | | const mas = fetchRows.filter(item => selectedMatnr.includes(item.matnrCode)); |
| | | console.log('过滤数据,选中的物料编码:', selectedMatnr); |
| | | const mas = fetchRows.filter(item => { |
| | | const matnrCode = item.matnrCode || item.locItem?.matnrCode; |
| | | const included = selectedMatnr.includes(matnrCode); |
| | | console.log('物料编码:', matnrCode, '是否包含:', included); |
| | | return included; |
| | | }); |
| | | console.log('过滤后的数据:', mas); |
| | | setRows(mas) |
| | | } |
| | | }, [selectedMatnr]) |
| | | }, [selectedMatnr, fetchRows]) |
| | | |
| | | |
| | | const ComfirmButton = () => { |
| | | const { selectedIds, data } = useListContext(); |
| | | const handleRowClick = () => { |
| | | console.log(selectedIds); |
| | | const handleRowClick = async () => { |
| | | console.log('selectedIds:', selectedIds); |
| | | console.log('data:', data); |
| | | console.log('fetchRows:', fetchRows); |
| | | console.log('isLoading:', isLoading); |
| | | |
| | | if (!selectedIds || selectedIds.length === 0) { |
| | | notify('请先选择物料'); |
| | | return; |
| | | } |
| | | |
| | | if (!data || data.length === 0) { |
| | | notify('数据加载中,请稍候'); |
| | | return; |
| | | } |
| | | |
| | | const ids = data.filter(item => selectedIds.includes(item.id)).map(item => item.id); |
| | | setRowSelectedIds(ids); |
| | | const mas = data.filter(item => selectedIds.includes(item.id)).map(item => item.matnrCode); |
| | | console.log('selectedMatnr:', mas); |
| | | |
| | | // 检查选中的物料是否已全部出库 |
| | | const selectedItems = data.filter(item => selectedIds.includes(item.id)); |
| | | const allCompleted = selectedItems.every(item => { |
| | | const remaining = (item.anfme || 0) - (item.workQty || 0); |
| | | return remaining <= 0; |
| | | }); |
| | | |
| | | if (allCompleted) { |
| | | notify('选中的物料已全部出库(已出数量 >= 计划出库数),没有可出库的库存数据'); |
| | | setSelectedMatnr(mas); |
| | | setRows([]); |
| | | return; |
| | | } |
| | | |
| | | //设置库位信息筛选条件 |
| | | setSelectedMatnr(mas); |
| | | |
| | | // 如果 fetchRows 还没有数据,重新加载 |
| | | if (!fetchRows || fetchRows.length === 0) { |
| | | console.log('fetchRows为空,重新加载数据'); |
| | | notify('正在加载库存数据...'); |
| | | // 重新加载数据,getWaveRule 会在加载完成后自动处理 selectedMatnr |
| | | await getWaveRule(formData); |
| | | } else { |
| | | // 如果 fetchRows 有数据,立即过滤显示 |
| | | const filteredRows = fetchRows.filter(item => { |
| | | const matnrCode = item.matnrCode || item.locItem?.matnrCode; |
| | | return mas.includes(matnrCode); |
| | | }); |
| | | console.log('filteredRows:', filteredRows); |
| | | setRows(filteredRows); |
| | | |
| | | // 如果过滤后没有数据,提示用户 |
| | | if (filteredRows.length === 0) { |
| | | notify('选中的物料没有可出库的库存数据,可能已全部出库或库存不足'); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return ( |
| | | <Button label="toolbar.confirm" size="medium" onClick={handleRowClick} /> |
| | | <Button |
| | | label="toolbar.confirm" |
| | | size="medium" |
| | | onClick={handleRowClick} |
| | | disabled={isLoading} |
| | | /> |
| | | ) |
| | | }; |
| | | |
| | |
| | | }; |
| | | |
| | | useEffect(() => { |
| | | getWaveRule() |
| | | }, [open]) |
| | | if (open && record?.id) { |
| | | // 重置状态,确保数据能正确显示 |
| | | setSelectedMatnr([]); |
| | | setRows([]); |
| | | setFetchRows([]); |
| | | setIsLoading(false); |
| | | // 确保 formData 正确初始化 |
| | | const initialFormData = { orderId: record.id, waveId: DEFAULT_TYPE }; |
| | | setFormData(initialFormData); |
| | | getWaveRule(initialFormData) |
| | | } |
| | | }, [open, record?.id]) |
| | | |
| | | const getWaveRule = async () => { |
| | | if (formData.waveId == null && formData.waveId == undefined) { |
| | | const getWaveRule = async (data = formData) => { |
| | | if (data.waveId == null || data.waveId == undefined) { |
| | | return |
| | | } |
| | | const { data: { code, data, msg } } = await request.post('/outStock/order/getOutTaskItems', { ...formData }); |
| | | if (!data.orderId) { |
| | | return |
| | | } |
| | | setIsLoading(true); |
| | | try { |
| | | const { data: { code, data: responseData, msg } } = await request.post('/outStock/order/getOutTaskItems', { ...data }); |
| | | if (code === 200) { |
| | | // setRows(data) |
| | | setFetchRows(data) |
| | | console.log('API返回的数据:', responseData); |
| | | // 处理返回的数据,确保数据结构正确 |
| | | const processedData = (responseData || []).map((item, index) => { |
| | | // 如果数据有 locItem 嵌套结构,需要展开 |
| | | if (item.locItem) { |
| | | return { |
| | | ...item.locItem, |
| | | id: item.locItem.id || `temp_${index}`, |
| | | siteNo: item.siteNo, |
| | | staNos: item.staNos || [], |
| | | sourceId: item.sourceId, |
| | | source: item.source |
| | | }; |
| | | } |
| | | // 如果数据已经是扁平结构,直接返回 |
| | | return { |
| | | ...item, |
| | | id: item.id || `temp_${index}` |
| | | }; |
| | | }); |
| | | console.log('处理后的数据:', processedData); |
| | | setFetchRows(processedData); |
| | | |
| | | // 如果返回的数据为空,且用户已选中物料,提示原因 |
| | | if (processedData.length === 0 && selectedMatnr.length > 0) { |
| | | notify('选中的物料已全部出库,没有可出库的库存数据'); |
| | | } else if (processedData.length === 0) { |
| | | notify('当前出库单没有可出库的库存数据,可能所有物料已全部出库'); |
| | | } |
| | | // useEffect 会自动根据 selectedMatnr 和 fetchRows 来过滤数据 |
| | | } else { |
| | | notify(msg); |
| | | } |
| | | } catch (error) { |
| | | console.error('获取库存数据失败:', error); |
| | | notify('获取库存数据失败,请重试'); |
| | | } finally { |
| | | setIsLoading(false); |
| | | } |
| | | } |
| | | |
| | | const handleChange = (value, name) => { |
| | | setFormData((prevData) => ({ |
| | | setFormData((prevData) => { |
| | | const newData = { |
| | | ...prevData, |
| | | [name]: value |
| | | })); |
| | | }; |
| | | // 当策略改变时,重新获取数据 |
| | | if (name === 'waveId' && value && prevData.orderId) { |
| | | getWaveRule(newData); |
| | | } |
| | | return newData; |
| | | }); |
| | | }; |
| | | |
| | | |