index.jsx 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. import React, { useState, useEffect } from 'react';
  2. import { Tree, Row, Col, Popconfirm, Card, Form, Input, Select, Button, message } from 'antd';
  3. import { PageHeaderWrapper } from '@ant-design/pro-layout';
  4. import { getRegionList } from '@/services/region';
  5. import {
  6. getCooperativeList,
  7. deleteCooperative,
  8. addCooperative,
  9. getCooperativeDetail,
  10. updateCooperative,
  11. } from '@/services/cooperative';
  12. import POI from '@/components/POI/POI';
  13. import { CloseOutlined } from '@ant-design/icons';
  14. import './index.less';
  15. const FormItem = Form.Item;
  16. const { TextArea } = Input;
  17. const { Option } = Select;
  18. const formItemLayout = { labelCol: { span: 6 }, wrapperCol: { span: 14 } };
  19. export default (props) => {
  20. //列表数据
  21. const [data, setData] = useState([]);
  22. //合作社Id
  23. const [orgId, setOrgId] = useState('');
  24. const [form] = Form.useForm();
  25. //合作社表单数据
  26. const [listForm, setListForm] = useState({});
  27. //确定按钮loading框防连点
  28. const [loading, setLoading] = useState(false);
  29. //记录定位信息
  30. const [newLocName, setLocName] = useState('');
  31. const [newAddress, setAddress] = useState('');
  32. //合作社所属区域列表
  33. const [regionList, setRegionList] = useState([]);
  34. //选中左侧列表右侧显示详情
  35. const handleslect = (val) => {
  36. setOrgId(val);
  37. };
  38. const handleDelete = (val) => {
  39. deleteCooperative(val).then(() => {
  40. message.success('删除成功');
  41. setOrgId();
  42. handelReset();
  43. }).catch((err) => {
  44. console.log(err.message)
  45. });
  46. };
  47. // 刷新左侧列表
  48. const handelReset = () => {
  49. setData([]);
  50. getCooperativeList({ pageSize: 999 })
  51. .then((res) => {
  52. const list = res.records?.map((item) => {
  53. return { title: item.name, key: item.orgId };
  54. });
  55. setData(list);
  56. })
  57. .catch((err) => {
  58. message.error(err.message || err);
  59. });
  60. };
  61. // 动态生成树
  62. const handelNode = (item) => {
  63. let node = (
  64. <div
  65. key={item.orgId}
  66. style={{ justifyContent: 'space-between', display: 'flex', padding: '8px 0' }}
  67. onClick={() => handleslect(item.key)}
  68. >
  69. <span>{item.title}</span>
  70. <Popconfirm
  71. title="您是否确认删除 ?"
  72. onConfirm={() => handleDelete(item.key)}
  73. okText="确定"
  74. cancelText="取消"
  75. >
  76. <CloseOutlined style={{ color: 'red', display: 'grid', placeItems: 'center' }} />
  77. </Popconfirm>
  78. </div>
  79. );
  80. return node;
  81. };
  82. //提交表单
  83. const Submit = (data) => {
  84. setLoading(true);
  85. if (orgId) {
  86. updateCooperative(orgId, {
  87. ...listForm,
  88. ...data,
  89. lng: data.location.split(',')[0],
  90. lat: data.location.split(',')[1],
  91. })
  92. .then(() => {
  93. setLoading(false);
  94. message.success('数据更新成功');
  95. handelReset();
  96. })
  97. .catch((err) => {
  98. setLoading(false);
  99. message.error(err.message || err);
  100. });
  101. } else {
  102. addCooperative({
  103. ...data,
  104. lng: data.location.split(',')[0],
  105. lat: data.location.split(',')[1],
  106. })
  107. .then((res) => {
  108. setLoading(false);
  109. message.success('数据保存成功');
  110. handelReset();
  111. })
  112. .catch((err) => {
  113. setLoading(false);
  114. message.error(err.message || err);
  115. });
  116. }
  117. };
  118. useEffect(() => {
  119. handelReset();
  120. getRegionList()
  121. .then((res) => {
  122. setRegionList(res.records || []);
  123. })
  124. .catch((err) => {
  125. message.error(err.message || err);
  126. });
  127. }, []);
  128. useEffect(() => {
  129. if (orgId) {
  130. getCooperativeDetail(orgId)
  131. .then((res) => {
  132. setListForm(res || []);
  133. form.setFieldsValue({ ...res, location: res.lng + ',' + res.lat });
  134. })
  135. .catch((err) => {
  136. message.error(err.message || err);
  137. });
  138. } else {
  139. setListForm();
  140. form.resetFields();
  141. }
  142. }, [orgId]);
  143. return (
  144. <PageHeaderWrapper>
  145. <Row gutter={16}>
  146. <Col span={8}>
  147. <Card
  148. title="列表"
  149. extra={
  150. <Button type='link' onClick={() => setOrgId()}>
  151. 添加
  152. </Button>
  153. }
  154. >
  155. <Tree className="treeClass" titleRender={(data) => handelNode(data)} treeData={data} />
  156. </Card>
  157. </Col>
  158. <Col span={16}>
  159. <Card title="详情">
  160. <Form {...formItemLayout} onFinish={Submit} form={form}>
  161. <FormItem
  162. label="合作社名"
  163. name="name"
  164. rules={[{ required: true, message: '请输入合作社名称16个字符以内' }]}
  165. >
  166. <Input
  167. placeholder="请输入合作社名称16个字符以内"
  168. maxLength="16"
  169. style={{ width: '350px' }}
  170. />
  171. </FormItem>
  172. <FormItem label="信用代码" name="creditCode">
  173. <Input placeholder="请输入信用代码" style={{ width: '350px' }} />
  174. </FormItem>
  175. <FormItem
  176. label="联系人"
  177. name="contactPerson"
  178. rules={[{ required: true, message: '请输入联系人' }]}
  179. >
  180. <Input placeholder="请输入联系人" rows={4} style={{ width: '350px' }} />
  181. </FormItem>
  182. <FormItem
  183. label="联系方式"
  184. name="phone"
  185. rules={[{ required: true, message: '请输入联系方式' }]}
  186. >
  187. <Input placeholder="请输入联系方式" style={{ width: '350px' }} />
  188. </FormItem>
  189. <FormItem
  190. label="定位经纬"
  191. name="location"
  192. rules={[{ required: true, message: '请定位' }]}
  193. >
  194. <POI
  195. placeholder="定位"
  196. setLocName={setLocName}
  197. setAddress={setAddress}
  198. roomBoole={true}
  199. />
  200. </FormItem>
  201. <FormItem
  202. label="地址"
  203. name="address"
  204. rules={[{ required: true, message: '请输入地址' }]}
  205. >
  206. <TextArea placeholder="请输入地址" style={{ width: '350px' }} />
  207. </FormItem>
  208. <FormItem
  209. label="区域"
  210. name="regionId"
  211. rules={[{ required: true, message: '请输入区域' }]}
  212. >
  213. <Select placeholder="请选择区域" style={{ width: '350px' }}>
  214. {regionList.map((item) => (
  215. <Option value={item.regionId} key={item.regionId}>
  216. {item.name}
  217. </Option>
  218. ))}
  219. </Select>
  220. </FormItem>
  221. <FormItem label="员工数">{listForm?.workerNum || 0}</FormItem>
  222. <FormItem label="农机数">{listForm?.machineryNum || 0}</FormItem>
  223. <FormItem label="订单完成数">{listForm?.orderNum || 0}</FormItem>
  224. <FormItem label=" " colon={false}>
  225. <Button type="primary" loading={loading} htmlType="submit">
  226. 保存
  227. </Button>
  228. </FormItem>
  229. </Form>
  230. </Card>
  231. </Col>
  232. </Row>
  233. </PageHeaderWrapper>
  234. );
  235. };