import { createApiClient } from "../lib/apiClient"; import type { LabelMultipleOptionCreateInput, LabelMultipleOptionDto, LabelMultipleOptionGetListInput, LabelMultipleOptionUpdateInput, PagedResultDto, } from "../types/labelMultipleOption"; const api = createApiClient({ getToken: () => { try { return localStorage.getItem("access_token") ?? localStorage.getItem("token") ?? null; } catch { return null; } }, }); const PATH = "/label-multiple-option"; /** 接口存的是 JSON 字符串;列表/详情可能返回 string 或已反序列化的 array */ function parseOptionValuesJsonField(raw: unknown): string[] { if (raw == null) return []; if (Array.isArray(raw)) return raw.map((x) => String(x)); if (typeof raw === "string") { const t = raw.trim(); if (!t) return []; try { const p = JSON.parse(t) as unknown; if (Array.isArray(p)) return p.map((x) => String(x)); return []; } catch { return []; } } return []; } function normalizeLabelMultipleOptionDto(item: LabelMultipleOptionDto): LabelMultipleOptionDto { const raw = item as LabelMultipleOptionDto & { optionValuesJson?: unknown }; return { ...item, optionValuesJson: parseOptionValuesJsonField(raw.optionValuesJson), }; } function normalizePaged(res: PagedResultDto): PagedResultDto { return { totalCount: res.totalCount ?? 0, items: (res.items ?? []).map(normalizeLabelMultipleOptionDto), }; } /** 创建/更新 Body:`optionValuesJson` 须为 string[] 的 JSON 字符串 */ function optionValuesJsonToApiBody(values: string[]): string { return JSON.stringify(values); } export async function getLabelMultipleOptions(input: LabelMultipleOptionGetListInput, signal?: AbortSignal): Promise> { const res = await api.requestJson>({ path: PATH, method: "GET", query: { SkipCount: input.skipCount, MaxResultCount: input.maxResultCount, Sorting: input.sorting, Keyword: input.keyword, State: input.state, }, signal, }); return normalizePaged(res); } export async function getLabelMultipleOption(id: string, signal?: AbortSignal): Promise { const d = await api.requestJson({ path: `${PATH}/${encodeURIComponent(id)}`, method: "GET", signal, }); return normalizeLabelMultipleOptionDto(d); } export async function createLabelMultipleOption(input: LabelMultipleOptionCreateInput): Promise { const d = await api.requestJson({ path: PATH, method: "POST", body: { optionCode: input.optionCode, optionName: input.optionName, optionValuesJson: optionValuesJsonToApiBody(input.optionValuesJson), state: input.state ?? true, orderNum: input.orderNum, }, }); return normalizeLabelMultipleOptionDto(d); } export async function updateLabelMultipleOption(id: string, input: LabelMultipleOptionUpdateInput): Promise { const d = await api.requestJson({ path: `${PATH}/${encodeURIComponent(id)}`, method: "PUT", body: { optionCode: input.optionCode, optionName: input.optionName, optionValuesJson: optionValuesJsonToApiBody(input.optionValuesJson), state: input.state ?? true, orderNum: input.orderNum, }, }); return normalizeLabelMultipleOptionDto(d); } export async function deleteLabelMultipleOption(id: string): Promise { await api.requestJson({ path: `${PATH}/${encodeURIComponent(id)}`, method: "DELETE", }); }