package controllers import ( "encoding/json" "server/models" "server/services" "strconv" "github.com/beego/beego/v2/server/web" ) // DictController 字典管理控制器 type DictController struct { web.Controller } // GetDictTypes 获取字典类型列表 func (c *DictController) GetDictTypes() { // 获取租户ID tenantIdData := c.Ctx.Input.GetData("tenantId") tenantId := 0 if tenantIdData != nil { if tid, ok := tenantIdData.(int); ok { tenantId = tid } } // 获取用户ID userIdData := c.Ctx.Input.GetData("userId") userId := 0 if userIdData != nil { if uid, ok := userIdData.(int); ok { userId = uid } } parentId, _ := c.GetInt("parent_id", -1) statusStr := c.GetString("status") var status *int8 if statusStr != "" { s, _ := strconv.ParseInt(statusStr, 10, 8) statusVal := int8(s) status = &statusVal } dictTypes, err := services.GetDictTypes(tenantId, userId, parentId, status) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": "查询字典类型失败: " + err.Error(), } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "data": dictTypes, } c.ServeJSON() } // GetDictTypeById 根据ID获取字典类型 func (c *DictController) GetDictTypeById() { idStr := c.Ctx.Input.Param(":id") id, err := strconv.Atoi(idStr) if err != nil || id <= 0 { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数错误", } c.ServeJSON() return } dictType, err := services.GetDictTypeById(id) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": "字典类型不存在", } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "data": dictType, } c.ServeJSON() } // AddDictType 添加字典类型 func (c *DictController) AddDictType() { var dictType models.DictType if err := json.Unmarshal(c.Ctx.Input.RequestBody, &dictType); err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数解析失败: " + err.Error(), } c.ServeJSON() return } // 获取租户ID和用户名 tenantIdData := c.Ctx.Input.GetData("tenantId") tenantId := 0 if tenantIdData != nil { if tid, ok := tenantIdData.(int); ok { tenantId = tid } } usernameData := c.Ctx.Input.GetData("username") username := "" if usernameData != nil { if u, ok := usernameData.(string); ok { username = u } } userIdData := c.Ctx.Input.GetData("userId") userId := 0 if userIdData != nil { if uid, ok := userIdData.(int); ok { userId = uid } } // 设置租户ID和创建人 dictType.TenantId = tenantId dictType.CreateBy = username if dictType.Status == 0 { dictType.Status = 1 // 默认启用 } // 根据用户角色设置是否全局展示 // system_admin 和 admin 角色默认是全局,其他角色默认是租户私有 dictType.IsGlobal = 0 // 默认为租户私有 if userId > 0 { // 获取用户的角色信息 roleCode, err := services.GetUserRoleCode(userId) if err == nil && (roleCode == "system_admin" || roleCode == "admin") { dictType.IsGlobal = 1 // system_admin 和 admin 角色默认全局 } } id, err := services.AddDictType(&dictType) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": err.Error(), } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "message": "添加成功", "data": map[string]interface{}{"id": id}, } c.ServeJSON() } // UpdateDictType 更新字典类型 func (c *DictController) UpdateDictType() { idStr := c.Ctx.Input.Param(":id") id, err := strconv.Atoi(idStr) if err != nil || id <= 0 { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数错误", } c.ServeJSON() return } var dictType models.DictType if err := json.Unmarshal(c.Ctx.Input.RequestBody, &dictType); err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数解析失败: " + err.Error(), } c.ServeJSON() return } // 获取用户名 usernameData := c.Ctx.Input.GetData("username") username := "" if usernameData != nil { if u, ok := usernameData.(string); ok { username = u } } dictType.Id = id dictType.UpdateBy = username err = services.UpdateDictType(&dictType) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": err.Error(), } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "message": "更新成功", } c.ServeJSON() } // DeleteDictType 删除字典类型 func (c *DictController) DeleteDictType() { idStr := c.Ctx.Input.Param(":id") id, err := strconv.Atoi(idStr) if err != nil || id <= 0 { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数错误", } c.ServeJSON() return } // 获取租户ID tenantIdData := c.Ctx.Input.GetData("tenantId") tenantId := 0 if tenantIdData != nil { if tid, ok := tenantIdData.(int); ok { tenantId = tid } } err = services.DeleteDictType(id, tenantId) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": err.Error(), } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "message": "删除成功", } c.ServeJSON() } // GetDictItems 获取字典项列表 func (c *DictController) GetDictItems() { dictTypeId, _ := c.GetInt("dict_type_id", 0) if dictTypeId <= 0 { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数错误:dict_type_id 必填", } c.ServeJSON() return } parentIdStr := c.GetString("parent_id") statusStr := c.GetString("status") var parentId *int if parentIdStr != "" { pid, _ := strconv.Atoi(parentIdStr) parentId = &pid } var status *int8 if statusStr != "" { s, _ := strconv.ParseInt(statusStr, 10, 8) statusVal := int8(s) status = &statusVal } dictItems, err := services.GetDictItems(dictTypeId, parentId, status) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": "查询字典项失败: " + err.Error(), } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "data": dictItems, } c.ServeJSON() } // GetDictItemById 根据ID获取字典项 func (c *DictController) GetDictItemById() { idStr := c.Ctx.Input.Param(":id") id, err := strconv.Atoi(idStr) if err != nil || id <= 0 { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数错误", } c.ServeJSON() return } dictItem, err := services.GetDictItemById(id) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": "字典项不存在", } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "data": dictItem, } c.ServeJSON() } // AddDictItem 添加字典项 func (c *DictController) AddDictItem() { var dictItem models.DictItem if err := json.Unmarshal(c.Ctx.Input.RequestBody, &dictItem); err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数解析失败: " + err.Error(), } c.ServeJSON() return } if dictItem.DictTypeId <= 0 { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数错误:dict_type_id 必填", } c.ServeJSON() return } // 获取用户名 usernameData := c.Ctx.Input.GetData("username") username := "" if usernameData != nil { if u, ok := usernameData.(string); ok { username = u } } // 设置创建人 dictItem.CreateBy = username if dictItem.Status == 0 { dictItem.Status = 1 // 默认启用 } id, err := services.AddDictItem(&dictItem) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": err.Error(), } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "message": "添加成功", "data": map[string]interface{}{"id": id}, } c.ServeJSON() } // UpdateDictItem 更新字典项 func (c *DictController) UpdateDictItem() { idStr := c.Ctx.Input.Param(":id") id, err := strconv.Atoi(idStr) if err != nil || id <= 0 { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数错误", } c.ServeJSON() return } var dictItem models.DictItem if err := json.Unmarshal(c.Ctx.Input.RequestBody, &dictItem); err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数解析失败: " + err.Error(), } c.ServeJSON() return } // 获取用户名 usernameData := c.Ctx.Input.GetData("username") username := "" if usernameData != nil { if u, ok := usernameData.(string); ok { username = u } } dictItem.Id = id dictItem.UpdateBy = username err = services.UpdateDictItem(&dictItem) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": err.Error(), } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "message": "更新成功", } c.ServeJSON() } // DeleteDictItem 删除字典项 func (c *DictController) DeleteDictItem() { idStr := c.Ctx.Input.Param(":id") id, err := strconv.Atoi(idStr) if err != nil || id <= 0 { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数错误", } c.ServeJSON() return } err = services.DeleteDictItem(id) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": err.Error(), } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "message": "删除成功", } c.ServeJSON() } // GetDictItemsByCode 根据字典编码获取字典项(用于业务查询) func (c *DictController) GetDictItemsByCode() { dictCode := c.Ctx.Input.Param(":code") if dictCode == "" { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数错误:code 必填", } c.ServeJSON() return } // 获取租户ID tenantIdData := c.Ctx.Input.GetData("tenantId") tenantId := 0 if tenantIdData != nil { if tid, ok := tenantIdData.(int); ok { tenantId = tid } } includeDisabled := c.GetString("include_disabled") == "1" dictItems, err := services.GetDictItemsByCode(dictCode, tenantId, includeDisabled) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": "查询字典项失败: " + err.Error(), } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "data": dictItems, } c.ServeJSON() } // BatchUpdateDictItemSort 批量更新字典项排序 func (c *DictController) BatchUpdateDictItemSort() { var items []struct { Id int `json:"id"` Sort int `json:"sort"` } if err := json.Unmarshal(c.Ctx.Input.RequestBody, &items); err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": "参数解析失败: " + err.Error(), } c.ServeJSON() return } err := services.BatchUpdateDictItemSort(items) if err != nil { c.Data["json"] = map[string]interface{}{ "success": false, "message": err.Error(), } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "success": true, "message": "更新成功", } c.ServeJSON() }