CourseList.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //课程列表
  2. import { Link } from "react-router";
  3. import { useEffect, useState } from "react";
  4. import { Avatar, List, message, Typography, Image } from "antd";
  5. import type {
  6. ICourseDataResponse,
  7. ICourseListResponse,
  8. } from "../../api/Course";
  9. import { API_HOST, get } from "../../request";
  10. const { Paragraph } = Typography;
  11. interface IWidget {
  12. type: "open" | "close";
  13. }
  14. const CourseListWidget = ({ type }: IWidget) => {
  15. const [data, setData] = useState<ICourseDataResponse[]>();
  16. useEffect(() => {
  17. get<ICourseListResponse>(`/v2/course?view=${type}`).then((json) => {
  18. if (json.ok) {
  19. console.log(json.data);
  20. setData(json.data.rows);
  21. } else {
  22. message.error(json.message);
  23. }
  24. });
  25. }, [type]);
  26. return (
  27. <List
  28. itemLayout="vertical"
  29. size="default"
  30. pagination={{
  31. onChange: (page) => {
  32. console.log(page);
  33. },
  34. pageSize: 5,
  35. }}
  36. dataSource={data}
  37. renderItem={(item) => (
  38. <List.Item
  39. key={item.title}
  40. extra={
  41. <Image
  42. width={128}
  43. style={{ borderRadius: 12 }}
  44. src={
  45. item.cover_url && item.cover_url.length > 1
  46. ? item.cover_url[1]
  47. : undefined
  48. }
  49. preview={{
  50. src:
  51. item.cover_url && item.cover_url.length > 0
  52. ? item.cover_url[0]
  53. : undefined,
  54. }}
  55. fallback={`${API_HOST}/app/course/img/default.jpg`}
  56. />
  57. }
  58. >
  59. <List.Item.Meta
  60. avatar={<Avatar />}
  61. title={<Link to={`/course/show/${item.id}`}>{item.title}</Link>}
  62. description={<div>主讲:{item.teacher?.nickName}</div>}
  63. />
  64. <Paragraph ellipsis={{ rows: 2, expandable: false }}>
  65. {item.summary}
  66. </Paragraph>
  67. </List.Item>
  68. )}
  69. />
  70. );
  71. };
  72. export default CourseListWidget;