chen.lin
2 天以前 9140aee230de0ef41de9682a9353fbd372e2bcaa
rsf-admin/src/page/histories/asnOrderLog/AsnOrderLogList.jsx
@@ -1,210 +1,7 @@
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,
    Button,
    useRecordSelection,
    useRefresh,
} from 'react-admin';
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
import DictionarySelect from "../../components/DictionarySelect";
import MyCreateButton from "../../components/MyCreateButton";
import MyExportButton from '../../components/MyExportButton';
import { Box, Typography, Card, Stack } from '@mui/material';
import ConfirmButton from '../../components/ConfirmButton';
import PageDrawer from "../../components/PageDrawer";
import AsnOrderLogCreate from "./AsnOrderLogCreate";
import CachedIcon from '@mui/icons-material/Cached';
import EmptyData from "../../components/EmptyData";
import AsnOrderLogPanel from "./AsnOrderLogPanel";
import { styled } from '@mui/material/styles';
import * as Common from '@/utils/common';
import request from '@/utils/request';
import React from "react";
import AsnOrderLogListBase from "./AsnOrderLogListBase";
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
    '& .css-1vooibu-MuiSvgIcon-root': {
        height: '.9em'
    },
    '& .RaDatagrid-row': {
        cursor: 'auto'
    },
    '& .column-name': {
    },
    '& .opt': {
        width: 150
    },
    '& .MuiTableCell-root': {
        whiteSpace: 'nowrap',
        overflow: 'visible',
        textOverflow: 'unset'
    }
}));
const AsnOrderLogList = () => {
    const translate = useTranslate();
    const [createDialog, setCreateDialog] = useState(false);
    const [drawerVal, setDrawerVal] = useState(false);
    const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_order_type')) || [];
    const filters = [
        <SearchInput source="condition" alwaysOn />,
        <TextInput source="code" label="table.field.asnOrderLog.code" />,
        <TextInput source="poCode" label="table.field.asnOrderLog.poCode" />,
        <NumberInput source="poId" label="table.field.asnOrderLog.poId" />,
        // <TextInput source="type" label="table.field.asnOrderLog.type" />,
        // <TextInput source="wkType" label="table.field.asnOrderLog.wkType" />,
        <NumberInput source="anfme" label="table.field.asnOrderLog.anfme" />,
        <NumberInput source="qty" label="table.field.asnOrderLog.qty" />,
        <TextInput source="logisNo" label="table.field.asnOrderLog.logisNo" />,
        <DateInput source="arrTime" label="table.field.asnOrderLog.arrTime" />,
        // <SelectInput source="ntyStatus" label="table.field.asnOrderLog.ntyStatus"
        //     choices={[
        //         { id: 0, name: ' 未上报' },
        //         { id: 1, name: ' 已上报' },
        //         { id: 2, name: ' 部分上报' },
        //     ]}
        // />,
        <AutocompleteInput
            choices={dicts}
            optionText="label"
            label="table.field.asnOrder.type"
            source="type"
            // defaultValue="in"
            optionValue="value"
            parse={v => v}
            alwaysOn
        />,
        <ReferenceInput source="wkType" reference="dictData" filter={{ dictTypeCode: 'sys_business_type', group: "1" }} label="table.field.asnOrder.wkType" alwaysOn>
            <AutocompleteInput label="table.field.asnOrder.wkType" optionValue="value" />
        </ReferenceInput>,
        <DictionarySelect
            label='table.field.asnOrder.exceStatus'
            name="exceStatus"
            group="1"
            dictTypeCode="sys_asn_exce_status"
            alwaysOn
        />,
    ]
    return (
        <Box display="flex">
            <List
                sx={{
                    flexGrow: 1,
                    transition: (theme) =>
                        theme.transitions.create(['all'], {
                            duration: theme.transitions.duration.enteringScreen,
                        }),
                    marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
                }}
                title={"menu.asnOrderLog"}
                empty={false}
                filters={filters}
                sort={{ field: "create_time", order: "desc" }}
                actions={(
                    <TopToolbar>
                        <FilterButton />
                        <SelectColumnsButton preferenceKey='asnOrderLog' />
                        {/* <MyExportButton /> */}
                    </TopToolbar>
                )}
                perPage={DEFAULT_PAGE_SIZE}
            >
                <StyledDatagrid
                    preferenceKey='asnOrderLog'
                    bulkActionButtons={false}
                    rowClick={'edit'}
                    expand={false}
                    expandSingle={true}
                    omit={['id', 'createTime', 'createBy', 'memo', 'logisNo', 'poId', 'rleStatus$', 'statusBool', 'createBy$']}
                >
                    <NumberField source="id" />
                    <TextField source="code" label="table.field.asnOrderLog.code" />
                    <TextField source="poCode" label="table.field.asnOrderLog.poCode" />
                    <NumberField source="poId" label="table.field.asnOrderLog.poId" />
                    <TextField source="type$" label="table.field.asnOrderLog.type" />
                    <TextField source="wkType$" label="table.field.asnOrderLog.wkType" />
                    <NumberField source="anfme" label="table.field.asnOrderLog.anfme" />
                    <NumberField source="qty" label="table.field.asnOrderLog.qty" />
                    <TextField source="logisNo" label="table.field.asnOrderLog.logisNo" />
                    <DateField source="arrTime" label="table.field.asnOrderLog.arrTime" showTime />
                    <TextField source="rleStatus$" label="table.field.asnOrderLog.rleStatus" sortable={false} />
                    <TextField source="ntyStatus$" label="table.field.asnOrderLog.ntyStatus" sortable={false} />
                    <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">
                        <ContinueButton />
                    </WrapperField>
                </StyledDatagrid>
            </List>
            <AsnOrderLogCreate
                open={createDialog}
                setOpen={setCreateDialog}
            />
            <PageDrawer
                title='AsnOrderLog Detail'
                drawerVal={drawerVal}
                setDrawerVal={setDrawerVal}
            >
            </PageDrawer>
        </Box>
    )
/** 入库历史单列表:固定 type=in,请求后端 asnOrderLog 接口 */
export default function AsnOrderLogList() {
    return <AsnOrderLogListBase typeFilter="in" listTitle="menu.asnOrderLog" />;
}
export default AsnOrderLogList;
const ContinueButton = () => {
    const refresh = useRefresh();
    const record = useRecordContext();
    const notify = useNotify();
    const continueReceipt = async () => {
        const { data: { code, data, msg } } = await request.post(`/asnOrderLog/continue/${record.id}`);
        if (code === 200) {
            notify(msg);
        } else {
            notify(msg);
        }
        refresh();
    }
    return (
        record.type == 'in' ? <ConfirmButton label={"toolbar.continue"} startIcon={<CachedIcon />} onConfirm={continueReceipt} /> : <></>
    )
}