From e05481bd5cc560f3287ceb60f1f771329e27ae4d Mon Sep 17 00:00:00 2001 From: verou <857149855@qq.com> Date: 星期二, 08 四月 2025 11:05:24 +0800 Subject: [PATCH] feat:收货单新增完成和关闭 --- rsf-admin/src/page/asnOrder/AsnOrderList.jsx | 43 ++++++++++++++++++--- rsf-admin/src/page/components/BillStatusField.jsx | 30 +++++++++++++++ rsf-admin/src/page/components/EditTopToolBar.jsx | 2 rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx | 6 +- rsf-admin/src/page/components/ConfirmButton.jsx | 2 rsf-admin/src/config/MyDataProvider.js | 2 - rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx | 13 +++++- rsf-admin/.env | 2 rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx | 2 - 9 files changed, 84 insertions(+), 18 deletions(-) diff --git a/rsf-admin/.env b/rsf-admin/.env index a3c69b2..a8ce658 100644 --- a/rsf-admin/.env +++ b/rsf-admin/.env @@ -1,3 +1,3 @@ -VITE_BASE_IP=127.0.0.1 +VITE_BASE_IP=192.168.4.24 # VITE_BASE_IP=47.76.147.249 VITE_BASE_PORT=8080 diff --git a/rsf-admin/src/config/MyDataProvider.js b/rsf-admin/src/config/MyDataProvider.js index cfc312f..897d7ab 100644 --- a/rsf-admin/src/config/MyDataProvider.js +++ b/rsf-admin/src/config/MyDataProvider.js @@ -60,7 +60,6 @@ // create a record create: async (resource, params) => { - console.log("create", resource, params); const res = await request.post(resource + "/save", params?.data); const { code, msg, data } = res.data; if (code === 200) { @@ -75,7 +74,6 @@ // update a record based on a patch update: async (resource, params) => { - console.log("update", resource, params); const res = await request.post(resource + "/update", { id: params.id, ...params.data, diff --git a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx index c4da83b..91aca74 100644 --- a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx +++ b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx @@ -41,6 +41,8 @@ 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 MyField from "../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; @@ -49,6 +51,7 @@ import FileDownloadIcon from '@mui/icons-material/FileDownload'; import EditIcon from '@mui/icons-material/Edit'; import TaskIcon from '@mui/icons-material/Task'; +import CloseIcon from '@mui/icons-material/Close'; import request from '@/utils/request'; @@ -62,7 +65,10 @@ '& .column-name': { }, '& .opt': { - width: 300 + width: 320 + }, + '& .status': { + width: 90 }, })); @@ -164,8 +170,7 @@ <TextField source="nickname" /> </ReferenceField> <DateField source="createTime" label="common.field.createTime" showTime /> - <TextField source="exceStatus$" label="common.field.status" /> - {/* <BooleanField source="statusBool" label="common.field.status" sortable={false} /> */} + <BillStatusField cellClassName="status" source="exceStatus" label="common.field.status" /> <TextField source="memo" label="common.field.memo" sortable={false} /> <WrapperField cellClassName="opt" label="common.field.opt" width={300} > {/* <Button label="toolbar.print" onClick={print}> @@ -183,7 +188,8 @@ </Button> */} <InspectionButton /> <CompleteButton /> - <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> + {/* <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> */} + <CloseButton /> </WrapperField> </StyledDatagrid> </List> @@ -301,8 +307,33 @@ return ( - <Button onClick={requestComplete} label={"toolbar.complete"} color="success"> + record.exceStatus === 1 && (record.anfme === record.qty ? <Button onClick={requestComplete} label={"toolbar.complete"} color="success"> <TaskIcon /> - </Button> + </Button> : <ConfirmButton label={"toolbar.complete"} color="success" data={'褰撳墠鏀惰揣鏁伴噺灏忎簬璁″垝鏁伴噺锛屾槸鍚︾‘璁ゅ畬鎴�'} startIcon={<TaskIcon />} onConfirm={requestComplete} />) + + ) + + +} + +const CloseButton = () => { + const record = useRecordContext(); + const notify = useNotify(); + const refresh = useRefresh(); + const requestClose = async () => { + const { data: { code, data, msg } } = await request.post(`/asnOrder/close/${record.id}`); + + if (code === 200) { + notify(msg); + refresh() + } else { + notify(msg); + } + } + + return ( + (<Button onClick={requestClose} label={"toolbar.close"} color="error"> + <CloseIcon /> + </Button>) ) } diff --git a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx index 61763e5..4e7f060 100644 --- a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx +++ b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx @@ -14,7 +14,7 @@ import debounce from 'lodash/debounce'; import { DataGrid } from '@mui/x-data-grid'; import PrintModal from './PrintModal'; -import { width } from "@mui/system"; +import PrintIcon from '@mui/icons-material/Print'; const AsnOrderPanel = ({ billReload }) => { const record = useRecordContext(); if (!record) return null; @@ -196,7 +196,7 @@ return ( <> - <Button size="small" variant="contained" color="secondary" onClick={modalChange}>{translate("toolbar.batchPrint")}</Button> + <Button size="small" color="secondary" onClick={modalChange} startIcon={<PrintIcon />}>{translate("toolbar.batchPrint")}</Button> <PrintModal open={createDialog} @@ -218,7 +218,7 @@ return ( <> - <Button size="small" variant="contained" color="secondary" onClick={() => setCreateDialog(true)}>{translate("toolbar.print")}</Button> + <Button size="small" color="secondary" onClick={() => setCreateDialog(true)} startIcon={<PrintIcon />}>{translate("toolbar.print")}</Button> <PrintModal open={createDialog} diff --git a/rsf-admin/src/page/components/BillStatusField.jsx b/rsf-admin/src/page/components/BillStatusField.jsx new file mode 100644 index 0000000..b60ff1c --- /dev/null +++ b/rsf-admin/src/page/components/BillStatusField.jsx @@ -0,0 +1,30 @@ +import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; +import { + useRecordContext, +} from 'react-admin'; +import { Box, Typography, Card, Stack } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import CircleIcon from '@mui/icons-material/Circle'; + +const BillStatusField = () => { + const record = useRecordContext(); + const theme = useTheme(); + const color = { + 0: '#BFBFBF', + 1: '#FFC53D', + 2: '#52C41A', + 3: '#595959', + 4: '#FF4D4F', + } + return ( + <Typography + variant="body2" + sx={{ display: 'flex', alignItems: 'center' }} + > + <CircleIcon sx={{ fontSize: 10, color: color[record.exceStatus || 0], marginRight: '3px' }} /> {record.exceStatus$} + </Typography > + ) + +} + +export default BillStatusField; \ No newline at end of file diff --git a/rsf-admin/src/page/components/ConfirmButton.jsx b/rsf-admin/src/page/components/ConfirmButton.jsx index e39fe98..c315e7c 100644 --- a/rsf-admin/src/page/components/ConfirmButton.jsx +++ b/rsf-admin/src/page/components/ConfirmButton.jsx @@ -44,7 +44,7 @@ <DialogTitle>{translate('common.msg.confirm.tip')}</DialogTitle> <DialogContent> <DialogContentText> - {translate('common.msg.confirm.desc')} + {data ? data : translate('common.msg.confirm.desc')} </DialogContentText> </DialogContent> <DialogActions> diff --git a/rsf-admin/src/page/components/EditTopToolBar.jsx b/rsf-admin/src/page/components/EditTopToolBar.jsx index fbbdb38..8a5c8f6 100644 --- a/rsf-admin/src/page/components/EditTopToolBar.jsx +++ b/rsf-admin/src/page/components/EditTopToolBar.jsx @@ -9,7 +9,7 @@ const resource = useResourceContext(); const translate = useTranslate(); - + return ( <TopToolbar sx={{ marginTop: 1, diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx index 80fac6f..d04c3e1 100644 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx +++ b/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx @@ -19,6 +19,8 @@ required, useRecordContext, DeleteButton, + useNotify, + useRedirect, } from 'react-admin'; import { useWatch, useFormContext } from "react-hook-form"; import { Stack, Grid, Box, Typography } from '@mui/material'; @@ -30,11 +32,18 @@ import StatusSelectInput from "../../../components/StatusSelectInput"; const FormToolbar = () => { - const { getValues } = useFormContext(); + const form = useFormContext(); + const redirect = useRedirect(); + const notify = useNotify(); + const onSuccess = (data) => { + const { dictTypeId, dictTypeCode } = data + notify(`淇敼鎴愬姛!`); + redirect(`/dictData?dictTypeId=${dictTypeId}&code=${dictTypeCode}`); + } return ( <Toolbar sx={{ justifyContent: 'space-between' }}> - <SaveButton /> + <SaveButton type="button" mutationOptions={{ onSuccess }} /> <DeleteButton mutationMode="optimistic" /> </Toolbar> ) diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx index 7af9d9d..5506184 100644 --- a/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx +++ b/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx @@ -62,8 +62,6 @@ const filters = [ <SearchInput source="condition" alwaysOn />, - <DateInput label='common.time.after' source="timeStart" alwaysOn />, - <DateInput label='common.time.before' source="timeEnd" alwaysOn />, <TextInput source="dictTypeId" label="table.field.dictData.dictTypeId" />, <TextInput source="dictTypeCode" label="table.field.dictData.dictTypeCode" />, -- Gitblit v1.9.1