import { del, get, post, postForm, put } from '@/api/http' export interface LoginPayload { loginType?: string account?: string username?: string mobile?: string email?: string password?: string code?: string } export interface RegisterPayload { registerType?: string username?: string password?: string mobile?: string email?: string code?: string nickname?: string inviteCode?: string } export interface TokenPair { accessToken: string refreshToken?: string expiresIn?: number } export interface CurrentMember { userId?: number id?: number username?: string nickname?: string mobile?: string email?: string avatar?: string inviteCode?: string agentLevel?: number commissionRate?: number inviteCount?: number verifyStatus?: number } export interface FileInfo { name?: string url?: string } export interface MemberVerifyFieldPolicy { code?: string label?: string type?: 'TEXT' | 'IMAGE' | 'IMAGE_LIST' | string enabled?: boolean required?: boolean readonly?: boolean source?: string maxCount?: number sort?: number placeholder?: string } export interface MemberVerifyPolicy { enabled?: boolean forceRequired?: boolean forceScenes?: string[] fields?: MemberVerifyFieldPolicy[] } export interface MemberVerifyCurrent { memberUserId?: number status?: number verifyEnabled?: boolean forceRequired?: boolean forceScenes?: string[] currentRecordId?: number verifyNo?: string mobile?: string realName?: string idCardNo?: string idCardFrontUrl?: string idCardBackUrl?: string supportDocs?: string[] submitRemark?: string auditRemark?: string submitTime?: string auditTime?: string verifiedTime?: string policy?: MemberVerifyPolicy } export interface MemberVerifySubmitPayload { realName?: string idCardNo?: string idCardFrontUrl?: string idCardBackUrl?: string supportDocs?: string[] submitRemark?: string } export interface MemberAuthPublicConfig { registerMethods?: string[] loginMethods?: string[] mobileVerificationEnabled?: boolean emailVerificationEnabled?: boolean } export interface MemberSiteConfig { siteName?: string siteFaviconUrl?: string siteLogoUrl?: string customerServiceType?: 'QR_CODE' | 'URL' customerServiceQrUrl?: string customerServiceUrl?: string homeFooterContent?: string } export interface CaptchaInfo { captchaId?: string captchaBase64?: string } export interface DurationOption { durationDays?: number durationUnit?: string durationValue?: number displayName?: string multiplier?: number } export interface StaticRegion { regionId?: number regionCode?: string regionName?: string regionNameZh?: string countryCode?: string countryName?: string basePrice?: number iconUrl?: string } export interface QiYunNodeOption { qiyunAreaId?: string qiyunAreaName?: string qiyunNodeId?: string qiyunNodeName?: string qiyunIsp?: string basePrice?: number priceType?: string availableQuantity?: number } export interface StaticPackage { productId?: number productCode?: string productName?: string currency?: string qiyunProductType?: string upstreamProviderId?: number qiyunProjectRequired?: boolean defaultNodePrice?: number durations?: DurationOption[] regions?: StaticRegion[] } export interface PackageCatalog { staticPackages?: StaticPackage[] dynamicPackages?: unknown[] durations?: unknown[] } export interface StaticPurchasePayload { productId?: number durationDays?: number durationUnit?: string durationValue?: number purposeWeb?: string qiyunPid?: string qiyunProjectName?: string qiyunAreaId?: string qiyunAreaName?: string qiyunNodeId?: string qiyunNodeName?: string qiyunIsp?: string proxyAccountMode?: 'RANDOM' | 'CUSTOM' proxyUsername?: string proxyPassword?: string proxyPortMode?: 'RANDOM' | 'CUSTOM' proxyPort?: string quantity?: number items: Array<{ regionId?: number qiyunAreaId?: string qiyunAreaName?: string qiyunNodeId?: string qiyunNodeName?: string qiyunIsp?: string quantity?: number }> } export interface OrderSubmit { orderNo?: string orderStatus?: string payStatus?: string openStatus?: string saleAmount?: number payAmount?: number currency?: string message?: string } export interface BatchOrderSubmit { orderCount?: number totalSaleAmount?: number orders?: OrderSubmit[] } export interface PageResult { list: T[] total: number } export interface WalletOverview { balance?: number frozenBalance?: number totalRechargeAmount?: number totalConsumeAmount?: number totalRefundAmount?: number } export interface WalletFlow { id?: number flowNo?: string userId?: number memberUserId?: number bizType?: string changeType?: 'IN' | 'OUT' | string changeAmount?: number beforeBalance?: number afterBalance?: number relatedOrderNo?: string remark?: string operateBy?: number createTime?: string } export interface WalletRechargePromotionRule { rechargeAmount?: number giftAmount?: number } export interface WalletRechargePromotionConfig { enabled?: boolean title?: string minRechargeAmount?: number quickAmounts?: number[] rules?: WalletRechargePromotionRule[] } export interface WalletRechargePayload { amount: number paymentType: string clientType?: string returnUrl?: string remark?: string } export interface WalletRechargeSubmit { id?: number rechargeNo?: string payOrderNo?: string payStatus?: string paymentType?: string paymentCompleted?: boolean payAction?: string payData?: string payMessage?: string gatewayOrderNo?: string amount?: number giftAmount?: number creditedAmount?: number promotionApplied?: boolean promotionRuleDescription?: string currency?: string payableAmount?: number payableCurrency?: string exchangeRate?: number exchangeRateFactor?: number exchangeRateApplied?: number exchangeRateSource?: string } export interface WalletRechargeOrder { id?: number rechargeNo?: string payOrderNo?: string memberUserId?: number paymentType?: string payStatus?: string channelOrderNo?: string clientType?: string returnUrl?: string amount?: number giftAmount?: number creditedAmount?: number promotionRuleSnapshot?: string currency?: string paidTime?: string remark?: string createTime?: string updateTime?: string } export interface DistributionAccount { id?: number userId?: number memberUserId?: number availableBalance?: number frozenBalance?: number totalEarnedAmount?: number totalRevokedAmount?: number totalTransferAmount?: number totalWithdrawAmount?: number withdrawThreshold?: number withdrawFeeRate?: number status?: number createTime?: string updateTime?: string } export interface DistributionCommission { id?: number orderNo?: string levelNo?: number rate?: number baseAmount?: number commissionAmount?: number commissionStatus?: string confirmTime?: string invalidTime?: string createTime?: string remark?: string } export interface NoticeItem { id?: number title?: string publishStatus?: number type?: number publisherName?: string level?: string publishTime?: string isRead?: number targetType?: number createTime?: string revokeTime?: string } export interface NoticeDetail extends NoticeItem { content?: string } export interface OpenApiApplyCurrent { id?: number applyNo?: string memberUserId?: number status?: number contactName?: string contactMobile?: string contactEmail?: string companyName?: string purpose?: string scenarioDescription?: string allowIpList?: string submitRemark?: string auditRemark?: string submitTime?: string auditTime?: string openApiAppId?: number } export interface OpenApiApplyPayload { contactName: string contactMobile?: string contactEmail?: string companyName?: string purpose: string scenarioDescription: string allowIpList?: string submitRemark?: string } export interface OpenApiCredential { id?: number appId?: string appName?: string appSecret?: string status?: number allowIpList?: string callbackUrl?: string callbackSecret?: string lastAuthTime?: string lastAuthIp?: string } export interface OpenApiCallbackConfig { openApiAppId?: number callbackUrl?: string callbackSecret?: string } export interface OpenApiAccount { id?: number openApiAppId?: number memberUserId?: number balance?: number frozenBalance?: number totalRechargeAmount?: number totalConsumeAmount?: number totalRefundAmount?: number status?: number createTime?: string updateTime?: string } export interface OpenApiRechargePayload { amount: number paymentType: string clientType?: string returnUrl?: string remark?: string } export interface OpenApiRechargeSubmit { id?: number rechargeNo?: string payOrderNo?: string payStatus?: string paymentType?: string paymentCompleted?: boolean amount?: number giftAmount?: number creditedAmount?: number currency?: string payAction?: string payData?: string payMessage?: string gatewayOrderNo?: string payableAmount?: number payableCurrency?: string exchangeRate?: number } export interface OpenApiAccountFlow { id?: number flowNo?: string bizType?: string changeType?: string changeAmount?: number beforeBalance?: number afterBalance?: number relatedOrderNo?: string remark?: string createTime?: string } export interface OpenApiRechargeOrder { id?: number rechargeNo?: string payOrderNo?: string paymentType?: string payStatus?: string amount?: number giftAmount?: number creditedAmount?: number currency?: string paidTime?: string remark?: string createTime?: string } export interface OpenApiCallbackLog { id?: number orderNo?: string callbackUrl?: string eventType?: string responseStatus?: number deliveryStatus?: string errorMessage?: string attemptNo?: number triggerTime?: string finishTime?: string createTime?: string } export const MemberAPI = { authConfig() { return get('/api/v1/member/auth/config') }, siteConfig() { return get('/api/v1/member/site-config') }, captcha(scene: 'LOGIN' | 'REGISTER') { return get('/api/v1/member/auth/captcha', { params: { scene } }) }, sendMobileCode(params: { mobile: string scene: 'LOGIN' | 'REGISTER' captchaId: string captchaCode: string }) { return post('/api/v1/member/auth/mobile/code', undefined, { params }) }, sendEmailCode(params: { email: string scene: 'LOGIN' | 'REGISTER' captchaId: string captchaCode: string }) { return post('/api/v1/member/auth/email/code', undefined, { params }) }, login(data: LoginPayload) { return post('/api/v1/member/auth/login', data) }, register(data: RegisterPayload) { return post('/api/v1/member/auth/register', data) }, me() { return get('/api/v1/member/auth/me') }, logout() { return del('/api/v1/member/auth/logout') }, publicCatalog() { return get('/api/v1/public/package-center/catalog') }, memberCatalog() { return get('/api/v1/member/package-center/catalog') }, qiyunProjects(productId: number) { return get }>>( '/api/v1/member/package-center/qiyun/projects', { params: { productId } }, ) }, qiyunAreas(productId: number, pid?: string) { return get }>>( '/api/v1/member/package-center/qiyun/areas', { params: { productId, pid } }, ) }, staticInventories( productId: number, params?: { purposeWeb?: string; qiyunPid?: string; qiyunAreaId?: string }, ) { return get('/api/v1/member/package-center/static-inventory', { params: { productId, ...params }, }) }, purchaseStaticPackage(data: StaticPurchasePayload) { return post('/api/v1/member/package-center/static-orders', data) }, payOrder(orderNo: string, data?: { paymentType?: string }) { return post(`/api/v1/member/orders/${orderNo}/pay`, data) }, wallet() { return get('/api/v1/member/wallet') }, walletFlows(params?: Record) { return get>('/api/v1/member/wallet/flows', { params: params as Record, }) }, walletRechargePromotionConfig() { return get('/api/v1/member/wallet/recharges/promotion-config') }, previewWalletRecharge(data: WalletRechargePayload) { return post('/api/v1/member/wallet/recharges/preview', data) }, createWalletRecharge(data: WalletRechargePayload) { return post('/api/v1/member/wallet/recharges', data) }, walletRechargeOrders(params?: Record) { return get>('/api/v1/member/wallet/recharges', { params: params as Record, }) }, walletRechargeDetail(rechargeNo: string) { return get(`/api/v1/member/wallet/recharges/${rechargeNo}`) }, retryWalletRechargePaymentStatus(rechargeNo: string) { return post(`/api/v1/member/wallet/recharges/${rechargeNo}/retry-payment-status`) }, distributionAccount() { return get('/api/v1/member/distribution/account') }, distributionCommissions(params?: Record) { return get>('/api/v1/member/distribution/commissions', { params: params as Record, }) }, orders(params?: Record) { return get>('/api/v1/member/orders', { params: params as Record, }) }, staticAssets(params?: Record) { return get>('/api/v1/member/static-assets', { params: params as Record, }) }, dynamicChannels(params?: Record) { return get>('/api/v1/member/dynamic-channels', { params: params as Record, }) }, verifyCurrent() { return get('/api/v1/member/verify/current') }, verifyPolicy() { return get('/api/v1/member/verify/policy') }, submitVerify(data: MemberVerifySubmitPayload) { return post('/api/v1/member/verify/submit', data) }, uploadFile(file: File) { const formData = new FormData() formData.append('file', file) return postForm('/api/v1/files', formData) }, openApiCurrent() { return get('/api/v1/member/open-api/current') }, openApiCredential() { return get('/api/v1/member/open-api/credential') }, submitOpenApiApply(data: OpenApiApplyPayload) { return post('/api/v1/member/open-api/submit', data) }, openApiCallbackConfig() { return get('/api/v1/member/open-api/callback-config') }, updateOpenApiCallbackConfig(data: { callbackUrl?: string; callbackSecret?: string }) { return put('/api/v1/member/open-api/callback-config', data) }, openApiCallbackLogs(params?: Record) { return get>('/api/v1/member/open-api/callback-logs', { params: params as Record, }) }, retryOpenApiCallback(id: number) { return post(`/api/v1/member/open-api/callback-logs/${id}/retry`) }, openApiAccount() { return get('/api/v1/member/open-api/account') }, openApiAccountFlows(params?: Record) { return get>('/api/v1/member/open-api/account/flows', { params: params as Record, }) }, previewOpenApiRecharge(data: OpenApiRechargePayload) { return post('/api/v1/member/open-api/account/recharges/preview', data) }, createOpenApiRecharge(data: OpenApiRechargePayload) { return post('/api/v1/member/open-api/account/recharges', data) }, openApiRechargeOrders(params?: Record) { return get>('/api/v1/member/open-api/account/recharges', { params: params as Record, }) }, updateProfile(data: unknown) { return put('/api/v1/member/profile', data) }, notices(params?: Record) { return get>('/api/v1/member/notices', { params: params as Record, }) }, noticeDetail(id: number) { return get(`/api/v1/member/notices/${id}/detail`) }, }