feat: Study 页面任务列表分页功能
- 新增 currentPage/totalTasks/pageSize 响应式状态 - fetchTasks 支持 page 参数,请求指定页码 - 新增 handlePageChange 切换页码时重置选中状态 - 模板侧边栏底部添加 el-pagination 分页组件 - 分页组件仅当总数超过单页容量时显示
This commit is contained in:
@@ -37,6 +37,9 @@ interface TaskItem {
|
|||||||
const tasks = ref<TaskItem[]>([]);
|
const tasks = ref<TaskItem[]>([]);
|
||||||
const selectedTaskId = ref<number | null>(null);
|
const selectedTaskId = ref<number | null>(null);
|
||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
|
const currentPage = ref(1);
|
||||||
|
const totalTasks = ref(0);
|
||||||
|
const pageSize = 20;
|
||||||
const taskApplications = ref<TaskApplication[]>([]);
|
const taskApplications = ref<TaskApplication[]>([]);
|
||||||
const applicationsLoading = ref(false);
|
const applicationsLoading = ref(false);
|
||||||
const appUrlTitles = ref<Record<number, string>>({});
|
const appUrlTitles = ref<Record<number, string>>({});
|
||||||
@@ -147,11 +150,13 @@ const changeApplicationStatus = async (item: TaskApplication) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const fetchTasks = async () => {
|
const fetchTasks = async (page = currentPage.value) => {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
try {
|
try {
|
||||||
const previousSelectedTaskId = selectedTaskId.value;
|
const previousSelectedTaskId = selectedTaskId.value;
|
||||||
const res = await request.get("/tasks", { pageSize: 100, pageNum: 1 });
|
currentPage.value = page;
|
||||||
|
const res = await request.get("/tasks", { pageSize, pageNum: page });
|
||||||
|
totalTasks.value = res?.data?.total || 0;
|
||||||
tasks.value = (res?.data?.records || []).map((record: any) => ({
|
tasks.value = (res?.data?.records || []).map((record: any) => ({
|
||||||
title: record.taskName,
|
title: record.taskName,
|
||||||
description: record.taskDescription || "",
|
description: record.taskDescription || "",
|
||||||
@@ -197,6 +202,12 @@ watch(selectedTaskId, (newId) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const handlePageChange = (page: number) => {
|
||||||
|
selectedTaskId.value = null;
|
||||||
|
taskApplications.value = [];
|
||||||
|
fetchTasks(page);
|
||||||
|
};
|
||||||
|
|
||||||
const startTask = async () => {
|
const startTask = async () => {
|
||||||
if (!selectedTask.value) {
|
if (!selectedTask.value) {
|
||||||
ElMessage.warning("请先选择一个任务");
|
ElMessage.warning("请先选择一个任务");
|
||||||
@@ -339,6 +350,16 @@ onMounted(() => {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
|
<el-pagination
|
||||||
|
v-if="totalTasks > pageSize"
|
||||||
|
small
|
||||||
|
layout="prev, pager, next"
|
||||||
|
:total="totalTasks"
|
||||||
|
:page-size="pageSize"
|
||||||
|
:current-page="currentPage"
|
||||||
|
@current-change="handlePageChange"
|
||||||
|
class="task-pagination"
|
||||||
|
/>
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
<main class="content-zone">
|
<main class="content-zone">
|
||||||
@@ -584,6 +605,10 @@ onMounted(() => {
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.task-pagination {
|
||||||
|
margin-top: 10px;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
.content-zone {
|
.content-zone {
|
||||||
display: grid;
|
display: grid;
|
||||||
|
|||||||
Reference in New Issue
Block a user