index.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import React, {
  2. useCallback,
  3. useEffect,
  4. useMemo,
  5. useRef,
  6. useState,
  7. } from "react";
  8. import styles from "./index.module.scss";
  9. import { Button, Input, Popconfirm } from "antd";
  10. import { useDispatch, useSelector } from "react-redux";
  11. import { A4_APIdel, A4_APIgetList } from "@/store/action/A4exhibit";
  12. import { RootState } from "@/store";
  13. import { A4tableType } from "@/types";
  14. import { MessageFu } from "@/utils/message";
  15. import A4add from "./A4add";
  16. import MyTable from "@/components/MyTable";
  17. import { A4tableC } from "@/utils/tableData";
  18. function A4exhibit() {
  19. const dispatch = useDispatch();
  20. const [fromData, setFromData] = useState({
  21. pageNum: 1,
  22. pageSize: 10,
  23. searchKey: "",
  24. });
  25. const getListFu = useCallback(() => {
  26. dispatch(A4_APIgetList(fromData));
  27. }, [dispatch, fromData]);
  28. useEffect(() => {
  29. getListFu();
  30. }, [getListFu]);
  31. const [inputKey, setInputKey] = useState(1);
  32. // 标题的输入
  33. const timeRef = useRef(-1);
  34. const fromKeyChangeFu = useCallback(
  35. (e: React.ChangeEvent<HTMLInputElement>, key: "searchKey") => {
  36. clearTimeout(timeRef.current);
  37. timeRef.current = window.setTimeout(() => {
  38. setFromData({ ...fromData, [key]: e.target.value, pageNum: 1 });
  39. }, 500);
  40. },
  41. [fromData]
  42. );
  43. // 点击重置
  44. const resetSelectFu = useCallback(() => {
  45. setInputKey(Date.now());
  46. setFromData({
  47. pageNum: 1,
  48. pageSize: 10,
  49. searchKey: "",
  50. });
  51. }, []);
  52. const tableInfo = useSelector(
  53. (state: RootState) => state.A4exhibit.tableInfo
  54. );
  55. // 点击删除
  56. const delTableFu = useCallback(
  57. async (id: number) => {
  58. const res = await A4_APIdel(id);
  59. if (res.code === 0) {
  60. MessageFu.success("删除成功!");
  61. getListFu();
  62. }
  63. },
  64. [getListFu]
  65. );
  66. const tableLastBtn = useMemo(() => {
  67. return [
  68. {
  69. title: "操作",
  70. render: (item: A4tableType) => (
  71. <>
  72. <Button size="small" type="text" onClick={() => setAddId(item.id)}>
  73. 编辑
  74. </Button>
  75. <Popconfirm
  76. title="删除后无法恢复,是否删除?"
  77. okText="删除"
  78. cancelText="取消"
  79. onConfirm={() => delTableFu(item.id)}
  80. >
  81. <Button size="small" type="text" danger>
  82. 删除
  83. </Button>
  84. </Popconfirm>
  85. </>
  86. ),
  87. },
  88. ];
  89. }, [delTableFu]);
  90. // 点击新增和编辑
  91. const [addId, setAddId] = useState(0);
  92. return (
  93. <div className={styles.A4exhibit}>
  94. <div className="pageTitle">云展管理</div>
  95. {/* 顶部筛选 */}
  96. <div className="A4top">
  97. <div>
  98. <span>搜索项:</span>
  99. <Input
  100. key={inputKey}
  101. maxLength={20}
  102. style={{ width: 300 }}
  103. placeholder="请输入名称"
  104. allowClear
  105. onChange={(e) => fromKeyChangeFu(e, "searchKey")}
  106. />
  107. </div>
  108. <div>
  109. <Button onClick={resetSelectFu}>重置</Button>
  110. &emsp;&emsp;
  111. <Button type="primary" onClick={() => setAddId(-1)}>
  112. 新增
  113. </Button>
  114. </div>
  115. </div>
  116. {/* 表格主体 */}
  117. <div className="A4tableBox">
  118. <MyTable
  119. yHeight={625}
  120. list={tableInfo.list}
  121. columnsTemp={A4tableC}
  122. lastBtn={tableLastBtn}
  123. pageNum={fromData.pageNum}
  124. pageSize={fromData.pageSize}
  125. total={tableInfo.total}
  126. onChange={(pageNum, pageSize) =>
  127. setFromData({ ...fromData, pageNum, pageSize })
  128. }
  129. />
  130. </div>
  131. {/* 新增和编辑 */}
  132. {addId ? (
  133. <A4add
  134. addId={addId}
  135. closeFu={() => setAddId(0)}
  136. addTableFu={() => resetSelectFu()}
  137. editTableFu={() => getListFu()}
  138. />
  139. ) : null}
  140. </div>
  141. );
  142. }
  143. const MemoA4exhibit = React.memo(A4exhibit);
  144. export default MemoA4exhibit;