import { DrawerForm } from '@ant-design/pro-form'; import { Form, Spin, message } from 'antd'; import { memo } from 'react'; import { FormattedMessage, useDispatch, useIntl } from 'umi'; import CustomTree from '../CustomTree'; import { useBindFeature } from './hooks'; interface BindFeatureProps { /** * @description feature 绑定的类型,目前支持如下两种。 */ type: 'user' | 'role'; // 选择类型 /** * @description 绑定的类型的id,如type选了user,就要传入userId。 */ id?: number; // 默认参数 /** * @description 是否有有效期。 */ isHaveDate?: boolean; // 是否有有效期 /** * @description 可以自定义触发内容,默认是功能 */ children?: React.ReactChildren; /** * @description 绑定的值发生变化刷新 */ refresh?: () => void; } const BindFeature = ({ type, id, isHaveDate = false, children, refresh }: BindFeatureProps) => { const [form] = Form.useForm<{ data: { data: { id: number; expiredAt: number | undefined | null }[] }; }>(); const { formatMessage } = useIntl(); const dispatch = useDispatch(); const { featureTreeData, initFetch, loading, list, appId, title, updateFn } = useBindFeature({ id, type, isHaveDate, form, }); const renderTigger = (): React.ReactNode | null => { if (children) { return children; } return ( ); }; if (!id) { return null; } 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) => { if (values?.data?.error?.error) { message.error(values.data.error.message); return; } try { await updateFn(values?.data?.data, list, (item: number, map: {}) => ({ featureId: item, appId, [`${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(BindFeature, (prev, next) => { return prev.id === next.id; });