package withdrawal import ( "time" ) // 用户端 DTO type WithdrawalDTO struct { ID uint64 `json:"id"` WithdrawNo string `json:"withdraw_no"` UserID uint64 `json:"user_id"` Amount float64 `json:"amount"` Fee float64 `json:"fee"` ActualAmount float64 `json:"actual_amount"` AccountType string `json:"account_type"` AccountName string `json:"account_name"` AccountNo string `json:"account_no"` // 脱敏 BankName string `json:"bank_name"` Status string `json:"status"` ReviewRemark string `json:"review_remark"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` ReviewedAt *time.Time `json:"reviewed_at"` PaidAt *time.Time `json:"paid_at"` } // 管理员端详细 DTO type WithdrawalDetailDTO struct { ID uint64 `json:"id"` WithdrawNo string `json:"withdraw_no"` UserID uint64 `json:"user_id"` UserNickname string `json:"user_nickname"` UserPhone string `json:"user_phone"` Amount float64 `json:"amount"` Fee float64 `json:"fee"` ActualAmount float64 `json:"actual_amount"` PaymentAccountID *uint64 `json:"payment_account_id"` AccountType string `json:"account_type"` AccountName string `json:"account_name"` AccountNo string `json:"account_no"` // 管理员可见完整账号 BankName string `json:"bank_name"` BankBranch string `json:"bank_branch"` CertificateURLs []string `json:"certificate_urls"` // 收款二维码图片 Status string `json:"status"` ReviewedBy *uint64 `json:"reviewed_by"` ReviewedByName string `json:"reviewed_by_name"` ReviewedAt *time.Time `json:"reviewed_at"` ReviewRemark string `json:"review_remark"` PaidBy *uint64 `json:"paid_by"` PaidByName string `json:"paid_by_name"` PaidAt *time.Time `json:"paid_at"` PaymentProofURL string `json:"payment_proof_url"` PaymentRemark string `json:"payment_remark"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type CreateWithdrawalRequest struct { PaymentAccountID uint64 `json:"payment_account_id" binding:"required"` Amount float64 `json:"amount" binding:"required,gt=0"` } type ReviewWithdrawalRequest struct { Approved bool `json:"approved" binding:"required"` Remark string `json:"remark"` } type ConfirmPaymentRequest struct { PaymentProofURL string `json:"payment_proof_url"` Remark string `json:"remark"` } type PaginatedResult struct { Items []WithdrawalDTO `json:"items"` Total int64 `json:"total"` Page int `json:"page"` PageSize int `json:"page_size"` } type AdminPaginatedResult struct { Items []WithdrawalDetailDTO `json:"items"` Total int64 `json:"total"` Page int `json:"page"` PageSize int `json:"page_size"` } type AdminListQuery struct { Status string `form:"status"` UserID uint64 `form:"user_id"` Page int `form:"page"` Size int `form:"page_size"` }