From 5a96b6b8174bf2c595e6c691b6ffc3a52970a0e7 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期六, 19 七月 2025 13:36:05 +0800 Subject: [PATCH] 盘点差异单功能优化 --- rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffResonDialog.jsx | 63 +++++++++++++++++++++ rsf-admin/src/page/orders/check/CheckOrderItemList.jsx | 3 rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx | 33 ++++++++-- rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx | 14 ---- rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckDiffExceStatus.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java | 30 ++++++++++ 6 files changed, 121 insertions(+), 24 deletions(-) diff --git a/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx b/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx index ee9768e..c4e97ff 100644 --- a/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx +++ b/rsf-admin/src/page/orders/check/CheckOrderItemList.jsx @@ -41,7 +41,6 @@ import PageDrawer from "../../components/PageDrawer"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting'; - const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { height: '.9em', @@ -152,6 +151,7 @@ <TextField source="memo" label="common.field.memo" sortable={false} /> </StyledDatagrid> </List> + {/* <OutOrderItemCreate open={createDialog} setOpen={setCreateDialog} @@ -172,6 +172,7 @@ </> ) } + OutOrderItemList.Context = React.createContext() export default OutOrderItemList; diff --git a/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx b/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx index 053acb4..f813bbb 100644 --- a/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx +++ b/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx @@ -92,7 +92,6 @@ const CheckDiffList = () => { const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); @@ -146,7 +145,6 @@ <WrapperField cellClassName="opt" label="common.field.opt"> <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> {/* <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> */} - <CheckButton /> </WrapperField> </StyledDatagrid> </List> @@ -165,15 +163,3 @@ } export default CheckDiffList; - -const CheckButton = () => { - const record = useRecordContext(); - const handleEditClick = (btn) => { - btn.stopPropagation() - - } - - return ( - <ConfirmButton label={"ra.action.approved"} startIcon={<ApiOutlinedIcon />} onConfirm={handleEditClick} size={"small"} /> - ) -} diff --git a/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx b/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx index 16208cf..2ebe8e5 100644 --- a/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx +++ b/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffItemList.jsx @@ -32,6 +32,8 @@ AutocompleteInput, DeleteButton, useGetRecordId, + Button, + useRefresh, } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -39,11 +41,10 @@ import BillStatusField from '../../../components/BillStatusField'; import ApiOutlinedIcon from '@mui/icons-material/ApiOutlined'; 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'; -import * as Common from '@/utils/common'; import CheckDiffField from "../../../components/CheckDiffField"; +import CheckDiffResonDialog from "./CheckDiffResonDialog"; +import request from '@/utils/request'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -92,6 +93,13 @@ const orderId = useGetRecordId(); const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); + const [waveRule, setWaveRule] = useState(false); + + //鑾峰彇娉㈡瑙勫垯 + const closeDialog = async (value) => { + setWaveRule(false) + + } return ( <Box display="flex"> @@ -145,12 +153,13 @@ <TextField source="createBy$" label="common.field.createBy" /> <DateField source="createTime" label="common.field.createTime" showTime /> <TextField source="memo" label="common.field.memo" sortable={false} /> - <BillStatusField cellClassName="status" source="exceStatus" label="table.field.checkOrder.exceStatus" /> + <BillStatusField cellClassName="status" source="exceStatus$" label="table.field.checkOrder.exceStatus" /> <WrapperField cellClassName="opt" label="common.field.opt"> <CheckButton /> </WrapperField> </StyledDatagrid> </List> + {/* <CheckDiffResonDialog open={waveRule} setOpen={setWaveRule} onClose={closeDialog} /> */} </Box> ) } @@ -158,13 +167,21 @@ const CheckButton = () => { const record = useRecordContext(); - const handleEditClick = (btn) => { - btn.stopPropagation() - + const notify = useNotify(); + const refresh = useRefresh(); + const handleEditClick = async () => { + record.exceStatus = 2; + const { data: { code, data, msg } } = await request.post(`/checkDiffItem/update`, record); + if (code === 200) { + notify(msg); + refresh() + } else { + notify(msg); + } } return ( - <ConfirmButton label={"ra.action.approved"} startIcon={<ApiOutlinedIcon />} onConfirm={handleEditClick} size={"small"} /> + record?.exceStatus != 2 ? <><ConfirmButton label={"ra.action.approved"} startIcon={<ApiOutlinedIcon />} onConfirm={handleEditClick} size={"small"} /></> : <></> ) } diff --git a/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffResonDialog.jsx b/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffResonDialog.jsx new file mode 100644 index 0000000..4995c2d --- /dev/null +++ b/rsf-admin/src/page/orders/check/checkDiffItem/CheckDiffResonDialog.jsx @@ -0,0 +1,63 @@ +import { Box, Card, Grid, List, LinearProgress, Select, MenuItem, ListItemText, ListItemAvatar, Avatar, ListItemButton, Dialog, DialogTitle, ListItem, DialogContent, DialogActions, Button } from "@mui/material"; +import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE, DEFAULT_TYPE } from '@/config/setting'; +import { SimpleForm, TextInput, ReferenceInput, useTranslate, AutocompleteInput } from "react-admin"; +import React, { useState, useRef, useEffect, useMemo } from "react"; +import { Delete, Edit, Add } from '@mui/icons-material'; +import SaveIcon from '@mui/icons-material/Save'; +import request from '@/utils/request'; + +const CheckDiffResonDialog = (props) => { + const translate = useTranslate(); + const { onClose, selectedValue, open, setOpen } = props; + const [siteNos, setSiteNos] = useState([]); + const [formData, setFormData] = useState({ + id: DEFAULT_TYPE + }); + + const handleClose = () => { + onClose(null); + } + + const handleSelect = () => { + onClose(formData); + } + + const handleListItemClick = (value) => { + onClose(value); + } + + const handleChange = (event) => { + console.log(event); + setFormData({ id: event }) + }; + + return ( + <Dialog + onClose={handleClose} + open={open} + aria-labelledby="alert-dialog-title" + aria-describedby="alert-dialog-description" + > + <DialogTitle id="alert-dialog-title">{translate("toolbar.selectWave")}</DialogTitle> + <DialogContent sx={{ width: 600 }}> + <SimpleForm toolbar={false} defaultValue={formData}> + <ReferenceInput source="id" reference="waveRule" > + <AutocompleteInput + label={'toolbar.selectWave'} + defaultValue={DEFAULT_TYPE} + onChange={handleChange} + /> + </ReferenceInput> + </SimpleForm> + </DialogContent> + <DialogActions> + <Button onClick={handleClose} variant="outlined">{translate('toolbar.cancel')}</Button> + <Button onClick={handleSelect} autoFocus startIcon={<SaveIcon />} variant="contained"> + {translate('toolbar.confirm')} + </Button> + </DialogActions> + </Dialog> + ); +} + +export default CheckDiffResonDialog; \ No newline at end of file diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java index 120283a..b3ddb91 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java @@ -1,16 +1,22 @@ package com.vincent.rsf.server.manager.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; +import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.common.utils.ExcelUtil; import com.vincent.rsf.server.common.annotation.OperationLog; import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; +import com.vincent.rsf.server.manager.entity.CheckDiff; import com.vincent.rsf.server.manager.entity.CheckDiffItem; +import com.vincent.rsf.server.manager.enums.CheckDiffExceStatus; import com.vincent.rsf.server.manager.service.CheckDiffItemService; +import com.vincent.rsf.server.manager.service.CheckDiffService; +import com.vincent.rsf.server.manager.service.impl.CheckDiffServiceImpl; import com.vincent.rsf.server.system.controller.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -18,12 +24,15 @@ import javax.servlet.http.HttpServletResponse; import java.util.*; +import java.util.stream.Collectors; @RestController public class CheckDiffItemController extends BaseController { @Autowired private CheckDiffItemService checkDiffItemService; + @Autowired + private CheckDiffService checkDiffService; @PreAuthorize("hasAuthority('manager:checkDiff:list')") @PostMapping("/checkDiffItem/page") @@ -74,6 +83,27 @@ if (!checkDiffItemService.updateById(checkDiffItem)) { return R.error("Update Fail"); } + + List<CheckDiffItem> diffItems = checkDiffItemService.list(new LambdaQueryWrapper<CheckDiffItem>().eq(CheckDiffItem::getCheckId, checkDiffItem.getCheckId())); + if (!diffItems.isEmpty()) { + Map<Integer, List<CheckDiffItem>> listMap = diffItems.stream().collect(Collectors.groupingBy(CheckDiffItem::getExceStatus)); + List<CheckDiffItem> checkDiffItems = listMap.get(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val); + if (diffItems.size() == checkDiffItems.size()) { + if (!checkDiffService.update(new LambdaUpdateWrapper<CheckDiff>() + .eq(CheckDiff::getId, checkDiffItem.getCheckId()) + .set(CheckDiff::getExceStatus, CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val))) { + throw new CoolException("鐩樼偣鍗曠姸鎬佹洿鏂板け璐ワ紒锛�"); + } + } else { + if (!checkDiffService.update(new LambdaUpdateWrapper<CheckDiff>() + .eq(CheckDiff::getId, checkDiffItem.getCheckId()) + .set(CheckDiff::getExceStatus, CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val))) { + throw new CoolException("鐩樼偣鍗曠姸鎬佹洿鏂板け璐ワ紒锛�"); + } + } + } + + return R.ok("Update Success").add(checkDiffItem); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckDiffExceStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckDiffExceStatus.java index 000e375..f783c6b 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckDiffExceStatus.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckDiffExceStatus.java @@ -11,7 +11,7 @@ //鐩樼偣宸紓鍗曟墽琛岀姸鎬� CHECK_DIFF_EXCE_STATUS_INIT("0", "鍒濆鍖�"), - CHECK_DIFF_EXCE_STATUS_HOLD("1", "寰呭鏍�"), + CHECK_DIFF_EXCE_STATUS_HOLD("1", "澶勭悊涓�"), CHECK_DIFF_EXCE_STATUS_END("2", "宸插鏍�"), ; -- Gitblit v1.9.1