feat: 增加顺运宝店铺筛选 (#151)
This commit is contained in:
+45
-15
@@ -53,8 +53,9 @@ func sybLoginHint(ocrURL string) string {
|
||||
// 是配置错了还是服务挂了,不能弹一个空的手工输入框了事。
|
||||
func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw, msg, loginReason string) {
|
||||
pageNum := service.ParsePage(pageRaw)
|
||||
shop := strings.TrimSpace(c.Query("shop"))
|
||||
stage := service.ParseSybStage(c.Query("stage"))
|
||||
result, err := service.ListSybOrdersView(h.db, keyword, stage, pageNum)
|
||||
result, err := service.ListSybOrdersView(h.db, keyword, shop, stage, pageNum)
|
||||
if err != nil {
|
||||
fail(c, http.StatusInternalServerError,
|
||||
"读取顺运宝货运单列表失败,数据没有被改动。刷新页面重试;一直失败请把这句话报给维护者。")
|
||||
@@ -88,6 +89,9 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
|
||||
if stage != "" {
|
||||
values.Set("stage", stage)
|
||||
}
|
||||
if shop != "" {
|
||||
values.Set("shop", shop)
|
||||
}
|
||||
detailValues := url.Values{}
|
||||
if keyword != "" {
|
||||
detailValues.Set("order_no", keyword)
|
||||
@@ -95,6 +99,9 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
|
||||
if stage != "" {
|
||||
detailValues.Set("stage", stage)
|
||||
}
|
||||
if shop != "" {
|
||||
detailValues.Set("shop", shop)
|
||||
}
|
||||
detailValues.Set("page", strconv.Itoa(result.Page))
|
||||
|
||||
// `[必须]` 密码不读出来显示、也不回显到 HTML,见工单 #46。
|
||||
@@ -155,6 +162,7 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
|
||||
|
||||
c.HTML(http.StatusOK, "syb/list", page(c, "syb", "顺运宝数据", gin.H{
|
||||
"Keyword": keyword,
|
||||
"ShopFilter": shop,
|
||||
"StageFilter": stage,
|
||||
"StageOptions": service.SybStageOptions(),
|
||||
"CurrentPage": result.Page,
|
||||
@@ -176,11 +184,11 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
|
||||
"SyncHistory": history,
|
||||
"NeedSyncHistory": c.Query("history") == "1",
|
||||
"HistoryFetchURL": sybHistoryPartialURL(history.Page,
|
||||
keyword, dateFrom, dateTo),
|
||||
keyword, shop, stage, dateFrom, dateTo),
|
||||
"HistoryPagination": sybHistoryPagination(history.Page, history.TotalPages,
|
||||
keyword, dateFrom, dateTo),
|
||||
keyword, shop, stage, dateFrom, dateTo),
|
||||
"HistoryFetchPagination": sybHistoryPartialPagination(history.Page, history.TotalPages,
|
||||
keyword, dateFrom, dateTo),
|
||||
keyword, shop, stage, dateFrom, dateTo),
|
||||
"Pagination": service.NewPaginationView(result.Page, result.TotalPages, values.Encode()),
|
||||
"DetailURL": "/syb/detail?" + detailValues.Encode(),
|
||||
"AssignableClients": purchaseClients.Rows,
|
||||
@@ -201,7 +209,7 @@ func (h *Handler) SybDetail(c *gin.Context) {
|
||||
}
|
||||
c.HTML(http.StatusOK, "syb/detail_modal", gin.H{
|
||||
"D": detail, "CSRFToken": csrfToken(c),
|
||||
"Keyword": c.Query("order_no"), "StageFilter": c.Query("stage"),
|
||||
"Keyword": c.Query("order_no"), "ShopFilter": c.Query("shop"), "StageFilter": c.Query("stage"),
|
||||
"CurrentPage": service.ParsePage(c.Query("page")),
|
||||
})
|
||||
}
|
||||
@@ -211,6 +219,8 @@ func (h *Handler) SybDetail(c *gin.Context) {
|
||||
func (h *Handler) SybSyncHistory(c *gin.Context) {
|
||||
c.Header("Cache-Control", "no-store")
|
||||
keyword := c.Query("order_no")
|
||||
shop := strings.TrimSpace(c.Query("shop"))
|
||||
stage := service.ParseSybStage(c.Query("stage"))
|
||||
dateFrom := c.Query("date_from")
|
||||
dateTo := c.Query("date_to")
|
||||
history, err := service.ListSybSyncHistory(h.db, service.ParsePage(c.Query("history_page")))
|
||||
@@ -221,16 +231,16 @@ func (h *Handler) SybSyncHistory(c *gin.Context) {
|
||||
c.HTML(http.StatusOK, "syb/history_partial", gin.H{
|
||||
"SyncHistory": history,
|
||||
"HistoryFetchURL": sybHistoryPartialURL(history.Page,
|
||||
keyword, dateFrom, dateTo),
|
||||
keyword, shop, stage, dateFrom, dateTo),
|
||||
"HistoryPagination": sybHistoryPagination(history.Page, history.TotalPages,
|
||||
keyword, dateFrom, dateTo),
|
||||
keyword, shop, stage, dateFrom, dateTo),
|
||||
"HistoryFetchPagination": sybHistoryPartialPagination(history.Page, history.TotalPages,
|
||||
keyword, dateFrom, dateTo),
|
||||
keyword, shop, stage, dateFrom, dateTo),
|
||||
})
|
||||
}
|
||||
|
||||
func sybHistoryPagination(pageNum, totalPages int, keyword, dateFrom, dateTo string) service.PaginationView {
|
||||
link := func(target int) string { return sybHistoryURL(target, keyword, dateFrom, dateTo) }
|
||||
func sybHistoryPagination(pageNum, totalPages int, keyword, shop, stage, dateFrom, dateTo string) service.PaginationView {
|
||||
link := func(target int) string { return sybHistoryURL(target, keyword, shop, stage, dateFrom, dateTo) }
|
||||
view := service.PaginationView{
|
||||
Page: pageNum, TotalPages: totalPages, HasPrev: pageNum > 1, HasNext: pageNum < totalPages,
|
||||
FirstURL: link(1), LastURL: link(totalPages),
|
||||
@@ -244,18 +254,24 @@ func sybHistoryPagination(pageNum, totalPages int, keyword, dateFrom, dateTo str
|
||||
return view
|
||||
}
|
||||
|
||||
func sybHistoryURL(pageNum int, keyword, dateFrom, dateTo string) string {
|
||||
func sybHistoryURL(pageNum int, keyword, shop, stage, dateFrom, dateTo string) string {
|
||||
values := url.Values{"history": {"1"}, "history_page": {strconv.Itoa(pageNum)}}
|
||||
if keyword != "" {
|
||||
values.Set("order_no", keyword)
|
||||
}
|
||||
if shop != "" {
|
||||
values.Set("shop", shop)
|
||||
}
|
||||
if stage != "" {
|
||||
values.Set("stage", stage)
|
||||
}
|
||||
values.Set("date_from", dateFrom)
|
||||
values.Set("date_to", dateTo)
|
||||
return "/syb?" + values.Encode()
|
||||
}
|
||||
|
||||
func sybHistoryPartialPagination(pageNum, totalPages int, keyword, dateFrom, dateTo string) service.PaginationView {
|
||||
link := func(target int) string { return sybHistoryPartialURL(target, keyword, dateFrom, dateTo) }
|
||||
func sybHistoryPartialPagination(pageNum, totalPages int, keyword, shop, stage, dateFrom, dateTo string) service.PaginationView {
|
||||
link := func(target int) string { return sybHistoryPartialURL(target, keyword, shop, stage, dateFrom, dateTo) }
|
||||
view := service.PaginationView{
|
||||
Page: pageNum, TotalPages: totalPages, HasPrev: pageNum > 1, HasNext: pageNum < totalPages,
|
||||
FirstURL: link(1), LastURL: link(totalPages),
|
||||
@@ -269,11 +285,17 @@ func sybHistoryPartialPagination(pageNum, totalPages int, keyword, dateFrom, dat
|
||||
return view
|
||||
}
|
||||
|
||||
func sybHistoryPartialURL(pageNum int, keyword, dateFrom, dateTo string) string {
|
||||
func sybHistoryPartialURL(pageNum int, keyword, shop, stage, dateFrom, dateTo string) string {
|
||||
values := url.Values{"history_page": {strconv.Itoa(pageNum)}}
|
||||
if keyword != "" {
|
||||
values.Set("order_no", keyword)
|
||||
}
|
||||
if shop != "" {
|
||||
values.Set("shop", shop)
|
||||
}
|
||||
if stage != "" {
|
||||
values.Set("stage", stage)
|
||||
}
|
||||
values.Set("date_from", dateFrom)
|
||||
values.Set("date_to", dateTo)
|
||||
return "/syb/sync-history?" + values.Encode()
|
||||
@@ -285,6 +307,8 @@ func sybStatusLine(result *service.SybListResult) string {
|
||||
prefix := fmt.Sprintf("共 %d 条货运单明细", result.Total)
|
||||
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)
|
||||
}
|
||||
if !result.HasAny {
|
||||
return "还没有货运单明细。点上方「同步」从顺运宝拉取。"
|
||||
@@ -521,6 +545,12 @@ func (h *Handler) sybRedirectAfterStart(c *gin.Context, msg string) {
|
||||
if keyword := strings.TrimSpace(c.PostForm("order_no")); keyword != "" {
|
||||
params.Set("order_no", keyword)
|
||||
}
|
||||
if shop := strings.TrimSpace(c.PostForm("shop")); shop != "" {
|
||||
params.Set("shop", shop)
|
||||
}
|
||||
if stage := strings.TrimSpace(c.PostForm("stage")); stage != "" {
|
||||
params.Set("stage", stage)
|
||||
}
|
||||
c.Redirect(http.StatusSeeOther, "/syb?"+params.Encode())
|
||||
}
|
||||
|
||||
@@ -553,7 +583,7 @@ func (h *Handler) sybRedirectRange(c *gin.Context, message string) {
|
||||
|
||||
// appendSybFormState 保存同步/登录跳转后仍需要的页面状态。
|
||||
func appendSybFormState(params url.Values, c *gin.Context) {
|
||||
for _, name := range []string{"order_no", "stage", "page", "date_from", "date_to"} {
|
||||
for _, name := range []string{"order_no", "shop", "stage", "page", "date_from", "date_to"} {
|
||||
if value := strings.TrimSpace(c.PostForm(name)); value != "" {
|
||||
params.Set(name, value)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user