输入......

83 阅读1分钟
import FileSaver from "file-saver";
import XLSX from "xlsx";

<el-button @click="exportExcel('文件名')">导出excel</el-button>

 exportExcel(excelName) {
      // 导出多级表头excel
      try {
        const $e = this.$refs["report-table"].$el;
        let $table = $e.querySelector(".el-table__fixed");
        if (!$table) {
          $table = $e;
        }
        const wb = XLSX.utils.table_to_book($table, { raw: true });
        const wbout = XLSX.write(wb, { bookType: "xlsx", bookSST: true, type: "array" });
        FileSaver.saveAs(new Blob([wbout], { type: "application/octet-stream" }), `${excelName}.xlsx`);
      } catch (e) {
        if (typeof console !== "undefined") console.error(e);
      }
    },

vue自定义指令 输入框防抖 中文输入法输入中情况下不触发接口

/**
 * 按钮防抖自定义指令
 * 防止重复发起远程请求
 *  使用方式 v-debounce="{ event: 'input', fn: handleSearch, delay: 800 }"
 */
  <el-input v-model.trim="keyword" v-debounce="{ event: 'input', fn: handleSearch, delay: 800 }"  placeholder="请输入" />
 
export const debounce = {
  inserted(el, binding) {
    //事件名、执行的函数、延迟时间
    let { event, fn, delay } = binding.value;
    let timer;
    let flag = true; //中文输入法下不触发input事件
    if (event === "input") {
      el.addEventListener("compositionstart", () => {
        flag = false;
      });
      el.addEventListener("compositionend", () => {
        flag = true;
      });
    }
    el.addEventListener(event, () => {
      timer && clearTimeout(timer);
      timer = setTimeout(() => {
        if (flag) fn("debounce");
      }, delay);
    });
  },
};