vue2手机端前端(mint-ui,分页查询 loadMore)页面直接导出到excel

<template>
    <!-- 订单看板 -->
    <div>
        <mt-navbar v-model="selected" style="border-bottom: solid 1px #EFEFEF;">
            <mt-tab-item id="1" @click.native="queryOrderBoardDetails(selected,'首次')">昨日受理量</mt-tab-item>
            <mt-tab-item id="2" @click.native="queryOrderBoardDetails(selected,'首次')">总受理量</mt-tab-item>
        </mt-navbar>

        <mt-tab-container v-model="selected">
            <mt-tab-container-item id="1">
                <div class="cust-item" v-for="(item,index) in list" :key="index">
                    <!-- 第一行 -->
                    <div class="item-phone">
                        订单号:{{item.orderNo}}
                        <div style="float: right" class="item-area">
                           {{item.createTimeStr}} 
                        </div>
                    </div>
                    <!-- 第二行 -->
                    <div class="item-phone">
                        商品名:{{item.offerName}}
                    </div>
                    <!-- 第三行 -->
                    <div class="item-area" style="margin-top: 5px">
                        {{item.khxm}}({{item.phone}})
                        <div style="float: right"  v-if="accountType == 1" class="item-area">
                           店员:{{item.clerkName}}
                        </div>
                    </div>
                    <!-- 第四行 -->
                    <div class="item-area"  v-if="accountType == 3">
                        店员:{{item.clerkName}}({{item.storeName}})
                    </div>
                </div>
            </mt-tab-container-item>

            <mt-tab-container-item id="2" v-infinite-scroll="loadMore"
                    infinite-scroll-disabled="loading"
                    :infinite-scroll-immediate-check="true"
                    infinite-scroll-distance="10">
                <div class="cust-item" v-for="(item,index) in list" :key="index">
                    <!-- 第一行 -->
                    <div class="item-phone">
                        订单号:{{item.orderNo}}
                        <div style="float: right" class="item-area">
                           {{item.createTimeStr}} 
                        </div>
                    </div>
                    <!-- 第二行 -->
                    <div class="item-phone">
                        商品名:{{item.offerName}}
                    </div>
                    <!-- 第三行 -->
                    <div class="item-area" style="margin-top: 5px">
                        {{item.khxm}}({{item.phone}})
                        <div style="float: right"  v-if="accountType == 1" class="item-area">
                           店员:{{item.clerkName}}
                        </div>
                    </div>
                    <!-- 第四行 -->
                    <div style="overflow: hidden;white-space: nowrap;text-overflow:ellipsis;" class="item-area" v-if="accountType == 3">
                        店员:{{item.clerkName}}({{item.storeName}})
                    </div>
                </div>
                <div class="loading" v-if="loading">
                    <span style="margin-left:40%" id="load-text">{{loadText}}</span>
                </div>
            </mt-tab-container-item>
        </mt-tab-container>
    </div>
        

</template>

<script>
    import Vue from "vue";
    import {Navbar, TabItem, Toast} from 'mint-ui';
    import { InfiniteScroll } from 'mint-ui';

    Vue.use(InfiniteScroll);
    Vue.component(Navbar.name, Navbar);
    Vue.component(TabItem.name, TabItem);

    export default {
        name: "customerBoard",
        mounted(){
            this.queryOrderBoardDetails(this.selected,'首次');
            this.accountType = sessionStorage.getItem("accountType");
        },
        methods: {
            queryOrderBoardDetails(selectType,way){
                console.log('selectType:',selectType)
                console.log('way:',way)
                let that = this;
                if(selectType == 1){
                    this.param.flag = 1
                }
                if(selectType == 2){
                    this.param.flag = 0
                }
                if(way != '无限加载'){
                    this.param.pageIndex = 1
                    this.list = [];
                }
                this.loadText = '正在加载...'
                this.$api.queryOrderBoardDetails(
                {
                    queryType: selectType,
                    flag:this.param.flag,
                    page:this.param.pageIndex,
                    size:this.param.pageSize
                },
                res=>{
                    console.log(res,'list');
                    if(res.retCode == this.$api.REQ_SUCCESS_GET){

                        if(selectType == 2){
                            let data = res.body.tfOrderInfo
                            if(!data){data = []}
                            // 上次list的长度
                            let len = this.list.length
                            // 拼接数据
                            this.list = this.list.concat(data)
                            if (data && data.length == 0 && !len) {
                                this.loadText = '没有找到相关数据'
                            } else if (data && data.length < 10) {
                                this.loadText = '暂无更多数据'
                            } else {
                                this.loading = false
                            }
                        }else{
                            this.list = [];
                            this.list = res.body.tfOrderInfo
                        }
                        
                        
                    }else{
                        Toast("查询订单看板详情数据失败");
                    }
                    this.loading = false
                });
            },
            loadMore () { 
                this.loading = true
                this.param.pageIndex += 1
                if(this.selected == 2){
                    this.queryOrderBoardDetails(this.selected,'无限加载')
                }
                
            }
        },
        data(){
            return {
                list:[],
                param: {
                    flag:0,
                    pageIndex: 1,
                    pageSize: 20
                },
                loadText:'正在加载...',
                loading: true, // 加载更多中
                accountType:'',
                selected: this.$route.query.type,
                way:'',
                
            }
        },
    }
</script>

<style scoped>
    .cust-item{
        width: 100%;
        border-bottom: solid 1px #EFEFEF;
        padding: 5px 10px;
    }
    .cust-item>.item-phone{
        font-size: 14px;
        color: #666;
    }
    .cust-item>.item-area{
        font-size: 12px;
        color: #999;
        margin-top: 2px;
    }
    .cust-item>.item-phone>.item-area{
        font-size: 12px;
        color: #999;
        margin-top: 2px;
    }
</style>

页面直接导出到excel

 https://blog.csdn.net/m0_46678928/article/details/123843863

<!-- 导入厅店有错误信息后的弹框 -->
        <el-dialog :title="errTitle" v-model="storeImportErrMsg" width="70%" @close="emptyStoreImportErrMsg">
            <el-button round type="danger" style="float:right;margin-buttom: 20px" @click="exportExcel()">请及时导出数据
            </el-button>
            <el-table :data="storeImportErrMsgList" height="565" stripe="true" id="staTable"
                      :cell-style="{padding: '2px 0'}" border class="table" ref="multipleTable" header-cell-class-name="table-header" @selection-change="selectChangesStore">
                <el-table-column prop="errMsg" label="错误信息"  align="left">
                    <template #default="scope">{{ scope.row.errMsg }}</template>
                </el-table-column>
            </el-table>
            <template #footer>
                <span class="dialog-footer">
                    <el-button type="primary" @click="emptyStoreImportErrMsg">关 闭</el-button>
                </span>
            </template>
        </el-dialog>
exportExcel:function(){
                let tables = document.querySelector("#staTable");
                let xlsxParam = {raw: true};
                var wb = this.$xlsx.utils.table_to_book(tables, xlsxParam);
                var wbout = this.$xlsx.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
                try {
                    const fileName = '厅店导入-错误信息';
                    this.$fileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), fileName + '.xlsx')
                } catch (e) { if (typeof console !== 'undefined') console.log(e, wbout) }
                return wbout

            },

 

 

 

posted @ 2022-04-14 16:30  梦幻&浮云%  阅读(227)  评论(0编辑  收藏  举报