| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { apiPost } from "@/lib/api";
- export type FaqItem = {
- id: string;
- question: string;
- answer: string;
- };
- function pickString(record: Record<string, unknown>, keys: string[]): string {
- for (const key of keys) {
- const value = record[key];
- if (typeof value === "string" && value.trim()) return value.trim();
- }
- return "";
- }
- function pickList(raw: unknown): unknown[] {
- if (!raw || typeof raw !== "object") return [];
- const o = raw as Record<string, unknown>;
- const inner = o.data ?? o.list ?? o.rows ?? o.records;
- if (Array.isArray(inner)) return inner;
- if (inner && typeof inner === "object") {
- const x = inner as Record<string, unknown>;
- if (Array.isArray(x.list)) return x.list;
- if (Array.isArray(x.records)) return x.records;
- if (Array.isArray(x.rows)) return x.rows;
- }
- return [];
- }
- function normalizeFaqRow(row: unknown, index: number): FaqItem | null {
- if (!row || typeof row !== "object") return null;
- const r = row as Record<string, unknown>;
- const question = pickString(r, [
- "title",
- "question",
- "questionTitle",
- "name",
- "q",
- "subject",
- ]);
- const answer = pickString(r, [
- "content",
- "answer",
- "reply",
- "description",
- "a",
- "questionContent",
- "detail",
- "remark",
- ]);
- if (!question && !answer) return null;
- const id = String(r.id ?? r.questionId ?? index).trim() || String(index);
- return {
- id,
- question: question || answer.slice(0, 80) || "—",
- answer: answer || "—",
- };
- }
- export async function fetchCommonQuestions(
- page: { current: number; row: number } = { current: 1, row: 100 },
- ): Promise<{ items: FaqItem[]; failed: boolean }> {
- const current = Number.isFinite(page.current) ? Math.max(1, page.current) : 1;
- const row = Number.isFinite(page.row) ? Math.max(1, Math.min(200, page.row)) : 100;
- try {
- const payload = await apiPost<unknown, { page: { current: number; row: number } }>(
- "/common/question/search/list",
- { page: { current, row } },
- );
- const list = pickList(payload);
- const items: FaqItem[] = [];
- list.forEach((item, i) => {
- const n = normalizeFaqRow(item, i);
- if (n) items.push(n);
- });
- return { items, failed: false };
- } catch {
- return { items: [], failed: true };
- }
- }
|