import { Button, Modal, Space, Typography, Upload, message } from 'antd'; import { DownloadOutlined, UploadOutlined } from '@ant-design/icons'; import { memo, useState } from 'react'; import { useGetAppId } from '../utils/hooks'; import { uploadFile } from '../server'; import { FormattedMessage, useIntl } from 'umi'; import Flex from '../Flex'; const { Text, Link, Paragraph } = Typography; interface ImportFileProps { /** * @description 成功以后的提示 */ successTitle?: string | React.ReactNode; /** * @description 自定义导入弹窗的title */ title?: string | React.ReactNode; /** * @description 需要自定义传入文档链接 * //https://huolala.feishu.cn/wiki/EWQLwNmWliPNkkkiysTcbfAzn7g */ docUrl?: string; /** * @description 自定义描述信息 */ description?: string | React.ReactNode; /** * @description 下载模版地址 */ demoUrl: string; /** * @description 导入的类型 */ type: | 'feature' | 'option' | 'policy' | 'role' | 'user_feature' | 'user_role' | 'user_option' | 'user_policy'; /** * @description 传的参数 */ params?: {}; /** * @description 成功以后执行的操作 */ refresh?: () => void; /** * @description 触发node */ trigger?: string | React.ReactNode; /** * @description footer description by@edith */ footer?: string | React.ReactNode; } const ImportFile = ({ successTitle, params, type = 'feature', title, trigger, description, footer, demoUrl = '', docUrl = '', refresh, }: ImportFileProps) => { const { formatMessage } = useIntl(); const [open, setOpen] = useState(false); const appId = useGetAppId(); const typeMap = { feature: 'feature/upload', option: 'option/import', policy: 'policy/upload', role: 'role/upload', user_feature: 'relation/user_feature/upload', user_role: 'relation/user_role/upload', user_option: 'relation/user_option/upload', user_policy: 'relation/user_policy/upload', }; return ( <> setOpen(false)} >
              
                
                  
                    *
                  
                  {description || formatMessage({ id: 'component.ImportFile.description' })}
                
                {docUrl ? (
                  
                    
                  
                ) : null}
              
            
              
                
                  
                

                
              
            
              
                
                  
                
                {successTitle}
                 {
                    const formData = new FormData();
                    formData.append('file', file);
                    formData.append('appId', `${appId}`);
                    for (const key in params) {
                      formData.append(key, params[key]);
                    }
                    try {
                      const response = await uploadFile(typeMap[type], formData);
                      if (response?.ret === 0) {
                        // @ts-ignore
                        onSuccess(response, file);
                        message.success(
                          formatMessage({ id: 'component.ImportFile.upload.success' }),
                        );
                      } else {
                        // @ts-ignore
                        onError(response?.msg);
                      }
                    } catch (error) {
                      // @ts-ignore
                      onError(error);
                    }
                    refresh?.();
                  }}
                >
                  
                
                {footer}
              
            
{ setOpen(true); }} > {trigger ? ( trigger ) : ( )} ); }; export default memo(ImportFile);