Merge remote-tracking branch 'origin/devlop' into devlop
| | |
| | | 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"; |
| | |
| | | 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': { |
| | |
| | | ] |
| | | |
| | | 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) => { |
| | |
| | | drawerVal={drawerVal} |
| | | setDrawerVal={setDrawerVal} |
| | | > |
| | | <OutStockPublic record={select} open={drawerVal} setOpen={setDrawerVal} /> |
| | | <OutStockPublic record={select} open={drawerVal} setOpen={setDrawerVal} /> |
| | | </PageEditDrawer> |
| | | </Box > |
| | | ) |
| | |
| | | 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': { |
| | |
| | | |
| | | 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); |
| | |
| | | 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, |
| | |
| | | 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, |
| | |
| | | ), |
| | | }, |
| | | { |
| | | field: 'splrName', |
| | | headerName: translate('table.field.outStockItem.splrName') + "*", |
| | | field: 'useStatus', |
| | | headerName: translate('table.field.loc.useStatus') + "*", |
| | | minWidth: 100, |
| | | flex: 1, |
| | | editable: true, |
| | |
| | | ), |
| | | }, |
| | | { |
| | | 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, |
| | | }, |
| | | ]) |
| | | |
| | |
| | | |
| | | 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) => { |
| | |
| | | }; |
| | | |
| | | tableRef.current = useGridApiRef(); |
| | | |
| | | const tableIds = tabelData.map(map => map.id); |
| | | // setSelectedRows(tableIds); |
| | | // // console.log(selectedRows); |
| | | |
| | | |
| | | return ( |
| | | <Box> |
| | |
| | | } 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': { |
| | |
| | | }, |
| | | })); |
| | | |
| | | |
| | | |
| | | 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); |
| | |
| | | }; |
| | | |
| | | 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', |
| | | }) |
| | | } |
| | | |
| | |
| | | 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]); |
| | |
| | | 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, |
| | |
| | | <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> |
| | |
| | | <AsnWareModalTable |
| | | tableData={tableData} |
| | | setTableData={setTableData} |
| | | dyFields={dyFields} |
| | | page={page} |
| | | rowCount={rowCount} |
| | | setPage={setPage} |
| | | isLoading={isLoading} |
| | | setDyFields={setDyFields} |
| | | selectedRows={selectedRows} |
| | | setSelectedRows={setSelectedRows} |
| | | /> |
| | |
| | | |
| | | 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%' }}> |