From d6fcca25f2979710b008502e26aeceb8993f86ae Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期二, 06 一月 2026 20:00:28 +0800
Subject: [PATCH] #

---
 rsf-admin/src/page/system/role/RoleList.jsx |   69 +++++++++++++++++++++++++++++++---
 1 files changed, 63 insertions(+), 6 deletions(-)

diff --git a/rsf-admin/src/page/system/role/RoleList.jsx b/rsf-admin/src/page/system/role/RoleList.jsx
index 1973c7d..6ef91f5 100644
--- a/rsf-admin/src/page/system/role/RoleList.jsx
+++ b/rsf-admin/src/page/system/role/RoleList.jsx
@@ -42,8 +42,10 @@
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
 import * as Common from '@/utils/common';
 import AssignPermissions from "./AssignPermissions";
+import AssignPermissionsPda from "./AssignPermissions_pda";
 import request from '@/utils/request';
 import AssignmentIndIcon from '@mui/icons-material/AssignmentInd';
+import AdUnitsIcon from '@mui/icons-material/AdUnits';
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
     '& .css-1vooibu-MuiSvgIcon-root': {
@@ -80,10 +82,11 @@
 
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
+    const [drawerValPda, setDrawerValPda] = useState(false);
 
     const [menuIds, setMenuIds] = useState([]);
 
-    const [authType,setAuthType] = useState(0)
+    const [authType, setAuthType] = useState(0)
 
     const assign = (record) => {
         request('/role/scope/list', {
@@ -102,6 +105,23 @@
         });
     }
 
+    const assignPda = (record) => {
+        request('/rolePda/scope/list', {
+            method: 'GET',
+            params: {
+                roleId: record.id
+            }
+        }).then((res) => {
+            if (res?.data?.code === 200) {
+                const { data: menuIds } = res.data;
+                setMenuIds(menuIds || []);
+                setDrawerValPda(!!drawerValPda && drawerValPda === record ? null : record);
+            } else {
+                notify(res.data.msg, { type: 'error' });
+            }
+        });
+    }
+
     return (
         <Box display="flex">
             <List
@@ -111,7 +131,7 @@
                         theme.transitions.create(['all'], {
                             duration: theme.transitions.duration.enteringScreen,
                         }),
-                    marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+                    marginRight: (!!drawerVal || !!drawerValPda) ? `${PAGE_DRAWER_WIDTH}px` : 0,
                 }}
                 title={"menu.role"}
                 empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
@@ -131,7 +151,7 @@
                     preferenceKey='role'
                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
                     rowClick={(id, resource, record) => false}
-                    omit={['id', 'createTime', 'memo','statusBool']}
+                    omit={['id', 'createTime', 'memo', 'statusBool']}
                 >
                     <NumberField source="id" />
                     <MyField source="name" label="table.field.role.name"
@@ -148,7 +168,7 @@
                     <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;" />
-                        <ScopeButton sx={{ padding: '1px', fontSize: '.75rem' }} assign={assign} auType={1} setAuthType={setAuthType} label="PDA鏉冮檺&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;" />
                         <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
                         <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
@@ -174,7 +194,25 @@
                     closeCallback={() => {
                         setMenuIds([]);
                     }}
-                    authType = {authType}
+                    authType={authType}
+                />
+            </PageDrawer>
+            <PageDrawer
+                drawerVal={drawerValPda}
+                setDrawerVal={setDrawerValPda}
+                title={!!drawerValPda ? `Scope by ${drawerValPda.code || drawerValPda.name}` : 'Role Detail'}
+                closeCallback={() => {
+                    setMenuIds([]);
+                }}
+            >
+                <AssignPermissionsPda
+                    role={drawerValPda}
+                    originMenuIds={menuIds}
+                    setDrawerVal={setDrawerValPda}
+                    closeCallback={() => {
+                        setMenuIds([]);
+                    }}
+                    authType={authType}
                 />
             </PageDrawer>
         </Box>
@@ -183,7 +221,7 @@
 
 const ScopeButton = (props) => {
     const record = useRecordContext();
-    const { assign, auType, setAuthType, label, ...rest } = props;    
+    const { assign, auType, setAuthType, label, ...rest } = props;
     return (
         <Button
             variant="text"
@@ -200,4 +238,23 @@
     )
 }
 
+const PdaScopeButton = (props) => {
+    const record = useRecordContext();
+    const { assignPda, auType, setAuthType, label, ...rest } = props;
+    return (
+        <Button
+            variant="text"
+            color="primary"
+            startIcon={<AdUnitsIcon />}
+            label={label}
+            onClick={(event) => {
+                setAuthType(auType);
+                event.stopPropagation();
+                assignPda(record);
+            }}
+            {...rest}
+        />
+    )
+}
+
 export default RoleList;

--
Gitblit v1.9.1