- 为RedeemCode DTO添加notes字段(仅用于admin_balance/admin_concurrency类型) - 更新mapper使其有条件地包含备注信息 - 在用户兑换历史UI中显示备注 - 备注以斜体显示,悬停时显示完整内容 用户现在可以看到管理员调整其余额的原因说明。 Changes: - backend/internal/handler/dto/types.go: RedeemCode添加notes字段 - backend/internal/handler/dto/mappers.go: 条件性填充notes - frontend/src/api/redeem.ts: TypeScript接口添加notes - frontend/src/views/user/RedeemView.vue: UI显示备注信息
68 lines
1.3 KiB
TypeScript
68 lines
1.3 KiB
TypeScript
/**
|
|
* Redeem code API endpoints
|
|
* Handles redeem code redemption for users
|
|
*/
|
|
|
|
import { apiClient } from './client'
|
|
import type { RedeemCodeRequest } from '@/types'
|
|
|
|
export interface RedeemHistoryItem {
|
|
id: number
|
|
code: string
|
|
type: string
|
|
value: number
|
|
status: string
|
|
used_at: string
|
|
created_at: string
|
|
// Notes from admin for admin_balance/admin_concurrency types
|
|
notes?: string
|
|
// Subscription-specific fields
|
|
group_id?: number
|
|
validity_days?: number
|
|
group?: {
|
|
id: number
|
|
name: string
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Redeem a code
|
|
* @param code - Redeem code string
|
|
* @returns Redemption result with updated balance or concurrency
|
|
*/
|
|
export async function redeem(code: string): Promise<{
|
|
message: string
|
|
type: string
|
|
value: number
|
|
new_balance?: number
|
|
new_concurrency?: number
|
|
}> {
|
|
const payload: RedeemCodeRequest = { code }
|
|
|
|
const { data } = await apiClient.post<{
|
|
message: string
|
|
type: string
|
|
value: number
|
|
new_balance?: number
|
|
new_concurrency?: number
|
|
}>('/redeem', payload)
|
|
|
|
return data
|
|
}
|
|
|
|
/**
|
|
* Get user's redemption history
|
|
* @returns List of redeemed codes
|
|
*/
|
|
export async function getHistory(): Promise<RedeemHistoryItem[]> {
|
|
const { data } = await apiClient.get<RedeemHistoryItem[]>('/redeem/history')
|
|
return data
|
|
}
|
|
|
|
export const redeemAPI = {
|
|
redeem,
|
|
getHistory
|
|
}
|
|
|
|
export default redeemAPI
|