index.tsx 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. import BreadTit from "@/components/BreadTit";
  2. import { object3AddAPI, object3infoOutAPI } from "@/store/action/object3";
  3. import history, { urlParameter } from "@/utils/history";
  4. import { Button, Input, Popconfirm, Table } from "antd";
  5. import TextArea from "antd/es/input/TextArea";
  6. import React, { useCallback, useEffect, useMemo, useState } from "react";
  7. import { useLocation } from "react-router-dom";
  8. import _ from "lodash";
  9. import styles from "./index.module.scss";
  10. import { useDispatch, useSelector } from "react-redux";
  11. import { RootState } from "@/store";
  12. import ImageLazy from "@/components/ImageLazy";
  13. import GoodsAll from "./GoodsAll";
  14. function AddObject3() {
  15. const dispatch = useDispatch();
  16. // 顶部数据
  17. const [addInfoTop, setAddInfoTop] = useState<any>({});
  18. // 进入页面新增请求函数
  19. const object3AddAPIFu = useCallback(async () => {
  20. const res = await object3AddAPI();
  21. setAddInfoTop(res.data);
  22. // 初始化表格数据
  23. dispatch({
  24. type: "object3/getGoodsTableList",
  25. payload: [],
  26. });
  27. }, [dispatch]);
  28. // 通过id获取详情函数
  29. const object3infoOutAPIFu = useCallback(async (id: number) => {
  30. const res = await object3infoOutAPI(id);
  31. // setAddInfoTop(res.data);
  32. // // 获取表格详情信息
  33. // dispatch(getObj1InfoTableAPI(id));
  34. }, []);
  35. // 获取地址栏参数
  36. const location = useLocation();
  37. const [urlParam, setUrlParam] = useState<any>({});
  38. useEffect(() => {
  39. const obj = urlParameter(location.search);
  40. setUrlParam(obj);
  41. if (obj.id) {
  42. // 如果是编辑
  43. object3infoOutAPIFu(obj.id);
  44. } else object3AddAPIFu();
  45. }, [location, object3AddAPIFu, object3infoOutAPIFu]);
  46. // 点击返回
  47. const cancelFu = useCallback(() => {
  48. history.push({
  49. pathname: `/object/3`,
  50. state: { k: urlParam.k ? urlParam.k : "1", d: urlParam.d },
  51. });
  52. }, [urlParam.d, urlParam.k]);
  53. // 点击提交
  54. const submitFu = useCallback(() => {}, []);
  55. // 点击添加或者编辑出来页面
  56. const [addPage, setAddPage] = useState(false);
  57. // 表格的多选
  58. const rowSelection = {
  59. onChange: (selectedRowKeys: any, selectedRows: any) => {
  60. setTableSelectList(selectedRows);
  61. },
  62. };
  63. // 点击添加
  64. const addPageFu = useCallback((id?: any) => {
  65. setAddPage(true);
  66. }, []);
  67. // 选中的表格数据
  68. const [tableSelectList, setTableSelectList] = useState([]);
  69. // 从仓库拿表格信息
  70. const results = useSelector(
  71. (state: RootState) => state.object3Store.goodsTableList
  72. );
  73. // 点击删除
  74. const delTableListFu = useCallback(() => {
  75. console.log("多个删除", tableSelectList);
  76. const data = _.differenceBy(results, tableSelectList, "id");
  77. dispatch({ type: "login/setGoodsSonList", payload: data });
  78. setTableSelectList(data);
  79. }, [dispatch, results, tableSelectList]);
  80. // 表格数据
  81. const columns = useMemo(() => {
  82. return [
  83. {
  84. title: "缩略图",
  85. render: (item: any) => (
  86. <ImageLazy width={120} height={70} src={item.thumb} />
  87. ),
  88. },
  89. {
  90. title: "藏品编号名称",
  91. dataIndex: "dictNum",
  92. },
  93. {
  94. title: "藏品编号",
  95. render: (item: any) => (item.num ? item.num : "-"),
  96. },
  97. {
  98. title: "藏品名称",
  99. dataIndex: "name",
  100. },
  101. {
  102. title: "类别",
  103. dataIndex: "dictGoodType",
  104. },
  105. {
  106. title: "完残程度",
  107. dataIndex: "complete",
  108. },
  109. {
  110. title: "藏品位置",
  111. render: (item: any) => <>123</>,
  112. },
  113. ];
  114. }, []);
  115. return (
  116. <div className={styles.AddObject3}>
  117. <div className="breadTit">
  118. <BreadTit>
  119. <div className="breadTitRow">藏品登记</div>
  120. <div className="splitStr">/</div>
  121. <div className="breadTitRow active">
  122. {urlParam.id ? "编辑" : "新增"}
  123. </div>
  124. </BreadTit>
  125. </div>
  126. <div className="objectSonMain">
  127. {/* 上面的信息展示 */}
  128. <div className="addInfoTop">
  129. <div className="row">
  130. <div>
  131. <span className="bs">入库编号:</span>
  132. <Input style={{ width: 400 }} value={addInfoTop.num} disabled />
  133. </div>
  134. <div>
  135. <span className="bs">登记人员:</span>
  136. <Input
  137. style={{ width: 400 }}
  138. value={addInfoTop.creatorName}
  139. disabled
  140. />
  141. </div>
  142. </div>
  143. <div className="rowAll">
  144. <span>入库说明:</span>
  145. <TextArea
  146. value={addInfoTop.description}
  147. onChange={(e) =>
  148. setAddInfoTop({ ...addInfoTop, description: e.target.value })
  149. }
  150. rows={3}
  151. placeholder="请输入"
  152. showCount
  153. maxLength={255}
  154. />
  155. </div>
  156. </div>
  157. {/* 下面的表格 */}
  158. <div className="addTableBox">
  159. <div className="addTableBox_Tit">
  160. <div className="addTableBox_TitL">藏品信息</div>
  161. <div className="addTableBox_TitR">
  162. <Button onClick={() => addPageFu(null)}>添加</Button>
  163. &emsp;
  164. <Popconfirm
  165. disabled={tableSelectList.length === 0}
  166. title="确定删除吗?"
  167. okText="确定"
  168. cancelText="取消"
  169. onConfirm={delTableListFu}
  170. >
  171. <Button disabled={tableSelectList.length === 0}>删除</Button>
  172. </Popconfirm>
  173. </div>
  174. </div>
  175. {/* 表格主体 */}
  176. <div className="addTableBox_table">
  177. <Table
  178. size="small"
  179. scroll={{ y: 355 }}
  180. rowSelection={{
  181. type: "checkbox",
  182. ...rowSelection,
  183. }}
  184. dataSource={results}
  185. columns={columns}
  186. rowKey="id"
  187. pagination={false}
  188. />
  189. </div>
  190. {/* 返回按钮 */}
  191. <div className="addTableBox_btn">
  192. <Button type="primary" onClick={submitFu}>
  193. 提交
  194. </Button>
  195. &emsp;
  196. <Button onClick={cancelFu}>返回</Button>
  197. </div>
  198. </div>
  199. </div>
  200. {/* 点击添加或者编辑出来的页面 */}
  201. {addPage ? <GoodsAll colsePage={() => setAddPage(false)} /> : null}
  202. </div>
  203. );
  204. }
  205. const MemoAddObject3 = React.memo(AddObject3);
  206. export default MemoAddObject3;