diff --git a/api/handler/admin/reward_handler.go b/api/handler/admin/reward_handler.go new file mode 100644 index 00000000..5de02968 --- /dev/null +++ b/api/handler/admin/reward_handler.go @@ -0,0 +1,57 @@ +package admin + +import ( + "chatplus/core" + "chatplus/handler" + "chatplus/store/model" + "chatplus/store/vo" + "chatplus/utils" + "chatplus/utils/resp" + "github.com/gin-gonic/gin" + "gorm.io/gorm" +) + +type RewardHandler struct { + handler.BaseHandler + db *gorm.DB +} + +func NewRewardHandler(app *core.AppServer, db *gorm.DB) *RewardHandler { + h := RewardHandler{db: db} + h.App = app + return &h +} + +func (h *RewardHandler) List(c *gin.Context) { + var items []model.Reward + res := h.db.Find(&items) + var rewards = make([]vo.Reward, 0) + if res.Error == nil { + userIds := make([]uint, 0) + for _, v := range items { + userIds = append(userIds, v.UserId) + } + var users []model.User + h.db.Where("id IN ?", userIds).Find(&users) + var userMap = make(map[uint]model.User) + for _, u := range users { + userMap[u.Id] = u + } + + for _, v := range items { + var r vo.Reward + err := utils.CopyObject(v, &r) + if err != nil { + continue + } + + r.Id = v.Id + r.Username = userMap[v.UserId].Username + r.CreatedAt = v.CreatedAt.Unix() + r.UpdatedAt = v.UpdatedAt.Unix() + rewards = append(rewards, r) + } + } + + resp.SUCCESS(c, rewards) +} diff --git a/api/main.go b/api/main.go index 6731923b..45fcdbb9 100644 --- a/api/main.go +++ b/api/main.go @@ -136,6 +136,7 @@ func main() { fx.Provide(admin.NewApiKeyHandler), fx.Provide(admin.NewUserHandler), fx.Provide(admin.NewChatRoleHandler), + fx.Provide(admin.NewRewardHandler), // 创建服务 fx.Provide(service.NewAliYunSmsService), @@ -213,6 +214,10 @@ func main() { group.POST("sort", h.SetSort) group.GET("remove", h.Remove) }), + fx.Invoke(func(s *core.AppServer, h *admin.RewardHandler) { + group := s.Engine.Group("/api/admin/reward/") + group.GET("list", h.List) + }), fx.Invoke(func(s *core.AppServer, db *gorm.DB) { err := s.Run(db) diff --git a/api/store/vo/reward.go b/api/store/vo/reward.go new file mode 100644 index 00000000..1aa06cd0 --- /dev/null +++ b/api/store/vo/reward.go @@ -0,0 +1,11 @@ +package vo + +type Reward struct { + BaseVo + UserId uint `json:"user_id"` // 用户 ID + Username string `json:"username"` + TxId string `json:"tx_id"` // 交易ID + Amount float64 `json:"amount"` // 打赏金额 + Remark string `json:"remark"` // 打赏备注 + Status bool `json:"status"` // 核销状态 +} diff --git a/web/src/components/admin/AdminSidebar.vue b/web/src/components/admin/AdminSidebar.vue index 0ba406d4..37b6a4df 100644 --- a/web/src/components/admin/AdminSidebar.vue +++ b/web/src/components/admin/AdminSidebar.vue @@ -79,6 +79,11 @@ const items = [ index: '/admin/apikey', title: 'API-KEY 管理', }, + { + icon: 'reward', + index: '/admin/reward', + title: '众筹管理', + }, { icon: 'log', index: '/admin/loginLog', diff --git a/web/src/router.js b/web/src/router.js index 5e6f7ed9..8d8b6ed0 100644 --- a/web/src/router.js +++ b/web/src/router.js @@ -69,6 +69,12 @@ const routes = [ meta: {title: 'API-KEY 管理'}, component: () => import('@/views/admin/ApiKey.vue'), }, + { + path: '/admin/reward', + name: 'admin-reward', + meta: {title: '众筹管理'}, + component: () => import('@/views/admin/RewardList.vue'), + }, { path: '/admin/loginLog', name: 'admin-loginLog', diff --git a/web/src/views/admin/Admin.vue b/web/src/views/admin/Admin.vue deleted file mode 100644 index 05f09325..00000000 --- a/web/src/views/admin/Admin.vue +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - - diff --git a/web/src/views/admin/RewardList.vue b/web/src/views/admin/RewardList.vue new file mode 100644 index 00000000..cd6b725c --- /dev/null +++ b/web/src/views/admin/RewardList.vue @@ -0,0 +1,75 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/admin/UserList.vue b/web/src/views/admin/UserList.vue index 930f5d07..a1acda5b 100644 --- a/web/src/views/admin/UserList.vue +++ b/web/src/views/admin/UserList.vue @@ -5,6 +5,7 @@ @selection-change="handleSelectionChange"> +