zhou zhou
3 天以前 73ec875e216f434d510a6b95c574fe80387b2bc2
rsf-admin/src/page/system/role/RoleList.jsx
@@ -30,7 +30,8 @@
    useNotify,
    Button,
} from 'react-admin';
import { Box, Card, Stack } from '@mui/material';
import { Box, Card, Stack, Menu, MenuItem, ListItemIcon, ListItemText } from '@mui/material';
import SecurityIcon from '@mui/icons-material/Security';
import { styled } from '@mui/material/styles';
import RoleCreate from "./RoleCreate";
import RolePanel from "./RolePanel";
@@ -43,9 +44,12 @@
import * as Common from '@/utils/common';
import AssignPermissions from "./AssignPermissions";
import AssignPermissionsPda from "./AssignPermissions_pda";
import AssignPermissionsMatnr from "./AssignPermissions_matnr";
import request from '@/utils/request';
import AssignmentIndIcon from '@mui/icons-material/AssignmentInd';
import AdUnitsIcon from '@mui/icons-material/AdUnits';
import ArticleIcon from '@mui/icons-material/Article';
import { margin } from "@mui/system";
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
    '& .css-1vooibu-MuiSvgIcon-root': {
@@ -83,12 +87,14 @@
    const [createDialog, setCreateDialog] = useState(false);
    const [drawerVal, setDrawerVal] = useState(false);
    const [drawerValPda, setDrawerValPda] = useState(false);
    const [drawerValMatnr, setDrawerValMatnr] = useState(false);
    const [menuIds, setMenuIds] = useState([]);
    const [authType, setAuthType] = useState(0)
    const assign = (record) => {
        setDrawerValPda(false);
        request('/role/scope/list', {
            method: 'GET',
            params: {
@@ -106,6 +112,7 @@
    }
    const assignPda = (record) => {
        setDrawerVal(false);
        request('/rolePda/scope/list', {
            method: 'GET',
            params: {
@@ -122,6 +129,24 @@
        });
    }
    const assignMatnr = (record) => {
        setDrawerVal(false);
        request('/roleMatnr/scope/list', {
            method: 'GET',
            params: {
                roleId: record.id
            }
        }).then((res) => {
            if (res?.data?.code === 200) {
                const { data: menuIds } = res.data;
                setMenuIds(menuIds || []);
                setDrawerValMatnr(!!drawerValMatnr && drawerValMatnr === record ? null : record);
            } else {
                notify(res.data.msg, { type: 'error' });
            }
        });
    }
    return (
        <Box display="flex">
            <List
@@ -131,7 +156,7 @@
                        theme.transitions.create(['all'], {
                            duration: theme.transitions.duration.enteringScreen,
                        }),
                    marginRight: (!!drawerVal || !!drawerValPda) ? `${PAGE_DRAWER_WIDTH}px` : 0,
                    marginRight: (!!drawerVal || !!drawerValPda || !!drawerValMatnr) ? `${PAGE_DRAWER_WIDTH}px` : 0,
                }}
                title={"menu.role"}
                empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
@@ -167,9 +192,12 @@
                    <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">
                        <ScopeButton sx={{ padding: '1px', fontSize: '.75rem' }} assign={assign} auType={0} setAuthType={setAuthType} label="网页权限&nbsp;&nbsp;&nbsp;" />
                        <PdaScopeButton sx={{ padding: '1px', fontSize: '.75rem' }} assignPda={assignPda} auType={1} setAuthType={setAuthType} label="PDA权限&nbsp;&nbsp;&nbsp;" />
                        <ScopeButton sx={{ padding: '1px', fontSize: '.75rem' }} assign={assign} auType={2} setAuthType={setAuthType} label="仓库权限&nbsp;" />
                        <PermissionMenuButton
                            assign={assign}
                            assignPda={assignPda}
                            assignMatnr={assignMatnr}
                            setAuthType={setAuthType}
                        />
                        <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
                        <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
                    </WrapperField>
@@ -215,46 +243,109 @@
                    authType={authType}
                />
            </PageDrawer>
            <PageDrawer
                drawerVal={drawerValMatnr}
                setDrawerVal={setDrawerValMatnr}
                title={!!drawerValMatnr ? `Scope by ${drawerValMatnr.code || drawerValMatnr.name}` : 'Role Detail'}
                closeCallback={() => {
                    setMenuIds([]);
                }}
            >
                <AssignPermissionsMatnr
                    role={drawerValMatnr}
                    originMenuIds={menuIds}
                    setDrawerVal={setDrawerValMatnr}
                    closeCallback={() => {
                        setMenuIds([]);
                    }}
                    authType={authType}
                />
            </PageDrawer>
        </Box>
    )
}
const ScopeButton = (props) => {
const PermissionMenuButton = ({ assign, assignPda, assignMatnr, setAuthType }) => {
    const record = useRecordContext();
    const { assign, auType, setAuthType, label, ...rest } = props;
    return (
        <Button
            variant="text"
            color="primary"
            startIcon={<AssignmentIndIcon />}
            label={label}
            onClick={(event) => {
                setAuthType(auType);
                event.stopPropagation();
                assign(record);
            }}
            {...rest}
        />
    )
}
    const [anchorEl, setAnchorEl] = useState(null);
    const open = Boolean(anchorEl);
const PdaScopeButton = (props) => {
    const record = useRecordContext();
    const { assignPda, auType, setAuthType, label, ...rest } = props;
    const handleClick = (event) => {
        event.stopPropagation();
        setAnchorEl(event.currentTarget);
    };
    const handleClose = (event) => {
        if (event) event.stopPropagation();
        setAnchorEl(null);
    };
    const handleWebPermission = (event) => {
        event.stopPropagation();
        setAuthType(0);
        assign(record);
        handleClose();
    };
    const handlePdaPermission = (event) => {
        event.stopPropagation();
        setAuthType(1);
        assignPda(record);
        handleClose();
    };
    const handleMatnrPermission = (event) => {
        event.stopPropagation();
        setAuthType(2);
        assignMatnr(record);
        handleClose();
    };
    return (
        <Button
            variant="text"
            color="primary"
            startIcon={<AdUnitsIcon />}
            label={label}
            onClick={(event) => {
                setAuthType(auType);
                event.stopPropagation();
                assignPda(record);
            }}
            {...rest}
        />
    )
        <>
            <Button
                variant="text"
                color="primary"
                startIcon={<SecurityIcon />}
                label="权限"
                onClick={handleClick}
                sx={{ marginLeft: '2px', padding: '1px', fontSize: '.75rem' }}
            />
            <Menu
                anchorEl={anchorEl}
                open={open}
                onClose={handleClose}
                onClick={(e) => e.stopPropagation()}
                anchorOrigin={{
                    vertical: 'bottom',
                    horizontal: 'left',
                }}
                transformOrigin={{
                    vertical: 'top',
                    horizontal: 'left',
                }}
            >
                <MenuItem onClick={handleWebPermission}>
                    <ListItemIcon>
                        <AssignmentIndIcon fontSize="small" />
                    </ListItemIcon>
                    <ListItemText>网页权限</ListItemText>
                </MenuItem>
                <MenuItem onClick={handlePdaPermission}>
                    <ListItemIcon>
                        <AdUnitsIcon fontSize="small" />
                    </ListItemIcon>
                    <ListItemText>PDA权限</ListItemText>
                </MenuItem>
                <MenuItem onClick={handleMatnrPermission}>
                    <ListItemIcon>
                        <ArticleIcon fontSize="small" />
                    </ListItemIcon>
                    <ListItemText>物料权限</ListItemText>
                </MenuItem>
            </Menu>
        </>
    );
}
export default RoleList;