FileManage/web/src/components/Pagination/page.vue

134 lines
3.7 KiB
Vue
Raw Normal View History

2025-01-10 14:16:18 +08:00
<template>
<div style="display: flex;display: -webkit-flex; align-items: center;-webkit-align-items: center;">
<div :style="{ fontSize: appStore.size === 'default' ? '14px' : '16px' }" style="display: flex;display: -webkit-flex;align-items: center;-webkit-align-items: center;">
{{ total }}</div>
<el-select @change="changesize" v-model="pcode" filterable class="product-input"
@keyup.enter="changeSize" allow-create style="margin-left: 10px;width: 80px;">
<el-option v-for="(item, index) in arr_product" :key="index" :label="item.lable" :value="item.value" />
</el-select>
<div
:style="{ fontSize: appStore.size === 'default' ? '14px' : '16px' }" style="margin-left:10px;display: flex;display: -webkit-flex;align-items: center; -webkit-align-items: center;">
<div>/</div>
</div>
<el-pagination style="margin-left: 10px;" background layout="prev, pager, next" :total="total"
v-model:current-page="currentPage" v-model:page-size="pageSize" @current-change="pagechange" />
<div
style="display: flex; display: -webkit-flex; align-items: center;-webkit-align-items: center; margin-left: 10px; " :style="{ fontSize: appStore.size === 'default' ? '14px' : '16px' }">
<div>前往</div><el-input v-model="inputgo" style="width:40px;margin-left:5px ; " @blur="sizechange($event)"
@keyup.enter="sizechange($event)" />
<div style="margin-left:5px ; "></div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, PropType, defineEmits, computed ,onMounted} from 'vue'
import { ElMessage } from 'element-plus'
import { useAppStore } from '@/store/modules/app';
const appStore = useAppStore();
const props = defineProps({
total: {
required: true,
type: Number as PropType<number>,
default: 0
},
size: {
type: Number,
default: 1
},
current: {
type: Number,
default: 20
},
});
const pcode = ref(10)
const inputgo = ref()
const arr_product = ref([
{
lable: 10,
value: 10
},
{
lable: 20,
value: 20
},
{
lable: 30,
value: 30
},
{
lable: 40,
value: 40
}, {
lable: 50,
value: 50
}, {
lable: 100,
value: 100
}, {
lable: 300,
value: 300
}
])
const emit = defineEmits(['update:current', 'update:size', 'pagination']);
const currentPage = computed<number | undefined>({
get: () => props.current,
set: value => {
emit('update:current', value);
}
});
const pageSize = computed<number | undefined>({
get() {
return props.size;
},
set(val) {
emit('update:size', val);
}
});
function changesize(val: any) {
if (val.length !== 0) {
pcode.value = val
emit('update:size', val);
emit('pagination');
}
}
function changeSize(event: any) {
if (event.target.value.length !== 0) {
pcode.value = event.target.value
emit('update:size', event.target.value);
emit('pagination');
}
}
function pagechange(val: any) {
emit('update:current', val);
emit('pagination');
}
function sizechange(event: any) {
if (event.target.value.length !== 0) {
if (event.target.value > Math.ceil(props.total / props.size) ) {
ElMessage({
message: '请输入正确的页数',
type: 'warning',
})
}else{
emit('update:current', event.target.value);
emit('pagination');
}
}
}
onMounted(()=>{
pcode.value = props.size
})
</script>
<style scoped>
</style>