import React, { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react'; import { Form, ProTable, Button, Input, Modal, Space, Divider, Drawer, Transfer, Row, Col, message, Tooltip, Spin, AppContainer, Utils, Popover, IconFont, } from 'knowdesign'; import moment from 'moment'; import { CloseOutlined, LoadingOutlined, PlusOutlined } from '@ant-design/icons'; import { defaultPagination } from 'constants/common'; import { RoleProps, PermissionNode, AssignUser, RoleOperate, FormItemPermission } from './config'; import api from 'api'; import CheckboxGroupContainer from './CheckboxGroupContainer'; import { ConfigPermissionMap } from '../CommonConfig'; const { request } = Utils; const { confirm } = Modal; const { TextArea } = Input; // 新增/编辑角色、查看角色详情抽屉 // eslint-disable-next-line react/display-name const RoleDetailAndUpdate = forwardRef((props, ref): JSX.Element => { const [global] = AppContainer.useGlobalValue(); const [form] = Form.useForm(); const [visible, setVisible] = useState(false); const [type, setType] = useState(RoleOperate.Add); const [roleDetail, setRoleDetail] = useState(); const [permissions, setPermissions] = useState([]); const [permissionFormLoading, setPermissionFormLoading] = useState(false); const [initSelectedPermissions, setInitSelectedPermission] = useState<{ [index: string]: [] }>({}); const [confirmLoading, setConfirmLoading] = useState(false); const callback = useRef(() => { return; }); useEffect(() => { const globalPermissions = global.permissions; if (globalPermissions && globalPermissions.length) { const sysPermissions = globalPermissions.map((sys: PermissionNode) => ({ id: sys.id, name: sys.permissionName, options: sys.childList.map((node) => ({ label: node.permissionName, value: node.id })), })); setPermissions(sysPermissions); } }, [global]); useEffect(() => { if (roleDetail) { setPermissionFormLoading(true); request(api.role(roleDetail.id)).then((res: any) => { const initSelected = {}; const permissions = res.permissionTreeVO.childList; permissions.forEach((sys) => { initSelected[sys.id] = []; sys.childList.forEach((node) => node.has && initSelected[sys.id].push(node.id)); }); setInitSelectedPermission(initSelected); setPermissionFormLoading(false); }); } }, [roleDetail]); const onSubmit = () => { form.validateFields().then((formData) => { formData.permissionIdList.forEach((arr, i) => { // 如果分配的系统下的子权限,自动赋予该系统的权限 if (arr !== null && arr.length) { arr.push(permissions[i].id); } }); formData.permissionIdList = formData.permissionIdList.flat(); setConfirmLoading(true); request(api.editRole, { method: type === RoleOperate.Add ? 'POST' : 'PUT', data: Object.assign(formData, type === RoleOperate.Edit ? { id: roleDetail.id } : {}), }).then( (res) => { callback.current(); onClose(); setInitSelectedPermission({}); message.success(`${type === RoleOperate.Add ? '新增' : '编辑'}角色成功`); }, () => setConfirmLoading(false) ); }); }; // 打开抽屉 const onOpen = (status: boolean, type: RoleOperate, cbk: () => { return }, record: RoleProps) => { setInitSelectedPermission({}); form.setFieldsValue(record); callback.current = cbk; setRoleDetail(record); setType(type); setVisible(status); }; // 关闭抽屉 const onClose = () => { setVisible(false); setRoleDetail(undefined); form.resetFields(); setConfirmLoading(false); }; useImperativeHandle(ref, () => ({ onOpen, })); return ( {type !== RoleOperate.View && ( <> )} } > {type === RoleOperate.View ? ( // 查看角色详情 <> 角色名称: {(roleDetail && roleDetail.roleName) || '-'} 描述: {(roleDetail && roleDetail.description) || '-'}
角色绑定权限项
<> {permissions.length ? ( {permissions.map((permission, i) => ( ))} ) : ( <> )}
) : ( // 新增/编辑角色