@gt6/sdk 1.0.28 → 1.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gt6-sdk.cjs.js +41 -1
- package/dist/gt6-sdk.cjs.js.map +1 -1
- package/dist/gt6-sdk.esm.js +41 -1
- package/dist/gt6-sdk.esm.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/modules/articles.d.ts +1 -1
- package/dist/modules/products.d.ts +10 -0
- package/dist/modules/products.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/gt6-sdk.cjs.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"gt6-sdk.cjs.js","sources":["../src/core/types.ts","../src/core/client.ts","../src/modules/articles.ts","../src/modules/products.ts","../src/modules/settings.ts","../src/modules/forms.ts","../src/modules/users.ts","../src/modules/transactions.ts","../src/index.ts"],"sourcesContent":["// 基础配置类型\nexport interface GT6Config {\n baseUrl: string;\n apiKey?: string;\n platformId: string | number;\n platformId_p?: string | number;\n rootCategoryId?: string | number;\n rootCategoryId_p?: string | number;\n tagAlias?: string;\n tagAlias_p?: string;\n // 产品专用配置字段\n productRootCategoryId?: string | number;\n productRootCategoryId_p?: string | number;\n productTagAlias?: string;\n productTagAlias_p?: string;\n // 设置专用配置字段\n settingAlias?: string;\n settingAlias_p?: string;\n version?: string;\n timeout?: number;\n cache?: {\n enabled: boolean;\n ttl: number; // 缓存时间(毫秒)\n };\n}\n\n// 分类相关类型\nexport interface Category {\n categoryId: number;\n categoryName: string;\n categoryDescription: string;\n metaKeywords: string;\n status: number;\n parentId: number;\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n platformId: number;\n articleIds: number[];\n children: Category[];\n}\n\nexport interface CategoryResponse {\n platformId: number;\n categories: Category[];\n generatedAt: string;\n}\n\n// 产品分类相关类型\nexport interface ProductCategory {\n categoryId: number;\n categoryName: string;\n categoryDescription: string;\n metaKeywords: string;\n status: number;\n parentId: number;\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n platformId: number;\n productIds: number[];\n children: ProductCategory[];\n}\n\nexport interface ProductCategoryResponse {\n platformId: number;\n categories: ProductCategory[];\n generatedAt: string;\n}\n\n// 标签相关类型\nexport interface Tag {\n tagId: number;\n tagName: string;\n type: number;\n platformId: number;\n aliases: string;\n createdAt: any;\n articleIds: number[];\n}\n\nexport interface TagResponse {\n platformId: number;\n tags: Tag[];\n generatedAt: string;\n}\n\n// 产品标签相关类型\nexport interface ProductTag {\n tagId: number;\n tagName: string;\n type: number;\n platformId: number;\n aliases: string;\n createdAt: any;\n productIds: number[];\n}\n\nexport interface ProductTagResponse {\n platformId: number;\n tags: ProductTag[];\n generatedAt: string;\n}\n\n// 文章元数据类型\nexport interface ArticleMetaData {\n metaId: number;\n articleId: number;\n metaKey: string;\n metaValue: string;\n type: number;\n templateId: number;\n groupId: number;\n sortOrder: number;\n aiId: number;\n fieldId: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 文章图片类型\nexport interface ArticleImage {\n imageId: number;\n articleId: number;\n metaId: number | null;\n imageUrl: string;\n imageType: 'cover' | 'content';\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 平台信息类型\nexport interface Platform {\n id: number;\n platformName: string;\n platformDescription: string;\n avatar: string | null;\n}\n\n// 文章类型\nexport interface Article {\n articleId: number;\n title: string;\n content: string;\n status: 'published' | 'draft' | 'archived';\n publishedAt: string;\n templateId: number;\n aiId: number;\n platformId: number;\n isVisible: boolean;\n displayTemplate: string;\n createdAt: any;\n updatedAt: any;\n categories: Category[];\n tags: Tag[];\n metaData: ArticleMetaData[];\n images: ArticleImage[];\n platform?: Platform; // 可选字段,只在使用上级平台数据时存在\n generatedAt: string;\n}\n\n// 产品详情类型\nexport interface ProductDetail {\n detailId: number;\n productId: number;\n detailKey: string;\n detailValue: string;\n extraInfo: string;\n}\n\n// 产品选项值类型\nexport interface ProductOptionValue {\n valueId: number;\n optionId: number;\n value: string;\n description: string;\n priceAdjustment: string;\n createdAt: any;\n updatedAt: any;\n}\n\n// 产品选项类型\nexport interface ProductOption {\n optionId: number;\n productId: number;\n optionName: string;\n createdAt: any;\n updatedAt: any;\n values: ProductOptionValue[];\n}\n\n// 产品变体类型\nexport interface ProductVariant {\n variantId: number;\n productId: number;\n sku: string;\n price: string;\n stock: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 产品图片类型\nexport interface ProductImage {\n imageId: number;\n productId: number;\n productDetailId: number | null;\n optionValueId: number | null;\n imageUrl: string;\n imageType: 'gallery' | 'thumbnail' | 'detail';\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 地区类型\nexport interface Region {\n regionId: number;\n platformId: number;\n regionCode: string;\n regionName: string;\n regionLevel: string;\n parentId: number;\n children?: Region[];\n}\n\n// 运费规则类型\nexport interface ShippingRule {\n ruleId: number;\n templateId: number;\n regionId: number;\n firstUnit: string;\n firstFee: string;\n additionalUnit: string;\n additionalFee: string;\n conditionType: string;\n conditionValue: string | null;\n createTime: any;\n updateTime: any;\n}\n\n// 运费模板类型\nexport interface ShippingTemplate {\n templateId: number;\n platformId: number;\n templateName: string;\n defaultFee: string;\n freeShippingLimit: string;\n createTime: any;\n updateTime: any;\n rules: ShippingRule[];\n}\n\n// 运费响应类型\nexport interface ShippingResponse {\n platformId: number;\n templates: ShippingTemplate[];\n generatedAt: string;\n}\n\n// 税费规则类型\nexport interface TaxRule {\n ruleId: number;\n templateId: number;\n regionId: number;\n taxRate: string;\n createTime: any;\n updateTime: any;\n}\n\n// 税费模板类型\nexport interface TaxTemplate {\n templateId: number;\n platformId: number;\n templateName: string;\n defaultTaxRate: string;\n createTime: any;\n updateTime: any;\n rules: TaxRule[];\n}\n\n// 税费响应类型\nexport interface TaxResponse {\n platformId: number;\n templates: TaxTemplate[];\n generatedAt: string;\n}\n\n// 订阅类型\nexport interface Subscription {\n subscriptionId: number;\n productId: number;\n billingCycle: number;\n billingCycleUnit: string;\n billingCycleCount: number;\n setupFee: string;\n trialDays: number;\n trialPrice: string;\n renewalDiscount: string;\n autoRenew: boolean;\n allowCancel: boolean;\n cancelPolicy: string;\n refundPolicy: string;\n maxCycles: number;\n gracePeriod: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 批发类型\nexport interface Wholesale {\n wholesaleId: number;\n productId: number;\n minOrderQuantity: number;\n maxOrderQuantity: number;\n allowMixedVariants: boolean;\n showRetailPrice: boolean;\n wholesaleDescription: string;\n paymentTerms: string;\n shippingTerms: string;\n}\n\n// 价格层级类型\nexport interface PriceTier {\n tierId: number;\n wholesaleId: number;\n userLevel: number | null;\n minQuantity: number;\n maxQuantity: number;\n priceType: number;\n priceValue: string;\n sortOrder: number;\n}\n\n// 变体价格类型\nexport interface VariantPrice {\n id: number;\n wholesaleId: number;\n tierId: number;\n variantId: number;\n priceType: number;\n priceValue: string;\n}\n\n// 众筹类型\nexport interface Crowdfunding {\n crowdfundingId: number;\n productId: number;\n targetAmount: string;\n currentAmount: string;\n supporterCount: number;\n startTime: any;\n endTime: any;\n status: number;\n minSupportAmount: string;\n allowOverFunding: boolean;\n overFundingLimit: string;\n createdAt: any;\n updatedAt: any;\n}\n\n// 众筹奖励类型\nexport interface Reward {\n rewardId: number;\n crowdfundingId: number;\n variantId: number;\n rewardName: string;\n rewardDescription: string;\n rewardAmount: string;\n rewardLimit: number;\n rewardClaimed: number;\n shippingRequired: boolean;\n estimatedDeliveryTime: any;\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 众筹更新类型\nexport interface CrowdfundingUpdate {\n updateId: number;\n crowdfundingId: number;\n updateTitle: string;\n updateContent: string;\n isPublic: boolean;\n updateTime: any;\n}\n\n// 众筹FAQ类型\nexport interface CrowdfundingFAQ {\n faqId: number;\n crowdfundingId: number;\n question: string;\n answer: string;\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 简单理财类型\nexport interface SimpleFinance {\n simpleFinanceId: number;\n productId: number;\n calculationPeriod: number;\n calculationPeriodUnit: string;\n interestRate: string;\n minInvestment: string;\n maxInvestment: string;\n minInvestmentUnit: string;\n maxInvestmentUnit: string;\n investmentPeriod: number;\n investmentPeriodUnit: string;\n}\n\n// 产品类型\nexport interface Product {\n productId: number;\n productName: string;\n description: string;\n metaKeywords: string;\n price: string;\n priceChangePercent: string;\n status: number;\n productType: number;\n native: number;\n shared: number;\n createdAt: any;\n updatedAt: any;\n platformId: number;\n oldProductId: number | null;\n details: ProductDetail[];\n options: ProductOption[];\n variants: ProductVariant[];\n images: ProductImage[];\n categories: ProductCategory[];\n tags: ProductTag[];\n regions: Region[];\n shippingTemplates: ShippingTemplate[];\n taxTemplates: TaxTemplate[];\n subscription?: Subscription; // 当productType为2时存在\n wholesale?: Wholesale; // 当productType为3时存在\n priceTiers?: PriceTier[]; // 当productType为3时存在\n variantPrices?: VariantPrice[]; // 当productType为3时存在\n crowdfunding?: Crowdfunding; // 当productType为4时存在\n rewards?: Reward[]; // 当productType为4时存在\n updates?: CrowdfundingUpdate[]; // 当productType为4时存在\n faqs?: CrowdfundingFAQ[]; // 当productType为4时存在\n simpleFinance?: SimpleFinance; // 当productType为5时存在\n platform?: Platform; // 可选字段,只在使用上级平台数据时存在\n generatedAt: string;\n}\n\n// 文章列表项类型(简化版)\nexport interface ArticleListItem {\n articleId: number;\n title: string;\n status: string;\n publishedAt: string;\n categories: Category[];\n tags: Tag[];\n coverImage?: string;\n}\n\n// 产品列表项类型(简化版)\nexport interface ProductListItem {\n productId: number;\n productName: string;\n price: string;\n status: number;\n categories: ProductCategory[];\n tags: ProductTag[];\n coverImage?: string;\n}\n\n// 错误类型\nexport class GT6Error extends Error {\n constructor(\n message: string,\n public statusCode?: number\n ) {\n super(message);\n this.name = 'GT6Error';\n }\n}\n\n// 查询参数类型\nexport interface ArticleQueryParams {\n categoryId?: number;\n tagId?: number;\n status?: string;\n limit?: number;\n offset?: number;\n sortBy?: 'publishedAt' | 'title' | 'sortOrder';\n sortOrder?: 'asc' | 'desc';\n}\n\n// 产品查询参数类型\nexport interface ProductQueryParams {\n categoryId?: number;\n tagId?: number;\n status?: number;\n limit?: number;\n offset?: number;\n sortBy?: 'price' | 'productName' | 'sortOrder';\n sortOrder?: 'asc' | 'desc';\n}\n\n// 根据标签获取文章的选项类型\nexport interface ArticlesByTagOptions {\n page?: number;\n limit?: number;\n status?: 'published' | 'draft' | 'archived';\n tagAlias?: string;\n}\n\n// 根据分类获取文章的选项类型\nexport interface ArticlesByCategoryOptions {\n page?: number;\n limit?: number;\n status?: 'published' | 'draft' | 'archived';\n}\n\n// 根据标签获取产品的选项类型\nexport interface ProductsByTagOptions {\n page?: number;\n limit?: number;\n status?: number;\n productTagAlias?: string;\n}\n\n// 根据分类获取产品的选项类型\nexport interface ProductsByCategoryOptions {\n page?: number;\n limit?: number;\n status?: number;\n}\n\n// 文章统计类型\nexport interface ArticleStats {\n total: number;\n published: number;\n draft: number;\n archived: number;\n byCategory: Record<number, number>;\n byTag: Record<number, number>;\n}\n\n// 产品统计类型\nexport interface ProductStats {\n total: number;\n active: number;\n inactive: number;\n byCategory: Record<number, number>;\n byTag: Record<number, number>;\n}\n\nexport interface GT6Response<T> {\n success: boolean;\n data: T;\n error?: string;\n}\n\nexport interface ArticleResponse {\n article: Article;\n}\n\nexport interface ProductResponse {\n product: Product;\n}\n\nexport interface CategoryResponse {\n categories: Category[];\n}\n\nexport interface ProductCategoryResponse {\n categories: ProductCategory[];\n}\n\nexport interface TagResponse {\n tags: Tag[];\n}\n\nexport interface ProductTagResponse {\n tags: ProductTag[];\n}\n\n// 区域响应类型\nexport interface RegionResponse {\n platformId: number;\n regions: Region[];\n generatedAt: string;\n}\n\n// 全局设置相关类型\nexport interface Setting {\n key: string;\n value: string | number | object;\n type: 'text' | 'number' | 'json' | 'html' | 'image';\n label: string;\n description: string;\n isSystem: boolean;\n sortOrder: number;\n aliases: string;\n}\n\nexport interface SettingsResponse {\n platformId: number;\n aliases: string;\n settings: Setting[];\n generatedAt: string;\n}\n\nexport interface SettingResponse {\n platformId: number;\n setting: Setting;\n generatedAt: string;\n}\n\nexport interface SettingsOptions {\n settingAlias?: string;\n}\n\n// 支付方式相关类型\nexport interface PaymentMethodAttribute {\n id: number;\n methodId: number;\n attrName: string;\n attrValue: string;\n attrType: 'text' | 'number' | 'image' | 'url' | 'email' | 'phone';\n}\n\nexport interface PaymentMethod {\n id: number;\n platformId: number;\n name: string;\n description: string;\n type: 'Api' | 'Manual' | 'Gateway' | 'Crypto';\n aliases: string;\n attrs: PaymentMethodAttribute[];\n}\n\nexport interface PaymentMethodsResponse {\n platformId: number;\n methods: PaymentMethod[];\n generatedAt: string;\n}\n\nexport interface PaymentMethodsOptions {\n paymentAlias?: string;\n}\n\n// 表单提交相关类型\nexport interface FormSubmitData {\n platformId: number | string;\n aliases: string;\n email: string;\n fieldValue: Record<string, any>;\n createSecret?: string;\n}\n\nexport interface FormSubmitResponse {\n success: boolean;\n message: string;\n data?: any;\n code?: number;\n}\n\nexport interface FormSubmitOptions {\n endpoint?: string;\n createSecret?: string;\n} ","import { GT6Config, GT6Error } from './types';\r\n\r\nexport class GT6Client {\r\n private config: GT6Config;\r\n private cache: Map<string, { data: any; timestamp: number }>;\r\n\r\n constructor(config: GT6Config) {\r\n this.config = {\r\n timeout: 10000,\r\n cache: {\r\n enabled: true,\r\n ttl: 300000 // 5分钟默认缓存\r\n },\r\n ...config\r\n };\r\n this.cache = new Map();\r\n }\r\n\r\n /**\r\n * 发起HTTP请求\r\n */\r\n async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\r\n const url = `${this.config.baseUrl}${endpoint}`;\r\n const cacheKey = `${options.method || 'GET'}:${url}`;\r\n\r\n // 检查缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n const cached = this.cache.get(cacheKey);\r\n if (cached && Date.now() - cached.timestamp < this.config.cache.ttl) {\r\n return cached.data;\r\n }\r\n }\r\n\r\n try {\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\r\n\r\n // 对于FormData,不设置Content-Type,让浏览器自动设置\r\n const headers = new Headers(options.headers);\r\n if (!(options.body instanceof FormData)) {\r\n headers.set('Content-Type', 'application/json');\r\n }\r\n\r\n const response = await fetch(url, {\r\n ...options,\r\n headers,\r\n signal: controller.signal\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n throw new GT6Error(\r\n `HTTP ${response.status}: ${response.statusText}`,\r\n response.status\r\n );\r\n }\r\n\r\n const data = await response.json();\r\n\r\n // 更新缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n this.cache.set(cacheKey, { data, timestamp: Date.now() });\r\n }\r\n\r\n return data;\r\n } catch (error: any) {\r\n if (error instanceof GT6Error) {\r\n throw error;\r\n }\r\n \r\n if (error.name === 'AbortError') {\r\n throw new GT6Error('Request timeout', 408);\r\n }\r\n \r\n throw new GT6Error(`Network error: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * 获取配置\r\n */\r\n getConfig(): GT6Config {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * 清除缓存\r\n */\r\n clearCache(): void {\r\n this.cache.clear();\r\n }\r\n\r\n /**\r\n * 获取缓存统计\r\n */\r\n getCacheStats(): { size: number; entries: Array<{ key: string; age: number }> } {\r\n const entries = Array.from(this.cache.entries()).map(([key, value]) => ({\r\n key,\r\n age: Date.now() - value.timestamp\r\n }));\r\n\r\n return {\r\n size: this.cache.size,\r\n entries\r\n };\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n Article,\r\n Category,\r\n Tag,\r\n CategoryResponse,\r\n TagResponse,\r\n ArticlesByTagOptions,\r\n ArticlesByCategoryOptions\r\n} from '../core/types';\r\n\r\nexport class ArticlesAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 1. 根据文章ID获取文章详情\r\n */\r\n async getArticle(articleId: number | string): Promise<Article> {\r\n return this.client.request<Article>(`/articles/${articleId}.json`);\r\n }\r\n\r\n /**\r\n * 1.1 根据文章ID获取文章详情(使用上级平台ID)\r\n */\r\n async getArticle_p(articleId: number | string): Promise<Article> {\r\n return this.client.request<Article>(`/parentarticles/${articleId}.json`);\r\n }\r\n\r\n /**\r\n * 2. 获取文章分类列表\r\n */\r\n async getCategories(rootCategoryId?: number | string): Promise<Category[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = rootCategoryId || config.rootCategoryId || '671920';\r\n \r\n const response = await this.client.request<CategoryResponse>(\r\n `/article-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 2.1 获取文章分类列表(使用下级平台ID)\r\n */\r\n async getCategories_p(rootCategoryId_p?: number | string): Promise<Category[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = rootCategoryId_p || config.rootCategoryId_p || '671920';\r\n \r\n const response = await this.client.request<CategoryResponse>(\r\n `/article-categories/platform-${config.platformId_p}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 2.2 获取文章分类列表(使用下级平台ID)\r\n */\r\n async getCategories_a(rootCategoryId?: number | string): Promise<Category[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = rootCategoryId || config.rootCategoryId;\r\n \r\n const response = await this.client.request<CategoryResponse>(\r\n `/big-article-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 3. 获取文章标签列表\r\n */\r\n async getTags(tagAlias?: string): Promise<Tag[]> {\r\n const config = this.client.getConfig();\r\n const alias = tagAlias || config.tagAlias || '001';\r\n \r\n const response = await this.client.request<TagResponse>(\r\n `/article-tags/platform-${config.platformId}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n }\r\n\r\n /**\r\n * 3.1 获取文章标签列表(使用下级平台ID)\r\n */\r\n async getTags_p(tagAlias_p?: string): Promise<Tag[]> {\r\n const config = this.client.getConfig();\r\n const alias = tagAlias_p || config.tagAlias_p || '001';\r\n \r\n const response = await this.client.request<TagResponse>(\r\n `/article-tags/platform-${config.platformId_p}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n }\r\n\r\n /**\r\n * 4. 根据分类ID获取文章列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getArticlesByCategory(categoryId: number | number[], options?: ArticlesByCategoryOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = categories.find(cat => cat.categoryId === id);\r\n if (targetCategory) {\r\n allArticleIds.push(...targetCategory.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 4.1 根据分类ID获取文章列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getArticlesByCategory_p(categoryId: number | number[], options?: ArticlesByCategoryOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories_p();\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = categories.find(cat => cat.categoryId === id);\r\n if (targetCategory) {\r\n allArticleIds.push(...targetCategory.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle_p(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 4.2 根据分类ID获取文章列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getArticlesByCategory_t(categoryId: number | number[], options?: ArticlesByCategoryOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = categories.find(cat => cat.categoryId === id);\r\n if (targetCategory) {\r\n allArticleIds.push(...targetCategory.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle_p(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 4.3 根据分类ID获取文章列表(使用大型分类静态文件)\r\n * 只支持单个分类ID,从大型分类静态文件获取文章ID列表\r\n */\r\n async getArticlesByCategory_a(categoryId: number, options?: ArticlesByCategoryOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 从大型分类静态文件获取该分类的文章ID列表\r\n const categoryData = await this.client.request<{\r\n categoryId: number;\r\n articleIds: number[];\r\n generatedAt: string;\r\n }>(`/big-article-categories/${categoryId}.json`);\r\n \r\n if (!categoryData || !categoryData.articleIds || categoryData.articleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = categoryData.articleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情(使用上级平台数据)\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle_p(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: categoryData.articleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 5. 根据标签ID获取文章列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getArticlesByTag(tagId: number | number[], options?: ArticlesByTagOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据,传递tagAlias参数\r\n const tags = await this.getTags(options?.tagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allArticleIds.push(...targetTag.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 5.1 根据标签ID获取文章列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getArticlesByTag_p(tagId: number | number[], options?: ArticlesByTagOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据,传递tagAlias参数\r\n const tags = await this.getTags_p(options?.tagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allArticleIds.push(...targetTag.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle_p(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 5.2 根据标签ID获取文章列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getArticlesByTag_t(tagId: number | number[], options?: ArticlesByTagOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据,传递tagAlias参数\r\n const tags = await this.getTags(options?.tagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allArticleIds.push(...targetTag.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle_p(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 6. 根据分类ID获取该分类的层级路径\r\n * 用于前端面包屑导航\r\n */\r\n async getCategoryPath(categoryId: number): Promise<{\r\n path: Category[];\r\n currentCategory: Category | null;\r\n breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }>;\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n path: [],\r\n currentCategory: null,\r\n breadcrumbs: []\r\n };\r\n }\r\n \r\n // 构建分类路径\r\n const path: Category[] = [];\r\n const breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }> = [];\r\n \r\n // 递归查找父分类\r\n const buildPath = (currentCategory: Category, level: number = 0): void => {\r\n // 将当前分类添加到路径开头(因为我们要从根到叶子构建)\r\n path.unshift(currentCategory);\r\n breadcrumbs.unshift({\r\n categoryId: currentCategory.categoryId,\r\n categoryName: currentCategory.categoryName,\r\n level\r\n });\r\n \r\n // 如果有父分类,继续递归\r\n if (currentCategory.parentId && currentCategory.parentId !== 0) {\r\n const parentCategory = categories.find(cat => cat.categoryId === currentCategory.parentId);\r\n if (parentCategory) {\r\n buildPath(parentCategory, level + 1);\r\n }\r\n }\r\n };\r\n \r\n // 从目标分类开始构建路径\r\n buildPath(targetCategory);\r\n \r\n return {\r\n path,\r\n currentCategory: targetCategory,\r\n breadcrumbs\r\n };\r\n }\r\n\r\n /**\r\n * 7. 获取指定分类ID下的子分类\r\n * 支持递归获取所有层级的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean; // 是否递归获取所有层级的子分类\r\n includeCurrent?: boolean; // 是否包含当前分类\r\n maxDepth?: number; // 最大递归深度,默认不限制\r\n }): Promise<{\r\n subCategories: Category[];\r\n currentCategory: Category | null;\r\n total: number;\r\n depth: number; // 实际递归深度\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n subCategories: [],\r\n currentCategory: null,\r\n total: 0,\r\n depth: 0\r\n };\r\n }\r\n \r\n const subCategories: Category[] = [];\r\n let maxDepth = options?.maxDepth || Infinity;\r\n let actualDepth = 0;\r\n \r\n // 递归获取子分类的函数\r\n const collectSubCategories = (parentId: number, currentDepth: number = 0): void => {\r\n if (currentDepth >= maxDepth) {\r\n return;\r\n }\r\n \r\n // 查找直接子分类\r\n const children = categories.filter(cat => cat.parentId === parentId);\r\n \r\n children.forEach(child => {\r\n subCategories.push(child);\r\n \r\n // 如果需要递归且未达到最大深度,继续查找子分类\r\n if (options?.recursive && currentDepth < maxDepth - 1) {\r\n collectSubCategories(child.categoryId, currentDepth + 1);\r\n }\r\n });\r\n \r\n // 更新实际深度\r\n actualDepth = Math.max(actualDepth, currentDepth);\r\n };\r\n \r\n // 开始收集子分类\r\n collectSubCategories(categoryId);\r\n \r\n // 如果需要包含当前分类,添加到结果中\r\n if (options?.includeCurrent) {\r\n subCategories.unshift(targetCategory);\r\n }\r\n \r\n return {\r\n subCategories,\r\n currentCategory: targetCategory,\r\n total: subCategories.length,\r\n depth: actualDepth\r\n };\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n Product,\r\n ProductCategory,\r\n ProductTag,\r\n ProductCategoryResponse,\r\n ProductTagResponse,\r\n ProductsByTagOptions,\r\n ProductsByCategoryOptions,\r\n TaxResponse,\r\n ShippingResponse,\r\n RegionResponse,\r\n PaymentMethodsResponse,\r\n PaymentMethodsOptions,\r\n PaymentMethod\r\n} from '../core/types';\r\n\r\nexport class ProductsAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 1. 根据产品ID获取产品详情\r\n */\r\n async getProduct(productId: number | string): Promise<Product> {\r\n const product = await this.client.request<Product>(`/products/${productId}.json`);\r\n \r\n // 检查产品是否有销售区域和税费模板\r\n if (product.regions && product.regions.length > 0 && \r\n product.taxTemplates && product.taxTemplates.length > 0) {\r\n try {\r\n // 获取税费信息\r\n const taxInfo = await this.getTaxInfo();\r\n \r\n // 为每个税费模板添加规则\r\n product.taxTemplates = product.taxTemplates.map(template => {\r\n const matchingTemplate = taxInfo.templates.find(t => t.templateId === template.templateId);\r\n if (matchingTemplate) {\r\n // 过滤出产品可销售区域的规则\r\n const productRegionIds = product.regions.map(r => r.regionId);\r\n const applicableRules = matchingTemplate.rules.filter(rule => \r\n productRegionIds.includes(rule.regionId)\r\n );\r\n \r\n return {\r\n ...template,\r\n rules: applicableRules\r\n };\r\n }\r\n return template;\r\n });\r\n } catch (error) {\r\n // 如果获取税费信息失败,不影响产品详情返回\r\n console.warn('Failed to fetch tax info:', error);\r\n }\r\n }\r\n \r\n // 检查产品是否有销售区域和运费模板\r\n if (product.regions && product.regions.length > 0 && \r\n product.shippingTemplates && product.shippingTemplates.length > 0) {\r\n try {\r\n // 获取运费信息\r\n const shippingInfo = await this.getShippingInfo();\r\n \r\n // 为每个运费模板添加规则\r\n product.shippingTemplates = product.shippingTemplates.map(template => {\r\n const matchingTemplate = shippingInfo.templates.find(t => t.templateId === template.templateId);\r\n if (matchingTemplate) {\r\n // 过滤出产品可销售区域的规则\r\n const productRegionIds = product.regions.map(r => r.regionId);\r\n const applicableRules = matchingTemplate.rules.filter(rule => \r\n productRegionIds.includes(rule.regionId)\r\n );\r\n \r\n return {\r\n ...template,\r\n rules: applicableRules\r\n };\r\n }\r\n return template;\r\n });\r\n } catch (error) {\r\n // 如果获取运费信息失败,不影响产品详情返回\r\n console.warn('Failed to fetch shipping info:', error);\r\n }\r\n }\r\n \r\n return product;\r\n }\r\n\r\n /**\r\n * 1.1. 根据产品ID获取父平台产品详情\r\n */\r\n async getProduct_p(productId: number | string): Promise<Product> {\r\n const product = await this.client.request<Product>(`/parentproducts/${productId}.json`);\r\n \r\n // 检查产品是否有销售区域和税费模板\r\n if (product.regions && product.regions.length > 0 && \r\n product.taxTemplates && product.taxTemplates.length > 0) {\r\n try {\r\n // 获取税费信息\r\n const taxInfo = await this.getTaxInfo();\r\n \r\n // 为每个税费模板添加规则\r\n product.taxTemplates = product.taxTemplates.map(template => {\r\n const matchingTemplate = taxInfo.templates.find(t => t.templateId === template.templateId);\r\n if (matchingTemplate) {\r\n // 过滤出产品可销售区域的规则\r\n const productRegionIds = product.regions.map(r => r.regionId);\r\n const applicableRules = matchingTemplate.rules.filter(rule => \r\n productRegionIds.includes(rule.regionId)\r\n );\r\n \r\n return {\r\n ...template,\r\n rules: applicableRules\r\n };\r\n }\r\n return template;\r\n });\r\n } catch (error) {\r\n // 如果获取税费信息失败,不影响产品详情返回\r\n console.warn('Failed to fetch tax info:', error);\r\n }\r\n }\r\n \r\n // 检查产品是否有销售区域和运费模板\r\n if (product.regions && product.regions.length > 0 && \r\n product.shippingTemplates && product.shippingTemplates.length > 0) {\r\n try {\r\n // 获取运费信息\r\n const shippingInfo = await this.getShippingInfo();\r\n \r\n // 为每个运费模板添加规则\r\n product.shippingTemplates = product.shippingTemplates.map(template => {\r\n const matchingTemplate = shippingInfo.templates.find(t => t.templateId === template.templateId);\r\n if (matchingTemplate) {\r\n // 过滤出产品可销售区域的规则\r\n const productRegionIds = product.regions.map(r => r.regionId);\r\n const applicableRules = matchingTemplate.rules.filter(rule => \r\n productRegionIds.includes(rule.regionId)\r\n );\r\n \r\n return {\r\n ...template,\r\n rules: applicableRules\r\n };\r\n }\r\n return template;\r\n });\r\n } catch (error) {\r\n // 如果获取运费信息失败,不影响产品详情返回\r\n console.warn('Failed to fetch shipping info:', error);\r\n }\r\n }\r\n \r\n return product;\r\n }\r\n\r\n /**\r\n * 2. 获取产品分类列表\r\n */\r\n async getCategories(productRootCategoryId?: number | string): Promise<ProductCategory[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = productRootCategoryId || config.productRootCategoryId || '277233';\r\n \r\n const response = await this.client.request<ProductCategoryResponse>(\r\n `/product-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 2.1. 获取平台产品分类列表\r\n */\r\n async getCategories_p(productRootCategoryId_p?: number | string): Promise<ProductCategory[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = productRootCategoryId_p || config.productRootCategoryId_p;\r\n \r\n const response = await this.client.request<ProductCategoryResponse>(\r\n `/product-categories/platform-${config.platformId_p}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 2.2. 获取平台产品分类列表\r\n */\r\n async getCategories_b(productRootCategoryId?: number | string): Promise<ProductCategory[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = productRootCategoryId || config.productRootCategoryId;\r\n \r\n const response = await this.client.request<ProductCategoryResponse>(\r\n `/big-product-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 3. 获取产品标签列表\r\n */\r\n async getTags(productTagAlias?: string): Promise<ProductTag[]> {\r\n const config = this.client.getConfig();\r\n const alias = productTagAlias || config.productTagAlias || '01';\r\n \r\n const response = await this.client.request<ProductTagResponse>(\r\n `/product-tags/platform-${config.platformId}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n }\r\n\r\n /**\r\n * 3.1. 获取平台产品标签列表\r\n */\r\n async getTags_p(productTagAlias_p?: string): Promise<ProductTag[]> {\r\n const config = this.client.getConfig();\r\n const alias = productTagAlias_p || config.productTagAlias_p;\r\n \r\n const response = await this.client.request<ProductTagResponse>(\r\n `/product-tags/platform-${config.platformId_p}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n } \r\n\r\n /**\r\n * 4. 根据分类ID获取产品列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getProductsByCategory(categoryId: number | number[], options?: ProductsByCategoryOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 递归查找分类的函数\r\n const findCategoryById = (cats: ProductCategory[], targetId: number): ProductCategory | null => {\r\n for (const cat of cats) {\r\n if (cat.categoryId === targetId) {\r\n return cat;\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n const found = findCategoryById(cat.children, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = findCategoryById(categories, id);\r\n if (targetCategory) {\r\n allProductIds.push(...targetCategory.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 4.1. 根据分类ID获取平台产品列表\r\n */\r\n\r\n async getProductsByCategory_p(categoryId: number | number[], options?: ProductsByCategoryOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories_p();\r\n \r\n // 递归查找分类的函数\r\n const findCategoryById = (cats: ProductCategory[], targetId: number): ProductCategory | null => {\r\n for (const cat of cats) {\r\n if (cat.categoryId === targetId) {\r\n return cat;\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n const found = findCategoryById(cat.children, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = findCategoryById(categories, id);\r\n if (targetCategory) {\r\n allProductIds.push(...targetCategory.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct_p(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 4.2. 根据分类ID获取平台产品列表\r\n */\r\n\r\n async getProductsByCategory_t(categoryId: number | number[], options?: ProductsByCategoryOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 递归查找分类的函数\r\n const findCategoryById = (cats: ProductCategory[], targetId: number): ProductCategory | null => {\r\n for (const cat of cats) {\r\n if (cat.categoryId === targetId) {\r\n return cat;\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n const found = findCategoryById(cat.children, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = findCategoryById(categories, id);\r\n if (targetCategory) {\r\n allProductIds.push(...targetCategory.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct_p(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n \r\n\r\n /**\r\n * 5. 根据标签ID获取产品列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getProductsByTag(tagId: number | number[], options?: ProductsByTagOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据,传递productTagAlias参数\r\n const tags = await this.getTags(options?.productTagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allProductIds.push(...targetTag.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 5.1. 根据标签ID获取平台产品列表\r\n */\r\n async getProductsByTag_p(tagId: number | number[], options?: ProductsByTagOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据,传递productTagAlias参数\r\n const tags = await this.getTags_p(options?.productTagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allProductIds.push(...targetTag.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct_p(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n\r\n /**\r\n * 5.2. 根据标签ID获取平台产品列表\r\n */\r\n async getProductsByTag_t(tagId: number | number[], options?: ProductsByTagOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n}> {\r\n // 获取标签数据,传递productTagAlias参数\r\n const tags = await this.getTags(options?.productTagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allProductIds.push(...targetTag.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct_p(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n}\r\n\r\n /**\r\n * 6. 根据分类ID获取该分类的层级路径\r\n * 用于前端面包屑导航\r\n */\r\n async getCategoryPath(categoryId: number): Promise<{\r\n path: ProductCategory[];\r\n currentCategory: ProductCategory | null;\r\n breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }>;\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 递归查找目标分类的函数\r\n const findCategoryById = (cats: ProductCategory[], targetId: number): ProductCategory | null => {\r\n for (const cat of cats) {\r\n if (cat.categoryId === targetId) {\r\n return cat;\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n const found = findCategoryById(cat.children, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // 查找目标分类(包括子分类)\r\n const targetCategory = findCategoryById(categories, categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n path: [],\r\n currentCategory: null,\r\n breadcrumbs: []\r\n };\r\n }\r\n \r\n // 构建分类路径\r\n const path: ProductCategory[] = [];\r\n const breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }> = [];\r\n \r\n // 递归查找父分类的函数\r\n const buildPath = (currentCategory: ProductCategory, level: number = 0): void => {\r\n // 将当前分类添加到路径开头(因为我们要从根到叶子构建)\r\n path.unshift(currentCategory);\r\n breadcrumbs.unshift({\r\n categoryId: currentCategory.categoryId,\r\n categoryName: currentCategory.categoryName,\r\n level\r\n });\r\n \r\n // 如果有父分类,继续递归\r\n if (currentCategory.parentId && currentCategory.parentId !== 0) {\r\n const parentCategory = findCategoryById(categories, currentCategory.parentId);\r\n if (parentCategory) {\r\n buildPath(parentCategory, level + 1);\r\n }\r\n }\r\n };\r\n \r\n // 从目标分类开始构建路径\r\n buildPath(targetCategory);\r\n \r\n return {\r\n path,\r\n currentCategory: targetCategory,\r\n breadcrumbs\r\n };\r\n }\r\n\r\n /**\r\n * 7. 获取指定分类ID下的子分类\r\n * 支持递归获取所有层级的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean; // 是否递归获取所有层级的子分类\r\n includeCurrent?: boolean; // 是否包含当前分类\r\n maxDepth?: number; // 最大递归深度,默认不限制\r\n }): Promise<{\r\n subCategories: ProductCategory[];\r\n currentCategory: ProductCategory | null;\r\n total: number;\r\n depth: number; // 实际递归深度\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 递归查找分类的函数\r\n const findCategoryById = (cats: ProductCategory[], targetId: number): ProductCategory | null => {\r\n for (const cat of cats) {\r\n if (cat.categoryId === targetId) {\r\n return cat;\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n const found = findCategoryById(cat.children, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // 查找目标分类(包括子分类)\r\n const targetCategory = findCategoryById(categories, categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n subCategories: [],\r\n currentCategory: null,\r\n total: 0,\r\n depth: 0\r\n };\r\n }\r\n \r\n const subCategories: ProductCategory[] = [];\r\n let maxDepth = options?.maxDepth || Infinity;\r\n let actualDepth = 0;\r\n \r\n // 递归获取子分类的函数\r\n const collectSubCategories = (parentId: number, currentDepth: number = 0): void => {\r\n if (currentDepth >= maxDepth) {\r\n return;\r\n }\r\n \r\n // 递归查找直接子分类\r\n const findChildren = (cats: ProductCategory[], parentId: number): ProductCategory[] => {\r\n const children: ProductCategory[] = [];\r\n for (const cat of cats) {\r\n if (cat.parentId === parentId) {\r\n children.push(cat);\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n children.push(...findChildren(cat.children, parentId));\r\n }\r\n }\r\n return children;\r\n };\r\n \r\n const children = findChildren(categories, parentId);\r\n \r\n children.forEach(child => {\r\n subCategories.push(child);\r\n \r\n // 如果需要递归且未达到最大深度,继续查找子分类\r\n if (options?.recursive && currentDepth < maxDepth - 1) {\r\n collectSubCategories(child.categoryId, currentDepth + 1);\r\n }\r\n });\r\n \r\n // 更新实际深度\r\n actualDepth = Math.max(actualDepth, currentDepth);\r\n };\r\n \r\n // 开始收集子分类\r\n collectSubCategories(categoryId);\r\n \r\n // 如果需要包含当前分类,添加到结果中\r\n if (options?.includeCurrent) {\r\n subCategories.unshift(targetCategory);\r\n }\r\n \r\n return {\r\n subCategories,\r\n currentCategory: targetCategory,\r\n total: subCategories.length,\r\n depth: actualDepth\r\n };\r\n }\r\n\r\n /**\r\n * 8. 获取税费信息\r\n * 获取平台的所有税费模板和规则\r\n */\r\n async getTaxInfo(): Promise<TaxResponse> {\r\n const config = this.client.getConfig();\r\n return this.client.request<TaxResponse>(`/tax/platform-${config.platformId}.json`);\r\n }\r\n\r\n /**\r\n * 9. 获取运费信息\r\n * 获取平台的所有运费模板和规则\r\n */\r\n async getShippingInfo(): Promise<ShippingResponse> {\r\n const config = this.client.getConfig();\r\n return this.client.request<ShippingResponse>(`/shipping/platform-${config.platformId}.json`);\r\n }\r\n\r\n /**\r\n * 10. 获取区域信息\r\n * 获取平台的所有区域信息,包括层级结构\r\n */\r\n async getRegions(): Promise<RegionResponse> {\r\n const config = this.client.getConfig();\r\n return this.client.request<RegionResponse>(`/regions/platform-${config.platformId}.json`);\r\n }\r\n\r\n /**\r\n * 11. 获取支付方式信息\r\n * 获取平台的所有支付方式,包括API支付和手动支付\r\n * @param paymentAlias 支付方式别名,默认为'01'\r\n */\r\n async getPaymentMethods(paymentAlias?: string): Promise<PaymentMethodsResponse> {\r\n const config = this.client.getConfig();\r\n const alias = paymentAlias || '01';\r\n return this.client.request<PaymentMethodsResponse>(`/payment/platform-${config.platformId}-${alias}.json`);\r\n }\r\n\r\n /**\r\n * 12. 根据支付方式类型获取支付方式列表\r\n * @param type 支付方式类型:'Api' | 'Manual' | 'Gateway' | 'Crypto'\r\n * @param paymentAlias 支付方式别名,默认为'01'\r\n */\r\n async getPaymentMethodsByType(type: 'Api' | 'Manual' | 'Gateway' | 'Crypto', paymentAlias?: string): Promise<PaymentMethod[]> {\r\n const response = await this.getPaymentMethods(paymentAlias);\r\n return response.methods.filter(method => method.type === type);\r\n }\r\n\r\n /**\r\n * 13. 根据支付方式ID获取特定支付方式详情\r\n * @param methodId 支付方式ID\r\n * @param paymentAlias 支付方式别名,默认为'01'\r\n */\r\n async getPaymentMethodById(methodId: number, paymentAlias?: string): Promise<PaymentMethod | null> {\r\n const response = await this.getPaymentMethods(paymentAlias);\r\n return response.methods.find(method => method.id === methodId) || null;\r\n }\r\n\r\n /**\r\n * 14. 获取支付方式属性值\r\n * @param methodId 支付方式ID\r\n * @param attrName 属性名称\r\n * @param paymentAlias 支付方式别名,默认为'01'\r\n */\r\n async getPaymentMethodAttribute(methodId: number, attrName: string, paymentAlias?: string): Promise<string | null> {\r\n const method = await this.getPaymentMethodById(methodId, paymentAlias);\r\n if (!method) return null;\r\n \r\n const attribute = method.attrs.find(attr => attr.attrName === attrName);\r\n return attribute ? attribute.attrValue : null;\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n Setting,\r\n SettingsResponse,\r\n SettingResponse\r\n} from '../core/types';\r\n\r\nexport class SettingsAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 获取全局设置列表\r\n * 根据平台ID和别名获取所有全局设置\r\n */\r\n async getSettings(settingAlias?: string): Promise<Setting[]> {\r\n const config = this.client.getConfig();\r\n const alias = settingAlias || config.settingAlias || '01';\r\n \r\n const response = await this.client.request<SettingsResponse>(\r\n `/settings/platform-${config.platformId}-${alias}.json`\r\n );\r\n \r\n return response.settings;\r\n }\r\n\r\n /**\r\n * 获取平台全局设置列表\r\n * 根据平台ID和别名获取所有全局设置\r\n */\r\n async getSettings_p(settingAlias_p?: string): Promise<Setting[]> {\r\n const config = this.client.getConfig();\r\n const alias = settingAlias_p || config.settingAlias_p || '01';\r\n \r\n const response = await this.client.request<SettingsResponse>(\r\n `/settings/platform-${config.platformId_p}-${alias}.json`\r\n );\r\n \r\n return response.settings;\r\n }\r\n\r\n /**\r\n * 获取指定设置\r\n * 根据设置key直接获取单个设置\r\n */\r\n async getSetting(key: string): Promise<Setting | null> {\r\n const config = this.client.getConfig();\r\n \r\n try {\r\n const response = await this.client.request<SettingResponse>(\r\n `/settings/platform-${config.platformId}-${key}.json`\r\n );\r\n \r\n return response.setting;\r\n } catch (error) {\r\n console.warn(`Failed to fetch setting ${key}:`, error);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * 获取平台用户指定设置\r\n * 根据设置key直接获取单个设置\r\n */\r\n async getSetting_p(key: string): Promise<Setting | null> {\r\n const config = this.client.getConfig();\r\n \r\n try {\r\n const response = await this.client.request<SettingResponse>(\r\n `/settings/platform-${config.platformId_p}-${key}.json`\r\n );\r\n \r\n return response.setting;\r\n } catch (error) {\r\n console.warn(`Failed to fetch setting ${key}:`, error);\r\n return null;\r\n }\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n FormSubmitData,\r\n FormSubmitResponse,\r\n FormSubmitOptions\r\n} from '../core/types';\r\n\r\nexport class FormsAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 通用表单提交方法\r\n * @param aliases 表单别名(如 'CONTACT', 'FEEDBACK' 等)\r\n * @param email 用户邮箱\r\n * @param fieldValue 表单字段值\r\n * @param options 提交选项\r\n */\r\n async submitForm(\r\n aliases: string,\r\n email: string,\r\n fieldValue: Record<string, any>,\r\n options?: FormSubmitOptions\r\n ): Promise<FormSubmitResponse> {\r\n const config = this.client.getConfig();\r\n const endpoint = options?.endpoint || '/api/platform/table';\r\n const createSecret = options?.createSecret || 'Cmx349181!';\r\n\r\n const submitData: FormSubmitData = {\r\n platformId: config.platformId,\r\n aliases,\r\n email,\r\n fieldValue,\r\n createSecret\r\n };\r\n\r\n try {\r\n const response = await fetch(`${config.baseUrl}${endpoint}`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(submitData)\r\n });\r\n\r\n const result = await response.json();\r\n \r\n return {\r\n success: response.ok && result.success !== false,\r\n message: result.message || (response.ok ? '提交成功' : '提交失败'),\r\n data: result.data,\r\n code: result.code\r\n };\r\n } catch (error) {\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '网络错误',\r\n data: null\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 联系表单提交\r\n * @param formData 联系表单数据\r\n */\r\n async submitContactForm(formData: {\r\n firstName: string;\r\n lastName?: string;\r\n email: string;\r\n phone?: string;\r\n subject: string;\r\n message: string;\r\n }): Promise<FormSubmitResponse> {\r\n return this.submitForm('CONTACT', formData.email, {\r\n firstName: formData.firstName,\r\n lastName: formData.lastName || '',\r\n phone: formData.phone || '',\r\n subject: formData.subject,\r\n message: formData.message\r\n });\r\n }\r\n\r\n /**\r\n * 反馈表单提交\r\n * @param formData 反馈表单数据\r\n */\r\n async submitFeedbackForm(formData: {\r\n name: string;\r\n email: string;\r\n type: string;\r\n message: string;\r\n rating?: number;\r\n }): Promise<FormSubmitResponse> {\r\n return this.submitForm('FEEDBACK', formData.email, {\r\n name: formData.name,\r\n type: formData.type,\r\n message: formData.message,\r\n rating: formData.rating || 0\r\n });\r\n }\r\n\r\n /**\r\n * 注册表单提交\r\n * @param formData 注册表单数据\r\n */\r\n async submitRegistrationForm(formData: {\r\n username: string;\r\n email: string;\r\n password: string;\r\n confirmPassword: string;\r\n agreeTerms: boolean;\r\n }): Promise<FormSubmitResponse> {\r\n return this.submitForm('REGISTRATION', formData.email, {\r\n username: formData.username,\r\n password: formData.password,\r\n confirmPassword: formData.confirmPassword,\r\n agreeTerms: formData.agreeTerms\r\n });\r\n }\r\n\r\n /**\r\n * 自定义表单提交\r\n * @param aliases 表单别名\r\n * @param formData 表单数据对象\r\n * @param emailField 邮箱字段名(默认为 'email')\r\n */\r\n async submitCustomForm(\r\n aliases: string,\r\n formData: Record<string, any>,\r\n emailField: string = 'email'\r\n ): Promise<FormSubmitResponse> {\r\n const email = formData[emailField];\r\n if (!email) {\r\n return {\r\n success: false,\r\n message: '邮箱地址是必需的'\r\n };\r\n }\r\n\r\n // 移除邮箱字段,避免重复\r\n const { [emailField]: _, ...fieldValue } = formData;\r\n \r\n return this.submitForm(aliases, email, fieldValue);\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\n\r\n// 用户登录请求参数\r\nexport interface LoginRequest {\r\n username: string;\r\n password: string;\r\n platformId: number;\r\n}\r\n\r\n// 用户登录响应\r\nexport interface LoginResponse {\r\n success: boolean;\r\n message?: string;\r\n token?: string;\r\n user?: {\r\n userId: number;\r\n username: string;\r\n userLevel: number;\r\n status: boolean;\r\n platformId: number;\r\n d1: number;\r\n d2: number;\r\n d3: number;\r\n };\r\n}\r\n\r\n// 用户注册请求参数\r\nexport interface RegisterRequest {\r\n username: string;\r\n password: string;\r\n platformId: number;\r\n ibcode?: string;\r\n}\r\n\r\n// 用户注册响应\r\nexport interface RegisterResponse {\r\n success: boolean;\r\n message?: string;\r\n userId?: number;\r\n}\r\n\r\n// 用户数据类型\r\nexport interface UserData {\r\n userId: number;\r\n username: string;\r\n userLevel: number;\r\n status: boolean;\r\n platformId: number;\r\n d1: number;\r\n d2: number;\r\n d3: number;\r\n token: string;\r\n}\r\n\r\n// 用户资金数据类型\r\nexport interface UserFunds {\r\n id: number;\r\n userId: number;\r\n userType: number;\r\n fund: string;\r\n noFund: string;\r\n rentFund: string;\r\n marginFund: string;\r\n marginNoFund: string;\r\n userIntegral: number;\r\n creditLevel: number;\r\n}\r\n\r\n// 用户资金响应类型\r\nexport interface UserFundsResponse {\r\n success: boolean;\r\n fund: UserFunds;\r\n message?: string;\r\n}\r\n\r\n// 支付记录类型\r\nexport interface PaymentRecord {\r\n id: number;\r\n orderId: string;\r\n userId: number;\r\n userType: number;\r\n methodId: number;\r\n recordType: number;\r\n amount: string;\r\n status: string;\r\n description?: string;\r\n adminDescription?: string;\r\n img?: string;\r\n createTime: string;\r\n updateTime?: string;\r\n}\r\n\r\n// 支付记录列表响应类型\r\nexport interface PaymentRecordsResponse {\r\n success: boolean;\r\n records: PaymentRecord[];\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n message?: string;\r\n}\r\n\r\n// 获取支付记录选项\r\nexport interface PaymentRecordsOptions {\r\n page?: number;\r\n pageSize?: number;\r\n status?: string;\r\n recordType?: number;\r\n methodId?: number;\r\n}\r\n\r\n// 资金日志类型\r\nexport interface FundLog {\r\n logId: number;\r\n fundId: number | null;\r\n userId: number;\r\n fieldName: string;\r\n oldBalance: string;\r\n newBalance: string;\r\n changeAmount: string;\r\n operatorId: number;\r\n operationTime: string;\r\n remark: string | null;\r\n}\r\n\r\n// 资金日志响应类型\r\nexport interface FundLogsResponse {\r\n success: boolean;\r\n logs: FundLog[];\r\n total: number;\r\n message?: string;\r\n}\r\n\r\n// 获取资金日志选项\r\nexport interface FundLogsOptions {\r\n page?: number;\r\n pageSize?: number;\r\n}\r\n\r\n// 零售订单详情类型\r\nexport interface RetailOrderDetail {\r\n detail_id: number;\r\n product_id: number;\r\n product_name: string;\r\n address_id: number;\r\n sku: string;\r\n shipping_fee: number;\r\n tax_fee: number;\r\n quantity: number;\r\n single_price: number;\r\n total_price: number;\r\n region_id: number;\r\n remark: string;\r\n created_at: string;\r\n updated_at: string;\r\n}\r\n\r\n// 零售订单类型\r\nexport interface RetailOrder {\r\n order_id: number;\r\n user_id: number;\r\n user_type: number;\r\n total_amount: number;\r\n pay_way: number;\r\n payment_record_id: number | null;\r\n fund_log_id: number | null;\r\n status: number;\r\n product_type: number;\r\n created_at: string;\r\n updated_at: string;\r\n platform_id: number;\r\n d1: number;\r\n d2: number;\r\n d3: number;\r\n details: RetailOrderDetail[];\r\n}\r\n\r\n// 零售订单响应类型\r\nexport interface RetailOrdersResponse {\r\n success: boolean;\r\n data: {\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n orders: RetailOrder[];\r\n };\r\n message?: string;\r\n}\r\n\r\n// 获取零售订单选项\r\nexport interface RetailOrdersOptions {\r\n page?: number;\r\n pageSize?: number;\r\n}\r\n\r\n// 地址信息类型\r\nexport interface AddressInfo {\r\n addressId: number;\r\n userId: number;\r\n userType: number;\r\n consignee: string;\r\n phone: string;\r\n address: string;\r\n regionId: number;\r\n isDefault: boolean;\r\n createdAt: string;\r\n updatedAt: string;\r\n}\r\n\r\n// 地址信息响应类型\r\nexport interface AddressesResponse {\r\n success: boolean;\r\n addresses?: AddressInfo[];\r\n message?: string;\r\n}\r\n\r\n// 用户资料类型\r\nexport interface UserProfile {\r\n email: string | null;\r\n phone: string | null;\r\n avatar: string | null;\r\n realName: string | null;\r\n}\r\n\r\n// 用户资料响应类型\r\nexport interface UserProfileResponse {\r\n success: boolean;\r\n message?: string;\r\n user?: UserProfile;\r\n}\r\n\r\n// 更新用户资料请求类型\r\nexport interface UpdateProfileRequest {\r\n email?: string;\r\n phone?: string;\r\n realName?: string;\r\n avatar?: string;\r\n}\r\n\r\n// 更新用户资料响应类型\r\nexport interface UpdateProfileResponse {\r\n success: boolean;\r\n message?: string;\r\n}\r\n\r\n// 修改密码请求类型\r\nexport interface ChangePasswordRequest {\r\n oldPassword: string;\r\n newPassword: string;\r\n}\r\n\r\n// 修改密码响应类型\r\nexport interface ChangePasswordResponse {\r\n success: boolean;\r\n message?: string;\r\n}\r\n\r\n// 地址创建/更新请求类型\r\nexport interface AddressRequest {\r\n regionId: number;\r\n consignee: string;\r\n phone: string;\r\n address: string;\r\n isDefault: boolean;\r\n userType?: number; // 新增userType字段,可选\r\n}\r\n\r\n// 地址创建/更新响应类型\r\nexport interface AddressResponse {\r\n success: boolean;\r\n message?: string;\r\n addressId?: number;\r\n}\r\n\r\n// 文件上传响应类型\r\nexport interface UploadResponse {\r\n success: boolean;\r\n message?: string;\r\n url?: string;\r\n}\r\n\r\n/**\r\n * 用户管理API模块\r\n * 提供用户登录、注册等功能\r\n */\r\nexport class UsersAPI {\r\n private client: GT6Client;\r\n\r\n constructor(client: GT6Client) {\r\n this.client = client;\r\n }\r\n\r\n /**\r\n * 用户登录\r\n * @param loginData 登录数据\r\n * @returns 登录响应\r\n */\r\n async login(loginData: LoginRequest): Promise<LoginResponse> {\r\n try {\r\n const response = await this.client.request('/web/user/login', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(loginData)\r\n });\r\n\r\n return response as LoginResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回特定的错误信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '用户名或密码错误'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '登录请求失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 用户注册\r\n * @param registerData 注册数据\r\n * @returns 注册响应\r\n */\r\n async register(registerData: RegisterRequest): Promise<RegisterResponse> {\r\n try {\r\n const response = await this.client.request('/web/user/register', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(registerData)\r\n });\r\n\r\n return response as RegisterResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于400错误,可能是用户名已存在等验证错误\r\n if (error.statusCode === 400) {\r\n return {\r\n success: false,\r\n message: '注册信息有误,请检查输入'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '注册请求失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 保存用户数据到本地存储\r\n * @param userData 用户数据\r\n */\r\n saveUserData(userData: UserData): void {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n localStorage.setItem('userData', JSON.stringify(userData));\r\n }\r\n }\r\n\r\n /**\r\n * 从本地存储获取用户数据\r\n * @returns 用户数据或null\r\n */\r\n getUserData(): UserData | null {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n const userDataStr = localStorage.getItem('userData');\r\n if (userDataStr) {\r\n try {\r\n return JSON.parse(userDataStr) as UserData;\r\n } catch (error) {\r\n console.warn('解析用户数据失败:', error);\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 清除本地存储的用户数据\r\n */\r\n clearUserData(): void {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n localStorage.removeItem('userData');\r\n }\r\n }\r\n\r\n /**\r\n * 检查用户是否已登录\r\n * @returns 是否已登录\r\n */\r\n isLoggedIn(): boolean {\r\n const userData = this.getUserData();\r\n return userData !== null && userData.token !== undefined;\r\n }\r\n\r\n /**\r\n * 获取当前登录用户的token\r\n * @returns token或null\r\n */\r\n getToken(): string | null {\r\n const userData = this.getUserData();\r\n return userData?.token || null;\r\n }\r\n\r\n /**\r\n * 获取当前登录用户信息\r\n * @returns 用户信息或null\r\n */\r\n getCurrentUser(): Omit<UserData, 'token'> | null {\r\n const userData = this.getUserData();\r\n if (userData) {\r\n const { token, ...userInfo } = userData;\r\n return userInfo;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 用户登出\r\n */\r\n logout(): void {\r\n this.clearUserData();\r\n }\r\n\r\n /**\r\n * 记住用户登录信息\r\n * @param username 用户名\r\n * @param password 密码\r\n */\r\n rememberLogin(username: string, password: string): void {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n localStorage.setItem('rememberedUsername', username);\r\n localStorage.setItem('rememberedPassword', password);\r\n }\r\n }\r\n\r\n /**\r\n * 获取记住的登录信息\r\n * @returns 记住的登录信息\r\n */\r\n getRememberedLogin(): { username: string; password: string } | null {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n const username = localStorage.getItem('rememberedUsername');\r\n const password = localStorage.getItem('rememberedPassword');\r\n if (username && password) {\r\n return { username, password };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 清除记住的登录信息\r\n */\r\n clearRememberedLogin(): void {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n localStorage.removeItem('rememberedUsername');\r\n localStorage.removeItem('rememberedPassword');\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户资金信息\r\n * @returns 用户资金信息\r\n */\r\n async getUserFunds(): Promise<UserFundsResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n fund: {} as UserFunds,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/user/fund', {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as UserFundsResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n fund: {} as UserFunds,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n fund: {} as UserFunds,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n fund: {} as UserFunds,\r\n message: error instanceof Error ? error.message : '获取资金信息失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户资金信息(简化版本,返回资金对象或null)\r\n * @returns 用户资金信息或null\r\n */\r\n async getFunds(): Promise<UserFunds | null> {\r\n const result = await this.getUserFunds();\r\n return result.success ? result.fund : null;\r\n }\r\n\r\n /**\r\n * 获取用户支付记录列表\r\n * @param options 查询选项\r\n * @returns 支付记录列表响应\r\n */\r\n async getPaymentRecords(options?: PaymentRecordsOptions): Promise<PaymentRecordsResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n records: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 构建查询参数\r\n const params = new URLSearchParams();\r\n if (options?.page) params.set('page', options.page.toString());\r\n if (options?.pageSize) params.set('pageSize', options.pageSize.toString());\r\n if (options?.status) params.set('status', options.status);\r\n if (options?.recordType) params.set('recordType', options.recordType.toString());\r\n if (options?.methodId) params.set('methodId', options.methodId.toString());\r\n\r\n const url = `/web/payment/records${params.toString() ? `?${params.toString()}` : ''}`;\r\n\r\n const response = await this.client.request(url, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as PaymentRecordsResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n records: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n records: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n records: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n message: error instanceof Error ? error.message : '获取支付记录失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户支付记录列表(简化版本)\r\n * @param page 页码,默认为1\r\n * @param pageSize 每页数量,默认为10\r\n * @returns 支付记录列表或null\r\n */\r\n async getPaymentRecordsSimple(page: number = 1, pageSize: number = 10): Promise<{\r\n records: PaymentRecord[];\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n } | null> {\r\n const result = await this.getPaymentRecords({ page, pageSize });\r\n return result.success ? {\r\n records: result.records,\r\n total: result.total,\r\n page: result.page,\r\n pageSize: result.pageSize\r\n } : null;\r\n }\r\n\r\n /**\r\n * 获取用户资金日志列表\r\n * @param options 查询选项\r\n * @returns 资金日志列表响应\r\n */\r\n async getFundLogs(options?: FundLogsOptions): Promise<FundLogsResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n logs: [],\r\n total: 0,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 构建查询参数\r\n const params = new URLSearchParams();\r\n if (options?.page) params.set('page', options.page.toString());\r\n if (options?.pageSize) params.set('pageSize', options.pageSize.toString());\r\n\r\n const url = `/web/user/fund/logs${params.toString() ? `?${params.toString()}` : ''}`;\r\n\r\n const response = await this.client.request(url, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as FundLogsResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n logs: [],\r\n total: 0,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n logs: [],\r\n total: 0,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n logs: [],\r\n total: 0,\r\n message: error instanceof Error ? error.message : '获取资金日志失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户资金日志列表(简化版本)\r\n * @param page 页码,默认为1\r\n * @param pageSize 每页数量,默认为10\r\n * @returns 资金日志列表或null\r\n */\r\n async getFundLogsSimple(page: number = 1, pageSize: number = 10): Promise<{\r\n logs: FundLog[];\r\n total: number;\r\n } | null> {\r\n const result = await this.getFundLogs({ page, pageSize });\r\n return result.success ? {\r\n logs: result.logs,\r\n total: result.total\r\n } : null;\r\n }\r\n\r\n /**\r\n * 获取用户零售订单列表\r\n * @param options 查询选项\r\n * @returns 零售订单列表响应\r\n */\r\n async getRetailOrders(options?: RetailOrdersOptions): Promise<RetailOrdersResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n data: {\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n orders: []\r\n },\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 构建查询参数\r\n const params = new URLSearchParams();\r\n if (options?.page) params.set('page', options.page.toString());\r\n if (options?.pageSize) params.set('page_size', options.pageSize.toString());\r\n\r\n const url = `/web/orders${params.toString() ? `?${params.toString()}` : ''}`;\r\n\r\n const response = await this.client.request(url, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as RetailOrdersResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n data: {\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n orders: []\r\n },\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n data: {\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n orders: []\r\n },\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n data: {\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n orders: []\r\n },\r\n message: error instanceof Error ? error.message : '获取零售订单失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户零售订单列表(简化版本)\r\n * @param page 页码,默认为1\r\n * @param pageSize 每页数量,默认为10\r\n * @returns 零售订单列表或null\r\n */\r\n async getRetailOrdersSimple(page: number = 1, pageSize: number = 10): Promise<{\r\n orders: RetailOrder[];\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n } | null> {\r\n const result = await this.getRetailOrders({ page, pageSize });\r\n return result.success ? {\r\n orders: result.data.orders,\r\n total: result.data.total,\r\n page: result.data.page,\r\n pageSize: result.data.pageSize\r\n } : null;\r\n }\r\n\r\n /**\r\n * 获取用户地址列表\r\n * @param userType 用户类型,默认为2(普通用户)\r\n * @returns 地址列表响应\r\n */\r\n async getAddresses(userType: number = 2): Promise<AddressesResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request(`/web/user/addresses?userType=${userType}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as AddressesResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '获取地址列表失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户地址列表(简化版本)\r\n * @param userType 用户类型,默认为2(普通用户)\r\n * @returns 地址列表或null\r\n */\r\n async getAddressesSimple(userType: number = 2): Promise<AddressInfo[] | null> {\r\n const result = await this.getAddresses(userType);\r\n return result.success && result.addresses ? result.addresses : null;\r\n }\r\n\r\n /**\r\n * 根据地址ID获取地址信息\r\n * @param addressId 地址ID\r\n * @param userType 用户类型,默认为2(普通用户)\r\n * @returns 地址信息或null\r\n */\r\n async getAddressById(addressId: number, userType: number = 2): Promise<AddressInfo | null> {\r\n const addresses = await this.getAddressesSimple(userType);\r\n if (addresses) {\r\n return addresses.find(addr => addr.addressId === addressId) || null;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 获取用户资料\r\n * @returns 用户资料响应\r\n */\r\n async getUserProfile(): Promise<UserProfileResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/user/profile', {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as UserProfileResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '获取用户资料失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户资料(简化版本)\r\n * @returns 用户资料或null\r\n */\r\n async getProfile(): Promise<UserProfile | null> {\r\n const result = await this.getUserProfile();\r\n return result.success && result.user ? result.user : null;\r\n }\r\n\r\n /**\r\n * 更新用户资料\r\n * @param profileData 用户资料数据\r\n * @returns 更新响应\r\n */\r\n async updateProfile(profileData: UpdateProfileRequest): Promise<UpdateProfileResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/user/profile', {\r\n method: 'PUT',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(profileData)\r\n });\r\n\r\n return response as UpdateProfileResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '更新用户资料失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 修改密码\r\n * @param passwordData 密码数据\r\n * @returns 修改密码响应\r\n */\r\n async changePassword(passwordData: ChangePasswordRequest): Promise<ChangePasswordResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/user/password', {\r\n method: 'PUT',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(passwordData)\r\n });\r\n\r\n return response as ChangePasswordResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '修改密码失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 创建地址\r\n * @param addressData 地址数据\r\n * @returns 创建地址响应\r\n */\r\n async createAddress(addressData: AddressRequest): Promise<AddressResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 确保userType有默认值\r\n const requestData = {\r\n ...addressData,\r\n userType: addressData.userType || 2\r\n };\r\n\r\n const response = await this.client.request('/web/user/addresses', {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(requestData)\r\n });\r\n\r\n return response as AddressResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '创建地址失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 更新地址\r\n * @param addressId 地址ID\r\n * @param addressData 地址数据\r\n * @returns 更新地址响应\r\n */\r\n async updateAddress(addressId: number, addressData: AddressRequest): Promise<AddressResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 确保userType有默认值\r\n const requestData = {\r\n ...addressData,\r\n userType: addressData.userType || 2\r\n };\r\n\r\n const response = await this.client.request(`/web/user/addresses/${addressId}`, {\r\n method: 'PUT',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(requestData)\r\n });\r\n\r\n return response as AddressResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '更新地址失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 删除地址\r\n * @param addressId 地址ID\r\n * @param userType 用户类型,默认为2(普通用户)\r\n * @returns 删除地址响应\r\n */\r\n async deleteAddress(addressId: number, userType: number = 2): Promise<AddressResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request(`/web/user/addresses/${addressId}?userType=${userType}`, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as AddressResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '删除地址失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 上传文件\r\n * @param file 文件对象\r\n * @returns 上传响应\r\n */\r\n async uploadFile(file: File): Promise<UploadResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 创建FormData\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n\r\n const response = await this.client.request('/web/upload', {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`\r\n },\r\n body: formData\r\n });\r\n\r\n return response as UploadResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '文件上传失败'\r\n };\r\n }\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport { RetailOrder, RetailOrderDetail } from './users';\r\n\r\n// 资金扣款请求参数\r\nexport interface DeductFundsRequest {\r\n fieldName: string;\r\n changeAmount: number;\r\n remark?: string;\r\n}\r\n\r\n// 资金扣款响应\r\nexport interface DeductFundsResponse {\r\n success: boolean;\r\n message?: string;\r\n logId?: number;\r\n newBalance?: string;\r\n}\r\n\r\n// 创建零售订单请求参数\r\nexport interface CreateRetailOrderRequest {\r\n user_id: number;\r\n user_type: number;\r\n total_amount: number;\r\n pay_way: number;\r\n product_type: number;\r\n platform_id: number;\r\n d1: number;\r\n d2: number;\r\n d3: number;\r\n products: Array<{\r\n product_id: number;\r\n quantity: number;\r\n sku: string;\r\n price: number;\r\n region_id: number;\r\n address_id: number;\r\n shipping_fee: number;\r\n tax_fee: number;\r\n }>;\r\n fundLogId?: number;\r\n status?: number;\r\n}\r\n\r\n// 创建零售订单响应\r\nexport interface CreateRetailOrderResponse {\r\n success: boolean;\r\n message?: string;\r\n order?: RetailOrder;\r\n orderId?: number;\r\n data?: {\r\n order_id: string;\r\n total_amount: number;\r\n };\r\n}\r\n\r\n// 创建支付记录请求参数\r\nexport interface CreatePaymentRecordRequest {\r\n methodId: number;\r\n recordType: number; // 1: 充值, 2: 订单支付\r\n orderId?: number;\r\n amount: number;\r\n description?: string;\r\n img?: string; // 支付凭证图片URL\r\n userType: number;\r\n orderData?: {\r\n user_id: number;\r\n products: Array<{\r\n product_id: number;\r\n quantity: number;\r\n sku: string;\r\n price: number;\r\n region_id: number;\r\n address_id: number;\r\n shipping_fee: number;\r\n tax_fee: number;\r\n }>;\r\n total_amount: number;\r\n platform_id: number;\r\n d1: number;\r\n d2: number;\r\n d3: number;\r\n pay_way: number;\r\n };\r\n}\r\n\r\n// 创建支付记录响应\r\nexport interface CreatePaymentRecordResponse {\r\n success: boolean;\r\n message?: string;\r\n code?: number;\r\n data?: {\r\n record_id?: number;\r\n order_id?: string;\r\n };\r\n}\r\n\r\n/**\r\n * 交易管理API模块\r\n * 提供资金扣款、订单创建等功能\r\n */\r\nexport class TransactionsAPI {\r\n private client: GT6Client;\r\n\r\n constructor(client: GT6Client) {\r\n this.client = client;\r\n }\r\n\r\n /**\r\n * 资金扣款\r\n * @param deductData 扣款数据\r\n * @returns 扣款响应\r\n */\r\n async deductFunds(deductData: DeductFundsRequest): Promise<DeductFundsResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/user/fund/operation', {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(deductData)\r\n });\r\n\r\n return response as DeductFundsResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于400错误,可能是余额不足等业务错误\r\n if (error.statusCode === 400) {\r\n return {\r\n success: false,\r\n message: error.message || '扣款失败,请检查余额'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '资金扣款失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 创建零售订单\r\n * @param orderData 订单数据\r\n * @returns 创建订单响应\r\n */\r\n async createRetailOrder(orderData: CreateRetailOrderRequest): Promise<CreateRetailOrderResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/order/create', {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(orderData)\r\n });\r\n\r\n return response as CreateRetailOrderResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于400错误,可能是订单数据有误\r\n if (error.statusCode === 400) {\r\n return {\r\n success: false,\r\n message: error.message || '订单数据有误,请检查输入'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '创建订单失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户token(从本地存储)\r\n * @returns token或null\r\n */\r\n private getToken(): string | null {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n const userDataStr = localStorage.getItem('userData');\r\n if (userDataStr) {\r\n try {\r\n const userData = JSON.parse(userDataStr);\r\n return userData.token || null;\r\n } catch (error) {\r\n console.warn('解析用户数据失败:', error);\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 创建支付记录\r\n * @param paymentData 支付记录数据\r\n * @returns 创建支付记录响应\r\n */\r\n async createPaymentRecord(paymentData: CreatePaymentRecordRequest): Promise<CreatePaymentRecordResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/payment/record/create', {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(paymentData)\r\n });\r\n\r\n // 检查响应格式\r\n if (response && typeof response === 'object') {\r\n // 如果响应包含 code 字段,说明是标准格式\r\n if ('code' in response) {\r\n const responseData = response as any;\r\n return {\r\n success: responseData.code === 0,\r\n message: responseData.message || (responseData.code === 0 ? '支付申请已提交' : '提交失败'),\r\n code: responseData.code,\r\n data: responseData.data\r\n };\r\n }\r\n \r\n // 如果没有 code 字段,可能是其他格式\r\n return {\r\n success: true,\r\n message: '支付申请已提交',\r\n data: response\r\n };\r\n }\r\n\r\n return {\r\n success: false,\r\n message: '响应格式错误'\r\n };\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于400错误,可能是数据有误\r\n if (error.statusCode === 400) {\r\n return {\r\n success: false,\r\n message: error.message || '支付数据有误,请检查输入'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '创建支付记录失败'\r\n };\r\n }\r\n }\r\n} ","import { GT6Client } from './core/client';\nimport { ArticlesAPI } from './modules/articles';\nimport { ProductsAPI } from './modules/products';\nimport { SettingsAPI } from './modules/settings';\nimport { FormsAPI } from './modules/forms';\nimport { UsersAPI } from './modules/users';\nimport { TransactionsAPI } from './modules/transactions';\nimport { \n GT6Config, \n ArticlesByCategoryOptions, \n ArticlesByTagOptions,\n ProductsByCategoryOptions,\n ProductsByTagOptions\n} from './core/types';\n\n/**\n * GT6 SDK 主类\n * 提供文章、产品、设置、表单和用户管理相关的所有功能\n */\nexport class GT6SDK {\n public articles: ArticlesAPI;\n public products: ProductsAPI;\n public settings: SettingsAPI;\n public forms: FormsAPI;\n public users: UsersAPI;\n public transactions: TransactionsAPI;\n\n constructor(config: GT6Config) {\n const client = new GT6Client(config);\n this.articles = new ArticlesAPI(client);\n this.products = new ProductsAPI(client);\n this.settings = new SettingsAPI(client);\n this.forms = new FormsAPI(client);\n this.users = new UsersAPI(client);\n this.transactions = new TransactionsAPI(client);\n }\n\n /**\n * 获取客户端实例(用于高级用法)\n */\n getClient(): GT6Client {\n return (this.articles as any).client;\n }\n\n /**\n * 清除所有缓存\n */\n clearCache(): void {\n this.getClient().clearCache();\n }\n\n /**\n * 获取缓存统计信息\n */\n getCacheStats() {\n return this.getClient().getCacheStats();\n }\n\n /**\n * 1. 便捷方法:根据文章ID获取文章详情\n */\n async getArticle(articleId: number | string) {\n return this.articles.getArticle(articleId);\n }\n\n /**\n * 1.1. 便捷方法:根据文章ID获取文章详情(使用上级平台ID)\n */\n async getArticle_p(articleId: number | string) {\n return this.articles.getArticle_p(articleId);\n }\n\n /**\n * 2. 便捷方法:获取文章分类列表\n */\n async getCategories(rootCategoryId?: number | string) {\n return this.articles.getCategories(rootCategoryId);\n }\n\n /**\n * 2.1. 便捷方法:获取文章分类列表(使用下级平台ID)\n */\n async getCategories_p(rootCategoryId_p?: number | string) {\n return this.articles.getCategories_p(rootCategoryId_p);\n }\n\n /**\n * 2.2. 便捷方法:获取文章分类列表(使用下级平台ID)\n */\n async getCategories_a(rootCategoryId?: number | string) {\n return this.articles.getCategories_a(rootCategoryId);\n }\n\n\n /**\n * 3. 便捷方法:获取文章标签列表\n */\n async getTags(tagAlias?: string) {\n return this.articles.getTags(tagAlias);\n }\n\n /**\n * 3.1. 便捷方法:获取文章标签列表(使用下级平台ID)\n */\n async getTags_p(tagAlias_p?: string) {\n return this.articles.getTags_p(tagAlias_p);\n }\n\n /**\n * 4. 便捷方法:根据分类ID获取文章列表\n */\n async getArticlesByCategory(categoryId: number | number[], options?: ArticlesByCategoryOptions) {\n return this.articles.getArticlesByCategory(categoryId, options);\n }\n\n /**\n * 4.1. 便捷方法:根据分类ID获取文章列表(使用下级平台ID)\n */\n async getArticlesByCategory_p(categoryId: number | number[], options?: ArticlesByCategoryOptions) {\n return this.articles.getArticlesByCategory_p(categoryId, options);\n }\n\n /**\n * 4.2. 便捷方法:根据分类ID获取文章列表(使用当前分类数据)\n */\n async getArticlesByCategory_t(categoryId: number | number[], options?: ArticlesByCategoryOptions) {\n return this.articles.getArticlesByCategory_t(categoryId, options);\n }\n\n /**\n * 4.3. 便捷方法:根据分类ID获取文章列表(从大型静态JSON文件获取)\n */\n async getArticlesByCategory_a(categoryId: number, options?: ArticlesByCategoryOptions) {\n return this.articles.getArticlesByCategory_a(categoryId, options);\n }\n\n /**\n * 5. 便捷方法:根据标签ID获取文章列表\n */\n async getArticlesByTag(tagId: number | number[], options?: ArticlesByTagOptions) {\n return this.articles.getArticlesByTag(tagId, options);\n }\n\n /**\n * 5.1. 便捷方法:根据标签ID获取文章列表(使用下级平台ID)\n */\n async getArticlesByTag_p(tagId: number | number[], options?: ArticlesByTagOptions) {\n return this.articles.getArticlesByTag_p(tagId, options);\n }\n\n /**\n * 5.2. 便捷方法:根据标签ID获取文章列表(使用当前标签数据)\n */\n async getArticlesByTag_t(tagId: number | number[], options?: ArticlesByTagOptions) {\n return this.articles.getArticlesByTag_t(tagId, options);\n }\n\n /**\n * 6. 便捷方法:根据分类ID获取该分类的层级路径\n */\n async getCategoryPath(categoryId: number) {\n return this.articles.getCategoryPath(categoryId);\n }\n\n /**\n * 7. 便捷方法:获取指定分类ID下的子分类\n */\n async getSubCategories(categoryId: number, options?: {\n recursive?: boolean;\n includeCurrent?: boolean;\n maxDepth?: number;\n }) {\n return this.articles.getSubCategories(categoryId, options);\n }\n\n /**\n * 8. 便捷方法:根据产品ID获取产品详情\n */\n async getProduct(productId: number | string) {\n return this.products.getProduct(productId);\n }\n\n /**\n * 8.1. 便捷方法:根据产品ID获取父平台产品详情\n */\n async getProduct_p(productId: number | string) {\n return this.products.getProduct_p(productId);\n }\n\n /**\n * 8.2. 便捷方法:获取父平台产品分类列表\n */\n async getCategories_b(rootCategoryId?: number | string) {\n return this.products.getCategories_b(rootCategoryId);\n }\n\n /**\n * 9. 便捷方法:获取产品分类列表\n */\n async getProductCategories(productRootCategoryId?: number | string) {\n return this.products.getCategories(productRootCategoryId);\n }\n\n /**\n * 9.1. 便捷方法:获取父平台产品分类列表\n */\n async getProductCategories_p(productRootCategoryId_p?: number | string) {\n return this.products.getCategories_p(productRootCategoryId_p);\n }\n\n /**\n * 10. 便捷方法:获取产品标签列表\n */\n async getProductTags(productTagAlias?: string) {\n return this.products.getTags(productTagAlias);\n }\n\n /**\n * 10.1. 便捷方法:获取父平台产品标签列表\n */\n async getProductTags_p(productTagAlias_p?: string) {\n return this.products.getTags_p(productTagAlias_p);\n }\n\n /**\n * 11. 便捷方法:根据分类ID获取产品列表\n */\n async getProductsByCategory(categoryId: number | number[], options?: ProductsByCategoryOptions) {\n return this.products.getProductsByCategory(categoryId, options);\n }\n\n /**\n * 11.1. 便捷方法:根据分类ID获取父平台产品列表\n */\n async getProductsByCategory_p(categoryId: number | number[], options?: ProductsByCategoryOptions) {\n return this.products.getProductsByCategory_p(categoryId, options);\n }\n\n /**\n * 11.2. 便捷方法:根据分类ID获取父平台产品列表(使用当前分类数据)\n */\n async getProductsByCategory_t(categoryId: number | number[], options?: ProductsByCategoryOptions) {\n return this.products.getProductsByCategory_t(categoryId, options);\n }\n\n /**\n * 12. 便捷方法:根据标签ID获取产品列表\n */\n async getProductsByTag(tagId: number | number[], options?: ProductsByTagOptions) {\n return this.products.getProductsByTag(tagId, options);\n }\n\n /**\n * 12.1. 便捷方法:根据标签ID获取父平台产品列表\n */\n async getProductsByTag_p(tagId: number | number[], options?: ProductsByTagOptions) {\n return this.products.getProductsByTag_p(tagId, options);\n }\n\n /**\n * 12.2. 便捷方法:根据标签ID获取父平台产品列表(使用当前标签数据)\n */\n async getProductsByTag_t(tagId: number | number[], options?: ProductsByTagOptions) {\n return this.products.getProductsByTag_t(tagId, options);\n }\n\n /**\n * 13. 便捷方法:根据分类ID获取该分类的层级路径\n */\n async getProductCategoryPath(categoryId: number) {\n return this.products.getCategoryPath(categoryId);\n }\n\n /**\n * 14. 便捷方法:获取指定分类ID下的子分类\n */\n async getProductSubCategories(categoryId: number, options?: {\n recursive?: boolean;\n includeCurrent?: boolean;\n maxDepth?: number;\n }) {\n return this.products.getSubCategories(categoryId, options);\n }\n\n /**\n * 15. 便捷方法:获取税费信息\n */\n async getTaxInfo() {\n return this.products.getTaxInfo();\n }\n\n /**\n * 16. 便捷方法:获取运费信息\n */\n async getShippingInfo() {\n return this.products.getShippingInfo();\n }\n\n /**\n * 17. 便捷方法:获取区域信息\n */\n async getRegions() {\n return this.products.getRegions();\n }\n\n /**\n * 18. 便捷方法:获取全局设置列表\n */\n async getSettings(settingAlias?: string) {\n return this.settings.getSettings(settingAlias);\n }\n\n /**\n * 18.1. 便捷方法:获取父平台全局设置列表\n */\n async getSettings_p(settingAlias_p?: string) {\n return this.settings.getSettings_p(settingAlias_p);\n }\n\n /**\n * 19. 便捷方法:获取指定设置\n */\n async getSetting(key: string) {\n return this.settings.getSetting(key);\n }\n\n /**\n * 19.1. 便捷方法:获取父平台指定设置\n */\n async getSetting_p(key: string) {\n return this.settings.getSetting_p(key);\n }\n\n /**\n * 20. 便捷方法:获取支付方式列表\n */\n async getPaymentMethods(paymentAlias?: string) {\n return this.products.getPaymentMethods(paymentAlias);\n }\n\n /**\n * 21. 便捷方法:根据类型获取支付方式\n */\n async getPaymentMethodsByType(type: 'Api' | 'Manual' | 'Gateway' | 'Crypto', paymentAlias?: string) {\n return this.products.getPaymentMethodsByType(type, paymentAlias);\n }\n\n /**\n * 22. 便捷方法:根据ID获取支付方式详情\n */\n async getPaymentMethodById(methodId: number, paymentAlias?: string) {\n return this.products.getPaymentMethodById(methodId, paymentAlias);\n }\n\n /**\n * 23. 便捷方法:获取支付方式属性值\n */\n async getPaymentMethodAttribute(methodId: number, attrName: string, paymentAlias?: string) {\n return this.products.getPaymentMethodAttribute(methodId, attrName, paymentAlias);\n }\n\n /**\n * 24. 便捷方法:通用表单提交\n */\n async submitForm(aliases: string, email: string, fieldValue: Record<string, any>, options?: any) {\n return this.forms.submitForm(aliases, email, fieldValue, options);\n }\n\n /**\n * 25. 便捷方法:联系表单提交\n */\n async submitContactForm(formData: {\n firstName: string;\n lastName?: string;\n email: string;\n phone?: string;\n subject: string;\n message: string;\n }) {\n return this.forms.submitContactForm(formData);\n }\n\n /**\n * 26. 便捷方法:反馈表单提交\n */\n async submitFeedbackForm(formData: {\n name: string;\n email: string;\n type: string;\n message: string;\n rating?: number;\n }) {\n return this.forms.submitFeedbackForm(formData);\n }\n\n /**\n * 27. 便捷方法:自定义表单提交\n */\n async submitCustomForm(aliases: string, formData: Record<string, any>, emailField?: string) {\n return this.forms.submitCustomForm(aliases, formData, emailField);\n }\n\n /**\n * 28. 便捷方法:用户登录\n */\n async login(username: string, password: string, platformId: number) {\n return this.users.login({ username, password, platformId });\n }\n\n /**\n * 29. 便捷方法:用户注册\n */\n async register(username: string, password: string, platformId: number, ibcode?: string) {\n return this.users.register({ username, password, platformId, ibcode });\n }\n\n /**\n * 30. 便捷方法:检查用户是否已登录\n */\n isLoggedIn() {\n return this.users.isLoggedIn();\n }\n\n /**\n * 31. 便捷方法:获取当前登录用户信息\n */\n getCurrentUser() {\n return this.users.getCurrentUser();\n }\n\n /**\n * 32. 便捷方法:获取当前登录用户的token\n */\n getToken() {\n return this.users.getToken();\n }\n\n /**\n * 33. 便捷方法:用户登出\n */\n logout() {\n return this.users.logout();\n }\n\n /**\n * 34. 便捷方法:保存用户数据\n */\n saveUserData(userData: any) {\n return this.users.saveUserData(userData);\n }\n\n /**\n * 35. 便捷方法:获取用户数据\n */\n getUserData() {\n return this.users.getUserData();\n }\n\n /**\n * 36. 便捷方法:记住登录信息\n */\n rememberLogin(username: string, password: string) {\n return this.users.rememberLogin(username, password);\n }\n\n /**\n * 37. 便捷方法:获取记住的登录信息\n */\n getRememberedLogin() {\n return this.users.getRememberedLogin();\n }\n\n /**\n * 38. 便捷方法:清除记住的登录信息\n */\n clearRememberedLogin() {\n return this.users.clearRememberedLogin();\n }\n\n /**\n * 39. 便捷方法:获取用户资金信息\n */\n async getUserFunds() {\n return this.users.getUserFunds();\n }\n\n /**\n * 40. 便捷方法:获取用户资金信息(简化版本)\n */\n async getFunds() {\n return this.users.getFunds();\n }\n\n /**\n * 41. 便捷方法:获取用户支付记录列表\n */\n async getPaymentRecords(options?: any) {\n return this.users.getPaymentRecords(options);\n }\n\n /**\n * 42. 便捷方法:获取用户支付记录列表(简化版本)\n */\n async getPaymentRecordsSimple(page: number = 1, pageSize: number = 10) {\n return this.users.getPaymentRecordsSimple(page, pageSize);\n }\n\n /**\n * 便捷方法:获取用户资金日志列表\n */\n async getFundLogs(options?: any) {\n return this.users.getFundLogs(options);\n }\n\n /**\n * 便捷方法:获取用户资金日志列表(简化版本)\n */\n async getFundLogsSimple(page: number = 1, pageSize: number = 10) {\n return this.users.getFundLogsSimple(page, pageSize);\n }\n\n /**\n * 便捷方法:获取用户零售订单列表\n */\n async getRetailOrders(options?: any) {\n return this.users.getRetailOrders(options);\n }\n\n /**\n * 便捷方法:获取用户零售订单列表(简化版本)\n */\n async getRetailOrdersSimple(page: number = 1, pageSize: number = 10) {\n return this.users.getRetailOrdersSimple(page, pageSize);\n }\n\n /**\n * 便捷方法:获取用户地址列表\n * @param userType 用户类型,默认为2(普通用户)\n */\n async getAddresses(userType: number = 2) {\n return this.users.getAddresses(userType);\n }\n\n /**\n * 便捷方法:获取用户地址列表(简化版本)\n * @param userType 用户类型,默认为2(普通用户)\n */\n async getAddressesSimple(userType: number = 2) {\n return this.users.getAddressesSimple(userType);\n }\n\n /**\n * 便捷方法:根据地址ID获取地址信息\n * @param addressId 地址ID\n * @param userType 用户类型,默认为2(普通用户)\n */\n async getAddressById(addressId: number, userType: number = 2) {\n return this.users.getAddressById(addressId, userType);\n }\n\n /**\n * 便捷方法:获取用户资料\n */\n async getUserProfile() {\n return this.users.getUserProfile();\n }\n\n /**\n * 便捷方法:获取用户资料(简化版本)\n */\n async getProfile() {\n return this.users.getProfile();\n }\n\n /**\n * 便捷方法:更新用户资料\n */\n async updateProfile(profileData: any) {\n return this.users.updateProfile(profileData);\n }\n\n /**\n * 便捷方法:修改密码\n */\n async changePassword(passwordData: any) {\n return this.users.changePassword(passwordData);\n }\n\n /**\n * 便捷方法:创建地址\n * @param addressData 地址数据\n */\n async createAddress(addressData: any) {\n return this.users.createAddress(addressData);\n }\n\n /**\n * 便捷方法:更新地址\n * @param addressId 地址ID\n * @param addressData 地址数据\n */\n async updateAddress(addressId: number, addressData: any) {\n return this.users.updateAddress(addressId, addressData);\n }\n\n /**\n * 便捷方法:删除地址\n * @param addressId 地址ID\n * @param userType 用户类型,默认为2(普通用户)\n */\n async deleteAddress(addressId: number, userType: number = 2) {\n return this.users.deleteAddress(addressId, userType);\n }\n\n /**\n * 便捷方法:上传文件\n */\n async uploadFile(file: File) {\n return this.users.uploadFile(file);\n }\n\n /**\n * 便捷方法:资金扣款\n */\n async deductFunds(deductData: any) {\n return this.transactions.deductFunds(deductData);\n }\n\n /**\n * 便捷方法:创建零售订单\n */\n async createRetailOrder(orderData: any) {\n return this.transactions.createRetailOrder(orderData);\n }\n\n /**\n * 便捷方法:创建支付记录\n */\n async createPaymentRecord(paymentData: any) {\n return this.transactions.createPaymentRecord(paymentData);\n }\n}\n\n// 导出所有类型和模块\nexport * from './core/types';\nexport * from './core/client';\nexport * from './modules/articles';\nexport * from './modules/products';\nexport * from './modules/settings';\nexport * from './modules/forms';\nexport * from './modules/users';\nexport * from './modules/transactions';\n\n// 默认导出\nexport default GT6SDK; "],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"gt6-sdk.cjs.js","sources":["../src/core/types.ts","../src/core/client.ts","../src/modules/articles.ts","../src/modules/products.ts","../src/modules/settings.ts","../src/modules/forms.ts","../src/modules/users.ts","../src/modules/transactions.ts","../src/index.ts"],"sourcesContent":["// 基础配置类型\nexport interface GT6Config {\n baseUrl: string;\n apiKey?: string;\n platformId: string | number;\n platformId_p?: string | number;\n rootCategoryId?: string | number;\n rootCategoryId_p?: string | number;\n tagAlias?: string;\n tagAlias_p?: string;\n // 产品专用配置字段\n productRootCategoryId?: string | number;\n productRootCategoryId_p?: string | number;\n productTagAlias?: string;\n productTagAlias_p?: string;\n // 设置专用配置字段\n settingAlias?: string;\n settingAlias_p?: string;\n version?: string;\n timeout?: number;\n cache?: {\n enabled: boolean;\n ttl: number; // 缓存时间(毫秒)\n };\n}\n\n// 分类相关类型\nexport interface Category {\n categoryId: number;\n categoryName: string;\n categoryDescription: string;\n metaKeywords: string;\n status: number;\n parentId: number;\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n platformId: number;\n articleIds: number[];\n children: Category[];\n}\n\nexport interface CategoryResponse {\n platformId: number;\n categories: Category[];\n generatedAt: string;\n}\n\n// 产品分类相关类型\nexport interface ProductCategory {\n categoryId: number;\n categoryName: string;\n categoryDescription: string;\n metaKeywords: string;\n status: number;\n parentId: number;\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n platformId: number;\n productIds: number[];\n children: ProductCategory[];\n}\n\nexport interface ProductCategoryResponse {\n platformId: number;\n categories: ProductCategory[];\n generatedAt: string;\n}\n\n// 标签相关类型\nexport interface Tag {\n tagId: number;\n tagName: string;\n type: number;\n platformId: number;\n aliases: string;\n createdAt: any;\n articleIds: number[];\n}\n\nexport interface TagResponse {\n platformId: number;\n tags: Tag[];\n generatedAt: string;\n}\n\n// 产品标签相关类型\nexport interface ProductTag {\n tagId: number;\n tagName: string;\n type: number;\n platformId: number;\n aliases: string;\n createdAt: any;\n productIds: number[];\n}\n\nexport interface ProductTagResponse {\n platformId: number;\n tags: ProductTag[];\n generatedAt: string;\n}\n\n// 文章元数据类型\nexport interface ArticleMetaData {\n metaId: number;\n articleId: number;\n metaKey: string;\n metaValue: string;\n type: number;\n templateId: number;\n groupId: number;\n sortOrder: number;\n aiId: number;\n fieldId: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 文章图片类型\nexport interface ArticleImage {\n imageId: number;\n articleId: number;\n metaId: number | null;\n imageUrl: string;\n imageType: 'cover' | 'content';\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 平台信息类型\nexport interface Platform {\n id: number;\n platformName: string;\n platformDescription: string;\n avatar: string | null;\n}\n\n// 文章类型\nexport interface Article {\n articleId: number;\n title: string;\n content: string;\n status: 'published' | 'draft' | 'archived';\n publishedAt: string;\n templateId: number;\n aiId: number;\n platformId: number;\n isVisible: boolean;\n displayTemplate: string;\n createdAt: any;\n updatedAt: any;\n categories: Category[];\n tags: Tag[];\n metaData: ArticleMetaData[];\n images: ArticleImage[];\n platform?: Platform; // 可选字段,只在使用上级平台数据时存在\n generatedAt: string;\n}\n\n// 产品详情类型\nexport interface ProductDetail {\n detailId: number;\n productId: number;\n detailKey: string;\n detailValue: string;\n extraInfo: string;\n}\n\n// 产品选项值类型\nexport interface ProductOptionValue {\n valueId: number;\n optionId: number;\n value: string;\n description: string;\n priceAdjustment: string;\n createdAt: any;\n updatedAt: any;\n}\n\n// 产品选项类型\nexport interface ProductOption {\n optionId: number;\n productId: number;\n optionName: string;\n createdAt: any;\n updatedAt: any;\n values: ProductOptionValue[];\n}\n\n// 产品变体类型\nexport interface ProductVariant {\n variantId: number;\n productId: number;\n sku: string;\n price: string;\n stock: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 产品图片类型\nexport interface ProductImage {\n imageId: number;\n productId: number;\n productDetailId: number | null;\n optionValueId: number | null;\n imageUrl: string;\n imageType: 'gallery' | 'thumbnail' | 'detail';\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 地区类型\nexport interface Region {\n regionId: number;\n platformId: number;\n regionCode: string;\n regionName: string;\n regionLevel: string;\n parentId: number;\n children?: Region[];\n}\n\n// 运费规则类型\nexport interface ShippingRule {\n ruleId: number;\n templateId: number;\n regionId: number;\n firstUnit: string;\n firstFee: string;\n additionalUnit: string;\n additionalFee: string;\n conditionType: string;\n conditionValue: string | null;\n createTime: any;\n updateTime: any;\n}\n\n// 运费模板类型\nexport interface ShippingTemplate {\n templateId: number;\n platformId: number;\n templateName: string;\n defaultFee: string;\n freeShippingLimit: string;\n createTime: any;\n updateTime: any;\n rules: ShippingRule[];\n}\n\n// 运费响应类型\nexport interface ShippingResponse {\n platformId: number;\n templates: ShippingTemplate[];\n generatedAt: string;\n}\n\n// 税费规则类型\nexport interface TaxRule {\n ruleId: number;\n templateId: number;\n regionId: number;\n taxRate: string;\n createTime: any;\n updateTime: any;\n}\n\n// 税费模板类型\nexport interface TaxTemplate {\n templateId: number;\n platformId: number;\n templateName: string;\n defaultTaxRate: string;\n createTime: any;\n updateTime: any;\n rules: TaxRule[];\n}\n\n// 税费响应类型\nexport interface TaxResponse {\n platformId: number;\n templates: TaxTemplate[];\n generatedAt: string;\n}\n\n// 订阅类型\nexport interface Subscription {\n subscriptionId: number;\n productId: number;\n billingCycle: number;\n billingCycleUnit: string;\n billingCycleCount: number;\n setupFee: string;\n trialDays: number;\n trialPrice: string;\n renewalDiscount: string;\n autoRenew: boolean;\n allowCancel: boolean;\n cancelPolicy: string;\n refundPolicy: string;\n maxCycles: number;\n gracePeriod: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 批发类型\nexport interface Wholesale {\n wholesaleId: number;\n productId: number;\n minOrderQuantity: number;\n maxOrderQuantity: number;\n allowMixedVariants: boolean;\n showRetailPrice: boolean;\n wholesaleDescription: string;\n paymentTerms: string;\n shippingTerms: string;\n}\n\n// 价格层级类型\nexport interface PriceTier {\n tierId: number;\n wholesaleId: number;\n userLevel: number | null;\n minQuantity: number;\n maxQuantity: number;\n priceType: number;\n priceValue: string;\n sortOrder: number;\n}\n\n// 变体价格类型\nexport interface VariantPrice {\n id: number;\n wholesaleId: number;\n tierId: number;\n variantId: number;\n priceType: number;\n priceValue: string;\n}\n\n// 众筹类型\nexport interface Crowdfunding {\n crowdfundingId: number;\n productId: number;\n targetAmount: string;\n currentAmount: string;\n supporterCount: number;\n startTime: any;\n endTime: any;\n status: number;\n minSupportAmount: string;\n allowOverFunding: boolean;\n overFundingLimit: string;\n createdAt: any;\n updatedAt: any;\n}\n\n// 众筹奖励类型\nexport interface Reward {\n rewardId: number;\n crowdfundingId: number;\n variantId: number;\n rewardName: string;\n rewardDescription: string;\n rewardAmount: string;\n rewardLimit: number;\n rewardClaimed: number;\n shippingRequired: boolean;\n estimatedDeliveryTime: any;\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 众筹更新类型\nexport interface CrowdfundingUpdate {\n updateId: number;\n crowdfundingId: number;\n updateTitle: string;\n updateContent: string;\n isPublic: boolean;\n updateTime: any;\n}\n\n// 众筹FAQ类型\nexport interface CrowdfundingFAQ {\n faqId: number;\n crowdfundingId: number;\n question: string;\n answer: string;\n sortOrder: number;\n createdAt: any;\n updatedAt: any;\n}\n\n// 简单理财类型\nexport interface SimpleFinance {\n simpleFinanceId: number;\n productId: number;\n calculationPeriod: number;\n calculationPeriodUnit: string;\n interestRate: string;\n minInvestment: string;\n maxInvestment: string;\n minInvestmentUnit: string;\n maxInvestmentUnit: string;\n investmentPeriod: number;\n investmentPeriodUnit: string;\n}\n\n// 产品类型\nexport interface Product {\n productId: number;\n productName: string;\n description: string;\n metaKeywords: string;\n price: string;\n priceChangePercent: string;\n status: number;\n productType: number;\n native: number;\n shared: number;\n createdAt: any;\n updatedAt: any;\n platformId: number;\n oldProductId: number | null;\n details: ProductDetail[];\n options: ProductOption[];\n variants: ProductVariant[];\n images: ProductImage[];\n categories: ProductCategory[];\n tags: ProductTag[];\n regions: Region[];\n shippingTemplates: ShippingTemplate[];\n taxTemplates: TaxTemplate[];\n subscription?: Subscription; // 当productType为2时存在\n wholesale?: Wholesale; // 当productType为3时存在\n priceTiers?: PriceTier[]; // 当productType为3时存在\n variantPrices?: VariantPrice[]; // 当productType为3时存在\n crowdfunding?: Crowdfunding; // 当productType为4时存在\n rewards?: Reward[]; // 当productType为4时存在\n updates?: CrowdfundingUpdate[]; // 当productType为4时存在\n faqs?: CrowdfundingFAQ[]; // 当productType为4时存在\n simpleFinance?: SimpleFinance; // 当productType为5时存在\n platform?: Platform; // 可选字段,只在使用上级平台数据时存在\n generatedAt: string;\n}\n\n// 文章列表项类型(简化版)\nexport interface ArticleListItem {\n articleId: number;\n title: string;\n status: string;\n publishedAt: string;\n categories: Category[];\n tags: Tag[];\n coverImage?: string;\n}\n\n// 产品列表项类型(简化版)\nexport interface ProductListItem {\n productId: number;\n productName: string;\n price: string;\n status: number;\n categories: ProductCategory[];\n tags: ProductTag[];\n coverImage?: string;\n}\n\n// 错误类型\nexport class GT6Error extends Error {\n constructor(\n message: string,\n public statusCode?: number\n ) {\n super(message);\n this.name = 'GT6Error';\n }\n}\n\n// 查询参数类型\nexport interface ArticleQueryParams {\n categoryId?: number;\n tagId?: number;\n status?: string;\n limit?: number;\n offset?: number;\n sortBy?: 'publishedAt' | 'title' | 'sortOrder';\n sortOrder?: 'asc' | 'desc';\n}\n\n// 产品查询参数类型\nexport interface ProductQueryParams {\n categoryId?: number;\n tagId?: number;\n status?: number;\n limit?: number;\n offset?: number;\n sortBy?: 'price' | 'productName' | 'sortOrder';\n sortOrder?: 'asc' | 'desc';\n}\n\n// 根据标签获取文章的选项类型\nexport interface ArticlesByTagOptions {\n page?: number;\n limit?: number;\n status?: 'published' | 'draft' | 'archived';\n tagAlias?: string;\n}\n\n// 根据分类获取文章的选项类型\nexport interface ArticlesByCategoryOptions {\n page?: number;\n limit?: number;\n status?: 'published' | 'draft' | 'archived';\n}\n\n// 根据标签获取产品的选项类型\nexport interface ProductsByTagOptions {\n page?: number;\n limit?: number;\n status?: number;\n productTagAlias?: string;\n}\n\n// 根据分类获取产品的选项类型\nexport interface ProductsByCategoryOptions {\n page?: number;\n limit?: number;\n status?: number;\n}\n\n// 文章统计类型\nexport interface ArticleStats {\n total: number;\n published: number;\n draft: number;\n archived: number;\n byCategory: Record<number, number>;\n byTag: Record<number, number>;\n}\n\n// 产品统计类型\nexport interface ProductStats {\n total: number;\n active: number;\n inactive: number;\n byCategory: Record<number, number>;\n byTag: Record<number, number>;\n}\n\nexport interface GT6Response<T> {\n success: boolean;\n data: T;\n error?: string;\n}\n\nexport interface ArticleResponse {\n article: Article;\n}\n\nexport interface ProductResponse {\n product: Product;\n}\n\nexport interface CategoryResponse {\n categories: Category[];\n}\n\nexport interface ProductCategoryResponse {\n categories: ProductCategory[];\n}\n\nexport interface TagResponse {\n tags: Tag[];\n}\n\nexport interface ProductTagResponse {\n tags: ProductTag[];\n}\n\n// 区域响应类型\nexport interface RegionResponse {\n platformId: number;\n regions: Region[];\n generatedAt: string;\n}\n\n// 全局设置相关类型\nexport interface Setting {\n key: string;\n value: string | number | object;\n type: 'text' | 'number' | 'json' | 'html' | 'image';\n label: string;\n description: string;\n isSystem: boolean;\n sortOrder: number;\n aliases: string;\n}\n\nexport interface SettingsResponse {\n platformId: number;\n aliases: string;\n settings: Setting[];\n generatedAt: string;\n}\n\nexport interface SettingResponse {\n platformId: number;\n setting: Setting;\n generatedAt: string;\n}\n\nexport interface SettingsOptions {\n settingAlias?: string;\n}\n\n// 支付方式相关类型\nexport interface PaymentMethodAttribute {\n id: number;\n methodId: number;\n attrName: string;\n attrValue: string;\n attrType: 'text' | 'number' | 'image' | 'url' | 'email' | 'phone';\n}\n\nexport interface PaymentMethod {\n id: number;\n platformId: number;\n name: string;\n description: string;\n type: 'Api' | 'Manual' | 'Gateway' | 'Crypto';\n aliases: string;\n attrs: PaymentMethodAttribute[];\n}\n\nexport interface PaymentMethodsResponse {\n platformId: number;\n methods: PaymentMethod[];\n generatedAt: string;\n}\n\nexport interface PaymentMethodsOptions {\n paymentAlias?: string;\n}\n\n// 表单提交相关类型\nexport interface FormSubmitData {\n platformId: number | string;\n aliases: string;\n email: string;\n fieldValue: Record<string, any>;\n createSecret?: string;\n}\n\nexport interface FormSubmitResponse {\n success: boolean;\n message: string;\n data?: any;\n code?: number;\n}\n\nexport interface FormSubmitOptions {\n endpoint?: string;\n createSecret?: string;\n} ","import { GT6Config, GT6Error } from './types';\r\n\r\nexport class GT6Client {\r\n private config: GT6Config;\r\n private cache: Map<string, { data: any; timestamp: number }>;\r\n\r\n constructor(config: GT6Config) {\r\n this.config = {\r\n timeout: 10000,\r\n cache: {\r\n enabled: true,\r\n ttl: 300000 // 5分钟默认缓存\r\n },\r\n ...config\r\n };\r\n this.cache = new Map();\r\n }\r\n\r\n /**\r\n * 发起HTTP请求\r\n */\r\n async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\r\n const url = `${this.config.baseUrl}${endpoint}`;\r\n const cacheKey = `${options.method || 'GET'}:${url}`;\r\n\r\n // 检查缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n const cached = this.cache.get(cacheKey);\r\n if (cached && Date.now() - cached.timestamp < this.config.cache.ttl) {\r\n return cached.data;\r\n }\r\n }\r\n\r\n try {\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\r\n\r\n // 对于FormData,不设置Content-Type,让浏览器自动设置\r\n const headers = new Headers(options.headers);\r\n if (!(options.body instanceof FormData)) {\r\n headers.set('Content-Type', 'application/json');\r\n }\r\n\r\n const response = await fetch(url, {\r\n ...options,\r\n headers,\r\n signal: controller.signal\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n throw new GT6Error(\r\n `HTTP ${response.status}: ${response.statusText}`,\r\n response.status\r\n );\r\n }\r\n\r\n const data = await response.json();\r\n\r\n // 更新缓存(只对GET请求缓存)\r\n if (this.config.cache?.enabled && options.method !== 'POST' && options.method !== 'PUT' && options.method !== 'DELETE') {\r\n this.cache.set(cacheKey, { data, timestamp: Date.now() });\r\n }\r\n\r\n return data;\r\n } catch (error: any) {\r\n if (error instanceof GT6Error) {\r\n throw error;\r\n }\r\n \r\n if (error.name === 'AbortError') {\r\n throw new GT6Error('Request timeout', 408);\r\n }\r\n \r\n throw new GT6Error(`Network error: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * 获取配置\r\n */\r\n getConfig(): GT6Config {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * 清除缓存\r\n */\r\n clearCache(): void {\r\n this.cache.clear();\r\n }\r\n\r\n /**\r\n * 获取缓存统计\r\n */\r\n getCacheStats(): { size: number; entries: Array<{ key: string; age: number }> } {\r\n const entries = Array.from(this.cache.entries()).map(([key, value]) => ({\r\n key,\r\n age: Date.now() - value.timestamp\r\n }));\r\n\r\n return {\r\n size: this.cache.size,\r\n entries\r\n };\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n Article,\r\n Category,\r\n Tag,\r\n CategoryResponse,\r\n TagResponse,\r\n ArticlesByTagOptions,\r\n ArticlesByCategoryOptions\r\n} from '../core/types';\r\n\r\nexport class ArticlesAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 1. 根据文章ID获取文章详情\r\n */\r\n async getArticle(articleId: number | string): Promise<Article> {\r\n return this.client.request<Article>(`/articles/${articleId}.json`);\r\n }\r\n\r\n /**\r\n * 1.1 根据文章ID获取文章详情(平台使用)\r\n */\r\n async getArticle_p(articleId: number | string): Promise<Article> {\r\n return this.client.request<Article>(`/parentarticles/${articleId}.json`);\r\n }\r\n\r\n /**\r\n * 2. 获取文章分类列表\r\n */\r\n async getCategories(rootCategoryId?: number | string): Promise<Category[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = rootCategoryId || config.rootCategoryId || '671920';\r\n \r\n const response = await this.client.request<CategoryResponse>(\r\n `/article-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 2.1 获取文章分类列表(使用下级平台ID)\r\n */\r\n async getCategories_p(rootCategoryId_p?: number | string): Promise<Category[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = rootCategoryId_p || config.rootCategoryId_p || '671920';\r\n \r\n const response = await this.client.request<CategoryResponse>(\r\n `/article-categories/platform-${config.platformId_p}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 2.2 获取文章分类列表(使用下级平台ID)\r\n */\r\n async getCategories_a(rootCategoryId?: number | string): Promise<Category[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = rootCategoryId || config.rootCategoryId;\r\n \r\n const response = await this.client.request<CategoryResponse>(\r\n `/big-article-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 3. 获取文章标签列表\r\n */\r\n async getTags(tagAlias?: string): Promise<Tag[]> {\r\n const config = this.client.getConfig();\r\n const alias = tagAlias || config.tagAlias || '001';\r\n \r\n const response = await this.client.request<TagResponse>(\r\n `/article-tags/platform-${config.platformId}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n }\r\n\r\n /**\r\n * 3.1 获取文章标签列表(使用下级平台ID)\r\n */\r\n async getTags_p(tagAlias_p?: string): Promise<Tag[]> {\r\n const config = this.client.getConfig();\r\n const alias = tagAlias_p || config.tagAlias_p || '001';\r\n \r\n const response = await this.client.request<TagResponse>(\r\n `/article-tags/platform-${config.platformId_p}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n }\r\n\r\n /**\r\n * 4. 根据分类ID获取文章列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getArticlesByCategory(categoryId: number | number[], options?: ArticlesByCategoryOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = categories.find(cat => cat.categoryId === id);\r\n if (targetCategory) {\r\n allArticleIds.push(...targetCategory.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 4.1 根据分类ID获取文章列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getArticlesByCategory_p(categoryId: number | number[], options?: ArticlesByCategoryOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories_p();\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = categories.find(cat => cat.categoryId === id);\r\n if (targetCategory) {\r\n allArticleIds.push(...targetCategory.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle_p(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 4.2 根据分类ID获取文章列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getArticlesByCategory_t(categoryId: number | number[], options?: ArticlesByCategoryOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = categories.find(cat => cat.categoryId === id);\r\n if (targetCategory) {\r\n allArticleIds.push(...targetCategory.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle_p(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 4.3 根据分类ID获取文章列表(使用大型分类静态文件)\r\n * 只支持单个分类ID,从大型分类静态文件获取文章ID列表\r\n */\r\n async getArticlesByCategory_a(categoryId: number, options?: ArticlesByCategoryOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 从大型分类静态文件获取该分类的文章ID列表\r\n const categoryData = await this.client.request<{\r\n categoryId: number;\r\n articleIds: number[];\r\n generatedAt: string;\r\n }>(`/big-article-categories/${categoryId}.json`);\r\n \r\n if (!categoryData || !categoryData.articleIds || categoryData.articleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = categoryData.articleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情(使用上级平台数据)\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle_p(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: categoryData.articleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 5. 根据标签ID获取文章列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getArticlesByTag(tagId: number | number[], options?: ArticlesByTagOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据,传递tagAlias参数\r\n const tags = await this.getTags(options?.tagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allArticleIds.push(...targetTag.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 5.1 根据标签ID获取文章列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getArticlesByTag_p(tagId: number | number[], options?: ArticlesByTagOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据,传递tagAlias参数\r\n const tags = await this.getTags_p(options?.tagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allArticleIds.push(...targetTag.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle_p(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 5.2 根据标签ID获取文章列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getArticlesByTag_t(tagId: number | number[], options?: ArticlesByTagOptions): Promise<{\r\n articles: Article[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据,传递tagAlias参数\r\n const tags = await this.getTags(options?.tagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的文章ID\r\n const allArticleIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allArticleIds.push(...targetTag.articleIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueArticleIds = [...new Set(allArticleIds)];\r\n \r\n if (uniqueArticleIds.length === 0) {\r\n return {\r\n articles: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedArticleIds = uniqueArticleIds.slice(offset, offset + limit);\r\n \r\n // 获取文章详情\r\n const articles = await Promise.all(\r\n paginatedArticleIds.map(articleId => this.getArticle_p(articleId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredArticles = articles;\r\n if (options?.status) {\r\n filteredArticles = articles.filter(article => article.status === options.status);\r\n }\r\n \r\n return {\r\n articles: filteredArticles,\r\n total: uniqueArticleIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 6. 根据分类ID获取该分类的层级路径\r\n * 用于前端面包屑导航\r\n */\r\n async getCategoryPath(categoryId: number): Promise<{\r\n path: Category[];\r\n currentCategory: Category | null;\r\n breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }>;\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n path: [],\r\n currentCategory: null,\r\n breadcrumbs: []\r\n };\r\n }\r\n \r\n // 构建分类路径\r\n const path: Category[] = [];\r\n const breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }> = [];\r\n \r\n // 递归查找父分类\r\n const buildPath = (currentCategory: Category, level: number = 0): void => {\r\n // 将当前分类添加到路径开头(因为我们要从根到叶子构建)\r\n path.unshift(currentCategory);\r\n breadcrumbs.unshift({\r\n categoryId: currentCategory.categoryId,\r\n categoryName: currentCategory.categoryName,\r\n level\r\n });\r\n \r\n // 如果有父分类,继续递归\r\n if (currentCategory.parentId && currentCategory.parentId !== 0) {\r\n const parentCategory = categories.find(cat => cat.categoryId === currentCategory.parentId);\r\n if (parentCategory) {\r\n buildPath(parentCategory, level + 1);\r\n }\r\n }\r\n };\r\n \r\n // 从目标分类开始构建路径\r\n buildPath(targetCategory);\r\n \r\n return {\r\n path,\r\n currentCategory: targetCategory,\r\n breadcrumbs\r\n };\r\n }\r\n\r\n /**\r\n * 7. 获取指定分类ID下的子分类\r\n * 支持递归获取所有层级的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean; // 是否递归获取所有层级的子分类\r\n includeCurrent?: boolean; // 是否包含当前分类\r\n maxDepth?: number; // 最大递归深度,默认不限制\r\n }): Promise<{\r\n subCategories: Category[];\r\n currentCategory: Category | null;\r\n total: number;\r\n depth: number; // 实际递归深度\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 查找目标分类\r\n const targetCategory = categories.find(cat => cat.categoryId === categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n subCategories: [],\r\n currentCategory: null,\r\n total: 0,\r\n depth: 0\r\n };\r\n }\r\n \r\n const subCategories: Category[] = [];\r\n let maxDepth = options?.maxDepth || Infinity;\r\n let actualDepth = 0;\r\n \r\n // 递归获取子分类的函数\r\n const collectSubCategories = (parentId: number, currentDepth: number = 0): void => {\r\n if (currentDepth >= maxDepth) {\r\n return;\r\n }\r\n \r\n // 查找直接子分类\r\n const children = categories.filter(cat => cat.parentId === parentId);\r\n \r\n children.forEach(child => {\r\n subCategories.push(child);\r\n \r\n // 如果需要递归且未达到最大深度,继续查找子分类\r\n if (options?.recursive && currentDepth < maxDepth - 1) {\r\n collectSubCategories(child.categoryId, currentDepth + 1);\r\n }\r\n });\r\n \r\n // 更新实际深度\r\n actualDepth = Math.max(actualDepth, currentDepth);\r\n };\r\n \r\n // 开始收集子分类\r\n collectSubCategories(categoryId);\r\n \r\n // 如果需要包含当前分类,添加到结果中\r\n if (options?.includeCurrent) {\r\n subCategories.unshift(targetCategory);\r\n }\r\n \r\n return {\r\n subCategories,\r\n currentCategory: targetCategory,\r\n total: subCategories.length,\r\n depth: actualDepth\r\n };\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n Product,\r\n ProductCategory,\r\n ProductTag,\r\n ProductCategoryResponse,\r\n ProductTagResponse,\r\n ProductsByTagOptions,\r\n ProductsByCategoryOptions,\r\n TaxResponse,\r\n ShippingResponse,\r\n RegionResponse,\r\n PaymentMethodsResponse,\r\n PaymentMethodsOptions,\r\n PaymentMethod\r\n} from '../core/types';\r\n\r\nexport class ProductsAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 1. 根据产品ID获取产品详情\r\n */\r\n async getProduct(productId: number | string): Promise<Product> {\r\n const product = await this.client.request<Product>(`/products/${productId}.json`);\r\n \r\n // 检查产品是否有销售区域和税费模板\r\n if (product.regions && product.regions.length > 0 && \r\n product.taxTemplates && product.taxTemplates.length > 0) {\r\n try {\r\n // 获取税费信息\r\n const taxInfo = await this.getTaxInfo();\r\n \r\n // 为每个税费模板添加规则\r\n product.taxTemplates = product.taxTemplates.map(template => {\r\n const matchingTemplate = taxInfo.templates.find(t => t.templateId === template.templateId);\r\n if (matchingTemplate) {\r\n // 过滤出产品可销售区域的规则\r\n const productRegionIds = product.regions.map(r => r.regionId);\r\n const applicableRules = matchingTemplate.rules.filter(rule => \r\n productRegionIds.includes(rule.regionId)\r\n );\r\n \r\n return {\r\n ...template,\r\n rules: applicableRules\r\n };\r\n }\r\n return template;\r\n });\r\n } catch (error) {\r\n // 如果获取税费信息失败,不影响产品详情返回\r\n console.warn('Failed to fetch tax info:', error);\r\n }\r\n }\r\n \r\n // 检查产品是否有销售区域和运费模板\r\n if (product.regions && product.regions.length > 0 && \r\n product.shippingTemplates && product.shippingTemplates.length > 0) {\r\n try {\r\n // 获取运费信息\r\n const shippingInfo = await this.getShippingInfo();\r\n \r\n // 为每个运费模板添加规则\r\n product.shippingTemplates = product.shippingTemplates.map(template => {\r\n const matchingTemplate = shippingInfo.templates.find(t => t.templateId === template.templateId);\r\n if (matchingTemplate) {\r\n // 过滤出产品可销售区域的规则\r\n const productRegionIds = product.regions.map(r => r.regionId);\r\n const applicableRules = matchingTemplate.rules.filter(rule => \r\n productRegionIds.includes(rule.regionId)\r\n );\r\n \r\n return {\r\n ...template,\r\n rules: applicableRules\r\n };\r\n }\r\n return template;\r\n });\r\n } catch (error) {\r\n // 如果获取运费信息失败,不影响产品详情返回\r\n console.warn('Failed to fetch shipping info:', error);\r\n }\r\n }\r\n \r\n return product;\r\n }\r\n\r\n /**\r\n * 1.1. 根据产品ID获取父平台产品详情\r\n */\r\n async getProduct_p(productId: number | string): Promise<Product> {\r\n const product = await this.client.request<Product>(`/parentproducts/${productId}.json`);\r\n \r\n // 检查产品是否有销售区域和税费模板\r\n if (product.regions && product.regions.length > 0 && \r\n product.taxTemplates && product.taxTemplates.length > 0) {\r\n try {\r\n // 获取税费信息\r\n const taxInfo = await this.getTaxInfo();\r\n \r\n // 为每个税费模板添加规则\r\n product.taxTemplates = product.taxTemplates.map(template => {\r\n const matchingTemplate = taxInfo.templates.find(t => t.templateId === template.templateId);\r\n if (matchingTemplate) {\r\n // 过滤出产品可销售区域的规则\r\n const productRegionIds = product.regions.map(r => r.regionId);\r\n const applicableRules = matchingTemplate.rules.filter(rule => \r\n productRegionIds.includes(rule.regionId)\r\n );\r\n \r\n return {\r\n ...template,\r\n rules: applicableRules\r\n };\r\n }\r\n return template;\r\n });\r\n } catch (error) {\r\n // 如果获取税费信息失败,不影响产品详情返回\r\n console.warn('Failed to fetch tax info:', error);\r\n }\r\n }\r\n \r\n // 检查产品是否有销售区域和运费模板\r\n if (product.regions && product.regions.length > 0 && \r\n product.shippingTemplates && product.shippingTemplates.length > 0) {\r\n try {\r\n // 获取运费信息\r\n const shippingInfo = await this.getShippingInfo();\r\n \r\n // 为每个运费模板添加规则\r\n product.shippingTemplates = product.shippingTemplates.map(template => {\r\n const matchingTemplate = shippingInfo.templates.find(t => t.templateId === template.templateId);\r\n if (matchingTemplate) {\r\n // 过滤出产品可销售区域的规则\r\n const productRegionIds = product.regions.map(r => r.regionId);\r\n const applicableRules = matchingTemplate.rules.filter(rule => \r\n productRegionIds.includes(rule.regionId)\r\n );\r\n \r\n return {\r\n ...template,\r\n rules: applicableRules\r\n };\r\n }\r\n return template;\r\n });\r\n } catch (error) {\r\n // 如果获取运费信息失败,不影响产品详情返回\r\n console.warn('Failed to fetch shipping info:', error);\r\n }\r\n }\r\n \r\n return product;\r\n }\r\n\r\n /**\r\n * 2. 获取产品分类列表\r\n */\r\n async getCategories(productRootCategoryId?: number | string): Promise<ProductCategory[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = productRootCategoryId || config.productRootCategoryId || '277233';\r\n \r\n const response = await this.client.request<ProductCategoryResponse>(\r\n `/product-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 2.1. 获取平台产品分类列表\r\n */\r\n async getCategories_p(productRootCategoryId_p?: number | string): Promise<ProductCategory[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = productRootCategoryId_p || config.productRootCategoryId_p;\r\n \r\n const response = await this.client.request<ProductCategoryResponse>(\r\n `/product-categories/platform-${config.platformId_p}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 2.2. 获取平台产品分类列表\r\n */\r\n async getCategories_b(productRootCategoryId?: number | string): Promise<ProductCategory[]> {\r\n const config = this.client.getConfig();\r\n const categoryId = productRootCategoryId || config.productRootCategoryId;\r\n \r\n const response = await this.client.request<ProductCategoryResponse>(\r\n `/big-product-categories/platform-${config.platformId}-root-${categoryId}.json`\r\n );\r\n \r\n return response.categories;\r\n }\r\n\r\n /**\r\n * 3. 获取产品标签列表\r\n */\r\n async getTags(productTagAlias?: string): Promise<ProductTag[]> {\r\n const config = this.client.getConfig();\r\n const alias = productTagAlias || config.productTagAlias || '01';\r\n \r\n const response = await this.client.request<ProductTagResponse>(\r\n `/product-tags/platform-${config.platformId}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n }\r\n\r\n /**\r\n * 3.1. 获取平台产品标签列表\r\n */\r\n async getTags_p(productTagAlias_p?: string): Promise<ProductTag[]> {\r\n const config = this.client.getConfig();\r\n const alias = productTagAlias_p || config.productTagAlias_p;\r\n \r\n const response = await this.client.request<ProductTagResponse>(\r\n `/product-tags/platform-${config.platformId_p}-${alias}.json`\r\n );\r\n \r\n return response.tags;\r\n } \r\n\r\n /**\r\n * 4. 根据分类ID获取产品列表\r\n * 支持单个分类ID或分类ID数组\r\n */\r\n async getProductsByCategory(categoryId: number | number[], options?: ProductsByCategoryOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 递归查找分类的函数\r\n const findCategoryById = (cats: ProductCategory[], targetId: number): ProductCategory | null => {\r\n for (const cat of cats) {\r\n if (cat.categoryId === targetId) {\r\n return cat;\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n const found = findCategoryById(cat.children, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = findCategoryById(categories, id);\r\n if (targetCategory) {\r\n allProductIds.push(...targetCategory.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 4.1. 根据分类ID获取平台产品列表\r\n */\r\n\r\n async getProductsByCategory_p(categoryId: number | number[], options?: ProductsByCategoryOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories_p();\r\n \r\n // 递归查找分类的函数\r\n const findCategoryById = (cats: ProductCategory[], targetId: number): ProductCategory | null => {\r\n for (const cat of cats) {\r\n if (cat.categoryId === targetId) {\r\n return cat;\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n const found = findCategoryById(cat.children, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = findCategoryById(categories, id);\r\n if (targetCategory) {\r\n allProductIds.push(...targetCategory.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct_p(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 4.2. 根据分类ID获取平台产品列表\r\n */\r\n\r\n async getProductsByCategory_t(categoryId: number | number[], options?: ProductsByCategoryOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 递归查找分类的函数\r\n const findCategoryById = (cats: ProductCategory[], targetId: number): ProductCategory | null => {\r\n for (const cat of cats) {\r\n if (cat.categoryId === targetId) {\r\n return cat;\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n const found = findCategoryById(cat.children, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // 将单个分类ID转换为数组\r\n const categoryIds = Array.isArray(categoryId) ? categoryId : [categoryId];\r\n \r\n // 收集所有指定分类下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n categoryIds.forEach(id => {\r\n const targetCategory = findCategoryById(categories, id);\r\n if (targetCategory) {\r\n allProductIds.push(...targetCategory.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct_p(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n \r\n\r\n /**\r\n * 4.3. 根据大分类ID获取平台产品列表\r\n * 先从big-product-categories/${categoryId}.json获取产品ID,再分页后用getProduct_p获取详情\r\n */\r\n async getProductsByCategory_b(categoryId: number, options?: ProductsByCategoryOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 从大型分类静态文件获取该分类的产品ID列表\r\n const categoryData = await this.client.request<{\r\n categoryId: number;\r\n productIds: number[];\r\n generatedAt: string;\r\n }>(`/big-product-categories/${categoryId}.json`);\r\n \r\n if (!categoryData || !categoryData.productIds || categoryData.productIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = categoryData.productIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情(使用上级平台数据)\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct_p(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: categoryData.productIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 5. 根据标签ID获取产品列表\r\n * 支持单个标签ID或标签ID数组\r\n */\r\n async getProductsByTag(tagId: number | number[], options?: ProductsByTagOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据,传递productTagAlias参数\r\n const tags = await this.getTags(options?.productTagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allProductIds.push(...targetTag.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n /**\r\n * 5.1. 根据标签ID获取平台产品列表\r\n */\r\n async getProductsByTag_p(tagId: number | number[], options?: ProductsByTagOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n }> {\r\n // 获取标签数据,传递productTagAlias参数\r\n const tags = await this.getTags_p(options?.productTagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allProductIds.push(...targetTag.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct_p(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n }\r\n\r\n\r\n /**\r\n * 5.2. 根据标签ID获取平台产品列表\r\n */\r\n async getProductsByTag_t(tagId: number | number[], options?: ProductsByTagOptions): Promise<{\r\n products: Product[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n}> {\r\n // 获取标签数据,传递productTagAlias参数\r\n const tags = await this.getTags(options?.productTagAlias);\r\n \r\n // 将单个标签ID转换为数组\r\n const tagIds = Array.isArray(tagId) ? tagId : [tagId];\r\n \r\n // 收集所有指定标签下的产品ID\r\n const allProductIds: number[] = [];\r\n \r\n tagIds.forEach(id => {\r\n const targetTag = tags.find(tag => tag.tagId === id);\r\n if (targetTag) {\r\n allProductIds.push(...targetTag.productIds);\r\n }\r\n });\r\n \r\n // 去重\r\n const uniqueProductIds = [...new Set(allProductIds)];\r\n \r\n if (uniqueProductIds.length === 0) {\r\n return {\r\n products: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n limit: options?.limit || 10\r\n };\r\n }\r\n \r\n // 应用分页\r\n const page = options?.page || 1;\r\n const limit = options?.limit || 10;\r\n const offset = (page - 1) * limit;\r\n const paginatedProductIds = uniqueProductIds.slice(offset, offset + limit);\r\n \r\n // 获取产品详情\r\n const products = await Promise.all(\r\n paginatedProductIds.map(productId => this.getProduct_p(productId))\r\n );\r\n \r\n // 应用状态过滤\r\n let filteredProducts = products;\r\n if (options?.status !== undefined) {\r\n filteredProducts = products.filter(product => product.status === options.status);\r\n }\r\n \r\n return {\r\n products: filteredProducts,\r\n total: uniqueProductIds.length,\r\n page,\r\n limit\r\n };\r\n}\r\n\r\n /**\r\n * 6. 根据分类ID获取该分类的层级路径\r\n * 用于前端面包屑导航\r\n */\r\n async getCategoryPath(categoryId: number): Promise<{\r\n path: ProductCategory[];\r\n currentCategory: ProductCategory | null;\r\n breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }>;\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 递归查找目标分类的函数\r\n const findCategoryById = (cats: ProductCategory[], targetId: number): ProductCategory | null => {\r\n for (const cat of cats) {\r\n if (cat.categoryId === targetId) {\r\n return cat;\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n const found = findCategoryById(cat.children, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // 查找目标分类(包括子分类)\r\n const targetCategory = findCategoryById(categories, categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n path: [],\r\n currentCategory: null,\r\n breadcrumbs: []\r\n };\r\n }\r\n \r\n // 构建分类路径\r\n const path: ProductCategory[] = [];\r\n const breadcrumbs: Array<{\r\n categoryId: number;\r\n categoryName: string;\r\n level: number;\r\n }> = [];\r\n \r\n // 递归查找父分类的函数\r\n const buildPath = (currentCategory: ProductCategory, level: number = 0): void => {\r\n // 将当前分类添加到路径开头(因为我们要从根到叶子构建)\r\n path.unshift(currentCategory);\r\n breadcrumbs.unshift({\r\n categoryId: currentCategory.categoryId,\r\n categoryName: currentCategory.categoryName,\r\n level\r\n });\r\n \r\n // 如果有父分类,继续递归\r\n if (currentCategory.parentId && currentCategory.parentId !== 0) {\r\n const parentCategory = findCategoryById(categories, currentCategory.parentId);\r\n if (parentCategory) {\r\n buildPath(parentCategory, level + 1);\r\n }\r\n }\r\n };\r\n \r\n // 从目标分类开始构建路径\r\n buildPath(targetCategory);\r\n \r\n return {\r\n path,\r\n currentCategory: targetCategory,\r\n breadcrumbs\r\n };\r\n }\r\n\r\n /**\r\n * 7. 获取指定分类ID下的子分类\r\n * 支持递归获取所有层级的子分类\r\n */\r\n async getSubCategories(categoryId: number, options?: {\r\n recursive?: boolean; // 是否递归获取所有层级的子分类\r\n includeCurrent?: boolean; // 是否包含当前分类\r\n maxDepth?: number; // 最大递归深度,默认不限制\r\n }): Promise<{\r\n subCategories: ProductCategory[];\r\n currentCategory: ProductCategory | null;\r\n total: number;\r\n depth: number; // 实际递归深度\r\n }> {\r\n // 获取所有分类数据\r\n const categories = await this.getCategories();\r\n \r\n // 递归查找分类的函数\r\n const findCategoryById = (cats: ProductCategory[], targetId: number): ProductCategory | null => {\r\n for (const cat of cats) {\r\n if (cat.categoryId === targetId) {\r\n return cat;\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n const found = findCategoryById(cat.children, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // 查找目标分类(包括子分类)\r\n const targetCategory = findCategoryById(categories, categoryId);\r\n \r\n if (!targetCategory) {\r\n return {\r\n subCategories: [],\r\n currentCategory: null,\r\n total: 0,\r\n depth: 0\r\n };\r\n }\r\n \r\n const subCategories: ProductCategory[] = [];\r\n let maxDepth = options?.maxDepth || Infinity;\r\n let actualDepth = 0;\r\n \r\n // 递归获取子分类的函数\r\n const collectSubCategories = (parentId: number, currentDepth: number = 0): void => {\r\n if (currentDepth >= maxDepth) {\r\n return;\r\n }\r\n \r\n // 递归查找直接子分类\r\n const findChildren = (cats: ProductCategory[], parentId: number): ProductCategory[] => {\r\n const children: ProductCategory[] = [];\r\n for (const cat of cats) {\r\n if (cat.parentId === parentId) {\r\n children.push(cat);\r\n }\r\n if (cat.children && cat.children.length > 0) {\r\n children.push(...findChildren(cat.children, parentId));\r\n }\r\n }\r\n return children;\r\n };\r\n \r\n const children = findChildren(categories, parentId);\r\n \r\n children.forEach(child => {\r\n subCategories.push(child);\r\n \r\n // 如果需要递归且未达到最大深度,继续查找子分类\r\n if (options?.recursive && currentDepth < maxDepth - 1) {\r\n collectSubCategories(child.categoryId, currentDepth + 1);\r\n }\r\n });\r\n \r\n // 更新实际深度\r\n actualDepth = Math.max(actualDepth, currentDepth);\r\n };\r\n \r\n // 开始收集子分类\r\n collectSubCategories(categoryId);\r\n \r\n // 如果需要包含当前分类,添加到结果中\r\n if (options?.includeCurrent) {\r\n subCategories.unshift(targetCategory);\r\n }\r\n \r\n return {\r\n subCategories,\r\n currentCategory: targetCategory,\r\n total: subCategories.length,\r\n depth: actualDepth\r\n };\r\n }\r\n\r\n /**\r\n * 8. 获取税费信息\r\n * 获取平台的所有税费模板和规则\r\n */\r\n async getTaxInfo(): Promise<TaxResponse> {\r\n const config = this.client.getConfig();\r\n return this.client.request<TaxResponse>(`/tax/platform-${config.platformId}.json`);\r\n }\r\n\r\n /**\r\n * 9. 获取运费信息\r\n * 获取平台的所有运费模板和规则\r\n */\r\n async getShippingInfo(): Promise<ShippingResponse> {\r\n const config = this.client.getConfig();\r\n return this.client.request<ShippingResponse>(`/shipping/platform-${config.platformId}.json`);\r\n }\r\n\r\n /**\r\n * 10. 获取区域信息\r\n * 获取平台的所有区域信息,包括层级结构\r\n */\r\n async getRegions(): Promise<RegionResponse> {\r\n const config = this.client.getConfig();\r\n return this.client.request<RegionResponse>(`/regions/platform-${config.platformId}.json`);\r\n }\r\n\r\n /**\r\n * 11. 获取支付方式信息\r\n * 获取平台的所有支付方式,包括API支付和手动支付\r\n * @param paymentAlias 支付方式别名,默认为'01'\r\n */\r\n async getPaymentMethods(paymentAlias?: string): Promise<PaymentMethodsResponse> {\r\n const config = this.client.getConfig();\r\n const alias = paymentAlias || '01';\r\n return this.client.request<PaymentMethodsResponse>(`/payment/platform-${config.platformId}-${alias}.json`);\r\n }\r\n\r\n /**\r\n * 12. 根据支付方式类型获取支付方式列表\r\n * @param type 支付方式类型:'Api' | 'Manual' | 'Gateway' | 'Crypto'\r\n * @param paymentAlias 支付方式别名,默认为'01'\r\n */\r\n async getPaymentMethodsByType(type: 'Api' | 'Manual' | 'Gateway' | 'Crypto', paymentAlias?: string): Promise<PaymentMethod[]> {\r\n const response = await this.getPaymentMethods(paymentAlias);\r\n return response.methods.filter(method => method.type === type);\r\n }\r\n\r\n /**\r\n * 13. 根据支付方式ID获取特定支付方式详情\r\n * @param methodId 支付方式ID\r\n * @param paymentAlias 支付方式别名,默认为'01'\r\n */\r\n async getPaymentMethodById(methodId: number, paymentAlias?: string): Promise<PaymentMethod | null> {\r\n const response = await this.getPaymentMethods(paymentAlias);\r\n return response.methods.find(method => method.id === methodId) || null;\r\n }\r\n\r\n /**\r\n * 14. 获取支付方式属性值\r\n * @param methodId 支付方式ID\r\n * @param attrName 属性名称\r\n * @param paymentAlias 支付方式别名,默认为'01'\r\n */\r\n async getPaymentMethodAttribute(methodId: number, attrName: string, paymentAlias?: string): Promise<string | null> {\r\n const method = await this.getPaymentMethodById(methodId, paymentAlias);\r\n if (!method) return null;\r\n \r\n const attribute = method.attrs.find(attr => attr.attrName === attrName);\r\n return attribute ? attribute.attrValue : null;\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n Setting,\r\n SettingsResponse,\r\n SettingResponse\r\n} from '../core/types';\r\n\r\nexport class SettingsAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 获取全局设置列表\r\n * 根据平台ID和别名获取所有全局设置\r\n */\r\n async getSettings(settingAlias?: string): Promise<Setting[]> {\r\n const config = this.client.getConfig();\r\n const alias = settingAlias || config.settingAlias || '01';\r\n \r\n const response = await this.client.request<SettingsResponse>(\r\n `/settings/platform-${config.platformId}-${alias}.json`\r\n );\r\n \r\n return response.settings;\r\n }\r\n\r\n /**\r\n * 获取平台全局设置列表\r\n * 根据平台ID和别名获取所有全局设置\r\n */\r\n async getSettings_p(settingAlias_p?: string): Promise<Setting[]> {\r\n const config = this.client.getConfig();\r\n const alias = settingAlias_p || config.settingAlias_p || '01';\r\n \r\n const response = await this.client.request<SettingsResponse>(\r\n `/settings/platform-${config.platformId_p}-${alias}.json`\r\n );\r\n \r\n return response.settings;\r\n }\r\n\r\n /**\r\n * 获取指定设置\r\n * 根据设置key直接获取单个设置\r\n */\r\n async getSetting(key: string): Promise<Setting | null> {\r\n const config = this.client.getConfig();\r\n \r\n try {\r\n const response = await this.client.request<SettingResponse>(\r\n `/settings/platform-${config.platformId}-${key}.json`\r\n );\r\n \r\n return response.setting;\r\n } catch (error) {\r\n console.warn(`Failed to fetch setting ${key}:`, error);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * 获取平台用户指定设置\r\n * 根据设置key直接获取单个设置\r\n */\r\n async getSetting_p(key: string): Promise<Setting | null> {\r\n const config = this.client.getConfig();\r\n \r\n try {\r\n const response = await this.client.request<SettingResponse>(\r\n `/settings/platform-${config.platformId_p}-${key}.json`\r\n );\r\n \r\n return response.setting;\r\n } catch (error) {\r\n console.warn(`Failed to fetch setting ${key}:`, error);\r\n return null;\r\n }\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport {\r\n FormSubmitData,\r\n FormSubmitResponse,\r\n FormSubmitOptions\r\n} from '../core/types';\r\n\r\nexport class FormsAPI {\r\n constructor(private client: GT6Client) {}\r\n\r\n /**\r\n * 通用表单提交方法\r\n * @param aliases 表单别名(如 'CONTACT', 'FEEDBACK' 等)\r\n * @param email 用户邮箱\r\n * @param fieldValue 表单字段值\r\n * @param options 提交选项\r\n */\r\n async submitForm(\r\n aliases: string,\r\n email: string,\r\n fieldValue: Record<string, any>,\r\n options?: FormSubmitOptions\r\n ): Promise<FormSubmitResponse> {\r\n const config = this.client.getConfig();\r\n const endpoint = options?.endpoint || '/api/platform/table';\r\n const createSecret = options?.createSecret || 'Cmx349181!';\r\n\r\n const submitData: FormSubmitData = {\r\n platformId: config.platformId,\r\n aliases,\r\n email,\r\n fieldValue,\r\n createSecret\r\n };\r\n\r\n try {\r\n const response = await fetch(`${config.baseUrl}${endpoint}`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(submitData)\r\n });\r\n\r\n const result = await response.json();\r\n \r\n return {\r\n success: response.ok && result.success !== false,\r\n message: result.message || (response.ok ? '提交成功' : '提交失败'),\r\n data: result.data,\r\n code: result.code\r\n };\r\n } catch (error) {\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '网络错误',\r\n data: null\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 联系表单提交\r\n * @param formData 联系表单数据\r\n */\r\n async submitContactForm(formData: {\r\n firstName: string;\r\n lastName?: string;\r\n email: string;\r\n phone?: string;\r\n subject: string;\r\n message: string;\r\n }): Promise<FormSubmitResponse> {\r\n return this.submitForm('CONTACT', formData.email, {\r\n firstName: formData.firstName,\r\n lastName: formData.lastName || '',\r\n phone: formData.phone || '',\r\n subject: formData.subject,\r\n message: formData.message\r\n });\r\n }\r\n\r\n /**\r\n * 反馈表单提交\r\n * @param formData 反馈表单数据\r\n */\r\n async submitFeedbackForm(formData: {\r\n name: string;\r\n email: string;\r\n type: string;\r\n message: string;\r\n rating?: number;\r\n }): Promise<FormSubmitResponse> {\r\n return this.submitForm('FEEDBACK', formData.email, {\r\n name: formData.name,\r\n type: formData.type,\r\n message: formData.message,\r\n rating: formData.rating || 0\r\n });\r\n }\r\n\r\n /**\r\n * 注册表单提交\r\n * @param formData 注册表单数据\r\n */\r\n async submitRegistrationForm(formData: {\r\n username: string;\r\n email: string;\r\n password: string;\r\n confirmPassword: string;\r\n agreeTerms: boolean;\r\n }): Promise<FormSubmitResponse> {\r\n return this.submitForm('REGISTRATION', formData.email, {\r\n username: formData.username,\r\n password: formData.password,\r\n confirmPassword: formData.confirmPassword,\r\n agreeTerms: formData.agreeTerms\r\n });\r\n }\r\n\r\n /**\r\n * 自定义表单提交\r\n * @param aliases 表单别名\r\n * @param formData 表单数据对象\r\n * @param emailField 邮箱字段名(默认为 'email')\r\n */\r\n async submitCustomForm(\r\n aliases: string,\r\n formData: Record<string, any>,\r\n emailField: string = 'email'\r\n ): Promise<FormSubmitResponse> {\r\n const email = formData[emailField];\r\n if (!email) {\r\n return {\r\n success: false,\r\n message: '邮箱地址是必需的'\r\n };\r\n }\r\n\r\n // 移除邮箱字段,避免重复\r\n const { [emailField]: _, ...fieldValue } = formData;\r\n \r\n return this.submitForm(aliases, email, fieldValue);\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\n\r\n// 用户登录请求参数\r\nexport interface LoginRequest {\r\n username: string;\r\n password: string;\r\n platformId: number;\r\n}\r\n\r\n// 用户登录响应\r\nexport interface LoginResponse {\r\n success: boolean;\r\n message?: string;\r\n token?: string;\r\n user?: {\r\n userId: number;\r\n username: string;\r\n userLevel: number;\r\n status: boolean;\r\n platformId: number;\r\n d1: number;\r\n d2: number;\r\n d3: number;\r\n };\r\n}\r\n\r\n// 用户注册请求参数\r\nexport interface RegisterRequest {\r\n username: string;\r\n password: string;\r\n platformId: number;\r\n ibcode?: string;\r\n}\r\n\r\n// 用户注册响应\r\nexport interface RegisterResponse {\r\n success: boolean;\r\n message?: string;\r\n userId?: number;\r\n}\r\n\r\n// 用户数据类型\r\nexport interface UserData {\r\n userId: number;\r\n username: string;\r\n userLevel: number;\r\n status: boolean;\r\n platformId: number;\r\n d1: number;\r\n d2: number;\r\n d3: number;\r\n token: string;\r\n}\r\n\r\n// 用户资金数据类型\r\nexport interface UserFunds {\r\n id: number;\r\n userId: number;\r\n userType: number;\r\n fund: string;\r\n noFund: string;\r\n rentFund: string;\r\n marginFund: string;\r\n marginNoFund: string;\r\n userIntegral: number;\r\n creditLevel: number;\r\n}\r\n\r\n// 用户资金响应类型\r\nexport interface UserFundsResponse {\r\n success: boolean;\r\n fund: UserFunds;\r\n message?: string;\r\n}\r\n\r\n// 支付记录类型\r\nexport interface PaymentRecord {\r\n id: number;\r\n orderId: string;\r\n userId: number;\r\n userType: number;\r\n methodId: number;\r\n recordType: number;\r\n amount: string;\r\n status: string;\r\n description?: string;\r\n adminDescription?: string;\r\n img?: string;\r\n createTime: string;\r\n updateTime?: string;\r\n}\r\n\r\n// 支付记录列表响应类型\r\nexport interface PaymentRecordsResponse {\r\n success: boolean;\r\n records: PaymentRecord[];\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n message?: string;\r\n}\r\n\r\n// 获取支付记录选项\r\nexport interface PaymentRecordsOptions {\r\n page?: number;\r\n pageSize?: number;\r\n status?: string;\r\n recordType?: number;\r\n methodId?: number;\r\n}\r\n\r\n// 资金日志类型\r\nexport interface FundLog {\r\n logId: number;\r\n fundId: number | null;\r\n userId: number;\r\n fieldName: string;\r\n oldBalance: string;\r\n newBalance: string;\r\n changeAmount: string;\r\n operatorId: number;\r\n operationTime: string;\r\n remark: string | null;\r\n}\r\n\r\n// 资金日志响应类型\r\nexport interface FundLogsResponse {\r\n success: boolean;\r\n logs: FundLog[];\r\n total: number;\r\n message?: string;\r\n}\r\n\r\n// 获取资金日志选项\r\nexport interface FundLogsOptions {\r\n page?: number;\r\n pageSize?: number;\r\n}\r\n\r\n// 零售订单详情类型\r\nexport interface RetailOrderDetail {\r\n detail_id: number;\r\n product_id: number;\r\n product_name: string;\r\n address_id: number;\r\n sku: string;\r\n shipping_fee: number;\r\n tax_fee: number;\r\n quantity: number;\r\n single_price: number;\r\n total_price: number;\r\n region_id: number;\r\n remark: string;\r\n created_at: string;\r\n updated_at: string;\r\n}\r\n\r\n// 零售订单类型\r\nexport interface RetailOrder {\r\n order_id: number;\r\n user_id: number;\r\n user_type: number;\r\n total_amount: number;\r\n pay_way: number;\r\n payment_record_id: number | null;\r\n fund_log_id: number | null;\r\n status: number;\r\n product_type: number;\r\n created_at: string;\r\n updated_at: string;\r\n platform_id: number;\r\n d1: number;\r\n d2: number;\r\n d3: number;\r\n details: RetailOrderDetail[];\r\n}\r\n\r\n// 零售订单响应类型\r\nexport interface RetailOrdersResponse {\r\n success: boolean;\r\n data: {\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n orders: RetailOrder[];\r\n };\r\n message?: string;\r\n}\r\n\r\n// 获取零售订单选项\r\nexport interface RetailOrdersOptions {\r\n page?: number;\r\n pageSize?: number;\r\n}\r\n\r\n// 地址信息类型\r\nexport interface AddressInfo {\r\n addressId: number;\r\n userId: number;\r\n userType: number;\r\n consignee: string;\r\n phone: string;\r\n address: string;\r\n regionId: number;\r\n isDefault: boolean;\r\n createdAt: string;\r\n updatedAt: string;\r\n}\r\n\r\n// 地址信息响应类型\r\nexport interface AddressesResponse {\r\n success: boolean;\r\n addresses?: AddressInfo[];\r\n message?: string;\r\n}\r\n\r\n// 用户资料类型\r\nexport interface UserProfile {\r\n email: string | null;\r\n phone: string | null;\r\n avatar: string | null;\r\n realName: string | null;\r\n}\r\n\r\n// 用户资料响应类型\r\nexport interface UserProfileResponse {\r\n success: boolean;\r\n message?: string;\r\n user?: UserProfile;\r\n}\r\n\r\n// 更新用户资料请求类型\r\nexport interface UpdateProfileRequest {\r\n email?: string;\r\n phone?: string;\r\n realName?: string;\r\n avatar?: string;\r\n}\r\n\r\n// 更新用户资料响应类型\r\nexport interface UpdateProfileResponse {\r\n success: boolean;\r\n message?: string;\r\n}\r\n\r\n// 修改密码请求类型\r\nexport interface ChangePasswordRequest {\r\n oldPassword: string;\r\n newPassword: string;\r\n}\r\n\r\n// 修改密码响应类型\r\nexport interface ChangePasswordResponse {\r\n success: boolean;\r\n message?: string;\r\n}\r\n\r\n// 地址创建/更新请求类型\r\nexport interface AddressRequest {\r\n regionId: number;\r\n consignee: string;\r\n phone: string;\r\n address: string;\r\n isDefault: boolean;\r\n userType?: number; // 新增userType字段,可选\r\n}\r\n\r\n// 地址创建/更新响应类型\r\nexport interface AddressResponse {\r\n success: boolean;\r\n message?: string;\r\n addressId?: number;\r\n}\r\n\r\n// 文件上传响应类型\r\nexport interface UploadResponse {\r\n success: boolean;\r\n message?: string;\r\n url?: string;\r\n}\r\n\r\n/**\r\n * 用户管理API模块\r\n * 提供用户登录、注册等功能\r\n */\r\nexport class UsersAPI {\r\n private client: GT6Client;\r\n\r\n constructor(client: GT6Client) {\r\n this.client = client;\r\n }\r\n\r\n /**\r\n * 用户登录\r\n * @param loginData 登录数据\r\n * @returns 登录响应\r\n */\r\n async login(loginData: LoginRequest): Promise<LoginResponse> {\r\n try {\r\n const response = await this.client.request('/web/user/login', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(loginData)\r\n });\r\n\r\n return response as LoginResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回特定的错误信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '用户名或密码错误'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '登录请求失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 用户注册\r\n * @param registerData 注册数据\r\n * @returns 注册响应\r\n */\r\n async register(registerData: RegisterRequest): Promise<RegisterResponse> {\r\n try {\r\n const response = await this.client.request('/web/user/register', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(registerData)\r\n });\r\n\r\n return response as RegisterResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于400错误,可能是用户名已存在等验证错误\r\n if (error.statusCode === 400) {\r\n return {\r\n success: false,\r\n message: '注册信息有误,请检查输入'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '注册请求失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 保存用户数据到本地存储\r\n * @param userData 用户数据\r\n */\r\n saveUserData(userData: UserData): void {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n localStorage.setItem('userData', JSON.stringify(userData));\r\n }\r\n }\r\n\r\n /**\r\n * 从本地存储获取用户数据\r\n * @returns 用户数据或null\r\n */\r\n getUserData(): UserData | null {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n const userDataStr = localStorage.getItem('userData');\r\n if (userDataStr) {\r\n try {\r\n return JSON.parse(userDataStr) as UserData;\r\n } catch (error) {\r\n console.warn('解析用户数据失败:', error);\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 清除本地存储的用户数据\r\n */\r\n clearUserData(): void {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n localStorage.removeItem('userData');\r\n }\r\n }\r\n\r\n /**\r\n * 检查用户是否已登录\r\n * @returns 是否已登录\r\n */\r\n isLoggedIn(): boolean {\r\n const userData = this.getUserData();\r\n return userData !== null && userData.token !== undefined;\r\n }\r\n\r\n /**\r\n * 获取当前登录用户的token\r\n * @returns token或null\r\n */\r\n getToken(): string | null {\r\n const userData = this.getUserData();\r\n return userData?.token || null;\r\n }\r\n\r\n /**\r\n * 获取当前登录用户信息\r\n * @returns 用户信息或null\r\n */\r\n getCurrentUser(): Omit<UserData, 'token'> | null {\r\n const userData = this.getUserData();\r\n if (userData) {\r\n const { token, ...userInfo } = userData;\r\n return userInfo;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 用户登出\r\n */\r\n logout(): void {\r\n this.clearUserData();\r\n }\r\n\r\n /**\r\n * 记住用户登录信息\r\n * @param username 用户名\r\n * @param password 密码\r\n */\r\n rememberLogin(username: string, password: string): void {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n localStorage.setItem('rememberedUsername', username);\r\n localStorage.setItem('rememberedPassword', password);\r\n }\r\n }\r\n\r\n /**\r\n * 获取记住的登录信息\r\n * @returns 记住的登录信息\r\n */\r\n getRememberedLogin(): { username: string; password: string } | null {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n const username = localStorage.getItem('rememberedUsername');\r\n const password = localStorage.getItem('rememberedPassword');\r\n if (username && password) {\r\n return { username, password };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 清除记住的登录信息\r\n */\r\n clearRememberedLogin(): void {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n localStorage.removeItem('rememberedUsername');\r\n localStorage.removeItem('rememberedPassword');\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户资金信息\r\n * @returns 用户资金信息\r\n */\r\n async getUserFunds(): Promise<UserFundsResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n fund: {} as UserFunds,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/user/fund', {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as UserFundsResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n fund: {} as UserFunds,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n fund: {} as UserFunds,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n fund: {} as UserFunds,\r\n message: error instanceof Error ? error.message : '获取资金信息失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户资金信息(简化版本,返回资金对象或null)\r\n * @returns 用户资金信息或null\r\n */\r\n async getFunds(): Promise<UserFunds | null> {\r\n const result = await this.getUserFunds();\r\n return result.success ? result.fund : null;\r\n }\r\n\r\n /**\r\n * 获取用户支付记录列表\r\n * @param options 查询选项\r\n * @returns 支付记录列表响应\r\n */\r\n async getPaymentRecords(options?: PaymentRecordsOptions): Promise<PaymentRecordsResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n records: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 构建查询参数\r\n const params = new URLSearchParams();\r\n if (options?.page) params.set('page', options.page.toString());\r\n if (options?.pageSize) params.set('pageSize', options.pageSize.toString());\r\n if (options?.status) params.set('status', options.status);\r\n if (options?.recordType) params.set('recordType', options.recordType.toString());\r\n if (options?.methodId) params.set('methodId', options.methodId.toString());\r\n\r\n const url = `/web/payment/records${params.toString() ? `?${params.toString()}` : ''}`;\r\n\r\n const response = await this.client.request(url, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as PaymentRecordsResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n records: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n records: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n records: [],\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n message: error instanceof Error ? error.message : '获取支付记录失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户支付记录列表(简化版本)\r\n * @param page 页码,默认为1\r\n * @param pageSize 每页数量,默认为10\r\n * @returns 支付记录列表或null\r\n */\r\n async getPaymentRecordsSimple(page: number = 1, pageSize: number = 10): Promise<{\r\n records: PaymentRecord[];\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n } | null> {\r\n const result = await this.getPaymentRecords({ page, pageSize });\r\n return result.success ? {\r\n records: result.records,\r\n total: result.total,\r\n page: result.page,\r\n pageSize: result.pageSize\r\n } : null;\r\n }\r\n\r\n /**\r\n * 获取用户资金日志列表\r\n * @param options 查询选项\r\n * @returns 资金日志列表响应\r\n */\r\n async getFundLogs(options?: FundLogsOptions): Promise<FundLogsResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n logs: [],\r\n total: 0,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 构建查询参数\r\n const params = new URLSearchParams();\r\n if (options?.page) params.set('page', options.page.toString());\r\n if (options?.pageSize) params.set('pageSize', options.pageSize.toString());\r\n\r\n const url = `/web/user/fund/logs${params.toString() ? `?${params.toString()}` : ''}`;\r\n\r\n const response = await this.client.request(url, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as FundLogsResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n logs: [],\r\n total: 0,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n logs: [],\r\n total: 0,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n logs: [],\r\n total: 0,\r\n message: error instanceof Error ? error.message : '获取资金日志失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户资金日志列表(简化版本)\r\n * @param page 页码,默认为1\r\n * @param pageSize 每页数量,默认为10\r\n * @returns 资金日志列表或null\r\n */\r\n async getFundLogsSimple(page: number = 1, pageSize: number = 10): Promise<{\r\n logs: FundLog[];\r\n total: number;\r\n } | null> {\r\n const result = await this.getFundLogs({ page, pageSize });\r\n return result.success ? {\r\n logs: result.logs,\r\n total: result.total\r\n } : null;\r\n }\r\n\r\n /**\r\n * 获取用户零售订单列表\r\n * @param options 查询选项\r\n * @returns 零售订单列表响应\r\n */\r\n async getRetailOrders(options?: RetailOrdersOptions): Promise<RetailOrdersResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n data: {\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n orders: []\r\n },\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 构建查询参数\r\n const params = new URLSearchParams();\r\n if (options?.page) params.set('page', options.page.toString());\r\n if (options?.pageSize) params.set('page_size', options.pageSize.toString());\r\n\r\n const url = `/web/orders${params.toString() ? `?${params.toString()}` : ''}`;\r\n\r\n const response = await this.client.request(url, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as RetailOrdersResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n data: {\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n orders: []\r\n },\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n data: {\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n orders: []\r\n },\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n data: {\r\n total: 0,\r\n page: options?.page || 1,\r\n pageSize: options?.pageSize || 10,\r\n orders: []\r\n },\r\n message: error instanceof Error ? error.message : '获取零售订单失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户零售订单列表(简化版本)\r\n * @param page 页码,默认为1\r\n * @param pageSize 每页数量,默认为10\r\n * @returns 零售订单列表或null\r\n */\r\n async getRetailOrdersSimple(page: number = 1, pageSize: number = 10): Promise<{\r\n orders: RetailOrder[];\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n } | null> {\r\n const result = await this.getRetailOrders({ page, pageSize });\r\n return result.success ? {\r\n orders: result.data.orders,\r\n total: result.data.total,\r\n page: result.data.page,\r\n pageSize: result.data.pageSize\r\n } : null;\r\n }\r\n\r\n /**\r\n * 获取用户地址列表\r\n * @param userType 用户类型,默认为2(普通用户)\r\n * @returns 地址列表响应\r\n */\r\n async getAddresses(userType: number = 2): Promise<AddressesResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request(`/web/user/addresses?userType=${userType}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as AddressesResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '获取地址列表失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户地址列表(简化版本)\r\n * @param userType 用户类型,默认为2(普通用户)\r\n * @returns 地址列表或null\r\n */\r\n async getAddressesSimple(userType: number = 2): Promise<AddressInfo[] | null> {\r\n const result = await this.getAddresses(userType);\r\n return result.success && result.addresses ? result.addresses : null;\r\n }\r\n\r\n /**\r\n * 根据地址ID获取地址信息\r\n * @param addressId 地址ID\r\n * @param userType 用户类型,默认为2(普通用户)\r\n * @returns 地址信息或null\r\n */\r\n async getAddressById(addressId: number, userType: number = 2): Promise<AddressInfo | null> {\r\n const addresses = await this.getAddressesSimple(userType);\r\n if (addresses) {\r\n return addresses.find(addr => addr.addressId === addressId) || null;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 获取用户资料\r\n * @returns 用户资料响应\r\n */\r\n async getUserProfile(): Promise<UserProfileResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/user/profile', {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as UserProfileResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '获取用户资料失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户资料(简化版本)\r\n * @returns 用户资料或null\r\n */\r\n async getProfile(): Promise<UserProfile | null> {\r\n const result = await this.getUserProfile();\r\n return result.success && result.user ? result.user : null;\r\n }\r\n\r\n /**\r\n * 更新用户资料\r\n * @param profileData 用户资料数据\r\n * @returns 更新响应\r\n */\r\n async updateProfile(profileData: UpdateProfileRequest): Promise<UpdateProfileResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/user/profile', {\r\n method: 'PUT',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(profileData)\r\n });\r\n\r\n return response as UpdateProfileResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '更新用户资料失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 修改密码\r\n * @param passwordData 密码数据\r\n * @returns 修改密码响应\r\n */\r\n async changePassword(passwordData: ChangePasswordRequest): Promise<ChangePasswordResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/user/password', {\r\n method: 'PUT',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(passwordData)\r\n });\r\n\r\n return response as ChangePasswordResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '修改密码失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 创建地址\r\n * @param addressData 地址数据\r\n * @returns 创建地址响应\r\n */\r\n async createAddress(addressData: AddressRequest): Promise<AddressResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 确保userType有默认值\r\n const requestData = {\r\n ...addressData,\r\n userType: addressData.userType || 2\r\n };\r\n\r\n const response = await this.client.request('/web/user/addresses', {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(requestData)\r\n });\r\n\r\n return response as AddressResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '创建地址失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 更新地址\r\n * @param addressId 地址ID\r\n * @param addressData 地址数据\r\n * @returns 更新地址响应\r\n */\r\n async updateAddress(addressId: number, addressData: AddressRequest): Promise<AddressResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 确保userType有默认值\r\n const requestData = {\r\n ...addressData,\r\n userType: addressData.userType || 2\r\n };\r\n\r\n const response = await this.client.request(`/web/user/addresses/${addressId}`, {\r\n method: 'PUT',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(requestData)\r\n });\r\n\r\n return response as AddressResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '更新地址失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 删除地址\r\n * @param addressId 地址ID\r\n * @param userType 用户类型,默认为2(普通用户)\r\n * @returns 删除地址响应\r\n */\r\n async deleteAddress(addressId: number, userType: number = 2): Promise<AddressResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request(`/web/user/addresses/${addressId}?userType=${userType}`, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return response as AddressResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '删除地址失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 上传文件\r\n * @param file 文件对象\r\n * @returns 上传响应\r\n */\r\n async uploadFile(file: File): Promise<UploadResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n // 创建FormData\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n\r\n const response = await this.client.request('/web/upload', {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`\r\n },\r\n body: formData\r\n });\r\n\r\n return response as UploadResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '文件上传失败'\r\n };\r\n }\r\n }\r\n} ","import { GT6Client } from '../core/client';\r\nimport { RetailOrder, RetailOrderDetail } from './users';\r\n\r\n// 资金扣款请求参数\r\nexport interface DeductFundsRequest {\r\n fieldName: string;\r\n changeAmount: number;\r\n remark?: string;\r\n}\r\n\r\n// 资金扣款响应\r\nexport interface DeductFundsResponse {\r\n success: boolean;\r\n message?: string;\r\n logId?: number;\r\n newBalance?: string;\r\n}\r\n\r\n// 创建零售订单请求参数\r\nexport interface CreateRetailOrderRequest {\r\n user_id: number;\r\n user_type: number;\r\n total_amount: number;\r\n pay_way: number;\r\n product_type: number;\r\n platform_id: number;\r\n d1: number;\r\n d2: number;\r\n d3: number;\r\n products: Array<{\r\n product_id: number;\r\n quantity: number;\r\n sku: string;\r\n price: number;\r\n region_id: number;\r\n address_id: number;\r\n shipping_fee: number;\r\n tax_fee: number;\r\n }>;\r\n fundLogId?: number;\r\n status?: number;\r\n}\r\n\r\n// 创建零售订单响应\r\nexport interface CreateRetailOrderResponse {\r\n success: boolean;\r\n message?: string;\r\n order?: RetailOrder;\r\n orderId?: number;\r\n data?: {\r\n order_id: string;\r\n total_amount: number;\r\n };\r\n}\r\n\r\n// 创建支付记录请求参数\r\nexport interface CreatePaymentRecordRequest {\r\n methodId: number;\r\n recordType: number; // 1: 充值, 2: 订单支付\r\n orderId?: number;\r\n amount: number;\r\n description?: string;\r\n img?: string; // 支付凭证图片URL\r\n userType: number;\r\n orderData?: {\r\n user_id: number;\r\n products: Array<{\r\n product_id: number;\r\n quantity: number;\r\n sku: string;\r\n price: number;\r\n region_id: number;\r\n address_id: number;\r\n shipping_fee: number;\r\n tax_fee: number;\r\n }>;\r\n total_amount: number;\r\n platform_id: number;\r\n d1: number;\r\n d2: number;\r\n d3: number;\r\n pay_way: number;\r\n };\r\n}\r\n\r\n// 创建支付记录响应\r\nexport interface CreatePaymentRecordResponse {\r\n success: boolean;\r\n message?: string;\r\n code?: number;\r\n data?: {\r\n record_id?: number;\r\n order_id?: string;\r\n };\r\n}\r\n\r\n/**\r\n * 交易管理API模块\r\n * 提供资金扣款、订单创建等功能\r\n */\r\nexport class TransactionsAPI {\r\n private client: GT6Client;\r\n\r\n constructor(client: GT6Client) {\r\n this.client = client;\r\n }\r\n\r\n /**\r\n * 资金扣款\r\n * @param deductData 扣款数据\r\n * @returns 扣款响应\r\n */\r\n async deductFunds(deductData: DeductFundsRequest): Promise<DeductFundsResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/user/fund/operation', {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(deductData)\r\n });\r\n\r\n return response as DeductFundsResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于400错误,可能是余额不足等业务错误\r\n if (error.statusCode === 400) {\r\n return {\r\n success: false,\r\n message: error.message || '扣款失败,请检查余额'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '资金扣款失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 创建零售订单\r\n * @param orderData 订单数据\r\n * @returns 创建订单响应\r\n */\r\n async createRetailOrder(orderData: CreateRetailOrderRequest): Promise<CreateRetailOrderResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/order/create', {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(orderData)\r\n });\r\n\r\n return response as CreateRetailOrderResponse;\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于400错误,可能是订单数据有误\r\n if (error.statusCode === 400) {\r\n return {\r\n success: false,\r\n message: error.message || '订单数据有误,请检查输入'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '创建订单失败'\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * 获取用户token(从本地存储)\r\n * @returns token或null\r\n */\r\n private getToken(): string | null {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n const userDataStr = localStorage.getItem('userData');\r\n if (userDataStr) {\r\n try {\r\n const userData = JSON.parse(userDataStr);\r\n return userData.token || null;\r\n } catch (error) {\r\n console.warn('解析用户数据失败:', error);\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 创建支付记录\r\n * @param paymentData 支付记录数据\r\n * @returns 创建支付记录响应\r\n */\r\n async createPaymentRecord(paymentData: CreatePaymentRecordRequest): Promise<CreatePaymentRecordResponse> {\r\n try {\r\n // 获取用户token\r\n const token = this.getToken();\r\n if (!token) {\r\n return {\r\n success: false,\r\n message: '用户未登录'\r\n };\r\n }\r\n\r\n const response = await this.client.request('/web/payment/record/create', {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(paymentData)\r\n });\r\n\r\n // 检查响应格式\r\n if (response && typeof response === 'object') {\r\n // 如果响应包含 code 字段,说明是标准格式\r\n if ('code' in response) {\r\n const responseData = response as any;\r\n return {\r\n success: responseData.code === 0,\r\n message: responseData.message || (responseData.code === 0 ? '支付申请已提交' : '提交失败'),\r\n code: responseData.code,\r\n data: responseData.data\r\n };\r\n }\r\n \r\n // 如果没有 code 字段,可能是其他格式\r\n return {\r\n success: true,\r\n message: '支付申请已提交',\r\n data: response\r\n };\r\n }\r\n\r\n return {\r\n success: false,\r\n message: '响应格式错误'\r\n };\r\n } catch (error: any) {\r\n // 如果是HTTP错误,尝试解析响应体\r\n if (error.statusCode && error.message) {\r\n // 对于401错误,返回认证失败信息\r\n if (error.statusCode === 401) {\r\n return {\r\n success: false,\r\n message: '认证失败,请重新登录'\r\n };\r\n }\r\n \r\n // 对于400错误,可能是数据有误\r\n if (error.statusCode === 400) {\r\n return {\r\n success: false,\r\n message: error.message || '支付数据有误,请检查输入'\r\n };\r\n }\r\n \r\n // 对于其他HTTP错误,返回状态码信息\r\n return {\r\n success: false,\r\n message: error.message || `HTTP ${error.statusCode} 错误`\r\n };\r\n }\r\n \r\n // 对于网络错误或其他错误\r\n return {\r\n success: false,\r\n message: error instanceof Error ? error.message : '创建支付记录失败'\r\n };\r\n }\r\n }\r\n} ","import { GT6Client } from './core/client';\nimport { ArticlesAPI } from './modules/articles';\nimport { ProductsAPI } from './modules/products';\nimport { SettingsAPI } from './modules/settings';\nimport { FormsAPI } from './modules/forms';\nimport { UsersAPI } from './modules/users';\nimport { TransactionsAPI } from './modules/transactions';\nimport { \n GT6Config, \n ArticlesByCategoryOptions, \n ArticlesByTagOptions,\n ProductsByCategoryOptions,\n ProductsByTagOptions\n} from './core/types';\n\n/**\n * GT6 SDK 主类\n * 提供文章、产品、设置、表单和用户管理相关的所有功能\n */\nexport class GT6SDK {\n public articles: ArticlesAPI;\n public products: ProductsAPI;\n public settings: SettingsAPI;\n public forms: FormsAPI;\n public users: UsersAPI;\n public transactions: TransactionsAPI;\n\n constructor(config: GT6Config) {\n const client = new GT6Client(config);\n this.articles = new ArticlesAPI(client);\n this.products = new ProductsAPI(client);\n this.settings = new SettingsAPI(client);\n this.forms = new FormsAPI(client);\n this.users = new UsersAPI(client);\n this.transactions = new TransactionsAPI(client);\n }\n\n /**\n * 获取客户端实例(用于高级用法)\n */\n getClient(): GT6Client {\n return (this.articles as any).client;\n }\n\n /**\n * 清除所有缓存\n */\n clearCache(): void {\n this.getClient().clearCache();\n }\n\n /**\n * 获取缓存统计信息\n */\n getCacheStats() {\n return this.getClient().getCacheStats();\n }\n\n /**\n * 1. 便捷方法:根据文章ID获取文章详情\n */\n async getArticle(articleId: number | string) {\n return this.articles.getArticle(articleId);\n }\n\n /**\n * 1.1. 便捷方法:根据文章ID获取文章详情(使用上级平台ID)\n */\n async getArticle_p(articleId: number | string) {\n return this.articles.getArticle_p(articleId);\n }\n\n /**\n * 2. 便捷方法:获取文章分类列表\n */\n async getCategories(rootCategoryId?: number | string) {\n return this.articles.getCategories(rootCategoryId);\n }\n\n /**\n * 2.1. 便捷方法:获取文章分类列表(使用下级平台ID)\n */\n async getCategories_p(rootCategoryId_p?: number | string) {\n return this.articles.getCategories_p(rootCategoryId_p);\n }\n\n /**\n * 2.2. 便捷方法:获取文章分类列表(使用下级平台ID)\n */\n async getCategories_a(rootCategoryId?: number | string) {\n return this.articles.getCategories_a(rootCategoryId);\n }\n\n\n /**\n * 3. 便捷方法:获取文章标签列表\n */\n async getTags(tagAlias?: string) {\n return this.articles.getTags(tagAlias);\n }\n\n /**\n * 3.1. 便捷方法:获取文章标签列表(使用下级平台ID)\n */\n async getTags_p(tagAlias_p?: string) {\n return this.articles.getTags_p(tagAlias_p);\n }\n\n /**\n * 4. 便捷方法:根据分类ID获取文章列表\n */\n async getArticlesByCategory(categoryId: number | number[], options?: ArticlesByCategoryOptions) {\n return this.articles.getArticlesByCategory(categoryId, options);\n }\n\n /**\n * 4.1. 便捷方法:根据分类ID获取文章列表(使用下级平台ID)\n */\n async getArticlesByCategory_p(categoryId: number | number[], options?: ArticlesByCategoryOptions) {\n return this.articles.getArticlesByCategory_p(categoryId, options);\n }\n\n /**\n * 4.2. 便捷方法:根据分类ID获取文章列表(使用当前分类数据)\n */\n async getArticlesByCategory_t(categoryId: number | number[], options?: ArticlesByCategoryOptions) {\n return this.articles.getArticlesByCategory_t(categoryId, options);\n }\n\n /**\n * 4.3. 便捷方法:根据分类ID获取文章列表(从大型静态JSON文件获取)\n */\n async getArticlesByCategory_a(categoryId: number, options?: ArticlesByCategoryOptions) {\n return this.articles.getArticlesByCategory_a(categoryId, options);\n }\n\n /**\n * 5. 便捷方法:根据标签ID获取文章列表\n */\n async getArticlesByTag(tagId: number | number[], options?: ArticlesByTagOptions) {\n return this.articles.getArticlesByTag(tagId, options);\n }\n\n /**\n * 5.1. 便捷方法:根据标签ID获取文章列表(使用下级平台ID)\n */\n async getArticlesByTag_p(tagId: number | number[], options?: ArticlesByTagOptions) {\n return this.articles.getArticlesByTag_p(tagId, options);\n }\n\n /**\n * 5.2. 便捷方法:根据标签ID获取文章列表(使用当前标签数据)\n */\n async getArticlesByTag_t(tagId: number | number[], options?: ArticlesByTagOptions) {\n return this.articles.getArticlesByTag_t(tagId, options);\n }\n\n /**\n * 6. 便捷方法:根据分类ID获取该分类的层级路径\n */\n async getCategoryPath(categoryId: number) {\n return this.articles.getCategoryPath(categoryId);\n }\n\n /**\n * 7. 便捷方法:获取指定分类ID下的子分类\n */\n async getSubCategories(categoryId: number, options?: {\n recursive?: boolean;\n includeCurrent?: boolean;\n maxDepth?: number;\n }) {\n return this.articles.getSubCategories(categoryId, options);\n }\n\n /**\n * 8. 便捷方法:根据产品ID获取产品详情\n */\n async getProduct(productId: number | string) {\n return this.products.getProduct(productId);\n }\n\n /**\n * 8.1. 便捷方法:根据产品ID获取父平台产品详情\n */\n async getProduct_p(productId: number | string) {\n return this.products.getProduct_p(productId);\n }\n\n /**\n * 8.2. 便捷方法:获取父平台产品分类列表\n */\n async getCategories_b(rootCategoryId?: number | string) {\n return this.products.getCategories_b(rootCategoryId);\n }\n\n /**\n * 9. 便捷方法:获取产品分类列表\n */\n async getProductCategories(productRootCategoryId?: number | string) {\n return this.products.getCategories(productRootCategoryId);\n }\n\n /**\n * 9.1. 便捷方法:获取父平台产品分类列表\n */\n async getProductCategories_p(productRootCategoryId_p?: number | string) {\n return this.products.getCategories_p(productRootCategoryId_p);\n }\n\n /**\n * 10. 便捷方法:获取产品标签列表\n */\n async getProductTags(productTagAlias?: string) {\n return this.products.getTags(productTagAlias);\n }\n\n /**\n * 10.1. 便捷方法:获取父平台产品标签列表\n */\n async getProductTags_p(productTagAlias_p?: string) {\n return this.products.getTags_p(productTagAlias_p);\n }\n\n /**\n * 11. 便捷方法:根据分类ID获取产品列表\n */\n async getProductsByCategory(categoryId: number | number[], options?: ProductsByCategoryOptions) {\n return this.products.getProductsByCategory(categoryId, options);\n }\n\n /**\n * 11.1. 便捷方法:根据分类ID获取父平台产品列表\n */\n async getProductsByCategory_p(categoryId: number | number[], options?: ProductsByCategoryOptions) {\n return this.products.getProductsByCategory_p(categoryId, options);\n }\n\n /**\n * 11.2. 便捷方法:根据分类ID获取父平台产品列表(使用当前分类数据)\n */\n async getProductsByCategory_t(categoryId: number | number[], options?: ProductsByCategoryOptions) {\n return this.products.getProductsByCategory_t(categoryId, options);\n }\n\n /**\n * 11.3. 便捷方法:根据大分类ID获取平台产品列表(从big-product-categories静态JSON获取)\n */\n async getProductsByCategory_b(categoryId: number, options?: ProductsByCategoryOptions) {\n return this.products.getProductsByCategory_b(categoryId, options);\n }\n\n /**\n * 12. 便捷方法:根据标签ID获取产品列表\n */\n async getProductsByTag(tagId: number | number[], options?: ProductsByTagOptions) {\n return this.products.getProductsByTag(tagId, options);\n }\n\n /**\n * 12.1. 便捷方法:根据标签ID获取父平台产品列表\n */\n async getProductsByTag_p(tagId: number | number[], options?: ProductsByTagOptions) {\n return this.products.getProductsByTag_p(tagId, options);\n }\n\n /**\n * 12.2. 便捷方法:根据标签ID获取父平台产品列表(使用当前标签数据)\n */\n async getProductsByTag_t(tagId: number | number[], options?: ProductsByTagOptions) {\n return this.products.getProductsByTag_t(tagId, options);\n }\n\n /**\n * 13. 便捷方法:根据分类ID获取该分类的层级路径\n */\n async getProductCategoryPath(categoryId: number) {\n return this.products.getCategoryPath(categoryId);\n }\n\n /**\n * 14. 便捷方法:获取指定分类ID下的子分类\n */\n async getProductSubCategories(categoryId: number, options?: {\n recursive?: boolean;\n includeCurrent?: boolean;\n maxDepth?: number;\n }) {\n return this.products.getSubCategories(categoryId, options);\n }\n\n /**\n * 15. 便捷方法:获取税费信息\n */\n async getTaxInfo() {\n return this.products.getTaxInfo();\n }\n\n /**\n * 16. 便捷方法:获取运费信息\n */\n async getShippingInfo() {\n return this.products.getShippingInfo();\n }\n\n /**\n * 17. 便捷方法:获取区域信息\n */\n async getRegions() {\n return this.products.getRegions();\n }\n\n /**\n * 18. 便捷方法:获取全局设置列表\n */\n async getSettings(settingAlias?: string) {\n return this.settings.getSettings(settingAlias);\n }\n\n /**\n * 18.1. 便捷方法:获取父平台全局设置列表\n */\n async getSettings_p(settingAlias_p?: string) {\n return this.settings.getSettings_p(settingAlias_p);\n }\n\n /**\n * 19. 便捷方法:获取指定设置\n */\n async getSetting(key: string) {\n return this.settings.getSetting(key);\n }\n\n /**\n * 19.1. 便捷方法:获取父平台指定设置\n */\n async getSetting_p(key: string) {\n return this.settings.getSetting_p(key);\n }\n\n /**\n * 20. 便捷方法:获取支付方式列表\n */\n async getPaymentMethods(paymentAlias?: string) {\n return this.products.getPaymentMethods(paymentAlias);\n }\n\n /**\n * 21. 便捷方法:根据类型获取支付方式\n */\n async getPaymentMethodsByType(type: 'Api' | 'Manual' | 'Gateway' | 'Crypto', paymentAlias?: string) {\n return this.products.getPaymentMethodsByType(type, paymentAlias);\n }\n\n /**\n * 22. 便捷方法:根据ID获取支付方式详情\n */\n async getPaymentMethodById(methodId: number, paymentAlias?: string) {\n return this.products.getPaymentMethodById(methodId, paymentAlias);\n }\n\n /**\n * 23. 便捷方法:获取支付方式属性值\n */\n async getPaymentMethodAttribute(methodId: number, attrName: string, paymentAlias?: string) {\n return this.products.getPaymentMethodAttribute(methodId, attrName, paymentAlias);\n }\n\n /**\n * 24. 便捷方法:通用表单提交\n */\n async submitForm(aliases: string, email: string, fieldValue: Record<string, any>, options?: any) {\n return this.forms.submitForm(aliases, email, fieldValue, options);\n }\n\n /**\n * 25. 便捷方法:联系表单提交\n */\n async submitContactForm(formData: {\n firstName: string;\n lastName?: string;\n email: string;\n phone?: string;\n subject: string;\n message: string;\n }) {\n return this.forms.submitContactForm(formData);\n }\n\n /**\n * 26. 便捷方法:反馈表单提交\n */\n async submitFeedbackForm(formData: {\n name: string;\n email: string;\n type: string;\n message: string;\n rating?: number;\n }) {\n return this.forms.submitFeedbackForm(formData);\n }\n\n /**\n * 27. 便捷方法:自定义表单提交\n */\n async submitCustomForm(aliases: string, formData: Record<string, any>, emailField?: string) {\n return this.forms.submitCustomForm(aliases, formData, emailField);\n }\n\n /**\n * 28. 便捷方法:用户登录\n */\n async login(username: string, password: string, platformId: number) {\n return this.users.login({ username, password, platformId });\n }\n\n /**\n * 29. 便捷方法:用户注册\n */\n async register(username: string, password: string, platformId: number, ibcode?: string) {\n return this.users.register({ username, password, platformId, ibcode });\n }\n\n /**\n * 30. 便捷方法:检查用户是否已登录\n */\n isLoggedIn() {\n return this.users.isLoggedIn();\n }\n\n /**\n * 31. 便捷方法:获取当前登录用户信息\n */\n getCurrentUser() {\n return this.users.getCurrentUser();\n }\n\n /**\n * 32. 便捷方法:获取当前登录用户的token\n */\n getToken() {\n return this.users.getToken();\n }\n\n /**\n * 33. 便捷方法:用户登出\n */\n logout() {\n return this.users.logout();\n }\n\n /**\n * 34. 便捷方法:保存用户数据\n */\n saveUserData(userData: any) {\n return this.users.saveUserData(userData);\n }\n\n /**\n * 35. 便捷方法:获取用户数据\n */\n getUserData() {\n return this.users.getUserData();\n }\n\n /**\n * 36. 便捷方法:记住登录信息\n */\n rememberLogin(username: string, password: string) {\n return this.users.rememberLogin(username, password);\n }\n\n /**\n * 37. 便捷方法:获取记住的登录信息\n */\n getRememberedLogin() {\n return this.users.getRememberedLogin();\n }\n\n /**\n * 38. 便捷方法:清除记住的登录信息\n */\n clearRememberedLogin() {\n return this.users.clearRememberedLogin();\n }\n\n /**\n * 39. 便捷方法:获取用户资金信息\n */\n async getUserFunds() {\n return this.users.getUserFunds();\n }\n\n /**\n * 40. 便捷方法:获取用户资金信息(简化版本)\n */\n async getFunds() {\n return this.users.getFunds();\n }\n\n /**\n * 41. 便捷方法:获取用户支付记录列表\n */\n async getPaymentRecords(options?: any) {\n return this.users.getPaymentRecords(options);\n }\n\n /**\n * 42. 便捷方法:获取用户支付记录列表(简化版本)\n */\n async getPaymentRecordsSimple(page: number = 1, pageSize: number = 10) {\n return this.users.getPaymentRecordsSimple(page, pageSize);\n }\n\n /**\n * 便捷方法:获取用户资金日志列表\n */\n async getFundLogs(options?: any) {\n return this.users.getFundLogs(options);\n }\n\n /**\n * 便捷方法:获取用户资金日志列表(简化版本)\n */\n async getFundLogsSimple(page: number = 1, pageSize: number = 10) {\n return this.users.getFundLogsSimple(page, pageSize);\n }\n\n /**\n * 便捷方法:获取用户零售订单列表\n */\n async getRetailOrders(options?: any) {\n return this.users.getRetailOrders(options);\n }\n\n /**\n * 便捷方法:获取用户零售订单列表(简化版本)\n */\n async getRetailOrdersSimple(page: number = 1, pageSize: number = 10) {\n return this.users.getRetailOrdersSimple(page, pageSize);\n }\n\n /**\n * 便捷方法:获取用户地址列表\n * @param userType 用户类型,默认为2(普通用户)\n */\n async getAddresses(userType: number = 2) {\n return this.users.getAddresses(userType);\n }\n\n /**\n * 便捷方法:获取用户地址列表(简化版本)\n * @param userType 用户类型,默认为2(普通用户)\n */\n async getAddressesSimple(userType: number = 2) {\n return this.users.getAddressesSimple(userType);\n }\n\n /**\n * 便捷方法:根据地址ID获取地址信息\n * @param addressId 地址ID\n * @param userType 用户类型,默认为2(普通用户)\n */\n async getAddressById(addressId: number, userType: number = 2) {\n return this.users.getAddressById(addressId, userType);\n }\n\n /**\n * 便捷方法:获取用户资料\n */\n async getUserProfile() {\n return this.users.getUserProfile();\n }\n\n /**\n * 便捷方法:获取用户资料(简化版本)\n */\n async getProfile() {\n return this.users.getProfile();\n }\n\n /**\n * 便捷方法:更新用户资料\n */\n async updateProfile(profileData: any) {\n return this.users.updateProfile(profileData);\n }\n\n /**\n * 便捷方法:修改密码\n */\n async changePassword(passwordData: any) {\n return this.users.changePassword(passwordData);\n }\n\n /**\n * 便捷方法:创建地址\n * @param addressData 地址数据\n */\n async createAddress(addressData: any) {\n return this.users.createAddress(addressData);\n }\n\n /**\n * 便捷方法:更新地址\n * @param addressId 地址ID\n * @param addressData 地址数据\n */\n async updateAddress(addressId: number, addressData: any) {\n return this.users.updateAddress(addressId, addressData);\n }\n\n /**\n * 便捷方法:删除地址\n * @param addressId 地址ID\n * @param userType 用户类型,默认为2(普通用户)\n */\n async deleteAddress(addressId: number, userType: number = 2) {\n return this.users.deleteAddress(addressId, userType);\n }\n\n /**\n * 便捷方法:上传文件\n */\n async uploadFile(file: File) {\n return this.users.uploadFile(file);\n }\n\n /**\n * 便捷方法:资金扣款\n */\n async deductFunds(deductData: any) {\n return this.transactions.deductFunds(deductData);\n }\n\n /**\n * 便捷方法:创建零售订单\n */\n async createRetailOrder(orderData: any) {\n return this.transactions.createRetailOrder(orderData);\n }\n\n /**\n * 便捷方法:创建支付记录\n */\n async createPaymentRecord(paymentData: any) {\n return this.transactions.createPaymentRecord(paymentData);\n }\n}\n\n// 导出所有类型和模块\nexport * from './core/types';\nexport * from './core/client';\nexport * from './modules/articles';\nexport * from './modules/products';\nexport * from './modules/settings';\nexport * from './modules/forms';\nexport * from './modules/users';\nexport * from './modules/transactions';\n\n// 默认导出\nexport default GT6SDK; "],"names":[],"mappings":"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"}
|