import { DrawerForm } from '@ant-design/pro-form'; import { Form, Spin, message } from 'antd'; import { memo } from 'react'; import { FormattedMessage, useDispatch, useIntl } from 'umi'; import { useBindData } from './hooks'; import BindDataFrom from './BindDataFrom'; interface BindDataProps { /** * @description flag-options 绑定的类型,目前支持如下两种。 */ type: 'user' | 'role'; // 选择类型 /** * @description 绑定的类型的id,如type选了user,就要传入userId。 */ id?: number; // 默认参数 /** * @description 是否有有效期。 */ isHaveDate?: boolean; // 是否有有效期 /** * @description 可以自定义触发内容,默认是数据 */ children?: React.ReactChildren; /** * @description 绑定的值发生变化刷新 */ refresh?: () => void; } const BindData = ({ type, id, isHaveDate = false, children, refresh }: BindDataProps) => { const { formatMessage } = useIntl(); const dispatch = useDispatch(); const [form] = Form.useForm<{ data: string[] }>(); const { initFetch, loading, flagList, getSelectOptions, selectMap, dataMap, updateFn, title, appId, activeKey, setActiveKey, } = useBindData({ type, id, isHaveDate, form }); 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 (result) => { const { values } = result; try { // 更新绑定的值 await updateFn(values, dataMap, (item, map) => ({ appId, flagId: map?.[item]?.flagId, optionId: item, [`${type}Id`]: id, expiredAt: isHaveDate ? Math.round(map?.[item]?.expiredAt / 1000) || undefined : undefined, })); refresh?.(); message.success(formatMessage({ id: 'component.bind.success' })); } catch (error) {} return true; }} > ); }; export default memo(BindData);