index.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import { overviewApi } from "@/api";
  2. import { GetOverviewListParams, OverviewParams } from "@/types";
  3. import { formatDate } from "@/utils/date";
  4. import {
  5. Button,
  6. DatePicker,
  7. Form,
  8. FormInstance,
  9. Input,
  10. Popconfirm,
  11. Table,
  12. } from "antd";
  13. import { debounce } from "lodash";
  14. import { useCallback, useEffect, useMemo, useRef, useState } from "react";
  15. import { useNavigate } from "react-router-dom";
  16. const { RangePicker } = DatePicker;
  17. const DEFAULT_PARAMS: GetOverviewListParams = {
  18. startTime: "",
  19. endTime: "",
  20. searchKey: "",
  21. pageNum: 1,
  22. pageSize: 20,
  23. };
  24. export default function Overview() {
  25. const navigate = useNavigate();
  26. const [list, setList] = useState<OverviewParams[]>([]);
  27. const [total, setTotal] = useState(0);
  28. const formRef = useRef<FormInstance>(null);
  29. const [params, setParams] = useState<GetOverviewListParams>({
  30. ...DEFAULT_PARAMS,
  31. });
  32. const getOverviewList = useCallback(async () => {
  33. const data = await overviewApi.getList(params);
  34. setList(data.records);
  35. setTotal(data.total);
  36. }, [params]);
  37. const handleDel = useCallback(
  38. async (id: number) => {
  39. await overviewApi.del(id);
  40. getOverviewList();
  41. },
  42. [getOverviewList]
  43. );
  44. const COLUMNS = useMemo(() => {
  45. return [
  46. {
  47. title: "企业名称",
  48. dataIndex: "name",
  49. },
  50. {
  51. title: "成立日期",
  52. dataIndex: "createDay",
  53. },
  54. {
  55. title: "简介",
  56. width: 400,
  57. ellipsis: true,
  58. render: (item: OverviewParams) =>
  59. item.description ? item.description : "(空)",
  60. },
  61. {
  62. title: "操作",
  63. width: 230,
  64. render(item: OverviewParams) {
  65. return (
  66. <>
  67. <>
  68. <Button
  69. type="text"
  70. onClick={() => navigate(`/overview/view/${item.id}`)}
  71. >
  72. 查看
  73. </Button>
  74. <Button
  75. type="text"
  76. onClick={() => navigate(`/overview/edit/${item.id}`)}
  77. >
  78. 编辑
  79. </Button>
  80. <Popconfirm
  81. title="提示"
  82. description="确认是否删除?"
  83. onConfirm={handleDel.bind(undefined, item.id)}
  84. >
  85. <Button type="text" danger>
  86. 删除
  87. </Button>
  88. </Popconfirm>
  89. </>
  90. </>
  91. );
  92. },
  93. },
  94. ];
  95. }, [handleDel, navigate]);
  96. useEffect(() => {
  97. getOverviewList();
  98. }, [getOverviewList]);
  99. const handleAdd = useCallback(() => {
  100. navigate("/overview/create");
  101. }, [navigate]);
  102. const debounceSearch = useMemo(
  103. () =>
  104. debounce(
  105. (
  106. changedVal: OverviewParams,
  107. vals: OverviewParams & { date: string[] }
  108. ) => {
  109. const { date, ...rest } = vals;
  110. let startTime = "";
  111. let endTime = "";
  112. if (date && date[0] && date[1]) {
  113. startTime = formatDate(date[0]) + " 00:00:00";
  114. endTime = formatDate(date[1]) + " 23:59:59";
  115. }
  116. setParams({ ...params, ...rest, startTime, endTime });
  117. },
  118. 500
  119. ),
  120. [params]
  121. );
  122. const handleReset = useCallback(() => {
  123. setParams({ ...DEFAULT_PARAMS });
  124. formRef.current?.resetFields();
  125. }, [formRef]);
  126. return (
  127. <div className="overview">
  128. <Form layout="inline" ref={formRef} onValuesChange={debounceSearch}>
  129. <Form.Item label="企业名称:" name="searchKey">
  130. <Input
  131. className="w220"
  132. placeholder="请输入关键字"
  133. maxLength={30}
  134. allowClear
  135. showCount
  136. />
  137. </Form.Item>
  138. <Form.Item label="成立日期:" name="date">
  139. <RangePicker />
  140. </Form.Item>
  141. <Form.Item>
  142. <Button type="primary" onClick={handleAdd}>
  143. 新增
  144. </Button>
  145. </Form.Item>
  146. <Form.Item>
  147. <Button onClick={handleReset}>重置</Button>
  148. </Form.Item>
  149. </Form>
  150. <Table
  151. className="c-table"
  152. dataSource={list}
  153. columns={COLUMNS}
  154. rowKey="id"
  155. pagination={{
  156. showQuickJumper: true,
  157. position: ["bottomCenter"],
  158. showSizeChanger: true,
  159. current: params.pageNum,
  160. pageSize: params.pageSize,
  161. total,
  162. }}
  163. />
  164. </div>
  165. );
  166. }