task-254(admin.html观感对齐): 去重汇总页对齐(筛选扩充/行编辑删除/导入删除导入轮询/导出)
This commit is contained in:
@@ -1,12 +1,63 @@
|
||||
/** 去重汇总列表查询适配(任务 62):GET /api/admin/dedupe-total-data + 共享筛选归一。 */
|
||||
import { http } from '@/api/http'
|
||||
import { unwrap } from '@/api/envelope'
|
||||
import { normalizeAsinPageParams, toAsinPageQuery, type AsinListParams } from './asin-filter'
|
||||
import { parseDedupeTotalPage, type DedupeTotalPageResult } from './dedupe-total-model'
|
||||
|
||||
export const DEDUPE_TOTAL_ENDPOINT = '/api/admin/dedupe-total-data'
|
||||
/** 数据权限分组选项源(与店铺/去重共用同一分组集)。 */
|
||||
export const DEDUPE_GROUPS_ENDPOINT = '/api/admin/shop-manage-groups'
|
||||
|
||||
export async function fetchDedupeTotalList(params: Partial<AsinListParams> = {}): Promise<DedupeTotalPageResult> {
|
||||
const normalized = normalizeAsinPageParams(params)
|
||||
const { data } = await http.get<unknown>(DEDUPE_TOTAL_ENDPOINT, { params: toAsinPageQuery(normalized) })
|
||||
return parseDedupeTotalPage(data)
|
||||
}
|
||||
|
||||
export interface DedupeGroupOption {
|
||||
id: number
|
||||
name: string
|
||||
}
|
||||
|
||||
/** 编辑单行去重总数据(ASIN 值 + 分组):PUT /dedupe-total-data/{id}。 */
|
||||
export async function updateDedupeTotal(id: number, dataValue: string, groupId: number): Promise<void> {
|
||||
const { data } = await http.put<unknown>(`${DEDUPE_TOTAL_ENDPOINT}/${id}`, {
|
||||
data_value: dataValue,
|
||||
group_id: groupId,
|
||||
})
|
||||
unwrap<unknown>(data)
|
||||
}
|
||||
|
||||
/** 删除单行去重总数据:DELETE /dedupe-total-data/{id}。 */
|
||||
export async function deleteDedupeTotal(id: number): Promise<void> {
|
||||
const { data } = await http.delete<unknown>(`${DEDUPE_TOTAL_ENDPOINT}/${id}`)
|
||||
unwrap<unknown>(data)
|
||||
}
|
||||
|
||||
/** 加载数据权限分组选项:GET /shop-manage-groups → {id,name}[]。 */
|
||||
export async function fetchDedupeTotalGroups(): Promise<DedupeGroupOption[]> {
|
||||
const { data } = await http.get<unknown>(DEDUPE_GROUPS_ENDPOINT)
|
||||
return parseDedupeGroupOptionList(data)
|
||||
}
|
||||
|
||||
/** 归一化分组选项负载(信封 items 或裸数组),缺 id 行丢弃。 */
|
||||
export function parseDedupeGroupOptionList(payload: unknown): DedupeGroupOption[] {
|
||||
const core = unwrap<unknown>(payload)
|
||||
const rawList = Array.isArray(core)
|
||||
? core
|
||||
: core && typeof core === 'object'
|
||||
? (core as Record<string, unknown>).items
|
||||
: []
|
||||
if (!Array.isArray(rawList)) return []
|
||||
const options: DedupeGroupOption[] = []
|
||||
for (const raw of rawList) {
|
||||
if (!raw || typeof raw !== 'object') continue
|
||||
const record = raw as Record<string, unknown>
|
||||
const id = typeof record.id === 'number' ? Math.floor(record.id) : Number(record.group_id)
|
||||
if (!Number.isFinite(id) || id <= 0) continue
|
||||
const nameRaw = record.group_name ?? record.name
|
||||
const name = typeof nameRaw === 'string' ? nameRaw.trim() : ''
|
||||
options.push({ id, name: name || `分组${id}` })
|
||||
}
|
||||
return options
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user