import { DrawerForm } from '@ant-design/pro-form'; import { Form, Spin, message } from 'antd'; import { memo } from 'react'; import { FormattedMessage, useDispatch, useIntl } from 'umi'; import CustomCheckboxGroup from '../CustomCheckboxGroup'; import { useBindRoleOrPolicy } from './hooks'; export interface BindRoleProps { /** * @description feature 绑定的类型,目前支持如下两种。 * @type 'feature' | 'option' | 'policy' | 'user' */ type: 'feature' | 'option' | 'policy' | 'user' | 'role'; // 选择类型 /** * @description 绑定的类型的id,如type选了user,就要传入userId。 */ id?: number; // 默认参数 /** * @description type选了option,就需要传入flagId。 */ flagId?: number; /** * @hide true */ comType?: 'policy' | 'role'; // 选择类型 /** * @description 是否有有效期。 */ isHaveDate?: boolean; /** * @description 可以自定义触发内容,默认是角色 */ children?: React.ReactChildren; /** * @description 绑定的值发生变化刷新 */ refresh?: () => void; } const BindRole = ({ id, flagId, type, comType = 'role', isHaveDate = false, children, refresh, }: BindRoleProps) => { const { formatMessage } = useIntl(); const dispatch = useDispatch(); const [form] = Form.useForm<{ data: { data: number[] } }>(); const { allData, loading, initFetch, title, appId, list, updateFn } = useBindRoleOrPolicy({ comType, type, id, flagId, form, isHaveDate, }); const renderTigger = (): React.ReactNode | null => { if (children) { return children; } return ( ); }; return ( { form.resetFields(); if (val) { initFetch(); if (isHaveDate) { dispatch({ type: 'public/fetchAppDetail', payload: appId, }); } } }, }} title={title} form={form} // @ts-ignore trigger={renderTigger()} onFinish={async (values) => { try { await updateFn(values?.data?.data, list, (item: number, map: {}) => ({ [`${comType}Id`]: item, appId, [`${type}Id`]: id, flagId, expiredAt: isHaveDate ? Math.round(map?.[item]?.expiredAt / 1000) || undefined : undefined, })); message.success(formatMessage({ id: 'component.bind.success' })); refresh?.(); } catch (error) {} return true; }} > ); }; export default memo(BindRole);