Blame view

src/components/table/export-csv.js 2.41 KB
43509ad8   梁灏   Table support exp...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  function has (browser) {
      const ua = navigator.userAgent;
      if (browser === 'ie') {
          const isIE = ua.indexOf('compatible') > -1 && ua.indexOf('MSIE') > -1;
          if (isIE) {
              const reIE = new RegExp("MSIE (\\d+\\.\\d+);");
              reIE.test(ua);
              return parseFloat(RegExp["$1"]);
          } else {
              return false
          }
      } else {
          return ua.indexOf(browser) > -1;
      }
  }
  
  const csv = {
      _isIE11 () {
          let iev = 0;
          const ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
          const trident = !!navigator.userAgent.match(/Trident\/7.0/);
          const rv = navigator.userAgent.indexOf("rv:11.0");
  
          if (ieold) {
              iev = Number(RegExp.$1);
          }
          if (navigator.appVersion.indexOf("MSIE 10") !== -1) {
              iev = 10;
          }
          if (trident && rv !== -1) {
              iev = 11;
          }
  
          return iev === 11;
      },
  
      _isEdge () {
          return /Edge/.test(navigator.userAgent);
      },
  
      _getDownloadUrl (text) {
          const BOM = "\uFEFF";
          // Add BOM to text for open in excel correctly
          if (window.Blob && window.URL && window.URL.createObjectURL && !has('Safari')) {
              const csvData = new Blob([BOM + text], { type: 'text/csv' });
              return URL.createObjectURL(csvData);
          } else {
              return 'data:attachment/csv;charset=utf-8,' + BOM + encodeURIComponent(text);
          }
      },
  
      download (filename, text) {
          if (has('ie') && has('ie') < 10) {
              // has module unable identify ie11 and Edge
              const oWin = window.top.open("about:blank", "_blank");
              oWin.document.charset = 'utf-8';
              oWin.document.write(text);
              oWin.document.close();
              oWin.document.execCommand('SaveAs', filename);
              oWin.close();
          } else if (has("ie") === 10 || this._isIE11() || this._isEdge()) {
              const BOM = "\uFEFF";
              const csvData = new Blob([BOM + text], { type: 'text/csv' });
              navigator.msSaveBlob(csvData, filename);
          } else {
              const link = document.createElement('a');
              link.download = filename;
              link.href = this._getDownloadUrl(text);
              link.target = '_blank';
              document.body.appendChild(link);
              link.click();
              document.body.removeChild(link);
          }
      }
  };
  
  export default csv;