index.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import { RootState } from "@/store";
  2. import { getLogListAPI } from "@/store/action/log";
  3. import { Input, DatePicker, Table } from "antd";
  4. import React, { useEffect, useMemo, useRef, useState } from "react";
  5. import { useDispatch, useSelector } from "react-redux";
  6. import styles from "./index.module.scss";
  7. const { RangePicker } = DatePicker;
  8. function Log() {
  9. const dispatch = useDispatch();
  10. const pageNumRef = useRef(1);
  11. const pagePageRef = useRef(10);
  12. // 筛选和分页
  13. const [tableSelect, setTableSelect] = useState({
  14. searchKey: "",
  15. pageSize: 10,
  16. pageNum: 1,
  17. startTime: "",
  18. endTime: "",
  19. });
  20. // 账号的输入
  21. const nameTime = useRef(-1);
  22. const nameChange = (e: React.ChangeEvent<HTMLInputElement>) => {
  23. clearTimeout(nameTime.current);
  24. nameTime.current = window.setTimeout(() => {
  25. setTableSelect({ ...tableSelect, searchKey: e.target.value, pageNum: 1 });
  26. }, 500);
  27. };
  28. // 时间选择器改变
  29. const timeChange = (date: any, dateString: any) => {
  30. let startTime = "";
  31. let endTime = "";
  32. if (dateString[0] && dateString[1]) {
  33. startTime = dateString[0] + " 00:00:00";
  34. endTime = dateString[1] + " 23:59:59";
  35. }
  36. setTableSelect({ ...tableSelect, startTime, endTime, pageNum: 1 });
  37. };
  38. useEffect(() => {
  39. pageNumRef.current = tableSelect.pageNum;
  40. pagePageRef.current = tableSelect.pageSize;
  41. dispatch(getLogListAPI(tableSelect));
  42. }, [dispatch, tableSelect]);
  43. // ---------关于表格
  44. // 页码变化
  45. const paginationChange = (pageNum: number, pageSize: number) => {
  46. pageNumRef.current = pageNum;
  47. pagePageRef.current = pageSize;
  48. setTableSelect({ ...tableSelect, pageNum, pageSize });
  49. };
  50. const results = useSelector((state: RootState) => state.logReducer.tableInfo);
  51. const columns = useMemo(() => {
  52. return [
  53. {
  54. title: "序号",
  55. render: (text: any, record: any, index: any) =>
  56. index + 1 + (pageNumRef.current - 1) * pagePageRef.current,
  57. },
  58. {
  59. title: "操作者",
  60. dataIndex: "userName",
  61. },
  62. {
  63. title: "操作日期",
  64. dataIndex: "createTime",
  65. },
  66. {
  67. title: "IP记录",
  68. dataIndex: "ip",
  69. },
  70. {
  71. title: "操作记录",
  72. dataIndex: "type",
  73. },
  74. ];
  75. }, []);
  76. return (
  77. <div className={styles.Log}>
  78. <div className="logTop">
  79. <div className="pageTitlt">操作日志</div>
  80. <div className="tableSelectBox">
  81. <div className="row">
  82. <span>账号:</span>
  83. <Input
  84. maxLength={10}
  85. style={{ width: 150 }}
  86. placeholder="请输入"
  87. allowClear
  88. onChange={(e) => nameChange(e)}
  89. />
  90. </div>
  91. <div className="row">
  92. <span>操作日期:</span>
  93. <RangePicker onChange={timeChange} />
  94. </div>
  95. </div>
  96. </div>
  97. {/* 表格主体 */}
  98. <div className="tableMain">
  99. <Table
  100. scroll={{ y: 570 }}
  101. dataSource={results.list}
  102. columns={columns}
  103. rowKey="id"
  104. pagination={{
  105. showQuickJumper: true,
  106. position: ["bottomCenter"],
  107. showSizeChanger: true,
  108. current: tableSelect.pageNum,
  109. pageSize: tableSelect.pageSize,
  110. total: results.total,
  111. onChange: paginationChange,
  112. }}
  113. />
  114. </div>
  115. </div>
  116. );
  117. }
  118. const MemoLog = React.memo(Log);
  119. export default MemoLog;