Bez popisu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

tabulator_request.go 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package tabulatorreq
  2. import (
  3. "git.x2erp.com/qdy/go-base/model/request/queryreq"
  4. )
  5. // TabulatorSorter Tabulator排序器格式
  6. type TabulatorSorter struct {
  7. Field string `json:"field"` // 排序字段
  8. Dir string `json:"dir"` // 排序方向: asc/desc
  9. }
  10. // TabulatorFilter Tabulator筛选器格式
  11. type TabulatorFilter struct {
  12. Field string `json:"field"` // 筛选字段
  13. Type string `json:"type"` // 筛选类型: =, !=, like, >, <, in等
  14. Value interface{} `json:"value"` // 筛选值
  15. }
  16. // TabulatorRequest Tabulator原生请求格式
  17. type TabulatorRequest struct {
  18. Page int `json:"page"` // 当前页码(从1开始)
  19. Size int `json:"size"` // 每页大小
  20. Sort []TabulatorSorter `json:"sort,omitempty"` // 排序器数组(单数,匹配前端)
  21. Filter []TabulatorFilter `json:"filter,omitempty"` // 筛选器数组(单数,匹配前端)
  22. }
  23. // Validate 验证请求参数
  24. func (r *TabulatorRequest) Validate() {
  25. if r.Page < 1 {
  26. r.Page = 1
  27. }
  28. if r.Size <= 0 {
  29. r.Size = 10
  30. } else if r.Size > 1000 {
  31. r.Size = 1000
  32. }
  33. }
  34. // ToQueryRequest 转换为通用QueryRequest
  35. func (r *TabulatorRequest) ToQueryRequest(fieldMapper func(string) string) *queryreq.QueryRequest {
  36. req := &queryreq.QueryRequest{
  37. Page: r.Page - 1, // Tabulator从1开始,QueryRequest从0开始
  38. PageSize: r.Size,
  39. }
  40. // 转换排序器
  41. for _, sorter := range r.Sort {
  42. field := fieldMapper(sorter.Field)
  43. if field == "" {
  44. continue // 无效字段,跳过
  45. }
  46. req.Sort = append(req.Sort, queryreq.SortParam{
  47. Field: field,
  48. Order: sorter.Dir,
  49. })
  50. }
  51. // 转换筛选器
  52. for _, filter := range r.Filter {
  53. field := fieldMapper(filter.Field)
  54. if field == "" {
  55. continue // 无效字段,跳过
  56. }
  57. req.Filter = append(req.Filter, queryreq.FilterParam{
  58. Field: field,
  59. Operator: mapOperator(filter.Type),
  60. Value: filter.Value,
  61. })
  62. }
  63. return req
  64. }
  65. // mapOperator 映射Tabulator操作符到QueryRequest操作符
  66. func mapOperator(tabulatorOp string) queryreq.Operator {
  67. switch tabulatorOp {
  68. case "=", "==":
  69. return queryreq.OpEquals
  70. case "!=", "<>":
  71. return queryreq.OpNotEquals
  72. case "like", "contains":
  73. return queryreq.OpLike
  74. case "in":
  75. return queryreq.OpIn
  76. case ">":
  77. return queryreq.OpGreaterThan
  78. case "<":
  79. return queryreq.OpLessThan
  80. case ">=":
  81. return queryreq.OpGreaterOrEq
  82. case "<=":
  83. return queryreq.OpLessOrEq
  84. default:
  85. return queryreq.OpEquals
  86. }
  87. }