/** 撞款控制台/台账适配:/api/admin/shop-data-crawl/duplicate-check-console、-ledger、-export。 */ import { http } from '@/api/http' import { toDuplicateItemsQuery, type DuplicateFilter } from './duplicate-filter.ts' import { parseDuplicateConsole, parseLedgerPage, type DuplicateConsole, type LedgerPage, } from './duplicate-console-model.ts' export const DUPLICATE_CHECK_ENDPOINT = '/api/admin/shop-data-crawl' /** console 端点吃 asin/shop_name/group/country/site/date_from/date_to;多余分页参数后端忽略。 */ function toConsoleQuery(filter: DuplicateFilter): Record { const query: Record = {} const asin = (filter.asin || '').trim() if (asin) query.asin = asin const shopName = (filter.shopName || '').trim() if (shopName) query.shop_name = shopName const group = (filter.group || '').trim() if (group) query.group = group const country = (filter.country || '').trim() if (country) query.country = country const site = (filter.site || '').trim() if (site) query.site = site const dateFrom = (filter.dateFrom || '').trim() if (dateFrom) query.date_from = dateFrom const dateTo = (filter.dateTo || '').trim() if (dateTo) query.date_to = dateTo return query } export type LedgerSortKey = 'asin' | 'brand' | 'store_count' | 'record_count' | 'earliest' | 'latest' /** 加载撞款控制台快照:GET /duplicate-check-console。 */ export async function fetchDuplicateConsole(filter: DuplicateFilter): Promise { const { data } = await http.get(`${DUPLICATE_CHECK_ENDPOINT}/duplicate-check-console`, { params: toConsoleQuery(filter), }) return parseDuplicateConsole(data) } /** 加载全部 ASIN 台账分页(含未撞款):GET /duplicate-check-ledger。 */ export async function fetchDuplicateLedger( filter: DuplicateFilter, page: number, pageSize: number, sortKey: LedgerSortKey | '', sortDir: 'asc' | 'desc', ): Promise { const params: Record = { ...toConsoleQuery(filter), page, page_size: pageSize } if (sortKey) params.sort_key = sortKey params.sort_dir = sortDir const { data } = await http.get(`${DUPLICATE_CHECK_ENDPOINT}/duplicate-check-ledger`, { params }) return parseLedgerPage(data) } /** 导出 Excel(撞款 view=monitor / 台账 view=all):GET /duplicate-check-export → xlsx Blob。 */ export async function requestDuplicateExportBlob(filter: DuplicateFilter, view: string): Promise { const { data } = await http.get(`${DUPLICATE_CHECK_ENDPOINT}/duplicate-check-export`, { params: toDuplicateItemsQuery({ ...filter, view }, 1, 100), responseType: 'blob', }) return data }