index.tsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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 { useDispatch, useSelector } from "react-redux";
  10. import { Button, Input, Popconfirm } from "antd";
  11. import { A5_APIdel, A5_APIgetList } from "@/store/action/A5goods";
  12. import { RootState } from "@/store";
  13. import { A5tableType } from "@/types";
  14. import { MessageFu } from "@/utils/message";
  15. import A5add from "./A5add";
  16. import MyTable from "@/components/MyTable";
  17. import { A5tableC } from "@/utils/tableData";
  18. // const optionsArr = [
  19. // { value: "", label: "全部" },
  20. // { value: "三维文物", label: "三维文物" },
  21. // { value: "平面文物", label: "平面文物" },
  22. // { value: "油画", label: "油画" },
  23. // { value: "电子书", label: "电子书" },
  24. // ];
  25. function A5goods() {
  26. const dispatch = useDispatch();
  27. const [fromData, setFromData] = useState({
  28. pageNum: 1,
  29. pageSize: 10,
  30. searchKey: "",
  31. dictType: "",
  32. });
  33. const getListFu = useCallback(() => {
  34. dispatch(A5_APIgetList(fromData));
  35. }, [dispatch, fromData]);
  36. useEffect(() => {
  37. getListFu();
  38. }, [getListFu]);
  39. const [inputKey, setInputKey] = useState(1);
  40. // 标题的输入
  41. const timeRef = useRef(-1);
  42. const fromKeyChangeFu = useCallback(
  43. (e: React.ChangeEvent<HTMLInputElement>, key: "searchKey") => {
  44. clearTimeout(timeRef.current);
  45. timeRef.current = window.setTimeout(() => {
  46. setFromData({ ...fromData, [key]: e.target.value, pageNum: 1 });
  47. }, 500);
  48. },
  49. [fromData]
  50. );
  51. // 点击重置
  52. const resetSelectFu = useCallback(() => {
  53. setInputKey(Date.now());
  54. setFromData({
  55. pageNum: 1,
  56. pageSize: 10,
  57. searchKey: "",
  58. dictType: "",
  59. });
  60. }, []);
  61. const tableInfo = useSelector((state: RootState) => state.A5goods.tableInfo);
  62. // 点击删除
  63. const delTableFu = useCallback(
  64. async (id: number) => {
  65. const res = await A5_APIdel(id);
  66. if (res.code === 0) {
  67. MessageFu.success("删除成功!");
  68. getListFu();
  69. }
  70. },
  71. [getListFu]
  72. );
  73. const tableLastBtn = useMemo(() => {
  74. return [
  75. {
  76. title: "操作",
  77. render: (item: A5tableType) => (
  78. <>
  79. <Button size="small" type="text" onClick={() => setAddId(item.id)}>
  80. 编辑
  81. </Button>
  82. <Popconfirm
  83. title="删除后无法恢复,是否删除?"
  84. okText="删除"
  85. cancelText="取消"
  86. onConfirm={() => delTableFu(item.id)}
  87. >
  88. <Button size="small" type="text" danger>
  89. 删除
  90. </Button>
  91. </Popconfirm>
  92. </>
  93. ),
  94. },
  95. ];
  96. }, [delTableFu]);
  97. // 点击新增和编辑
  98. const [addId, setAddId] = useState(0);
  99. return (
  100. <div className={styles.A5goods}>
  101. <div className="pageTitle">馆藏管理</div>
  102. {/* 顶部筛选 */}
  103. <div className="A5top">
  104. <div className="A5topRow">
  105. <div>
  106. <span>搜索项:</span>
  107. <Input
  108. key={inputKey}
  109. maxLength={20}
  110. style={{ width: 300 }}
  111. placeholder="请输入名称"
  112. allowClear
  113. onChange={(e) => fromKeyChangeFu(e, "searchKey")}
  114. />
  115. </div>
  116. {/* <div>
  117. <span>类别:</span>
  118. <Select
  119. placeholder="请选择"
  120. style={{ width: 160 }}
  121. value={fromData.dictType}
  122. onChange={(e) =>
  123. setFromData({ ...fromData, dictType: e, pageNum: 1 })
  124. }
  125. options={optionsArr}
  126. />
  127. </div> */}
  128. </div>
  129. <div className="A5topRow">
  130. <Button onClick={resetSelectFu}>重置</Button>
  131. &emsp;&emsp;
  132. <Button type="primary" onClick={() => setAddId(-1)}>
  133. 新增
  134. </Button>
  135. </div>
  136. </div>
  137. {/* 表格主体 */}
  138. <div className="A5tableBox">
  139. <MyTable
  140. yHeight={625}
  141. list={tableInfo.list}
  142. columnsTemp={A5tableC}
  143. lastBtn={tableLastBtn}
  144. pageNum={fromData.pageNum}
  145. pageSize={fromData.pageSize}
  146. total={tableInfo.total}
  147. onChange={(pageNum, pageSize) =>
  148. setFromData({ ...fromData, pageNum, pageSize })
  149. }
  150. />
  151. </div>
  152. {/* 新增和编辑 */}
  153. {addId ? (
  154. <A5add
  155. addId={addId}
  156. closeFu={() => setAddId(0)}
  157. addTableFu={() => resetSelectFu()}
  158. editTableFu={() => getListFu()}
  159. />
  160. ) : null}
  161. </div>
  162. );
  163. }
  164. const MemoA5goods = React.memo(A5goods);
  165. export default MemoA5goods;