fix:1. 优化角色权限管理的加载中样式。
2. root添加限制51707端口的路由访问,只允许访问交叉评查。 3. 开启省局端口限制的配置。
This commit is contained in:
@@ -868,6 +868,9 @@ export default function RolePermissions() {
|
||||
// v3.8: 加载角色权限的 loading 状态
|
||||
const [loadingPermissions, setLoadingPermissions] = useState(false);
|
||||
|
||||
// 加载用户列表的 loading 状态
|
||||
const [loadingUsers, setLoadingUsers] = useState(false);
|
||||
|
||||
// v3.8: 路由ID到路由信息的映射(用于显示通用权限关联的路由名称)
|
||||
const [routeIdToInfoMap, setRouteIdToInfoMap] = useState<Map<number, { title: string; path: string }>>(new Map());
|
||||
|
||||
@@ -981,6 +984,7 @@ export default function RolePermissions() {
|
||||
const handleSelectRole = async (role: RoleInfo) => {
|
||||
setSelectedRole(role);
|
||||
setLoadingPermissions(true); // v3.8: 开始加载权限
|
||||
setLoadingUsers(true); // 开始加载用户列表
|
||||
|
||||
try {
|
||||
// 动态导入权限映射工具
|
||||
@@ -1069,6 +1073,7 @@ export default function RolePermissions() {
|
||||
toastService.error('加载角色权限失败');
|
||||
} finally {
|
||||
setLoadingPermissions(false); // v3.8: 结束加载权限
|
||||
setLoadingUsers(false); // 结束加载用户列表
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1933,59 +1938,67 @@ export default function RolePermissions() {
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div className="users-list">
|
||||
{roleUsers.length > 0 ? (
|
||||
roleUsers.map(user => (
|
||||
<div key={user.id} className="user-card">
|
||||
<div className="user-avatar">
|
||||
<i className="ri-user-line"></i>
|
||||
</div>
|
||||
<div className="user-info">
|
||||
<div className="user-name">
|
||||
{user.nick_name}
|
||||
{user.is_leader && (
|
||||
<span className="leader-badge">负责人</span>
|
||||
)}
|
||||
{/* 加载状态显示 */}
|
||||
{loadingUsers ? (
|
||||
<div className="loading-container" style={{ minHeight: '300px', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '12px' }}>
|
||||
<i className="ri-loader-4-line spin" style={{ fontSize: '32px', color: '#00684a' }}></i>
|
||||
<span style={{ color: '#666' }}>正在加载用户列表...</span>
|
||||
</div>
|
||||
) : (
|
||||
<div className="users-list">
|
||||
{roleUsers.length > 0 ? (
|
||||
roleUsers.map(user => (
|
||||
<div key={user.id} className="user-card">
|
||||
<div className="user-avatar">
|
||||
<i className="ri-user-line"></i>
|
||||
</div>
|
||||
<div className="user-username">@{user.username}</div>
|
||||
<div className="user-org">
|
||||
{/* {JSON.stringify(user)} */}
|
||||
{user.ou_name}
|
||||
{user.area && <span style={{ marginLeft: '8px', color: '#666' }}>• {user.area}</span>}
|
||||
<div className="user-info">
|
||||
<div className="user-name">
|
||||
{user.nick_name}
|
||||
{user.is_leader && (
|
||||
<span className="leader-badge">负责人</span>
|
||||
)}
|
||||
</div>
|
||||
<div className="user-username">@{user.username}</div>
|
||||
<div className="user-org">
|
||||
{/* {JSON.stringify(user)} */}
|
||||
{user.ou_name}
|
||||
{user.area && <span style={{ marginLeft: '8px', color: '#666' }}>• {user.area}</span>}
|
||||
</div>
|
||||
<div className="user-contact">
|
||||
{user.phone_number && (
|
||||
<span>
|
||||
<i className="ri-phone-line"></i>
|
||||
{user.phone_number}
|
||||
</span>
|
||||
)}
|
||||
{user.email && (
|
||||
<span>
|
||||
<i className="ri-mail-line"></i>
|
||||
{user.email}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div className="user-contact">
|
||||
{user.phone_number && (
|
||||
<span>
|
||||
<i className="ri-phone-line"></i>
|
||||
{user.phone_number}
|
||||
</span>
|
||||
)}
|
||||
{user.email && (
|
||||
<span>
|
||||
<i className="ri-mail-line"></i>
|
||||
{user.email}
|
||||
</span>
|
||||
)}
|
||||
<div className="user-actions">
|
||||
<button
|
||||
className="btn-icon text-error"
|
||||
onClick={() => handleRemoveUserRole(user)}
|
||||
title="移除角色"
|
||||
>
|
||||
<i className="ri-user-unfollow-line"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div className="user-actions">
|
||||
<button
|
||||
className="btn-icon text-error"
|
||||
onClick={() => handleRemoveUserRole(user)}
|
||||
title="移除角色"
|
||||
>
|
||||
<i className="ri-user-unfollow-line"></i>
|
||||
</button>
|
||||
</div>
|
||||
))
|
||||
) : (
|
||||
<div className="empty-state">
|
||||
<i className="ri-user-line"></i>
|
||||
<p>暂无用户拥有此角色</p>
|
||||
</div>
|
||||
))
|
||||
) : (
|
||||
<div className="empty-state">
|
||||
<i className="ri-user-line"></i>
|
||||
<p>暂无用户拥有此角色</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user