<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>