import type { AdminContentHomeConfig, AdminContentMetaConfig, AdminContentPolicyConfig, AdminContentPolicyItem, AdminHelpArticleItem, AdminHelpArticlePayload } from "../../api/admin"; export type HomeSectionKey = "service_entries" | "quick_entries" | "trust_metrics" | "trust_points" | "faqs"; export type PolicySectionKey = "legal_entries" | "appraisal_agreements"; export type MetaSectionKey = "help_categories" | "report_risk_defaults" | "ticket_types" | "ticket_statuses" | "message_events"; export type ContentTabKey = "home" | "policy" | "meta" | "articles"; export type ArticleFormState = { id?: number; category: AdminHelpArticlePayload["category"]; title: string; summary: string; keywordsText: string; contentBlocksText: string; is_recommended: boolean; is_enabled: boolean; sort_order: number; }; export const contentTabs: Array<{ key: ContentTabKey; label: string; desc: string; routeName: string }> = [ { key: "home", label: "首页与主页面", desc: "Banner、主页面背景、服务入口和信任信息。", routeName: "content-home" }, { key: "policy", label: "协议与说明", desc: "设置页说明入口和下单确认协议。", routeName: "content-policy" }, { key: "meta", label: "分类与文案", desc: "帮助分类、消息事件、工单文案和风险提示。", routeName: "content-meta" }, { key: "articles", label: "帮助文章", desc: "帮助中心文章正文、推荐状态和排序。", routeName: "content-articles" }, ]; export const serviceProviderOptions = [ { label: "实物鉴定", value: "anxinyan" }, { label: "中检鉴定", value: "zhongjian" }, ]; export const quickCodeOptions = [ { label: "发起鉴定", value: "start" }, { label: "我的订单", value: "orders" }, { label: "我的报告", value: "reports" }, { label: "消息中心", value: "messages" }, ]; export const articleCategoryOptions = [ { label: "服务流程", value: "service" }, { label: "报告验真", value: "report" }, { label: "寄送物流", value: "shipping" }, { label: "售后支持", value: "support" }, ]; export function createHomeConfig(): AdminContentHomeConfig { return { banners: [{ title: "", subtitle: "", description: "", background_image_url: "" }], page_visuals: { order_background_image_url: "", report_background_image_url: "", }, service_entries: [], category_visuals: [], quick_entries: [], trust_metrics: [], trust_points: [], faqs: [], }; } export function normalizeHomeConfig(config?: Partial): AdminContentHomeConfig { const banners = config?.banners?.length ? config.banners : [{ title: "", subtitle: "", description: "", background_image_url: "" }]; const pageVisuals: Partial = config?.page_visuals || {}; return { banners: banners.map((item) => ({ title: item.title || "", subtitle: item.subtitle || "", description: item.description || "", background_image_url: item.background_image_url || "", })), page_visuals: { order_background_image_url: pageVisuals.order_background_image_url || "", report_background_image_url: pageVisuals.report_background_image_url || "", }, service_entries: config?.service_entries || [], category_visuals: (config?.category_visuals || []).map((item) => ({ category_name: item.category_name || "", category_code: item.category_code || "", image_url: item.image_url || "", })), quick_entries: config?.quick_entries || [], trust_metrics: config?.trust_metrics || [], trust_points: config?.trust_points || [], faqs: config?.faqs || [], }; } export function createPolicyItem(): AdminContentPolicyItem { return { code: "", title: "", desc: "", target_url: "", article_id: 0, }; } export function parseHelpArticleId(targetUrl?: string) { if (!targetUrl) { return 0; } const matched = targetUrl.match(/\/pages\/help\/detail\?id=(\d+)/); return matched ? Number(matched[1] || 0) : 0; } export function normalizePolicyItems(items?: Partial[]) { return (items || []).map((item) => ({ code: item.code || "", title: item.title || "", desc: item.desc || "", target_url: item.target_url || "", article_id: Number(item.article_id || parseHelpArticleId(item.target_url) || 0), })); } export function normalizePolicyConfig(config?: Partial): AdminContentPolicyConfig { return { legal_entries: normalizePolicyItems(config?.legal_entries), appraisal_agreements: normalizePolicyItems(config?.appraisal_agreements), }; } export function normalizeMetaConfig(config?: Partial): AdminContentMetaConfig { return { help_categories: config?.help_categories || [], report_risk_defaults: config?.report_risk_defaults || [], ticket_types: config?.ticket_types || [], ticket_statuses: config?.ticket_statuses || [], message_events: config?.message_events || [], message_page_copy: config?.message_page_copy || { title: "", desc: "", }, }; } export function resetArticleForm(target: ArticleFormState, row?: AdminHelpArticleItem) { target.id = row?.id; target.category = row?.category || "service"; target.title = row?.title || ""; target.summary = row?.summary || ""; target.keywordsText = row?.keywords?.join("\n") || ""; target.contentBlocksText = row?.content_blocks?.join("\n") || ""; target.is_recommended = row?.is_recommended || false; target.is_enabled = row ? row.is_enabled : true; target.sort_order = row?.sort_order || 0; } export function parseLines(value: string) { return value .split("\n") .map((item) => item.trim()) .filter(Boolean); }