import { unwrapApiPayload, usAppApiRequest } from '../utils/usAppApiRequest' import { fetchWithOfflineCache } from '../utils/sqliteSync' function parseOptionValuesJson(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)) } catch { return [] } } return [] } export type LabelMultipleOptionDetail = { id: string optionName: string optionCode: string optionValuesJson: string[] } /** * GET /api/app/label-multiple-option/{id}(与 Web 管理端一致) */ export async function fetchLabelMultipleOptionById(id: string): Promise { const tid = String(id ?? '').trim() if (!tid) return null return fetchWithOfflineCache('labeling', `multiple-option:${tid}`, async () => { const raw = await usAppApiRequest({ path: `/api/app/label-multiple-option/${encodeURIComponent(tid)}`, method: 'GET', auth: true, }) const d = unwrapApiPayload(raw) as Record if (!d || typeof d !== 'object') return null const oid = String(d.id ?? d.Id ?? tid) const optionValuesJson = parseOptionValuesJson(d.optionValuesJson ?? d.OptionValuesJson) return { id: oid, optionName: String(d.optionName ?? d.OptionName ?? '').trim() || oid, optionCode: String(d.optionCode ?? d.OptionCode ?? '').trim(), optionValuesJson, } }) }