558 lines
13 KiB
Go
558 lines
13 KiB
Go
|
|
package handler
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"dianshang/internal/service"
|
|||
|
|
"dianshang/pkg/response"
|
|||
|
|
"dianshang/pkg/utils"
|
|||
|
|
"strconv"
|
|||
|
|
"time"
|
|||
|
|
|
|||
|
|
"github.com/gin-gonic/gin"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// AdminUserHandler 管理后台用户处理器
|
|||
|
|
type AdminUserHandler struct {
|
|||
|
|
userService *service.UserService
|
|||
|
|
orderService *service.OrderService
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// NewAdminUserHandler 创建管理后台用户处理器
|
|||
|
|
func NewAdminUserHandler(userService *service.UserService, orderService *service.OrderService) *AdminUserHandler {
|
|||
|
|
return &AdminUserHandler{
|
|||
|
|
userService: userService,
|
|||
|
|
orderService: orderService,
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetUserList 获取用户列表
|
|||
|
|
func (h *AdminUserHandler) GetUserList(c *gin.Context) {
|
|||
|
|
page := utils.StringToInt(c.DefaultQuery("page", "1"))
|
|||
|
|
// 支持两种参数名:size 和 page_size
|
|||
|
|
pageSize := utils.StringToInt(c.DefaultQuery("size", c.DefaultQuery("page_size", "10")))
|
|||
|
|
keyword := c.Query("keyword")
|
|||
|
|
status := c.Query("status")
|
|||
|
|
// 支持两种参数名:startDate/start_date 和 endDate/end_date
|
|||
|
|
startDate := c.Query("startDate")
|
|||
|
|
if startDate == "" {
|
|||
|
|
startDate = c.Query("start_date")
|
|||
|
|
}
|
|||
|
|
endDate := c.Query("endDate")
|
|||
|
|
if endDate == "" {
|
|||
|
|
endDate = c.Query("end_date")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if page <= 0 {
|
|||
|
|
page = 1
|
|||
|
|
}
|
|||
|
|
if pageSize <= 0 || pageSize > 100 {
|
|||
|
|
pageSize = 10
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 构建查询条件
|
|||
|
|
conditions := make(map[string]interface{})
|
|||
|
|
if keyword != "" {
|
|||
|
|
conditions["keyword"] = keyword
|
|||
|
|
}
|
|||
|
|
if status != "" {
|
|||
|
|
conditions["status"] = status
|
|||
|
|
}
|
|||
|
|
if startDate != "" {
|
|||
|
|
conditions["start_date"] = startDate
|
|||
|
|
}
|
|||
|
|
if endDate != "" {
|
|||
|
|
conditions["end_date"] = endDate
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
users, pagination, err := h.userService.GetUserListForAdmin(page, pageSize, conditions)
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, gin.H{
|
|||
|
|
"list": users,
|
|||
|
|
"total": pagination["total"],
|
|||
|
|
"page": pagination["page"],
|
|||
|
|
"page_size": pagination["page_size"],
|
|||
|
|
"total_pages": pagination["total_pages"],
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetUserDetail 获取用户详情
|
|||
|
|
func (h *AdminUserHandler) GetUserDetail(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
id, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
user, err := h.userService.GetUserDetailForAdmin(uint(id))
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, "用户不存在")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, user)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// UpdateUserStatus 更新用户状态
|
|||
|
|
func (h *AdminUserHandler) UpdateUserStatus(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
id, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var req struct {
|
|||
|
|
Status *uint8 `json:"status" binding:"required"`
|
|||
|
|
Remark string `json:"remark"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
|
response.BadRequest(c, "请求参数错误")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取管理员ID
|
|||
|
|
adminID := uint(0)
|
|||
|
|
if id, exists := c.Get("user_id"); exists {
|
|||
|
|
adminID = id.(uint)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := h.userService.UpdateUserStatusByAdmin(uint(id), *req.Status, req.Remark, adminID); err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, nil)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// BatchUpdateUserStatus 批量更新用户状态
|
|||
|
|
func (h *AdminUserHandler) BatchUpdateUserStatus(c *gin.Context) {
|
|||
|
|
var req struct {
|
|||
|
|
UserIDs []uint `json:"user_ids" binding:"required"`
|
|||
|
|
Status uint8 `json:"status" binding:"required"`
|
|||
|
|
Remark string `json:"remark"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
|
response.BadRequest(c, "请求参数错误")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取管理员ID
|
|||
|
|
adminID := uint(0)
|
|||
|
|
if id, exists := c.Get("user_id"); exists {
|
|||
|
|
adminID = id.(uint)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 批量更新用户状态
|
|||
|
|
for _, userID := range req.UserIDs {
|
|||
|
|
if err := h.userService.UpdateUserStatusByAdmin(userID, req.Status, req.Remark, adminID); err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, "批量更新用户状态失败")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, nil)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetUserStatistics 获取用户统计
|
|||
|
|
func (h *AdminUserHandler) GetUserStatistics(c *gin.Context) {
|
|||
|
|
startDate := c.Query("start_date")
|
|||
|
|
endDate := c.Query("end_date")
|
|||
|
|
|
|||
|
|
// 如果没有提供日期,默认查询最近30天
|
|||
|
|
if startDate == "" || endDate == "" {
|
|||
|
|
now := time.Now()
|
|||
|
|
endDate = now.Format("2006-01-02")
|
|||
|
|
startDate = now.AddDate(0, 0, -30).Format("2006-01-02")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
stats, err := h.userService.GetUserStatistics(startDate, endDate)
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, stats)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetUserOrders 获取用户订单列表
|
|||
|
|
func (h *AdminUserHandler) GetUserOrders(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
userID, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
page := utils.StringToInt(c.DefaultQuery("page", "1"))
|
|||
|
|
pageSize := utils.StringToInt(c.DefaultQuery("page_size", "10"))
|
|||
|
|
|
|||
|
|
if page <= 0 {
|
|||
|
|
page = 1
|
|||
|
|
}
|
|||
|
|
if pageSize <= 0 || pageSize > 100 {
|
|||
|
|
pageSize = 10
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取状态参数,默认为0(所有状态)
|
|||
|
|
status := utils.StringToInt(c.DefaultQuery("status", "0"))
|
|||
|
|
|
|||
|
|
orders, pagination, err := h.orderService.GetUserOrders(uint(userID), status, page, pageSize)
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, gin.H{
|
|||
|
|
"list": orders,
|
|||
|
|
"pagination": pagination,
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetUserOrderStatistics 获取用户订单统计
|
|||
|
|
func (h *AdminUserHandler) GetUserOrderStatistics(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
userID, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
stats, err := h.orderService.GetUserOrderStatistics(uint(userID))
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, stats)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetUserAddresses 获取用户地址列表
|
|||
|
|
func (h *AdminUserHandler) GetUserAddresses(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
userID, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
addresses, err := h.userService.GetUserAddresses(uint(userID))
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, addresses)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetUserFavorites 获取用户收藏列表
|
|||
|
|
func (h *AdminUserHandler) GetUserFavorites(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
userID, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
page := utils.StringToInt(c.DefaultQuery("page", "1"))
|
|||
|
|
pageSize := utils.StringToInt(c.DefaultQuery("page_size", "10"))
|
|||
|
|
|
|||
|
|
if page <= 0 {
|
|||
|
|
page = 1
|
|||
|
|
}
|
|||
|
|
if pageSize <= 0 || pageSize > 100 {
|
|||
|
|
pageSize = 10
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
favorites, pagination, err := h.userService.GetUserFavorites(uint(userID), page, pageSize)
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, gin.H{
|
|||
|
|
"list": favorites,
|
|||
|
|
"pagination": pagination,
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ResetUserPassword 重置用户密码
|
|||
|
|
func (h *AdminUserHandler) ResetUserPassword(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
id, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var req struct {
|
|||
|
|
NewPassword string `json:"new_password" binding:"required,min=6"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
|
response.BadRequest(c, "请求参数错误")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取管理员ID
|
|||
|
|
adminID := uint(0)
|
|||
|
|
if id, exists := c.Get("user_id"); exists {
|
|||
|
|
adminID = id.(uint)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := h.userService.ResetUserPasswordByAdmin(uint(id), req.NewPassword, adminID); err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, nil)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ExportUsers 导出用户数据
|
|||
|
|
func (h *AdminUserHandler) ExportUsers(c *gin.Context) {
|
|||
|
|
startDate := c.Query("start_date")
|
|||
|
|
endDate := c.Query("end_date")
|
|||
|
|
status := c.Query("status")
|
|||
|
|
keyword := c.Query("keyword")
|
|||
|
|
|
|||
|
|
// 构建查询条件
|
|||
|
|
conditions := make(map[string]interface{})
|
|||
|
|
if status != "" {
|
|||
|
|
conditions["status"] = status
|
|||
|
|
}
|
|||
|
|
if keyword != "" {
|
|||
|
|
conditions["keyword"] = keyword
|
|||
|
|
}
|
|||
|
|
if startDate != "" {
|
|||
|
|
conditions["start_date"] = startDate
|
|||
|
|
}
|
|||
|
|
if endDate != "" {
|
|||
|
|
conditions["end_date"] = endDate
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取所有符合条件的用户(不分页)
|
|||
|
|
users, _, err := h.userService.GetUserListForAdmin(1, 10000, conditions)
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 设置响应头
|
|||
|
|
c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
|||
|
|
c.Header("Content-Disposition", "attachment; filename=users_"+time.Now().Format("20060102150405")+".xlsx")
|
|||
|
|
|
|||
|
|
// 简单的CSV格式导出
|
|||
|
|
csvData := "用户ID,昵称,手机号,邮箱,状态,注册时间\n"
|
|||
|
|
for _, user := range users {
|
|||
|
|
csvData += strconv.Itoa(int(user.ID)) + "," +
|
|||
|
|
user.Nickname + "," +
|
|||
|
|
user.Phone + "," +
|
|||
|
|
user.Email + "," +
|
|||
|
|
strconv.Itoa(int(user.Status)) + "," +
|
|||
|
|
user.CreatedAt.Format("2006-01-02 15:04:05") + "\n"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
c.String(200, csvData)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// UpdateUserProfile 更新用户资料
|
|||
|
|
func (h *AdminUserHandler) UpdateUserProfile(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
id, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var req struct {
|
|||
|
|
Nickname string `json:"nickname"`
|
|||
|
|
Avatar string `json:"avatar"`
|
|||
|
|
Gender int `json:"gender"`
|
|||
|
|
Phone string `json:"phone"`
|
|||
|
|
Email string `json:"email"`
|
|||
|
|
Birthday string `json:"birthday"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
|
response.BadRequest(c, "请求参数错误")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 构建更新数据
|
|||
|
|
updates := make(map[string]interface{})
|
|||
|
|
if req.Nickname != "" {
|
|||
|
|
updates["nickname"] = req.Nickname
|
|||
|
|
}
|
|||
|
|
if req.Avatar != "" {
|
|||
|
|
updates["avatar"] = req.Avatar
|
|||
|
|
}
|
|||
|
|
if req.Gender != 0 {
|
|||
|
|
updates["gender"] = req.Gender
|
|||
|
|
}
|
|||
|
|
if req.Phone != "" {
|
|||
|
|
updates["phone"] = req.Phone
|
|||
|
|
}
|
|||
|
|
if req.Email != "" {
|
|||
|
|
updates["email"] = req.Email
|
|||
|
|
}
|
|||
|
|
if req.Birthday != "" {
|
|||
|
|
updates["birthday"] = req.Birthday
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取管理员ID
|
|||
|
|
adminID := uint(0)
|
|||
|
|
if id, exists := c.Get("user_id"); exists {
|
|||
|
|
adminID = id.(uint)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
err = h.userService.UpdateUserProfileByAdmin(uint(id), updates, adminID)
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, nil)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetUserLevelInfo 获取用户等级信息
|
|||
|
|
func (h *AdminUserHandler) GetUserLevelInfo(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
userID, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
levelInfo, err := h.userService.GetUserLevelInfo(uint(userID))
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, levelInfo)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// UpdateUserLevel 更新用户等级
|
|||
|
|
func (h *AdminUserHandler) UpdateUserLevel(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
id, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var req struct {
|
|||
|
|
Level uint8 `json:"level" binding:"required"`
|
|||
|
|
Remark string `json:"remark"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
|
response.BadRequest(c, "请求参数错误")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取管理员ID
|
|||
|
|
adminID := uint(0)
|
|||
|
|
if id, exists := c.Get("user_id"); exists {
|
|||
|
|
adminID = id.(uint)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
err = h.userService.UpdateUserLevelByAdmin(uint(id), req.Level, req.Remark, adminID)
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, nil)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetUserLoginLogs 获取用户登录日志
|
|||
|
|
func (h *AdminUserHandler) GetUserLoginLogs(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
userID, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
page := utils.StringToInt(c.DefaultQuery("page", "1"))
|
|||
|
|
pageSize := utils.StringToInt(c.DefaultQuery("page_size", "10"))
|
|||
|
|
|
|||
|
|
if page <= 0 {
|
|||
|
|
page = 1
|
|||
|
|
}
|
|||
|
|
if pageSize <= 0 || pageSize > 100 {
|
|||
|
|
pageSize = 10
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
logs, pagination, err := h.userService.GetUserLoginLogs(uint(userID), page, pageSize)
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, gin.H{
|
|||
|
|
"list": logs,
|
|||
|
|
"pagination": pagination,
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// DeleteUser 删除用户
|
|||
|
|
func (h *AdminUserHandler) DeleteUser(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
id, err := strconv.ParseUint(idStr, 10, 32)
|
|||
|
|
if err != nil {
|
|||
|
|
response.BadRequest(c, "无效的用户ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取管理员ID
|
|||
|
|
adminID := uint(0)
|
|||
|
|
if adminIDValue, exists := c.Get("user_id"); exists {
|
|||
|
|
adminID = adminIDValue.(uint)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
err = h.userService.DeleteUserByAdmin(uint(id), adminID, "管理员删除用户")
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, nil)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// BatchDeleteUsers 批量删除用户
|
|||
|
|
func (h *AdminUserHandler) BatchDeleteUsers(c *gin.Context) {
|
|||
|
|
var req struct {
|
|||
|
|
IDs []uint `json:"ids" binding:"required"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
|
response.BadRequest(c, "请求参数错误")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if len(req.IDs) == 0 {
|
|||
|
|
response.BadRequest(c, "用户ID列表不能为空")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取管理员ID
|
|||
|
|
adminID := uint(0)
|
|||
|
|
if adminIDValue, exists := c.Get("user_id"); exists {
|
|||
|
|
adminID = adminIDValue.(uint)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
err := h.userService.BatchDeleteUsersByAdmin(req.IDs, adminID, "管理员批量删除用户")
|
|||
|
|
if err != nil {
|
|||
|
|
response.ErrorWithMessage(c, response.ERROR, err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response.Success(c, nil)
|
|||
|
|
}
|