From 992b4d6c4b964082adfabbef2f44dc50698ce8ed Mon Sep 17 00:00:00 2001 From: vincentlu <t1341870251@gmail.com> Date: 星期五, 14 二月 2025 11:18:43 +0800 Subject: [PATCH] # --- rsf-admin/src/page/role/AssignPermissions.jsx | 71 +++++++++++++++++++++++++---------- 1 files changed, 51 insertions(+), 20 deletions(-) diff --git a/rsf-admin/src/page/role/AssignPermissions.jsx b/rsf-admin/src/page/role/AssignPermissions.jsx index df0eae5..134163b 100644 --- a/rsf-admin/src/page/role/AssignPermissions.jsx +++ b/rsf-admin/src/page/role/AssignPermissions.jsx @@ -3,7 +3,7 @@ useTranslate, useNotify, } from 'react-admin'; -import { Box, Button, Card, Stack, CardContent } from '@mui/material'; +import { Box, Button, Card, Stack, CardContent, Skeleton } from '@mui/material'; import { SimpleTreeView, TreeItem, RichTreeView, useTreeViewApiRef } from '@mui/x-tree-view'; import SaveIcon from '@mui/icons-material/Save'; import request from '@/utils/request' @@ -15,10 +15,11 @@ const translate = useTranslate(); const notify = useNotify(); - const [treeData, setTreeData] = React.useState([]); - const [selectedItems, setSelectedItems] = React.useState([]); - const [expandedItems, setExpandedItems] = React.useState([]); - const toggledItemRef = React.useRef({}); + const [loading, setLoading] = useState(false); + const [treeData, setTreeData] = useState([]); + const [selectedItems, setSelectedItems] = useState([]); + const [expandedItems, setExpandedItems] = useState([]); + const toggledItemRef = useRef({}); const apiRef = useTreeViewApiRef(); useEffect(() => { @@ -45,7 +46,9 @@ } else { notify(res.data.msg, { type: 'error' }); } + setLoading(false); } + setLoading(true); setTimeout(() => { http(); }, 200); @@ -197,22 +200,27 @@ boxShadow: '0 1px 2px rgba(0, 0, 0, 0.2)', backgroundColor: 'background.paper', }}> - <RichTreeView - multiSelect - checkboxSelection - apiRef={apiRef} - items={treeData} - selectedItems={selectedItems} - onSelectedItemsChange={handleSelectedItemsChange} - onItemSelectionToggle={(event, itemId, isSelected) => { - toggledItemRef.current[itemId] = isSelected; - }} + {loading ? ( + <SkeletonBox /> + ) : ( + <RichTreeView + multiSelect + checkboxSelection + apiRef={apiRef} + items={treeData} + selectedItems={selectedItems} + onSelectedItemsChange={handleSelectedItemsChange} + onItemSelectionToggle={(event, itemId, isSelected) => { + toggledItemRef.current[itemId] = isSelected; + }} - expandedItems={expandedItems} - onExpandedItemsChange={(event, itemIds) => { - setExpandedItems(itemIds); - }} - /> + expandedItems={expandedItems} + onExpandedItemsChange={(event, itemIds) => { + setExpandedItems(itemIds); + }} + /> + )} + </Box> </Box> <Box sx={{ @@ -326,4 +334,27 @@ return childrenIds; }; +const SkeletonBox = () => { + return ( + <Stack spacing={1}> + <Skeleton variant="rounded" width={200} height={20} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + <Skeleton variant="rounded" width={200} height={20} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + <Skeleton variant="rounded" width={200} height={20} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + <Skeleton variant="rounded" width={200} height={20} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + <Skeleton variant="rounded" width={200} height={20} style={{ marginLeft: '50px' }} /> + </Stack> + ) +} + export default AssignPermissions; \ No newline at end of file -- Gitblit v1.9.1