From 5d35e977fbba6797a57e1865af38e7972d0f46af Mon Sep 17 00:00:00 2001 From: Rogee Date: Thu, 15 May 2025 10:15:05 +0800 Subject: [PATCH] feat: support charge for user --- backend/app/http/admin/users.go | 13 ++++++++++ frontend/admin/src/api/userService.js | 5 ++++ frontend/admin/src/pages/UserPage.vue | 35 +++++++++++++++++++-------- 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/backend/app/http/admin/users.go b/backend/app/http/admin/users.go index 669dba7..b95e16a 100644 --- a/backend/app/http/admin/users.go +++ b/backend/app/http/admin/users.go @@ -41,3 +41,16 @@ func (ctl *users) Show(ctx fiber.Ctx, id int64) (*model.Users, error) { func (ctl *users) Articles(ctx fiber.Ctx, id int64, pagination *requests.Pagination) (*requests.Pager, error) { return models.Posts.Bought(ctx.Context(), id, pagination) } + +type UserBalance struct { + Balance int64 `json:"balance"` +} + +// Balance +// +// @Router /admin/users/:id/balance [post] +// @Bind id path +// @Bind balance body +func (ctl *users) Balance(ctx fiber.Ctx, id int64, balance *UserBalance) error { + return models.Users.AddBalance(ctx.Context(), id, balance.Balance) +} diff --git a/frontend/admin/src/api/userService.js b/frontend/admin/src/api/userService.js index 84fa150..7ab1391 100644 --- a/frontend/admin/src/api/userService.js +++ b/frontend/admin/src/api/userService.js @@ -13,6 +13,11 @@ export const userService = { searchUser(id) { return httpClient.get(`/admin/users/${id}`); }, + userBalance(id, balance) { + return httpClient.post(`/admin/users/${id}/balance`, { + balance + }); + }, getUser(id) { return httpClient.get(`/admin/users/${id}`); }, diff --git a/frontend/admin/src/pages/UserPage.vue b/frontend/admin/src/pages/UserPage.vue index 129749f..e6ecc65 100644 --- a/frontend/admin/src/pages/UserPage.vue +++ b/frontend/admin/src/pages/UserPage.vue @@ -72,20 +72,29 @@ const onSearch = (event) => { }, 300); }; -const handleDelete = (user) => { +const handleRecharge = (user) => { confirm.require({ - message: `确定要删除用户 "${user.username}" 吗?`, - header: '确认删除', + message: `确定要为用户ID ${user.id}: "${user.username}" 充值吗?`, + header: '确认充值', icon: 'pi pi-exclamation-triangle', - acceptClass: 'p-button-danger', + acceptClass: 'p-button-success', accept: async () => { try { - await userService.deleteUser(user.id); - toast.add({ severity: 'success', summary: '成功', detail: '用户已删除', life: 3000 }); + + const amount = prompt('请输入充值金额(元):'); + if (!amount) return; + const amountInCents = Math.floor(parseFloat(amount) * 100); + if (isNaN(amountInCents) || amountInCents <= 0) { + toast.add({ severity: 'error', summary: '错误', detail: '请输入有效的金额', life: 3000 }); + return; + } + + await userService.userBalance(user.id, amountInCents); + toast.add({ severity: 'success', summary: '成功', detail: '用户已充值', life: 3000 }); fetchUsers(); } catch (error) { - console.error('Failed to delete user:', error); - toast.add({ severity: 'error', summary: '错误', detail: '删除用户失败', life: 3000 }); + console.error('Failed to recharge user:', error); + toast.add({ severity: 'error', summary: '错误', detail: '充值用户失败', life: 3000 }); } } }); @@ -131,6 +140,12 @@ onMounted(() => { + + + +