mirror of
https://github.com/fumiama/paper-manager.git
synced 2026-06-10 19:10:25 +08:00
86 lines
2.2 KiB
TypeScript
86 lines
2.2 KiB
TypeScript
import type { PaginationProps } from '../types/pagination'
|
|
import type { BasicTableProps } from '../types/table'
|
|
import { computed, unref, ref, ComputedRef, watch } from 'vue'
|
|
import { LeftOutlined, RightOutlined } from '@ant-design/icons-vue'
|
|
import { isBoolean } from '/@/utils/is'
|
|
import { PAGE_SIZE, PAGE_SIZE_OPTIONS } from '../const'
|
|
import { useI18n } from '/@/hooks/web/useI18n'
|
|
|
|
interface ItemRender {
|
|
page: number
|
|
type: 'page' | 'prev' | 'next'
|
|
originalElement: any
|
|
}
|
|
|
|
function itemRender({ page, type, originalElement }: ItemRender) {
|
|
if (type === 'prev') {
|
|
return page === 0 ? null : <LeftOutlined />
|
|
} else if (type === 'next') {
|
|
return page === 1 ? null : <RightOutlined />
|
|
}
|
|
return originalElement
|
|
}
|
|
|
|
export function usePagination(refProps: ComputedRef<BasicTableProps>) {
|
|
const { t } = useI18n()
|
|
|
|
const configRef = ref<PaginationProps>({})
|
|
const show = ref(true)
|
|
|
|
watch(
|
|
() => unref(refProps).pagination,
|
|
(pagination) => {
|
|
if (!isBoolean(pagination) && pagination) {
|
|
configRef.value = {
|
|
...unref(configRef),
|
|
...(pagination ?? {}),
|
|
}
|
|
}
|
|
},
|
|
)
|
|
|
|
const getPaginationInfo = computed((): PaginationProps | boolean => {
|
|
const { pagination } = unref(refProps)
|
|
|
|
if (!unref(show) || (isBoolean(pagination) && !pagination)) {
|
|
return false
|
|
}
|
|
|
|
return {
|
|
current: 1,
|
|
pageSize: PAGE_SIZE,
|
|
size: 'small',
|
|
defaultPageSize: PAGE_SIZE,
|
|
showTotal: (total) => t('component.table.total', { total }),
|
|
showSizeChanger: true,
|
|
pageSizeOptions: PAGE_SIZE_OPTIONS,
|
|
itemRender: itemRender,
|
|
showQuickJumper: true,
|
|
...(isBoolean(pagination) ? {} : pagination),
|
|
...unref(configRef),
|
|
}
|
|
})
|
|
|
|
function setPagination(info: Partial<PaginationProps>) {
|
|
const paginationInfo = unref(getPaginationInfo)
|
|
configRef.value = {
|
|
...(!isBoolean(paginationInfo) ? paginationInfo : {}),
|
|
...info,
|
|
}
|
|
}
|
|
|
|
function getPagination() {
|
|
return unref(getPaginationInfo)
|
|
}
|
|
|
|
function getShowPagination() {
|
|
return unref(show)
|
|
}
|
|
|
|
async function setShowPagination(flag: boolean) {
|
|
show.value = flag
|
|
}
|
|
|
|
return { getPagination, getPaginationInfo, setShowPagination, getShowPagination, setPagination }
|
|
}
|