From 3b99c83e32ece4b2f4fd78bdff855edaec94c78d Mon Sep 17 00:00:00 2001 From: fengsilin Date: Thu, 23 Apr 2026 11:07:31 +0800 Subject: [PATCH] =?UTF-8?q?fix(sort):=20sort=5Forder=3D0=20=E7=9A=84?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=8E=92=E5=88=B0=E6=9C=80=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E9=9D=9E0=E5=80=BC=E6=8C=89=E5=8D=87=E5=BA=8F=E6=8E=92?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 模型和供应商查询统一排序规则:sort_order=0 视为未设置排到最后, 非0值按升序排列。涉及 GetAllModels、SearchModels、GetAllVendors、 SearchVendors 以及 pricing 的内存排序。 Co-Authored-By: Claude Opus 4.7 --- model/model_meta.go | 4 ++-- model/pricing.go | 26 +++++++++++++++++++++++--- model/vendor_meta.go | 4 ++-- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/model/model_meta.go b/model/model_meta.go index b9c1ad5..829ea47 100644 --- a/model/model_meta.go +++ b/model/model_meta.go @@ -118,7 +118,7 @@ func GetVendorModelCounts() (map[int64]int64, error) { func GetAllModels(offset int, limit int) ([]*Model, error) { var models []*Model - err := DB.Order("sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&models).Error + err := DB.Order("CASE WHEN sort_order = 0 THEN 1 ELSE 0 END ASC, sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&models).Error return models, err } @@ -166,7 +166,7 @@ func SearchModels(keyword string, vendor string, offset int, limit int) ([]*Mode if err := db.Count(&total).Error; err != nil { return nil, 0, err } - if err := db.Order("sort_order ASC, models.id ASC").Offset(offset).Limit(limit).Find(&models).Error; err != nil { + if err := db.Order("CASE WHEN sort_order = 0 THEN 1 ELSE 0 END ASC, sort_order ASC, models.id ASC").Offset(offset).Limit(limit).Find(&models).Error; err != nil { return nil, 0, err } return models, total, nil diff --git a/model/pricing.go b/model/pricing.go index c38b3e6..962c7a2 100644 --- a/model/pricing.go +++ b/model/pricing.go @@ -183,6 +183,16 @@ func updatePricing() { sort.Slice(vendorsList, func(i, j int) bool { oi := vendorOrderMap[vendorsList[i].ID] oj := vendorOrderMap[vendorsList[j].ID] + // 0 排到最后 + if oi == 0 && oj == 0 { + return vendorsList[i].ID < vendorsList[j].ID + } + if oi == 0 { + return false + } + if oj == 0 { + return true + } if oi != oj { return oi < oj } @@ -336,13 +346,23 @@ func updatePricing() { pricingMap = append(pricingMap, pricing) } - // 按 sort_order 排序 pricingMap + // 按 sort_order 排序 pricingMap,0 排到最后 sort.Slice(pricingMap, func(i, j int) bool { mi, okI := metaMap[pricingMap[i].ModelName] mj, okJ := metaMap[pricingMap[j].ModelName] if okI && okJ { - if mi.SortOrder != mj.SortOrder { - return mi.SortOrder < mj.SortOrder + si, sj := mi.SortOrder, mj.SortOrder + if si == 0 && sj == 0 { + return pricingMap[i].ModelName < pricingMap[j].ModelName + } + if si == 0 { + return false + } + if sj == 0 { + return true + } + if si != sj { + return si < sj } } else if okI { return true diff --git a/model/vendor_meta.go b/model/vendor_meta.go index f6b7e16..04952bc 100644 --- a/model/vendor_meta.go +++ b/model/vendor_meta.go @@ -66,7 +66,7 @@ func GetVendorByID(id int) (*Vendor, error) { // GetAllVendors 获取全部供应商(分页) func GetAllVendors(offset int, limit int) ([]*Vendor, error) { var vendors []*Vendor - err := DB.Order("sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&vendors).Error + err := DB.Order("CASE WHEN sort_order = 0 THEN 1 ELSE 0 END ASC, sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&vendors).Error return vendors, err } @@ -82,7 +82,7 @@ func SearchVendors(keyword string, offset int, limit int) ([]*Vendor, int64, err return nil, 0, err } var vendors []*Vendor - if err := db.Order("sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&vendors).Error; err != nil { + if err := db.Order("CASE WHEN sort_order = 0 THEN 1 ELSE 0 END ASC, sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&vendors).Error; err != nil { return nil, 0, err } return vendors, total, nil