package controllers import ( "encoding/json" "fmt" "io" "strconv" "strings" "time" "server/models" "server/pkg/jwtutil" beego "github.com/beego/beego/v2/server/web" ) type PlatformComplaintCategoryController struct { beego.Controller } func (c *PlatformComplaintCategoryController) platformClaims() (*jwtutil.Claims, error) { auth := c.Ctx.Request.Header.Get("Authorization") if auth == "" { return nil, fmt.Errorf("未登录") } parts := strings.SplitN(auth, " ", 2) if len(parts) != 2 || parts[0] != "Bearer" { return nil, fmt.Errorf("认证信息格式错误") } claims, err := jwtutil.ParseToken(parts[1]) if err != nil { return nil, fmt.Errorf("无效的token") } if claims.UserType != "platform" { return nil, fmt.Errorf("无权访问") } return claims, nil } func (c *PlatformComplaintCategoryController) jsonErr(httpStatus, bizCode int, msg string) { c.Ctx.Output.SetStatus(httpStatus) c.Data["json"] = map[string]interface{}{"code": bizCode, "msg": msg} _ = c.ServeJSON() } func (c *PlatformComplaintCategoryController) ok(data interface{}) { c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success", "data": data} _ = c.ServeJSON() } // List GET /platform/complaintCategory/list func (c *PlatformComplaintCategoryController) List() { if _, err := c.platformClaims(); err != nil { c.jsonErr(401, 401, err.Error()) return } var rows []models.ComplaintCategory _, err := models.Orm.QueryTable(new(models.ComplaintCategory)). Filter("delete_time__isnull", true). OrderBy("sort", "id"). All(&rows) if err != nil { c.jsonErr(500, 500, "获取失败: "+err.Error()) return } c.ok(rows) } // SelectList GET /platform/complaintCategory/select — 仅启用,供下拉 func (c *PlatformComplaintCategoryController) SelectList() { if _, err := c.platformClaims(); err != nil { c.jsonErr(401, 401, err.Error()) return } var rows []models.ComplaintCategory _, err := models.Orm.QueryTable(new(models.ComplaintCategory)). Filter("delete_time__isnull", true). Filter("status", 1). OrderBy("sort", "id"). All(&rows) if err != nil { c.jsonErr(500, 500, "获取失败: "+err.Error()) return } c.ok(rows) } type complaintCategoryPayload struct { Name *string `json:"name"` Code *string `json:"code"` Sort *int `json:"sort"` Status *int8 `json:"status"` } // Create POST /platform/complaintCategory func (c *PlatformComplaintCategoryController) Create() { if _, err := c.platformClaims(); err != nil { c.jsonErr(401, 401, err.Error()) return } body, _ := io.ReadAll(c.Ctx.Request.Body) var p complaintCategoryPayload if err := json.Unmarshal(body, &p); err != nil || p.Name == nil || strings.TrimSpace(*p.Name) == "" { c.jsonErr(400, 400, "分类名称不能为空") return } sort := 0 if p.Sort != nil { sort = *p.Sort } st := int8(1) if p.Status != nil { st = *p.Status } row := models.ComplaintCategory{ Name: strings.TrimSpace(*p.Name), Code: p.Code, Sort: sort, Status: st, } id, err := models.Orm.Insert(&row) if err != nil { c.jsonErr(500, 500, "创建失败: "+err.Error()) return } c.ok(map[string]interface{}{"id": id}) } // Update POST /platform/complaintCategory/:id func (c *PlatformComplaintCategoryController) Update() { if _, err := c.platformClaims(); err != nil { c.jsonErr(401, 401, err.Error()) return } id, err := strconv.ParseUint(c.Ctx.Input.Param(":id"), 10, 64) if err != nil || id == 0 { c.jsonErr(400, 400, "无效ID") return } body, _ := io.ReadAll(c.Ctx.Request.Body) var p complaintCategoryPayload if err := json.Unmarshal(body, &p); err != nil { c.jsonErr(400, 400, "参数错误") return } up := map[string]interface{}{} if p.Name != nil { up["name"] = strings.TrimSpace(*p.Name) } if p.Code != nil { up["code"] = strings.TrimSpace(*p.Code) } if p.Sort != nil { up["sort"] = *p.Sort } if p.Status != nil { up["status"] = *p.Status } if len(up) == 0 { c.jsonErr(400, 400, "无更新字段") return } n, err := models.Orm.QueryTable(new(models.ComplaintCategory)). Filter("id", id). Filter("delete_time__isnull", true). Update(up) if err != nil { c.jsonErr(500, 500, "更新失败: "+err.Error()) return } if n == 0 { c.jsonErr(404, 404, "记录不存在") return } c.ok(nil) } // Delete DELETE /platform/complaintCategory/:id func (c *PlatformComplaintCategoryController) Delete() { if _, err := c.platformClaims(); err != nil { c.jsonErr(401, 401, err.Error()) return } id, err := strconv.ParseUint(c.Ctx.Input.Param(":id"), 10, 64) if err != nil || id == 0 { c.jsonErr(400, 400, "无效ID") return } now := time.Now() n, err := models.Orm.QueryTable(new(models.ComplaintCategory)). Filter("id", id). Filter("delete_time__isnull", true). Update(map[string]interface{}{"delete_time": now}) if err != nil { c.jsonErr(500, 500, "删除失败: "+err.Error()) return } if n == 0 { c.jsonErr(404, 404, "记录不存在") return } c.ok(nil) }