feat: 统一 Admin 主列表分页 (#64)
This commit is contained in:
+16
-11
@@ -233,9 +233,11 @@ type TaskView struct {
|
||||
|
||||
// TaskListResult 是列表页要的全部数据。
|
||||
type TaskListResult struct {
|
||||
Rows []TaskView
|
||||
Counts map[model.TaskStatus]int
|
||||
Total int // 当前筛选下的总数(= Counts 求和),不是全库总数
|
||||
Rows []TaskView
|
||||
Counts map[model.TaskStatus]int
|
||||
Total int // 当前筛选下的总数(= Counts 求和),不是全库总数
|
||||
Page int
|
||||
TotalPages int
|
||||
|
||||
// IsFiltered 为 false 时如果 Rows 也是空的,说明库里从来没建过任务
|
||||
// (不筛选就是查全表,全表空自然等价于"从没有过");为 true 时
|
||||
@@ -247,12 +249,18 @@ type TaskListResult struct {
|
||||
//
|
||||
// `[必须]` 底部统计要跟随当前筛选,所以 Counts 和 Rows 用的是**同一个**
|
||||
// filter,见 #19。
|
||||
func ListTasksView(db *sql.DB, filter repository.TaskFilter) (*TaskListResult, error) {
|
||||
rows, err := repository.ListTasks(db, filter)
|
||||
func ListTasksView(db *sql.DB, filter repository.TaskFilter, requestedPage int) (*TaskListResult, error) {
|
||||
counts, err := repository.CountTasksByStatus(db, filter)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
counts, err := repository.CountTasksByStatus(db, filter)
|
||||
total := 0
|
||||
for _, n := range counts {
|
||||
total += n
|
||||
}
|
||||
totalPages := TotalPages(total)
|
||||
page := ClampPage(requestedPage, totalPages)
|
||||
rows, err := repository.ListTasks(db, filter, PageSize, (page-1)*PageSize)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -260,13 +268,10 @@ func ListTasksView(db *sql.DB, filter repository.TaskFilter) (*TaskListResult, e
|
||||
result := &TaskListResult{
|
||||
Rows: make([]TaskView, 0, len(rows)),
|
||||
Counts: counts,
|
||||
Total: total, Page: page, TotalPages: totalPages,
|
||||
IsFiltered: filter.Type != "" || filter.Status != "" ||
|
||||
strings.TrimSpace(filter.Keyword) != "",
|
||||
}
|
||||
for _, n := range counts {
|
||||
result.Total += n
|
||||
}
|
||||
|
||||
for _, r := range rows {
|
||||
result.Rows = append(result.Rows, TaskView{
|
||||
TaskID: r.TaskID,
|
||||
@@ -292,7 +297,7 @@ func (r *TaskListResult) StatusLine() string {
|
||||
for _, s := range taskStatusOrder {
|
||||
parts = append(parts, fmt.Sprintf("%s %d", taskStatusText(s), r.Counts[s]))
|
||||
}
|
||||
return strings.Join(parts, " · ")
|
||||
return fmt.Sprintf("%s · 第 %d/%d 页", strings.Join(parts, " · "), r.Page, r.TotalPages)
|
||||
}
|
||||
|
||||
// DeleteTasks 批量删除任务,返回实际删掉的条数。
|
||||
|
||||
Reference in New Issue
Block a user