From 95c82344c563b10f55ca6163a6f3299f0f025e0f Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期三, 19 三月 2025 08:07:01 +0800 Subject: [PATCH] Merge branch 'front' into devlop --- rsf-admin/src/page/basicInfo/loc/BatchModal.jsx | 67 +++++--- rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx | 89 ++--------- rsf-admin/src/page/basicInfo/loc/LocList.jsx | 49 +----- rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx | 2 rsf-admin/src/page/basicInfo/loc/InitModal.jsx | 15 - rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx | 151 ++++++++++++++++++ rsf-admin/src/page/components/DictionarySelect.jsx | 3 rsf-admin/src/page/components/StatusSelectInput.jsx | 7 rsf-admin/src/i18n/zh.js | 1 rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx | 31 +++ rsf-admin/src/i18n/en.js | 1 rsf-admin/.env | 4 rsf-admin/src/page/asnOrder/AsnOrderModal.jsx | 22 +- 13 files changed, 275 insertions(+), 167 deletions(-) diff --git a/rsf-admin/.env b/rsf-admin/.env index 9669b2c..a8ce658 100644 --- a/rsf-admin/.env +++ b/rsf-admin/.env @@ -1,3 +1,3 @@ -# VITE_BASE_IP=192.168.4.24 -VITE_BASE_IP=47.76.147.249 +VITE_BASE_IP=192.168.4.24 +# VITE_BASE_IP=47.76.147.249 VITE_BASE_PORT=8080 diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js index f0994e2..f338b7e 100644 --- a/rsf-admin/src/i18n/en.js +++ b/rsf-admin/src/i18n/en.js @@ -353,6 +353,7 @@ maxPack: "MaxPack", flagLabelMange: "FlagLabelMange", locAttrs: "LocAttrs", + useStatus: 'useStatus' }, container: { code: "Code", diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index 0b3480c..3b6756e 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -352,6 +352,7 @@ startBay: "璧峰鍒�", startLev: "璧峰灞�", startRow: "璧峰鎺�", + useStatus: '搴撲綅鐘舵��' }, container: { diff --git a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx index 1b23e74..01da591 100644 --- a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx +++ b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx @@ -53,6 +53,7 @@ import { Add, Edit, Delete } from '@mui/icons-material'; import _ from 'lodash'; import { DataGrid } from '@mui/x-data-grid'; +import DictionarySelect from "../components/DictionarySelect"; const AsnOrderModal = (props) => { const { open, setOpen, asnId } = props; @@ -84,8 +85,8 @@ const [tabelData, setTableData] = useState([]); - const handleChange = (e) => { - const { name, value } = e.target; + + const handleChange = (value, name) => { setFormData((prevData) => ({ ...prevData, [name]: value @@ -171,20 +172,19 @@ </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')} + <DictionarySelect + label={translate("table.field.asnOrder.type")} name="type" value={formData.type} - onChange={handleChange} - onBlur={requestSetHead} - variant="outlined" + onChange={(e) => handleChange(+e.target.value, 'type')} size="small" - required + dictTypeCode="sys_bill_type" /> + </Grid> {/* <Grid item xs={4}> @@ -198,7 +198,7 @@ /> </Grid> */} </Grid> - </form> + </Form> </Box> <Box sx={{ mt: 2 }}> diff --git a/rsf-admin/src/page/basicInfo/loc/BatchModal.jsx b/rsf-admin/src/page/basicInfo/loc/BatchModal.jsx index 5e9cfb7..a3448a2 100644 --- a/rsf-admin/src/page/basicInfo/loc/BatchModal.jsx +++ b/rsf-admin/src/page/basicInfo/loc/BatchModal.jsx @@ -50,7 +50,7 @@ import { Add, Edit, Delete } from '@mui/icons-material'; import _ from 'lodash'; import { DataGrid } from '@mui/x-data-grid'; - +import StatusSelectInput from "../../components/StatusSelectInput"; @@ -62,16 +62,28 @@ const notify = useNotify(); const [formData, setFormData] = useState({ - "areaId": undefined, - "locType": "", - "type": "" + "areaId": null, + "type": null, + 'status': null }); + + const { selectedIds } = useListContext(); const handleClose = (event, reason) => { if (reason !== "backdropClick") { setOpen(false); + reset() + refresh(); } }; + + const reset = () => { + setFormData({ + "areaId": null, + "type": null, + 'status': null + }) + } const handleReset = (e) => { e.preventDefault(); @@ -80,20 +92,34 @@ const handleChange = (value, name) => { setFormData((prevData) => ({ ...prevData, - [name]: ['locType', 'type'].includes(name) ? value : +value + [name]: value })); }; + const removeEmptyKeys = (obj) => { + return _.pickBy(obj, (value) => { + if (_.isObject(value)) { + const newObj = removeEmptyKeys(value); + return !_.isEmpty(newObj); + } + return !_.isNil(value) && (_.isNumber(value) ? value !== 0 : !_.isEmpty(value)); + }); + } + const handleSubmit = async () => { - const res = await request.post(`/loc/init`, formData); + const parmas = { + id: selectedIds, + loc: removeEmptyKeys(formData) + } + + const res = await request.post(`/loc/modify`, parmas); if (res?.data?.code === 200) { - setOpen(false); - refresh(); + handleClose() + } else { notify(res.data.msg); } } - return ( <Dialog open={open} maxWidth="md" fullWidth> @@ -113,7 +139,6 @@ optionText="name" onChange={(value) => handleChange(value, 'areaId')} value={formData.areaId} - validate={[required()]} filterToQuery={(val) => ({ name: val })} /> </ReferenceInput> @@ -122,28 +147,22 @@ <Grid item xs={4}> <DictionarySelect - label={translate("table.field.loc.locType")} - name="locType" - value={formData.locType} - onChange={(e) => handleChange(e.target.value, 'locType')} - size="small" - validate={[required()]} - dictTypeCode="sys_width_type" - /> - </Grid> - - <Grid item xs={4}> - <DictionarySelect label={translate("table.field.loc.type")} name="type" value={formData.type} - onChange={(e) => handleChange(e.target.value, 'type')} + onChange={(e) => handleChange(+e.target.value, 'type')} size="small" - validate={[required()]} dictTypeCode="sys_loc_type" /> </Grid> + <Grid item xs={4}> + <StatusSelectInput + onChange={(e) => handleChange(e.target.value, 'status')} + defaultValue={''} + require={false} + /> + </Grid> </Grid> diff --git a/rsf-admin/src/page/basicInfo/loc/InitModal.jsx b/rsf-admin/src/page/basicInfo/loc/InitModal.jsx index f0c4c48..80c6a2b 100644 --- a/rsf-admin/src/page/basicInfo/loc/InitModal.jsx +++ b/rsf-admin/src/page/basicInfo/loc/InitModal.jsx @@ -86,7 +86,7 @@ const handleChange = (value, name) => { setFormData((prevData) => ({ ...prevData, - [name]: ['locType', 'type'].includes(name) ? value : +value + [name]: value })); }; @@ -133,7 +133,6 @@ value={formData.locType} onChange={(e) => handleChange(e.target.value, 'locType')} size="small" - validate={[required()]} dictTypeCode="sys_width_type" /> </Grid> @@ -155,7 +154,7 @@ label={translate("table.field.loc.startBay")} name="startBay" value={formData.startBay} - onChange={(e) => handleChange(e.target.value, 'startBay')} + onChange={(e) => handleChange(+e.target.value, 'startBay')} size="small" type="number" validate={[required()]} @@ -167,7 +166,7 @@ label={translate("table.field.loc.startLev")} name="startLev" value={formData.startLev} - onChange={(e) => handleChange(e.target.value, 'startLev')} + onChange={(e) => handleChange(+e.target.value, 'startLev')} size="small" type="number" validate={[required()]} @@ -179,7 +178,7 @@ label={translate("table.field.loc.startRow")} name="startRow" value={formData.startRow} - onChange={(e) => handleChange(e.target.value, 'startRow')} + onChange={(e) => handleChange(+e.target.value, 'startRow')} size="small" type="number" validate={[required()]} @@ -191,7 +190,7 @@ label={translate("table.field.loc.endBay")} name="endBay" value={formData.endBay} - onChange={(e) => handleChange(e.target.value, 'endBay')} + onChange={(e) => handleChange(+e.target.value, 'endBay')} size="small" type="number" validate={[required()]} @@ -203,7 +202,7 @@ label={translate("table.field.loc.endLev")} name="endLev" value={formData.endLev} - onChange={(e) => handleChange(e.target.value, 'endLev')} + onChange={(e) => handleChange(+e.target.value, 'endLev')} size="small" type="number" validate={[required()]} @@ -215,7 +214,7 @@ label={translate("table.field.loc.endRow")} name="endRow" value={formData.endRow} - onChange={(e) => handleChange(e.target.value, 'endRow')} + onChange={(e) => handleChange(+e.target.value, 'endRow')} size="small" type="number" validate={[required()]} diff --git a/rsf-admin/src/page/basicInfo/loc/LocList.jsx b/rsf-admin/src/page/basicInfo/loc/LocList.jsx index b9b2578..720770f 100644 --- a/rsf-admin/src/page/basicInfo/loc/LocList.jsx +++ b/rsf-admin/src/page/basicInfo/loc/LocList.jsx @@ -142,22 +142,22 @@ } rowClick={() => false} expand={() => <LocPanel />} - omit={['id', 'createTime', 'createBy', 'memo']} + omit={['id', 'createTime', 'createBy', 'memo', 'updateTime', 'updateBy']} > <NumberField source="id" /> <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="type" label="table.field.loc.type" /> + <TextField source="type$" label="table.field.loc.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" /> <TextField source="barcode" label="table.field.loc.barcode" /> <TextField source="unit" label="table.field.loc.unit" /> - <TextField source="size" label="table.field.loc.length" /> - <TextField source="size" label="table.field.loc.width" /> - <TextField source="size" label="table.field.loc.height" /> - <NumberField source="lrow" label="table.field.loc.row" /> + <TextField source="length" label="table.field.loc.length" /> + <TextField source="width" label="table.field.loc.width" /> + <TextField source="height" label="table.field.loc.height" /> + <NumberField source="row" label="table.field.loc.row" /> <NumberField source="col" label="table.field.loc.col" /> <NumberField source="lev" label="table.field.loc.lev" /> <NumberField source="channel" label="table.field.loc.channel" /> @@ -165,6 +165,7 @@ <NumberField source="maxPack" label="table.field.loc.maxPack" /> <NumberField source="flagLabelMange" label="table.field.loc.flagLabelMange" /> <TextField source="locAttrs" label="table.field.loc.locAttrs" /> + <TextField source="useStatus$" label="table.field.loc.useStatus" /> <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> <TextField source="nickname" /> </ReferenceField> @@ -228,8 +229,7 @@ const record = useRecordContext(); const notify = useNotify(); const refresh = useRefresh(); - const { selectedIds } = useListContext(); - console.log(selectedIds) + const [createDialog, setCreateDialog] = useState(false); @@ -246,35 +246,4 @@ </> ) -} -const CustomBulkActionButton = () => { - const { selectedIds } = useListContext(); - const notify = useNotify(); - const refresh = useRefresh(); - - const handleCustomBulkAction = async () => { - if (selectedIds.length === 0) { - notify('璇烽�夋嫨瑕佹搷浣滅殑璁板綍'); - return; - } - // 杩欓噷鍐欏叿浣撶殑鎵归噺鎿嶄綔閫昏緫锛屼緥濡傚悜鏈嶅姟鍣ㄥ彂閫佽姹� - try { - const res = await request.post('/loc/bulk-action', { ids: selectedIds }); - if (res?.data?.code === 200) { - refresh(); - notify('鎵归噺鎿嶄綔鎴愬姛'); - } else { - notify(res.data.msg); - } - } catch (error) { - notify('鎵归噺鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯'); - } - }; - - return ( - <Button onClick={handleCustomBulkAction} label="鑷畾涔夋壒閲忔搷浣�"> - {/* 鍙互娣诲姞鑷畾涔夊浘鏍� */} - <EditIcon /> - </Button> - ); -}; \ No newline at end of file +} \ No newline at end of file diff --git a/rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx b/rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx new file mode 100644 index 0000000..c185cbf --- /dev/null +++ b/rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx @@ -0,0 +1,151 @@ +import React, { useState, useRef, useEffect, useMemo } from "react"; +import { + CreateBase, + useTranslate, + TextInput, + NumberInput, + BooleanInput, + DateInput, + SaveButton, + SelectInput, + ReferenceInput, + ReferenceArrayInput, + AutocompleteInput, + Toolbar, + required, + useDataProvider, + useNotify, + Form, + useCreateController, + useListContext, + useRefresh, +} from 'react-admin'; +import { + Dialog, + DialogActions, + DialogContent, + DialogTitle, + Grid, + TextField, + Box, + Button, + Paper, + TableContainer, + Table, + TableHead, + TableBody, + TableRow, + TableCell, + Tooltip, + IconButton, + styled + + +} from '@mui/material'; +import DialogCloseButton from "../../components/DialogCloseButton"; +import DictionarySelect from "../../components/DictionarySelect"; +import { useForm, Controller, useWatch, FormProvider, useFormContext } from "react-hook-form"; +import SaveIcon from '@mui/icons-material/Save'; +import request from '@/utils/request'; +import { Add, Edit, Delete } from '@mui/icons-material'; +import _ from 'lodash'; +import { DataGrid } from '@mui/x-data-grid'; +import StatusSelectInput from "../../components/StatusSelectInput"; + + + +const InitModal = ({ open, setOpen }) => { + const refresh = useRefresh(); + const translate = useTranslate(); + + + const notify = useNotify(); + + const [formData, setFormData] = useState({ + 'status': null + }); + + const { selectedIds } = useListContext(); + + const handleClose = (event, reason) => { + if (reason !== "backdropClick") { + setOpen(false); + reset() + refresh(); + } + }; + + const reset = () => { + setFormData({ + 'status': null + }) + } + + const handleReset = (e) => { + e.preventDefault(); + }; + + const handleChange = (value, name) => { + setFormData((prevData) => ({ + ...prevData, + [name]: ['locType', 'type'].includes(name) ? value : +value + })); + }; + + const removeEmptyKeys = (obj) => { + return _.pickBy(obj, (value) => { + if (_.isObject(value)) { + const newObj = removeEmptyKeys(value); + return !_.isEmpty(newObj); + } + return !_.isNil(value) && (_.isNumber(value) ? value !== 0 : !_.isEmpty(value)); + }); + } + + const handleSubmit = async () => { + const parmas = { + id: selectedIds, + matnr: removeEmptyKeys(formData) + } + + const res = await request.post(`/matnr/modify`, parmas); + if (res?.data?.code === 200) { + handleClose() + + } else { + notify(res.data.msg); + } + } + + return ( + <Dialog open={open} maxWidth="md" fullWidth> + <Form onSubmit={handleSubmit}> + <DialogCloseButton onClose={handleClose} /> + <DialogTitle>{translate('toolbar.batch')}</DialogTitle> + <DialogContent sx={{ mt: 2 }}> + <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}> + <Grid container spacing={2}> + <Grid item xs={4}> + <StatusSelectInput + onChange={(e) => handleChange(e.target.value, 'status')} + defaultValue={''} + require={false} + /> + </Grid> + </Grid> + + </Box> + </DialogContent> + <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}> + <Box sx={{ width: '100%', display: 'flex', justifyContent: 'space-between' }}> + <Button type="submit" variant="contained" startIcon={<SaveIcon />}> + 纭 + </Button> + </Box> + </DialogActions> + </Form> + </Dialog> + ); +} + +export default InitModal; \ No newline at end of file diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx index cb35859..bffec91 100644 --- a/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx +++ b/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx @@ -90,7 +90,7 @@ defaultValues={{}} // validate={(values) => { }} > - <Grid container width={{ xs: '20%', xl: '80%' }} rowSpacing={3} columnSpacing={3}> + <Grid container rowSpacing={3} columnSpacing={3}> <Grid item xs={12} md={10}> <Typography variant="h6" gutterBottom> diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx index 4182da5..af3b2c8 100644 --- a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx +++ b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx @@ -50,7 +50,9 @@ import MatListAside from './MatnrListAside'; import { display, height } from "@mui/system"; import DashboardIcon from '@mui/icons-material/Dashboard'; +import EditIcon from '@mui/icons-material/Edit'; import request from '@/utils/request'; +import BatchModal from './BatchModal'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -64,7 +66,7 @@ width: '200px' }, '& .RaList-main': { - minHeight: '80vh' + minHeight: '90vh' }, '& .column-name': { }, @@ -147,7 +149,7 @@ const { isLoading } = useListContext(); return ( - <Box sx={{ position: 'relative', minHeight: "40vh", }}> + <Box sx={{ position: 'relative', minHeight: "60vh", }}> {isLoading && ( <LinearProgress sx={{ @@ -162,7 +164,7 @@ <StyledDatagrid preferenceKey='matnr' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + bulkActionButtons={<> <BatchButton /><BulkDeleteButton mutationMode={OPERATE_MODE} /></>} rowClick={(id, resource, record) => false} expand={() => <MatnrPanel />} expandSingle={true} @@ -304,4 +306,27 @@ </Button>) ) +} + +const BatchButton = () => { + const record = useRecordContext(); + const notify = useNotify(); + const refresh = useRefresh(); + + + const [createDialog, setCreateDialog] = useState(false); + + return ( + <> + <Button onClick={() => setCreateDialog(true)} label={"toolbar.batch"}> + <EditIcon /> + </Button> + + <BatchModal + open={createDialog} + setOpen={setCreateDialog} + /> + </> + + ) } \ No newline at end of file diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx index e20ce92..3a836ee 100644 --- a/rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx +++ b/rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx @@ -11,41 +11,25 @@ import { RichTreeView } from "@mui/x-tree-view/RichTreeView"; import { TreeItem2 } from "@mui/x-tree-view/TreeItem2"; + const MatListAside = () => { const theme = useTheme(); const notify = useNotify(); const { setFilters } = useListContext(); // 鑾峰彇鍒楄〃涓婁笅鏂� const [selectedOption, setSelectedOption] = useState(null); const [treeData, setTreeData] = useState([]); - // 鐢ㄤ簬绠$悊灞曞紑椤圭殑鐘舵�� - const [expandedItems, setExpandedItems] = useState([]); - - // 閫掑綊鏀堕泦鎵�鏈夎妭鐐圭殑 id - const collectAllNodeIds = (nodes) => { - let allIds = []; - nodes.forEach((node) => { - allIds.push(node.id.toString()); - if (node.children && Array.isArray(node.children)) { - allIds = allIds.concat(collectAllNodeIds(node.children)); - } - }); - return allIds; - }; + const [defaultIds, setDefaultIds] = useState(['29']); const haveChildren = (item) => { - // 濡傛灉 item 鏄竴涓暟缁勶紝閬嶅巻鏁扮粍涓殑姣忎釜鍏冪礌 if (Array.isArray(item)) { return item.map((k) => haveChildren(k)); } - // 濡傛灉 item 鏄竴涓璞� if (item && typeof item === 'object') { - // 灏� id 杞崲涓哄瓧绗︿覆 if (item.id !== undefined) { item.id = item.id.toString(); } - // 濡傛灉瀛樺湪 children锛岄�掑綊澶勭悊 children if (item.children && Array.isArray(item.children)) { item.children = haveChildren(item.children); } @@ -53,16 +37,17 @@ return item; }; - useEffect(() => { request.post('/matnrGroup/tree') .then(res => { if (res?.data?.code === 200) { let data = res.data.data; - let items = haveChildren(data); - setTreeData(items); - // 褰撴爲鏁版嵁鏇存柊鏃讹紝鏇存柊灞曞紑椤圭姸鎬� - setExpandedItems(collectAllNodeIds(items)); + let items = haveChildren(data) + + setTreeData(items) + setDefaultIds([items.at(0).id]) + + } else { notify(res.data.msg); } @@ -70,56 +55,15 @@ .catch(error => { notify('Error fetching tree data'); }); + }, []); - - const treeData1 = [ - { - id: '19', - label: '鍗婃垚鍝� ', - editable: true, - children: [ - { - id: 'grid-community', - label: '@mui/x-data-grid', - editable: true, - children: [ - { id: 'grid-community22', label: '@mui/x-data-grid', editable: true }, - ], - }, - { id: 'grid-pro', label: '@mui/x-data-grid-pro', editable: true }, - { id: 'grid-premium', label: '@mui/x-data-grid-premium', editable: true }, - ], - }, - { - id: '18', - label: '鍘熸潗鏂�', - }, - { - id: 'charts', - label: 'Charts', - children: [{ id: 'charts-community', label: '@mui/x-charts' }], - }, - { - id: 'tree-view', - label: 'Tree View', - children: [{ id: 'tree-view-community', label: '@mui/x-tree-view' }], - }, - { - id: 'tree-view2', - label: 'Tree View3', - children: [{ id: 'tree-view-community1', label: '@mui/x-tree-view' }], - }, - ]; - const handleNodeSelect = (event, nodeId) => { - console.log('Selected Node ID:', nodeId); setFilters({ groupId: nodeId }); - // 鍦ㄨ繖閲屽彲浠ユ牴鎹� nodeId 鏇存柊涓诲唴瀹瑰尯鍩� }; - const handleSearch = () => { console.log('Search Input:', selectedOption); }; + const CustomCheckbox = React.forwardRef(function CustomCheckbox(props, ref) { return <input type="checkbox" ref={ref} {...props} />; @@ -136,6 +80,7 @@ /> ); }); + return ( <Card @@ -154,18 +99,16 @@ <SavedQueriesList icon={<BookmarkIcon />} /> <FilterLiveSearch source="condition" /> <RichTreeView - // 浣跨敤 expandedItems 鎺у埗灞曞紑鐘舵�� - expandedItems={expandedItems} - // 澶勭悊灞曞紑椤圭姸鎬佺殑鍙樺寲 - onExpandedItemsChange={(newExpandedItems) => setExpandedItems(newExpandedItems)} + defaultExpandedItems={defaultIds} expansionTrigger="iconContainer" items={treeData} slots={CustomTreeItem} onItemClick={handleNodeSelect} // 鐩戝惉鑺傜偣鐐瑰嚮浜嬩欢 /> + </CardContent> </Card> - ); -}; + ) +} -export default MatListAside; \ No newline at end of file +export default MatListAside; diff --git a/rsf-admin/src/page/components/DictionarySelect.jsx b/rsf-admin/src/page/components/DictionarySelect.jsx index 43dc811..2523c5d 100644 --- a/rsf-admin/src/page/components/DictionarySelect.jsx +++ b/rsf-admin/src/page/components/DictionarySelect.jsx @@ -9,7 +9,6 @@ const DictionarySelect = (props) => { const { dictTypeCode, name, ...parmas } = props; - const { selectedIds } = useListContext(); const translate = useTranslate(); const notify = useNotify(); const [list, setList] = useState([]) @@ -25,7 +24,7 @@ setList(res.data.data.records.map((item) => { return { id: item.value, - name: item.value + name: item.label } })) } else { diff --git a/rsf-admin/src/page/components/StatusSelectInput.jsx b/rsf-admin/src/page/components/StatusSelectInput.jsx index 46f787c..11031ca 100644 --- a/rsf-admin/src/page/components/StatusSelectInput.jsx +++ b/rsf-admin/src/page/components/StatusSelectInput.jsx @@ -5,20 +5,21 @@ } from 'react-admin'; const StatusSelectInput = (props) => { + const { require = true, defaultValue = 1, ...rest } = props const translate = useTranslate(); return ( <SelectInput label={translate('common.field.status')} source="status" - validate={[required()]} + validate={[require && required()]} choices={[ { id: '1', name: 'common.enums.statusTrue' }, { id: '0', name: 'common.enums.statusFalse' }, ]} - defaultValue={1} + defaultValue={defaultValue} helperText={false} - {...props} + {...rest} /> ) } -- Gitblit v1.9.1