Merge pull request #450 from bayma888/feature/show-admin-adjustment-notes

feat: 向用户显示管理员调整余额的备注
This commit is contained in:
Wesley Liddick
2026-02-02 20:19:23 +08:00
committed by GitHub
4 changed files with 24 additions and 2 deletions

View File

@@ -321,7 +321,7 @@ func RedeemCodeFromServiceAdmin(rc *service.RedeemCode) *AdminRedeemCode {
} }
func redeemCodeFromServiceBase(rc *service.RedeemCode) RedeemCode { func redeemCodeFromServiceBase(rc *service.RedeemCode) RedeemCode {
return RedeemCode{ out := RedeemCode{
ID: rc.ID, ID: rc.ID,
Code: rc.Code, Code: rc.Code,
Type: rc.Type, Type: rc.Type,
@@ -335,6 +335,14 @@ func redeemCodeFromServiceBase(rc *service.RedeemCode) RedeemCode {
User: UserFromServiceShallow(rc.User), User: UserFromServiceShallow(rc.User),
Group: GroupFromServiceShallow(rc.Group), Group: GroupFromServiceShallow(rc.Group),
} }
// For admin_balance/admin_concurrency types, include notes so users can see
// why they were charged or credited by admin
if (rc.Type == "admin_balance" || rc.Type == "admin_concurrency") && rc.Notes != "" {
out.Notes = &rc.Notes
}
return out
} }
// AccountSummaryFromService returns a minimal AccountSummary for usage log display. // AccountSummaryFromService returns a minimal AccountSummary for usage log display.

View File

@@ -198,6 +198,10 @@ type RedeemCode struct {
GroupID *int64 `json:"group_id"` GroupID *int64 `json:"group_id"`
ValidityDays int `json:"validity_days"` ValidityDays int `json:"validity_days"`
// Notes is only populated for admin_balance/admin_concurrency types
// so users can see why they were charged or credited
Notes *string `json:"notes,omitempty"`
User *User `json:"user,omitempty"` User *User `json:"user,omitempty"`
Group *Group `json:"group,omitempty"` Group *Group `json:"group,omitempty"`
} }

View File

@@ -14,7 +14,9 @@ export interface RedeemHistoryItem {
status: string status: string
used_at: string used_at: string
created_at: string created_at: string
// 订阅类型专用字段 // Notes from admin for admin_balance/admin_concurrency types
notes?: string
// Subscription-specific fields
group_id?: number group_id?: number
validity_days?: number validity_days?: number
group?: { group?: {

View File

@@ -312,6 +312,14 @@
<p v-else class="text-xs text-gray-400 dark:text-dark-500"> <p v-else class="text-xs text-gray-400 dark:text-dark-500">
{{ t('redeem.adminAdjustment') }} {{ t('redeem.adminAdjustment') }}
</p> </p>
<!-- Display notes for admin adjustments -->
<p
v-if="item.notes"
class="mt-1 text-xs text-gray-500 dark:text-dark-400 italic max-w-[200px] truncate"
:title="item.notes"
>
{{ item.notes }}
</p>
</div> </div>
</div> </div>
</div> </div>