first
This commit is contained in:
157
admin-web/src/pages/content/shared.ts
Normal file
157
admin-web/src/pages/content/shared.ts
Normal file
@@ -0,0 +1,157 @@
|
||||
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>): AdminContentHomeConfig {
|
||||
const banners = config?.banners?.length ? config.banners : [{ title: "", subtitle: "", description: "", background_image_url: "" }];
|
||||
const pageVisuals: Partial<AdminContentHomeConfig["page_visuals"]> = 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<AdminContentPolicyItem>[]) {
|
||||
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>): AdminContentPolicyConfig {
|
||||
return {
|
||||
legal_entries: normalizePolicyItems(config?.legal_entries),
|
||||
appraisal_agreements: normalizePolicyItems(config?.appraisal_agreements),
|
||||
};
|
||||
}
|
||||
|
||||
export function normalizeMetaConfig(config?: Partial<AdminContentMetaConfig>): 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);
|
||||
}
|
||||
Reference in New Issue
Block a user