package tabulatorreq import ( "git.x2erp.com/qdy/go-base/model/request/queryreq" ) // TabulatorSorter Tabulator排序器格式 type TabulatorSorter struct { Field string `json:"field"` // 排序字段 Dir string `json:"dir"` // 排序方向: asc/desc } // TabulatorFilter Tabulator筛选器格式 type TabulatorFilter struct { Field string `json:"field"` // 筛选字段 Type string `json:"type"` // 筛选类型: =, !=, like, >, <, in等 Value interface{} `json:"value"` // 筛选值 } // TabulatorRequest Tabulator原生请求格式 type TabulatorRequest struct { Page int `json:"page"` // 当前页码(从1开始) Size int `json:"size"` // 每页大小 Sort []TabulatorSorter `json:"sort,omitempty"` // 排序器数组(单数,匹配前端) Filter []TabulatorFilter `json:"filter,omitempty"` // 筛选器数组(单数,匹配前端) } // Validate 验证请求参数 func (r *TabulatorRequest) Validate() { if r.Page < 1 { r.Page = 1 } if r.Size <= 0 { r.Size = 10 } else if r.Size > 1000 { r.Size = 1000 } } // ToQueryRequest 转换为通用QueryRequest func (r *TabulatorRequest) ToQueryRequest(fieldMapper func(string) string) *queryreq.QueryRequest { req := &queryreq.QueryRequest{ Page: r.Page - 1, // Tabulator从1开始,QueryRequest从0开始 PageSize: r.Size, } // 转换排序器 for _, sorter := range r.Sort { field := fieldMapper(sorter.Field) if field == "" { continue // 无效字段,跳过 } req.Sort = append(req.Sort, queryreq.SortParam{ Field: field, Order: sorter.Dir, }) } // 转换筛选器 for _, filter := range r.Filter { field := fieldMapper(filter.Field) if field == "" { continue // 无效字段,跳过 } req.Filter = append(req.Filter, queryreq.FilterParam{ Field: field, Operator: mapOperator(filter.Type), Value: filter.Value, }) } return req } // mapOperator 映射Tabulator操作符到QueryRequest操作符 func mapOperator(tabulatorOp string) queryreq.Operator { switch tabulatorOp { case "=", "==": return queryreq.OpEquals case "!=", "<>": return queryreq.OpNotEquals case "like", "contains": return queryreq.OpLike case "in": return queryreq.OpIn case ">": return queryreq.OpGreaterThan case "<": return queryreq.OpLessThan case ">=": return queryreq.OpGreaterOrEq case "<=": return queryreq.OpLessOrEq default: return queryreq.OpEquals } }