From d79db0da7de1c22e6803a45144ccdd9c931fbbc1 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期六, 29 三月 2025 08:58:37 +0800 Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop --- rsf-admin/src/page/asnOrder/AsnOrderModal.jsx | 180 +++++++++++++++++++++++++++++++++++------------------------ 1 files changed, 106 insertions(+), 74 deletions(-) diff --git a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx index 66af5ed..8846b3d 100644 --- a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx +++ b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx @@ -53,15 +53,16 @@ import { Add, Edit, Delete } from '@mui/icons-material'; import _ from 'lodash'; import { DataGrid } from '@mui/x-data-grid'; +import DictionarySelect from "../components/DictionarySelect"; +import DictSelect from "../components/DictSelect"; const AsnOrderModal = (props) => { const { open, setOpen, asnId } = props; - - const translate = useTranslate(); const notify = useNotify(); const refresh = useRefresh(); + const [createDialog, setCreateDialog] = useState(false); useEffect(() => { @@ -75,19 +76,20 @@ if (reason !== "backdropClick") { setOpen(false); refresh(); - setFormData({ type: '' }) + setFormData({ type: '', wkType: '' }) setTableData([]) } }; const [formData, setFormData] = useState({ type: '', + wkType: '', }); const [tabelData, setTableData] = useState([]); - const handleChange = (e) => { - const { name, value } = e.target; + + const handleChange = (value, name) => { setFormData((prevData) => ({ ...prevData, [name]: value @@ -95,16 +97,34 @@ }; const handleSubmit = async () => { - const parmas = { - "orders": formData, - "items": tabelData, - } - const res = await request.post(`/asnOrder/items/save`, parmas); - if (res?.data?.code === 200) { - setOpen(false); + if (asnId === 0) { + const parmas = { + "orders": formData, + "items": tabelData, + } + + const res = await request.post(`/asnOrder/items/save`, parmas); + if (res?.data?.code === 200) { + setOpen(false); + refresh(); + } else { + notify(res.data.msg); + } } else { - notify(res.data.msg); + const parmas = { + "orders": formData, + "items": tabelData, + } + const res = await request.post(`/asnOrder/items/update`, parmas); + if (res?.data?.code === 200) { + setOpen(false); + refresh(); + } else { + notify(res.data.msg); + } } + + }; @@ -125,7 +145,6 @@ } else { notify(res.data.msg); } - } const requestGetBody = async () => { @@ -136,7 +155,6 @@ notify(res.data.msg); } } - return ( <> @@ -161,33 +179,32 @@ </Box> </DialogTitle> <DialogContent sx={{ mt: 2 }}> - <Box component="form" sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}> - <form> + <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}> + <Form> <Grid container spacing={2}> <Grid item xs={4}> - <TextField - label={translate('table.field.asnOrder.type')} - name="type" + <DictSelect + label={translate("table.field.asnOrder.type")} value={formData.type} - onChange={handleChange} - variant="outlined" - size="small" - validate={required()} + onChange={(e) => handleChange(e.target.value, 'type')} + dictTypeCode="sys_order_type" + required /> + + </Grid> - {/* <Grid item xs={4}> - <TextField - label={translate('table.field.asnOrder.wkType')} - name="wkType" - value={formData.wkType} - onChange={handleChange} - variant="outlined" - size="small" - /> - </Grid> */} + <Grid item xs={4}> + <DictSelect + label={translate("table.field.asnOrder.wkType")} + value={formData.wkType} + onChange={(e) => handleChange(e.target.value, 'wkType')} + dictTypeCode="sys_business_type" + required + /> + </Grid> </Grid> - </form> + </Form> </Box> <Box sx={{ mt: 2 }}> @@ -199,13 +216,13 @@ </Box> <Box sx={{ mt: 2 }}> - <AsnOrderModalTable tabelData={tabelData} setTableData={setTableData} ></AsnOrderModalTable> + <AsnOrderModalTable tabelData={tabelData} setTableData={setTableData} asnId={asnId} ></AsnOrderModalTable> </Box> </DialogContent> <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}> <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }} > <Button onClick={handleSubmit} variant="contained" startIcon={<SaveIcon />}> - 纭 + {translate('toolbar.confirm')} </Button> </Toolbar> </DialogActions> @@ -224,16 +241,16 @@ export default AsnOrderModal; -const AsnOrderModalTable = ({ tabelData, setTableData }) => { +const AsnOrderModalTable = ({ tabelData, setTableData, asnId }) => { const translate = useTranslate(); + const notify = useNotify(); - const columns = [ + const [columns, setColumns] = useState([ { field: 'action', headerName: '鎿嶄綔', - minWidth: 100, - sticky: 'right', - flex: 1, + width: 70, + lockPosition: 'left', renderCell: (params) => ( <Tooltip title="Delete"> <IconButton onClick={() => handleDelete(params.row)}> @@ -241,17 +258,18 @@ </IconButton> </Tooltip> ), + }, { field: 'matnrId', headerName: translate('table.field.asnOrderItem.matnrId'), minWidth: 100, flex: 1, - editable: false, // 鍋囪 matnrId 涓嶅彲缂栬緫 + editable: false, }, { - field: 'matnk', - headerName: translate('table.field.asnOrderItem.matnk'), + field: 'maktx', + headerName: translate('table.field.asnOrderItem.maktx'), minWidth: 100, flex: 1, editable: true, @@ -261,14 +279,12 @@ headerName: translate('table.field.asnOrderItem.poDetlId'), minWidth: 100, flex: 1, - editable: true, }, { field: 'poDetlCode', headerName: translate('table.field.asnOrderItem.poDetlCode'), minWidth: 100, flex: 1, - editable: true, }, { field: 'anfme', @@ -282,7 +298,7 @@ headerName: translate('table.field.asnOrderItem.stockUnit'), minWidth: 100, flex: 1, - editable: true, + editable: false, }, { field: 'purQty', @@ -296,7 +312,7 @@ headerName: translate('table.field.asnOrderItem.purUnit'), minWidth: 100, flex: 1, - editable: true, + editable: false, }, { field: 'splrCode', @@ -313,20 +329,6 @@ editable: true, }, { - field: 'qrcode', - headerName: translate('table.field.asnOrderItem.qrcode'), - minWidth: 100, - flex: 1, - editable: true, - }, - { - field: 'barcode', - headerName: translate('table.field.asnOrderItem.barcode'), - minWidth: 100, - flex: 1, - editable: true, - }, - { field: 'packName', headerName: translate('table.field.asnOrderItem.packName'), minWidth: 100, @@ -334,24 +336,53 @@ editable: true, }, - ]; + ]) + + let cdata = useRef([]); + + + useEffect(() => { + getDynamicFields(); + }, []); + + useEffect(() => { + cdata.current = tabelData + }, [tabelData]); + + + const getDynamicFields = async () => { + const { + data: { code, data, msg }, + } = await request.get("/fields/enable/list"); + if (code === 200) { + const cols = data.map(el => ({ + field: el.fields, + headerName: el.fieldsAlise, + minWidth: 100, + flex: 1, + editable: el.unique + })) + setColumns([...columns, ...cols]) + } else { + notify(msg); + } + } + + const handleDelete = (row) => { - const newData = _.filter(tabelData, (item) => item.matnrId !== row.matnrId); + const newData = _.filter(cdata.current, (item) => item.matnrId !== row.matnrId); setTableData(newData); }; - const handleEdit = (field, row, value) => { - setTableData((prevData) => - prevData.map((r) => - r.matnrId === row.matnrId ? { ...r, [field]: value } : r - ) - ); - }; const processRowUpdate = (newRow, oldRow) => { - const field = Object.keys(newRow).find((key) => newRow[key] !== oldRow[key]); - handleEdit(field, oldRow, newRow[field]); + setTableData((prevData) => + prevData.map((r) => + r.matnrId === newRow.matnrId ? { ...newRow } : r + ) + ); + return newRow; }; @@ -368,6 +399,7 @@ disableColumnSorting disableMultipleColumnsSorting processRowUpdate={processRowUpdate} + autoPageSize /> </div> ); -- Gitblit v1.9.1