fix: remove duplicate routes from (marketing) group
This commit is contained in:
@@ -1,109 +0,0 @@
|
|||||||
import { notFound } from 'next/navigation';
|
|
||||||
import { COMPANY_INFO, NEWS } from '@/lib/constants';
|
|
||||||
import { Badge } from '@/components/ui/badge';
|
|
||||||
import { Card, CardContent } from '@/components/ui/card';
|
|
||||||
import { Calendar, ArrowLeft } from 'lucide-react';
|
|
||||||
import Link from 'next/link';
|
|
||||||
import { Button } from '@/components/ui/button';
|
|
||||||
|
|
||||||
interface NewsDetailPageProps {
|
|
||||||
params: Promise<{
|
|
||||||
slug: string;
|
|
||||||
}>;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 定义新闻项类型
|
|
||||||
type NewsItem = {
|
|
||||||
id: string;
|
|
||||||
title: string;
|
|
||||||
excerpt: string;
|
|
||||||
date: string;
|
|
||||||
category: string;
|
|
||||||
image: string;
|
|
||||||
content?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export function generateStaticParams() {
|
|
||||||
return NEWS.map((news) => ({
|
|
||||||
slug: news.id,
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function generateMetadata({ params }: NewsDetailPageProps) {
|
|
||||||
const { slug } = await params;
|
|
||||||
const news = (NEWS as unknown as NewsItem[]).find((n) => n.id === slug);
|
|
||||||
|
|
||||||
if (!news) {
|
|
||||||
return {
|
|
||||||
title: `新闻未找到 - ${COMPANY_INFO.name}`,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
title: `${news.title} - ${COMPANY_INFO.name}`,
|
|
||||||
description: news.excerpt,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export default async function NewsDetailPage({ params }: NewsDetailPageProps) {
|
|
||||||
const { slug } = await params;
|
|
||||||
const news = (NEWS as unknown as NewsItem[]).find((n) => n.id === slug);
|
|
||||||
|
|
||||||
if (!news) {
|
|
||||||
notFound();
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="pt-32 pb-20">
|
|
||||||
<div className="container-custom">
|
|
||||||
<div className="max-w-4xl mx-auto">
|
|
||||||
<Button variant="ghost" asChild className="mb-8">
|
|
||||||
<Link href="/news">
|
|
||||||
<ArrowLeft className="mr-2 w-4 h-4" />
|
|
||||||
返回新闻列表
|
|
||||||
</Link>
|
|
||||||
</Button>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<div className="flex items-center gap-3 mb-6">
|
|
||||||
<Badge>{news.category}</Badge>
|
|
||||||
<span className="text-sm text-gray-500 flex items-center gap-1">
|
|
||||||
<Calendar className="w-4 h-4" />
|
|
||||||
{news.date}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h1 className="text-3xl sm:text-4xl font-bold text-black mb-8">
|
|
||||||
{news.title}
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardContent className="p-8">
|
|
||||||
<div className="prose prose-lg max-w-none">
|
|
||||||
{news.content ? (
|
|
||||||
news.content.split('\n\n').map((paragraph, idx) => (
|
|
||||||
<p key={idx} className="text-gray-600 leading-relaxed mb-6">
|
|
||||||
{paragraph}
|
|
||||||
</p>
|
|
||||||
))
|
|
||||||
) : (
|
|
||||||
<>
|
|
||||||
<p className="text-gray-600 leading-relaxed">
|
|
||||||
{news.excerpt}
|
|
||||||
</p>
|
|
||||||
<p className="text-gray-600 leading-relaxed mt-6">
|
|
||||||
四川睿新致远科技有限公司始终致力于为客户提供最优质的技术服务和解决方案,
|
|
||||||
不断创新,追求卓越。我们相信,通过技术的力量,可以帮助更多企业实现数字化转型,
|
|
||||||
提升竞争力。
|
|
||||||
</p>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
import Link from 'next/link';
|
|
||||||
import { COMPANY_INFO, NEWS } from '@/lib/constants';
|
|
||||||
import { Badge } from '@/components/ui/badge';
|
|
||||||
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card';
|
|
||||||
import { ArrowRight, Calendar } from 'lucide-react';
|
|
||||||
|
|
||||||
export const metadata = {
|
|
||||||
title: `新闻动态 - ${COMPANY_INFO.name}`,
|
|
||||||
description: `了解${COMPANY_INFO.name}的最新动态和行业资讯`,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default function NewsPage() {
|
|
||||||
return (
|
|
||||||
<div className="pt-32 pb-20">
|
|
||||||
<div className="container-custom">
|
|
||||||
<div className="text-center max-w-3xl mx-auto mb-16">
|
|
||||||
<Badge variant="outline" className="mb-4">
|
|
||||||
新闻动态
|
|
||||||
</Badge>
|
|
||||||
<h1 className="text-4xl sm:text-5xl font-bold text-black mb-6">
|
|
||||||
最新资讯
|
|
||||||
</h1>
|
|
||||||
<p className="text-lg text-gray-600">
|
|
||||||
了解公司最新动态、行业资讯和技术分享
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-8 max-w-5xl mx-auto">
|
|
||||||
{NEWS.map((news) => (
|
|
||||||
<Card key={news.id} className="h-full flex flex-col">
|
|
||||||
<CardHeader>
|
|
||||||
<div className="flex items-center gap-2 mb-3">
|
|
||||||
<Badge variant="secondary">{news.category}</Badge>
|
|
||||||
<span className="text-sm text-gray-500 flex items-center gap-1">
|
|
||||||
<Calendar className="w-3 h-3" />
|
|
||||||
{news.date}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<CardTitle className="text-xl leading-tight">{news.title}</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="flex-1 flex flex-col">
|
|
||||||
<CardDescription className="text-base leading-relaxed mb-6 flex-1">
|
|
||||||
{news.excerpt}
|
|
||||||
</CardDescription>
|
|
||||||
<Link
|
|
||||||
href={`/news/${news.id}`}
|
|
||||||
className="inline-flex items-center text-sm font-medium text-black hover:underline"
|
|
||||||
>
|
|
||||||
阅读更多
|
|
||||||
<ArrowRight className="ml-1 w-4 h-4" />
|
|
||||||
</Link>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,110 +0,0 @@
|
|||||||
import { COMPANY_INFO, PRODUCTS } from '@/lib/constants';
|
|
||||||
import { Badge } from '@/components/ui/badge';
|
|
||||||
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card';
|
|
||||||
import { Button } from '@/components/ui/button';
|
|
||||||
import { ArrowRight, Check, TrendingUp } from 'lucide-react';
|
|
||||||
|
|
||||||
export const metadata = {
|
|
||||||
title: `产品服务 - ${COMPANY_INFO.name}`,
|
|
||||||
description: `了解${COMPANY_INFO.name}的产品和服务解决方案,包括ERP、客户关系管理、内容管理系统、商业智能平台`,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default function ProductsPage() {
|
|
||||||
return (
|
|
||||||
<div className="pt-32 pb-20">
|
|
||||||
<div className="container-custom">
|
|
||||||
<div className="text-center max-w-3xl mx-auto mb-16">
|
|
||||||
<Badge variant="outline" className="mb-4">
|
|
||||||
产品服务
|
|
||||||
</Badge>
|
|
||||||
<h1 className="text-4xl sm:text-5xl font-bold text-black mb-6">
|
|
||||||
我们的产品
|
|
||||||
</h1>
|
|
||||||
<p className="text-lg text-gray-600">
|
|
||||||
自主研发的企业级产品,助力企业高效运营,实现数字化转型
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
|
||||||
{PRODUCTS.map((product) => (
|
|
||||||
<Card key={product.id} className="h-full flex flex-col group hover:shadow-lg transition-shadow">
|
|
||||||
<CardHeader>
|
|
||||||
<Badge variant="secondary" className="w-fit mb-3">
|
|
||||||
{product.category}
|
|
||||||
</Badge>
|
|
||||||
<CardTitle className="text-xl">{product.title}</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="flex-1 flex flex-col">
|
|
||||||
<CardDescription className="text-base leading-relaxed mb-4 flex-1">
|
|
||||||
{product.description}
|
|
||||||
</CardDescription>
|
|
||||||
|
|
||||||
{/* 核心功能 */}
|
|
||||||
<div className="mb-4">
|
|
||||||
<p className="text-sm font-medium text-black mb-2">核心功能</p>
|
|
||||||
<div className="flex flex-wrap gap-1.5">
|
|
||||||
{product.features.slice(0, 4).map((feature, idx) => (
|
|
||||||
<span
|
|
||||||
key={idx}
|
|
||||||
className="inline-flex items-center text-xs px-2 py-1 bg-gray-100 text-gray-700 rounded"
|
|
||||||
>
|
|
||||||
<Check className="w-3 h-3 mr-1 text-green-600" />
|
|
||||||
{feature}
|
|
||||||
</span>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* 核心价值 */}
|
|
||||||
<div className="mb-4">
|
|
||||||
<p className="text-sm font-medium text-black mb-2 flex items-center">
|
|
||||||
<TrendingUp className="w-4 h-4 mr-1 text-blue-600" />
|
|
||||||
核心价值
|
|
||||||
</p>
|
|
||||||
<ul className="space-y-1">
|
|
||||||
{product.benefits.map((benefit, idx) => (
|
|
||||||
<li key={idx} className="text-xs text-gray-600 flex items-start">
|
|
||||||
<span className="text-blue-600 mr-1.5">•</span>
|
|
||||||
{benefit}
|
|
||||||
</li>
|
|
||||||
))}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<Button variant="outline" className="w-full mt-auto group-hover:bg-black group-hover:text-white transition-colors">
|
|
||||||
了解详情
|
|
||||||
<ArrowRight className="ml-2 w-4 h-4" />
|
|
||||||
</Button>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* 底部CTA */}
|
|
||||||
<div className="mt-20 text-center">
|
|
||||||
<div className="bg-gradient-to-r from-gray-50 to-gray-100 rounded-2xl p-12">
|
|
||||||
<h2 className="text-2xl sm:text-3xl font-bold text-black mb-4">
|
|
||||||
需要定制化解决方案?
|
|
||||||
</h2>
|
|
||||||
<p className="text-gray-600 mb-8 max-w-2xl mx-auto">
|
|
||||||
我们的专业团队可以根据您的业务需求,提供量身定制的产品开发和系统集成服务
|
|
||||||
</p>
|
|
||||||
<Button
|
|
||||||
size="lg"
|
|
||||||
className="bg-black text-white hover:bg-gray-800"
|
|
||||||
onClick={() => {
|
|
||||||
const element = document.getElementById('contact');
|
|
||||||
if (element) {
|
|
||||||
element.scrollIntoView({ behavior: 'smooth' });
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
联系我们
|
|
||||||
<ArrowRight className="ml-2 w-4 h-4" />
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
import { COMPANY_INFO, SERVICES } from '@/lib/constants';
|
|
||||||
import { Badge } from '@/components/ui/badge';
|
|
||||||
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card';
|
|
||||||
import { Code, Cloud, BarChart3, Shield } from 'lucide-react';
|
|
||||||
|
|
||||||
const iconMap: Record<string, React.ComponentType<{ className?: string }>> = {
|
|
||||||
Code,
|
|
||||||
Cloud,
|
|
||||||
BarChart3,
|
|
||||||
Shield,
|
|
||||||
};
|
|
||||||
|
|
||||||
export const metadata = {
|
|
||||||
title: `核心业务 - ${COMPANY_INFO.name}`,
|
|
||||||
description: `了解${COMPANY_INFO.name}的核心业务领域和专业服务`,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default function ServicesPage() {
|
|
||||||
return (
|
|
||||||
<div className="pt-32 pb-20">
|
|
||||||
<div className="container-custom">
|
|
||||||
<div className="text-center max-w-3xl mx-auto mb-16">
|
|
||||||
<Badge variant="outline" className="mb-4">
|
|
||||||
核心业务
|
|
||||||
</Badge>
|
|
||||||
<h1 className="text-4xl sm:text-5xl font-bold text-black mb-6">
|
|
||||||
我们的服务
|
|
||||||
</h1>
|
|
||||||
<p className="text-lg text-gray-600">
|
|
||||||
提供全方位的技术解决方案,助力企业数字化转型
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-8 max-w-5xl mx-auto">
|
|
||||||
{SERVICES.map((service) => {
|
|
||||||
const Icon = iconMap[service.icon];
|
|
||||||
return (
|
|
||||||
<Card key={service.id} className="h-full">
|
|
||||||
<CardHeader>
|
|
||||||
<div className="w-14 h-14 bg-black rounded-xl flex items-center justify-center mb-4">
|
|
||||||
{Icon && <Icon className="w-7 h-7 text-white" />}
|
|
||||||
</div>
|
|
||||||
<CardTitle className="text-2xl">{service.title}</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent>
|
|
||||||
<CardDescription className="text-base leading-relaxed">
|
|
||||||
{service.description}
|
|
||||||
</CardDescription>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user