dict.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package db
  2. import (
  3. "dashoo.cn/opms_libary/myerrors"
  4. "errors"
  5. )
  6. // 新增页面请求参数
  7. type DictEntity struct {
  8. Id string `json:"id"`
  9. Name string `json:"name"`
  10. }
  11. // DictReq 字典返回项的请求参数
  12. // v:"name @required|length:6,30#请输入用户名称|用户名称长度非法"`
  13. type DictReq struct {
  14. TableName string `json:"table_name" v:"table_name@required#表名称为必填项"` // 表名称
  15. DisplayField []string `json:"display_field" v:"display_field@required#显示字段必填"` // 显示字段
  16. SortFields string `json:"sort_fields"` // 排序字段
  17. Where interface{} `json:"where"` // 条件
  18. Args []interface{} `json:"args"` // 参数
  19. }
  20. // Dict 字典项
  21. type Dict struct {
  22. Label string `json:"label"`
  23. Val string `json:"val"`
  24. }
  25. // GetDictList 获取字典项列表(有效的) FileldParams可选,第一个为IdField,第二个为SortField,第三个为EnabledField
  26. func (s *ServiceBase) GetDictList(tableName string, NameField string, FileldParams ...string) ([]DictEntity, error) {
  27. idField := "Id"
  28. sortField := "SortCode"
  29. enabledField := "Enabled"
  30. if len(FileldParams) > 0 {
  31. for index, param := range FileldParams {
  32. if param == "" {
  33. continue
  34. }
  35. if index == 0 {
  36. idField = param
  37. } else if index == 1 {
  38. sortField = param
  39. } else if index == 2 {
  40. enabledField = param
  41. }
  42. }
  43. }
  44. var entity []DictEntity
  45. err := s.DB.Model(tableName).
  46. Fields(idField+" as Id", NameField+" as Name").
  47. Where(enabledField, 1).
  48. Order(sortField + " ASC").
  49. Structs(&entity)
  50. if err != nil {
  51. return nil, myerrors.NewDbError(err)
  52. }
  53. return entity, nil
  54. }
  55. // GetDictListForWhere 根据条件返回字典项 (tableName:表名称, displayField 显示字段, where, args 条件参数)
  56. // 如果 displayField 字段只有一个,默认加 Id是key
  57. func (s *ServiceBase) GetDictListForWhere(req DictReq) ([]Dict, error) {
  58. if len(req.DisplayField) == 0 {
  59. return nil, errors.New("显示字段参数不能为空")
  60. }
  61. defaultField := "Id"
  62. model := s.DB.Model(req.TableName)
  63. if len(req.DisplayField) == 1 {
  64. model = model.Fields(defaultField+" AS Label", req.DisplayField[0]+" AS Val")
  65. } else {
  66. model = model.Fields(req.DisplayField[0]+" AS Label", req.DisplayField[1]+" AS Val")
  67. }
  68. // 排序
  69. if req.SortFields != "" {
  70. model = model.OrderAsc(req.SortFields)
  71. }
  72. dictList := make([]Dict, 0)
  73. if req.Where != nil {
  74. if len(req.Args) > 0 {
  75. model = model.Where(req.Where, req.Args)
  76. } else {
  77. model = model.Where(req.Where)
  78. }
  79. }
  80. err := model.Scan(&dictList)
  81. if err != nil {
  82. return nil, err
  83. }
  84. return dictList, nil
  85. }