362 lines
12 KiB
Go
362 lines
12 KiB
Go
package system
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"kra/internal/biz/system"
|
|
"kra/pkg/response"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type DictionaryDetailApi struct{}
|
|
|
|
// DictionaryDetailRequest 字典详情请求
|
|
type DictionaryDetailRequest struct {
|
|
ID uint `json:"id"`
|
|
Label string `json:"label"`
|
|
Value string `json:"value"`
|
|
Extend string `json:"extend"`
|
|
Status *bool `json:"status"`
|
|
Sort int `json:"sort"`
|
|
SysDictionaryID uint `json:"sysDictionaryID"`
|
|
ParentID *uint `json:"parentId"`
|
|
}
|
|
|
|
// DictionaryDetailSearchRequest 字典详情搜索请求
|
|
type DictionaryDetailSearchRequest struct {
|
|
Page int `json:"page" form:"page"`
|
|
PageSize int `json:"pageSize" form:"pageSize"`
|
|
Label string `json:"label" form:"label"`
|
|
Value string `json:"value" form:"value"`
|
|
Status *bool `json:"status" form:"status"`
|
|
SysDictionaryID uint `json:"sysDictionaryID" form:"sysDictionaryID"`
|
|
ParentID *uint `json:"parentId" form:"parentId"`
|
|
Level *int `json:"level" form:"level"`
|
|
}
|
|
|
|
// GetDictionaryDetailsByParentRequest 根据父级获取字典详情请求
|
|
type GetDictionaryDetailsByParentRequest struct {
|
|
SysDictionaryID uint `json:"sysDictionaryID" form:"sysDictionaryID" binding:"required"`
|
|
ParentID *uint `json:"parentId" form:"parentId"`
|
|
IncludeChildren bool `json:"includeChildren" form:"includeChildren"`
|
|
}
|
|
|
|
// CreateSysDictionaryDetail
|
|
// @Tags SysDictionaryDetail
|
|
// @Summary 创建SysDictionaryDetail
|
|
// @Security ApiKeyAuth
|
|
// @accept application/json
|
|
// @Produce application/json
|
|
// @Param data body DictionaryDetailRequest true "SysDictionaryDetail模型"
|
|
// @Success 200 {object} response.Response{msg=string} "创建SysDictionaryDetail"
|
|
// @Router /sysDictionaryDetail/createSysDictionaryDetail [post]
|
|
func (d *DictionaryDetailApi) CreateSysDictionaryDetail(c *gin.Context) {
|
|
var req DictionaryDetailRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
detail := &system.DictionaryDetail{
|
|
Label: req.Label,
|
|
Value: req.Value,
|
|
Extend: req.Extend,
|
|
Status: req.Status,
|
|
Sort: req.Sort,
|
|
SysDictionaryID: req.SysDictionaryID,
|
|
ParentID: req.ParentID,
|
|
}
|
|
|
|
if err := dictionaryUsecase.CreateDictionaryDetail(c.Request.Context(), detail); err != nil {
|
|
response.FailWithMessage("创建失败:"+err.Error(), c)
|
|
return
|
|
}
|
|
response.OkWithMessage("创建成功", c)
|
|
}
|
|
|
|
// DeleteSysDictionaryDetail
|
|
// @Tags SysDictionaryDetail
|
|
// @Summary 删除SysDictionaryDetail
|
|
// @Security ApiKeyAuth
|
|
// @accept application/json
|
|
// @Produce application/json
|
|
// @Param data body DictionaryDetailRequest true "SysDictionaryDetail模型"
|
|
// @Success 200 {object} response.Response{msg=string} "删除SysDictionaryDetail"
|
|
// @Router /sysDictionaryDetail/deleteSysDictionaryDetail [delete]
|
|
func (d *DictionaryDetailApi) DeleteSysDictionaryDetail(c *gin.Context) {
|
|
var req DictionaryDetailRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
if err := dictionaryUsecase.DeleteDictionaryDetail(c.Request.Context(), req.ID); err != nil {
|
|
response.FailWithMessage("删除失败:"+err.Error(), c)
|
|
return
|
|
}
|
|
response.OkWithMessage("删除成功", c)
|
|
}
|
|
|
|
// UpdateSysDictionaryDetail
|
|
// @Tags SysDictionaryDetail
|
|
// @Summary 更新SysDictionaryDetail
|
|
// @Security ApiKeyAuth
|
|
// @accept application/json
|
|
// @Produce application/json
|
|
// @Param data body DictionaryDetailRequest true "更新SysDictionaryDetail"
|
|
// @Success 200 {object} response.Response{msg=string} "更新SysDictionaryDetail"
|
|
// @Router /sysDictionaryDetail/updateSysDictionaryDetail [put]
|
|
func (d *DictionaryDetailApi) UpdateSysDictionaryDetail(c *gin.Context) {
|
|
var req DictionaryDetailRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
response.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
detail := &system.DictionaryDetail{
|
|
ID: req.ID,
|
|
Label: req.Label,
|
|
Value: req.Value,
|
|
Extend: req.Extend,
|
|
Status: req.Status,
|
|
Sort: req.Sort,
|
|
SysDictionaryID: req.SysDictionaryID,
|
|
ParentID: req.ParentID,
|
|
}
|
|
|
|
if err := dictionaryUsecase.UpdateDictionaryDetail(c.Request.Context(), detail); err != nil {
|
|
response.FailWithMessage("更新失败:"+err.Error(), c)
|
|
return
|
|
}
|
|
response.OkWithMessage("更新成功", c)
|
|
}
|
|
|
|
// FindSysDictionaryDetail
|
|
// @Tags SysDictionaryDetail
|
|
// @Summary 用id查询SysDictionaryDetail
|
|
// @Security ApiKeyAuth
|
|
// @accept application/json
|
|
// @Produce application/json
|
|
// @Param ID query string true "用id查询SysDictionaryDetail"
|
|
// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "用id查询SysDictionaryDetail"
|
|
// @Router /sysDictionaryDetail/findSysDictionaryDetail [get]
|
|
func (d *DictionaryDetailApi) FindSysDictionaryDetail(c *gin.Context) {
|
|
idStr := c.Query("ID")
|
|
if idStr == "" {
|
|
response.FailWithMessage("缺少参数: ID", c)
|
|
return
|
|
}
|
|
id, _ := strconv.ParseUint(idStr, 10, 32)
|
|
|
|
detail, err := dictionaryUsecase.GetDictionaryDetail(c.Request.Context(), uint(id))
|
|
if err != nil {
|
|
response.FailWithMessage("查询失败:"+err.Error(), c)
|
|
return
|
|
}
|
|
response.OkWithDetailed(gin.H{"reSysDictionaryDetail": toDictionaryDetailResponse(detail)}, "查询成功", c)
|
|
}
|
|
|
|
// GetSysDictionaryDetailList
|
|
// @Tags SysDictionaryDetail
|
|
// @Summary 分页获取SysDictionaryDetail列表
|
|
// @Security ApiKeyAuth
|
|
// @accept application/json
|
|
// @Produce application/json
|
|
// @Param data query DictionaryDetailSearchRequest true "页码, 每页大小, 搜索条件"
|
|
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "分页获取SysDictionaryDetail列表,返回包括列表,总数,页码,每页数量"
|
|
// @Router /sysDictionaryDetail/getSysDictionaryDetailList [get]
|
|
func (d *DictionaryDetailApi) GetSysDictionaryDetailList(c *gin.Context) {
|
|
var req DictionaryDetailSearchRequest
|
|
if err := c.ShouldBindQuery(&req); err != nil {
|
|
response.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
if req.Page == 0 {
|
|
req.Page = 1
|
|
}
|
|
if req.PageSize == 0 {
|
|
req.PageSize = 10
|
|
}
|
|
|
|
filters := make(map[string]interface{})
|
|
if req.Label != "" {
|
|
filters["label"] = req.Label
|
|
}
|
|
if req.Value != "" {
|
|
filters["value"] = req.Value
|
|
}
|
|
if req.Status != nil {
|
|
filters["status"] = req.Status
|
|
}
|
|
if req.SysDictionaryID != 0 {
|
|
filters["sysDictionaryID"] = req.SysDictionaryID
|
|
}
|
|
if req.ParentID != nil {
|
|
filters["parentId"] = req.ParentID
|
|
}
|
|
if req.Level != nil {
|
|
filters["level"] = req.Level
|
|
}
|
|
|
|
list, total, err := dictionaryUsecase.GetDictionaryDetailList(c.Request.Context(), req.Page, req.PageSize, filters)
|
|
if err != nil {
|
|
response.FailWithMessage("获取失败:"+err.Error(), c)
|
|
return
|
|
}
|
|
|
|
result := make([]map[string]interface{}, len(list))
|
|
for i, item := range list {
|
|
result[i] = toDictionaryDetailResponse(item)
|
|
}
|
|
|
|
response.OkWithDetailed(response.PageResult{
|
|
List: result,
|
|
Total: total,
|
|
Page: req.Page,
|
|
PageSize: req.PageSize,
|
|
}, "获取成功", c)
|
|
}
|
|
|
|
// GetDictionaryTreeList
|
|
// @Tags SysDictionaryDetail
|
|
// @Summary 获取字典详情树形结构
|
|
// @Security ApiKeyAuth
|
|
// @accept application/json
|
|
// @Produce application/json
|
|
// @Param sysDictionaryID query int true "字典ID"
|
|
// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "获取字典详情树形结构"
|
|
// @Router /sysDictionaryDetail/getDictionaryTreeList [get]
|
|
func (d *DictionaryDetailApi) GetDictionaryTreeList(c *gin.Context) {
|
|
sysDictionaryID := c.Query("sysDictionaryID")
|
|
if sysDictionaryID == "" {
|
|
response.FailWithMessage("字典ID不能为空", c)
|
|
return
|
|
}
|
|
|
|
id, err := strconv.ParseUint(sysDictionaryID, 10, 32)
|
|
if err != nil {
|
|
response.FailWithMessage("字典ID格式错误", c)
|
|
return
|
|
}
|
|
|
|
list, err := dictionaryUsecase.GetDictionaryTreeList(c.Request.Context(), uint(id))
|
|
if err != nil {
|
|
response.FailWithMessage("获取失败:"+err.Error(), c)
|
|
return
|
|
}
|
|
response.OkWithDetailed(gin.H{"list": toDictionaryDetailTreeResponse(list)}, "获取成功", c)
|
|
}
|
|
|
|
// GetDictionaryTreeListByType
|
|
// @Tags SysDictionaryDetail
|
|
// @Summary 根据字典类型获取字典详情树形结构
|
|
// @Security ApiKeyAuth
|
|
// @accept application/json
|
|
// @Produce application/json
|
|
// @Param type query string true "字典类型"
|
|
// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "获取字典详情树形结构"
|
|
// @Router /sysDictionaryDetail/getDictionaryTreeListByType [get]
|
|
func (d *DictionaryDetailApi) GetDictionaryTreeListByType(c *gin.Context) {
|
|
dictType := c.Query("type")
|
|
if dictType == "" {
|
|
response.FailWithMessage("字典类型不能为空", c)
|
|
return
|
|
}
|
|
|
|
list, err := dictionaryUsecase.GetDictionaryTreeListByType(c.Request.Context(), dictType)
|
|
if err != nil {
|
|
response.FailWithMessage("获取失败:"+err.Error(), c)
|
|
return
|
|
}
|
|
response.OkWithDetailed(gin.H{"list": toDictionaryDetailTreeResponse(list)}, "获取成功", c)
|
|
}
|
|
|
|
// GetDictionaryDetailsByParent
|
|
// @Tags SysDictionaryDetail
|
|
// @Summary 根据父级ID获取字典详情
|
|
// @Security ApiKeyAuth
|
|
// @accept application/json
|
|
// @Produce application/json
|
|
// @Param data query GetDictionaryDetailsByParentRequest true "查询参数"
|
|
// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "获取字典详情列表"
|
|
// @Router /sysDictionaryDetail/getDictionaryDetailsByParent [get]
|
|
func (d *DictionaryDetailApi) GetDictionaryDetailsByParent(c *gin.Context) {
|
|
var req GetDictionaryDetailsByParentRequest
|
|
if err := c.ShouldBindQuery(&req); err != nil {
|
|
response.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
list, err := dictionaryUsecase.GetDictionaryDetailsByParent(c.Request.Context(), req.SysDictionaryID, req.ParentID, req.IncludeChildren)
|
|
if err != nil {
|
|
response.FailWithMessage("获取失败:"+err.Error(), c)
|
|
return
|
|
}
|
|
response.OkWithDetailed(gin.H{"list": toDictionaryDetailTreeResponse(list)}, "获取成功", c)
|
|
}
|
|
|
|
// GetDictionaryPath
|
|
// @Tags SysDictionaryDetail
|
|
// @Summary 获取字典详情的完整路径
|
|
// @Security ApiKeyAuth
|
|
// @accept application/json
|
|
// @Produce application/json
|
|
// @Param id query uint true "字典详情ID"
|
|
// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "获取字典详情路径"
|
|
// @Router /sysDictionaryDetail/getDictionaryPath [get]
|
|
func (d *DictionaryDetailApi) GetDictionaryPath(c *gin.Context) {
|
|
idStr := c.Query("id")
|
|
if idStr == "" {
|
|
response.FailWithMessage("字典详情ID不能为空", c)
|
|
return
|
|
}
|
|
|
|
id, err := strconv.ParseUint(idStr, 10, 32)
|
|
if err != nil {
|
|
response.FailWithMessage("字典详情ID格式错误", c)
|
|
return
|
|
}
|
|
|
|
path, err := dictionaryUsecase.GetDictionaryPath(c.Request.Context(), uint(id))
|
|
if err != nil {
|
|
response.FailWithMessage("获取失败:"+err.Error(), c)
|
|
return
|
|
}
|
|
|
|
result := make([]map[string]interface{}, len(path))
|
|
for i, item := range path {
|
|
result[i] = toDictionaryDetailResponse(item)
|
|
}
|
|
response.OkWithDetailed(gin.H{"path": result}, "获取成功", c)
|
|
}
|
|
|
|
func toDictionaryDetailResponse(d *system.DictionaryDetail) map[string]interface{} {
|
|
return map[string]interface{}{
|
|
"id": d.ID,
|
|
"label": d.Label,
|
|
"value": d.Value,
|
|
"extend": d.Extend,
|
|
"status": d.Status,
|
|
"sort": d.Sort,
|
|
"sysDictionaryID": d.SysDictionaryID,
|
|
"parentId": d.ParentID,
|
|
"level": d.Level,
|
|
"path": d.Path,
|
|
"disabled": d.Disabled,
|
|
}
|
|
}
|
|
|
|
func toDictionaryDetailTreeResponse(list []*system.DictionaryDetail) []map[string]interface{} {
|
|
result := make([]map[string]interface{}, len(list))
|
|
for i, item := range list {
|
|
resp := toDictionaryDetailResponse(item)
|
|
if len(item.Children) > 0 {
|
|
resp["children"] = toDictionaryDetailTreeResponse(item.Children)
|
|
}
|
|
result[i] = resp
|
|
}
|
|
return result
|
|
}
|