Обновлен компонент PvzReturnsTab: добавлена интеграция с API Wildberries для загрузки заявок на возврат, реализована обработка данных и фильтрация по статусам. Улучшен интерфейс с новыми элементами управления и отображением информации о заявках. Добавлены проверки на наличие API ключа и обработка ошибок при загрузке данных.

This commit is contained in:
Bivekich
2025-07-24 16:13:38 +03:00
parent c6bffd1d9b
commit 1e22f6fef9
3 changed files with 910 additions and 865 deletions

View File

@ -335,6 +335,49 @@ export interface WBStatisticsData {
buyoutPercentage: number
}
export interface WBClaimStatus {
1: 'На рассмотрении'
2: 'Одобрена'
3: 'Отклонена'
4: 'В архиве'
}
export interface WBClaimType {
1: 'Претензия'
2: 'Возврат'
}
export interface WBClaim {
id: string
claim_type: number
status: number
status_ex: number
nm_id: number
user_comment: string
wb_comment: string
dt: string
imt_name: string
order_dt: string
dt_update: string
photos: string[]
video_paths: string[]
actions: string[]
price: number
currency_code: string
srid: string
}
export interface WBClaimsResponse {
claims: WBClaim[]
total: number
}
export interface WBClaimResponseRequest {
id: string
action: string
comment?: string
}
class WildberriesService {
private apiKey: string
private baseURL = 'https://statistics-api.wildberries.ru'
@ -1260,6 +1303,70 @@ class WildberriesService {
}
}
// Получение заявок покупателей на возврат товаров
async getClaims(options: {
isArchive: boolean
id?: string
limit?: number
offset?: number
nmId?: number
}): Promise<WBClaimsResponse> {
const { isArchive, id, limit = 50, offset = 0, nmId } = options
// Используем правильный API endpoint для возвратов
let url = `https://returns-api.wildberries.ru/api/v1/claims?is_archive=${isArchive}`
if (id) url += `&id=${id}`
if (limit) url += `&limit=${limit}`
if (offset) url += `&offset=${offset}`
if (nmId) url += `&nm_id=${nmId}`
console.log(`WB Claims API: Getting customer claims from ${url}`)
try {
const response = await this.makeRequest<WBClaimsResponse>(url, {
method: 'GET'
})
console.log(`WB Claims API: Got ${response.claims?.length || 0} claims, total: ${response.total || 0}`)
return response
} catch (error) {
console.error(`WB Claims API: Error getting claims:`, error)
return { claims: [], total: 0 }
}
}
// Ответ на заявку покупателя на возврат
async respondToClaim(request: WBClaimResponseRequest): Promise<boolean> {
const url = `https://returns-api.wildberries.ru/api/v1/claim`
console.log(`WB Claims API: Responding to claim ${request.id} with action ${request.action}`)
try {
await this.makeRequest(url, {
method: 'PATCH',
body: JSON.stringify(request)
})
console.log(`WB Claims API: Successfully responded to claim ${request.id}`)
return true
} catch (error) {
console.error(`WB Claims API: Error responding to claim:`, error)
return false
}
}
// Статический метод для получения заявок с токеном
static async getClaims(apiKey: string, options: {
isArchive: boolean
id?: string
limit?: number
offset?: number
nmId?: number
}): Promise<WBClaimsResponse> {
const service = new WildberriesService(apiKey)
return service.getClaims(options)
}
}