import type { ContentZone, ContentItem } from './types'; import { STATS } from '@/lib/constants/stats'; import { SERVICES } from '@/lib/constants/services'; import { getFeaturedCases } from '@/lib/constants/cases'; import { NEWS } from '@/lib/constants/news'; import { SOLUTIONS } from '@/lib/constants/solutions'; function createBaseItem(id: string, modelCode: string, title: string, slug: string, index: number): Omit { return { id, modelId: modelCode, modelCode, title, slug, status: 'published', version: 1, sortOrder: index, createdAt: '2024-01-01T00:00:00Z', updatedAt: '2024-01-01T00:00:00Z', publishedAt: '2024-01-01T00:00:00Z', createdBy: 'system', updatedBy: 'system', }; } function statToContentItem(stat: Record, index: number): ContentItem { return { ...createBaseItem(`stat-${index}`, 'stat-item', String(stat.label || ''), `stat-${index}`, index), data: { icon: stat.icon, label: stat.label, value: stat.value, suffix: stat.suffix, prefix: stat.prefix || '', decimals: stat.decimals || 0, description: stat.description || '', trendValue: stat.trend || '', trendDirection: typeof stat.trend === 'string' && stat.trend.startsWith('+') ? 'up' : 'down', accentColor: stat.color || 'brand', }, }; } function serviceToContentItem(service: { id: string; title: string; description: string; icon?: string; overview?: string; features?: unknown[]; benefits?: unknown[] }, index: number): ContentItem { return { ...createBaseItem(service.id, 'service', service.title, service.id, index), data: { description: service.description, icon: service.icon, overview: service.overview, features: service.features || [], benefits: service.benefits || [], }, }; } function caseStudyToContentItem(cs: { id: string; title: string; slug: string; client?: string; industry?: string; subtitle?: string; challenge?: string; result?: string; metrics?: unknown[]; color?: string; featured?: boolean }, index: number): ContentItem { return { ...createBaseItem(cs.id, 'case-study', cs.title, cs.slug, index), data: { client: cs.client, industry: cs.industry, subtitle: cs.subtitle, challenge: cs.challenge, result: cs.result, metrics: cs.metrics || [], color: cs.color, featured: cs.featured, }, }; } function newsToContentItem(news: { id: string; title: string; excerpt?: string; date?: string; category?: string; image?: string; content?: string }, index: number): ContentItem { return { ...createBaseItem(news.id, 'news', news.title, news.id, index), data: { excerpt: news.excerpt, date: news.date, category: news.category, image: news.image, content: news.content, }, }; } function solutionToContentItem(solution: { id: string; title: string; description: string; icon?: string; industry?: string; overview?: string }, index: number): ContentItem { return { ...createBaseItem(solution.id, 'solution', solution.title, solution.id, index), data: { description: solution.description, icon: solution.icon, industry: solution.industry || '', overview: solution.overview || '', }, }; } export function getMockHomeHeroBanner(): ContentItem { return { ...createBaseItem('hero-home-main', 'hero-banner', '企业数字化转型的可靠伙伴', 'hero-home-main', 0), data: { heading: '企业数字化转型的可靠伙伴', subheading: '深耕企业数字化 10+ 年', description: '从战略规划到落地实施,为成长型企业提供端到端的数字化解决方案。以务实的态度、专业的能力、长期的陪伴,帮助企业实现可持续增长。', primaryCtaText: '了解解决方案', primaryCtaLink: '/solutions', secondaryCtaText: '联系我们', secondaryCtaLink: '/contact', theme: 'brand', }, }; } export function getMockHomeStatsZone(): ContentZone { const statList = Array.isArray(STATS) ? STATS : (STATS as { stats?: unknown[] }).stats || []; const items = statList.slice(0, 4).map((s, i) => statToContentItem(s as Record, i)); return { id: 'zone-home-stats', code: 'home-stats', name: '首页数据指标区', zoneKey: 'home-stats', pageCode: 'home', allowedModels: ['stat-item'], items: items.map((item, i) => ({ item, itemId: item.id, sortOrder: i, variant: 'default', })), settings: { layout: 'grid', columns: 4, gap: 'large', }, }; } export function getMockHomeServicesZone(): ContentZone { const items = SERVICES.slice(0, 4).map((s, i) => serviceToContentItem(s, i)); return { id: 'zone-home-services', code: 'home-services', name: '首页服务区', zoneKey: 'home-services', pageCode: 'home', allowedModels: ['service'], items: items.map((item, i) => ({ item, itemId: item.id, sortOrder: i, variant: 'default', })), settings: { layout: 'grid', columns: 4, gap: 'large', }, }; } export function getMockHomeCasesZone(): ContentZone { const items = getFeaturedCases().slice(0, 3).map((cs, i) => caseStudyToContentItem(cs, i)); return { id: 'zone-home-cases', code: 'home-cases', name: '首页案例区', zoneKey: 'home-cases', pageCode: 'home', allowedModels: ['case-study'], items: items.map((item, i) => ({ item, itemId: item.id, sortOrder: i, variant: 'default', })), settings: { layout: 'grid', columns: 3, gap: 'large', }, }; } export function getMockHomeNewsZone(): ContentZone { const items = NEWS.slice(0, 3).map((n, i) => newsToContentItem(n, i)); return { id: 'zone-home-news', code: 'home-news', name: '首页新闻区', zoneKey: 'home-news', pageCode: 'home', allowedModels: ['news'], items: items.map((item, i) => ({ item, itemId: item.id, sortOrder: i, variant: 'default', })), settings: { layout: 'grid', columns: 3, gap: 'large', }, }; } export function getMockHomeSolutionsZone(): ContentZone { const items = SOLUTIONS.slice(0, 4).map((s, i) => solutionToContentItem(s, i)); return { id: 'zone-home-solutions', code: 'home-solutions', name: '首页方案区', zoneKey: 'home-solutions', pageCode: 'home', allowedModels: ['solution'], items: items.map((item, i) => ({ item, itemId: item.id, sortOrder: i, variant: 'default', })), settings: { layout: 'grid', columns: 4, gap: 'large', }, }; } export function getMockContentZone(zoneKey: string, _page = 'home'): ContentZone | null { const zones: Record = { 'home-stats': getMockHomeStatsZone(), 'home-services': getMockHomeServicesZone(), 'home-cases': getMockHomeCasesZone(), 'home-news': getMockHomeNewsZone(), 'home-solutions': getMockHomeSolutionsZone(), }; return zones[zoneKey] || null; }