From 8adf7bbd561e30fcb5de802abb6f9281d72d8699 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 27 三月 2025 15:44:38 +0800 Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop --- rsf-admin/src/page/asnOrder/AsnOrderList.jsx | 27 ---- rsf-admin/src/page/components/DictSelect.jsx | 60 ++++++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/DeviceSiteParame.java | 4 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeviceSiteServiceImpl.java | 11 + rsf-admin/src/page/asnOrder/AsnWareModal.jsx | 76 ++++++++++-- rsf-admin/src/page/components/DictionarySelect.jsx | 1 rsf-admin/pnpm-lock.yaml | 48 +++++-- rsf-admin/src/page/basicInfo/loc/LocList.jsx | 11 + rsf-admin/src/page/asnOrder/AsnOrderModal.jsx | 110 ++++++++++------- 9 files changed, 243 insertions(+), 105 deletions(-) diff --git a/rsf-admin/pnpm-lock.yaml b/rsf-admin/pnpm-lock.yaml index 1e1c44c..470bcd3 100644 --- a/rsf-admin/pnpm-lock.yaml +++ b/rsf-admin/pnpm-lock.yaml @@ -25,7 +25,7 @@ version: 6.4.7(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@mui/x-data-grid': specifier: ^7.27.3 - version: 7.27.3(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@mui/material@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@6.4.7(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.28.1(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@mui/material@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@6.4.7(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/x-tree-view': specifier: ^7.16.0 version: 7.26.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@mui/material@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@6.4.7(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -217,6 +217,10 @@ '@babel/runtime@7.26.9': resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} + engines: {node: '>=6.9.0'} + + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} '@babel/template@7.26.9': @@ -618,14 +622,14 @@ '@types/react': optional: true - '@mui/x-data-grid@7.27.3': - resolution: {integrity: sha512-7zbDbFrhV6ODjyn3ImOZG34nbMbCvmHgqYTYP273TNAj8hMy4BiLyiKFFZTzVddIj3KQ6qLzBpByhqifGgEDOg==} + '@mui/x-data-grid@7.28.1': + resolution: {integrity: sha512-uDJcjRB7zfRoquZb4G8iw0NWbhziVVPsHisi/EIzvOPHP+a1ZUnG0bLEnY+cy6eEwDrO1dNzYpwGFCcjl8ZKfA==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.9.0 '@emotion/styled': ^11.8.1 - '@mui/material': ^5.15.14 || ^6.0.0 - '@mui/system': ^5.15.14 || ^6.0.0 + '@mui/material': ^5.15.14 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta + '@mui/system': ^5.15.14 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -636,6 +640,12 @@ '@mui/x-internals@7.26.0': resolution: {integrity: sha512-VxTCYQcZ02d3190pdvys2TDg9pgbvewAVakEopiOgReKAUhLdRlgGJHcOA/eAuGLyK1YIo26A6Ow6ZKlSRLwMg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@mui/x-internals@7.28.0': + resolution: {integrity: sha512-p4GEp/09bLDumktdIMiw+OF4p+pJOOjTG0VUvzNxjbHB9GxbBKoMcHrmyrURqoBnQpWIeFnN/QAoLMFSpfwQbw==} engines: {node: '>=14.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2702,6 +2712,10 @@ dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.27.0': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/template@7.26.9': dependencies: '@babel/code-frame': 7.26.2 @@ -2728,7 +2742,7 @@ '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.25.9 - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -2759,7 +2773,7 @@ '@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 @@ -2785,7 +2799,7 @@ '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) @@ -3080,13 +3094,13 @@ optionalDependencies: '@types/react': 18.3.18 - '@mui/x-data-grid@7.27.3(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@mui/material@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@6.4.7(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/x-data-grid@7.28.1(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@mui/material@5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@6.4.7(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 '@mui/material': 5.16.14(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/system': 6.4.7(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) '@mui/utils': 6.4.6(@types/react@18.3.18)(react@18.3.1) - '@mui/x-internals': 7.26.0(@types/react@18.3.18)(react@18.3.1) + '@mui/x-internals': 7.28.0(@types/react@18.3.18)(react@18.3.1) clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 @@ -3102,6 +3116,14 @@ '@mui/x-internals@7.26.0(@types/react@18.3.18)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.9 + '@mui/utils': 6.4.6(@types/react@18.3.18)(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - '@types/react' + + '@mui/x-internals@7.28.0(@types/react@18.3.18)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.27.0 '@mui/utils': 6.4.6(@types/react@18.3.18)(react@18.3.1) react: 18.3.1 transitivePeerDependencies: @@ -3672,7 +3694,7 @@ babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 cosmiconfig: 7.1.0 resolve: 1.22.10 @@ -4880,7 +4902,7 @@ react-error-boundary@4.1.2(react@18.3.1): dependencies: - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 react: 18.3.1 react-hook-form@7.54.2(react@18.3.1): diff --git a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx index 39e22a4..cd9fdb1 100644 --- a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx +++ b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx @@ -111,29 +111,6 @@ const inspection = () => { }; const print = () => { - // const imageUrls = ['https://www.baidu.com/img/flexible/logo/pc/result@2.png',] - // const iframe = document.createElement('iframe'); - // iframe.style.display = 'none'; - // document.body.appendChild(iframe); - - // const iframeDoc = iframe.contentDocument || iframe.contentWindow.document; - // iframeDoc.open(); - // iframeDoc.write('<html><head><title>Print Images</title></head><body>'); - - // // 灏嗗浘鐗囨彃鍏ュ埌 iframe 涓� - // imageUrls.forEach((imageUrl) => { - // iframeDoc.write(`<img src="${imageUrl}" style="margin: 10px;">`); - // }); - - // iframeDoc.write('</body></html>'); - // iframeDoc.close(); - - // // 绛夊緟鍥剧墖鍔犺浇瀹屾垚鍚庤Е鍙戞墦鍗� - // iframe.contentWindow.onload = () => { - // iframe.contentWindow.print(); - // // 鎵撳嵃瀹屾垚鍚庣Щ闄� iframe - // document.body.removeChild(iframe); - // }; }; @@ -198,9 +175,9 @@ <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" > - <Button label="toolbar.print" onClick={print}> + {/* <Button label="toolbar.print" onClick={print}> <FileDownloadIcon /> - </Button> + </Button> */} {/* <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> */} <MyButton setCreateDialog={setCreateDialog} setmodalType={setmodalType} /> {/* <Button diff --git a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx index debec59..ce14597 100644 --- a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx +++ b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx @@ -54,6 +54,7 @@ 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; @@ -61,6 +62,7 @@ const translate = useTranslate(); const notify = useNotify(); const refresh = useRefresh(); + const [createDialog, setCreateDialog] = useState(false); useEffect(() => { @@ -74,13 +76,14 @@ if (reason !== "backdropClick") { setOpen(false); refresh(); - setFormData({ type: '' }) + setFormData({ type: '', wkType: '' }) setTableData([]) } }; const [formData, setFormData] = useState({ type: '', + wkType: '', }); const [tabelData, setTableData] = useState([]); @@ -99,6 +102,7 @@ "orders": formData, "items": tabelData, } + const res = await request.post(`/asnOrder/items/save`, parmas); if (res?.data?.code === 200) { setOpen(false); @@ -107,8 +111,21 @@ notify(res.data.msg); } } else { - setOpen(false); + const parmas = { + "orders": formData, + "items": tabelData, + } + console.log(parmas); + // const res = await request.post(`/asnOrder/items/save`, parmas); + // if (res?.data?.code === 200) { + // setOpen(false); + // refresh(); + // } else { + // notify(res.data.msg); + // } + // setOpen(false); } + }; @@ -141,14 +158,6 @@ } } - const requestSetHead = async () => { - if (asnId !== 0) { - const res = await request.post(`/asnOrder/update`, { ...formData }); - refresh() - } - } - - return ( <> <Dialog @@ -176,25 +185,24 @@ <Form> <Grid container spacing={2}> <Grid item xs={4}> - <DictionarySelect + <DictSelect label={translate("table.field.asnOrder.type")} - name="type" value={formData.type} - onChange={(e) => handleChange(+e.target.value, 'type')} - size="small" + onChange={(e) => handleChange(e.target.value, 'type')} dictTypeCode="sys_order_type" + required /> + </Grid> <Grid item xs={4}> - <DictionarySelect + <DictSelect label={translate("table.field.asnOrder.wkType")} - name="wkType" value={formData.wkType} - onChange={(e) => handleChange(+e.target.value, 'wkType')} - size="small" + onChange={(e) => handleChange(e.target.value, 'wkType')} dictTypeCode="sys_business_type" + required /> </Grid> </Grid> @@ -237,14 +245,14 @@ 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)}> @@ -252,6 +260,7 @@ </IconButton> </Tooltip> ), + }, { field: 'matnrId', @@ -291,7 +300,7 @@ headerName: translate('table.field.asnOrderItem.stockUnit'), minWidth: 100, flex: 1, - editable: true, + editable: false, }, { field: 'purQty', @@ -305,7 +314,7 @@ headerName: translate('table.field.asnOrderItem.purUnit'), minWidth: 100, flex: 1, - editable: true, + editable: false, }, { field: 'splrCode', @@ -322,20 +331,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, @@ -343,17 +338,42 @@ editable: true, }, - ]; + ]) - const requestSetBody = async (row) => { - if (asnId !== 0) { - const res = await request.post(`/asnOrderItem/update`, row); + 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); }; @@ -365,7 +385,6 @@ ) ); - requestSetBody(newRow) return newRow; }; @@ -382,6 +401,7 @@ disableColumnSorting disableMultipleColumnsSorting processRowUpdate={processRowUpdate} + autoPageSize /> </div> ); diff --git a/rsf-admin/src/page/asnOrder/AsnWareModal.jsx b/rsf-admin/src/page/asnOrder/AsnWareModal.jsx index 52e92f7..612eab5 100644 --- a/rsf-admin/src/page/asnOrder/AsnWareModal.jsx +++ b/rsf-admin/src/page/asnOrder/AsnWareModal.jsx @@ -18,6 +18,7 @@ import request from '@/utils/request'; import { DataGrid } from '@mui/x-data-grid'; import SaveIcon from '@mui/icons-material/Save'; +import { use } from "react"; const AsnWareModal = (props) => { const { open, setOpen, data, setData } = props; @@ -39,6 +40,7 @@ }); const [tableData, setTableData] = useState([]); + const [dyFields, setDyFields] = useState([]); const [selectedRows, setSelectedRows] = useState([]); const handleChange = (e) => { @@ -49,26 +51,40 @@ })); }; - const handleSubmit = () => { - const selectedData = selectedRows.map(id => tableData.find(row => row.id === id)); + const reset = () => { + setFormData({ + name: '', + code: '' + }) + } + const handleSubmit = () => { + const hasarr = data.map(el => +el.matnrId) + const selectedData = selectedRows.filter(item => !hasarr.includes(item)).map(id => (tableData.find(row => row.id === id))); const value = selectedData.map((el => { + const dynamicFields = dyFields.reduce((acc, item) => { + acc[item.fields] = el['extendFields']?.[item.fields] || ''; + return acc; + }, {}); return { matnrId: el.id, maktx: el.name, stockUnit: el.stockUnit || '', purUnit: el.purchaseUnit || '', + ...dynamicFields } })) - setData(value); + setData([...data, ...value]); setOpen(false); - // refresh(); + reset(); }; const getData = async () => { const res = await request.post(`/matnr/page`, { ...formData, - pageSize: 199 + current: 1, + pageSize: 199, + orderBy: "create_time desc" }); if (res?.data?.code === 200) { setTableData(res.data.data.records); @@ -79,7 +95,7 @@ useEffect(() => { getData(); - }, []); + }, [open]); const handleSearch = () => { getData() @@ -146,9 +162,14 @@ </Stack> </Box> <Box sx={{ mt: 2, height: 400, width: '100%' }}> - <AsnWareModalTable tableData={tableData} setTableData={setTableData} + <AsnWareModalTable + tableData={tableData} + setTableData={setTableData} + dyFields={dyFields} + setDyFields={setDyFields} selectedRows={selectedRows} - setSelectedRows={setSelectedRows} /> + setSelectedRows={setSelectedRows} + /> </Box> </DialogContent> <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}> @@ -164,30 +185,58 @@ export default AsnWareModal; -const AsnWareModalTable = ({ tableData, setTableData, selectedRows, setSelectedRows }) => { +const AsnWareModalTable = ({ tableData, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => { const translate = useTranslate(); + const notify = useNotify(); - const columns = [ + const [columns, setColumns] = useState([ { field: 'id', headerName: 'ID', width: 100 }, { field: 'name', headerName: translate('table.field.matnr.name'), width: 100 }, { field: 'code', headerName: translate('table.field.matnr.code'), width: 100 }, { field: 'spec', headerName: translate('table.field.matnr.spec'), width: 100 }, { field: 'model', headerName: translate('table.field.matnr.model'), width: 100 }, { field: 'weight', headerName: translate('table.field.matnr.weight'), width: 100 }, - { field: 'color', headerName: translate('table.field.matnr.color'), width: 100 }, - { field: 'size', headerName: translate('table.field.matnr.size'), width: 100 }, + { field: 'describle', headerName: translate('table.field.matnr.describle'), width: 100 }, { field: 'nromNum', headerName: translate('table.field.matnr.nromNum'), width: 100 }, { field: 'unit', headerName: translate('table.field.matnr.unit'), width: 100 }, { field: 'purchaseUnit', headerName: translate('table.field.matnr.purUnit'), width: 100 }, { field: 'stockUnit', headerName: translate('table.field.matnr.stockUnit'), width: 100 }, { field: 'stockLeval$', headerName: translate('table.field.matnr.stockLevel'), width: 100, sortable: false }, - ]; + ]) + + const handleSelectionChange = (ids) => { setSelectedRows(ids) }; + + useEffect(() => { + getDynamicFields(); + }, []); + + 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, + valueGetter: (value, row) => { + return row.extendFields?.[el.fields] || ''; + }, + })) + setDyFields(data) + setColumns([...columns, ...cols]) + } else { + notify(msg); + } + } return ( <div style={{ height: 400, width: '100%' }}> @@ -201,7 +250,6 @@ disableColumnMenu={true} disableColumnSorting disableMultipleColumnsSorting - columnBufferPx={100} /> </div> ); diff --git a/rsf-admin/src/page/basicInfo/loc/LocList.jsx b/rsf-admin/src/page/basicInfo/loc/LocList.jsx index c218a18..b425f38 100644 --- a/rsf-admin/src/page/basicInfo/loc/LocList.jsx +++ b/rsf-admin/src/page/basicInfo/loc/LocList.jsx @@ -75,7 +75,14 @@ }, '& .RaDatagrid-rowCell': { textAlign: 'left' - } + }, + '& .type .MuiTypography-root': { + whiteSpace: 'nowrap', + overflow: 'hidden', + textOverflow: 'ellipsis', + display: 'block', + width: '200px', + }, })); const filters = [ @@ -215,7 +222,7 @@ <NumberField source="warehouseId$" label="table.field.loc.warehouseId" /> <NumberField source="areaId$" label="table.field.loc.areaId" /> <TextField source="code" label="table.field.loc.code" /> - <TextField source="typeIds$" label="table.field.loc.type" /> + <TextField source="typeIds$" label="table.field.loc.type" cellClassName="type" /> {/* <TextField source="name" label="table.field.loc.name" /> */} {/* <NumberField source="flagLogic" label="table.field.loc.flagLogic" /> <TextField source="fucAtrrs" label="table.field.loc.fucAtrrs" /> diff --git a/rsf-admin/src/page/components/DictSelect.jsx b/rsf-admin/src/page/components/DictSelect.jsx new file mode 100644 index 0000000..72c9d76 --- /dev/null +++ b/rsf-admin/src/page/components/DictSelect.jsx @@ -0,0 +1,60 @@ +import { useState, useEffect } from 'react'; +import { + useTranslate, useNotify +} from 'react-admin'; +import request from '@/utils/request'; +import { Select, MenuItem, FormControl, InputLabel } from '@mui/material'; + +const DictSelect = (props) => { + const { dictTypeCode, label, value, onChange, ...params } = props; + const translate = useTranslate(); + const notify = useNotify(); + const [list, setList] = useState([]); + + useEffect(() => { + http(); + }, [dictTypeCode]); + + const http = async () => { + const res = await request.post('/dictData/page', { dictTypeCode }); + if (res?.data?.code === 200) { + setList(res.data.data.records.map((item) => { + return { + value: item.value, + label: item.label + }; + })); + } else { + notify(res.data.msg); + } + }; + + const handleChange = (event) => { + const selectedValue = event.target.value; + if (onChange) { + onChange(event); + } + }; + + const validValue = list.some(item => item.value === value) ? value : ''; + + return ( + <FormControl fullWidth> + <InputLabel id="demo-select-small-label">{label}</InputLabel> + <Select + labelId="demo-select-small-label" + value={validValue} + onChange={handleChange} + size='small' + > + {list.map((item) => ( + <MenuItem key={item.value} value={item.value}> + {item.label} + </MenuItem> + ))} + </Select> + </FormControl> + ); +}; + +export default DictSelect; \ No newline at end of file diff --git a/rsf-admin/src/page/components/DictionarySelect.jsx b/rsf-admin/src/page/components/DictionarySelect.jsx index 2523c5d..2a0a428 100644 --- a/rsf-admin/src/page/components/DictionarySelect.jsx +++ b/rsf-admin/src/page/components/DictionarySelect.jsx @@ -36,6 +36,7 @@ <SelectInput source={name} choices={list} + {...parmas} /> ); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/DeviceSiteParame.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/DeviceSiteParame.java index 0563c68..6b915c8 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/DeviceSiteParame.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/DeviceSiteParame.java @@ -20,12 +20,12 @@ private List<Long> typeIds; @ApiModelProperty("浣滀笟绔欑偣") - private List<String> sites; + private String sites; @ApiModelProperty("璁惧缂栧彿") private String deviceCode; @ApiModelProperty("璁惧浣滀笟绔欑偣") - private List<String> deviceSites; + private String deviceSites; } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeviceSiteServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeviceSiteServiceImpl.java index 9328ef1..33a5a6c 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeviceSiteServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeviceSiteServiceImpl.java @@ -1,5 +1,6 @@ package com.vincent.rsf.server.manager.service.impl; +import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.controller.params.DeviceSiteParame; @@ -30,18 +31,20 @@ throw new CoolException("鍒濆鍖栧け璐ワ細 鍒犻櫎绔欑偣澶辫触锛侊紒"); } } - if (Objects.isNull(param.getDeviceSites()) || param.getDeviceSites().isEmpty()) { + if (Objects.isNull(param.getDeviceSites()) || StringUtils.isBlank(param.getDeviceSites())) { throw new CoolException("鍒濆鍖栧け璐ワ細 璁惧浣滀笟绔欑偣涓嶈兘涓虹┖锛侊紒"); } - if (Objects.isNull(param.getSites()) || param.getSites().isEmpty()) { + if (Objects.isNull(param.getSites()) || StringUtils.isBlank(param.getSites())) { throw new CoolException("鍒濆鍖栧け璐�: 浣滀笟绔欑偣涓嶈兘涓虹┖锛侊紒"); } if (Objects.isNull(param.getTypeIds()) || param.getTypeIds().isEmpty()) { throw new CoolException("鍒濆鍖栧け璐ワ細 浣滀笟绫诲瀷涓嶈兘涓虹┖锛侊紒"); } + List<String> sites = Arrays.asList(StringUtils.split(param.getSites(), ",")); + List<String> dvSites = Arrays.asList(StringUtils.split(param.getDeviceSites(), ",")); List<DeviceSite> deviceSites = new ArrayList<>(); - for (String site : param.getSites()) { - for (String deviceSite : param.getDeviceSites()) { + for (String site : sites) { + for (String deviceSite : dvSites) { for (Long id : param.getTypeIds()) { DeviceSite site1 = new DeviceSite(); site1.setType(id + "") -- Gitblit v1.9.1