index.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { bannerApi } from "@/api";
  2. import { DageTableActions } from "@dage/pc-components";
  3. import { Button, Image, Table } from "antd";
  4. import { useMemo, useState, useEffect, useCallback } from "react";
  5. import { useNavigate } from "react-router-dom";
  6. export default function BannerPage() {
  7. const navigate = useNavigate();
  8. const [list, setList] = useState<[]>([]);
  9. const [loading, setLoading] = useState(false);
  10. useEffect(() => {
  11. getList();
  12. }, []);
  13. const getList = async () => {
  14. setLoading(true);
  15. try {
  16. const data = await bannerApi.getList();
  17. setList(data);
  18. } finally {
  19. setLoading(false);
  20. }
  21. };
  22. const handleDelete = useCallback(async (id: number) => {
  23. await bannerApi.delete(id);
  24. getList();
  25. }, []);
  26. const COLUMNS = useMemo(() => {
  27. return [
  28. {
  29. title: "海报",
  30. render: (item: any) => {
  31. return (
  32. <Image
  33. height={100}
  34. src={`${process.env.REACT_APP_API_URL}${process.env.REACT_APP_IMG_PUBLIC}${item.filePath}`}
  35. />
  36. );
  37. },
  38. },
  39. {
  40. title: "发布日期",
  41. dataIndex: "publishDate",
  42. },
  43. {
  44. title: "操作",
  45. render: (item: any) => {
  46. return (
  47. <DageTableActions
  48. onEdit={() => navigate(`/banner/edit/${item.id}`)}
  49. onDelete={handleDelete.bind(undefined, item.id)}
  50. />
  51. );
  52. },
  53. },
  54. ];
  55. }, [handleDelete, navigate]);
  56. return (
  57. <div>
  58. <div style={{ textAlign: "right" }}>
  59. <Button
  60. type="primary"
  61. disabled={list.length >= 10}
  62. onClick={() => navigate("/banner/create")}
  63. >
  64. 新增
  65. </Button>
  66. </div>
  67. <Table
  68. loading={loading}
  69. className="page-table"
  70. dataSource={list}
  71. columns={COLUMNS}
  72. rowKey="id"
  73. />
  74. </div>
  75. );
  76. }