import { ProFormCheckbox } from '@ant-design/pro-form'; import { Alert, Button, Card, Checkbox, Drawer, Form, Space, Spin, Tabs } from 'antd'; import _ from 'lodash'; import { cloneElement, isValidElement, useCallback, useEffect, useMemo, useState } from 'react'; import { FormattedMessage, useIntl, useRequest } from 'umi'; import List from './List'; import UserDepart from './UserDepart'; const PermissionManage = ({ isCreate = false, userId, appId, manualOpen = false, setManualOpen = () => {}, children, onFinish, }: { isCreate?: boolean; userId?: number; appId: number; manualOpen?: boolean; setManualOpen?: (open: boolean) => void; children?: React.ReactElement<{ onClick: () => void }>; onFinish?: () => void; }) => { const [form] = Form.useForm(); const [open, setOpen] = useState(false); const { formatMessage } = useIntl(); const [activeKey, setActiveKey] = useState('_UacPermissionFeature'); const [values, setValues] = useState({}); const menuMap = useMemo( () => ({ _UacPermissionFeature: formatMessage({ id: 'components.ManageAdmin.permissionManage.menu.feature', defaultMessage: '功能权限', }), _UacPermissionFlag: formatMessage({ id: 'components.ManageAdmin.permissionManage.menu.flag', defaultMessage: '数据管理', }), _UacPermissionPolicy: formatMessage({ id: 'components.ManageAdmin.permissionManage.menu.policy', defaultMessage: '策略管理', }), _UacPermissionRole: formatMessage({ id: 'components.ManageAdmin.permissionManage.menu.role', defaultMessage: '角色管理', }), _UacPermissionUser: formatMessage({ id: 'components.ManageAdmin.permissionManage.menu.user', defaultMessage: '用户管理', }), _UacPermissionTemplate: formatMessage({ id: 'components.ManageAdmin.permissionManage.menu.template', defaultMessage: '审批模版管理', }), _UacPermissionAudit: formatMessage({ id: 'components.ManageAdmin.permissionManage.menu.audit', defaultMessage: '审计', }), _UacPermissionAuditRequest: formatMessage({ id: 'components.ManageAdmin.permissionManage.menu.auditRequest', defaultMessage: '申请单管理', }), _UacPermissionLog: formatMessage({ id: 'components.ManageAdmin.permissionManage.menu.log', defaultMessage: '日志', }), _UacPermissionSetting: formatMessage({ id: 'components.ManageAdmin.permissionManage.menu.setting', defaultMessage: '设置', }), // _UacPermissionGroup: '', // _UacPermissionTask: '', }), [], ); const menuDisabled = { _UacPermissionAudit: true, _UacPermissionLog: true, _UacPermissionSetting: true, }; const menuRender = { _UacPermissionFeature: (show, disabled) => ( ), _UacPermissionFlag: (show, disabled) => ( ), _UacPermissionPolicy: (show, disabled) => ( ), _UacPermissionRole: (show, disabled) => ( ), _UacPermissionUser: (show, disabled) => ( ), _UacPermissionTemplate: (show, disabled) => ( ), _UacPermissionAuditRequest: (show, disabled) => ( ), }; const { data, run } = useRequest( { url: '/goapi/app/action', data: { appId }, method: 'POST', }, { manual: true, }, ); const { data: userPermissions, run: runUserPermissions } = useRequest( { url: '/goapi/app/user/permission/detail', data: { userId, appId }, method: 'POST', }, { manual: true, }, ); const { loading: saveLoading, run: runSave } = useRequest( (d) => ({ url: '/goapi/app/user/permission/update', method: 'POST', data: d, }), { manual: true, }, ); const { loading: addLoading, run: runAddUser } = useRequest( (userIds) => ({ url: '/goapi/app/managerUser/add', method: 'POST', data: { appId, userIds, }, }), { manual: true, }, ); const onClose = () => { setOpen(false); setManualOpen(false); }; const triggerRender = () => { if (!isValidElement(children)) { if (!isCreate) { return ( setOpen(true)}> ); } else { return <> ; } } return cloneElement(children, { onClick: () => { setOpen(true); }, }); }; const onValuesChange = useCallback( (changedValues, allValues) => { // 根据全选来设置其他权限 if (!_.isUndefined(changedValues.all)) { const filedsval = _.fromPairs([ ..._.map(_.keys(menuMap), (key) => [key, changedValues.all]), ..._.map(_.keys(menuMap), (key) => [`${key}All`, changedValues.all]), ..._.map(_.keys(menuMap), (key) => [`${key}Values`, { data: [], type: 'User' }]), ]); form?.setFieldsValue(filedsval); setValues((val) => ({ ...val, ...filedsval })); } else if (menuMap[_.keys(changedValues)?.[0]]) { // 根据其他按钮的勾选来设置全选 let isAll = true; if (!_.values(changedValues)?.[0]) { isAll = false; } else { _.keys(menuMap)?.forEach((item) => { if (!allValues[item]) { isAll = false; } }); } const filedsval = { all: isAll, [`${_.keys(changedValues)?.[0]}All`]: _.values(changedValues)?.[0], [`${_.keys(changedValues)?.[0]}Values`]: { data: [], type: 'User' }, }; form?.setFieldsValue(filedsval); setValues((val) => ({ ...val, ...changedValues, ...filedsval })); } else { setValues((val) => ({ ...val, ...changedValues })); } }, [form, menuMap], ); useEffect(() => { if (manualOpen) { setOpen(manualOpen); } }, [manualOpen, setOpen]); useEffect(() => { if (open) { run().then((d) => setActiveKey(d?.[0]?.value)); runUserPermissions(); } }, [open, run, runUserPermissions]); useEffect(() => { if (isCreate) { // 创建进来默认全选 const filedsval = _.fromPairs([ ..._.map( _.keys(menuMap)?.filter((item) => menuMap[item]), (key) => [key, true], ), ..._.map( _.keys(menuMap)?.filter((item) => menuMap[item]), (key) => [`${key}All`, true], ), ..._.map( _.keys(menuMap)?.filter((item) => menuMap[item]), (key) => [`${key}Values`, { data: [], type: 'User' }], ), ]); filedsval.all = true; form?.setFieldsValue(filedsval); setValues(filedsval); } else { // 编辑进来需要看有哪些权限,再判断是否有全部 const { action, resource } = userPermissions || {}; if (action) { const filedsval = _.fromPairs([ ..._.map( _.keys(menuMap)?.filter((item) => menuMap[item]), (key) => [key, action.includes(key) ? true : false], ), ..._.map( _.keys(menuMap)?.filter((item) => menuMap[item]), (key) => [`${key}All`, resource[key]?.allowAll || false], ), ..._.map( _.keys(menuMap)?.filter((item) => menuMap[item]), (key) => [ `${key}Values`, { data: resource[key]?.permissionId?.map((id) => ({ id: `${id}` })), type: 'User' }, ], ), ]); if (resource?.['_UacPermissionAuditRequestDepart']) { filedsval['_UacPermissionAuditRequestValues'] = { data: resource?.['_UacPermissionAuditRequestDepart']?.permissionId?.map((id) => ({ id: `${id}`, })), type: 'Depart', }; } if (resource?.['_UacPermissionDepart']) { filedsval['_UacPermissionUserValues'] = { data: resource?.['_UacPermissionDepart']?.permissionId?.map((id) => ({ id: `${id}` })), type: 'Depart', }; } let isAll = true; _.keys(menuMap)?.forEach((item) => { if (!action?.includes(item)) { isAll = false; } }); filedsval.all = isAll; form?.setFieldsValue(filedsval); setValues(filedsval); } } }, [userPermissions, form, menuMap, isCreate]); const CustomCheckbox = ({ disabled, value, onChange, label, }: { disabled?: boolean; value?: boolean; onChange?: (e?: boolean) => void; label: string; }) => { return ( onChange?.(e?.target?.checked)} /> {label} ); }; return ( <> {triggerRender()} } footerStyle={{ textAlign: 'right' }} footer={ saveLoading || addLoading ? ( ) : ( ) } onClose={onClose} open={open} >
setActiveKey(key)}> {data ?.filter((item) => menuMap[item?.value]) ?.map((item) => { const { value } = item; return ( } > {menuRender[value]?.( activeKey === value, values[`${value}All`] || !values[value], )} ); })}
); }; export default PermissionManage;