feat: Study 页面任务列表分页功能

- 新增 currentPage/totalTasks/pageSize 响应式状态
- fetchTasks 支持 page 参数,请求指定页码
- 新增 handlePageChange 切换页码时重置选中状态
- 模板侧边栏底部添加 el-pagination 分页组件
- 分页组件仅当总数超过单页容量时显示
This commit is contained in:
developer
2026-07-12 13:48:44 +08:00
parent a81f83f27c
commit 73d0572dfc
+27 -2
View File
@@ -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;