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