UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

1 lines 27.2 kB
{"version":3,"file":"index2.mjs","sources":["../../../../../src/components/ivue-page/index.vue"],"sourcesContent":["<template>\r\n <!-- 简洁版 -->\r\n <ul :class=\"simpleWrapperClasses\" v-if=\"simple\">\r\n <!-- 上一页按钮 -->\r\n <li :class=\"prevClasses\" @click=\"handlePrev\">\r\n <slot name=\"prev\">\r\n <ivue-icon>{{ prevIcon }}</ivue-icon>\r\n </slot>\r\n </li>\r\n\r\n <!-- 输入框 -->\r\n <div :class=\"simplePageClasses\">\r\n <!-- 输入框 -->\r\n <input\r\n :class=\"`${prefixCls}-simple-input`\"\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n spellcheck=\"false\"\r\n :value=\"data.currentPage\"\r\n :disabled=\"disabled\"\r\n @keydown=\"handleKeyDown\"\r\n @keyup=\"handleKeyUp\"\r\n />\r\n <!-- 符号 -->\r\n <span :class=\"`${prefixCls}-simple-sign`\">/</span>\r\n <!-- 所有页数 -->\r\n <span>{{ allPages }}</span>\r\n </div>\r\n\r\n <!-- 下一页按钮 -->\r\n <li :class=\"nextClasses\" @click=\"handleNext\">\r\n <slot name=\"next\">\r\n <ivue-icon>{{ nextIcon }}</ivue-icon>\r\n </slot>\r\n </li>\r\n </ul>\r\n <!-- 正常版 -->\r\n <ul :class=\"wrapperClasses\" v-else>\r\n <!-- 数据总条数 -->\r\n <span :class=\"`${prefixCls}-total`\" v-if=\"showTotal\">\r\n <slot name=\"total\">{{ `共 ${total} 条` }}</slot>\r\n </span>\r\n <!-- 上一页按钮 -->\r\n <li :class=\"prevClasses\" @click=\"handlePrev\">\r\n <slot name=\"prev\">\r\n <ivue-icon>{{ prevIcon }}</ivue-icon>\r\n </slot>\r\n </li>\r\n <!-- 第一页 -->\r\n <li :class=\"firstClasses\" @click=\"handleCangePage(1)\">\r\n <span :class=\"itemTextClass\">1</span>\r\n </li>\r\n\r\n <!-- 上一页更多 -->\r\n <li\r\n :class=\"abbreviationClasses\"\r\n v-show=\"data.showPrevMore\"\r\n @click=\"handleFastPrev\"\r\n >\r\n <slot name=\"prevArrow\">\r\n <!-- 箭头 -->\r\n <span class=\"arrow\">\r\n <ivue-icon>chevron_left</ivue-icon>\r\n <ivue-icon>chevron_left</ivue-icon>\r\n </span>\r\n <!-- 缩略号 -->\r\n <ivue-icon class=\"abbreviation\">more_horiz</ivue-icon>\r\n </slot>\r\n </li>\r\n\r\n <!-- 选项 -->\r\n <li\r\n :class=\"{\r\n ...itemClasses,\r\n [`${prefixCls}-item--active`]: item === data.currentPage,\r\n }\"\r\n v-for=\"(item, index) in pagerList\"\r\n :key=\"index\"\r\n @click=\"handleCangePage(item)\"\r\n >\r\n <span :class=\"itemTextClass\">{{ item }}</span>\r\n </li>\r\n\r\n <!-- 下一页更多 -->\r\n <li\r\n :class=\"abbreviationClasses\"\r\n v-show=\"data.showNextMore\"\r\n @click=\"handleFastNext\"\r\n >\r\n <slot name=\"nextArrow\">\r\n <!-- 箭头 -->\r\n <span class=\"arrow\">\r\n <ivue-icon>chevron_right</ivue-icon>\r\n <ivue-icon>chevron_right</ivue-icon>\r\n </span>\r\n <!-- 缩略号 -->\r\n <ivue-icon class=\"abbreviation\">more_horiz</ivue-icon>\r\n </slot>\r\n </li>\r\n\r\n <!-- 最后一页 -->\r\n <li :class=\"lastClasses\" @click=\"handleCangePage(allPages)\">\r\n <span :class=\"itemTextClass\">{{ allPages }}</span>\r\n </li>\r\n\r\n <!-- 下一页按钮 -->\r\n <li :class=\"nextClasses\" @click=\"handleNext\">\r\n <slot name=\"next\">\r\n <ivue-icon>{{ nextIcon }}</ivue-icon>\r\n </slot>\r\n </li>\r\n\r\n <!-- 显示分页 -->\r\n <options\r\n :showSizer=\"showSizer\"\r\n :showElevator=\"showElevator\"\r\n :pageSize=\"pageSize\"\r\n :placement=\"placement\"\r\n :transfer=\"transfer\"\r\n :disabled=\"disabled\"\r\n :pageSizeOpts=\"pageSizeOpts\"\r\n :pageSizeText=\"pageSizeText\"\r\n :elevatorText=\"elevatorText\"\r\n :currentPage=\"data.currentPage\"\r\n :allPages=\"allPages\"\r\n @on-size=\"handleChangeSize\"\r\n @on-page=\"handleChangePage\"\r\n ></options>\r\n </ul>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n defineComponent,\r\n computed,\r\n reactive,\r\n watch,\r\n getCurrentInstance,\r\n} from 'vue';\r\nimport { oneOf } from '../../utils/assist';\r\n\r\nimport IvueIcon from '../ivue-icon/index.vue';\r\nimport Options from './options.vue';\r\n\r\n// type\r\nimport type { Props, Data } from './types/page';\r\n\r\nconst prefixCls = 'ivue-page';\r\n\r\nexport default defineComponent({\r\n name: prefixCls,\r\n emits: [\r\n 'update:modelValue',\r\n 'on-change',\r\n 'on-prev',\r\n 'on-next',\r\n 'on-page-size-change',\r\n ],\r\n props: {\r\n /**\r\n * v-model\r\n *\r\n * @type {Number}\r\n */\r\n modelValue: {\r\n type: Number,\r\n default: 1,\r\n },\r\n /**\r\n * 显示总条数\r\n *\r\n * @type {Boolean}\r\n */\r\n showTotal: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n /**\r\n * 数据总数\r\n *\r\n * @type {Number}\r\n */\r\n total: {\r\n type: Number,\r\n default: 0,\r\n },\r\n /**\r\n * 上一页图标\r\n *\r\n * @type {String}\r\n */\r\n prevIcon: {\r\n type: String,\r\n default: 'keyboard_arrow_left',\r\n },\r\n /**\r\n * 下一页图标\r\n *\r\n * @type {String}\r\n */\r\n nextIcon: {\r\n type: String,\r\n default: 'keyboard_arrow_right',\r\n },\r\n /**\r\n * 是否禁用\r\n *\r\n * @type {Boolean}\r\n */\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n /**\r\n * 每页条数\r\n *\r\n * @type {Number}\r\n */\r\n pageSize: {\r\n type: Number,\r\n default: 10,\r\n },\r\n /**\r\n * 页码按钮的数量,当总页数超过该值时会折叠\r\n * 大于等于 5 且小于等于 21 的奇数\r\n *\r\n * @type {Number}\r\n */\r\n pagerCount: {\r\n type: Number,\r\n validator(value: number) {\r\n return (\r\n (value | 0) === value && value > 4 && value < 22 && value % 2 === 1\r\n );\r\n },\r\n default: 5,\r\n },\r\n /**\r\n * 显示分页,用来改变page-size\r\n *\r\n * @type {Boolean}\r\n */\r\n showSizer: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n /**\r\n * 条数切换弹窗的展开方向,可选值为 bottom 和 top\r\n *\r\n * @type {String}\r\n */\r\n placement: {\r\n type: String,\r\n validator(value: string) {\r\n return oneOf(value, ['top', 'bottom']);\r\n },\r\n default: 'bottom',\r\n },\r\n /**\r\n * 是否将弹层放置于 body 内,在 Tabs、\r\n * 带有 fixed 的 Table 列内使用时,\r\n * 建议添加此属性,它将不受父级样式影响,\r\n * 从而达到更好的效果\r\n *\r\n * @type {Boolean}\r\n */\r\n transfer: {\r\n type: Boolean,\r\n default() {\r\n const global = getCurrentInstance().appContext.config.globalProperties;\r\n\r\n return !global.$IVUE || global.$IVUE.transfer === ''\r\n ? false\r\n : global.$IVUE.transfer;\r\n },\r\n },\r\n /**\r\n * 页数选择选项\r\n *\r\n * @type {Array}\r\n */\r\n pageSizeOpts: {\r\n type: Array,\r\n default: () => [10, 20, 30, 40],\r\n },\r\n /**\r\n * 页数选择文字\r\n *\r\n * @type {Array}\r\n */\r\n pageSizeText: {\r\n type: String,\r\n default: '条/页',\r\n },\r\n /**\r\n * 是否显示电梯\r\n *\r\n * @type {Boolean}\r\n */\r\n showElevator: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n /**\r\n * 电梯文字\r\n *\r\n * @type {Array}\r\n */\r\n elevatorText: {\r\n type: Array,\r\n default: () => ['跳至', '页'],\r\n },\r\n /**\r\n * 是否使用小型分页样式\r\n *\r\n * @type {Boolean}\r\n */\r\n small: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n /**\r\n * 简洁版\r\n *\r\n * @type {Boolean}\r\n */\r\n simple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n setup(props: Props, { slots, emit }) {\r\n // data\r\n const data = reactive<Data>({\r\n // 当前页数\r\n currentPage: props.modelValue,\r\n // 当前每页条数\r\n currentPageSize: props.pageSize,\r\n // 显示更多上一页\r\n showPrevMore: false,\r\n // 显示更多下一页\r\n showNextMore: false,\r\n });\r\n\r\n // 外层样式\r\n const wrapperClasses = computed(() => {\r\n return [\r\n prefixCls,\r\n {\r\n // 是否使用小型分页样式\r\n [`${prefixCls}-small`]: props.small,\r\n },\r\n ];\r\n });\r\n\r\n // 上一页样式\r\n const prevClasses = computed(() => {\r\n return [\r\n `${prefixCls}-prev`,\r\n {\r\n // 选项样式\r\n ...itemClasses.value,\r\n [`${prefixCls}-slot`]: slots.prev,\r\n [`${prefixCls}-disabled`]: data.currentPage === 1 || props.disabled,\r\n },\r\n ];\r\n });\r\n\r\n // 下一页样式\r\n const nextClasses = computed(() => {\r\n return [\r\n `${prefixCls}-next`,\r\n {\r\n // 选项样式\r\n ...itemClasses.value,\r\n [`${prefixCls}-slot`]: slots.next,\r\n [`${prefixCls}-disabled`]:\r\n data.currentPage === allPages.value || props.disabled,\r\n },\r\n ];\r\n });\r\n\r\n // 选项样式\r\n const itemClasses = computed(() => {\r\n return {\r\n [`${prefixCls}-item`]: true,\r\n };\r\n });\r\n\r\n // 选项文字样式\r\n const itemTextClass = computed(() => {\r\n return {\r\n [`${prefixCls}-item--text`]: true,\r\n };\r\n });\r\n\r\n // 第一页按钮\r\n const firstClasses = computed(() => {\r\n return {\r\n // 选项样式\r\n ...itemClasses.value,\r\n // 激活\r\n [`${prefixCls}-item--active`]: data.currentPage === 1,\r\n };\r\n });\r\n\r\n // 最后一页按钮\r\n const lastClasses = computed(() => {\r\n return {\r\n // 选项样式\r\n ...itemClasses.value,\r\n // 激活\r\n [`${prefixCls}-item--active`]: data.currentPage === allPages.value,\r\n };\r\n });\r\n\r\n // 缩略号样式\r\n const abbreviationClasses = computed(() => {\r\n return {\r\n ...itemClasses.value,\r\n [`${prefixCls}-abbreviation`]: true,\r\n };\r\n });\r\n\r\n // 简洁版\r\n const simpleWrapperClasses = computed(() => {\r\n return [prefixCls, `${prefixCls}-simple`];\r\n });\r\n\r\n // 输入框\r\n const simplePageClasses = computed(() => {\r\n return `${prefixCls}-simple-page`;\r\n });\r\n\r\n // 获取所有页数\r\n const allPages = computed(() => {\r\n // 总条数 / 当前每页条数 (100 / 10) = 10\r\n const allPage = Math.ceil(props.total / data.currentPageSize);\r\n\r\n // 默认显示1页\r\n return allPage === 0 ? 1 : allPage;\r\n });\r\n\r\n // 计算选项数量\r\n const pagerList = computed(() => {\r\n // 页码按钮的数量,当总页数超过该值时会折叠\r\n const pagerCount = props.pagerCount;\r\n // 获取一半的数量\r\n // (7 - 1) 偶数 / 2\r\n const halfPagerCount = (pagerCount - 1) / 2;\r\n\r\n // 当前页数\r\n const currentPage = data.currentPage;\r\n\r\n // 显示更多上一页\r\n let showPrevMore = false;\r\n // 显示更多下一页\r\n let showNextMore = false;\r\n\r\n // 总页数超过该值时折叠 10 > 7\r\n if (allPages.value > pagerCount) {\r\n // 当前页数 > (页码按钮的数量 - 获取一半的数量)\r\n if (currentPage > pagerCount - halfPagerCount) {\r\n showPrevMore = true;\r\n }\r\n\r\n // 当前页数 < (总页码数 - 获取一半的数量)\r\n if (currentPage < allPages.value - halfPagerCount) {\r\n showNextMore = true;\r\n }\r\n }\r\n\r\n // 显示更多上一页\r\n data.showPrevMore = showPrevMore;\r\n // 显示更多下一页\r\n data.showNextMore = showNextMore;\r\n\r\n // 页数列表\r\n const array = [];\r\n\r\n // 有更多上一页 没有更多下一页\r\n if (showPrevMore && !showNextMore) {\r\n // 10 - 7 - 2\r\n // 省略号后-开始的页数 总页数 - (页码按钮的数量 - 前后页码(2 = 1, 10))\r\n const startPage = allPages.value - (pagerCount - 2);\r\n\r\n // [5,6,7,8,9] 总页数 10\r\n for (let i = startPage; i < allPages.value; i++) {\r\n array.push(i);\r\n }\r\n }\r\n // 没有更多上一页 有更多下一页\r\n else if (!showPrevMore && showNextMore) {\r\n // [2,3,4,5,6]\r\n // 从第二页开始循环 2..... pagerCount = 页码按钮的数量\r\n for (let i = 2; i < pagerCount; i++) {\r\n array.push(i);\r\n }\r\n }\r\n // 有更多上一页 有更多下一页\r\n else if (showPrevMore && showNextMore) {\r\n // 中间值开始下标 页码按钮的数量 floor(7 / 2 = 3.5) = 3 -1 = 2\r\n const offset = Math.floor(pagerCount / 2) - 1;\r\n\r\n // i = 当前页数(5) - 中间值开始下标(2) = 3\r\n // i <= 当前页数(5) + 中间值开始下标(2) = 7\r\n for (let i = currentPage - offset; i <= currentPage + offset; i++) {\r\n array.push(i);\r\n }\r\n }\r\n // 没有省略号\r\n else {\r\n // 第二页开始循环 循环总页数\r\n for (let i = 2; i < allPages.value; i++) {\r\n array.push(i);\r\n }\r\n }\r\n\r\n return array;\r\n });\r\n\r\n // methods\r\n\r\n // 上一页\r\n const handlePrev = () => {\r\n // 禁用\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n // 当前页数\r\n const current = data.currentPage;\r\n\r\n // 第一页不执行\r\n if (current <= 1) {\r\n return false;\r\n }\r\n\r\n // 当前页数 - 1\r\n const page = current - 1;\r\n\r\n // 改变页数\r\n handleCangePage(page);\r\n\r\n // 切换上一页时触发,返回切换后的页码\r\n emit('on-prev', page);\r\n };\r\n\r\n // 下一页\r\n const handleNext = () => {\r\n // 禁用\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n // 当前页数\r\n const current = data.currentPage;\r\n\r\n // 当前页数 >= 最大页数\r\n if (current >= allPages.value) {\r\n return false;\r\n }\r\n\r\n // 当前页数 + 1\r\n const page = current + 1;\r\n\r\n // 改变页数\r\n handleCangePage(page);\r\n\r\n // 切换上一页时触发,返回切换后的页码\r\n emit('on-next', page);\r\n };\r\n\r\n // 改变页数\r\n const handleCangePage = (page: number) => {\r\n // 禁用\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n // 点击不是当前激活页数\r\n if (data.currentPage != page) {\r\n data.currentPage = page;\r\n\r\n // v-model\r\n emit('update:modelValue', page);\r\n\r\n // 页码改变的回调,返回改变后的页码\r\n emit('on-change', page);\r\n }\r\n };\r\n\r\n // 快速前进上一页\r\n const handleFastPrev = () => {\r\n // 禁用\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n // 前进后的页数 当前页数 - 5\r\n const page = data.currentPage - 5;\r\n\r\n // 前进后的页数 > 0\r\n if (page > 0) {\r\n handleCangePage(page);\r\n }\r\n // 返回第一页\r\n else {\r\n handleCangePage(1);\r\n }\r\n };\r\n\r\n // 快速前进下一页\r\n const handleFastNext = () => {\r\n // 禁用\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n // 前进后的页数 当前页数 + 5\r\n const page = data.currentPage + 5;\r\n\r\n // 前进后的页数 > 总页数\r\n if (page > allPages.value) {\r\n handleCangePage(allPages.value);\r\n }\r\n // 前进后的页数 1 + 5 = 6 前进到弟6页\r\n else {\r\n handleCangePage(page);\r\n }\r\n };\r\n\r\n // 分页条数改变\r\n const handleChangeSize = (value: number) => {\r\n // 禁用\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n // 当前每页条数\r\n data.currentPageSize = value;\r\n\r\n emit('on-page-size-change', value);\r\n\r\n // 重置页数到第一页\r\n handleCangePage(1);\r\n };\r\n\r\n // 页数改变\r\n const handleChangePage = (value: number) => {\r\n // 禁用\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n // 跳转页数\r\n handleCangePage(value);\r\n };\r\n\r\n // 键盘按下\r\n const handleKeyDown = (event) => {\r\n const key = event.keyCode;\r\n\r\n const condition =\r\n (key >= 48 && key <= 57) ||\r\n (key >= 96 && key <= 105) ||\r\n key === 8 ||\r\n key === 37 ||\r\n key === 39;\r\n\r\n if (!condition) {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n // 键盘弹起\r\n const handleKeyUp = ({ keyCode, target }) => {\r\n const key = keyCode;\r\n const value = parseInt(target.value);\r\n\r\n // 上一页\r\n if (key === 38) {\r\n handlePrev();\r\n }\r\n // 下一页\r\n else if (key === 40) {\r\n handleNext();\r\n }\r\n // 确认\r\n else if (key === 13) {\r\n let page = 1;\r\n\r\n // 超过最大页数\r\n if (value > allPages.value) {\r\n page = allPages.value;\r\n }\r\n // 小于0\r\n else if (value <= 0 || !value) {\r\n page = 1;\r\n }\r\n // 当前页数\r\n else {\r\n page = value;\r\n }\r\n\r\n target.value = page;\r\n\r\n // 改变页数\r\n handleCangePage(page);\r\n }\r\n };\r\n\r\n // watch\r\n\r\n // 监听总数\r\n watch(\r\n () => props.total,\r\n (value) => {\r\n // 最大页数 100 / 10 返回大于或等于一个给定数字的最小整数\r\n const maxPage = Math.ceil(value / data.currentPageSize);\r\n\r\n // 最大页数小于当前页数\r\n if (maxPage < data.currentPage) {\r\n data.currentPage = maxPage === 0 ? 1 : maxPage;\r\n }\r\n }\r\n );\r\n\r\n // 监听 v-model\r\n watch(\r\n () => props.modelValue,\r\n (value) => {\r\n data.currentPage = value;\r\n }\r\n );\r\n\r\n // 监听每页条数\r\n watch(\r\n () => props.pageSize,\r\n (value) => {\r\n data.currentPageSize = value;\r\n }\r\n );\r\n\r\n return {\r\n prefixCls,\r\n // data\r\n data,\r\n\r\n // computed\r\n wrapperClasses,\r\n prevClasses,\r\n nextClasses,\r\n itemClasses,\r\n itemTextClass,\r\n firstClasses,\r\n allPages,\r\n lastClasses,\r\n abbreviationClasses,\r\n pagerList,\r\n simpleWrapperClasses,\r\n simplePageClasses,\r\n\r\n // methods\r\n handlePrev,\r\n handleNext,\r\n handleCangePage,\r\n handleFastPrev,\r\n handleFastNext,\r\n handleChangeSize,\r\n handleChangePage,\r\n handleKeyDown,\r\n handleKeyUp,\r\n };\r\n },\r\n components: {\r\n IvueIcon,\r\n Options,\r\n },\r\n});\r\n</script>\r\n"],"names":["_openBlock","_createElementBlock","_Fragment","_createCommentVNode","_normalizeClass","_createElementVNode","_renderSlot","_createVNode","_withCtx","_toDisplayString","_withDirectives","_vShow","_renderList"],"mappings":"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"}