From bd26cd9c33c3e097f15d47105ea969b4e10aa333 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期二, 05 八月 2025 13:02:16 +0800 Subject: [PATCH] 新增库存调整弹框 --- rsf-admin/src/page/orders/outStock/OutOrderModal.jsx | 19 +- rsf-admin/src/page/stockManage/locRevise/LocReviseCreate.jsx | 106 ++++++++-------- rsf-admin/src/page/orders/outStock/OutOrderList.jsx | 24 ++-- rsf-admin/src/page/stockManage/locRevise/SelectLocsRevise.jsx | 204 ++++++++++++++++++--------------- 4 files changed, 187 insertions(+), 166 deletions(-) diff --git a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx index 47f94a0..0e759e7 100644 --- a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx +++ b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx @@ -50,6 +50,7 @@ import ConfirmButton from '../../components/ConfirmButton'; import ImportButton from "../../components/ImportButton"; import DetailsIcon from '@mui/icons-material/Details'; +import OutStockWaveDialog from "./OutStockWaveDialog"; import AddTaskIcon from '@mui/icons-material/AddTask'; import PublicIcon from '@mui/icons-material/Public'; import SelectMatnrModal from "./SelectMatnrModal"; @@ -59,7 +60,6 @@ import OutStockPublic from "./OutStockPublic"; import OutOrderModal from "./OutOrderModal"; import request from '@/utils/request'; -import OutStockWaveDialog from "./OutStockWaveDialog"; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -113,20 +113,20 @@ ] const OutOrderList = (props) => { + + const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || []; + const [createDialog, setCreateDialog] = useState(false); + const [manualDialog, setManualDialog] = useState(false); + const [drawerVal, setDrawerVal] = useState(false); + const [waveRule, setWaveRule] = useState(false); + const [selectIds, setSelectIds] = useState([]); + const [preview, setPreview] = useState(false); + const [modalType, setmodalType] = useState(0); + const [select, setSelect] = useState(0); const translate = useTranslate(); const refresh = useRefresh(); const notify = useNotify(); - - const [createDialog, setCreateDialog] = useState(false); - const [manualDialog, setManualDialog] = useState(false); - const [selectIds, setSelectIds] = useState([]); - const [preview, setPreview] = useState(false); - const [waveRule, setWaveRule] = useState(false); - const [drawerVal, setDrawerVal] = useState(false); - const [modalType, setmodalType] = useState(0); - const [select, setSelect] = useState(0); const billReload = useRef(); - const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || []; //鑾峰彇娉㈡瑙勫垯 const closeDialog = async (value) => { @@ -222,7 +222,7 @@ drawerVal={drawerVal} setDrawerVal={setDrawerVal} > - <OutStockPublic record={select} open={drawerVal} setOpen={setDrawerVal} /> + <OutStockPublic record={select} open={drawerVal} setOpen={setDrawerVal} /> </PageEditDrawer> </Box > ) diff --git a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx index 6bea1bd..d64d8a3 100644 --- a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx +++ b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx @@ -39,15 +39,17 @@ useRefresh, useGetList, } from 'react-admin'; -import DialogCloseButton from "../../components/DialogCloseButton"; -import { styled } from '@mui/material/styles'; + import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; -import { Grid, margin, Stack, width } from "@mui/system"; -import request from '@/utils/request'; -import SaveIcon from '@mui/icons-material/Save'; -import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import DialogCloseButton from "../../components/DialogCloseButton"; import EditableTextField from "../../components/EditableTextField"; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import { Grid, margin, Stack, width } from "@mui/system"; +import SaveIcon from '@mui/icons-material/Save'; import OutOrderPreview from "./OutOrderPreview"; +import { styled } from '@mui/material/styles'; +import request from '@/utils/request'; + const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -93,16 +95,17 @@ const OutOrderModal = (props) => { const { open, setOpen, preview, setPreview, record } = props; - const translate = useTranslate(); + const [drawerVal, setDrawerVal] = useState(false); const [params, setParams] = useState({}); const [select, setSelect] = useState([]); - const [drawerVal, setDrawerVal] = useState(false); + const translate = useTranslate(); const refresh = useRefresh(); const handleClose = (event, reason) => { if (reason !== "backdropClick") { setOpen(false); } }; + const CustomFilter = () => { const { filterValues, setFilters, refetch } = useListContext(); const [formValues, setFormValues] = useState(filterValues); diff --git a/rsf-admin/src/page/stockManage/locRevise/LocReviseCreate.jsx b/rsf-admin/src/page/stockManage/locRevise/LocReviseCreate.jsx index d8b8919..daf0441 100644 --- a/rsf-admin/src/page/stockManage/locRevise/LocReviseCreate.jsx +++ b/rsf-admin/src/page/stockManage/locRevise/LocReviseCreate.jsx @@ -342,20 +342,20 @@ const notify = useNotify(); const [columns, setColumns] = useState([ { - field: 'maktx', - headerName: translate('table.field.outStockItem.maktx'), - width: 250, + field: 'code', + headerName: translate('table.field.locItem.locCode'), + width: 100, editable: false, }, { - field: 'matnrCode', - headerName: translate('table.field.outStockItem.matnrCode'), + field: 'areaId', + headerName: translate('table.field.loc.areaId'), width: 130, editable: false, }, { - field: 'anfme', - headerName: translate('table.field.outStockItem.anfme'), + field: 'type', + headerName: translate('table.field.loc.type'), type: 'number', minWidth: 100, flex: 1, @@ -363,8 +363,8 @@ valueFormatter: (val) => val < 0 ? 0 : val, }, { - field: 'splrCode', - headerName: translate('table.field.outStockItem.splrCode'), + field: 'warehouseId', + headerName: translate('table.field.loc.warehouseId'), minWidth: 100, flex: 1, editable: true, @@ -373,8 +373,8 @@ ), }, { - field: 'splrName', - headerName: translate('table.field.outStockItem.splrName') + "*", + field: 'useStatus', + headerName: translate('table.field.loc.useStatus') + "*", minWidth: 100, flex: 1, editable: true, @@ -383,18 +383,32 @@ ), }, { - field: 'batch', - headerName: translate('table.field.outStockItem.splrBatch'), + field: 'channel', + headerName: translate('table.field.loc.channel'), minWidth: 100, flex: 1, editable: true, }, { - field: 'stockUnit', - headerName: translate('table.field.outStockItem.stockUnit'), + field: 'row', + headerName: translate('table.field.loc.row'), minWidth: 100, flex: 1, - editable: true, + editable: false, + }, + { + field: 'col', + headerName: translate('table.field.loc.col'), + minWidth: 100, + flex: 1, + editable: false, + }, + { + field: 'lev', + headerName: translate('table.field.loc.lev'), + minWidth: 100, + flex: 1, + editable: false, }, ]) @@ -414,49 +428,39 @@ let cdata = useRef([]); - useEffect(() => { - if (extendColumns == undefined || extendColumns.length < 1) { - getDynamicFields(); - } - }, []); + // useEffect(() => { + // if (extendColumns == undefined || extendColumns.length < 1) { + // getDynamicFields(); + // } + // }, []); useEffect(() => { cdata.current = tabelData }, [tabelData]); - const getDynamicFields = async () => { - const { - data: { code, data, msg }, - } = await request.get("/fields/enable/list"); - if (code === 200) { - const cols = data.map(el => ({ - field: el.fields, - headerName: el.fieldsAlise, - minWidth: 100, - flex: 1, - editable: false - })) - setColumns([...columns, ...cols, action]) - setExtendColumns(cols); - } else { - notify(msg); - } - } - + // const getDynamicFields = async () => { + // const { + // data: { code, data, msg }, + // } = await request.get("/fields/enable/list"); + // if (code === 200) { + // const cols = data.map(el => ({ + // field: el.fields, + // headerName: el.fieldsAlise, + // minWidth: 100, + // flex: 1, + // editable: false + // })) + // setColumns([...columns, ...cols, action]) + // setExtendColumns(cols); + // } else { + // notify(msg); + // } + // } const handleDelete = (row) => { const newData = _.filter(cdata.current, (item) => item.matnrId !== row.matnrId); setTableData(newData); - }; - - - const processRowUpdate = (newRow, oldRow) => { - const rows = tabelData.map((r) => - r.matnrId === newRow.matnrId ? { ...newRow } : r - ) - setTableData(rows) - return newRow; }; const handleSelectionChange = (ids) => { @@ -464,11 +468,7 @@ }; tableRef.current = useGridApiRef(); - const tableIds = tabelData.map(map => map.id); - // setSelectedRows(tableIds); - // // console.log(selectedRows); - return ( <Box> diff --git a/rsf-admin/src/page/stockManage/locRevise/SelectLocsRevise.jsx b/rsf-admin/src/page/stockManage/locRevise/SelectLocsRevise.jsx index 1d66d19..d9b25a2 100644 --- a/rsf-admin/src/page/stockManage/locRevise/SelectLocsRevise.jsx +++ b/rsf-admin/src/page/stockManage/locRevise/SelectLocsRevise.jsx @@ -16,19 +16,13 @@ } from '@mui/material'; import { EDIT_MODE, DEFAULT_START_PAGE, DEFAULT_ITEM_PAGE_SIZE, DEFAULT_PAGE_SIZE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting'; +import { useTranslate, useNotify, useRefresh, DatagridConfigurable} from 'react-admin'; import DialogCloseButton from "../../components/DialogCloseButton"; -import { - useTranslate, useNotify, useRefresh, List, FilterButton, NumberField, - DateField, ReferenceInput, AutocompleteInput, TextInput, DatagridConfigurable, - BooleanField, SearchInput, -} from 'react-admin'; import TreeSelectInput from "@/page/components/TreeSelectInput"; import { Add, Edit, Delete, Save } from '@mui/icons-material'; import SaveIcon from '@mui/icons-material/Save'; import { DataGrid } from '@mui/x-data-grid'; import request from '@/utils/request'; - - const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -44,14 +38,8 @@ }, })); - - const SelectLocsRevise = (props) => { const { open, setOpen, data, setData } = props; - const translate = useTranslate(); - const refresh = useRefresh(); - const notify = useNotify(); - const handleClose = (event, reason) => { if (reason !== "backdropClick") { setOpen(false); @@ -59,25 +47,28 @@ }; const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_stock_revise_type')) || []; - const [formData, setFormData] = useState({}); - const [tableData, setTableData] = useState([]); - const [dyFields, setDyFields] = useState([]); - const [selectedRows, setSelectedRows] = useState([]); const [page, setPage] = useState({ page: DEFAULT_START_PAGE, pageSize: DEFAULT_PAGE_SIZE }); - const [rowCount, setRowCount] = useState(0); + const [formData, setFormData] = useState({ useStatus: 'F', code: null }); + const [selectedRows, setSelectedRows] = useState([]); const [isLoading, setIsLoading] = useState(false); + const [tableData, setTableData] = useState([]); + const [rowCount, setRowCount] = useState(0); + const translate = useTranslate(); + const refresh = useRefresh(); + const notify = useNotify(); + const handleChange = (e) => { const { name, value } = e.target; setFormData(() => ({ + ...formData, [name]: value })); }; const reset = () => { setFormData({ - name: '', code: '', - groupId: 0 + useStatus: 'F', }) } @@ -85,17 +76,18 @@ const hasarr = data.map(el => +el.matnrId) const selectedData = selectedRows.filter(item => !hasarr.includes(item)).map(id => (tableData.find(row => row.id === id))); const value = selectedData.map((el => { - const dynamicFields = dyFields.reduce((acc, item) => { - acc[item.fields] = el['extendFields']?.[item.fields] || ''; - return acc; - }, {}); return { - matnrId: el.id, - maktx: el.name, - matnrCode: el.code, - stockUnit: el.stockUnit || '', - purUnit: el.purchaseUnit || '', - ...dynamicFields + id: el.id, + code: el.code, + areaId: el.areaId, + barcode: el.barcode || '', + channel: el.channel || '', + col: el.col, + lev: el.lev, + row: el.row, + type: el.type, + useStatus: el.useStatus, + warehouseId: el.warehouseId, } })) setData([...data, ...value]); @@ -103,13 +95,9 @@ reset(); }; - const filters = [ - <SearchInput source="condition" alwaysOn />, - ] - const getData = async () => { setIsLoading(true) - const res = await request.post(`/locItem/page`, { + const res = await request.post(`/loc/page`, { ...formData, current: page?.page, pageSize: page?.pageSize, @@ -193,14 +181,14 @@ <Grid item md={4}> <TextField label={translate('table.field.locItem.locCode')} - name="locCode" - value={formData.name} + name="code" + value={formData.code} onChange={handleChange} size="small" /> </Grid> <Grid item md={2} sx={{ margin: 'auto' }}> - <Button variant="contained" onClick={handleSearch}>鎼滅储</Button> + <Button variant="contained" onClick={handleSearch}>{translate("toolbar.query")}</Button> </Grid> </Grid> </Box> @@ -208,12 +196,10 @@ <AsnWareModalTable tableData={tableData} setTableData={setTableData} - dyFields={dyFields} page={page} rowCount={rowCount} setPage={setPage} isLoading={isLoading} - setDyFields={setDyFields} selectedRows={selectedRows} setSelectedRows={setSelectedRows} /> @@ -233,69 +219,101 @@ export default SelectLocsRevise; -const AsnWareModalTable = ({ tableData, setTableData, page, isLoading, pageSize, setPage, rowCount, selectedRows, setSelectedRows, dyFields, setDyFields }) => { +const AsnWareModalTable = ({ tableData, setTableData, page, isLoading, pageSize, setPage, rowCount, selectedRows, setSelectedRows }) => { const translate = useTranslate(); const notify = useNotify(); const [columns, setColumns] = useState([ - // { field: 'id', headerName: 'ID', width: 100 }, - { field: 'locCode', headerName: translate('table.field.locItem.locCode'), width: 150 }, - { field: 'matnrCode', headerName: translate('table.field.locItem.matnrCode'), width: 200 }, - { field: 'maktx', headerName: translate('table.field.locItem.maktx'), width: 300 }, - { field: 'batch', headerName: translate('table.field.locItem.batch'), width: 100 }, - { field: 'anfme', headerName: translate('table.field.locItem.anfme'), width: 100 }, - { field: 'unit', headerName: translate('table.field.matnr.unit'), width: 100 }, + { + field: 'code', + headerName: translate('table.field.locItem.locCode'), + width: 110, + editable: false, + }, + { + field: 'warehouseId$', + headerName: translate('table.field.loc.warehouseId'), + minWidth: 100, + flex: 1, + editable: false, + }, + { + field: 'areaId$', + headerName: translate('table.field.loc.areaId'), + width: 130, + editable: false, + }, + { + field: 'typeIds$', + headerName: translate('table.field.loc.type'), + minWidth: 100, + flex: 1, + editable: false, + }, + { + field: 'barcode', + headerName: translate('table.field.loc.barcode'), + minWidth: 100, + flex: 1, + editable: false, + }, + { + field: 'useStatus$', + headerName: translate('table.field.loc.useStatus') + "*", + minWidth: 100, + flex: 1, + editable: false, + }, + { + field: 'channel', + headerName: translate('table.field.loc.channel'), + minWidth: 100, + flex: 1, + editable: false, + }, + { + field: 'row', + headerName: translate('table.field.loc.row'), + minWidth: 100, + flex: 1, + editable: false, + }, + { + field: 'col', + headerName: translate('table.field.loc.col'), + minWidth: 100, + flex: 1, + editable: false, + }, + { + field: 'lev', + headerName: translate('table.field.loc.lev'), + minWidth: 100, + flex: 1, + editable: false, + }, + // { + // field: 'action', + // headerName: '鎿嶄綔', + // width: 140, + // lockPosition: 'left', + // renderCell: (params) => ( + // <Tooltip title="Delete"> + // <IconButton onClick={() => handleDelete(params.row)}> + // <Delete /> + // </IconButton> + // <IconButton onClick={() => handleDelete(params.row)}> + // <Save /> + // </IconButton> + // </Tooltip> + // ), + // } ]) - - const action = { - field: 'action', - headerName: '鎿嶄綔', - width: 140, - lockPosition: 'left', - renderCell: (params) => ( - <Tooltip title="Delete"> - <IconButton onClick={() => handleDelete(params.row)}> - <Delete /> - </IconButton> - <IconButton onClick={() => handleDelete(params.row)}> - <Save /> - </IconButton> - </Tooltip> - ), - } const handleSelectionChange = (ids) => { setSelectedRows(ids) }; - - useEffect(() => { - if (dyFields.length < 1) { - getDynamicFields(); - } - }, []); - - const getDynamicFields = async () => { - const { - data: { code, data, msg }, - } = await request.get("/fields/enable/list"); - if (code === 200) { - const cols = data.map(el => ({ - field: el.fields, - headerName: el.fieldsAlise, - minWidth: 100, - flex: 1, - editable: el.unique, - valueGetter: (value, row) => { - return row.extendFields?.[el.fields] || ''; - }, - })) - setDyFields(data) - setColumns([...columns, ...cols, action]) - } else { - notify(msg); - } - } return ( <div style={{ width: '100%' }}> -- Gitblit v1.9.1