/* eslint-disable max-lines-per-function -- 单组件按原型区块展开,拆分反而降低可读性 */ import { Button, SideSheet } from '@douyinfe/semi-ui-19'; import type { PermissionTree, RoleDetail } from '@lingxi/shared'; import { IconCheck, IconStar } from '@lingxi/ui/icons'; import type { ReactNode } from 'react'; import { scopeLabelOf } from './role-display'; export interface PermissionCatalogDrawerProps { visible: boolean; tree: PermissionTree | undefined; role: RoleDetail | null; onClose: () => void; } /** 权限点目录抽屉:只读展示 30 个权限点与当前角色的持有情况 */ export function PermissionCatalogDrawer({ visible, tree, role, onClose, }: PermissionCatalogDrawerProps): ReactNode { const granted = new Set([ ...(role?.permissions ?? []), ...(role?.specialPermissions ?? []), ]); return ( 权限点变更即时对绑定用户生效 } >

{tree?.totalPermissions ?? 30} 个权限点 · {tree?.specialPermissions.length ?? 6}{' '} 个特殊权限;★ 默认关闭、需单独授予。 {role === null ? ' 当前角色尚未加载。' : ` 当前勾选为「${role.name}」持有(${String(role.permissionCount + role.specialPermissionCount)} 个)。`}

{tree === undefined ? (

权限点目录加载中…

) : ( tree.modules.map((module) => (
{module.moduleLabel} {module.permissions.filter((permission) => granted.has(permission.code)).length} /{' '} {module.permissions.length}
{module.permissions.map((permission) => { const owned = granted.has(permission.code); return (
{permission.name} {permission.isSpecial ? ( ★ 特殊 ) : null} {permission.description} {permission.code}
); })}
)) )}
特殊权限 6 项与普通权限分开授予,不随角色复制带入;当前角色数据范围为「 {role === null ? '—' : scopeLabelOf(role.dataScope.type)}」。
); }