<!DOCTYPE html> 
 | 
<html> 
 | 
<head> 
 | 
  <meta charset="utf-8"> 
 | 
  <title>excel</title> 
 | 
  <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> 
 | 
  <link rel='stylesheet' href='../../static/plugins/css/pluginsCss.css' /> 
 | 
  <link rel='stylesheet' href='../../static/plugins/plugins.css' /> 
 | 
  <link rel='stylesheet' href='../../static/css/luckysheet.css' /> 
 | 
  <link rel='stylesheet' href='../../static/assets/iconfont/iconfont.css' /> 
 | 
  <script src="../../static/js/luckysheet_js/plugin.js"></script> 
 | 
  <script src="../../static/js/luckysheet_js/luckysheet.umd.js"></script> 
 | 
  <script src="../../static/js/luckysheet_js/luckyexcel.umd.js"></script> 
 | 
  <script src="../../static/js/luckysheet_js/exceljs.min.js"></script> 
 | 
  <script type="text/javascript" src="../../static/js/luckysheet_js/export.js" charset="utf-8"></script> 
 | 
  <script type="text/javascript" src="../../static/js/luckysheet_js/pako.es5.js" charset="utf-8"></script> 
 | 
  <script type="text/javascript" src="../../static/js/luckysheet_js/base64.min.js" charset="utf-8"></script> 
 | 
  <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> 
 | 
  <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> 
 | 
  <script type="text/javascript" src="../../static/js/luckysheet_js/print.min.js" charset="utf-8"></script> 
 | 
</head> 
 | 
<body> 
 | 
<div style="display: flex;position: absolute;top: 20px;left:30px;z-index: 9999;"> 
 | 
  <!--  <div><button type="button" id="export">导出Execel</button></div>--> 
 | 
<!--  <div><button type="button" id="save">保存到服务器</button></div>--> 
 | 
<!--  <div><button type="button" id="otherSave">另保存到服务器</button></div>--> 
 | 
  <div><button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="allprint">全部打印</button></div> 
 | 
  <div><button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="print">选区打印</button></div> 
 | 
  <div><button type="button" class="layui-btn layui-btn-primary layui-btn-xs btn-edit" id="download">下载</button></div> 
 | 
</div> 
 | 
<div id="luckysheet" style="margin:0px;padding:0px;position:absolute;width:100%;height: 100vh;left: 0px;top: 0px;"></div> 
 | 
