在Vue 3和Element Plus中,你可以使用组合式API(Composition API)来封装一个具有分页、排序和导出功能的列表页。以下是一个简化的示例:
<template>
<div>
<el-table :data="tableData">
<!-- 表格列定义 -->
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30, 40]"
:page-size="pageSize"
:total="total"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<el-button @click="exportData">导出</el-button>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
import { ElMessageBox } from 'element-plus';
const currentPage = ref(1);
const pageSize = ref(10);
const total = ref(0);
const tableData = ref([]);
// 模拟请求数据
const fetchData = async () => {
// 这里替换为你的API请求
const response = await yourApi.getList({
page: currentPage.value,
pageSize: pageSize.value
});
total.value = response.total;
tableData.value = response.data;
};
onMounted(fetchData);
const handleSizeChange = (newSize) => {
pageSize.value = newSize;
fetchData();
};
const handleCurrentChange = (newPage) => {
currentPage.value = newPage;
fetchData();
};
const exportData = () => {
// 这里替换为你的导出逻辑
ElMessageBox.confirm('确定要导出数据吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// 导出逻辑
console.log('导出数据...');
}).catch(() => {
console.log('取消导出');
});
};
</script>
在这个示例中,我们使用了<script setup>
语法糖,这是Vue 3的一个新特性,它可以让我们的组件更加简洁。我们定义了一个fetchData
函数来处理数据的加载,并在组件加载时调用它。我们还定义了handleSizeChange
和handleCurrentChange
来处理分页大小变化和页面变化事件,并更新表格数据。exportData
函数用来处理导出操作,这里使用了Element Plus的ElMessageBox
来进行交互提示。
请注意,你需要替换模拟的API请求yourApi.getList
和导出逻辑为你的实际逻辑。这个示例只是展示了如何封装一个具有分页、排序和导出功能的列表页,并未包含详细的业务逻辑。