| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- //主讲人列表
- import { useNavigate } from "react-router";
- import { useEffect, useState } from "react";
- import { Card, List, message, Typography, Image } from "antd";
- import type {
- ICourseDataResponse,
- ICourseListResponse,
- } from "../../api/Course";
- import { API_HOST, get } from "../../request";
- import CourseNewLoading from "./CourseNewLoading";
- const { Meta } = Card;
- const { Paragraph } = Typography;
- const LecturerListWidget = () => {
- const [data, setData] = useState<ICourseDataResponse[]>();
- const [loading, setLoading] = useState(false);
- const navigate = useNavigate();
- useEffect(() => {
- const url = `/v2/course?view=new&limit=4`;
- console.info("course url", url);
- setLoading(true);
- get<ICourseListResponse>(url)
- .then((json) => {
- if (json.ok) {
- console.log(json.data);
- setData(json.data.rows);
- } else {
- message.error(json.message);
- }
- })
- .finally(() => setLoading(false));
- }, []);
- return loading ? (
- <CourseNewLoading />
- ) : (
- <List
- grid={{ gutter: 16, column: 4 }}
- dataSource={data}
- renderItem={(item) => (
- <List.Item>
- <Card
- hoverable
- style={{ width: "100%", height: 350 }}
- cover={
- <Image
- alt="example"
- src={
- item.cover_url && item.cover_url.length > 1
- ? item.cover_url[1]
- : undefined
- }
- preview={{
- src:
- item.cover_url && item.cover_url.length > 0
- ? item.cover_url[0]
- : undefined,
- }}
- width="240"
- height="200"
- fallback={`${API_HOST}/app/course/img/default.jpg`}
- />
- }
- onClick={(_e) => {
- navigate(`/course/show/${item.id}`);
- }}
- >
- <Meta
- title={item.title}
- description={
- <Paragraph ellipsis={{ rows: 2, expandable: false }}>
- {item.summary}
- </Paragraph>
- }
- />
- </Card>
- </List.Item>
- )}
- />
- );
- };
- export default LecturerListWidget;
|