feat: 支持顺运宝多订单号搜索 (#217)

This commit is contained in:
chengma
2026-08-13 14:58:19 +08:00
parent 2ebe6bf695
commit 8f2b3f725d
13 changed files with 372 additions and 46 deletions
+30 -4
View File
@@ -57,9 +57,18 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
stage := service.ParseSybStage(c.Query("stage"))
result, err := service.ListSybOrdersView(h.db, keyword, shop, stage, pageNum)
if err != nil {
fail(c, http.StatusInternalServerError,
"读取顺运宝货运单列表失败,数据没有被改动。刷新页面重试;一直失败请把这句话报给维护者。")
return
if !service.IsValidationError(err) || result == nil {
fail(c, http.StatusInternalServerError,
"读取顺运宝货运单列表失败,数据没有被改动。刷新页面重试;一直失败请把这句话报给维护者。")
return
}
}
orderNoError := ""
if err != nil {
orderNoError = err.Error()
} else {
// 有效输入统一回显成逗号分隔,避免 Excel 换行进入隐藏表单和分页 URL。
keyword = result.OrderNoQuery
}
purchaseRows := append([]service.SybOrderView(nil), result.Rows...)
openSybID := strings.TrimSpace(c.Query("open_syb_id"))
@@ -192,6 +201,8 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
c.HTML(http.StatusOK, "syb/list", page(c, "syb", "顺运宝数据", gin.H{
"Keyword": keyword,
"OrderNoError": orderNoError,
"OrderNoFeedback": sybOrderNoFeedback(result),
"ShopFilter": shop,
"StageFilter": stage,
"StageOptions": service.SybStageOptions(),
@@ -344,7 +355,10 @@ func sybHistoryPartialURL(pageNum int, keyword, shop, stage, dateFrom, dateTo st
// `[必须]` 显示筛选后的**全量**总数,不是本页行数,见工单 #43 定下的规则。
func sybStatusLine(result *service.SybListResult) string {
prefix := fmt.Sprintf("共 %d 条货运单明细", result.Total)
if label := service.SybStageLabel(result.Stage); label != "" {
if result.OrderNoCount > 0 {
prefix = fmt.Sprintf("输入 %d 个订单号,当前筛选命中 %d 个订单、%d 条商品明细",
result.OrderNoCount, result.MatchedOrderCount, result.Total)
} else if label := service.SybStageLabel(result.Stage); label != "" {
prefix = fmt.Sprintf("%s:%d 条", label, result.Total)
} else if result.IsFiltered {
prefix = fmt.Sprintf("筛选结果:%d 条货运单明细", result.Total)
@@ -355,6 +369,18 @@ func sybStatusLine(result *service.SybListResult) string {
return fmt.Sprintf("%s · 第 %d/%d 页", prefix, result.Page, result.TotalPages)
}
func sybOrderNoFeedback(result *service.SybListResult) string {
if result == nil || result.OrderNoCount == 0 {
return ""
}
feedback := fmt.Sprintf("已输入 %d 个订单号;当前筛选命中 %d 个订单、%d 条商品明细。",
result.OrderNoCount, result.MatchedOrderCount, result.Total)
if len(result.UnmatchedOrderNos) > 0 {
feedback += " 当前筛选未命中:" + strings.Join(result.UnmatchedOrderNos, "、")
}
return feedback
}
// SybSync 点「同步」按钮的入口。
//
// 流程见工单 #46/#47: