/** 查询 ASIN 导出 URL 构建:按当前筛选下发 group_id/shop_name/asin/country(对齐 Java export @RequestParam snake_case)。 */ import { normalizeQueryAsinCountry, type QueryAsinFilterState } from './query-asin-filter.ts' export const QUERY_ASIN_EXPORT_ENDPOINT = '/api/admin/query-asins/export' /** 按导出可用筛选(分组/店铺名/ASIN/国家)构建查询串;空白/非法条件不下发,避免导出范围被误解。 */ export function buildQueryAsinExportQuery(state: QueryAsinFilterState): string { const params = new URLSearchParams() const groupId = state.groupId if (typeof groupId === 'number' && groupId >= 1) params.set('group_id', String(Math.floor(groupId))) const shopName = (state.shopName || '').trim() if (shopName) params.set('shop_name', shopName) const asin = (state.asin || '').trim() if (asin) params.set('asin', asin) const country = normalizeQueryAsinCountry(state.country) if (country) params.set('country', country) return params.toString() } /** 导出下载地址:浏览器直接访问该 URL 触发流式下载;无筛选时为全量导出。 */ export function toQueryAsinExportUrl(state: QueryAsinFilterState): string { const query = buildQueryAsinExportQuery(state) return query ? `${QUERY_ASIN_EXPORT_ENDPOINT}?${query}` : QUERY_ASIN_EXPORT_ENDPOINT }