skyouc
2025-08-06 f34089d1d321efe55c98e6f2638d924ae515effd
rsf-admin/src/page/stockManage/locRevise/ReviseLogList.jsx
New file
@@ -0,0 +1,182 @@
import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
import { useNavigate } from 'react-router-dom';
import {
    List,
    DatagridConfigurable,
    SearchInput,
    TopToolbar,
    SelectColumnsButton,
    EditButton,
    FilterButton,
    CreateButton,
    ExportButton,
    BulkDeleteButton,
    WrapperField,
    useRecordContext,
    useTranslate,
    useNotify,
    useListContext,
    FunctionField,
    TextField,
    NumberField,
    DateField,
    BooleanField,
    ReferenceField,
    TextInput,
    DateTimeInput,
    DateInput,
    SelectInput,
    NumberInput,
    ReferenceInput,
    ReferenceArrayInput,
    AutocompleteInput,
    DeleteButton,
    useGetRecordId,
    Button,
} from 'react-admin';
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
import MyCreateButton from "@/page/components/MyCreateButton";
import { Box, Typography, Card, Stack } from '@mui/material';
import ReviseLogItemList from "./ReviseLogItemList";
import SelectLocsRevise from "./SelectLocsRevise";
import EditIcon from '@mui/icons-material/Edit';
import LocsReviseDetl from "./LocsReviseDetl";
import { styled } from '@mui/material/styles';
import * as Common from '@/utils/common';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
    '& .css-1vooibu-MuiSvgIcon-root': {
        height: '.9em'
    },
    '& .RaDatagrid-row': {
        cursor: 'auto'
    },
    '& .column-name': {
    },
    '& .opt': {
        width: 200
    },
}));
const filters = [
    <SearchInput source="condition" alwaysOn />,
    <DateInput label='common.time.after' source="timeStart" alwaysOn />,
    <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
    <NumberInput source="reviseId" label="table.field.reviseLog.reviseId" />,
    <TextInput source="reviseCode" label="table.field.reviseLog.reviseCode" />,
    <NumberInput source="warehouseId" label="table.field.loc.warehouseId" />,
    <NumberInput source="areaId" label="table.field.loc.areaId" />,
    <NumberInput source="type" label="table.field.loc.type" />,
    <TextInput source="barcode" label="table.field.loc.barcode" />,
    <TextInput source="useStatus" label="table.field.loc.useStatus" />,
    <NumberInput source="channel" label="table.field.loc.channel" />,
    <NumberInput source="row" label="table.field.loc.row" />,
    <NumberInput source="col" label="table.field.loc.col" />,
    <NumberInput source="lev" label="table.field.loc.lev" />,
    <TextInput label="common.field.memo" source="memo" />,
    <SelectInput
        label="common.field.status"
        source="status"
        choices={[
            { id: '1', name: 'common.enums.statusTrue' },
            { id: '0', name: 'common.enums.statusFalse' },
        ]}
        resettable
    />,
]
const ReviseLogList = () => {
    const [createDialog, setCreateDialog] = useState(false);
    const [drawerVal, setDrawerVal] = useState(false);
    const [item, setItem] = useState();
    const translate = useTranslate();
    const orderId = useGetRecordId();
    return (
        <Box display="flex">
            <List
                resource="reviseLog"
                sx={{
                    flexGrow: 1,
                    transition: (theme) =>
                        theme.transitions.create(['all'], {
                            duration: theme.transitions.duration.enteringScreen,
                        }),
                }}
                title={"menu.reviseLog"}
                empty={false}
                filters={filters}
                filter={{ reviseId: orderId }}
                sort={{ field: "create_time", order: "desc" }}
                actions={(
                    <TopToolbar>
                        <FilterButton />
                        <MyCreateButton onClick={() => { setCreateDialog(true); }} />
                        <SelectColumnsButton preferenceKey='check' />
                    </TopToolbar>
                )}
                perPage={DEFAULT_PAGE_SIZE}
            >
                <StyledDatagrid
                    preferenceKey='reviseLog'
                    bulkActionButtons={false}
                    rowClick={(id, resource, record) => false}
                    expand={<ReviseLogItemList />}
                    expandSingle={true}
                    omit={['id', 'reviseId', 'createTime', 'createBy', 'memo']}
                >
                    <NumberField source="id" />
                    <NumberField source="reviseId" label="table.field.reviseLog.reviseId" />
                    <TextField source="reviseCode" label="table.field.reviseLog.reviseCode" />
                    <TextField source="locCode" label="table.field.locItem.locCode" />
                    <NumberField source="warehouseId" label="table.field.loc.warehouseId" />
                    <NumberField source="areaId" label="table.field.loc.areaId" />
                    <NumberField source="type" label="table.field.loc.type" />
                    <TextField source="barcode" label="table.field.loc.barcode" />
                    <TextField source="useStatus" label="table.field.loc.useStatus" />
                    <NumberField source="channel" label="table.field.loc.channel" />
                    <NumberField source="row" label="table.field.loc.row" />
                    <NumberField source="col" label="table.field.loc.col" />
                    <NumberField source="lev" label="table.field.loc.lev" />
                    <TextField source="updateBy$" label="common.field.updateBy" />
                    <DateField source="updateTime" label="common.field.updateTime" showTime />
                    <TextField source="createBy$" label="common.field.createBy" />
                    <DateField source="createTime" label="common.field.createTime" showTime />
                    <BooleanField source="statusBool" label="common.field.status" sortable={false} />
                    <TextField source="memo" label="common.field.memo" sortable={false} />
                    <WrapperField cellClassName="opt" label="common.field.opt">
                        <EditLocRevise setDrawerVal={setDrawerVal} setItem={setItem} />
                        <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} redirect={false} />
                    </WrapperField>
                </StyledDatagrid>
            </List>
            <SelectLocsRevise
                locRevise={orderId}
                open={createDialog}
                setOpen={setCreateDialog}
            />
            <LocsReviseDetl
                open={drawerVal}
                record={item}
                setOpen={setDrawerVal}
            />
        </Box>
    )
}
export default ReviseLogList;
const EditLocRevise = ({ setDrawerVal, setItem }) => {
    const record = useRecordContext();
    console.log("=======>");
    console.log(record);
    const editRevise = () => {
        setDrawerVal(true)
        setItem(record)
    }
    return (
        <Button label="common.button.edit" startIcon={<EditIcon />} onClick={editRevise}></Button>
    )
}