feat: 支持主列表选择每页条数 (#242)

This commit is contained in:
chengma
2026-08-15 15:15:38 +08:00
parent 8c09023434
commit b4558537d5
37 changed files with 479 additions and 160 deletions
+14 -8
View File
@@ -1246,6 +1246,12 @@ func ParseSybOrderNos(raw string) ([]string, error) {
// `[必须]` 处理阶段由顺运宝规格键、PDD 关联、采集状态和规格映射实时推导,
// 不额外保存一份容易过期的状态字段。
func ListSybOrdersView(db *sql.DB, keyword, shop, stage string, page int) (*SybListResult, error) {
return ListSybOrdersViewWithPageSize(db, keyword, shop, stage, page, DefaultPageSize)
}
// ListSybOrdersViewWithPageSize 按白名单页容量查询顺运宝明细。
func ListSybOrdersViewWithPageSize(db *sql.DB, keyword, shop, stage string, page, pageSize int) (*SybListResult, error) {
pageSize = NormalizePageSize(pageSize)
shop = strings.TrimSpace(shop)
stage = ParseSybStage(stage)
orderNos, err := ParseSybOrderNos(keyword)
@@ -1264,18 +1270,18 @@ func ListSybOrdersView(db *sql.DB, keyword, shop, stage string, page int) (*SybL
stage == SybStageAIMatched ||
stage == SybStageTaskCreated || stage == SybStagePurchaseCompleted ||
stage == SybStagePurchaseReview || stage == SybStagePurchaseBlocked {
return listAdvancedSybStage(db, orderNos, shop, stage, page)
return listAdvancedSybStage(db, orderNos, shop, stage, page, pageSize)
}
filter := repository.SybOrderFilter{OrderNos: orderNos, Shop: shop, Stage: stage}
total, err := repository.CountSybOrders(db, filter)
if err != nil {
return nil, err
}
totalPages := TotalPages(total)
totalPages := TotalPages(total, pageSize)
page = ClampPage(page, totalPages)
offset := (page - 1) * PageSize
offset := (page - 1) * pageSize
rows, err := repository.ListSybOrderContexts(db, filter, PageSize, offset)
rows, err := repository.ListSybOrderContexts(db, filter, pageSize, offset)
if err != nil {
return nil, err
}
@@ -1311,7 +1317,7 @@ func ListSybOrdersView(db *sql.DB, keyword, shop, stage string, page int) (*SybL
// 这些阶段不能只靠 SQL 判断:同一个 option key 是否仍存在,需要走唯一的
// OptionKey 规范化逻辑。当前同步量是百到千级,先保证采购判断正确;普通列表
// 和其余阶段仍在数据库分页。
func listAdvancedSybStage(db *sql.DB, orderNos []string, shop, stage string, page int) (*SybListResult, error) {
func listAdvancedSybStage(db *sql.DB, orderNos []string, shop, stage string, page, pageSize int) (*SybListResult, error) {
contexts, err := repository.ListSybOrderContexts(db,
repository.SybOrderFilter{OrderNos: orderNos, Shop: shop}, -1, 0)
if err != nil {
@@ -1329,13 +1335,13 @@ func listAdvancedSybStage(db *sql.DB, orderNos []string, shop, stage string, pag
}
}
total := len(filtered)
totalPages := TotalPages(total)
totalPages := TotalPages(total, pageSize)
page = ClampPage(page, totalPages)
start := (page - 1) * PageSize
start := (page - 1) * pageSize
if start > total {
start = total
}
end := start + PageSize
end := start + pageSize
if end > total {
end = total
}