import { addRoleMenu, delRoleMenuByRoleID, updateRoleMenu } from '@/services/permission' import { isNullOrUnDef } from '@/utils/is' import { DeleteOutlined, FormOutlined, PlusOutlined, QuestionCircleOutlined } from '@ant-design/icons' import { ModalForm, ProFormText } from '@ant-design/pro-form' import type { ProFormInstance } from '@ant-design/pro-form' import type { TreeDataNode } from 'antd' import { Button, Input, Tree, message, Popconfirm } from 'antd' import { useRef, useState } from 'react' import { useRequest } from 'umi' const { DirectoryTree } = Tree import './index.less' export enum RoleType { SYSTEM = 'system', // 超级管理员 SYSTEM_NORMAL = 'systemNormal', // 普通用户 NORMAL = 'normal' // 手动添加的角色 } type RoleLeftMenuProps = { defaultActiveRole?: string onSelect: (...args) => void showDelIcon: boolean onReloadStaff: () => void } const RoleLeftMenu: React.FC = ({ defaultActiveRole, onSelect, menuRoles, showDelIcon, onReloadStaff }) => { const formRef = useRef(null) const [activeID, setActiveID] = useState>(null) const { run: tryAddRole } = useRequest((params: API.CreateRoleParams) => addRoleMenu(params), { manual: true, onSuccess: () => { onReloadStaff() } }) const { run: tryUpdateRole } = useRequest( (params: Partial) => updateRoleMenu(params), { manual: true, onSuccess: () => { message.success('修改成功') onReloadStaff() } } ) const { run: tryDelRole } = useRequest((ID: string) => delRoleMenuByRoleID({ ID }), { manual: true, onSuccess: () => { message.success('删除成功') onReloadStaff() } }) const handleOnFocus = async ( e: React.FocusEvent | React.KeyboardEvent, oldTitle: string, ID: string ) => { const val = e.currentTarget.value || e.currentTarget.nodeValue if (val !== oldTitle) { await tryUpdateRole({ ID, name: val }) } setActiveID(null) } function renderTreeNode(tree) { return tree.map((item: TreeDataNode & { roleType: string }) => { // 系统管理员,系统用户不能删除、编辑 const newItem = { ...item, title: [RoleType.SYSTEM, RoleType.SYSTEM_NORMAL].includes(item.roleType) ? ( {item.title} ) : (
{item.key === activeID ? ( handleOnFocus(e, item.title, item.key)} onPressEnter={e => handleOnFocus(e, item.title, item.key)} /> ) : ( item.title )}
setActiveID(item.key)} /> tryDelRole(item.key)} icon={}> { !showDelIcon && message.warning('请先移除该角色下的所有用户') }} />
) } if (newItem.children?.length) { newItem.children = renderTreeNode(newItem.children) } return newItem }) } if (!menuRoles?.length || isNullOrUnDef(defaultActiveRole)) return null return (
角色列表 !visible && formRef.current?.resetFields()} layout="horizontal" isKeyPressSubmit trigger={ } onFinish={async values => { await tryAddRole(values) message.success('添加成功') return true }}>
keys?.[0] && onSelect(keys[0], node.node.roleType)} showIcon={false} treeData={renderTreeNode(menuRoles)} />
) } export default RoleLeftMenu