A7table.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import MyPopconfirm from "@/components/MyPopconfirm";
  2. import MyTable from "@/components/MyTable";
  3. import { RootState } from "@/store";
  4. import { A7_APIdel, A7_APIgetList } from "@/store/action/A7school";
  5. import { A7tableType } from "@/types";
  6. import { A7tableC1, A7tableC2 } from "@/utils/tableData";
  7. import { Button, Tooltip } from "antd";
  8. import { useCallback, useEffect, useMemo, useState } from "react";
  9. import { useDispatch, useSelector } from "react-redux";
  10. import { forwardRef, useImperativeHandle } from "react";
  11. import { QuestionCircleOutlined } from "@ant-design/icons";
  12. import { MessageFu } from "@/utils/message";
  13. type Props = {
  14. type: "口述史" | "刊物";
  15. editTableFu: (id: number) => void;
  16. ref: any;
  17. };
  18. function A7tab1({ type, editTableFu }: Props, ref: any) {
  19. const dispatch = useDispatch();
  20. const [fromData, setFromData] = useState({
  21. pageNum: 1,
  22. pageSize: 10,
  23. });
  24. const getListFu = useCallback(() => {
  25. dispatch(A7_APIgetList(fromData, type));
  26. }, [dispatch, fromData, type]);
  27. useEffect(() => {
  28. getListFu();
  29. }, [getListFu]);
  30. const tableInfo = useSelector((state: RootState) =>
  31. type === "口述史" ? state.A7school.tableInfo1 : state.A7school.tableInfo2
  32. );
  33. // 点击删除
  34. const delTableFu = useCallback(
  35. async (id: number) => {
  36. const res = await A7_APIdel(id, type);
  37. if (res.code === 0) {
  38. MessageFu.success("删除成功!");
  39. getListFu();
  40. }
  41. },
  42. [getListFu, type]
  43. );
  44. // 新增完成之后 重新获取数据
  45. const resetSelectFu = useCallback(() => {
  46. setFromData({
  47. pageNum: 1,
  48. pageSize: 10,
  49. });
  50. }, []);
  51. // 可以让父组件调用子组件的方法
  52. useImperativeHandle(ref, () => ({
  53. resetSelectFu,
  54. getListFu,
  55. }));
  56. const tableLastBtn = useMemo(() => {
  57. return [
  58. {
  59. title: "操作",
  60. render: (item: A7tableType) => (
  61. <>
  62. <Button
  63. size="small"
  64. type="text"
  65. onClick={() => editTableFu(item.id)}
  66. >
  67. 编辑
  68. </Button>
  69. <MyPopconfirm txtK="删除" onConfirm={() => delTableFu(item.id)} />
  70. </>
  71. ),
  72. },
  73. ];
  74. }, [delTableFu, editTableFu]);
  75. return (
  76. <MyTable
  77. classKey={type === "口述史" ? "port" : "book"}
  78. yHeight={640}
  79. list={tableInfo.list}
  80. columnsTemp={type === "口述史" ? A7tableC1 : A7tableC2}
  81. lastBtn={tableLastBtn}
  82. pageNum={fromData.pageNum}
  83. pageSize={fromData.pageSize}
  84. total={tableInfo.total}
  85. onChange={(pageNum, pageSize) =>
  86. setFromData({ ...fromData, pageNum, pageSize })
  87. }
  88. myTitle={{
  89. name: "排序值",
  90. Com: (
  91. <div className="A7tableTit">
  92. <span>排序值</span>&nbsp;
  93. <Tooltip title="数字越小,排序越前">
  94. <div className="A7tableTitInco">
  95. <QuestionCircleOutlined rev={undefined} />
  96. </div>
  97. </Tooltip>
  98. </div>
  99. ),
  100. }}
  101. />
  102. );
  103. }
  104. // const MemoA7tab1 = React.memo(A7tab1);
  105. export default forwardRef(A7tab1);