<!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 + "/priOnline2/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 + "/priOnline2/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 + "/priOnline2/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 + "/priOnline2/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>
|