From 4496b9019ba423dd1c51c719bcc0a5938d90fff9 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期二, 22 四月 2025 17:33:18 +0800 Subject: [PATCH] #修改优化 1. DO单明细编码优化 2. DO单明细新增优化 3. 出库单新增单据增加新单据功能 --- rsf-admin/src/page/orders/outStock/OutOrderList.jsx | 257 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 257 insertions(+), 0 deletions(-) diff --git a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx new file mode 100644 index 0000000..489b6d2 --- /dev/null +++ b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx @@ -0,0 +1,257 @@ +import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; +import { useLocation, useNavigate } from 'react-router-dom'; +import { + List, + DatagridConfigurable, + SearchInput, + TopToolbar, + SelectColumnsButton, + EditButton, + FilterButton, + CreateButton, + ExportButton, + BulkDeleteButton, + useDataProvider, + WrapperField, + useRecordContext, + useTranslate, + useNotify, + useRefresh, + useListContext, + FunctionField, + TextField, + NumberField, + DateField, + BooleanField, + ReferenceField, + TextInput, + DateTimeInput, + DateInput, + SelectInput, + NumberInput, + ReferenceInput, + ReferenceArrayInput, + AutocompleteInput, + DeleteButton, + Button, + useRedirect, + useUnselectAll, +} from 'react-admin'; +import { Box, Typography, Card, Stack } from '@mui/material'; +import { styled } from '@mui/material/styles'; +import EmptyData from "../../components/EmptyData"; +import MyCreateButton from "../../components/MyCreateButton"; +import MyExportButton from '../../components/MyExportButton'; +import BillStatusField from '../../components/BillStatusField'; +import ConfirmButton from '../../components/ConfirmButton'; +import PageDrawer from "../../components/PageDrawer"; +import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; +import EditIcon from '@mui/icons-material/Edit'; +import request from '@/utils/request'; +import DictionarySelect from "../../components/DictionarySelect"; +import ImportButton from "../../components/ImportButton"; +import DetailsIcon from '@mui/icons-material/Details'; +import CancelIcon from '@mui/icons-material/Cancel'; +import OutOrderCreate from "./OutOrderCreate"; +import AddIcon from '@mui/icons-material/Add'; +import OutOrderModal from "./OutOrderModal"; + +const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ + '& .css-1vooibu-MuiSvgIcon-root': { + height: '.9em' + }, + '& .RaDatagrid-row': { + cursor: 'auto' + }, + '& .column-name': { + }, + '& .opt': { + width: 220 + }, + '& .wkType': { + width: 110 + }, + '& .status': { + width: 90 + }, +})); + +const filters = [ + <SearchInput source="condition" alwaysOn />, + <TextInput source="code" label="table.field.outStock.code" alwaysOn />, + <TextInput source="poCode" label="table.field.outStock.poCode" />, + <NumberInput source="poId" label="table.field.outStock.poId" />, + <ReferenceInput source="type" reference="dictData" filter={{ dictTypeCode: 'sys_business_type' }} label="table.field.outStock.type" alwaysOn> + <AutocompleteInput label="table.field.outStock.type" optionValue="value" /> + </ReferenceInput>, + <ReferenceInput source="wkType" reference="dictData" filter={{ dictTypeCode: 'sys_business_type' }} label="table.field.outStock.wkType" alwaysOn> + <AutocompleteInput label="table.field.outStock.wkType" optionValue="value" /> + </ReferenceInput>, + <NumberInput source="anfme" label="table.field.outStock.anfme" />, + <NumberInput source="qty" label="table.field.outStock.qty" />, + <TextInput source="logisNo" label="table.field.outStock.logisNo" />, + <DateInput source="arrTime" label="table.field.outStock.arrTime" />, + <SelectInput source="rleStatus" label="table.field.outStock.rleStatus" + choices={[ + { id: 0, name: ' 姝e父' }, + { id: 1, name: ' 宸查噴鏀�' }, + ]} + />, + + <TextInput label="common.field.memo" source="memo" />, + <DictionarySelect + label='table.field.outStock.exceStatus' + name="exceStatus" + dictTypeCode="sys_asn_exce_status" + alwaysOn + />, + +] + +const OutOrderList = (props) => { + const translate = useTranslate(); + const [createDialog, setCreateDialog] = useState(false); + const [manualDialog, setManualDialog] = 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')) || []; + return ( + <Box display="flex"> + <List + resource="outStock" + storeKey='outStock' + sx={{ + flexGrow: 1, + transition: (theme) => + theme.transitions.create(['all'], { + duration: theme.transitions.duration.enteringScreen, + }), + marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, + }} + title={"menu.outStock"} + empty={false} + filters={filters} + filter={{ deleted: 0, type: 'out' }} + sort={{ field: "create_time", order: "desc" }} + actions={( + <TopToolbar> + <FilterButton /> + <CreateByOrderButton setCreateDialog={setCreateDialog}/> + <MyCreateButton onClick={() => { setManualDialog(true) }} /> + <SelectColumnsButton preferenceKey='outStock' /> + <ImportButton value={'asnOrderItem'} /> + <MyExportButton /> + </TopToolbar> + )} + perPage={DEFAULT_PAGE_SIZE} + > + <StyledDatagrid + sx={{ width: '100%' }} + preferenceKey='outStock' + bulkActionButtons={ + <> + <MyExportButton /> + <BulkDeleteButton mutationMode={OPERATE_MODE} + /> + </>} + rowClick={false} + expandSingle={true} + omit={['id', 'createTime', 'createBy', 'memo', 'poId', 'rleStatus$']} + > + <NumberField source="id" /> + <TextField source="code" label="table.field.outStock.code" /> + <TextField source="poCode" label="table.field.outStock.poCode" /> + <NumberField source="poId" label="table.field.outStock.poId" /> + <TextField source="type$" label="table.field.outStock.type" /> + <TextField cellClassName="wkType" source="wkType$" label="table.field.outStock.wkType" /> + <NumberField source="anfme" label="table.field.outStock.anfme" /> + <NumberField source="qty" label="table.field.outStock.qty" /> + <TextField source="logisNo" label="table.field.outStock.logisNo" /> + <TextField source="rleStatus$" label="table.field.outStock.rleStatus" 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 /> + <BillStatusField cellClassName="status" source="exceStatus" label="table.field.outStock.exceStatus" /> + <TextField source="memo" label="common.field.memo" sortable={false} /> + <WrapperField cellClassName="opt" label="common.field.opt" > + <EditButton label="toolbar.detail" icon={(<DetailsIcon />)}></EditButton> + {/* <MyButton setCreateDialog={setCreateDialog} setmodalType={setmodalType} /> */} + <CancelButton></CancelButton> + </WrapperField> + </StyledDatagrid> + </List> + <OutOrderCreate open={manualDialog} setOpen={setManualDialog} /> + <OutOrderModal + open={createDialog} + setOpen={setCreateDialog} + /> + <PageDrawer + title='AsnOrder Detail' + drawerVal={drawerVal} + setDrawerVal={setDrawerVal} + > + </PageDrawer> + </Box > + ) +} +export default OutOrderList; + +const MyButton = ({ setCreateDialog, setmodalType }) => { + const record = useRecordContext(); + const handleEditClick = (btn) => { + btn.stopPropagation(); + const id = record.id; + setmodalType(id); + setCreateDialog(true); + }; + return ( + <Button + color="primary" + startIcon={<EditIcon />} + onClick={(btn) => handleEditClick(btn)} + sx={{ ml: 1 }} + label={'ra.action.edit'} + > + </Button> + ) +} + +const CreateByOrderButton = ({setCreateDialog}) => { + const record = useRecordContext(); + const notify = useNotify(); + const refresh = useRefresh(); + + const createByOrder = async (event) => { + event.stopPropagation(); + setCreateDialog(true); + } + + return ( + <Button onClick={createByOrder} label={'toolbar.asnCreate'}> <AddIcon /> </Button> + ) + +} + +const CancelButton = () => { + const record = useRecordContext(); + const notify = useNotify(); + const refresh = useRefresh(); + console.log(record); + + const cancelOrder = async () => { + const { data: { code, data, msg } } = await request.get(`/outStock/cancel/${record?.id}`); + if (code === 200) { + notify(msg); + refresh() + } else { + notify(msg); + } + } + + return ( + <ConfirmButton label={"toolbar.cancel"} startIcon={<CancelIcon />} onConfirm={cancelOrder} /> + ) +} -- Gitblit v1.9.1