package db import ( "dashoo.cn/opms_libary/myerrors" "errors" ) // 新增页面请求参数 type DictEntity struct { Id string `json:"id"` Name string `json:"name"` } // DictReq 字典返回项的请求参数 // v:"name @required|length:6,30#请输入用户名称|用户名称长度非法"` type DictReq struct { TableName string `json:"table_name" v:"table_name@required#表名称为必填项"` // 表名称 DisplayField []string `json:"display_field" v:"display_field@required#显示字段必填"` // 显示字段 SortFields string `json:"sort_fields"` // 排序字段 Where interface{} `json:"where"` // 条件 Args []interface{} `json:"args"` // 参数 } // Dict 字典项 type Dict struct { Label string `json:"label"` Val string `json:"val"` } // GetDictList 获取字典项列表(有效的) FileldParams可选,第一个为IdField,第二个为SortField,第三个为EnabledField func (s *ServiceBase) GetDictList(tableName string, NameField string, FileldParams ...string) ([]DictEntity, error) { idField := "Id" sortField := "SortCode" enabledField := "Enabled" if len(FileldParams) > 0 { for index, param := range FileldParams { if param == "" { continue } if index == 0 { idField = param } else if index == 1 { sortField = param } else if index == 2 { enabledField = param } } } var entity []DictEntity err := s.DB.Model(tableName). Fields(idField+" as Id", NameField+" as Name"). Where(enabledField, 1). Order(sortField + " ASC"). Structs(&entity) if err != nil { return nil, myerrors.NewDbError(err) } return entity, nil } // GetDictListForWhere 根据条件返回字典项 (tableName:表名称, displayField 显示字段, where, args 条件参数) // 如果 displayField 字段只有一个,默认加 Id是key func (s *ServiceBase) GetDictListForWhere(req DictReq) ([]Dict, error) { if len(req.DisplayField) == 0 { return nil, errors.New("显示字段参数不能为空") } defaultField := "Id" model := s.DB.Model(req.TableName) if len(req.DisplayField) == 1 { model = model.Fields(defaultField+" AS Label", req.DisplayField[0]+" AS Val") } else { model = model.Fields(req.DisplayField[0]+" AS Label", req.DisplayField[1]+" AS Val") } // 排序 if req.SortFields != "" { model = model.OrderAsc(req.SortFields) } dictList := make([]Dict, 0) if req.Where != nil { if len(req.Args) > 0 { model = model.Where(req.Where, req.Args) } else { model = model.Where(req.Where) } } err := model.Scan(&dictList) if err != nil { return nil, err } return dictList, nil }