Recent.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { Button, List } from "antd";
  2. import { useEffect, useState } from "react";
  3. import { Link } from "react-router-dom";
  4. import { get } from "../../request";
  5. import { IView, IViewListResponse } from "../api/view";
  6. const RecentWidget = () => {
  7. const [listData, setListData] = useState<IView[]>([]);
  8. useEffect(() => {
  9. let url = `/v2/view?view=user&limit=10`;
  10. get<IViewListResponse>(url).then((json) => {
  11. if (json.ok) {
  12. const items: IView[] = json.data.rows.map((item, id) => {
  13. return {
  14. sn: id + 1,
  15. id: item.id,
  16. title: item.title,
  17. subtitle: item.org_title,
  18. type: item.target_type,
  19. meta: JSON.parse(item.meta),
  20. updatedAt: item.updated_at,
  21. };
  22. });
  23. setListData(items);
  24. }
  25. });
  26. }, []);
  27. return (
  28. <div style={{ padding: 6 }}>
  29. <List
  30. itemLayout="vertical"
  31. header="最近打开"
  32. size="small"
  33. dataSource={listData}
  34. renderItem={(item) => {
  35. let url = `/article/${item.type}/`;
  36. switch (item.type) {
  37. case "chapter":
  38. url += item.meta.book + "-" + item.meta.para;
  39. break;
  40. default:
  41. break;
  42. }
  43. return (
  44. <List.Item>
  45. <Link to={url} target="_blank">
  46. {item.title ? item.title : item.subtitle}
  47. </Link>
  48. </List.Item>
  49. );
  50. }}
  51. />
  52. <Button type="link">更多</Button>
  53. </div>
  54. );
  55. };
  56. export default RecentWidget;