Commit e803c712 authored by lvzhuangzhuang's avatar lvzhuangzhuang

优化导出

parent f0405184
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form ref="queryForm" size="small" :inline="true" label-width="68px"> <el-form ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="模板" prop="name"> <el-form-item label="模板" prop="name">
<el-select v-model="selectedOption" size="mini" @change="handleOptionChange" placeholder="请选择你要查看的模板" > <el-select v-model="selectedOption" size="mini" @change="handleOptionChange" placeholder="请选择你要查看的模板">
<el-option <el-option
v-for="item in depss" v-for="item in depss"
:key="item.id" :key="item.id"
...@@ -34,22 +34,23 @@ ...@@ -34,22 +34,23 @@
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['ruoyi-myexcel:myexcel:export']" v-hasPermi="['ruoyi-myexcel:myexcel:export']"
>导出</el-button> >导出
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-upload <el-upload
type="file" type="file"
name="file" name="file"
ref="upload" ref="upload"
:before-upload="handleFileChange" :before-upload="importExcel"
action='' action=''
:limit="1" :limit="1"
:file-list="fileList" :file-list="fileList"
> >
<el-button plain size="mini" icon="el-icon-upload2" type="primary">导入</el-button> <el-button plain size="mini" icon="el-icon-upload2" type="primary">导入</el-button>
</el-upload> </el-upload>
</el-col> </el-col>
</el-row> </el-row>
<div <div
id="luckysheet" id="luckysheet"
...@@ -63,9 +64,9 @@ ...@@ -63,9 +64,9 @@
width="30%" width="30%"
style="z-index: 1; " style="z-index: 1; "
:before-close="handleClose"> :before-close="handleClose">
<el-form label-width="80px" @submit.native.prevent> <el-form label-width="80px" @submit.native.prevent>
<el-form-item label="名称" > <el-form-item label="名称">
<el-input v-model="from_name" @keyup.enter.native="handleEnter" placeholder="请输入名称" /> <el-input v-model="from_name" @keyup.enter.native="handleEnter" placeholder="请输入名称"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
...@@ -77,353 +78,293 @@ ...@@ -77,353 +78,293 @@
</template> </template>
<script> <script>
import $ from 'jquery' import $ from 'jquery'
/*安装插件 npm install xlsx,安装完成后引入 import XLSX from ‘xlsx’*/ /*安装插件 npm install xlsx,安装完成后引入 import XLSX from ‘xlsx’*/
import XLSX from 'xlsx' import XLSX from 'xlsx'
import {addMyluckyexcel, getMyluckyexcel, listMyluckyexcel} from "@/api/ruoyi-myLuckyexcel/myluckyexcel"; import { addMyluckyexcel, getMyluckyexcel, listMyluckyexcel } from '@/api/ruoyi-myLuckyexcel/myluckyexcel'
import luckysheet from 'luckysheet' import luckysheet from 'luckysheet'
import LuckyExcel from 'luckyexcel' import LuckyExcel from 'luckyexcel'
//导入库export.js 这个文件是es6的,不能在普通的HTML文件直接引入js文件(虽然都是js文件,但是有区别,具体请百度es6与es5)!需要把es6转es5才可以直接引入使用! //导入库export.js 这个文件是es6的,不能在普通的HTML文件直接引入js文件(虽然都是js文件,但是有区别,具体请百度es6与es5)!需要把es6转es5才可以直接引入使用!
import { exportExcel } from '../../../../public/luckysheet/exportExcel' import { exportExcel } from '../../../../public/luckysheet/exportExcel'
export default { var exceltemp;
name: "Mymodule", export default {
data() { name: 'Mymodule',
return { data() {
//弹出页面的表名 return {
from_name : "", //弹出页面的表名
// 是否显示弹出层 from_name: '',
dialogVisible : false, // 是否显示弹出层
selectedOption:'', dialogVisible: false,
luckysheetData: '', selectedOption: '',
fileList:[], luckysheetData: '',
depss:[], fileList: [],
// 表单参数 depss: [],
form: {}, // 表单参数
// 查询参数 form: {},
queryParams: { // 查询参数
pageNum: 1, queryParams: {
pageSize: 10, pageNum: 1,
name: null, pageSize: 10,
content: null name: null,
}, content: null
}; }
}, }
created() {
//刷新页面时进行的操作
this.getList();
},
mounted() {
this.init();
},
methods:{
/** 页面刷新时展示的数据*/
getList() {
listMyluckyexcel(this.queryParams).then(response => {
this.depss = response.rows;
});
}, },
/** 下拉选和页面luckysheet绑定 */ created() {
handleOptionChange() { //刷新页面时进行的操作
//根据选中的下拉选项值获取相应的信息 this.getList()
getMyluckyexcel(this.selectedOption).then(response => {
const sysSupplies = response.data;
this.luckysheetData = sysSupplies.jsons;
//将接收到的json存到json_data中
//const json_data = response.data;
let json_data = JSON.parse(sysSupplies.jsons);
let filename= sysSupplies.name;
luckysheet.create({
container: "luckysheet", // Luckysheet 的容器元素 ID
title: filename, // Excel 文件名
data: json_data, // Excel 数据
showinfobar: false, //是否显示顶部名称栏
lang:'zh',
});
}).catch(() => {
// 处理错误逻辑,这里是一个空的错误处理函数
this.$message.error('暂停失败,发生未知错误!');
});
}, },
/** 导出设置 */ mounted() {
handleExport(){ this.init()
var date =new Date().getTime();
exportExcel(luckysheet.getAllSheets(), '导出'+date)
}, },
/** 弹出的确认框关闭 */ methods: {
handleClose(done) { /** 页面刷新时展示的数据*/
this.$confirm('确认关闭?') getList() {
.then(_ => { listMyluckyexcel(this.queryParams).then(response => {
done(); this.depss = response.rows
}) })
.catch(_ => {}); },
}, /** 下拉选和页面luckysheet绑定 */
/** 回车事件和保存提交绑定 */ handleOptionChange() {
handleEnter(event) { //根据选中的下拉选项值获取相应的信息
if (event.keyCode === 13) { getMyluckyexcel(this.selectedOption).then(response => {
event.preventDefault(); // 阻止默认的回车事件
// 触发确定操作
this.submit_from();
}
},
/** 保存到数据库*/
submit_from() {
const name = this.from_name
if(name!=""){
let objsheet = luckysheet.getAllSheets() // 得到表的数据
//LuckyExcel = objsheet // 将表的数据保存本地
let strsheet = JSON.stringify(objsheet)// 对象转化为字符串
const data={name :name,jsons:strsheet};
addMyluckyexcel(data).then(response => {
if(response.code==200){
this.$message({
message: '保存成功', type: 'success'
});
this.dialogVisible=false;
//this.$router.replace({ path: '/' }); //刷新整个页面会出错
//window.location.reload();//也是全局刷新,不合适
this.$router.go(-1);
}else{
this.$message.error('保存失败');
}
});
}else{
this.$message.error('请输入表格名称后再进行保存!');
}
},
/* 重置按钮操作 */
resetQuery() {
luckysheet.destroy()
let options = {
container: 'luckysheet', //luckysheet为容器id
title:'',
lang:'zh',
showinfobar:false,
data:[
{
"name": "sheet1", //工作表名称
"color": "", //工作表颜色
"index": 0, //工作表索引
"status": 1, //激活状态
"order": 0, //工作表的下标
"hide": 0,//是否隐藏
"row": 20, //行数
"column": 15, //列数
"defaultRowHeight": 19, //自定义行高
"defaultColWidth": 73, //自定义列宽
"celldata": [
const sysSupplies = response.data
], //初始化使用的单元格数据 this.luckysheetData = sysSupplies.jsons
"config": {
"merge": {
}, //合并单元格
"rowlen":{}, //表格行高
"columnlen":{}, //表格列宽
"rowhidden":{}, //隐藏行
"colhidden":{}, //隐藏列
"borderInfo":{
}, //边框 //将接收到的json存到json_data中
"authority":{}, //工作表保护 //const json_data = response.data;
let json_data = JSON.parse(sysSupplies.jsons)
exceltemp = json_data;
let filename = sysSupplies.name
}, luckysheet.create({
}, container: 'luckysheet', // Luckysheet 的容器元素 ID
/*{ title: filename, // Excel 文件名
"name": "Sheet2", data: json_data, // Excel 数据
"color": "", showinfobar: false, //是否显示顶部名称栏
"index": 1, lang: 'zh'
"status": 0, })
"order": 1,
"celldata": [],
"config": {}
},
{
"name": "Sheet3",
"color": "",
"index": 2,
"status": 0,
"order": 2,
"celldata": [],
"config": {},
}*/
]
} }).catch(() => {
luckysheet.create(options) // 处理错误逻辑,这里是一个空的错误处理函数
}, this.$message.error('暂停失败,发生未知错误!')
/*// 表单重置 })
reset() { },
this.form = { /** 导出设置 */
id: null, handleExport() {
name: null, var date = new Date().getTime()
description: null exportExcel(luckysheet.getAllSheets(), '导出' + date)
}; },
this.resetForm("form"); /** 弹出的确认框关闭 */
}, handleClose(done) {
/!** 搜索按钮操作 *!/ this.$confirm('确认关闭?')
handleQuery() { .then(_ => {
this.queryParams.pageNum = 1; done()
this.getList(); })
}, .catch(_ => {
})
},
/** 回车事件和保存提交绑定 */
handleEnter(event) {
if (event.keyCode === 13) {
event.preventDefault() // 阻止默认的回车事件
// 触发确定操作
this.submit_from()
}
},
/** 保存到数据库*/
/*submit_from() {
const name = this.from_name
if(name!=""){
let objsheet = luckysheet.getAllSheets() // 得到表的数据
//LuckyExcel = objsheet // 将表的数据保存本地
let strsheet = JSON.stringify(objsheet)// 对象转化为字符串
const data={name :name,jsons:strsheet};
addMyluckyexcel(data).then(response => {
if(response.code==200){
this.$message({
message: '保存成功', type: 'success'
});
this.dialogVisible=false;
//this.$router.replace({ path: '/' }); //刷新整个页面会出错
//window.location.reload();//也是全局刷新,不合适
this.$router.go(-1);
}else{
this.$message.error('保存失败');
}
});
}else{
this.$message.error('请输入表格名称后再进行保存!');
}
// 多选框选中数据 },*/
handleSelectionChange(selection) { /* 重置按钮操作 */
this.ids = selection.map(item => item.id) resetQuery() {
this.single = selection.length!==1 luckysheet.destroy()
this.multiple = !selection.length let options = {
}, container: 'luckysheet', //luckysheet为容器id
/!** 导出按钮操作 *!/ title: '',
handleExport() { lang: 'zh',
this.download('ruoyi-mymodule/mymodule/export', { showinfobar: false,
...this.queryParams data: [
}, `mymodule_${new Date().getTime()}.xlsx`) {
},*/ 'name': 'sheet1', //工作表名称
/** Luckyexcel文档 */ 'color': '', //工作表颜色
init() { 'index': 0, //工作表索引
let options = { 'status': 1, //激活状态
container: 'luckysheet', //luckysheet为容器id 'order': 0, //工作表的下标
title:'', 'hide': 0,//是否隐藏
lang:'zh', 'row': 20, //行数
showinfobar:false, 'column': 15, //列数
data:[ 'defaultRowHeight': 19, //自定义行高
{ 'defaultColWidth': 73, //自定义列宽
"name": "sheet1", //工作表名称 'celldata': [], //初始化使用的单元格数据
"color": "", //工作表颜色 'config': {
"index": 0, //工作表索引 'merge': {}, //合并单元格
"status": 1, //激活状态 'rowlen': {}, //表格行高
"order": 0, //工作表的下标 'columnlen': {}, //表格列宽
"hide": 0,//是否隐藏 'rowhidden': {}, //隐藏行
"row": 20, //行数 'colhidden': {}, //隐藏列
"column": 15, //列数 'borderInfo': {}, //边框
"defaultRowHeight": 19, //自定义行高 'authority': {} //工作表保护
"defaultColWidth": 73, //自定义列宽
"celldata": [
}
}
], //初始化使用的单元格数据 ]
"config": {
"merge": {
}, //合并单元格
"rowlen":{}, //表格行高
"columnlen":{}, //表格列宽
"rowhidden":{}, //隐藏行
"colhidden":{}, //隐藏列
"borderInfo":{
}, //边框 }
"authority":{}, //工作表保护 luckysheet.create(options)
},
}, /** Luckyexcel文档 */
}, init() {
/*{ let options = {
"name": "Sheet2", container: 'luckysheet', //luckysheet为容器id
"color": "", title: '',
"index": 1, lang: 'zh',
"status": 0, showinfobar: false,
"order": 1, data: [
"celldata": [], {
"config": {} 'name': 'sheet1', //工作表名称
}, 'color': '', //工作表颜色
{ 'index': 0, //工作表索引
"name": "Sheet3", 'status': 1, //激活状态
"color": "", 'order': 0, //工作表的下标
"index": 2, 'hide': 0,//是否隐藏
"status": 0, 'row': 20, //行数
"order": 2, 'column': 15, //列数
"celldata": [], 'defaultRowHeight': 19, //自定义行高
"config": {}, 'defaultColWidth': 73, //自定义列宽
}*/ 'celldata': [], //初始化使用的单元格数据
] 'config': {
'merge': {}, //合并单元格
'rowlen': {}, //表格行高
'columnlen': {}, //表格列宽
'rowhidden': {}, //隐藏行
'colhidden': {}, //隐藏列
'borderInfo': {}, //边框
'authority': {} //工作表保护
} }
luckysheet.create(options) }
]
}
luckysheet.create(options)
}, },
Excel(e) { Excel(e) {
let that = this let that = this
// 错误情况判断 // 错误情况判断
const files = e.target.files const files = e.target.files
if (files.length <= 0) { if (files.length <= 0) {
return false; return false
} else if (!/\.(xls|xlsx)$/.test(files[0].name.toLowerCase())) { } else if (!/\.(xls|xlsx)$/.test(files[0].name.toLowerCase())) {
this.$message({ this.$message({
message: "上传格式不正确,请上传xls或者xlsx格式", message: '上传格式不正确,请上传xls或者xlsx格式',
type: "warning" type: 'warning'
});
return false
} else {
that.upload_file = files[0].name
}
// 读取表格
const fileReader = new FileReader()
fileReader.onload = ev => {
try {
const data = ev.target.result;
const workbook = XLSX.read(data, {
type: "binary"
})
// 读取第一张表
const wsname = workbook.SheetNames[0]
const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname])
// 打印 ws 就可以看到读取出的表格数据
console.log(ws)
// 定义一个新数组,存放处理后的表格数据
that.lists = []
ws.forEach(item => {
that.lists.push({
// 对ws进行处理后放进lists内
})
}) })
// 调用方法将lists数组发送给后端
this.submit_form(that.lists)
} catch (e) {
return false return false
} else {
that.upload_file = files[0].name
} }
} // 读取表格
fileReader.readAsBinaryString(files[0]) const fileReader = new FileReader()
}, fileReader.onload = ev => {
/** 导入事件*/ try {
handleFileChange(evt) { const data = ev.target.result
let name = evt.name const workbook = XLSX.read(data, {
let suffixArr = name.split('.'), type: 'binary'
suffix = suffixArr[suffixArr.length - 1] })
if (suffix != 'xlsx') { // 读取第一张表
alert('当前仅支持导入xlsx文件') const wsname = workbook.SheetNames[0]
return const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname])
} // 打印 ws 就可以看到读取出的表格数据
LuckyExcel.transformExcelToLucky( console.log(ws)
evt, // 定义一个新数组,存放处理后的表格数据
function(exportJson, luckysheetfile) { that.lists = []
ws.forEach(item => {
that.lists.push({
// 对ws进行处理后放进lists内
})
})
// 调用方法将lists数组发送给后端
this.submit_form(that.lists)
} catch (e) {
return false
}
}
fileReader.readAsBinaryString(files[0])
},
/** 导入事件*/
importExcel(evt) {
if(this.selectedOption == "" || this.selectedOption == null){
alert('请选择模板!!!')
return
}
let name = evt.name
let suffixArr = name.split('.'),
suffix = suffixArr[suffixArr.length - 1]
if (suffix != 'xlsx') {
alert('当前仅支持导入xlsx文件')
return
}
LuckyExcel.transformExcelToLucky(evt, function(exportJson, luckysheetfile) {
if (exportJson.sheets == null || exportJson.sheets.length == 0) {
alert(
'无法读取excel文件的内容,目前不支持xls文件!'
)
return
}
//根据规则进行excel数据转换
debugger
var s = exceltemp
var sss= exportJson.sheets[0].celldata[0].v.v;
s[0].celldata[0].v.m= sss;
s[0].celldata[0].v.v= sss;
exportJson.sheets=s;
for (var i = 0; i < exceltemp.length; i++) {
if (exportJson.sheets == null || exportJson.sheets.length == 0) {
alert(
'无法读取excel文件的内容,目前不支持xls文件!'
)
return
} }
luckysheet.destroy() luckysheet.destroy()
luckysheet.create({
luckysheet.create({ container: 'luckysheet', //luckysheet is the container id
container: 'luckysheet', //luckysheet is the container id title: exportJson.info.name,
title: exportJson.info.name, lang: 'zh', // 设定表格语言
lang: 'zh', // 设定表格语言 showinfobar: false,
showinfobar: false, data: exportJson.sheets,
data: exportJson.sheets, userInfo: exportJson.info.name.creator
userInfo: exportJson.info.name.creator })
}) }
} )
) }
}, }
}
// 配置项 // 配置项
}; }
</script> </script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment