labelMultipleOption.ts 1.41 KB
import { unwrapApiPayload, usAppApiRequest } from '../utils/usAppApiRequest'

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<LabelMultipleOptionDetail | null> {
  const tid = String(id ?? '').trim()
  if (!tid) return null
  const raw = await usAppApiRequest<unknown>({
    path: `/api/app/label-multiple-option/${encodeURIComponent(tid)}`,
    method: 'GET',
    auth: true,
  })
  const d = unwrapApiPayload(raw) as Record<string, unknown>
  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,
  }
}