react-前端封装导入导出方法

一、通用导出方法

/**
 * Export file
 * @param {*} filename: Export file name
 * @param {*} text: Export file content
 * @param {*} format: Export file format
 */
export function downloadTXT(filename, text, format) {
  const link = document.createElement('a');
  link.setAttribute('href', `data:text/${format};charset=utf-8,${encodeURIComponent(text)}`);
  link.setAttribute('download', filename);
  link.style.display = 'none';
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}

上述方法对于一些导出cxv或者excel 等 ,内容有汉字的话可能会导致乱码,有如下解决办法:

/**
 * Export file
 * @param {*} filename: Export file name
 * @param {*} text: Export file content
 * @param {*} format: Export file format
 * @param {*} isImport: Whether to import, optional parameters
 */
export function downloadTXT(filename, text, format, isImport) {
  const link = document.createElement('a');
  if (isImport) {
    link.setAttribute('href', `data:text/${format};charset=utf-8,${encodeURIComponent(text)}`);
  } else {
    // "\ ufeff" to solve the problem of CSV Chinese garbled code
    const blob = new Blob([`\ufeff${text}`], {
      type: `data:text/${format};charset=utf-8`,
    });
    const url = URL.createObjectURL(blob);
    link.href = url;
  }
  link.setAttribute('download', filename);
  link.style.display = 'none';
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}

二、导出 txt形式的json的调用

 const content= JSON.stringify(jsonPayload);
 const exportName = `xxx.json`;
 downloadTXT(exportName, content, 'plain', true);

三、导入txt形式的json

css

.uploadFile{
    display: none;
      }
      button {
          margin: 5px;
          cursor: pointer;
      }

html

// 采用button 组件遮挡原生type=file的形式
  <Button
     autoFocus
      color="primary"
      btnContent={importContent}
      btnFunc={btnImportFunc}
    />
 <input className="uploadFile" type="file" accept="application/json" onChange={previewFile} ref={fileRef} />

js

import React, {useRef } from 'react';
const fileRef = useRef();
  /**
   * Import file parsed data
   */
  const previewFile = () => {
    const file = document.querySelector('input[type=file]').files[0];
    const reader = new FileReader();
    reader.onload = () => {
      const index = file.name.lastIndexOf('.');
      const ext = file.name.substr(index + 1);
      const pattern = /^(json)$/;
      if (!pattern.test(ext)) {
        fileRef.current.value = '';
        return;
      }

      const preview = Base64.decode(reader.result.split(',')[1]); // 导入的内容
      /**
      // 调用
      const templateFlag = checkImportTemValue(preview, xmlParseJsonData);
      if (!templateFlag.boolVal) {
        enqueueSnackbar(intl.formatMessage({ id: 'intl.fail-rule' }), {
          variant: 'error',
          autoHideDuration: null,
        });
        fileRef.current.value = '';
        return;
      }

     */

      fileRef.current.value = '';
    };

    if (file) {
      reader.readAsDataURL(file);
    }
  };

// 以上仅供参考,可在此基础上做修改

四、导出csv形式的调用(excel表格)

/**
 * Export table list
 * @param {*} tableHeadTitle: Export required header
 * @param {*} tableList: Export required list
 * @returns
 */
export function exportTableData(tableHeadTitle, tableList) {
  const arr = tableList.map((item) => {
    const obj = {};
    tableHeadTitle.forEach((itm, idx) => {
      obj[tableHeadTitle[idx]] = item[itm];
    });
    return obj;
  });
  console.log('arr', arr);
  const exportContentFile = `${tableHeadTitle.join(',')}\n${
    arr.map((item) => {
      const filterKeyArr = Object.keys(item);
      let result = '';
      filterKeyArr.forEach((itm) => {
        // Added \t to prevent tables from displaying scientific notation or other formats
        result += `${`${item[itm]}\t`},`;
      });
      return result;
    }).join('\n')}`;
  return exportContentFile;
}


export const DIAGNOSTICS_EXPORT_TABLE_HEAD = ['timeGenerated', 'level', 'operationName', 'properties'];
 const exportContentFile = exportTableData(
        DIAGNOSTICS_EXPORT_TABLE_HEAD,
        paramsTableList,
      );
      const exportName = `${enrollmentId}-${new Date().getTime()}.csv`;
      downloadTXT(exportName, exportContentFile, EXPORT_CSV);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值