skyouc
2 天以前 161e5e1c4e86ca59e945ddcdde9f7bf525f34911
Merge remote-tracking branch 'origin/devlop' into devlop
4个文件已修改
353 ■■■■ 已修改文件
rsf-admin/src/page/orders/outStock/OutOrderList.jsx 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/outStock/OutOrderModal.jsx 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/stockManage/locRevise/LocReviseCreate.jsx 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/stockManage/locRevise/SelectLocsRevise.jsx 204 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 >
  )
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);
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>
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%' }}>