CourseList.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. //课程列表
  2. import React, { useEffect, useState } from "react";
  3. import { LikeOutlined, MessageOutlined, StarOutlined } from "@ant-design/icons";
  4. import { Avatar, List, message, Space, Typography } from "antd";
  5. import { ICourseListResponse } from "../../api/Course";
  6. import { ICourse } from "../../../pages/library/course/course";
  7. import { Link, useNavigate } from "react-router-dom";
  8. import { API_HOST, get } from "../../../request";
  9. const { Paragraph } = Typography;
  10. interface IWidget {
  11. type: "open" | "close";
  12. }
  13. const Widget = ({ type }: IWidget) => {
  14. const [data, setData] = useState<ICourse[]>();
  15. const navigate = useNavigate();
  16. useEffect(() => {
  17. get<ICourseListResponse>(`/v2/course?view=${type}`).then((json) => {
  18. if (json.ok) {
  19. console.log(json.data);
  20. const course: ICourse[] = json.data.rows.map((item) => {
  21. return {
  22. id: item.id,
  23. title: item.title,
  24. subtitle: item.subtitle,
  25. teacher: item.teacher,
  26. intro: item.content,
  27. coverUrl: item.cover,
  28. };
  29. });
  30. setData(course);
  31. } else {
  32. message.error(json.message);
  33. }
  34. });
  35. }, []);
  36. return (
  37. <List
  38. itemLayout="vertical"
  39. size="default"
  40. pagination={{
  41. onChange: (page) => {
  42. console.log(page);
  43. },
  44. pageSize: 5,
  45. }}
  46. dataSource={data}
  47. renderItem={(item) => (
  48. <List.Item
  49. key={item.title}
  50. extra={
  51. <img width={128} alt="logo" src={API_HOST + "/" + item.coverUrl} />
  52. }
  53. >
  54. <List.Item.Meta
  55. avatar={<Avatar />}
  56. title={<Link to={`/course/show/${item.id}`}>{item.title}</Link>}
  57. description={<div>主讲:{item.teacher?.nickName}</div>}
  58. />
  59. <Paragraph ellipsis={{ rows: 2, expandable: false }}>
  60. {item.intro}
  61. </Paragraph>
  62. </List.Item>
  63. )}
  64. />
  65. );
  66. };
  67. export default Widget;