detail.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  1. import PageContent from '@/components/PageContent';
  2. import PageTitle from '@/components/PageTitle';
  3. import {
  4. queryInventoryList,
  5. queryStoreList,
  6. } from '@/services/StorageManagement';
  7. import { useParams, useRequest } from '@umijs/max';
  8. import { Table } from 'antd';
  9. import dayjs from 'dayjs';
  10. import { useEffect, useRef, useState } from 'react';
  11. import { PageType } from '.';
  12. const SparePartDetail = () => {
  13. const { projectId, type } = useParams();
  14. const titles = ['入库详情', '出库详情', '报废详情', '库存详情', '基础库存'];
  15. const defaultParams = {
  16. type: Number(type),
  17. project_id: Number(projectId),
  18. check_result: 0,
  19. category_id: 0,
  20. start_time: '',
  21. end_time: '',
  22. name: '',
  23. };
  24. const defaultParamsOfExit = {
  25. category_id: 0,
  26. name: '',
  27. model_number: '',
  28. warning_state: Number(type) === PageType.warning ? 2 : 0,
  29. project_id: Number(projectId),
  30. };
  31. const columns = [
  32. {
  33. title: '仓储类型',
  34. dataIndex: 'category_name',
  35. key: 'category_name',
  36. align: 'center',
  37. },
  38. {
  39. title: '名称',
  40. dataIndex: 'name',
  41. key: 'name',
  42. align: 'center',
  43. },
  44. {
  45. title: '型号',
  46. dataIndex: 'model_number',
  47. key: 'model_number',
  48. align: 'center',
  49. },
  50. ];
  51. const columnsIn = [
  52. ...columns,
  53. {
  54. title: '入库数量',
  55. // dataIndex: 'amount',
  56. // key: 'amount',
  57. align: 'center',
  58. render: (recode) => (
  59. <div>
  60. {recode.amount}
  61. {recode.unit}
  62. </div>
  63. ),
  64. },
  65. {
  66. title: '入库日期',
  67. dataIndex: 'create_time',
  68. key: 'create_time',
  69. align: 'center',
  70. render: (time) => dayjs(time).format('YYYY-MM-DD'),
  71. },
  72. {
  73. title: '入库人',
  74. dataIndex: 'user_name',
  75. key: 'user_name',
  76. align: 'center',
  77. },
  78. ];
  79. const columnsOut = [
  80. ...columns,
  81. {
  82. title: '出库数量',
  83. // dataIndex: 'amount',
  84. // key: 'amount',
  85. align: 'center',
  86. render: (recode) => (
  87. <div>
  88. {recode.amount}
  89. {recode.unit}
  90. </div>
  91. ),
  92. },
  93. {
  94. title: '出库日期',
  95. dataIndex: 'create_time',
  96. key: 'create_time',
  97. align: 'center',
  98. render: (time) => dayjs(time).format('YYYY-MM-DD'),
  99. },
  100. {
  101. title: '出库人',
  102. dataIndex: 'user_name',
  103. key: 'user_name',
  104. align: 'center',
  105. },
  106. {
  107. title: '领用人',
  108. dataIndex: 'recipient_user_name',
  109. key: 'recipient_user_name',
  110. align: 'center',
  111. },
  112. ];
  113. const columnsScrap = [
  114. ...columns,
  115. {
  116. title: '报废信息',
  117. dataIndex: 'desc',
  118. key: 'desc',
  119. align: 'center',
  120. },
  121. {
  122. title: '报废数量',
  123. // dataIndex: 'amount',
  124. // key: 'amount',
  125. align: 'center',
  126. render: (recode) => (
  127. <div>
  128. {recode.amount}
  129. {recode.unit}
  130. </div>
  131. ),
  132. },
  133. {
  134. title: '经办人',
  135. dataIndex: 'user_name',
  136. key: 'user_name',
  137. align: 'center',
  138. },
  139. {
  140. title: '报废日期',
  141. dataIndex: 'create_time',
  142. key: 'create_time',
  143. align: 'center',
  144. render: (time) => dayjs(time).format('YYYY-MM-DD'),
  145. },
  146. {
  147. title: '图片',
  148. dataIndex: 'images',
  149. align: 'center',
  150. render: (images) => {
  151. if (images) {
  152. const imgs = JSON.parse(images);
  153. const setData = imgs.map((img) => {
  154. return { src: img };
  155. });
  156. return (
  157. <>
  158. <a
  159. onClick={() => {
  160. console.log(imgs[0]);
  161. return Zmage.browsing({
  162. set: setData,
  163. });
  164. }}
  165. >
  166. 查看
  167. </a>
  168. </>
  169. );
  170. } else {
  171. return <div>暂无图片</div>;
  172. }
  173. },
  174. },
  175. ];
  176. const columnsExit = [
  177. {
  178. title: '类型',
  179. dataIndex: 'category_name',
  180. key: 'category_name',
  181. align: 'center',
  182. },
  183. {
  184. title: '名称',
  185. dataIndex: 'name',
  186. key: 'name',
  187. align: 'center',
  188. },
  189. {
  190. title: '型号',
  191. dataIndex: 'model_number',
  192. key: 'model_number',
  193. align: 'center',
  194. },
  195. {
  196. title: '在库',
  197. align: 'center',
  198. render: (record) => {
  199. return (
  200. <div>
  201. {record.in_amount -
  202. record.out_amount -
  203. record.scrap_amount +
  204. record.update_amount}
  205. {record.unit}
  206. </div>
  207. );
  208. },
  209. },
  210. {
  211. title: '入库',
  212. align: 'center',
  213. render: (recode) => (
  214. <div>
  215. {recode.in_amount}
  216. {recode.unit}
  217. </div>
  218. ),
  219. },
  220. {
  221. title: '出库',
  222. align: 'center',
  223. render: (recode) => (
  224. <div>
  225. {recode.out_amount}
  226. {recode.unit}
  227. </div>
  228. ),
  229. },
  230. {
  231. title: '报废',
  232. align: 'center',
  233. render: (recode) => (
  234. <div>
  235. {recode.scrap_amount}
  236. {recode.unit}
  237. </div>
  238. ),
  239. },
  240. {
  241. title: '预警状态',
  242. dataIndex: 'warning_state',
  243. align: 'warning_state',
  244. align: 'center',
  245. render: (warn) => {
  246. return warn == 2 ? (
  247. <div style={{ color: 'red' }}>报警</div>
  248. ) : (
  249. <div>正常</div>
  250. );
  251. },
  252. },
  253. {
  254. title: '预警内容',
  255. dataIndex: 'warning_content',
  256. key: 'warning_content',
  257. align: 'center',
  258. },
  259. ];
  260. const columnsBase = [
  261. {
  262. title: '类型',
  263. dataIndex: 'category_name',
  264. key: 'category_name',
  265. align: 'center',
  266. },
  267. {
  268. title: '名称',
  269. dataIndex: 'name',
  270. key: 'name',
  271. align: 'center',
  272. },
  273. {
  274. title: '型号',
  275. dataIndex: 'model_number',
  276. key: 'model_number',
  277. align: 'center',
  278. },
  279. {
  280. title: '在库',
  281. align: 'center',
  282. render: (record) => {
  283. return (
  284. <div>
  285. {record.in_amount -
  286. record.out_amount -
  287. record.scrap_amount +
  288. record.update_amount}
  289. {record.unit}
  290. </div>
  291. );
  292. },
  293. },
  294. {
  295. title: '入库',
  296. align: 'center',
  297. render: (recode) => (
  298. <div>
  299. {recode.in_amount}
  300. {recode.unit}
  301. </div>
  302. ),
  303. },
  304. {
  305. title: '出库',
  306. align: 'center',
  307. render: (recode) => (
  308. <div>
  309. {recode.out_amount}
  310. {recode.unit}
  311. </div>
  312. ),
  313. },
  314. {
  315. title: '报废',
  316. align: 'center',
  317. render: (recode) => (
  318. <div>
  319. {recode.scrap_amount}
  320. {recode.unit}
  321. </div>
  322. ),
  323. },
  324. {
  325. title: '预警状态',
  326. dataIndex: 'warning_state',
  327. align: 'warning_state',
  328. align: 'center',
  329. render: (warn) => {
  330. return warn == 2 ? (
  331. <div style={{ color: 'red' }}>报警</div>
  332. ) : (
  333. <div>正常</div>
  334. );
  335. },
  336. },
  337. ];
  338. const columnsList = [
  339. columnsIn,
  340. columnsOut,
  341. columnsScrap,
  342. columnsExit,
  343. columnsBase,
  344. ];
  345. const [dataSource, setDataSource] = useState([]);
  346. const [pagination, setPagination] = useState({
  347. current: 1,
  348. total: 0,
  349. pageSize: 20,
  350. });
  351. const isLoadAll = useRef(false);
  352. const bottomAreaOfTable = useRef();
  353. const { run, loading } = useRequest(
  354. (data) => {
  355. data.page = pagination?.current || defaultParams.currentPage;
  356. data.page_size = pagination?.pageSize || defaultParams.pageSize;
  357. return queryStoreList(data);
  358. },
  359. {
  360. manual: true,
  361. formatResult: (result) => {
  362. setDataSource(result?.data);
  363. },
  364. },
  365. );
  366. const { loading: loadingExist, run: runExist } = useRequest(
  367. (data) => {
  368. data.page = pagination?.current || defaultParamsOfExit.currentPage;
  369. data.page_size = pagination?.pageSize || defaultParamsOfExit.pageSize;
  370. return queryInventoryList(data);
  371. },
  372. {
  373. manual: true,
  374. formatResult: (result) => {
  375. setDataSource(result?.data);
  376. },
  377. },
  378. );
  379. useEffect(() => {
  380. Number(type) !== PageType.warning && Number(type) !== PageType.base
  381. ? run(defaultParams)
  382. : runExist(defaultParamsOfExit);
  383. }, [type]);
  384. return (
  385. <PageContent closeable={false}>
  386. <PageTitle children={titles[type]} returnable />
  387. <div className="content-tab" style={{ marginTop: '0.1rem' }}>
  388. {Number(type) !== PageType.warning && Number(type) !== PageType.base ? (
  389. <Table
  390. sticky={{ offsetHeader: 0 }}
  391. loading={loading}
  392. dataSource={dataSource}
  393. columns={columnsList[type]}
  394. pagination={false}
  395. />
  396. ) : (
  397. <Table
  398. sticky={{ offsetHeader: 0 }}
  399. loading={loadingExist}
  400. dataSource={dataSource}
  401. columns={columnsList[type]}
  402. pagination={false}
  403. />
  404. )}
  405. </div>
  406. </PageContent>
  407. );
  408. };
  409. export default SparePartDetail;