配置导入与导出

该文章展示了一个React组件,用于处理.json文件的导入和导出功能。组件内部使用FileReader读取上传的文件内容,将文本转换为JSON,然后调用savePages函数进行数据保存。导入成功或失败的信息会显示在模态框中。同时,文章还涉及了Promise的使用以及自定义确认对话框的实现。
摘要由CSDN通过智能技术生成

导入

export default function ImportPages(props: ImportPagesProps) {
  const { projectNo, projectId, onSuccess, id } = props;
  const onChange = (file) => {
    const reader = new FileReader();
    const blob = new Blob([file.file], {
      type: 'text/plain',
    });
    reader.readAsText(blob, 'utf-8');
    reader.onload = async () => {
      try {
        if (typeof reader.result === 'string') {
          const fileData = JSON.parse(reader.result);
          const res = await savePages(id, fileData, projectNo, projectId);
          onSuccess(res.every((v) => +v.code !== 0));
          Modal.info({
            title: '提示',
            content: (
              <>
                {res.map((v, i) => (
                  <div>
                    {fileData[i].name} {fileData[i].pagePath}
                    <span style={{ color: +v.code === 0 ? '#00bc70' : 'red' }}>
                      {+v.code === 0 ? '导入成功' : '导入失败'}
                    </span>
                  </div>
                ))}
              </>
            ),
          });
        }
      } catch (error) {
        console.warn(error);
      }
    };
  };

  return (
    <Upload accept=".json" customRequest={onChange} showUploadList={false}>
      <Button type="primary">导入</Button>
    </Upload>
  );
}

导出

 <ImportPages
              projectNo={search.projectNo}
              projectId={search.projectId}
              onSuccess={(isFail) => !isFail && getPageList(true, pageInfo)}
            />
            <Button
              style={{ borderRadius: '4px' }}
              onClick={() => {
                const blob = new Blob([JSON.stringify(pageList)], {
                  type: 'text/plain',
                });
                const filename = `${search.channelCode}-${search.projectNo}-${moment().format(
                  'MM_DD HH_mm_ss',
                )}.json`;
                openFile.downloadWithBlob(blob, filename);
              }}
            >
              导出
            </Button>

封装promise

   const confirmPromise = () => new Promise((resolve) => {
          Modal.confirm({
            content: '温馨提示:同学,详情可关注页面最下方“我已阅读并确认"内容',
            okText: '我已知晓',
            cancelText: '去看看',
            onOk: () => {
              resolve(1);
            },
            onCancel: () => {
              resolve(0);
            }
          });

        });

        const confirmRes = yield call(confirmPromise);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值