This commit is contained in:
sjk
2025-11-17 14:11:46 +08:00
commit ad4a600af9
1659 changed files with 171560 additions and 0 deletions

View File

@@ -0,0 +1,229 @@
package handler
import (
"dianshang/internal/service"
"dianshang/pkg/response"
"dianshang/pkg/utils"
"strconv"
"github.com/gin-gonic/gin"
)
// AdminHandler 管理员处理器
type AdminHandler struct {
adminService *service.AdminService
}
// NewAdminHandler 创建管理员处理器
func NewAdminHandler(adminService *service.AdminService) *AdminHandler {
return &AdminHandler{
adminService: adminService,
}
}
// Login 管理员登录
func (h *AdminHandler) Login(c *gin.Context) {
var req service.LoginRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "请求参数错误")
return
}
result, err := h.adminService.Login(&req)
if err != nil {
response.ErrorWithMessage(c, response.ERROR, err.Error())
return
}
response.Success(c, result)
}
// Logout 管理员退出登录
func (h *AdminHandler) Logout(c *gin.Context) {
// 由于使用JWT token服务端无状态只需要返回成功响应
// 客户端会清除本地存储的token
response.Success(c, gin.H{
"message": "退出登录成功",
})
}
// CreateAdmin 创建管理员
func (h *AdminHandler) CreateAdmin(c *gin.Context) {
var req service.CreateAdminRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "请求参数错误")
return
}
admin, err := h.adminService.CreateAdmin(&req)
if err != nil {
response.ErrorWithMessage(c, response.ERROR, err.Error())
return
}
response.Success(c, admin)
}
// GetAdminList 获取管理员列表
func (h *AdminHandler) GetAdminList(c *gin.Context) {
page := utils.StringToInt(c.DefaultQuery("page", "1"))
pageSize := utils.StringToInt(c.DefaultQuery("page_size", "10"))
keyword := c.Query("keyword")
if page <= 0 {
page = 1
}
if pageSize <= 0 || pageSize > 100 {
pageSize = 10
}
admins, total, err := h.adminService.GetAdminList(page, pageSize, keyword)
if err != nil {
response.ErrorWithMessage(c, response.ERROR, err.Error())
return
}
// 构建分页响应
pagination := utils.NewPagination(page, pageSize)
pagination.Total = total
response.Success(c, gin.H{
"list": admins,
"pagination": pagination,
})
}
// GetAdminDetail 获取管理员详情
func (h *AdminHandler) GetAdminDetail(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.ParseUint(idStr, 10, 32)
if err != nil {
response.BadRequest(c, "无效的管理员ID")
return
}
admin, err := h.adminService.GetAdminByID(uint(id))
if err != nil {
response.ErrorWithMessage(c, response.ERROR, "管理员不存在")
return
}
response.Success(c, admin)
}
// UpdateAdmin 更新管理员
func (h *AdminHandler) UpdateAdmin(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.ParseUint(idStr, 10, 32)
if err != nil {
response.BadRequest(c, "无效的管理员ID")
return
}
var req service.UpdateAdminRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "请求参数错误")
return
}
if err := h.adminService.UpdateAdmin(uint(id), &req); err != nil {
response.ErrorWithMessage(c, response.ERROR, err.Error())
return
}
response.Success(c, nil)
}
// DeleteAdmin 删除管理员
func (h *AdminHandler) DeleteAdmin(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.ParseUint(idStr, 10, 32)
if err != nil {
response.BadRequest(c, "无效的管理员ID")
return
}
// 获取当前管理员ID防止删除自己
currentAdminID, exists := c.Get("user_id")
if exists && currentAdminID.(uint) == uint(id) {
response.BadRequest(c, "不能删除自己")
return
}
if err := h.adminService.DeleteAdmin(uint(id)); err != nil {
response.ErrorWithMessage(c, response.ERROR, err.Error())
return
}
response.Success(c, nil)
}
// ChangePassword 修改密码
func (h *AdminHandler) ChangePassword(c *gin.Context) {
var req struct {
OldPassword string `json:"old_password" binding:"required"`
NewPassword string `json:"new_password" binding:"required,min=6"`
}
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "请求参数错误")
return
}
adminID, exists := c.Get("user_id")
if !exists {
response.Unauthorized(c)
return
}
if err := h.adminService.ChangePassword(adminID.(uint), req.OldPassword, req.NewPassword); err != nil {
response.ErrorWithMessage(c, response.ERROR, err.Error())
return
}
response.Success(c, nil)
}
// GetProfile 获取管理员个人信息
func (h *AdminHandler) GetProfile(c *gin.Context) {
adminID, exists := c.Get("user_id")
if !exists {
response.Unauthorized(c)
return
}
admin, err := h.adminService.GetProfile(adminID.(uint))
if err != nil {
response.ErrorWithMessage(c, response.ERROR, err.Error())
return
}
response.Success(c, admin)
}
// UpdateProfile 更新管理员个人信息
func (h *AdminHandler) UpdateProfile(c *gin.Context) {
var req struct {
Nickname string `json:"nickname"`
Email string `json:"email"`
Phone string `json:"phone"`
}
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "请求参数错误")
return
}
adminID, exists := c.Get("user_id")
if !exists {
response.Unauthorized(c)
return
}
if err := h.adminService.UpdateProfile(adminID.(uint), req.Nickname, req.Email, req.Phone); err != nil {
response.ErrorWithMessage(c, response.ERROR, err.Error())
return
}
response.Success(c, nil)
}