vue实现前端Excel分页显示

直接上步骤。。。。

  1. 搭建vue项目 (这个不赘述)
  2. npm install vue-xlsx-table --save
  3. 编辑main.js(代码如下)

import vueXlsxTable from 'vue-xlsx-table'

Vue.use(vueXlsxTable, {rABS: false});

4.使用vue-xlsx-table标签

            <vue-xlsx-table class="input-salary" @on-select-file="handleSelectedFile">
                上传
            </vue-xlsx-table>

5.创建方法

参考https://www.npmjs.com/package/vue-xlsx-table

**问题来了

“convertedData”数据怎么解析

下面是数据

  • 看结构是可以看到右body和header属性

  • 那就直接获取
                 //获取excel主干信息
                let body=convertedData.body;
                console.log(convertedData);
                // 获取excel的头部信息
                let headers = convertedData.header;
  • 下面贴出分页完整代码(还有根据年月实现上传下载还没做完,可以自行优化)
<style lang="less">
    @import 'input-salary.less';
</style>
<template>
    <div id="salary" class="salary">
        <div class="input-salary">
            <!-- 分类类型 -->
            <Select v-model="searchValue.years" style="width:100px" placeholder="选择年份">
                <Option v-for="item in years" :value="item" :key="item">{{ item }}</Option>
            </Select>
            <!-- 分类类型 -->
            <Select v-model="searchValue.month" style="width:100px" placeholder="选择月份">
                <Option v-for="item in months" :value="item" :key="item">{{ item}}</Option>
            </Select>
            <Button class="queryButton" type="primary" >查询</Button>
            <vue-xlsx-table class="input-salary" @on-select-file="handleSelectedFile">
                上传
            </vue-xlsx-table>
        </div>
        <div class="user-list">
            <Table :columns="userListColumns"  border :data="salaryList" :loading="salaryListLoading"></Table>
        </div>


        <div class="page-div">
            <Page class="page"
                  :current="pageNum"
                  :page-size="pageSize"
                  :total="totalElements"
                  placement="top"
                  show-sizer
                  show-elevator
                  show-total
                  @on-change="changePage"
                  @on-page-size-change="changePageSize"></Page>
        </div>
    </div>

</template>


<script>
    export default {
        name: 'salary',
        data(){
            return{
                // 查询条件
                searchValue: {
                    month: '',
                    years: ''
                },
                minYears:2000,//起始年份
                maxYears:new Date().getFullYear(),//目前年份
                // 年选择器参数
                years:[],
                // 月选择器参数
                months:[1,2,3,4,5,6,7,8,9,10,11,12],
                //当前页表格数据容器
                salaryList: [],
                //当前页临时表格容器
                pageList:[],
                //完整表格数据
                excelList:[],
                salaryListLoading: true,
                userListColumns:[

                ],

                // 分页参数
                pageNum: 1,
                pageSize: 10,
                totalElements: 0,
            }

        },

        methods: {

            //获取年份区间对象
            getFullYears() {
                for (let i = this.minYears; i <= this.maxYears; i++) {
                    this.years.push(i);
                }
            },
            handleSelectedFile (convertedData) {
                this.salaryListLoading = false;
                //还原值
                this.excelList = [];
                this.userListColumns = [];
                this.salaryList = [];
                console.log(this.excelList);
                //获取excel主干信息
                let body=convertedData.body;
                console.log(convertedData);
                // 获取excel的头部信息
                let headers = convertedData.header;
                //给userListColumns赋值
                headers.forEach((item)=>{
                    var a = {title: '身份',align: 'center', key: 'role',};
                    a.key = item;
                    a.title = item;
                    this.userListColumns.push(a)
                })
                //只获取完整表数据
                this.excelList = body;
                // 获取总条数
                this.totalElements =this.excelList.length ;
                console.log(this.totalElements);
                this.change();
                //给当前页赋值
                this.salaryList = this.pageList;
                //临时容器清空
                this.pageList=[];
            },

            // 分页事件
            change(){
                //上行
                let a = this.pageSize*this.pageNum;
                //下行
                let b = this.pageSize*(this.pageNum)-this.pageSize;
                this.excelList.forEach((item,index)=> {
                    if (b<=index&&index<a){
                        this.pageList.push(item);
                    }
                        return;
                });
            },

            changePage (index) {
                this.salaryListLoading= false;
                this.pageNum = index;
                this.pageList = [];
                this.change();
                this.salaryList=this.pageList;
                this.pageList=[];
            },
            changePageSize (val) {
                this.pageSize = val;
                this.pageNum = 1;
                this.totalElements = ((this.excelList-1)/this.pageSize+1);
                this.pageList = [];
                this.change();
                this.salaryList=this.pageList;
                this.pageList=[];
            },
        },

        created () {
            this.getFullYears();
        },
    }
</script>
  • css样式
.salary{
    .page-div {
        position: relative;
        .page {
            right: 0;
            position: absolute;
            margin: 10px 20px 20px 0
        }
    }
    .queryButton {
        margin-left: 8px;
    }

    .input-salary {
        margin-left: 8px;
    }


}
  • 效果图

(json数据都有了,可以做传输到后台入库)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值