This commit is contained in:
Li1304553726 2025-02-24 21:47:34 +08:00
parent e1cc05fec1
commit 026ed9d759
2 changed files with 176 additions and 121 deletions

View File

@ -56,11 +56,11 @@ interface Course {
progress: number;
thumbnail: string;
}
interface CoursesSectionProps {
title: string;
description: string;
courses: Course[];
isLoading:boolean
initialVisibleCoursesCount?: number;
}
@ -68,6 +68,7 @@ const CoursesSection: React.FC<CoursesSectionProps> = ({
title,
description,
courses,
isLoading,
initialVisibleCoursesCount = 8,
}) => {
const navigate = useNavigate();
@ -76,15 +77,31 @@ const CoursesSection: React.FC<CoursesSectionProps> = ({
const gateGory: GetTaxonomyProps = useGetTaxonomy({
type: TaxonomySlug.CATEGORY,
})
const { data } = api.post.findMany.useQuery({
take: 8,
}
)
useEffect(() => {
console.log(data,'成功')
}, [data])
// const { data } = api.post.findMany.useQuery({
// where: {}, // 必选参数
// include: { // 关联查询
// instructors: true
// },
// orderBy: { // 排序规则
// createdAt: 'desc'
// },
// take: 8
// })
// useEffect(() => {
// // 添加空值保护
// if (data && data.length > 0) {
// console.log('有效数据:', data)
// // 执行后续操作
// } else {
// console.log('无数据或加载中')
// }
// }, [data])
// const formatted = data?.map(course => ({
// id: course.id,
// title: course.title
// }));
const handleClick = (course: Course) => {
navigate(`/courses?courseId=${course.id}/detail`);
navigate(`/course?courseId=${course.id}/detail`);
}
const filteredCourses = useMemo(() => {
@ -93,7 +110,7 @@ const CoursesSection: React.FC<CoursesSectionProps> = ({
: courses.filter((course) => course.category === selectedCategory);
}, [selectedCategory, courses]);
const displayedCourses = filteredCourses.slice(0, visibleCourses);
const displayedCourses = isLoading ? [] : filteredCourses.slice(0, visibleCourses);
return (
<section className="relative py-20 overflow-hidden bg-gradient-to-b from-gray-50 to-white">
<div className="max-w-screen-2xl mx-auto px-6 relative">
@ -231,7 +248,7 @@ const CoursesSection: React.FC<CoursesSectionProps> = ({
))}
</div>
{filteredCourses.length >= visibleCourses && (
{filteredCourses?.length >= visibleCourses && (
<div className='flex items-center gap-4 justify-between mt-12'>
<div className='h-[1px] flex-grow bg-gradient-to-r from-transparent via-gray-300 to-transparent'></div>
<div className="flex justify-end">

View File

@ -3,123 +3,161 @@ import CategorySection from './components/CategorySection';
import CoursesSection from './components/CoursesSection';
import FeaturedTeachersSection from './components/FeaturedTeachersSection';
import { api } from '@nice/client';
import { useEffect } from 'react';
import { useEffect, useState } from 'react';
interface Courses{
id: number;
title: string;
instructor: string;
students: number;
rating: number;
level: string;
duration: string;
category: string;
progress: number;
thumbnail: string;
}
const HomePage = () => {
const mockCourses = [
{
id: 1,
title: 'Python 零基础入门',
instructor: '张教授',
students: 12000,
rating: 4.8,
level: '入门',
duration: '36小时',
category: '编程语言',
progress: 16,
thumbnail: '/images/course1.jpg',
// const mockCourses = [
// {
// id: 1,
// title: 'Python 零基础入门',
// instructor: '张教授',
// students: 12000,
// rating: 4.8,
// level: '入门',
// duration: '36小时',
// category: '编程语言',
// progress: 16,
// thumbnail: '/images/course1.jpg',
// },
// {
// id: 2,
// title: '数据结构与算法',
// instructor: '李教授',
// students: 8500,
// rating: 4.9,
// level: '进阶',
// duration: '48小时',
// category: '计算机基础',
// progress: 35,
// thumbnail: '/images/course2.jpg',
// },
// {
// id: 3,
// title: '前端开发实战',
// instructor: '王教授',
// students: 10000,
// rating: 4.7,
// level: '中级',
// duration: '42小时',
// category: '前端开发',
// progress: 68,
// thumbnail: '/images/course3.jpg',
// },
// {
// id: 4,
// title: 'Java企业级开发',
// instructor: '刘教授',
// students: 9500,
// rating: 4.6,
// level: '高级',
// duration: '56小时',
// category: '编程语言',
// progress: 15,
// thumbnail: '/images/course4.jpg',
// },
// {
// id: 5,
// title: '人工智能基础',
// instructor: '陈教授',
// students: 11000,
// rating: 4.9,
// level: '中级',
// duration: '45小时',
// category: '人工智能',
// progress: 20,
// thumbnail: '/images/course5.jpg',
// },
// {
// id: 6,
// title: '大数据分析',
// instructor: '赵教授',
// students: 8000,
// rating: 4.8,
// level: '进阶',
// duration: '50小时',
// category: '数据科学',
// progress: 45,
// thumbnail: '/images/course6.jpg',
// },
// {
// id: 7,
// title: '云计算实践',
// instructor: '孙教授',
// students: 7500,
// rating: 4.7,
// level: '高级',
// duration: '48小时',
// category: '云计算',
// progress: 15,
// thumbnail: '/images/course7.jpg',
// },
// {
// id: 8,
// title: '移动应用开发',
// instructor: '周教授',
// students: 9000,
// rating: 4.8,
// level: '中级',
// duration: '40小时',
// category: '移动开发',
// progress: 70,
// thumbnail: '/images/course8.jpg',
// },
// ];
const { data ,isLoading}: { data: Courses[] , isLoading:boolean} = api.post.findMany.useQuery({
where: {},
include: {
instructors: true,
},
{
id: 2,
title: '数据结构与算法',
instructor: '李教授',
students: 8500,
rating: 4.9,
level: '进阶',
duration: '48小时',
category: '计算机基础',
progress: 35,
thumbnail: '/images/course2.jpg',
orderBy: {
createdAt: 'desc' // 按创建时间降序排列
},
{
id: 3,
title: '前端开发实战',
instructor: '王教授',
students: 10000,
rating: 4.7,
level: '中级',
duration: '42小时',
category: '前端开发',
progress: 68,
thumbnail: '/images/course3.jpg',
},
{
id: 4,
title: 'Java企业级开发',
instructor: '刘教授',
students: 9500,
rating: 4.6,
level: '高级',
duration: '56小时',
category: '编程语言',
progress: 15,
thumbnail: '/images/course4.jpg',
},
{
id: 5,
title: '人工智能基础',
instructor: '陈教授',
students: 11000,
rating: 4.9,
level: '中级',
duration: '45小时',
category: '人工智能',
progress: 20,
thumbnail: '/images/course5.jpg',
},
{
id: 6,
title: '大数据分析',
instructor: '赵教授',
students: 8000,
rating: 4.8,
level: '进阶',
duration: '50小时',
category: '数据科学',
progress: 45,
thumbnail: '/images/course6.jpg',
},
{
id: 7,
title: '云计算实践',
instructor: '孙教授',
students: 7500,
rating: 4.7,
level: '高级',
duration: '48小时',
category: '云计算',
progress: 15,
thumbnail: '/images/course7.jpg',
},
{
id: 8,
title: '移动应用开发',
instructor: '周教授',
students: 9000,
rating: 4.8,
level: '中级',
duration: '40小时',
category: '移动开发',
progress: 70,
thumbnail: '/images/course8.jpg',
},
];
return (
<div className="min-h-screen">
<HeroSection />
<CoursesSection
title="推荐课程"
description="最受欢迎的精品课程,助你快速成长"
courses={mockCourses}
/>
{/* <CoursesSection
take: 8 // 只获取前8个课程
});
useEffect(() => {
if (data) {
console.log('mockCourses data:', data);
}
}, [data]);
// 数据处理逻辑
// 修正依赖数组
return (
<div className="min-h-screen">
<HeroSection />
<CoursesSection
title="推荐课程"
description="最受欢迎的精品课程,助你快速成长"
courses={data}
isLoading={isLoading}
/>
{/* {formattedCourses.map((course)=>{
return (
<>
<span>course.title</span>
</>
)
})} */}
{/* <CoursesSection
title="热门课程"
description="最受欢迎的精品课程,助你快速成长"
courses={mockCourses}
/> */}
<CategorySection />
{/* <FeaturedTeachersSection /> */}
</div>
);
<CategorySection />
{/* <FeaturedTeachersSection /> */}
</div>
);
};
export default HomePage;