<template>
<div class="export-excel-container">
<vab-query-form>
<vab-query-form-left-panel :span="24">
<el-form :inline="true" @submit.native.prevent>
<el-form-item label="文件名">
<el-input v-model="filename" placeholder="请输出要导出文件的名称" />
</el-form-item>
<el-form-item label="文件类型">
<el-select v-model="bookType">
<el-option
v-for="item in options"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item label="自动列宽">
<el-radio-group v-model="autoWidth">
<el-radio :label="true">
是
</el-radio>
<el-radio :label="false">
否
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleDownload">
导出 Excel
</el-button>
</el-form-item>
</el-form>
</vab-query-form-left-panel>
</vab-query-form>
<el-table
v-loading="listLoading"
:data="list"
:element-loading-text="elementLoadingText"
>
<el-table-column show-overflow-tooltip label="序号" width="55">
<template slot-scope="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column show-overflow-tooltip label="标题">
<template slot-scope="scope">
{{ scope.row.title }}
</template>
</el-table-column>
<el-table-column show-overflow-tooltip label="作者">
<template slot-scope="scope">
<el-tag>{{ scope.row.author }}</el-tag>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip label="访问量">
<template slot-scope="scope">
{{ scope.row.pageViews }}
</template>
</el-table-column>
<el-table-column show-overflow-tooltip label="时间">
<template slot-scope="scope">
<span>{{ scope.row.datetime }}</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import { getList } from "@/api/table";
export default {
name: "ExportExcel",
data() {
return {
list: null,
listLoading: true,
downloadLoading: false,
filename: "",
autoWidth: true,
bookType: "xlsx",
elementLoadingText: "正在加载...",
options: ["xlsx", "csv", "txt"],
};
},
created() {
this.fetchData();
},
methods: {
async fetchData() {
this.listLoading = true;
const { data } = await getList();
this.list = data;
this.listLoading = false;
},
async handleDownload() {
this.downloadLoading = true;
const { export_json_to_excel } = await import("@/vendor/ExportExcel");
const tHeader = ["Id", "Title", "Author", "Readings", "Date"];
const filterVal = ["id", "title", "author", "pageViews", "datetime"];
const list = this.list;
const data = this.formatJson(filterVal, list);
export_json_to_excel({
header: tHeader,
data,
filename: this.filename,
autoWidth: this.autoWidth,
bookType: this.bookType,
});
this.downloadLoading = false;
},
formatJson(filterVal, jsonData) {
return jsonData.map((v) =>
filterVal.map((j) => {
return v[j];
})
);
},
},
};
</script>