feat: 支持主列表选择每页条数 (#242)
This commit is contained in:
@@ -11,7 +11,8 @@ import (
|
||||
)
|
||||
|
||||
func (h *Handler) CatalogHistory(c *gin.Context) {
|
||||
result, err := service.ListCatalogHistory(h.db, c.Query("source"), c.Query("status"), service.ParsePage(c.Query("page")))
|
||||
pageSize := service.ParsePageSize(c.Query("page_size"))
|
||||
result, err := service.ListCatalogHistoryWithPageSize(h.db, c.Query("source"), c.Query("status"), service.ParsePage(c.Query("page")), pageSize)
|
||||
if err != nil {
|
||||
fail(c, 500, "读取商品目录导入记录失败,数据没有被改动。请刷新后重试。")
|
||||
return
|
||||
@@ -23,7 +24,7 @@ func (h *Handler) CatalogHistory(c *gin.Context) {
|
||||
if result.Status != "" {
|
||||
values.Set("status", result.Status)
|
||||
}
|
||||
c.HTML(http.StatusOK, "catalog/list", page(c, "catalog", "商品目录导入记录", gin.H{"Rows": result.Rows, "Sources": result.Sources, "Source": result.Source, "StatusFilter": result.Status, "StatusOptions": service.CatalogStatusOptions(), "Status": fmt.Sprintf("共 %d 条 · 第 %d/%d 页", result.Total, result.Page, result.TotalPages), "Pagination": service.NewPaginationView(result.Page, result.TotalPages, values.Encode())}))
|
||||
c.HTML(http.StatusOK, "catalog/list", page(c, "catalog", "商品目录导入记录", gin.H{"Rows": result.Rows, "Sources": result.Sources, "Source": result.Source, "StatusFilter": result.Status, "StatusOptions": service.CatalogStatusOptions(), "Status": fmt.Sprintf("共 %d 条 · 第 %d/%d 页", result.Total, result.Page, result.TotalPages), "CurrentPageSize": pageSize, "Pagination": service.NewPaginationView(result.Page, pageSize, result.TotalPages, values.Encode())}))
|
||||
}
|
||||
|
||||
func (h *Handler) CatalogHistoryDetail(c *gin.Context) {
|
||||
|
||||
@@ -28,7 +28,9 @@ func (h *Handler) InnerCodeList(c *gin.Context) {
|
||||
}
|
||||
status := strings.TrimSpace(c.Query("status"))
|
||||
keyword := strings.TrimSpace(c.Query("q"))
|
||||
result, err := service.ListInnerCodePage(h.db, businessDate, status, keyword, service.ParsePage(c.Query("page")))
|
||||
pageSize := service.ParsePageSize(c.Query("page_size"))
|
||||
result, err := service.ListInnerCodePageWithPageSize(h.db, businessDate, status, keyword,
|
||||
service.ParsePage(c.Query("page")), pageSize)
|
||||
if err != nil {
|
||||
fail(c, http.StatusInternalServerError, "读取档口入库码列表失败,请稍后刷新重试。")
|
||||
return
|
||||
@@ -41,17 +43,18 @@ func (h *Handler) InnerCodeList(c *gin.Context) {
|
||||
query.Set("q", keyword)
|
||||
}
|
||||
c.HTML(http.StatusOK, "inner_code/list", page(c, "inner-codes", "档口入库码", gin.H{
|
||||
"BusinessDate": businessDate,
|
||||
"StatusFilter": result.Status,
|
||||
"Keyword": keyword,
|
||||
"StatusOptions": service.InnerCodeStatusOptions(),
|
||||
"Rows": result.Rows,
|
||||
"HasAny": result.Counts.Total > 0,
|
||||
"IsFiltered": result.IsFiltered,
|
||||
"CurrentPage": result.Page,
|
||||
"Message": strings.TrimSpace(c.Query("message")),
|
||||
"Status": service.InnerCodeStatusMessage(result),
|
||||
"Pagination": service.NewPaginationView(result.Page, result.TotalPages, query.Encode()),
|
||||
"BusinessDate": businessDate,
|
||||
"StatusFilter": result.Status,
|
||||
"Keyword": keyword,
|
||||
"StatusOptions": service.InnerCodeStatusOptions(),
|
||||
"Rows": result.Rows,
|
||||
"HasAny": result.Counts.Total > 0,
|
||||
"IsFiltered": result.IsFiltered,
|
||||
"CurrentPage": result.Page,
|
||||
"CurrentPageSize": pageSize,
|
||||
"Message": strings.TrimSpace(c.Query("message")),
|
||||
"Status": service.InnerCodeStatusMessage(result),
|
||||
"Pagination": service.NewPaginationView(result.Page, pageSize, result.TotalPages, query.Encode()),
|
||||
}))
|
||||
}
|
||||
|
||||
@@ -141,8 +144,8 @@ func (h *Handler) InnerCodeMatch(c *gin.Context) {
|
||||
h.innerCodeRedirect(c, businessDate, status, keyword, pageNumber, "请先勾选要匹配的记录。")
|
||||
return
|
||||
}
|
||||
if len(ids) > service.PageSize {
|
||||
h.innerCodeRedirect(c, businessDate, status, keyword, pageNumber, "一次最多匹配当前页 20 条记录,请刷新后重新勾选。")
|
||||
if len(ids) > service.InnerCodeRemoteBatchLimit {
|
||||
h.innerCodeRedirect(c, businessDate, status, keyword, pageNumber, "一次最多匹配 20 条记录,请减少勾选后重试。")
|
||||
return
|
||||
}
|
||||
cfg, err := config.Load()
|
||||
@@ -272,6 +275,7 @@ func (h *Handler) innerCodeSybClient() (*syb.Client, string) {
|
||||
|
||||
func (h *Handler) innerCodeRedirect(c *gin.Context, businessDate, status, keyword string, pageNumber int, message string) {
|
||||
values := url.Values{"date": {businessDate}, "page": {strconv.Itoa(pageNumber)}, "message": {message}}
|
||||
values.Set("page_size", strconv.Itoa(service.ParsePageSize(c.PostForm("page_size"))))
|
||||
if strings.TrimSpace(status) != "" {
|
||||
values.Set("status", strings.TrimSpace(status))
|
||||
}
|
||||
|
||||
+39
-22
@@ -53,9 +53,10 @@ func sybLoginHint(ocrURL string) string {
|
||||
// 是配置错了还是服务挂了,不能弹一个空的手工输入框了事。
|
||||
func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw, msg, loginReason string) {
|
||||
pageNum := service.ParsePage(pageRaw)
|
||||
pageSize := service.ParsePageSize(c.Query("page_size"))
|
||||
shop := strings.TrimSpace(c.Query("shop"))
|
||||
stage := service.ParseSybStage(c.Query("stage"))
|
||||
result, err := service.ListSybOrdersView(h.db, keyword, shop, stage, pageNum)
|
||||
result, err := service.ListSybOrdersViewWithPageSize(h.db, keyword, shop, stage, pageNum, pageSize)
|
||||
if err != nil {
|
||||
if !service.IsValidationError(err) || result == nil {
|
||||
fail(c, http.StatusInternalServerError,
|
||||
@@ -131,6 +132,7 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
|
||||
if shop != "" {
|
||||
values.Set("shop", shop)
|
||||
}
|
||||
values.Set("page_size", strconv.Itoa(pageSize))
|
||||
detailValues := url.Values{}
|
||||
if keyword != "" {
|
||||
detailValues.Set("order_no", keyword)
|
||||
@@ -141,6 +143,7 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
|
||||
if shop != "" {
|
||||
detailValues.Set("shop", shop)
|
||||
}
|
||||
detailValues.Set("page_size", strconv.Itoa(pageSize))
|
||||
detailValues.Set("page", strconv.Itoa(result.Page))
|
||||
|
||||
// `[必须]` 密码不读出来显示、也不回显到 HTML,见工单 #46。
|
||||
@@ -214,6 +217,7 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
|
||||
query.Set("stage", stage)
|
||||
}
|
||||
query.Set("page", strconv.Itoa(result.Page))
|
||||
query.Set("page_size", strconv.Itoa(pageSize))
|
||||
query.Set("date_from", dateFrom)
|
||||
query.Set("date_to", dateTo)
|
||||
return "/syb?" + query.Encode()
|
||||
@@ -247,6 +251,7 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
|
||||
"StageFilter": stage,
|
||||
"StageOptions": service.SybStageOptions(),
|
||||
"CurrentPage": result.Page,
|
||||
"CurrentPageSize": pageSize,
|
||||
"Rows": result.Rows,
|
||||
"PurchaseRows": purchaseRows,
|
||||
"OpenSybID": openSybID,
|
||||
@@ -273,7 +278,7 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
|
||||
keyword, shop, stage, dateFrom, dateTo),
|
||||
"HistoryFetchPagination": sybHistoryPartialPagination(history.Page, history.TotalPages,
|
||||
keyword, shop, stage, dateFrom, dateTo),
|
||||
"Pagination": service.NewPaginationView(result.Page, result.TotalPages, values.Encode()),
|
||||
"Pagination": service.NewPaginationView(result.Page, pageSize, result.TotalPages, values.Encode()),
|
||||
"DetailURL": "/syb/detail?" + detailValues.Encode(),
|
||||
"AssignableClients": purchaseClients.Rows,
|
||||
"PurchaseClientCount": purchaseClients.SelectableCount,
|
||||
@@ -314,7 +319,8 @@ func (h *Handler) SybDetail(c *gin.Context) {
|
||||
c.HTML(http.StatusOK, "syb/detail_modal", gin.H{
|
||||
"D": detail, "CSRFToken": csrfToken(c), "AssignableClients": assignableClients,
|
||||
"Keyword": c.Query("order_no"), "ShopFilter": c.Query("shop"), "StageFilter": c.Query("stage"),
|
||||
"CurrentPage": service.ParsePage(c.Query("page")),
|
||||
"CurrentPage": service.ParsePage(c.Query("page")),
|
||||
"CurrentPageSize": service.ParsePageSize(c.Query("page_size")),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -678,6 +684,7 @@ func (h *Handler) sybRedirectAfterStart(c *gin.Context, msg string) {
|
||||
if stage := strings.TrimSpace(c.PostForm("stage")); stage != "" {
|
||||
params.Set("stage", stage)
|
||||
}
|
||||
params.Set("page_size", strconv.Itoa(service.ParsePageSize(c.PostForm("page_size"))))
|
||||
c.Redirect(http.StatusSeeOther, "/syb?"+params.Encode())
|
||||
}
|
||||
|
||||
@@ -715,6 +722,7 @@ func appendSybFormState(params url.Values, c *gin.Context) {
|
||||
params.Set(name, value)
|
||||
}
|
||||
}
|
||||
params.Set("page_size", strconv.Itoa(service.ParsePageSize(c.PostForm("page_size"))))
|
||||
}
|
||||
|
||||
// SybAssociatePdd 从货运单上下文关联 PDD 商品,实际业务规则与蝦皮详情共用。
|
||||
@@ -869,6 +877,7 @@ func (h *Handler) SybDelete(c *gin.Context) {
|
||||
// TaskList 渲染「采集采购」列表页。
|
||||
func (h *Handler) TaskList(c *gin.Context) {
|
||||
actor := currentUser(c)
|
||||
pageSize := service.ParsePageSize(c.Query("page_size"))
|
||||
creatorFilter := c.Query("creator")
|
||||
filter := repository.TaskFilter{
|
||||
Type: service.ParseTaskType(c.Query("type")),
|
||||
@@ -876,7 +885,8 @@ func (h *Handler) TaskList(c *gin.Context) {
|
||||
Keyword: c.Query("q"),
|
||||
}
|
||||
|
||||
result, err := service.ListTasksViewForUser(h.db, actor, filter, creatorFilter, service.ParsePage(c.Query("page")))
|
||||
result, err := service.ListTasksViewForUserWithPageSize(h.db, actor, filter, creatorFilter,
|
||||
service.ParsePage(c.Query("page")), pageSize)
|
||||
if err != nil {
|
||||
fail(c, http.StatusInternalServerError,
|
||||
"读取任务列表失败,数据没有被改动。刷新页面重试;一直失败请把这句话报给维护者。")
|
||||
@@ -908,20 +918,22 @@ func (h *Handler) TaskList(c *gin.Context) {
|
||||
if actor.IsAdmin() && creatorFilter != "" {
|
||||
values.Set("creator", creatorFilter)
|
||||
}
|
||||
values.Set("page_size", strconv.Itoa(pageSize))
|
||||
c.HTML(http.StatusOK, "task/list", page(c, "tasks", "采集采购", gin.H{
|
||||
"Rows": result.Rows,
|
||||
"Keyword": filter.Keyword,
|
||||
"Status": statusLine,
|
||||
"TypeFilter": string(filter.Type),
|
||||
"StatusFilter": string(filter.Status),
|
||||
"TypeOptions": service.TaskTypeOptions(),
|
||||
"StatusOptions": service.TaskStatusOptions(),
|
||||
"ShowCreator": actor.IsAdmin(),
|
||||
"CreatorFilter": creatorFilter,
|
||||
"CreatorOptions": creatorOptions,
|
||||
"IsFiltered": result.IsFiltered,
|
||||
"CurrentPage": result.Page,
|
||||
"Pagination": service.NewPaginationView(result.Page, result.TotalPages, values.Encode()),
|
||||
"Rows": result.Rows,
|
||||
"Keyword": filter.Keyword,
|
||||
"Status": statusLine,
|
||||
"TypeFilter": string(filter.Type),
|
||||
"StatusFilter": string(filter.Status),
|
||||
"TypeOptions": service.TaskTypeOptions(),
|
||||
"StatusOptions": service.TaskStatusOptions(),
|
||||
"ShowCreator": actor.IsAdmin(),
|
||||
"CreatorFilter": creatorFilter,
|
||||
"CreatorOptions": creatorOptions,
|
||||
"IsFiltered": result.IsFiltered,
|
||||
"CurrentPage": result.Page,
|
||||
"CurrentPageSize": pageSize,
|
||||
"Pagination": service.NewPaginationView(result.Page, pageSize, result.TotalPages, values.Encode()),
|
||||
}))
|
||||
}
|
||||
|
||||
@@ -992,6 +1004,7 @@ func (h *Handler) taskRedirect(c *gin.Context, msg string) {
|
||||
if p := c.PostForm("page"); p != "" {
|
||||
params.Set("page", p)
|
||||
}
|
||||
params.Set("page_size", strconv.Itoa(service.ParsePageSize(c.PostForm("page_size"))))
|
||||
if creator := c.PostForm("creator"); creator != "" && currentUser(c).IsAdmin() {
|
||||
params.Set("creator", creator)
|
||||
}
|
||||
@@ -1018,9 +1031,10 @@ func (h *Handler) taskRedirect(c *gin.Context, msg string) {
|
||||
func (h *Handler) ClientList(c *gin.Context) {
|
||||
keyword := c.Query("name")
|
||||
actor := currentUser(c)
|
||||
pageSize := service.ParsePageSize(c.Query("page_size"))
|
||||
|
||||
result, err := service.ListClientPageForUser(h.db, actor, keyword, h.onlineThreshold,
|
||||
service.ParsePage(c.Query("page")))
|
||||
result, err := service.ListClientPageForUserWithPageSize(h.db, actor, keyword, h.onlineThreshold,
|
||||
service.ParsePage(c.Query("page")), pageSize)
|
||||
if err != nil {
|
||||
fail(c, http.StatusInternalServerError,
|
||||
"读取客户端列表失败,数据没有被改动。请稍后重试,或查看 data/logs/ 里的日志。")
|
||||
@@ -1044,12 +1058,14 @@ func (h *Handler) ClientList(c *gin.Context) {
|
||||
if strings.TrimSpace(keyword) != "" {
|
||||
values.Set("name", keyword)
|
||||
}
|
||||
values.Set("page_size", strconv.Itoa(pageSize))
|
||||
c.HTML(http.StatusOK, "client/list", page(c, "clients", "客户端列表", gin.H{
|
||||
"Keyword": keyword, "Rows": result.Rows, "Status": status,
|
||||
"Purchasers": purchasers, "Message": c.Query("msg"), "Error": c.Query("error"),
|
||||
"CurrentPage": result.Page,
|
||||
"Pagination": service.NewPaginationView(result.Page, result.TotalPages, values.Encode()),
|
||||
"IsFiltered": strings.TrimSpace(keyword) != "",
|
||||
"CurrentPage": result.Page,
|
||||
"CurrentPageSize": pageSize,
|
||||
"Pagination": service.NewPaginationView(result.Page, pageSize, result.TotalPages, values.Encode()),
|
||||
"IsFiltered": strings.TrimSpace(keyword) != "",
|
||||
}))
|
||||
}
|
||||
|
||||
@@ -1102,6 +1118,7 @@ func redirectClients(c *gin.Context, message, errorMessage string) {
|
||||
if page := c.PostForm("page"); page != "" {
|
||||
query.Set("page", page)
|
||||
}
|
||||
query.Set("page_size", strconv.Itoa(service.ParsePageSize(c.PostForm("page_size"))))
|
||||
if message != "" {
|
||||
query.Set("msg", message)
|
||||
}
|
||||
|
||||
@@ -43,61 +43,67 @@ func assertRedirectQuery(t *testing.T, recorder *httptest.ResponseRecorder, want
|
||||
func Test列表写操作跳转保留筛选和页码(t *testing.T) {
|
||||
t.Run("蝦皮", func(t *testing.T) {
|
||||
context, recorder := listPostContext(t, "/shopee/save", url.Values{
|
||||
"q": {"店铺 A"}, "search_field": {"shop_name"}, "status": {"no_link"}, "unlinked": {"1"}, "page": {"2"},
|
||||
"q": {"店铺 A"}, "search_field": {"shop_name"}, "status": {"no_link"}, "unlinked": {"1"}, "page": {"2"}, "page_size": {"50"},
|
||||
})
|
||||
(&Handler{}).shopeeRedirect(context, "完成")
|
||||
assertRedirectQuery(t, recorder, "/shopee", map[string]string{
|
||||
"q": "店铺 A", "search_field": "shop_name", "status": "no_link", "unlinked": "1", "page": "2", "msg": "完成",
|
||||
"q": "店铺 A", "search_field": "shop_name", "status": "no_link", "unlinked": "1", "page": "2", "page_size": "50", "msg": "完成",
|
||||
})
|
||||
})
|
||||
t.Run("顺运宝", func(t *testing.T) {
|
||||
context, recorder := listPostContext(t, "/syb/associate-pdd", url.Values{
|
||||
"order_no": {"SYB-1"}, "shop": {"测试店铺"}, "stage": {"pdd_missing"}, "page": {"3"},
|
||||
"order_no": {"SYB-1"}, "shop": {"测试店铺"}, "stage": {"pdd_missing"}, "page": {"3"}, "page_size": {"100"},
|
||||
})
|
||||
(&Handler{}).sybRedirect(context, "完成")
|
||||
assertRedirectQuery(t, recorder, "/syb", map[string]string{
|
||||
"order_no": "SYB-1", "shop": "测试店铺", "stage": "pdd_missing", "page": "3", "msg": "完成",
|
||||
"order_no": "SYB-1", "shop": "测试店铺", "stage": "pdd_missing", "page": "3", "page_size": "100", "msg": "完成",
|
||||
})
|
||||
})
|
||||
t.Run("PDD", func(t *testing.T) {
|
||||
context, recorder := listPostContext(t, "/pdd/delete", url.Values{
|
||||
"q": {"737"}, "status": {"pending"}, "page": {"3"},
|
||||
"q": {"737"}, "status": {"pending"}, "page": {"3"}, "page_size": {"50"},
|
||||
})
|
||||
(&Handler{}).pddRedirect(context, "完成")
|
||||
assertRedirectQuery(t, recorder, "/pdd", map[string]string{
|
||||
"q": "737", "status": "pending", "page": "3", "msg": "完成",
|
||||
"q": "737", "status": "pending", "page": "3", "page_size": "50", "msg": "完成",
|
||||
})
|
||||
})
|
||||
t.Run("任务", func(t *testing.T) {
|
||||
context, recorder := listPostContext(t, "/tasks/delete", url.Values{
|
||||
"q": {"TASK"}, "type": {"collect"}, "status": {"pending"}, "creator": {"buyer-a"}, "page": {"2"},
|
||||
"q": {"TASK"}, "type": {"collect"}, "status": {"pending"}, "creator": {"buyer-a"}, "page": {"2"}, "page_size": {"100"},
|
||||
})
|
||||
context.Set(currentUserKey, &model.User{Role: model.RoleAdmin})
|
||||
(&Handler{}).taskRedirect(context, "完成")
|
||||
assertRedirectQuery(t, recorder, "/tasks", map[string]string{
|
||||
"q": "TASK", "type": "collect", "status": "pending", "creator": "buyer-a", "page": "2", "msg": "完成",
|
||||
"q": "TASK", "type": "collect", "status": "pending", "creator": "buyer-a", "page": "2", "page_size": "100", "msg": "完成",
|
||||
})
|
||||
})
|
||||
t.Run("客户端", func(t *testing.T) {
|
||||
context, recorder := listPostContext(t, "/clients/assign", url.Values{
|
||||
"name": {"仓库"}, "page": {"4"},
|
||||
"name": {"仓库"}, "page": {"4"}, "page_size": {"50"},
|
||||
})
|
||||
redirectClients(context, "完成", "")
|
||||
assertRedirectQuery(t, recorder, "/clients", map[string]string{
|
||||
"name": "仓库", "page": "4", "msg": "完成",
|
||||
"name": "仓库", "page": "4", "page_size": "50", "msg": "完成",
|
||||
})
|
||||
})
|
||||
t.Run("用户", func(t *testing.T) {
|
||||
context, recorder := listPostContext(t, "/users/status", url.Values{
|
||||
"q": {"buyer"}, "list_status": {"active"}, "page": {"5"},
|
||||
"q": {"buyer"}, "list_status": {"active"}, "page": {"5"}, "page_size": {"100"},
|
||||
})
|
||||
redirectUsers(context, "完成", "")
|
||||
assertRedirectQuery(t, recorder, "/users", map[string]string{
|
||||
"q": "buyer", "status": "active", "page": "5", "msg": "完成",
|
||||
"q": "buyer", "status": "active", "page": "5", "page_size": "100", "msg": "完成",
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func Test列表写操作跳转归一化非法每页条数(t *testing.T) {
|
||||
context, recorder := listPostContext(t, "/pdd/delete", url.Values{"page_size": {"9999"}})
|
||||
(&Handler{}).pddRedirect(context, "")
|
||||
assertRedirectQuery(t, recorder, "/pdd", map[string]string{"page_size": "20"})
|
||||
}
|
||||
|
||||
func Test蝦皮分页详情和状态条保留分类搜索(t *testing.T) {
|
||||
values := url.Values{
|
||||
"q": {"店铺 A"}, "search_field": {"shop_name"}, "status": {"has_link"}, "unlinked": {"1"},
|
||||
|
||||
@@ -28,8 +28,13 @@ func (h *Handler) PddList(c *gin.Context) {
|
||||
func (h *Handler) renderPddList(c *gin.Context, keyword, statusRaw, pageRaw, message string, importResult *service.PddImportResult) {
|
||||
status := service.ParseCollectStatus(statusRaw)
|
||||
pageNum := service.ParsePage(pageRaw)
|
||||
pageSizeRaw := c.Query("page_size")
|
||||
if pageSizeRaw == "" && c.Request.Method == http.MethodPost {
|
||||
pageSizeRaw = c.PostForm("page_size")
|
||||
}
|
||||
pageSize := service.ParsePageSize(pageSizeRaw)
|
||||
|
||||
result, err := service.ListPddProducts(h.db, keyword, status, pageNum)
|
||||
result, err := service.ListPddProductsWithPageSize(h.db, keyword, status, pageNum, pageSize)
|
||||
if err != nil {
|
||||
fail(c, http.StatusInternalServerError,
|
||||
"读取 PDD 商品列表失败,数据没有被改动。刷新页面重试;一直失败请把这句话报给维护者。")
|
||||
@@ -59,6 +64,7 @@ func (h *Handler) renderPddList(c *gin.Context, keyword, statusRaw, pageRaw, mes
|
||||
if status != "" {
|
||||
values.Set("status", string(status))
|
||||
}
|
||||
values.Set("page_size", strconv.Itoa(pageSize))
|
||||
detailValues := url.Values{}
|
||||
for key, entries := range values {
|
||||
detailValues[key] = append([]string(nil), entries...)
|
||||
@@ -73,7 +79,8 @@ func (h *Handler) renderPddList(c *gin.Context, keyword, statusRaw, pageRaw, mes
|
||||
"HasAnyProducts": result.Total > 0,
|
||||
"IsFiltered": result.IsFiltered,
|
||||
"CurrentPage": result.Page,
|
||||
"Pagination": service.NewPaginationView(result.Page, result.TotalPages, values.Encode()),
|
||||
"Pagination": service.NewPaginationView(result.Page, pageSize, result.TotalPages, values.Encode()),
|
||||
"CurrentPageSize": pageSize,
|
||||
"DetailURL": "/pdd/detail?" + detailValues.Encode(),
|
||||
"AssignableClients": assignableClients,
|
||||
"ImportResult": importResult,
|
||||
@@ -112,7 +119,8 @@ func (h *Handler) PddDetail(c *gin.Context) {
|
||||
"CSRFToken": csrfToken(c),
|
||||
"AssignableClients": assignableClients,
|
||||
"Keyword": c.Query("q"), "StatusFilter": c.Query("status"),
|
||||
"CurrentPage": service.ParsePage(c.Query("page")),
|
||||
"CurrentPage": service.ParsePage(c.Query("page")),
|
||||
"CurrentPageSize": service.ParsePageSize(c.Query("page_size")),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -291,6 +299,7 @@ func (h *Handler) pddRedirect(c *gin.Context, msg string) {
|
||||
if p := c.PostForm("page"); p != "" {
|
||||
params.Set("page", p)
|
||||
}
|
||||
params.Set("page_size", strconv.Itoa(service.ParsePageSize(c.PostForm("page_size"))))
|
||||
if msg != "" {
|
||||
params.Set("msg", msg)
|
||||
}
|
||||
|
||||
@@ -48,10 +48,11 @@ func (h *Handler) ShopeeDetail(c *gin.Context) {
|
||||
c.HTML(http.StatusOK, "shopee/detail_modal", gin.H{
|
||||
"D": detail, "CSRFToken": csrfToken(c),
|
||||
"Keyword": c.Query("q"), "SearchField": service.ParseShopeeSearchField(c.Query("search_field")),
|
||||
"StatusFilter": service.ParseShopeeStatus(c.Query("status")),
|
||||
"DeletedFilter": currentUser(c).IsAdmin() && c.Query("deleted") == "1",
|
||||
"UnlinkedFilter": c.Query("unlinked") == "1",
|
||||
"CurrentPage": service.ParsePage(c.Query("page")),
|
||||
"StatusFilter": service.ParseShopeeStatus(c.Query("status")),
|
||||
"DeletedFilter": currentUser(c).IsAdmin() && c.Query("deleted") == "1",
|
||||
"UnlinkedFilter": c.Query("unlinked") == "1",
|
||||
"CurrentPage": service.ParsePage(c.Query("page")),
|
||||
"CurrentPageSize": service.ParsePageSize(c.Query("page_size")),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -72,8 +73,9 @@ func (h *Handler) renderShopeeList(c *gin.Context, keyword, searchFieldRaw, stat
|
||||
// 不叫 page:本文件末尾要调用同名的 page(c, ...) 渲染辅助函数,
|
||||
// 局部变量会把它遮住导致编译失败。
|
||||
pageNum := service.ParsePage(pageRaw)
|
||||
pageSize := service.ParsePageSize(c.Query("page_size"))
|
||||
|
||||
result, err := service.ListShopeeProducts(h.db, filter, pageNum)
|
||||
result, err := service.ListShopeeProductsWithPageSize(h.db, filter, pageNum, pageSize)
|
||||
if err != nil {
|
||||
fail(c, http.StatusInternalServerError,
|
||||
"读取蝦皮数据失败,数据没有被改动。刷新页面重试;一直失败请把这句话报给维护者。")
|
||||
@@ -104,6 +106,7 @@ func (h *Handler) renderShopeeList(c *gin.Context, keyword, searchFieldRaw, stat
|
||||
if filter.Unlinked {
|
||||
values.Set("unlinked", "1")
|
||||
}
|
||||
values.Set("page_size", strconv.Itoa(pageSize))
|
||||
|
||||
c.HTML(http.StatusOK, "shopee/list", page(c, "shopee", "蝦皮数据", gin.H{
|
||||
"Keyword": filter.Keyword,
|
||||
@@ -117,8 +120,9 @@ func (h *Handler) renderShopeeList(c *gin.Context, keyword, searchFieldRaw, stat
|
||||
"Status": status,
|
||||
"HasAnyProducts": result.HasAnyProducts,
|
||||
"IsFiltered": result.IsFiltered,
|
||||
"Pagination": service.NewPaginationView(result.Page, result.TotalPages, values.Encode()),
|
||||
"Pagination": service.NewPaginationView(result.Page, pageSize, result.TotalPages, values.Encode()),
|
||||
"CurrentPage": result.Page,
|
||||
"CurrentPageSize": pageSize,
|
||||
"DetailURL": "/shopee/detail?" + detailValuesForShopee(values, result.Page),
|
||||
"AutoOpenDetailID": strings.TrimSpace(c.Query("open_id")),
|
||||
"AssignableClients": assignableClients,
|
||||
@@ -264,6 +268,7 @@ func (h *Handler) shopeeRedirect(c *gin.Context, msg string) {
|
||||
if value := strings.TrimSpace(c.PostForm("page")); value != "" {
|
||||
params.Set("page", value)
|
||||
}
|
||||
params.Set("page_size", strconv.Itoa(service.ParsePageSize(c.PostForm("page_size"))))
|
||||
if value := strings.TrimSpace(c.PostForm("open_id")); value != "" {
|
||||
params.Set("open_id", value)
|
||||
}
|
||||
|
||||
@@ -36,11 +36,12 @@ func (h *Handler) UserList(c *gin.Context) {
|
||||
func (h *Handler) renderUserList(c *gin.Context, httpStatus int, message, errorMessage string, needCreate bool, createUsername string) {
|
||||
keyword := strings.TrimSpace(userListValue(c, "q"))
|
||||
listStatus := userListValue(c, "status")
|
||||
pageSize := service.ParsePageSize(userListValue(c, "page_size"))
|
||||
if c.Request.Method == http.MethodPost {
|
||||
listStatus = c.PostForm("list_status")
|
||||
}
|
||||
result, err := service.ListUsers(h.db, currentUser(c), keyword,
|
||||
model.UserStatus(listStatus), service.ParsePage(userListValue(c, "page")))
|
||||
result, err := service.ListUsersWithPageSize(h.db, currentUser(c), keyword,
|
||||
model.UserStatus(listStatus), service.ParsePage(userListValue(c, "page")), pageSize)
|
||||
if err != nil {
|
||||
fail(c, http.StatusInternalServerError, "读取用户列表失败,账号数据没有被改动。刷新后重试。")
|
||||
return
|
||||
@@ -55,10 +56,11 @@ func (h *Handler) renderUserList(c *gin.Context, httpStatus int, message, errorM
|
||||
status := fmt.Sprintf("共 %d 个用户 · 第 %d/%d 页", result.Total, result.Page, result.TotalPages)
|
||||
c.HTML(httpStatus, "user/list", page(c, "users", "用户管理", gin.H{
|
||||
"Rows": result.Rows, "Keyword": result.Keyword, "Status": status,
|
||||
"Pagination": service.NewPaginationView(result.Page, result.TotalPages, values.Encode()),
|
||||
"Pagination": service.NewPaginationView(result.Page, pageSize, result.TotalPages, values.Encode()),
|
||||
"StatusFilter": result.Status, "Message": message, "Error": errorMessage,
|
||||
"NeedCreate": needCreate, "CreateUsername": createUsername,
|
||||
"CurrentPage": result.Page,
|
||||
"CurrentPage": result.Page,
|
||||
"CurrentPageSize": pageSize,
|
||||
}))
|
||||
}
|
||||
|
||||
@@ -135,6 +137,7 @@ func redirectUsers(c *gin.Context, message, errorMessage string) {
|
||||
if page := c.PostForm("page"); page != "" {
|
||||
query.Set("page", page)
|
||||
}
|
||||
query.Set("page_size", fmt.Sprintf("%d", service.ParsePageSize(c.PostForm("page_size"))))
|
||||
if message != "" {
|
||||
query.Set("msg", message)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user