Compare commits
No commits in common. "3b6d64df923631a9a959be3cb1166f5be2f03d3f" and "e31bbdf78e55e00065ed3d89dc758d27a80210ad" have entirely different histories.
3b6d64df92
...
e31bbdf78e
|
|
@ -2,22 +2,21 @@ import React from 'react';
|
||||||
import { mockNewsData } from './NewsData'; // 导入新闻数据
|
import { mockNewsData } from './NewsData'; // 导入新闻数据
|
||||||
|
|
||||||
interface NewsProps {
|
interface NewsProps {
|
||||||
title?: string;
|
title?: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
time?: string;
|
time?: string;
|
||||||
type?: string;
|
type?: string;
|
||||||
url?: string;
|
url?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const NewsItem: React.FC<NewsProps> = ({ title = '', time = '', url = '' }) => {
|
const NewsItem: React.FC<NewsProps> = ({ title = '', time = '', url = '' }) => {
|
||||||
return (
|
return (
|
||||||
<div className="mb-4">
|
<div>
|
||||||
<div
|
<div onClick={() => url && window.open(url)}
|
||||||
onClick={() => url && window.open(url)}
|
className="flex items-center justify-between hover:text-blue-500
|
||||||
className="flex items-center justify-between hover:text-blue-600 cursor-pointer transition duration-300 ease-in-out"
|
cursor-pointer w-96">
|
||||||
>
|
<h3 >{title}</h3>
|
||||||
<h3 className="text-lg font-semibold text-gray-800">{title}</h3>
|
<p >{time}</p>
|
||||||
<p className="text-sm text-gray-500">{time}</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
@ -26,40 +25,16 @@ const NewsItem: React.FC<NewsProps> = ({ title = '', time = '', url = '' }) => {
|
||||||
// 使用新闻数据渲染列表
|
// 使用新闻数据渲染列表
|
||||||
const NewsList: React.FC = () => {
|
const NewsList: React.FC = () => {
|
||||||
return (
|
return (
|
||||||
<div className="bg-gray-100 p-6 rounded-lg shadow-md">
|
<div>
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
|
<ul className="flex flex-col justify-center items-center h-screen">
|
||||||
{/* 科技新闻 */}
|
{mockNewsData.map((news) => (
|
||||||
<div className="bg-white p-6 rounded-lg shadow-sm">
|
<NewsItem title={news.title} time={news.time} url={news.url} />
|
||||||
<div className="flex items-center justify-between mb-4">
|
))}
|
||||||
<p className="text-xl font-bold text-gray-900">科技新闻</p>
|
</ul>
|
||||||
<button className="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-md transition duration-300 ease-in-out">
|
|
||||||
更多科技新闻
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<ul className="space-y-4">
|
|
||||||
{mockNewsData.map((news, index) => (
|
|
||||||
<NewsItem key={index} title={news.title} time={news.time} url={news.url} />
|
|
||||||
))}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* 社会新闻 */}
|
|
||||||
<div className="bg-white p-6 rounded-lg shadow-sm">
|
|
||||||
<div className="flex items-center justify-between mb-4">
|
|
||||||
<p className="text-xl font-bold text-gray-900">社会新闻</p>
|
|
||||||
<button className="bg-green-500 hover:bg-green-600 text-white px-4 py-2 rounded-md transition duration-300 ease-in-out">
|
|
||||||
更多社会新闻
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<ul className="space-y-4">
|
|
||||||
{mockNewsData.map((news, index) => (
|
|
||||||
<NewsItem key={index} title={news.title} time={news.time} url={news.url} />
|
|
||||||
))}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export default NewsList;
|
export default NewsList;
|
||||||
|
|
@ -31,7 +31,7 @@ export function CarouselDemo() {
|
||||||
}, [api]);
|
}, [api]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="relative w-full max-w-xs">
|
<div className="relative w-full max-w-4xl mx-auto">
|
||||||
<Carousel
|
<Carousel
|
||||||
opts={{
|
opts={{
|
||||||
loop: true,
|
loop: true,
|
||||||
|
|
@ -43,15 +43,24 @@ export function CarouselDemo() {
|
||||||
}),
|
}),
|
||||||
]}
|
]}
|
||||||
setApi={setApi}
|
setApi={setApi}
|
||||||
className="w-full"
|
|
||||||
>
|
>
|
||||||
<CarouselContent>
|
<CarouselContent className="h-full w-full">
|
||||||
{Array.from({ length: totalSlides }).map((_, index) => (
|
{Array.from({ length: totalSlides }).map((_, index) => (
|
||||||
<CarouselItem key={index}>
|
<CarouselItem key={index} className="w-full h-full">
|
||||||
<div className="p-1">
|
<div className="p-1">
|
||||||
<Card>
|
<Card>
|
||||||
<CardContent className="flex aspect-square items-center justify-center p-6">
|
<CardContent className="flex aspect-square items-center justify-center ">
|
||||||
<span className="text-4xl font-semibold">{index + 1}</span>
|
<div
|
||||||
|
className="w-full h-full relative"
|
||||||
|
style={{
|
||||||
|
backgroundImage: "url('/app/images/header.png')",
|
||||||
|
backgroundSize: '100% 100%',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div className="absolute top-1 right-1 h-full bg-black">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
import { CarouselDemo } from "@/components/untils/Carousel";
|
import { CarouselDemo } from "@/components/untils/Carousel";
|
||||||
import type { Route } from "./+types/news";
|
import type { Route } from "./+types/news";
|
||||||
import {Header} from "@/components/header/Header";
|
import { Header } from "@/components/header/Header";
|
||||||
import {TopNav} from "@/components/header/TopNav";
|
import { TopNav } from "@/components/header/TopNav";
|
||||||
import NewsList from "@/components/list/NewsList";
|
import NewsList from "@/components/list/NewsList";
|
||||||
|
|
||||||
|
|
||||||
export function meta( ) {
|
export function meta( ) {
|
||||||
return [
|
return [
|
||||||
{ title: "New React Router App" },
|
{ title: "New React Router App" },
|
||||||
|
|
@ -16,7 +18,7 @@ export default function Home() {
|
||||||
<Header />
|
<Header />
|
||||||
<TopNav />
|
<TopNav />
|
||||||
<CarouselDemo />
|
<CarouselDemo />
|
||||||
<NewsList />
|
<NewsList/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue