DataImport.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import { ModalForm, ProFormUploadDragger } from "@ant-design/pro-components";
  2. import { Form, message } from "antd";
  3. import { API_HOST, get } from "../../../request";
  4. import type { UploadFile } from "antd/es/upload/interface";
  5. import type { IAttachmentResponse } from "../../../api/Attachments";
  6. import modal from "antd/lib/modal";
  7. import { useIntl } from "react-intl";
  8. interface INissayaEndingUpload {
  9. filename: UploadFile<IAttachmentResponse>[];
  10. }
  11. export interface INissayaEndingImportResponse {
  12. ok: boolean;
  13. message: string;
  14. data: {
  15. success: number;
  16. fail: number;
  17. };
  18. }
  19. interface IWidget {
  20. title?: string;
  21. url: string;
  22. urlExtra?: string;
  23. trigger?: JSX.Element;
  24. onSuccess?: Function;
  25. }
  26. const DataImportWidget = ({
  27. title,
  28. url,
  29. urlExtra,
  30. trigger = <>{"trigger"}</>,
  31. onSuccess,
  32. }: IWidget) => {
  33. const intl = useIntl();
  34. const [form] = Form.useForm<INissayaEndingUpload>();
  35. const formTitle = title ? title : intl.formatMessage({ id: "labels.upload" });
  36. return (
  37. <ModalForm<INissayaEndingUpload>
  38. title={formTitle}
  39. trigger={trigger}
  40. form={form}
  41. autoFocusFirstInput
  42. modalProps={{
  43. destroyOnClose: true,
  44. onCancel: () => console.log("run"),
  45. }}
  46. submitTimeout={2000}
  47. onFinish={async (values) => {
  48. console.log("values", values);
  49. let _filename: string = "";
  50. if (
  51. typeof values.filename === "undefined" ||
  52. values.filename.length === 0
  53. ) {
  54. _filename = "";
  55. } else if (typeof values.filename[0].response === "undefined") {
  56. _filename = values.filename[0].uid;
  57. } else {
  58. _filename = values.filename[0].response.data.filename;
  59. }
  60. const queryUrl = `${url}?filename=${_filename}&${urlExtra}`;
  61. const res = await get<INissayaEndingImportResponse>(queryUrl);
  62. if (res.ok) {
  63. if (res.data.fail > 0) {
  64. modal.info({
  65. title: "error",
  66. content: `成功${res.data.success}-失败${res.data.fail}\n${res.message}`,
  67. });
  68. } else {
  69. message.success(`成功导入${res.data.success}`);
  70. }
  71. if (typeof onSuccess !== "undefined") {
  72. onSuccess();
  73. }
  74. } else {
  75. message.error(res.message);
  76. }
  77. return true;
  78. }}
  79. >
  80. <ProFormUploadDragger
  81. max={1}
  82. label="请确保您的xlsx文件是用导出功能导出的。word为空可以删除该词条。使用其他studio导出的数据,请将channel_id设置为空。否则该术语将被忽略。"
  83. name="filename"
  84. fieldProps={{
  85. name: "file",
  86. }}
  87. action={`${API_HOST}/api/v2/attachments?is_tmp=true`}
  88. />
  89. </ModalForm>
  90. );
  91. };
  92. export default DataImportWidget;