ManufacturerList.js 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. import React, { Fragment, useState, useEffect, useRef, useMemo } from 'react';
  2. import { Table, Icon, message, Spin, Button, Form, DatePicker, Modal, Divider, Select, Input } from 'antd';
  3. import { useRequest, useModel } from '@umijs/max';
  4. import FirmModal from './ManufacturerModal';
  5. import dayjs from 'dayjs';
  6. const { RangePicker } = DatePicker;
  7. import { stringify } from 'qs';
  8. const pageSize = 10;
  9. import {
  10. queryMfrList,
  11. queryCreaterList,
  12. editMfr,
  13. deleteMfr,
  14. saveMfr
  15. } from '@/services/manufacturer'
  16. function ManufacturerList(props) {
  17. const {
  18. projectId = 1,
  19. data,
  20. } = props;
  21. const { initialState: { user } } = useModel('@@initialState');
  22. const [visible, setVisible] = useState(false);
  23. const [curItem, setCurItem] = useState(null);
  24. const [formDisabled, setFormDisabled] = useState(false);
  25. const [typeDisabled, setTypeDisabled] = useState(false);
  26. const [total, setTotal] = useState(0);
  27. const [formData, setFormData] = useState({ start_time: "", end_time: "", project_id: projectId * 1, is_super: user?.IsSuper || false, page: 1, page_size: pageSize });
  28. const queryMfrListRequest = useRequest(queryMfrList, {
  29. manual: true,
  30. onSuccess: data => {
  31. console.log(data);
  32. setFormData({ ...formData, page_size: pageSize })
  33. setTotal(data.count);
  34. }
  35. });
  36. const queryCreaterListRequest = useRequest(queryCreaterList, {});
  37. const saveMfrRequest = useRequest(saveMfr, {
  38. manual: true,
  39. onSuccess: () => {
  40. message.success('新增成功');
  41. queryList({ ...formData, page: 1 })
  42. queryCreaterListRequest.run({})
  43. }
  44. });
  45. const editMfrRequest = useRequest(editMfr, {
  46. manual: true,
  47. onSuccess: () => {
  48. message.success('编辑成功');
  49. queryList({ ...formData, page: 1 })
  50. queryCreaterListRequest.run({})
  51. }
  52. });
  53. const deleteMfrRequest = useRequest(deleteMfr, {
  54. manual: true,
  55. onSuccess: () => {
  56. message.success('删除成功');
  57. queryList({ ...formData, page: 1 })
  58. queryCreaterListRequest.run({})
  59. }
  60. });
  61. const loading = useMemo(() => {
  62. var loading = queryMfrListRequest.loading || saveMfrRequest.loading || queryCreaterListRequest.loading || editMfrRequest.loading;
  63. return loading
  64. }, [queryMfrListRequest.loading, saveMfrRequest.loading, queryCreaterListRequest.loading, editMfrRequest.loading]);
  65. const columns = [
  66. {
  67. title: '供应商(自然人)名称',
  68. dataIndex: 'name',
  69. },
  70. {
  71. title: '主体类型',
  72. render: record => {
  73. if (record.type == 1) return '供应商'
  74. if (record.type == 4) return '自然人'
  75. },
  76. width: '6%'
  77. },
  78. {
  79. title: '证件类型',
  80. render: record => {
  81. if (record.id_type == 1) return '身份证'
  82. if (record.id_type == 2) return '护照'
  83. },
  84. width: '6%'
  85. },
  86. {
  87. title: '证件号',
  88. dataIndex: 'id_card',
  89. width: '12%'
  90. },
  91. {
  92. title: '联系人',
  93. render: record => record.contact || '-',
  94. width: '6%'
  95. },
  96. {
  97. title: '联系方式',
  98. render: record => record.phone_number || '-',
  99. width: '10%'
  100. // render: (record) => {
  101. // return moment(record.create_time).format('YYYY-MM-DD')
  102. // }
  103. },
  104. {
  105. title: '银行账号',
  106. dataIndex: 'bank_number',
  107. width: '12%'
  108. },
  109. {
  110. title: '创建人',
  111. dataIndex: 'created_by',
  112. width: '6%'
  113. },
  114. {
  115. title: '创建时间',
  116. render: (record) => {
  117. return dayjs(record.created_on).format('YYYY-MM-DD')
  118. },
  119. width: '8%'
  120. },
  121. {
  122. title: '操作',
  123. render: (text, record) => (
  124. <Fragment>
  125. <>
  126. <a style={{ color: "#4096ff" }} onClick={() => {
  127. setCurItem(record);
  128. setFormDisabled(false);
  129. setTypeDisabled(true);
  130. setVisible(true);
  131. }}>编辑</a>
  132. </>
  133. <>
  134. <Divider type="vertical" />
  135. <a style={{ color: "#4096ff" }} onClick={() => {
  136. handleDeleteItem(record);
  137. }}> 删除</a>
  138. </>
  139. <>
  140. <Divider type="vertical" />
  141. <a style={{ color: "#4096ff" }} onClick={() => {
  142. setCurItem(record);
  143. setVisible(true);
  144. setFormDisabled(true);
  145. }}>详情</a>
  146. </>
  147. </Fragment>
  148. ),
  149. width: '12%'
  150. },
  151. ];
  152. const onCancel = () => {
  153. setVisible(false)
  154. setFormDisabled(false);
  155. }
  156. const handleDeleteItem = record => {
  157. console.log(record);
  158. Modal.confirm({
  159. title: '提醒',
  160. content: `确认该条记录吗?`,
  161. okText: '确认',
  162. cancelText: '取消',
  163. onOk: () => {
  164. deleteMfrRequest.run({ project_id: 1, id: record.id, deleted_by: user?.CName })
  165. },
  166. });
  167. }
  168. const handleExportChange = async () => {
  169. const data = {
  170. project_id: 1,
  171. is_super: user?.IsSuper || false,
  172. created_by: formData.created_by || '',
  173. type: formData.type || undefined
  174. };
  175. window.downloadFile(`/api/supplier/v1/supplier/export?${stringify(data)}`, '供应商列表.xlsx', false);
  176. };
  177. const handleSearch = () => {
  178. console.log(formData);
  179. let value = {
  180. project_id: projectId * 1,
  181. start_time: formData.start_time,
  182. end_time: formData.end_time,
  183. page_size: pageSize,
  184. page: 1,
  185. is_super: user?.IsSuper || false,
  186. created_by: formData.created_by || '',
  187. name: formData.name || '',
  188. type: formData.type * 1 || undefined
  189. }
  190. queryList(value);
  191. }
  192. const queryList = fieldsValue => {
  193. console.log(fieldsValue);
  194. setFormData(fieldsValue);
  195. var isSuper = user?.IsSuper || false;
  196. var created_by = isSuper ? fieldsValue.created_by || '' : user?.CName || undefined
  197. queryMfrListRequest.run({ ...fieldsValue, created_by })
  198. }
  199. const onDateChange = data => {
  200. let start_time = '';
  201. let end_time = '';
  202. if (data?.length > 0) {
  203. start_time = dayjs(data[0]).format('YYYY-MM-DD');
  204. end_time = dayjs(data[1]).format('YYYY-MM-DD');
  205. }
  206. setFormData({ ...formData, start_time: start_time, end_time: end_time })
  207. }
  208. const onOk = fieldsValue => {
  209. console.log(fieldsValue);
  210. setVisible(false);
  211. if (curItem != null)
  212. editMfrRequest.run({ ...fieldsValue, project_id: 1, updated_by: user?.CName, id: curItem.id })
  213. else
  214. saveMfrRequest.run({ ...fieldsValue, project_id: 1, created_by: user?.CName })
  215. }
  216. const onChange = name => {
  217. setFormData({ ...formData, created_by: name })
  218. }
  219. const onTypeChange = type => {
  220. setFormData({ ...formData, type: type })
  221. }
  222. const onPaginationChange = pagination => {
  223. var tempFormData = { ...formData, page: pagination.current }
  224. setFormData(tempFormData)
  225. queryList(tempFormData);
  226. }
  227. const onInputChange = e => {
  228. setFormData({ ...formData, name: e.target.value })
  229. }
  230. useEffect(() => {
  231. queryList({ ...formData })
  232. }, []);
  233. return (
  234. <>
  235. <Form>
  236. <div style={{ display: 'flex', flexWrap: 'wrap' }}>
  237. <div style={{ margin: '0 24px' }}>
  238. <Form.Item label="日期:">
  239. <RangePicker onChange={onDateChange} />
  240. </Form.Item>
  241. </div>
  242. {
  243. user?.IsSuper && <div>
  244. <Form.Item label="主体类型:">
  245. <Select
  246. onChange={onTypeChange}
  247. options={
  248. [
  249. { value: 1, label: '供应商' },
  250. { value: 4, label: '自然人' },
  251. ]
  252. }
  253. style={{ width: 180 }}
  254. allowClear
  255. />
  256. </Form.Item>
  257. </div>
  258. }
  259. <div style={{ margin: '0 24px' }}>
  260. <Form.Item label="名称:">
  261. <Input placeholder="请输入供应商名称" onChange={e => { onInputChange(e) }} />
  262. </Form.Item>
  263. </div>
  264. {
  265. user?.IsSuper && <div>
  266. <Form.Item label="创建人:">
  267. <Select
  268. onChange={onChange}
  269. options={queryCreaterListRequest?.data?.list || []}
  270. style={{ width: 180 }}
  271. allowClear
  272. />
  273. </Form.Item>
  274. </div>
  275. }
  276. <div style={{ display: 'flex' }}>
  277. <Form.Item>
  278. <Button style={{ marginLeft: 24 }} type="primary" onClick={() => { handleSearch() }}>
  279. 查询
  280. </Button>
  281. </Form.Item>
  282. <Button style={{ marginLeft: 10 }} loading={loading} type="primary" onClick={() => {
  283. setCurItem(null);
  284. setVisible(true);
  285. setTypeDisabled(false);
  286. }}>
  287. 新增
  288. </Button>
  289. <Button style={{ marginLeft: 10 }} loading={loading} onClick={() => handleExportChange()} type="primary">
  290. 导出
  291. </Button>
  292. </div>
  293. </div>
  294. </Form>
  295. <Table
  296. rowKey='id'
  297. loading={loading}
  298. columns={columns}
  299. dataSource={queryMfrListRequest?.data?.list}
  300. pagination={{ current: formData.page, total: total, page_size: pageSize }}
  301. onChange={onPaginationChange}
  302. />
  303. <FirmModal
  304. projectId={projectId}
  305. visible={visible}
  306. onCancel={onCancel}
  307. onOk={onOk}
  308. item={curItem}
  309. disabled={formDisabled}
  310. typeDisabled={typeDisabled}
  311. ></FirmModal>
  312. </>
  313. )
  314. }
  315. export default ManufacturerList;