<script> 
 | 
  $(function () { 
 | 
    var layer = layui.layer; 
 | 
  
 | 
    //配置项 
 | 
    var options = { 
 | 
      container: 'luckysheet' ,//luckysheet为容器id 
 | 
      title: '查看询价', //工作簿名称 
 | 
      lang: 'zh', //设定表格语言 国际化设置,允许设置表格的语言,支持中文("zh")和英文("en") 
 | 
      allowEdit: true, //是否允许前台编辑 
 | 
      sheetFormulaBar: true, //是否显示公式栏 
 | 
      forceCalculation: true,//强制计算公式 
 | 
      myFolderUrl: '' //左上角<返回按钮的链接 
 | 
    } 
 | 
  
 | 
    let checkDataFile = ""; 
 | 
  
 | 
    if(getUrlParams('id') == false || getUrlParams('id') == undefined){ 
 | 
      //新增 
 | 
      luckysheet.create(options) 
 | 
      $("#luckysheet_info_detail_update").hide() 
 | 
      $("#luckysheet_info_detail_save").hide() 
 | 
      $("#luckysheet_info_detail_title").hide() 
 | 
    }else{ 
 | 
      //修改 
 | 
      $.ajax({ 
 | 
        type:"get", 
 | 
        url: baseUrl + "/priOnline/viewCheck/" + getUrlParams('id') + "/auth", 
 | 
        dataType:"json", 
 | 
        headers: {'token': localStorage.getItem('token')}, 
 | 
        success:function(res) { 
 | 
          if (res.code == 200) { 
 | 
            checkDataFile = res.data.checkDataFile 
 | 
            options.data = unzip(res.data.checkData) 
 | 
            luckysheet.create(options) 
 | 
            $("#luckysheet_info_detail_update").hide() 
 | 
            $("#luckysheet_info_detail_save").hide() 
 | 
            $("#luckysheet_info_detail_title").hide() 
 | 
          }else { 
 | 
            layer.msg(res.msg,{time:1000}) 
 | 
          } 
 | 
        } 
 | 
      }); 
 | 
  
 | 
    } 
 | 
  
 | 
    $("#export").on("click",() => { 
 | 
      console.log('export') 
 | 
      exportExcel(luckysheet.getluckysheetfile()).then((e) => { 
 | 
        saveFile(e,'file'); 
 | 
      }) 
 | 
    }) 
 | 
  
 | 
    //保存到服务器 
 | 
    $("#save").on("click",() => { 
 | 
      if(getUrlParams('id') == false || getUrlParams('id') == undefined){ 
 | 
        //新增 
 | 
        $.ajax({ 
 | 
          url: baseUrl + "/priOnline/add/auth", 
 | 
          headers: {'token': localStorage.getItem('token')}, 
 | 
          data: JSON.stringify({ 
 | 
            title: luckysheet.toJson().title, 
 | 
            sheetData: zip(luckysheet.getAllSheets()), 
 | 
            itemId: getUrlParams('item_id'), 
 | 
            priId: getUrlParams('pri_id') 
 | 
          }), 
 | 
          method: 'POST', 
 | 
          dataType: "json", 
 | 
          contentType:'application/json;charset=UTF-8', 
 | 
          success: function (res) { 
 | 
            if (res.code == 200) { 
 | 
              layer.msg('保存成功',{time:1000},() => { 
 | 
                parent.location.reload() 
 | 
              }) 
 | 
            }else{ 
 | 
              layer.msg(res.msg,{time:1000}) 
 | 
            } 
 | 
          } 
 | 
        }) 
 | 
      }else { 
 | 
        //修改 
 | 
        $.ajax({ 
 | 
          url: baseUrl + "/priOnline/update/auth", 
 | 
          headers: {'token': localStorage.getItem('token')}, 
 | 
          data: JSON.stringify({ 
 | 
            id: getUrlParams('id'), 
 | 
            title: luckysheet.toJson().title, 
 | 
            sheetData: zip(luckysheet.getAllSheets()) 
 | 
          }), 
 | 
          method: 'POST', 
 | 
          dataType: "json", 
 | 
          contentType:'application/json;charset=UTF-8', 
 | 
          success: function (res) { 
 | 
            if (res.code == 200) { 
 | 
              layer.msg('保存成功',{time:1000},() => { 
 | 
                parent.location.reload() 
 | 
              }) 
 | 
            }else{ 
 | 
              layer.msg(res.msg,{time:1000}) 
 | 
            } 
 | 
          } 
 | 
        }) 
 | 
      } 
 | 
    }) 
 | 
  
 | 
    $("#download").on("click",() => { 
 | 
      window.open(baseUrl + "/priOnline/checkDataDownload/" +checkDataFile) 
 | 
    }) 
 | 
  
 | 
  }) 
 | 
  
 | 
  $("#allprint").on("click",() => { 
 | 
    printExcel() 
 | 
  }) 
 | 
  
 | 
  $("#print").on("click",() => { 
 | 
    let src = luckysheet.getScreenshot(); // 生成base64图片 
 | 
    const style = '@page {margin:0 10mm};' 
 | 
    printJS({ 
 | 
      printable: src, 
 | 
      type: 'image', 
 | 
      style: style 
 | 
    }) // Print.js插件 
 | 
  }) 
 | 
  
 | 
  // 获取表格中包含内容的row,column 
 | 
  function getExcelRowColumn() { 
 | 
    const sheetData = luckysheet.getSheetData(); 
 | 
    let objRowColumn = { 
 | 
      row: [null, null], //行 
 | 
      column: [null, null], //列 
 | 
    }; 
 | 
    sheetData.forEach((item, index) => { 
 | 
      //行数 
 | 
      item.forEach((it, itemIndex) => { 
 | 
        if (it !== null) { 
 | 
          if (objRowColumn.row[0] == null) objRowColumn.row[0] = index; // row第一位 
 | 
          objRowColumn.row[1] = index; //row第二位 
 | 
          if (objRowColumn.column[0] == null) 
 | 
            objRowColumn.column[0] = itemIndex; //column第一位 
 | 
          objRowColumn.column[1] = itemIndex; //column第二位 
 | 
        } 
 | 
      }); 
 | 
    }); 
 | 
    return objRowColumn; 
 | 
  } 
 | 
  
 | 
  function printExcel() { 
 | 
    let RowColumn = this.getExcelRowColumn() // 获取有值的行和列 
 | 
    RowColumn.column[0] = 0 //因需要打印左边的边框,需重新设置 
 | 
    luckysheet.setRangeShow(RowColumn) // 进行选区操作 
 | 
    let src = luckysheet.getScreenshot(); // 生成base64图片 
 | 
    const style = '@page {margin:0 10mm};' 
 | 
    printJS({ 
 | 
      printable: src, 
 | 
      type: 'image', 
 | 
      style: style 
 | 
    }) // Print.js插件 
 | 
  } 
 | 
  
 | 
  function getUrlParams(name) { 
 | 
    var url = window.location.search; 
 | 
    if (url.indexOf('?') == -1) { return false; } 
 | 
    url = url.substr(1); 
 | 
    url = url.split('&'); 
 | 
    var name = name || ''; 
 | 
    var nameres; 
 | 
    for (var i = 0; i < url.length; i++) { 
 | 
      var info = url[i].split('='); 
 | 
      var obj = {}; 
 | 
      obj[info[0]] = decodeURI(info[1]); 
 | 
      url[i] = obj; 
 | 
    } 
 | 
    if (name) { 
 | 
      for (var i = 0; i < url.length; i++) { 
 | 
        for (var key in url[i]) { 
 | 
          if (key == name) { 
 | 
            nameres = url[i][key]; 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } else { 
 | 
      nameres = url; 
 | 
    } 
 | 
    return nameres; 
 | 
  } 
 | 
  
 | 
  // 压缩 
 | 
  function zip(data) { 
 | 
    if (!data) return data 
 | 
    // 判断数据是否需要转为JSON 
 | 
    const dataJson = typeof data !== 'string' && typeof data !== 'number' ? JSON.stringify(data) : data 
 | 
  
 | 
    // 使用Base64.encode处理字符编码,兼容中文 
 | 
    const str = Base64.encode(dataJson) 
 | 
    let binaryString = pako.gzip(str); 
 | 
    let arr = Array.from(binaryString); 
 | 
    let s = ""; 
 | 
    arr.forEach((item, index) => { 
 | 
      s += String.fromCharCode(item) 
 | 
    }) 
 | 
    return btoa(s) 
 | 
  } 
 | 
  
 | 
  // 解压 
 | 
  function unzip(b64Data) { 
 | 
    let strData = atob(b64Data); 
 | 
    let charData = strData.split('').map(function (x) { 
 | 
      return x.charCodeAt(0); 
 | 
    }); 
 | 
    let binData = new Uint8Array(charData); 
 | 
    let data = pako.ungzip(binData); 
 | 
  
 | 
    // ↓切片处理数据,防止内存溢出报错↓ 
 | 
    let str = ''; 
 | 
    const chunk = 8 * 1024 
 | 
    let i; 
 | 
    for (i = 0; i < data.length / chunk; i++) { 
 | 
      str += String.fromCharCode.apply(null, data.slice(i * chunk, (i + 1) * chunk)); 
 | 
    } 
 | 
    str += String.fromCharCode.apply(null, data.slice(i * chunk)); 
 | 
    // ↑切片处理数据,防止内存溢出报错↑ 
 | 
  
 | 
    const unzipStr = Base64.decode(str); 
 | 
    let result = '' 
 | 
  
 | 
    // 对象或数组进行JSON转换 
 | 
    try { 
 | 
      result = JSON.parse(unzipStr) 
 | 
    } catch (error) { 
 | 
      if (/Unexpected token o in JSON at position 0/.test(error)) { 
 | 
        // 如果没有转换成功,代表值为基本数据,直接赋值 
 | 
        result = unzipStr 
 | 
      } 
 | 
    } 
 | 
    return result 
 | 
  } 
 | 
</script> 
 | 
</body> 
 | 
</html> 
 |