<template>
    <div :class="{'hidden':hidden}" class="pagination-container">
        <el-row class="pagination-row">
            <el-col :xs="20" :sm="20" :md="20" :lg="16" :xl="12">
                <el-pagination
                    :background="background"
                    :current-page.sync="currentPage"
                    :page-size.sync="pageSize"
                    :layout="layout"
                    :page-sizes="pageSizes"
                    small
                    ref="pagination"
                    :total="total"
                    v-bind="$attrs"
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
                />
            </el-col>
            <el-col :span="4" class="jump-button" v-show="isMobile">
                <el-button type="primary" @click="onJump">跳转</el-button>
            </el-col>
        </el-row>
    </div>
</template>

<script>
import { scrollTo } from "@/utils/scroll-to";

const { body } = document;
export default {
    name: "Pagination",
    data() {
        return {
            screenWidth: document.body.clientWidth,
            /* isMobile: false */
        };
    },
    props: {
        total: {
            required: true,
            type: Number
        },
        page: {
            type: Number,
            default: 1
        },
        limit: {
            type: Number,
            default: 20
        },
        pageSizes: {
            type: Array,
            default() {
                return [10, 20, 30, 50];
            }
        },
        layout: {
            type: String,
            default: "total, sizes, prev, pager, next, jumper" //total, sizes, prev, pager, next, jumper
        },
        background: {
            type: Boolean,
            default: true
        },
        autoScroll: {
            type: Boolean,
            default: true
        },
        hidden: {
            type: Boolean,
            default: false
        }
    },
    computed: {
        currentPage: {
            get() {
                return this.page;
            },
            set(val) {
                this.$emit("update:page", val);
            }
        },
        pageSize: {
            get() {
                return this.limit;
            },
            set(val) {
                this.$emit("update:limit", val);
            }
        },
        // 防止在移动端刷新按钮消失
        isMobile: {
            get() {
                if(this.screenWidth < 991) {
                    return true
                } else {
                    return false
                }
            },
            set(val) {
                this.screenWidth
            }
        }
    },
    watch: {
        // 监听浏览器可视窗口变化
        screenWidth(val){
            const IWIDTH = 991;
            if(val - 1 < IWIDTH) {
                this.isMobile = true;
            } else {
                this.isMobile = false;
            }
        }
    },
    mounted() {
        this.getScreenWidth();
    },
    methods: {
        handleSizeChange(val) {
            this.$emit("pagination", { page: this.currentPage, limit: val });
            if (this.autoScroll) {
                scrollTo(0, 800);
            }
        },
        handleCurrentChange(val) {
            this.$emit("pagination", { page: val, limit: this.pageSize });
            if (this.autoScroll) {
                scrollTo(0, 800);
            }
        },
        // 跳转确认
        onJump() {
            let evtObj;
            let elevatorDiv = document.getElementsByClassName(
                "el-pagination__editor"
            );
            if (elevatorDiv && elevatorDiv.length > 0) {
                let pageInput = elevatorDiv[0].getElementsByTagName("input")[0];
                if (window.KeyEvent) {
                    //firefox 浏览器下模拟事件
                    evtObj = document.createEvent("KeyEvents");
                    evtObj.initKeyEvent(
                        "keyup",
                        true,
                        true,
                        window,
                        true,
                        false,
                        false,
                        false,
                        13,
                        0
                    );
                } else {
                    //chrome 浏览器下模拟事件
                    evtObj = document.createEvent("UIEvents");
                    evtObj.initUIEvent("keyup", true, true, window, 1);
                    delete evtObj.keyCode;
                    if (typeof evtObj.keyCode === "undefined") {
                        //为了模拟keycode
                        Object.defineProperty(evtObj, "keyCode", { value: 13 });
                    } else {
                        evtObj.key = String.fromCharCode(13);
                    }
                }
                pageInput.dispatchEvent(evtObj);
            }
        },
        // 获取浏览器可视化宽度
        getScreenWidth() {
            let that = this;
            window.onresize = () => {
                return (() => {
                    window.screenWidth = document.body.clientWidth;
                    that.screenWidth = window.screenWidth;
                })();
            };
        }
    }
};
</script>

<style scoped lang="scss">
.pagination-container {
    width: 100%;
    background: #fff;
    padding: 32px 16px;
}
.pagination-container.hidden {
    display: none;
}
</style>
