import FileSaver from "file-saver";
import XLSX from "xlsx";
<el-button @click="exportExcel('文件名')">导出excel</el-button>
exportExcel(excelName) {
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自定义指令 输入框防抖 中文输入法输入中情况下不触发接口
<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;
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);
});
},
};