package handler import ( "strconv" "kra/internal/biz" "kra/internal/server/httpx" "kra/internal/service" "kra/internal/service/dto" "github.com/gin-gonic/gin" ) type Dictionary struct{ service *service.SettingsService } func NewDictionary(service *service.SettingsService) *Dictionary { return &Dictionary{service: service} } func (h *Dictionary) Create(c *gin.Context) { var req dto.DictionaryRequest if c.ShouldBindJSON(&req) != nil || req.Name == "" || req.Type == "" { httpx.Fail(c, "参数错误") return } if err := h.service.CreateDictionaryRequest(c.Request.Context(), &req); err != nil { httpx.Fail(c, "创建失败:"+err.Error()) return } httpx.OK(c) } func (h *Dictionary) Update(c *gin.Context) { var req dto.DictionaryRequest if c.ShouldBindJSON(&req) != nil || req.ID == 0 { httpx.Fail(c, "参数错误") return } if err := h.service.UpdateDictionaryRequest(c.Request.Context(), &req); err != nil { httpx.Fail(c, "更新失败") return } httpx.OK(c) } func (h *Dictionary) Delete(c *gin.Context) { var req dto.DictionaryRequest if c.ShouldBindJSON(&req) != nil || req.ID == 0 { httpx.Fail(c, "参数错误") return } if err := h.service.DeleteDictionary(c.Request.Context(), req.ID); err != nil { httpx.Fail(c, err.Error()) return } httpx.OK(c) } func (h *Dictionary) Find(c *gin.Context) { id, _ := strconv.ParseUint(c.Query("ID"), 10, 64) var status *bool if raw, exists := c.GetQuery("status"); exists { value, parseErr := strconv.ParseBool(raw) if parseErr != nil { httpx.Fail(c, parseErr.Error()) return } status = &value } item, err := h.service.Dictionary(c.Request.Context(), uint(id), c.Query("type"), status, true) if err != nil { httpx.Fail(c, "查询失败") return } httpx.Write(c, httpx.CodeSuccess, gin.H{"resysDictionary": item}, "查询成功") } func (h *Dictionary) List(details bool) gin.HandlerFunc { return func(c *gin.Context) { items, _, err := h.service.Dictionaries(c.Request.Context(), 0, 0, c.Query("name"), "", details) if err != nil { httpx.Fail(c, "获取失败") return } httpx.Write(c, httpx.CodeSuccess, items, "获取成功") } } func (h *Dictionary) Export(c *gin.Context) { id, _ := strconv.ParseUint(c.Query("ID"), 10, 64) item, err := h.service.ExportDictionary(c.Request.Context(), uint(id)) if err != nil { httpx.Fail(c, "导出失败") return } delete(item, "ID") delete(item, "CreatedAt") delete(item, "UpdatedAt") delete(item, "DeletedAt") if details, ok := item["sysDictionaryDetails"].([]map[string]any); ok { for _, detail := range details { for _, key := range []string{"ID", "CreatedAt", "UpdatedAt", "DeletedAt", "sysDictionaryID", "parentID", "disabled", "children"} { delete(detail, key) } } } httpx.Write(c, httpx.CodeSuccess, item, "导出成功") } func (h *Dictionary) Import(c *gin.Context) { var req dto.ImportDictionaryRequest if c.ShouldBindJSON(&req) != nil { httpx.Fail(c, "参数错误") return } if err := h.service.ImportDictionaryJSON(c.Request.Context(), req.JSON); err != nil { httpx.Fail(c, err.Error()) return } httpx.OK(c) } func (h *Dictionary) CreateDetail(c *gin.Context) { var req dto.DictionaryDetailRequest if c.ShouldBindJSON(&req) != nil || req.DictionaryID == 0 { httpx.Fail(c, "参数错误") return } if err := h.service.CreateDictionaryDetailRequest(c.Request.Context(), &req); err != nil { httpx.Fail(c, "创建失败") return } httpx.OK(c) } func (h *Dictionary) UpdateDetail(c *gin.Context) { var req dto.DictionaryDetailRequest if c.ShouldBindJSON(&req) != nil || req.ID == 0 { httpx.Fail(c, "参数错误") return } if err := h.service.UpdateDictionaryDetailRequest(c.Request.Context(), &req); err != nil { httpx.Fail(c, err.Error()) return } httpx.OK(c) } func (h *Dictionary) DeleteDetail(c *gin.Context) { var req dto.DictionaryDetailRequest if c.ShouldBindJSON(&req) != nil || req.ID == 0 { httpx.Fail(c, "参数错误") return } if err := h.service.DeleteDictionaryDetail(c.Request.Context(), req.ID); err != nil { httpx.Fail(c, err.Error()) return } httpx.OK(c) } func (h *Dictionary) FindDetail(c *gin.Context) { id, _ := strconv.ParseUint(c.Query("ID"), 10, 64) item, err := h.service.DictionaryDetail(c.Request.Context(), uint(id)) if err != nil { httpx.Fail(c, "查询失败") return } httpx.Write(c, httpx.CodeSuccess, gin.H{"reSysDictionaryDetail": item}, "查询成功") } func (h *Dictionary) Details(c *gin.Context) { p, size := page(c) dictionaryID, _ := strconv.ParseUint(c.Query("sysDictionaryID"), 10, 64) filter := biz.DictionaryDetailFilter{DictionaryID: uint(dictionaryID), Label: c.Query("label"), Value: c.Query("value")} if raw, exists := c.GetQuery("status"); exists { value, parseErr := strconv.ParseBool(raw) if parseErr != nil { httpx.Fail(c, parseErr.Error()) return } filter.Status = &value } if raw, exists := c.GetQuery("parentID"); exists { value, parseErr := strconv.ParseUint(raw, 10, 64) if parseErr != nil { httpx.Fail(c, parseErr.Error()) return } parentID := uint(value) filter.ParentID = &parentID } if raw, exists := c.GetQuery("level"); exists { value, parseErr := strconv.Atoi(raw) if parseErr != nil { httpx.Fail(c, parseErr.Error()) return } filter.Level = &value } items, total, err := h.service.DictionaryDetails(c.Request.Context(), p, size, filter) if err != nil { httpx.Fail(c, "获取失败") return } httpx.Write(c, httpx.CodeSuccess, httpx.PageResult{List: items, Total: total, Page: p, PageSize: size}, "获取成功") } func (h *Dictionary) Tree(byType bool) gin.HandlerFunc { return func(c *gin.Context) { id, _ := strconv.ParseUint(c.Query("sysDictionaryID"), 10, 64) typ := "" if byType { typ = c.Query("type") } items, err := h.service.DictionaryTree(c.Request.Context(), uint(id), typ) if err != nil { httpx.Fail(c, "获取失败") return } httpx.Write(c, httpx.CodeSuccess, items, "获取成功") } } func (h *Dictionary) DetailsByParent(c *gin.Context) { parentID, _ := strconv.ParseUint(c.Query("parentID"), 10, 64) dictionaryID, _ := strconv.ParseUint(c.Query("sysDictionaryID"), 10, 64) items, err := h.service.DictionaryDetailsByParent(c.Request.Context(), uint(dictionaryID), uint(parentID)) if err != nil { httpx.Fail(c, "获取失败") return } httpx.Write(c, httpx.CodeSuccess, items, "获取成功") } func (h *Dictionary) Path(c *gin.Context) { id, _ := strconv.ParseUint(c.Query("ID"), 10, 64) item, err := h.service.DictionaryDetail(c.Request.Context(), uint(id)) if err != nil { httpx.Fail(c, "获取失败") return } httpx.Write(c, httpx.CodeSuccess, gin.H{"path": item["path"]}, "获取成功") }