From 73ec875e216f434d510a6b95c574fe80387b2bc2 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 08 一月 2026 18:27:52 +0800
Subject: [PATCH] #权限
---
rsf-admin/src/page/system/role/RoleList.jsx | 167 +++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 129 insertions(+), 38 deletions(-)
diff --git a/rsf-admin/src/page/system/role/RoleList.jsx b/rsf-admin/src/page/system/role/RoleList.jsx
index 6ef91f5..0c5ea8f 100644
--- a/rsf-admin/src/page/system/role/RoleList.jsx
+++ b/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="缃戦〉鏉冮檺 " />
- <PdaScopeButton sx={{ padding: '1px', fontSize: '.75rem' }} assignPda={assignPda} auType={1} setAuthType={setAuthType} label="PDA鏉冮檺 " />
- <ScopeButton sx={{ padding: '1px', fontSize: '.75rem' }} assign={assign} auType={2} setAuthType={setAuthType} label="浠撳簱鏉冮檺 " />
+ <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;
--
Gitblit v1.9.1