<template> <div class="app-container"> <el-form ref="queryForm" size="small" :inline="true" label-width="68px"> <el-form-item label="模板" prop="name" > <el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange" placeholder="请选择您要查看的模板" > <!-- <el-option label="自设的模板名" value="使用空白模板"></el-option>--> <el-option v-for="item in depss" :key="item.id" :label="item.name" :value="item.id"> </el-option> </el-select> </el-form-item> <el-form-item label="规则" prop="rule"> <el-select v-model="selectedRule" ref="mySelect" size="mini" @change="handleRuleChange" placeholder="请选择您要查看的规则" > <el-option v-for="iem in luckyrule" :key="iem.id" :label="iem.name" :value="iem.id"> </el-option> </el-select> </el-form-item> <el-form-item> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> </el-form-item> </el-form> <el-row :gutter="10" class="mb8"> <!--<el-col :span="1.5"> <el-button type="success" plain icon="el-icon-download" size="mini" @click="dialogVisible = true" >保存</el-button> </el-col>--> <el-col :span="1.5"> <el-button type="warning" plain icon="el-icon-s-promotion" size="mini" @click="handleExport" v-hasPermi="['ruoyi-myexcel:myexcel:export']" >导出</el-button> </el-col> <el-col :span="1.5"> <el-upload type="file" name="file" ref="upload" :before-upload="handleFileChange" action='' :limit="1" :file-list="fileList" :disabled="disableNextButton" > <el-button plain size="mini" icon="el-icon-upload2" type="primary" :disabled="disableNextButton" >导入</el-button> </el-upload> </el-col> </el-row> <!-- luckysheet容器 --> <div id="luckysheet" style="margin: 0px; padding: 0px; position: absolute; width: 100%;height: 1000px; left: 0px; top: 110px; bottom: 0px; z-index: 0" > </div> <!-- 用户添加或修改我的Excel表格的弹框 --> <el-dialog title="是否确认保存?" :visible.sync="dialogVisible" width="30%" style="z-index: 1; " > <el-form label-width="80px" @submit.native.prevent> <el-form-item label="名称" > <!-- onkeypress="if (event.keyCode == 13) return false" //关闭enter的触发事件 --> <el-input v-model="from_name" @keyup.enter.native="handleEnter" placeholder="请输入名称" /> </el-form-item> </el-form> <span slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="submit_from">确 定</el-button> </span> </el-dialog> </div> </template> <script> import $ from 'jquery' /*安装插件 npm install xlsx,安装完成后引入 import XLSX from ‘xlsx’*/ import XLSX from 'xlsx' import {addMyluckyexcel, getMyluckyexcel, listMyluckyexcel,listRule,getRule} from "@/api/ruoyi-myLuckyexcel/myluckyexcel"; import luckysheet from 'luckysheet' import LuckyExcel from 'luckyexcel' //导入库export.js 这个文件是es6的,不能在普通的HTML文件直接引入js文件(虽然都是js文件,但是有区别,具体请百度es6与es5)!需要把es6转es5才可以直接引入使用! import { exportExcel } from '../../../../public/luckysheet/exportExcel' var excelTemp;//模板json var excelTempName;//模板name var excelRule;//规则json export default { name: "Mymodule", data() { return { //弹出页面的表名 from_name : "", // 是否显示弹出层 dialogVisible : false, selectedOption:'', selectedRule:'', luckysheetData: '', fileList:[], disableNextButton: true, luckyrule:[], depss:[], // 表单参数 form: {}, // 查询参数 queryParams: { /*pageNum: 1, pageSize: 10, name: null, content: null*/ }, }; }, created() { //刷新页面时进行的操作 this.getList(); }, mounted() { this.init(); }, methods:{ /** 页面刷新时展示的数据*/ getList() { listMyluckyexcel(this.queryParams).then(response => { this.depss = response.rows; }); listRule(this.queryParams).then(response => { this.luckyrule = response.rows; }); }, /** 下拉选和页面luckysheet绑定 */ handleOptionChange() { //根据选中的下拉选项值获取相应的信息 getMyluckyexcel(this.selectedOption).then(response => { const sysSupplies = response.data; this.disableNextButton = this.selectedOption === ''; this.luckysheetData = sysSupplies.jsons; //将接收到的json存到json_data中 //const json_data = response.data; let json_data = JSON.parse(sysSupplies.jsons); let filename= sysSupplies.name; excelTemp = json_data; excelTempName = filename; luckysheet.create({ container: "luckysheet", // Luckysheet 的容器元素 ID title: filename, // Excel 文件名 data: json_data, // Excel 数据 showinfobar: false, //是否显示顶部名称栏 lang:'zh', }); }).catch(() => { // 处理错误逻辑,这里是一个空的错误处理函数 this.$message.error('查询失败,发生未知错误!'); }); }, //下拉选择规则 handleRuleChange(){ getRule(this.selectedRule).then(response => { const sysRules = response.data; this.disableNextButton = this.selectedOption === ''; //将接收到的json存到json_data中 let json_data = JSON.parse(sysRules.jsons); let filename= sysRules.name; excelRule = json_data; }).catch(() => { // 处理错误逻辑,这里是一个空的错误处理函数 this.$message.error('查询失败,发生未知错误!'); }); }, /** 弹出的确认框关闭 */ /*handleClose(done) { this.$confirm('确认关闭?') .then(_ => { done(); }) .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('请输入表格名称后再进行保存!'); } }, /** 重置按钮操作 */ resetQuery() { //刷新下拉选框内容 this.selectedOption=''; this.disableNextButton=''; this.selectedRule=''; //刷新luckysheet表格 this.init(); }, /** Luckyexcel文档 */ init() { let options = { container: 'luckysheet', //luckysheet为容器id title:'', lang:'zh', showinfobar:false, data:[ { "name": "sheet1", //工作表名称 "color": "", //工作表颜色 "index": 0, //工作表索引 "status": 1, //激活状态 "order": 0, //工作表的下标 "hide": 0,//是否隐藏 "row": 8, //行数 "column": 10, //列数 "defaultRowHeight": 19, //自定义行高 "defaultColWidth": 73, //自定义列宽 "celldata": [ ], //初始化使用的单元格数据 "config": { "merge": { }, //合并单元格 "rowlen":{}, //表格行高 "columnlen":{}, //表格列宽 "rowhidden":{}, //隐藏行 "colhidden":{}, //隐藏列 "borderInfo":{ }, //边框 "authority":{}, //工作表保护 }, }, /*{ "name": "Sheet2", "color": "", "index": 1, "status": 0, "order": 1, "celldata": [], "config": {} }, { "name": "Sheet3", "color": "", "index": 2, "status": 0, "order": 2, "celldata": [], "config": {}, }*/ ] } luckysheet.create(options) }, /** 导入事件*/ handleFileChange(evt) { if (this.disableNextButton) { this.$message.warning("请先选择模板再进行导入!"); return false; // 如果按钮被禁用,提前返回,避免执行下一步操作 } let name = evt.name let suffixArr = name.split('.'), suffix = suffixArr[suffixArr.length - 1] if (suffix != 'xlsx') { this.$message({ message: "上传格式不正确,请上传xls或者xlsx格式", type: "warning" }); return } LuckyExcel.transformExcelToLucky( evt, function(exportJson, luckysheetfile) { if (exportJson.sheets == null || exportJson.sheets.length == 0) { this.$message({ message: "导入失败,请检查上传的文件是否正确", type: "warning" }); return } //1、循环规则 for (var i = 0; i < excelRule.length; i++) { //2、取出导入的数据 for (var j = 0; j < exportJson.sheets[excelRule[i].se].celldata.length; j++) { var c =exportJson.sheets[excelRule[i].se].celldata[j].c; var r =exportJson.sheets[excelRule[i].se].celldata[j].r; if(r == excelRule[i].re && c == excelRule[i].ce){ //3、对数据赋值 excelTemp[excelRule[i].st].data[excelRule[i].rt][excelRule[i].ct].v=exportJson.sheets[excelRule[i].se].celldata[j].v.v } } } //4、保存 exportJson.sheets = excelTemp; luckysheet.destroy() luckysheet.create({ container: 'luckysheet', //luckysheet is the container id title: excelTempName, lang: 'zh', // 设定表格语言 showinfobar: false, data: exportJson.sheets, userInfo: exportJson.info.name.creator }) } ) }, /** 导出设置 */ handleExport(){ exportExcel(luckysheet.getAllSheets(), excelTempName) }, } // 配置项 }; </script>