停车场项目web, 互联网仓库, 开发完成后, 需要将代码回传云桌面.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2819 lines
81 KiB

  1. import React, {
  2. useState,
  3. useEffect,
  4. useRef,
  5. useImperativeHandle,
  6. forwardRef,
  7. } from "react";
  8. import { useLocation, useNavigate } from "react-router-dom";
  9. import {
  10. message,
  11. Form,
  12. Pagination,
  13. Table,
  14. Space,
  15. Modal,
  16. Button,
  17. Select,
  18. Row,
  19. Col,
  20. Tabs,
  21. Input,
  22. Upload,
  23. Checkbox,
  24. Tag,
  25. Radio,
  26. Descriptions,
  27. Popover,
  28. Transfer,
  29. } from "antd";
  30. import { UploadOutlined } from "@ant-design/icons";
  31. import ajax from "@/services";
  32. import moment from "moment";
  33. import { dictionary, utils } from "@/config/common";
  34. import {
  35. FormSelect,
  36. ExportBtnNew,
  37. ExportPMS,
  38. OptionPanel,
  39. SystemSearch,
  40. ResultPanel,
  41. FormSliderPicker,
  42. SelectGaodeLngLat,
  43. ResultFlow,
  44. AreaCascader,
  45. ImgResize,
  46. ImgZoom,
  47. TreeSelectGroup,
  48. } from "@/components";
  49. import "./index.scss";
  50. import { getToken } from "@/config/cookie";
  51. import { useSetState, useSessionStorageState, useUpdateEffect } from "ahooks";
  52. const { TextArea } = Input;
  53. const ConfigRoad = (props) => {
  54. const {
  55. getRecordList = {}
  56. } = props
  57. console.log(getRecordList);
  58. const navigate = useNavigate();
  59. //编辑泊位提交的编辑泊位
  60. const location = useLocation();
  61. const parking_id = getRecordList.id;
  62. const operator_id = getRecordList.operator_id;
  63. // const region_id = location.search.split("&")[2].split("=")[1];
  64. const [modalBtnLoading, setModalBtnLoading] = useState(false)
  65. //泊位管理Form
  66. const [berthForm] = Form.useForm();
  67. const [dataForm] = Form.useForm();
  68. const [editPoleForm] = Form.useForm();
  69. const [ruleForm] = Form.useForm(); //计费规则-添加或编辑规则的Form
  70. const [getEditData, setGetEditData] = useState({})
  71. const [getIdValue, setGetIdValue] = useState({})
  72. //计费规则添加弹窗的泊位选择框
  73. const [showBerthSelect, setShowBerthSelect] = useState(false);
  74. //编辑杆位
  75. const [editTitle, setEditTitle] = useState(false)
  76. const berthManage = {
  77. form: [
  78. {
  79. label: "泊位号",
  80. type: "input",
  81. placeholder: "请输入泊位号",
  82. name: "berth_code",
  83. },
  84. {
  85. label: "视频设备名称",
  86. type: "input",
  87. placeholder: "请输入内容",
  88. name: "video_content",
  89. },
  90. ],
  91. columns: [
  92. {
  93. title: "泊位排序",
  94. dataIndex: "index",
  95. key: "index",
  96. align: "center",
  97. render: (_, record, index) => {
  98. return index + 1;
  99. },
  100. },
  101. {
  102. title: "泊位号",
  103. dataIndex: "berth_code",
  104. key: "berth_code",
  105. align: "center",
  106. },
  107. {
  108. title: "ETC是否开启",
  109. dataIndex: "etc_status_name",
  110. key: "etc_status_name",
  111. align: "center",
  112. },
  113. {
  114. title: "对应视频设备",
  115. dataIndex: "video_equipment_name",
  116. key: "video_equipment_name",
  117. align: "center",
  118. },
  119. {
  120. title: "计费规则",
  121. dataIndex: "rule_id",
  122. key: "rule_id",
  123. align: "center",
  124. },
  125. {
  126. title: "经纬度",
  127. dataIndex: "lng_lat",
  128. key: "lng_lat",
  129. align: "center",
  130. },
  131. {
  132. title: "服务属性",
  133. dataIndex: "service_type_name",
  134. key: "service_type_name",
  135. align: "center",
  136. },
  137. {
  138. title: "状态",
  139. dataIndex: "status",
  140. key: "status",
  141. align: "center",
  142. render: (text) => {
  143. return text == 1 ? "上线" : text == 2 ? "下线" : "已删除";
  144. },
  145. },
  146. {
  147. title: "更新时间",
  148. dataIndex: "update_time",
  149. key: "update_time",
  150. align: "center",
  151. },
  152. {
  153. title: "操作",
  154. dataIndex: "operator",
  155. key: "operator",
  156. align: "center",
  157. render: (_, record) => {
  158. return (
  159. <>
  160. <Popover
  161. content={
  162. <>
  163. <div>
  164. <a
  165. onClick={() => {
  166. setBerthModal({ record, visible: true });
  167. }}
  168. >
  169. 查看
  170. </a>
  171. </div>
  172. <div>
  173. <a
  174. onClick={() => {
  175. setIsEdit(true);
  176. setEditBerthModal(true);
  177. setGetEditData(record);
  178. berthForm.setFieldsValue({
  179. berth_code: record.berth_code,
  180. service_type: record.service_type,
  181. berth_type: record.berth_type,
  182. etc_status: record.etc_status,
  183. });
  184. setLngLat(record.lng_lat);
  185. }}
  186. >
  187. 编辑
  188. </a>
  189. </div>
  190. <div>
  191. <a
  192. onClick={() => {
  193. setConfirmModalData({
  194. ...confirmModalData,
  195. visible: true,
  196. type: record.status == 1 ? 2 : 1,
  197. ids: [record.id],
  198. func: (ids, status) =>
  199. ajax.editStatus({
  200. ids: ids,
  201. status,
  202. })
  203. });
  204. // console.log(record.status);
  205. }}
  206. >
  207. {record.status == 1 ? "下线" : "上线"}
  208. </a>
  209. </div>
  210. <div>
  211. <a
  212. onClick={() => {
  213. setConfirmModalData({
  214. ...confirmModalData,
  215. visible: true,
  216. type: 3,
  217. ids: [record.id],
  218. func: (ids, status) =>
  219. ajax.editStatus({
  220. ids: ids,
  221. status,
  222. })
  223. });
  224. }}
  225. >
  226. 删除
  227. </a>
  228. </div>
  229. </>
  230. }
  231. >
  232. <Button type="primary">操作</Button>
  233. </Popover>
  234. </>
  235. );
  236. },
  237. },
  238. ],
  239. confirmModalData: {
  240. visible: false,
  241. type: 1, //1上线 2下线 3 删除
  242. ids: [],
  243. },
  244. initialValues: {
  245. berth_id: "",
  246. video_content: "",
  247. },
  248. exporturl: "/api/bpm/berth/export",
  249. downloadUrl: "api/bpm/berth/berth_import_template",
  250. importProps: {
  251. name: "file",
  252. data: { road_id: parking_id },
  253. action: "/PMS/api/bpm/berth/import",
  254. headers: {
  255. Authorization: getToken(),
  256. },
  257. onChange(info) {
  258. if (info.file.status !== "uploading") {
  259. console.log(info.file, info.fileList);
  260. }
  261. if (info.file.status === "done") {
  262. if (info.file.response.status === 20000) {
  263. message.success(`${info.file.name} 上传成功`);
  264. formRef.current.getList();
  265. } else {
  266. message.error(info.file.response.message);
  267. }
  268. } else if (info.file.status === "error") {
  269. message.error(`${info.file.name} file upload failed.`);
  270. }
  271. },
  272. },
  273. search: function (params) {
  274. ajax
  275. .getManageList(params)
  276. .then((res) => {
  277. if (res.status === 20000) {
  278. setResultData({
  279. data: res.data.list,
  280. total_records: res.data.total,
  281. });
  282. setLoading(false)
  283. } else {
  284. message.error(res.message);
  285. }
  286. })
  287. .catch((err) => {
  288. console.log(err);
  289. });
  290. },
  291. key: "berth_code",
  292. create: function (params) {
  293. setIsEdit(false);
  294. berthForm.resetFields();
  295. setEditBerthModal(true);
  296. },
  297. };
  298. const [transferSouceData, setTransferSouceData] = useState([]);
  299. //数据采集设备管理
  300. const dataDevice = {
  301. form: [
  302. {
  303. label: "设备名称",
  304. type: "input",
  305. placeholder: "请输入内容",
  306. name: "device_name",
  307. },
  308. {
  309. label: "设备编号",
  310. type: "input",
  311. placeholder: "请输入内容",
  312. name: "device_id",
  313. },
  314. {
  315. label: "对应杆位号",
  316. type: "input",
  317. placeholder: "请输入内容",
  318. name: "num",
  319. },
  320. {
  321. label: "状态",
  322. type: "select",
  323. placeholder: "请输入内容",
  324. name: "status",
  325. options: [
  326. {
  327. label: "上线",
  328. value: 1,
  329. },
  330. {
  331. label: "下线",
  332. value: 2,
  333. },
  334. ],
  335. },
  336. ],
  337. columns: [
  338. {
  339. title: "设备名称",
  340. dataIndex: "name",
  341. key: "name",
  342. align: "center",
  343. },
  344. {
  345. title: "设备号",
  346. dataIndex: "code",
  347. key: "code",
  348. align: "center",
  349. },
  350. {
  351. title: "设备类型",
  352. dataIndex: "type_name",
  353. key: "type_name",
  354. align: "center",
  355. },
  356. {
  357. title: "对应杆位号",
  358. dataIndex: "pole_position_code",
  359. key: "pole_position_code",
  360. align: "center",
  361. },
  362. {
  363. title: "状态",
  364. dataIndex: "operate_status",
  365. key: "operate_status",
  366. align: "center",
  367. },
  368. {
  369. title: "更新时间",
  370. dataIndex: "update_time",
  371. key: "update_time",
  372. align: "center",
  373. },
  374. {
  375. title: "操作",
  376. dataIndex: "operator",
  377. key: "operator",
  378. align: "center",
  379. render: (_, record) => {
  380. return (
  381. <Popover
  382. trigger="hover"
  383. content={
  384. <>
  385. <div>
  386. <a
  387. onClick={() => {
  388. ajax.getDeviceInfo({ id: record.id }).then((res) => {
  389. if (res.status === 20000) {
  390. setDataAcquistionDetail({
  391. visible: true,
  392. record: res.data,
  393. });
  394. } else {
  395. message.error(res.message);
  396. }
  397. });
  398. }}
  399. >
  400. 查看
  401. </a>
  402. </div>
  403. <div>
  404. <a
  405. onClick={() => {
  406. setGetIdValue(record.id);
  407. setDataAcquistionModal({
  408. ...dataAcquistionModal,
  409. visible: true,
  410. record: record,
  411. isEdit: 1,
  412. });
  413. getEditInRoad(record);
  414. dataAcquistionModal.form.setFieldsValue({
  415. name: record.name,
  416. code: record.code,
  417. type: record.type_id,
  418. brand: record.brand_id,
  419. function: record.function_id,
  420. note: record.note,
  421. });
  422. }}
  423. >
  424. 编辑
  425. </a>
  426. </div>
  427. <div>
  428. <a
  429. onClick={() => {
  430. setDataStatusChangeModal({
  431. visible: true,
  432. type: record.status === 1 ? 2 : 1,
  433. record: record,
  434. });
  435. }}
  436. >
  437. {record.status === 1 ? "下线" : "上线"}
  438. </a>
  439. </div>
  440. <div>
  441. <a
  442. onClick={() => {
  443. setDataStatusChangeModal({
  444. visible: true,
  445. type: 3,
  446. record: record,
  447. });
  448. }}
  449. >
  450. 删除
  451. </a>
  452. </div>
  453. </>
  454. }
  455. >
  456. <Button type="primary">操作</Button>
  457. </Popover>
  458. );
  459. },
  460. },
  461. ],
  462. exporturl: "/api/bpm/device/export_device",
  463. downloadUrl: "/api/bpm/device/device_import_template",
  464. importProps: {
  465. name: "file",
  466. data: { road_id: parking_id },
  467. headers: {
  468. Authorization: getToken(),
  469. },
  470. action: "/PMS/api/bpm/device/import_device",
  471. onChange(info) {
  472. if (info.file.status !== "uploading") {
  473. console.log(info.file, info.fileList);
  474. }
  475. if (info.file.status === "done") {
  476. if (info.file.response.status === 20000) {
  477. message.success(`${info.file.name} 上传成功`);
  478. formRef.current.getList();
  479. } else {
  480. message.error(info.file.response.message);
  481. }
  482. } else if (info.file.status === "error") {
  483. message.error(`${info.file.name} file upload failed.`);
  484. }
  485. },
  486. },
  487. key: "id",
  488. search: function (params) {
  489. ajax
  490. .getDeviceDimensionList(params)
  491. .then((res) => {
  492. if (res.status === 20000) {
  493. setResultData({
  494. data: res.data.list,
  495. total_records: res.data.total,
  496. });
  497. setLoading(false)
  498. } else {
  499. message.error(res.message);
  500. }
  501. })
  502. .catch((err) => console.error(err));
  503. },
  504. create: function (params) {
  505. getAllBerth();
  506. setDataAcquistionModal({
  507. ...dataAcquistionModal,
  508. visible: true,
  509. isEdit: 0,
  510. });
  511. dataAcquistionModal.form.resetFields();
  512. },
  513. };
  514. //杆位管理
  515. const poleManage = {
  516. form: [
  517. {
  518. label: "杆位号",
  519. type: "input",
  520. placeholder: "请输入内容",
  521. name: "pole_content",
  522. },
  523. ],
  524. columns: [
  525. {
  526. title: "杆位号",
  527. dataIndex: "code",
  528. width: 180,
  529. key: "code",
  530. align: "center",
  531. },
  532. {
  533. title: "更新时间",
  534. dataIndex: "update_time",
  535. width: 180,
  536. key: "update_time",
  537. align: "center",
  538. },
  539. {
  540. title: "操作",
  541. width: 180,
  542. dataIndex: "operator",
  543. key: "operator",
  544. align: "center",
  545. render: (_, record) => {
  546. return (
  547. <Popover
  548. trigger="hover"
  549. content={
  550. <>
  551. <div>
  552. <a
  553. onClick={() => {
  554. ajax.getPoleInfo({ id: record.id }).then((res) => {
  555. if (res.status === 20000) {
  556. setCheckPoleModal({
  557. visible: true,
  558. record: res.data,
  559. });
  560. }
  561. });
  562. }}
  563. >
  564. 查看
  565. </a>
  566. </div>
  567. <div>
  568. <a
  569. onClick={() => {
  570. getEditRoadDevice(record)
  571. getDevice(record)
  572. ajax.getPoleInfo({ id: record.id }).then((res) => {
  573. setEditTitle(true)
  574. if (res.status === 20000) {
  575. const { data } = res;
  576. let videoIds = [];
  577. if (
  578. data.video_device_ids !== null &&
  579. data.video_device_ids !== ""
  580. ) {
  581. videoIds = data.video_device_ids
  582. .split(",")
  583. .map((item) => +item);
  584. }
  585. let monitorIds = [];
  586. if (
  587. data.monitor_device_ids !== null &&
  588. data.monitor_device_ids !== ""
  589. ) {
  590. monitorIds = data.monitor_device_ids
  591. .split(",")
  592. .map((item) => +item);
  593. }
  594. setEditPoleModal({
  595. ...editPoleModal,
  596. visible: true,
  597. record: data,
  598. isEdit: 1,
  599. });
  600. editPoleForm.setFieldsValue({
  601. code: data.code,
  602. has_pole: data.has_pole,
  603. video_device_ids: videoIds,
  604. monitor_device_ids: monitorIds,
  605. });
  606. setLngLatModal({
  607. ...lngLatModal,
  608. value: data.lng_lat,
  609. });
  610. }
  611. });
  612. }}
  613. >
  614. 编辑
  615. </a>
  616. </div>
  617. <div>
  618. <a
  619. onClick={() => {
  620. setPoleModal({ visible: true, id: [record.id] });
  621. }}
  622. >
  623. 删除
  624. </a>
  625. </div>
  626. </>
  627. }
  628. >
  629. <Button type="primary">操作</Button>
  630. </Popover>
  631. );
  632. },
  633. },
  634. ],
  635. key: "id",
  636. exporturl: "/api/bpm/device/export_pole_position",
  637. downloadUrl: "/api/bpm/device/road_set_pole_position_import_template",
  638. importProps: {
  639. name: "file",
  640. action: "/PMS/api/bpm/device/road_set_import_pole_position",
  641. data: { road_id: parking_id },
  642. headers: {
  643. Authorization: getToken(),
  644. },
  645. onChange(info) {
  646. if (info.file.status !== "uploading") {
  647. console.log(info.file, info.fileList);
  648. }
  649. if (info.file.status === "done") {
  650. if (info.file.response.status === 20000) {
  651. message.success(`${info.file.name} 上传成功`);
  652. formRef.current.getList();
  653. } else {
  654. message.error(info.file.response.message);
  655. }
  656. } else if (info.file.status === "error") {
  657. message.error(`${info.file.name} file upload failed.`);
  658. }
  659. },
  660. },
  661. search: function (params) {
  662. ajax
  663. .getPoleListData(params)
  664. .then((res) => {
  665. if (res.status === 20000) {
  666. setResultData({
  667. data: res.data.list,
  668. total_records: res.data.total,
  669. });
  670. setLoading(false)
  671. } else {
  672. message.error(res.message);
  673. }
  674. })
  675. .catch((err) => console.error(err));
  676. },
  677. create: function (params) {
  678. setEditTitle(false)
  679. getRoadDevice(parking_id);
  680. getRoadMonitorDevice(parking_id);
  681. console.log(12122);
  682. setEditPoleModal({
  683. ...editPoleModal,
  684. visible: true,
  685. record: {},
  686. isEdit: 0,
  687. });
  688. editPoleForm.resetFields();
  689. setLngLatModal({
  690. ...lngLatModal,
  691. value: [],
  692. });
  693. },
  694. };
  695. useEffect(() => {
  696. getAllBerth();
  697. }, [currentObj]);
  698. //计费规则
  699. const billingRule = {
  700. form: [
  701. {
  702. label: "计费规则",
  703. type: "select",
  704. name: "rule",
  705. options: billRuleList,
  706. },
  707. ],
  708. columns: [
  709. {
  710. title: "序号",
  711. dataIndex: "index",
  712. key: "index",
  713. align: "center",
  714. render: (_, record, index) => {
  715. return index + 1;
  716. },
  717. },
  718. {
  719. title: "规则名称",
  720. dataIndex: "rule_name",
  721. key: "rule_name",
  722. align: "center",
  723. },
  724. {
  725. title: "车辆类型",
  726. dataIndex: "vehicle_type_name",
  727. key: "vehicle_type_name",
  728. align: "center",
  729. },
  730. {
  731. title: "计费说明",
  732. dataIndex: "note",
  733. key: "note",
  734. align: "center",
  735. },
  736. {
  737. title: "是否按泊位计费",
  738. dataIndex: "berth_ids",
  739. key: "berth_ids",
  740. align: "center",
  741. render: (text) => {
  742. return text === "" ? "否" : "是";
  743. },
  744. },
  745. {
  746. title: "更新时间",
  747. dataIndex: "update_time",
  748. key: "update_time",
  749. align: "center",
  750. },
  751. {
  752. title: "操作",
  753. dataIndex: "operator",
  754. key: "operator",
  755. align: "center",
  756. render: (_, record) => {
  757. return (
  758. <Popover
  759. trigger="hover"
  760. content={
  761. <>
  762. <div>
  763. <a
  764. onClick={() => {
  765. setCurRuleRecord(record);
  766. setRuleDetailModal(true);
  767. }}
  768. >
  769. 查看
  770. </a>
  771. </div>
  772. <div>
  773. <a
  774. onClick={() => {
  775. setCurRuleRecord(record);
  776. console.log(record);
  777. ruleForm.setFieldsValue({
  778. vehicle_type: record.vehicle_type,
  779. rule_id: record.rule_id,
  780. is_select: record.berth_ids === "" ? 0 : 1,
  781. id: record.id
  782. });
  783. // setSelectedBerth(record.berth_ids.split(",").map(item => +item))
  784. setRuleModal(true);
  785. // setIsRuleEdit(true);
  786. setIsRuleEdit(true);
  787. setShowBerthSelect(false);
  788. if (record.berth_ids != '') {
  789. setShowBerthSelect(true);
  790. setIsRuleEdit(true);
  791. }
  792. // }
  793. let data = {
  794. road_id: parking_id,
  795. vehicle_type: record.vehicle_type,
  796. id: record.id
  797. }
  798. ajax
  799. .getRuleBerth(data)
  800. .then((res) => {
  801. if (res.status === 20000) {
  802. res.data.left.map(item => {
  803. item.key = item.value
  804. return item
  805. })
  806. setAllBerthList(res.data.left);
  807. setSelectedBerth(res.data.right)
  808. console.log(res.data.list);
  809. } else {
  810. message.error(res.message)
  811. }
  812. })
  813. }}
  814. >
  815. 编辑
  816. </a>
  817. </div>
  818. <div>
  819. <a
  820. onClick={() => {
  821. setCurRuleRecord(record);
  822. setRuleDelModal({ id: record.id, visible: true });
  823. }}
  824. >
  825. 删除
  826. </a>
  827. </div>
  828. </>
  829. }
  830. >
  831. <Button type="primary">操作</Button>
  832. </Popover>
  833. );
  834. },
  835. },
  836. ],
  837. exporturl: "",
  838. downloadUrl: "",
  839. importProps: {
  840. name: "file",
  841. action: "/PMS/api/bpm/berth/import",
  842. onChange(info) {
  843. if (info.file.status !== "uploading") {
  844. console.log(info.file, info.fileList);
  845. }
  846. if (info.file.status === "done") {
  847. if (info.file.response.status === 20000) {
  848. message.success(`${info.file.name} 上传成功`);
  849. } else {
  850. message.error(info.file.response.message);
  851. }
  852. } else if (info.file.status === "error") {
  853. message.error(`${info.file.name} file upload failed.`);
  854. }
  855. },
  856. },
  857. key: "rule_name",
  858. search: function (params) {
  859. ajax
  860. .getRoadRuleList(params)
  861. .then((res) => {
  862. if (res.status === 20000) {
  863. setResultData({
  864. data: res.data.list,
  865. total_records: res.data.total,
  866. });
  867. setLoading(false)
  868. } else {
  869. message.error(res.message);
  870. }
  871. })
  872. .catch((err) => console.error(err));
  873. },
  874. create: function () {
  875. setCurRuleRecord({
  876. vehicle_type: null,
  877. rule_id: null,
  878. is_select: 0,
  879. });
  880. setShowBerthSelect(false);
  881. ruleForm.setFieldsValue({
  882. vehicle_type: null,
  883. rule_id: null,
  884. is_select: 0,
  885. });
  886. setIsRuleEdit(false);
  887. setRuleModal(true);
  888. },
  889. };
  890. //form子组件
  891. const formRef = React.useRef();
  892. //收费员管理
  893. const tollCollector = {
  894. form: [
  895. {
  896. label: "收费员姓名",
  897. type: "input",
  898. placeholder: "请输入内容",
  899. name: "collect_name",
  900. },
  901. {
  902. label: "登陆名",
  903. type: "input",
  904. placeholder: "请输入内容",
  905. name: "login_name",
  906. },
  907. ],
  908. columns: [
  909. {
  910. title: "收费员姓名",
  911. dataIndex: "name",
  912. key: "name",
  913. align: "center",
  914. },
  915. {
  916. title: "员工编号",
  917. dataIndex: "number",
  918. key: "number",
  919. align: "center",
  920. },
  921. {
  922. title: "PDA账号",
  923. dataIndex: "pda_number",
  924. key: "pda_number",
  925. align: "center",
  926. },
  927. {
  928. title: "操作",
  929. dataIndex: "operator",
  930. key: "operator",
  931. align: "center",
  932. render: (_, record) => {
  933. return (
  934. <Popover
  935. trigger="hover"
  936. content={
  937. <div>
  938. <a
  939. onClick={() => {
  940. setDelTollModal({
  941. ...delTollModal,
  942. visible: true,
  943. id: record.id,
  944. });
  945. }}
  946. >
  947. 删除
  948. </a>
  949. </div>
  950. }
  951. >
  952. <Button type="primary">操作</Button>
  953. </Popover>
  954. );
  955. },
  956. },
  957. ],
  958. initialValues: {
  959. collect_name: "",
  960. login_name: "",
  961. },
  962. exporturl: "",
  963. key: "number",
  964. search: function (params) {
  965. ajax
  966. .getTollList(params)
  967. .then((res) => {
  968. if (res.status === 20000) {
  969. setResultData({
  970. data: res.data.list,
  971. total_records: res.data.total,
  972. });
  973. setLoading(false)
  974. } else {
  975. message.error(res.message);
  976. }
  977. })
  978. .catch((err) => console.error(err));
  979. },
  980. create: function (params) {
  981. setTollModal(true);
  982. },
  983. };
  984. //目前页面的对象
  985. const [currentObj, setCurrentObj] = useState(berthManage);
  986. const [type, setType] = useState(1);
  987. const [loading, setLoading] = useState(false);
  988. const [resultData, setResultData] = useSetState({
  989. // 请求结果
  990. total_records: 0,
  991. data: [],
  992. });
  993. //批量导入弹窗
  994. const [importGroup, setImportGroup] = useState({
  995. visible: false,
  996. imPortUrl: "",
  997. });
  998. //泊位弹窗
  999. const [berthModal, setBerthModal] = useState({
  1000. visible: false,
  1001. record: {},
  1002. });
  1003. //编辑泊位弹窗
  1004. const [editBerthModal, setEditBerthModal] = useState(false);
  1005. //是编辑还是添加的标志
  1006. const [isEdit, setIsEdit] = useState(true);
  1007. //经纬度弹窗和经纬度数据
  1008. const [lngLatVisible, setLngLatVisible] = useState(false);
  1009. const [lngLat, setLngLat] = useState([]);
  1010. //操作选中的数据
  1011. const [selectedRowKeys, setSelectedRowKeys] = useState([]);
  1012. const [pageData, setPageData] = useSetState({
  1013. // 分页参数
  1014. pn: 1,
  1015. page_size: 20,
  1016. });
  1017. //收费员弹窗
  1018. const [tollModal, setTollModal] = useState(false);
  1019. //可以选择的收费员列表
  1020. const [canSelectTollList, setCanSelectTollList] = useState([]);
  1021. //已选择的收费员列表
  1022. const [hasSelectTollList, setHasSelectTollList] = useState([]);
  1023. //rowkey
  1024. const [rowKey, setRowKey] = useState("");
  1025. //计费规则添加弹窗
  1026. const [ruleModal, setRuleModal] = useState(false);
  1027. //确认弹框的数据
  1028. const [confirmModalData, setConfirmModalData] = useState({
  1029. visible: false,
  1030. type: 1, //1上线 2下线 3 删除
  1031. ids: [],
  1032. func: () => { },
  1033. });
  1034. //计费规则添加对应的泊位号
  1035. const [allBerthList, setAllBerthList] = useState([]);
  1036. //计费规则编辑弹窗是编辑还是新增
  1037. const [isRuleEdit, setIsRuleEdit] = useState(false);
  1038. //计费规则
  1039. const [billRuleList, setBillRuleList] = useState([]);
  1040. //编辑计费规则时候的记录信息
  1041. const [curRuleRecord, setCurRuleRecord] = useState({});
  1042. //选择中的泊位号
  1043. const [selectedBerth, setSelectedBerth] = useState([]);
  1044. //ruleDetailModal
  1045. const [ruleDetailModal, setRuleDetailModal] = useState(false);
  1046. //删除弹框
  1047. const [ruleDelModal, setRuleDelModal] = useState({
  1048. visible: false,
  1049. id: [],
  1050. });
  1051. //收费员管理-删除收费员
  1052. const [delTollModal, setDelTollModal] = useState({
  1053. visible: false,
  1054. id: -1,
  1055. delFunc: deletToll,
  1056. close: () => {
  1057. setDelTollModal({ ...delTollModal, visible: false });
  1058. },
  1059. });
  1060. //数据采集设备管理添加弹窗
  1061. const [dataAcquistionModal, setDataAcquistionModal] = useState({
  1062. visible: false,
  1063. record: {},
  1064. form: dataForm,
  1065. isEdit: 0,
  1066. });
  1067. //数据采集设备新增弹窗里面啊的选择数据
  1068. const [dataAcquistionSelect, setDataAcquistionSelect] = useState({
  1069. typeList: [],
  1070. brandList: [],
  1071. funcList: [],
  1072. });
  1073. //数据采集设备泊位列表数据
  1074. const [dataAcquistionBerth, setDataAcquistionBerth] = useState([]);
  1075. const [dataAcquistionTargetKeys, setDataAcquistionTargetKeys] = useState([]);
  1076. //数据采集设备上线,下线,删除弹窗
  1077. const [dataStatusChangeModal, setDataStatusChangeModal] = useState({
  1078. visible: false,
  1079. type: 1,
  1080. record: {},
  1081. });
  1082. //杆位删除
  1083. const [poleModal, setPoleModal] = useState({
  1084. visible: false,
  1085. id: [],
  1086. });
  1087. //杆位查看弹窗
  1088. const [checkPoleModal, setCheckPoleModal] = useState({
  1089. visible: false,
  1090. record: {},
  1091. });
  1092. const [getMonitorData, setGetMonitorData] = useState([])
  1093. const [getRoadData, seGetRoadData] = useState([])
  1094. //杆位修改弹窗
  1095. const [editPoleModal, setEditPoleModal] = useState({
  1096. form: editPoleForm,
  1097. visible: false,
  1098. isEdit: 0,
  1099. record: {},
  1100. });
  1101. //video_device
  1102. const [videoDeviceList, setVideoDeviceList] = useState([]);
  1103. const [monitorDeviceList, setMonitorDeviceList] = useState([]);
  1104. //杆位管理地图选点弹窗
  1105. const [lngLatModal, setLngLatModal] = useState({
  1106. visible: false,
  1107. value: [],
  1108. });
  1109. //数据采集设备管理页面弹窗
  1110. const [dataAcquistionDetail, setDataAcquistionDetail] = useState({
  1111. visible: false,
  1112. record: {},
  1113. });
  1114. function onShowSizeChange(pn, page_size) {
  1115. setPageData({ pn, page_size });
  1116. }
  1117. //table选择
  1118. const rowSelection = {
  1119. onChange: (selectedRowKeys, selectedRows) => {
  1120. let arr = [];
  1121. selectedRows.map((res) => {
  1122. arr.push(res.id);
  1123. });
  1124. setSelectedRowKeys(arr);
  1125. },
  1126. getCheckboxProps: (record) => ({
  1127. disabled: record.name === "Disabled User",
  1128. // Column configuration not to be checked
  1129. name: record.berth_code,
  1130. // key: record.berth_code,
  1131. }),
  1132. };
  1133. //收费员管理-添加收费员
  1134. function addToll(road_id, ids) {
  1135. ajax
  1136. .addToll({ road_id, ids })
  1137. .then((res) => {
  1138. if (res.status === 20000) {
  1139. message.success(res.message);
  1140. formRef.current.getList();
  1141. } else {
  1142. message.error(res.message);
  1143. }
  1144. })
  1145. .catch((err) => console.error(err));
  1146. }
  1147. const [getDeviceType, setGetDeviceType] = useState([])
  1148. const deviceType = () => {
  1149. let arr = sysConfig.berthType
  1150. let newArr = arr.slice(1)
  1151. setGetDeviceType(newArr)
  1152. }
  1153. useEffect(() => {
  1154. deviceType()
  1155. }, [])
  1156. //1:泊位管理上线,2:下线,3:已删除
  1157. function changeBerthManage(status) {
  1158. console.log(selectedRowKeys);
  1159. if (selectedRowKeys.length != []) {
  1160. setConfirmModalData({
  1161. ...confirmModalData,
  1162. type: status,
  1163. ids: selectedRowKeys,
  1164. visible: true,
  1165. });
  1166. } else {
  1167. message.error("请至少选择一条数据");
  1168. }
  1169. }
  1170. const [getLeftBerth, setLeftGetBerth] = useState([]);
  1171. const [selectedKeys, setSelectedKeys] = useState([]);
  1172. const [targetKeys, setTargetKeys] = useState([]);
  1173. function getEditInRoad(record) {
  1174. let data = {
  1175. video_equipment_id: record.id,
  1176. road_id: record.road_id,
  1177. };
  1178. ajax.getEditInRoadData(data).then((res) => {
  1179. if (res.status == 20000) {
  1180. let temparr = [];
  1181. let temparrRight = [];
  1182. res.data.left.map((item) => {
  1183. temparr.push({
  1184. key: item.value + "",
  1185. title: item.label,
  1186. });
  1187. });
  1188. setLeftGetBerth(temparr);
  1189. setTargetKeys(res.data.right);
  1190. }
  1191. });
  1192. }
  1193. const onChangeSelect = (nextTargetKeys, direction, moveKeys) => {
  1194. console.log("targetKeys:", nextTargetKeys);
  1195. console.log("direction:", direction);
  1196. console.log("moveKeys:", moveKeys);
  1197. setTargetKeys(nextTargetKeys);
  1198. };
  1199. const onSelectChange = (sourceSelectedKeys, targetSelectedKeys) => {
  1200. console.log("sourceSelectedKeys:", sourceSelectedKeys);
  1201. setSelectedKeys([...sourceSelectedKeys, ...targetSelectedKeys]);
  1202. };
  1203. //收费员管理-删除收费员
  1204. function deletToll(id) {
  1205. ajax
  1206. .delToll({ id })
  1207. .then((res) => {
  1208. if (res.status === 20000) {
  1209. message.success(res.message);
  1210. formRef.current.getList();
  1211. } else {
  1212. message.error(res.message);
  1213. }
  1214. })
  1215. .catch((err) => console.error(err));
  1216. }
  1217. useEffect(() => {
  1218. console.log(formRef.current);
  1219. }, [formRef.current])
  1220. function getRoadTollList() {
  1221. ajax
  1222. .getRoadTollList({ road_id: parking_id })
  1223. .then((res) => {
  1224. if (res.status === 20000) {
  1225. let data = res.data.map((item) => {
  1226. item.label = item.text;
  1227. item.key = item.value;
  1228. return item;
  1229. });
  1230. setCanSelectTollList(data);
  1231. } else {
  1232. message.error(res.message);
  1233. }
  1234. })
  1235. .catch((err) => console.error(err));
  1236. }
  1237. const [getCarType, setGetCarType] = useState(true)
  1238. const [getCarTypeValue, setGetCarTypeValue] = useState({})
  1239. //处理添加计费规则-车辆类型切换
  1240. function handleCarTypeChange(value) {
  1241. setGetCarTypeValue(value)
  1242. if (value === '') {
  1243. setGetCarType(true)
  1244. } else {
  1245. setGetCarType(false)
  1246. let data = {
  1247. road_id: parking_id,
  1248. vehicle_type: value
  1249. }
  1250. ajax
  1251. .getRuleBerth(data)
  1252. .then((res) => {
  1253. if (res.status === 20000) {
  1254. res.data.left.map(item => {
  1255. item.key = item.value
  1256. return item
  1257. })
  1258. setAllBerthList(res.data.left);
  1259. } else {
  1260. message.error(res.message)
  1261. }
  1262. })
  1263. .catch((err) => console.error(err));
  1264. }
  1265. if (value === void 0) {
  1266. return;
  1267. }
  1268. }
  1269. const [getCarTypeType, setGetCarTypeType] = useState({})
  1270. useEffect(() => {
  1271. if (selectedBerth.length != []) {
  1272. setGetCarTypeType(0)
  1273. }
  1274. }, [selectedBerth])
  1275. //新增或编辑计费规则
  1276. function addOrEditRoadRule() {
  1277. function addRule(data) {
  1278. if (getCarTypeType === 1 && selectedBerth.length == []) {
  1279. message.error('请选择对应的泊位号')
  1280. } else {
  1281. ajax
  1282. .addOrEditRoadRule(data)
  1283. .then((res) => {
  1284. if (res.status === 20000) {
  1285. setRuleModal(false);
  1286. formRef.current.getList();
  1287. setSelectedBerth([]);
  1288. setGetCarType(true)
  1289. } else {
  1290. message.error(res.message);
  1291. }
  1292. })
  1293. .catch((err) => console.error(err));
  1294. }
  1295. }
  1296. function editRule(data) {
  1297. console.log(data);
  1298. data.berth_ids = selectedBerth;
  1299. ajax
  1300. .editRoadRule(data)
  1301. .then((res) => {
  1302. if (res.status === 20000) {
  1303. setRuleModal(false);
  1304. formRef.current.getList();
  1305. setSelectedBerth([]);
  1306. } else {
  1307. message.error(res.message);
  1308. }
  1309. })
  1310. .catch((err) => console.error(err));
  1311. }
  1312. ruleForm
  1313. .validateFields()
  1314. .then((res) => {
  1315. const data = {
  1316. road_id: parking_id,
  1317. type: isRuleEdit ? "edit" : "add",
  1318. id: isRuleEdit ? curRuleRecord.id : null,
  1319. ...ruleForm.getFieldsValue(),
  1320. berth_ids:
  1321. ruleForm.getFieldsValue().is_select === 0 ? [] : selectedBerth,
  1322. };
  1323. switch (isRuleEdit) {
  1324. case true:
  1325. editRule(data);
  1326. break;
  1327. case false:
  1328. addRule(data);
  1329. break;
  1330. }
  1331. })
  1332. .catch((err) => {
  1333. message.error(err);
  1334. });
  1335. }
  1336. //数据采集设备管理添加弹窗里面的Select数据
  1337. async function getDataSelect() {
  1338. const typeListAjax = ajax.getDeviceTypeList();
  1339. const brandListAjax = ajax.getAllBrandNameList();
  1340. const funcListAjax = ajax.getDeviceFuncList();
  1341. const [typeList, brandList, funcList] = await Promise.all([
  1342. typeListAjax,
  1343. brandListAjax,
  1344. funcListAjax,
  1345. ]);
  1346. setDataAcquistionSelect({
  1347. typeList: typeList.data,
  1348. brandList: brandList.data,
  1349. funcList: funcList.data,
  1350. });
  1351. }
  1352. //数据采集设备管理提交接口
  1353. function handleDataAcquistionModal() {
  1354. function addDevice(res) {
  1355. ajax
  1356. .addDevice({
  1357. ...res,
  1358. road_id: parking_id,
  1359. berth_ids: dataAcquistionTargetKeys,
  1360. })
  1361. .then((res) => {
  1362. if (res.status === 20000) {
  1363. message.success(res.message);
  1364. setDataAcquistionModal({
  1365. ...dataAcquistionModal,
  1366. visible: false,
  1367. });
  1368. formRef.current.getList();
  1369. setModalBtnLoading(false)
  1370. } else {
  1371. message.error(res.message);
  1372. setModalBtnLoading(false)
  1373. }
  1374. });
  1375. }
  1376. function editDevice(res) {
  1377. console.log(res);
  1378. ajax
  1379. .editDevice({
  1380. ...res,
  1381. id: getIdValue,
  1382. road_id: parking_id,
  1383. berth_ids: selectedKeys,
  1384. })
  1385. .then((res) => {
  1386. if (res.status === 20000) {
  1387. message.success(res.message);
  1388. setDataAcquistionModal({
  1389. ...dataAcquistionModal,
  1390. visible: false,
  1391. });
  1392. formRef.current.getList();
  1393. } else {
  1394. message.error(res.message);
  1395. }
  1396. });
  1397. }
  1398. dataAcquistionModal.form.validateFields().then(
  1399. (res) => {
  1400. switch (dataAcquistionModal.isEdit) {
  1401. case 0:
  1402. addDevice(res);
  1403. break;
  1404. case 1:
  1405. editDevice(res);
  1406. break;
  1407. }
  1408. },
  1409. (err) => {
  1410. console.error(err);
  1411. }
  1412. );
  1413. }
  1414. //数据采集设备上线下线删除接口
  1415. function handleDataStatusChange() {
  1416. const id = [dataStatusChangeModal.record.id];
  1417. console.log(id);
  1418. //上线
  1419. function online(id) {
  1420. ajax
  1421. .onlineOrOffline({
  1422. id,
  1423. })
  1424. .then((res) => {
  1425. if (res.status === 20000) {
  1426. message.success(res.message);
  1427. setDataStatusChangeModal({
  1428. ...dataStatusChangeModal,
  1429. visible: false,
  1430. });
  1431. formRef.current.getList();
  1432. } else {
  1433. message.error(res.message);
  1434. }
  1435. });
  1436. }
  1437. //下线
  1438. function offline(id) {
  1439. ajax.offlineDevice({ id }).then((res) => {
  1440. if (res.status === 20000) {
  1441. message.success(res.message);
  1442. setDataStatusChangeModal({
  1443. ...dataStatusChangeModal,
  1444. visible: false,
  1445. });
  1446. formRef.current.getList();
  1447. } else {
  1448. message.error(res.message);
  1449. }
  1450. });
  1451. }
  1452. //删除
  1453. function deleteDevice(id) {
  1454. ajax.delDataDevice({ id }).then((res) => {
  1455. if (res.status === 20000) {
  1456. message.success(res.message);
  1457. setDataStatusChangeModal({
  1458. ...dataStatusChangeModal,
  1459. visible: false,
  1460. });
  1461. formRef.current.getList();
  1462. } else {
  1463. message.error(res.message);
  1464. }
  1465. });
  1466. }
  1467. switch (dataStatusChangeModal.type) {
  1468. case 1:
  1469. online(id);
  1470. break;
  1471. case 2:
  1472. offline(id);
  1473. break;
  1474. case 3:
  1475. deleteDevice(id);
  1476. break;
  1477. default:
  1478. break;
  1479. }
  1480. }
  1481. //获取所有泊位
  1482. function getAllBerth() {
  1483. ajax.getAllBerth({ road_id: parking_id, is_bind_device: 1 }).then((res) => {
  1484. if (res.status === 20000) {
  1485. let _data = res.data.map((item) => {
  1486. item.key = item.value;
  1487. return item;
  1488. });
  1489. setDataAcquistionBerth(_data);
  1490. } else {
  1491. message.error(res.message);
  1492. }
  1493. });
  1494. }
  1495. //获取视频设备
  1496. function getRoadDevice(id) {
  1497. ajax.getRoadDevice({ road_id: id }).then((res) => {
  1498. if (res.status === 20000) {
  1499. res.data.left.map((item) => {
  1500. item.key = item.value;
  1501. return item;
  1502. });
  1503. // console.log(res.data.left);
  1504. setVideoDeviceList(res.data.left);
  1505. } else {
  1506. message.error(res.message);
  1507. }
  1508. });
  1509. }
  1510. const [getEditTarket, setGetEditTarket] = useState([])
  1511. const [getLeftEditTarket, setGetLeftEditTarket] = useState([])
  1512. const [getSelectedKeys, setGetSelectedKeyst] = useState([])
  1513. function getEditRoadDevice(record) {
  1514. let data = {
  1515. road_id: parking_id,
  1516. id: record.id
  1517. }
  1518. ajax.getRoadDevice(data).then((res) => {
  1519. if (res.status === 20000) {
  1520. res.data.left.map((item) => {
  1521. item.key = item.value;
  1522. return item;
  1523. });
  1524. setGetLeftEditTarket(res.data.left);
  1525. setGetEditTarket(res.data.right);
  1526. } else {
  1527. message.error(res.message);
  1528. }
  1529. });
  1530. }
  1531. const onSelectRoadChange = (sourceSelectedKeys, targetSelectedKeys) => {
  1532. console.log("sourceSelectedKeys:", sourceSelectedKeys);
  1533. setGetSelectedKeyst([...sourceSelectedKeys, ...targetSelectedKeys]);
  1534. };
  1535. const onSelectChangeRoad = (nextTargetKeys, direction, moveKeys) => {
  1536. setGetEditTarket(nextTargetKeys);
  1537. };
  1538. //获取监控设备
  1539. function getRoadMonitorDevice(id) {
  1540. ajax.getRoadMonitorDevice({ road_id: id }).then((res) => {
  1541. if (res.status === 20000) {
  1542. res.data.left.map((item) => {
  1543. item.key = item.value;
  1544. return item;
  1545. });
  1546. setMonitorDeviceList(res.data.left);
  1547. } else {
  1548. message.error(res.message);
  1549. }
  1550. });
  1551. }
  1552. const [getDeviceTarket, setGetDeviceTarket] = useState([])
  1553. const [getLeftDeviceTarket, setGetLeftDeviceTarket] = useState([])
  1554. const [getLeftDevicetargetKey, setGetLeftDevicetargetKey] = useState([])
  1555. function getDevice(record) {
  1556. let data = {
  1557. road_id: parking_id,
  1558. id: record.id
  1559. }
  1560. ajax.getRoadMonitorDevice(data).then((res) => {
  1561. if (res.status === 20000) {
  1562. res.data.left.map((item) => {
  1563. item.key = item.value;
  1564. return item;
  1565. });
  1566. setGetLeftDeviceTarket(res.data.left);
  1567. setGetDeviceTarket(res.data.right);
  1568. } else {
  1569. message.error(res.message);
  1570. }
  1571. });
  1572. }
  1573. const onSelectDeviceChange = (sourceSelectedKeys, targetSelectedKeys) => {
  1574. console.log("sourceSelectedKeys:", sourceSelectedKeys);
  1575. setGetLeftDevicetargetKey([...sourceSelectedKeys, ...targetSelectedKeys]);
  1576. };
  1577. const onSelectChangeDevice = (nextTargetKeys, direction, moveKeys) => {
  1578. setGetDeviceTarket(nextTargetKeys);
  1579. };
  1580. //获取计费规则
  1581. const getBillRule = (operator_id) => {
  1582. ajax
  1583. .getBillRule({ operator_id })
  1584. .then((res) => {
  1585. if (res.status === 20000) {
  1586. setBillRuleList(res.data);
  1587. return Promise.resolve(res.data);
  1588. } else {
  1589. message.error(res.message);
  1590. }
  1591. })
  1592. .then((res) => {
  1593. billingRule.form[0].options = res;
  1594. setCurrentObj(billingRule);
  1595. });
  1596. };
  1597. const submitPole = () => {
  1598. const isEdit = editPoleModal.isEdit;
  1599. function addPole(params) {
  1600. ajax.addPolePosition(params).then((res) => {
  1601. if (res.status === 20000) {
  1602. setEditPoleModal({ ...editPoleModal, visible: false });
  1603. message.success(res.message);
  1604. formRef.current.getList();
  1605. seGetRoadData([])
  1606. setGetMonitorData([])
  1607. } else {
  1608. message.error(res.message);
  1609. }
  1610. });
  1611. }
  1612. function editPole(params) {
  1613. ajax.editPolePosition(params).then((res) => {
  1614. if (res.status === 20000) {
  1615. setEditPoleModal({ ...editPoleModal, visible: false });
  1616. message.success(res.message);
  1617. formRef.current.getList();
  1618. } else {
  1619. message.error(res.message);
  1620. }
  1621. });
  1622. }
  1623. editPoleForm
  1624. .validateFields()
  1625. .then((value) => {
  1626. console.log(value);
  1627. if (editPoleModal.isEdit) {
  1628. value = { ...value, id: editPoleModal.record.id };
  1629. } else {
  1630. value = { ...value };
  1631. }
  1632. value = { ...value, lng_lat: lngLatModal.value, road_id: parking_id };
  1633. switch (isEdit) {
  1634. case 1:
  1635. editPole(value);
  1636. break;
  1637. case 0:
  1638. addPole(value);
  1639. break;
  1640. }
  1641. })
  1642. .catch((err) => {
  1643. console.error(err);
  1644. });
  1645. };
  1646. //删除杆位
  1647. function delPolePosition(params) {
  1648. ajax.delPolePosition(params).then((res) => {
  1649. if (res.status === 20000) {
  1650. message.success(res.message);
  1651. setPoleModal({ ...poleModal, visible: false });
  1652. formRef.current.getList();
  1653. } else {
  1654. message.error(res.message);
  1655. }
  1656. });
  1657. }
  1658. function confirmDelPole() {
  1659. delPolePosition({ id: poleModal.id });
  1660. }
  1661. const beforeUpload = (file) => {
  1662. const isExcel = file.type === 'application/vnd.ms-excel' || file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
  1663. if (!isExcel) {
  1664. message.error('你只能上传Excel文件!');
  1665. }
  1666. return isExcel || Upload.LIST_IGNORE;
  1667. };
  1668. useEffect(() => {
  1669. switch (type) {
  1670. case 1:
  1671. setCurrentObj(berthManage);
  1672. setRowKey(berthManage.key);
  1673. setConfirmModalData({
  1674. ...confirmModalData,
  1675. func: (ids, status) =>
  1676. ajax.editStatus({
  1677. ids: ids,
  1678. status,
  1679. }).then(res => {
  1680. if (res.status === 20000) {
  1681. message.success(res.message)
  1682. }
  1683. }),
  1684. });
  1685. break;
  1686. case 2:
  1687. setCurrentObj(dataDevice);
  1688. setRowKey(dataDevice.key);
  1689. getDataSelect();
  1690. getAllBerth();
  1691. setConfirmModalData({
  1692. ...confirmModalData,
  1693. func: (ids, status) => {
  1694. let func = null;
  1695. switch (status) {
  1696. case 1:
  1697. func = ajax.onlineOrOffline({
  1698. id: ids,
  1699. });
  1700. break;
  1701. case 2:
  1702. func = ajax.offlineDevice({ id: ids });
  1703. break;
  1704. case 3:
  1705. func = ajax.delDataDevice({ id: ids });
  1706. }
  1707. return func;
  1708. },
  1709. });
  1710. break;
  1711. case 3:
  1712. setCurrentObj(poleManage);
  1713. setRowKey(poleManage.key);
  1714. setConfirmModalData({
  1715. ...confirmModalData,
  1716. func: (ids, status) => ajax.delPolePosition({ id: ids }),
  1717. });
  1718. break;
  1719. case 4:
  1720. getBillRule(operator_id);
  1721. break;
  1722. case 5:
  1723. setCurrentObj(tollCollector);
  1724. setRowKey(tollCollector.key);
  1725. getRoadTollList();
  1726. break;
  1727. default:
  1728. break;
  1729. }
  1730. }, [type]);
  1731. return (
  1732. <div className="ConfigRoad">
  1733. <div className="left-search">
  1734. <div className="title">{"查询条件"}</div>
  1735. <div className="searchWrap">
  1736. <SearchPart
  1737. ref={formRef}
  1738. road_id={parking_id}
  1739. formData={currentObj.form}
  1740. search={currentObj.search}
  1741. initialValues={currentObj.initialValues}
  1742. pageData={pageData}
  1743. setSelectedRowKeys={setSelectedRowKeys}
  1744. total={resultData.total_records}
  1745. exporturl={currentObj.exporturl}
  1746. closeConfirmModal={() => {
  1747. setConfirmModalData({ ...confirmModalData, visible: false });
  1748. }}
  1749. confirmModalData={confirmModalData}
  1750. delTollModal={delTollModal}
  1751. isShowExportBtn={type !== 4 && type !== 5}
  1752. />
  1753. </div>
  1754. </div>
  1755. <div className="right-list">
  1756. <div className="total-row-wrapper">
  1757. <span className="number-wrapper">
  1758. {/* <span>
  1759. <Button
  1760. type="primary"
  1761. style={{ marginRight: "10px" }}
  1762. onClick={() => {
  1763. navigate(-1);
  1764. }}
  1765. >
  1766. 返回
  1767. </Button>
  1768. </span> */}
  1769. <span className="letter">共查询到</span>
  1770. <span className="total-number"> {resultData.total_records}</span>
  1771. <span className="letter">条结果</span>
  1772. </span>
  1773. <div>
  1774. <Button
  1775. style={{ margin: "0 10px" }}
  1776. type="primary"
  1777. onClick={currentObj.create}
  1778. >
  1779. 添加
  1780. </Button>
  1781. {type === 4 || type === 5 ? (
  1782. <></>
  1783. ) : (
  1784. <Button
  1785. type="primary"
  1786. onClick={() => {
  1787. setImportGroup({ ...importGroup, visible: true });
  1788. }}
  1789. >
  1790. 批量导入
  1791. </Button>
  1792. )}
  1793. </div>
  1794. </div>
  1795. <div className="tabs-box">
  1796. <Tabs
  1797. activeKey={type}
  1798. items={[
  1799. {
  1800. key: 1,
  1801. label: "泊位管理",
  1802. },
  1803. {
  1804. key: 2,
  1805. label: "数据采集设备管理",
  1806. },
  1807. {
  1808. key: 3,
  1809. label: "杆位管理",
  1810. },
  1811. {
  1812. key: 4,
  1813. label: "计费规则",
  1814. },
  1815. {
  1816. key: 5,
  1817. label: "收费员管理",
  1818. },
  1819. ]}
  1820. hideAdd={true}
  1821. onChange={(type) => {
  1822. setLoading(true)
  1823. setType(type);
  1824. }}
  1825. />
  1826. </div>
  1827. <ResultFlow
  1828. hasLoad={true}
  1829. ajaxLoad={loading}
  1830. resultData={resultData}
  1831. message={"暂无数据"}
  1832. >
  1833. <div className="table-wrap">
  1834. <Table
  1835. rowKey={rowKey}
  1836. // loading={loading}
  1837. rowSelection={
  1838. type === 4 || type === 5
  1839. ? false
  1840. : {
  1841. type: "checkbox",
  1842. ...rowSelection,
  1843. }
  1844. }
  1845. // className="yisa-table"
  1846. columns={currentObj.columns}
  1847. dataSource={resultData.data}
  1848. pagination={false}
  1849. />
  1850. </div>
  1851. <div className="page-part">
  1852. {type === 4 || type === 5 ? (
  1853. <></>
  1854. ) : (
  1855. <div className="button-part">
  1856. {type === 3 ? (
  1857. <></>
  1858. ) : (
  1859. <>
  1860. <Button
  1861. type="primary"
  1862. onClick={() => {
  1863. changeBerthManage(1);
  1864. }}
  1865. >
  1866. 上线
  1867. </Button>
  1868. <Button
  1869. type="primary"
  1870. onClick={() => {
  1871. changeBerthManage(2);
  1872. }}
  1873. >
  1874. 下线
  1875. </Button>
  1876. </>
  1877. )}
  1878. <Button
  1879. type="primary"
  1880. onClick={() => {
  1881. changeBerthManage(3);
  1882. }}
  1883. >
  1884. 删除
  1885. </Button>
  1886. </div>
  1887. )}
  1888. <Pagination
  1889. className="pagination-common"
  1890. showSizeChanger={true}
  1891. showQuickJumper={true}
  1892. // showTotal={() => `共 ${total_records} 条`}
  1893. total={resultData.total_records}
  1894. current={pageData.pn}
  1895. pageSize={pageData.page_size}
  1896. pageSizeOptions={dictionary?.pageSizeOptions}
  1897. onChange={onShowSizeChange}
  1898. onShowSizeChange={onShowSizeChange}
  1899. />
  1900. </div>
  1901. </ResultFlow>
  1902. </div>
  1903. <Modal
  1904. open={importGroup.visible}
  1905. destroyOnClose={true}
  1906. style={{ width: 88 }}
  1907. onCancel={() => {
  1908. setImportGroup({ ...importGroup, visible: false });
  1909. }}
  1910. title={"批量导入"}
  1911. footer={null}
  1912. >
  1913. <div>
  1914. <p>
  1915. 1.请先获取批量添加设备的Excel模板将需要添加的信息填写后进行上传该Excel文件
  1916. 上传非规范文件可能造成数据错误
  1917. <ExportPMS
  1918. url={currentObj.downloadUrl}
  1919. data={{ road_id: parking_id }}
  1920. >
  1921. 点击下载
  1922. </ExportPMS>
  1923. 模板文件
  1924. </p>
  1925. <p>2.请选择上传文件并上传</p>
  1926. <Upload {...currentObj.importProps} beforeUpload={beforeUpload}>
  1927. <Button type="primaryimport { pages } from '@/pages';" icon={<UploadOutlined />}>
  1928. 上传
  1929. </Button>
  1930. </Upload>
  1931. </div>
  1932. </Modal>
  1933. <Modal
  1934. open={berthModal.visible}
  1935. title="查看泊位"
  1936. onCancel={() => {
  1937. setBerthModal({ ...berthModal, visible: false });
  1938. }}
  1939. >
  1940. <Descriptions column={1}>
  1941. <Descriptions.Item label="泊位号">
  1942. {berthModal.record.berth_code}
  1943. </Descriptions.Item>
  1944. <Descriptions.Item label="经纬度">
  1945. {berthModal.record.lng_lat}
  1946. </Descriptions.Item>
  1947. <Descriptions.Item label="服务属性">
  1948. <Checkbox.Group
  1949. defaultValue={berthModal.record.service_type}
  1950. disabled={true}
  1951. options={[
  1952. {
  1953. label: "潮汐泊位",
  1954. value: 1,
  1955. },
  1956. {
  1957. label: "共享泊位",
  1958. value: 2,
  1959. },
  1960. {
  1961. label: "充电泊位",
  1962. value: 3,
  1963. },
  1964. ]}
  1965. />
  1966. </Descriptions.Item>
  1967. <Descriptions.Item label="泊位类型">
  1968. {sysConfig.berthType[berthModal.record.berth_type]?.label}
  1969. </Descriptions.Item>
  1970. <Descriptions.Item label="充电泊位">
  1971. {berthModal.record.charge === 0 ? "否" : "是"}
  1972. </Descriptions.Item>
  1973. <Descriptions.Item label="ETC是否开启">
  1974. {berthModal.record.etc_status_name}
  1975. </Descriptions.Item>
  1976. <Descriptions.Item label="计费规则">
  1977. <TextArea disabled value={berthModal.record.rule_id} />
  1978. </Descriptions.Item>
  1979. </Descriptions>
  1980. </Modal>
  1981. {/* 编辑泊位 */}
  1982. <Modal
  1983. title={isEdit ? "编辑泊位" : "添加泊位"}
  1984. open={editBerthModal}
  1985. onCancel={() => {
  1986. setEditBerthModal(false);
  1987. }}
  1988. onOk={() => {
  1989. let reg = /^[2-9]\d*$|^[1-9]\d+\d*$/
  1990. console.log(berthForm.getFieldsValue().berth_count);
  1991. if (berthForm.getFieldsValue().berth_code === null) {
  1992. message.error('请填写泊位号')
  1993. } else if (berthForm.getFieldsValue().etc_status === null) {
  1994. message.error('请选择ETC是开开启')
  1995. } else if (berthForm.getFieldsValue().berth_type === null) {
  1996. message.error('请选择泊位类型')
  1997. } else if ((!reg.test(berthForm.getFieldsValue().berth_count) && berthForm.getFieldsValue().berth_count)) {
  1998. message.error('添加泊位数为大于1的整数')
  1999. } else {
  2000. let arr = berthForm.getFieldsValue().etc_status
  2001. let str = arr.toString()
  2002. const params = {
  2003. ...berthForm.getFieldsValue(),
  2004. lng_lat: lngLat,
  2005. road_id: parking_id,
  2006. etc_status: Number(str),
  2007. };
  2008. console.log(params);
  2009. function addBerth(params) {
  2010. ajax
  2011. .addBerth(params)
  2012. .then((res) => {
  2013. if (res.status === 20000) {
  2014. message.success(res.message);
  2015. setEditBerthModal(false);
  2016. formRef.current.getList();
  2017. berthForm.resetFields();
  2018. setLngLat([]);
  2019. } else {
  2020. message.error(res.message);
  2021. }
  2022. })
  2023. .catch((err) => console.error(err));
  2024. }
  2025. function editBerth(params) {
  2026. ajax
  2027. .editBerth(params)
  2028. .then((res) => {
  2029. if (res.status === 20000) {
  2030. message.success(res.message);
  2031. setEditBerthModal(false);
  2032. formRef.current.getList();
  2033. berthForm.resetFields();
  2034. setLngLat([]);
  2035. } else {
  2036. message.error(res.message);
  2037. }
  2038. })
  2039. .catch((err) => console.error(err));
  2040. }
  2041. switch (isEdit) {
  2042. case true:
  2043. editBerth(params);
  2044. break;
  2045. case false:
  2046. addBerth(params);
  2047. break;
  2048. }
  2049. }
  2050. }}
  2051. >
  2052. <div
  2053. style={{
  2054. padding: "0 30px",
  2055. }}
  2056. >
  2057. <Form
  2058. form={berthForm}
  2059. labelCol={{ span: 6 }}
  2060. wrapperCol={{ span: 18 }}
  2061. colon={false}
  2062. initialValues={{
  2063. berth_code: "",
  2064. service_type: null,
  2065. berth_type: null,
  2066. etc_status: null,
  2067. }}
  2068. >
  2069. <Form.Item label="泊位号" name="berth_code" required>
  2070. <Input disabled={isEdit} />
  2071. </Form.Item>
  2072. {!isEdit && (
  2073. <Form.Item label="批量添加泊位数" name="berth_count">
  2074. <Input />
  2075. </Form.Item>
  2076. )}
  2077. <Form.Item label="服务属性" name="service_type">
  2078. <Checkbox.Group
  2079. value={getEditData.service_type}
  2080. options={[
  2081. {
  2082. label: "潮汐泊位",
  2083. value: 1,
  2084. },
  2085. {
  2086. label: "共享泊位",
  2087. value: 2,
  2088. },
  2089. {
  2090. label: "充电泊位",
  2091. value: 3,
  2092. disabled: false,
  2093. },
  2094. ]}
  2095. />
  2096. </Form.Item>
  2097. <Form.Item label="ETC是否开启" name="etc_status" required>
  2098. <Radio.Group
  2099. placeholder="请选择ETC是否开启"
  2100. options={[
  2101. {
  2102. label: "否",
  2103. value: 0,
  2104. },
  2105. {
  2106. label: "是",
  2107. value: 1,
  2108. },
  2109. ]}
  2110. />
  2111. </Form.Item>
  2112. <Form.Item label="泊位类型" name="berth_type" required>
  2113. <Select
  2114. placeholder="请选择泊位类型"
  2115. options={getDeviceType}
  2116. />
  2117. </Form.Item>
  2118. <Form.Item label="经纬度">
  2119. <Input
  2120. value={lngLat}
  2121. addonAfter={
  2122. <SelectGaodeLngLat
  2123. open={() => setLngLatVisible(true)}
  2124. lngLatVisible={lngLatVisible}
  2125. getLntLat={(value) => {
  2126. setLngLat(value);
  2127. }}
  2128. close={() => setLngLatVisible(false)}
  2129. />
  2130. }
  2131. />
  2132. </Form.Item>
  2133. </Form>
  2134. </div>
  2135. </Modal>
  2136. {/* 收费员管理添加弹窗 */}
  2137. <Modal
  2138. open={tollModal}
  2139. title="收费员配置"
  2140. onCancel={() => {
  2141. setTollModal(false);
  2142. }}
  2143. onOk={() => {
  2144. const ids = hasSelectTollList;
  2145. addToll(parking_id, ids);
  2146. setTollModal(false);
  2147. }}
  2148. width={770}
  2149. >
  2150. <Transfer
  2151. dataSource={canSelectTollList}
  2152. targetKeys={hasSelectTollList}
  2153. onChange={(nexTargetKeys) => {
  2154. setHasSelectTollList(nexTargetKeys);
  2155. console.log(nexTargetKeys);
  2156. }}
  2157. render={(item) => item.label}
  2158. />
  2159. {/* <TreeSelectGroup
  2160. unSelectedList={canSelectTollList}
  2161. onChange={(list) => {
  2162. setHasSelectTollList(list);
  2163. }}
  2164. /> */}
  2165. </Modal>
  2166. {/* 计费规则添加弹窗 */}
  2167. <Modal
  2168. open={ruleModal}
  2169. title={isRuleEdit ? '编辑' : '添加'}
  2170. width={1000}
  2171. onCancel={() => {
  2172. setRuleModal(false);
  2173. setSelectedBerth([]);
  2174. }}
  2175. style={{
  2176. top: 2,
  2177. }}
  2178. onOk={addOrEditRoadRule}
  2179. >
  2180. <Form
  2181. form={ruleForm}
  2182. colon={false}
  2183. labelCol={{ span: 6 }}
  2184. wrapperCol={{ span: 18 }}
  2185. >
  2186. <Form.Item
  2187. rules={[{ required: true }]}
  2188. label="车辆类型"
  2189. name="vehicle_type"
  2190. >
  2191. <Select
  2192. disabled={isRuleEdit}
  2193. style={{ width: 300 }}
  2194. onChange={handleCarTypeChange}
  2195. options={[
  2196. {
  2197. label: "小型车",
  2198. value: 1,
  2199. },
  2200. {
  2201. label: "中型车",
  2202. value: 2,
  2203. },
  2204. {
  2205. label: "大型车",
  2206. value: 3,
  2207. },
  2208. ]}
  2209. />
  2210. </Form.Item>
  2211. <Form.Item rules={[{ required: true }]} label="计费规则" name="rule_id">
  2212. <Select style={{ width: 300 }} options={billRuleList} />
  2213. </Form.Item>
  2214. <Form.Item rules={[{ required: true }]} label="是否按泊位计费" style={{ marginLeft: 51 }} name="is_select">
  2215. <Radio.Group
  2216. disabled={getCarType || isRuleEdit}
  2217. onChange={(e) => {
  2218. setGetCarTypeType(e.target.value)
  2219. console.log(e.target.value);
  2220. if (e.target.value === 1) {
  2221. setShowBerthSelect(true);
  2222. } else {
  2223. setShowBerthSelect(false);
  2224. setSelectedBerth([])
  2225. }
  2226. }}
  2227. options={[
  2228. {
  2229. label: "否",
  2230. value: 0,
  2231. },
  2232. {
  2233. label: "是",
  2234. value: 1,
  2235. },
  2236. ]}
  2237. />
  2238. </Form.Item>
  2239. {showBerthSelect ? (
  2240. <Form.Item
  2241. label="对应的泊位号"
  2242. shouldUpdate={(preValue, curValue) => {
  2243. return curValue.vehicle_type !== preValue.vehicle_type;
  2244. }}
  2245. >
  2246. <Transfer
  2247. dataSource={allBerthList}
  2248. targetKeys={selectedBerth}
  2249. onChange={(nextTargetKeys) => {
  2250. setSelectedBerth(nextTargetKeys);
  2251. }}
  2252. render={(item) => item.label}
  2253. />
  2254. {/* <TreeSelectGroup
  2255. unSelectedList={allBerthList}
  2256. onChange={(value) => {
  2257. setSelectedBerth(value);
  2258. }}
  2259. /> */}
  2260. </Form.Item>
  2261. ) : null}
  2262. </Form>
  2263. </Modal>
  2264. {/* 计费规则查看弹窗 */}
  2265. <Modal
  2266. title="查看计费规则"
  2267. open={ruleDetailModal}
  2268. onCancel={() => {
  2269. setRuleDetailModal(false);
  2270. }}
  2271. >
  2272. <Descriptions column={1}>
  2273. <Descriptions.Item label="车辆类型">
  2274. {curRuleRecord.vehicle_type_name}
  2275. </Descriptions.Item>
  2276. <Descriptions.Item label="计费规则">
  2277. {curRuleRecord.rule_name}
  2278. </Descriptions.Item>
  2279. <Descriptions.Item label="是否按泊位计费">
  2280. {curRuleRecord.berth_ids === "" ? "否" : "是"}
  2281. </Descriptions.Item>
  2282. </Descriptions>
  2283. </Modal>
  2284. {/* 删除弹框 */}
  2285. <Modal
  2286. title="提示"
  2287. open={ruleDelModal.visible}
  2288. onOk={() => {
  2289. ajax.delRoadRule({ rule_id: ruleDelModal.id }).then((res) => {
  2290. if (res.status === 20000) {
  2291. setRuleDelModal({ ...ruleDelModal, visible: false });
  2292. formRef.current.getList();
  2293. message.success(res.message);
  2294. } else {
  2295. message.error(res.message);
  2296. }
  2297. });
  2298. }}
  2299. onCancel={() => {
  2300. setRuleDelModal({ ...ruleDelModal, visible: false });
  2301. }}
  2302. >
  2303. <p>确定删除吗</p>
  2304. </Modal>
  2305. {/* 杆位添加或修改弹窗 */}
  2306. <Modal
  2307. width={770}
  2308. open={editPoleModal.visible}
  2309. onCancel={() => {
  2310. setEditPoleModal({ ...editPoleModal, visible: false });
  2311. setGetMonitorData([])
  2312. seGetRoadData([])
  2313. }}
  2314. title={editTitle ? "编辑杆位" : "添加杆位"}
  2315. onOk={submitPole}
  2316. >
  2317. <Form
  2318. labelCol={{ span: 6 }}
  2319. wrapperCol={{ span: 18 }}
  2320. colon={false}
  2321. form={editPoleModal.form}
  2322. >
  2323. <Form.Item
  2324. label="杆位号"
  2325. name="code"
  2326. rules={[{ required: true }]}
  2327. required
  2328. >
  2329. <Input />
  2330. </Form.Item>
  2331. <Form.Item
  2332. label="是否自有杆"
  2333. name="has_pole"
  2334. rules={[{ required: true }]}
  2335. required
  2336. >
  2337. <Radio.Group
  2338. options={[
  2339. {
  2340. label: "自有杆",
  2341. value: 1,
  2342. },
  2343. {
  2344. label: "外部杆",
  2345. value: 2,
  2346. },
  2347. ]}
  2348. />
  2349. </Form.Item>
  2350. <Form.Item label="经纬度">
  2351. <Input.Group>
  2352. <Row>
  2353. <Col span={19}>
  2354. <Input value={lngLatModal.value} />
  2355. </Col>
  2356. <Col span={5}>
  2357. <SelectGaodeLngLat
  2358. open={() =>
  2359. setLngLatModal({ ...lngLatModal, visible: true })
  2360. }
  2361. lngLatVisible={lngLatModal.visible}
  2362. getLntLat={(value) => {
  2363. setLngLatModal({ ...lngLatModal, value: value });
  2364. }}
  2365. close={() =>
  2366. setLngLatModal({ ...lngLatModal, visible: false })
  2367. }
  2368. />
  2369. </Col>
  2370. </Row>
  2371. </Input.Group>
  2372. </Form.Item>
  2373. {
  2374. editTitle ? <>
  2375. <Form.Item label="视频设备" name="video_device_ids">
  2376. {/* <Select mode="multiple" options={videoDeviceList} /> */}
  2377. <Transfer
  2378. dataSource={getLeftEditTarket}
  2379. titles={["未选择", "已选择"]}
  2380. targetKeys={getEditTarket}
  2381. onSelectChange={onSelectRoadChange}
  2382. onChange={onSelectChangeRoad}
  2383. selectedKeys={getSelectedKeys}
  2384. render={(item) => item.label}
  2385. />
  2386. {/* <label>视频设备</label> */}
  2387. {/* <TreeSelectGroup
  2388. unSelectedList={editPoleModal.video_device.left}
  2389. selecedList={editPoleModal.video_device.right}
  2390. /> */}
  2391. </Form.Item>
  2392. <Form.Item label="监控设备" name="monitor_device_ids">
  2393. {/* <Select mode="multiple" options={monitorDeviceList} /> */}
  2394. <Transfer
  2395. dataSource={getLeftDeviceTarket}
  2396. titles={["未选择", "已选择"]}
  2397. targetKeys={getDeviceTarket}
  2398. selectedKeys={getLeftDevicetargetKey}
  2399. onSelectChange={onSelectDeviceChange}
  2400. onChange={onSelectChangeDevice}
  2401. render={(item) => item.label}
  2402. />
  2403. </Form.Item>
  2404. </> :
  2405. <>
  2406. <Form.Item label="视频设备" name="video_device_ids">
  2407. {/* <Select mode="multiple" options={videoDeviceList} /> */}
  2408. <Transfer
  2409. dataSource={videoDeviceList}
  2410. titles={["未选择", "已选择"]}
  2411. targetKeys={getMonitorData}
  2412. onChange={(nexTargetKeys) => {
  2413. setGetMonitorData(nexTargetKeys);
  2414. }}
  2415. render={(item) => item.label}
  2416. />
  2417. {/* <label>视频设备</label> */}
  2418. {/* <TreeSelectGroup
  2419. unSelectedList={editPoleModal.video_device.left}
  2420. selecedList={editPoleModal.video_device.right}
  2421. /> */}
  2422. </Form.Item>
  2423. <Form.Item label="监控设备" name="monitor_device_ids">
  2424. {/* <Select mode="multiple" options={monitorDeviceList} /> */}
  2425. <Transfer
  2426. dataSource={monitorDeviceList}
  2427. titles={["未选择", "已选择"]}
  2428. targetKeys={getRoadData}
  2429. onChange={(nexTargetKeys) => {
  2430. seGetRoadData(nexTargetKeys);
  2431. }}
  2432. render={(item) => item.label}
  2433. />
  2434. {/* <label>监控设备</label> */}
  2435. {/* <TreeSelectGroup
  2436. unSelectedList={editPoleModal.monitor_device.left}
  2437. selecedList={editPoleModal.monitor_device.right}
  2438. /> */}
  2439. </Form.Item>
  2440. </>
  2441. }
  2442. </Form>
  2443. </Modal>
  2444. {/* 杆位删除弹窗 */}
  2445. <Modal
  2446. open={poleModal.visible}
  2447. onCancel={() => {
  2448. setPoleModal({ ...poleModal, visible: false });
  2449. }}
  2450. title="提示"
  2451. onOk={confirmDelPole}
  2452. >
  2453. <p>确定删除吗</p>
  2454. </Modal>
  2455. {/* 杆位查看弹窗 */}
  2456. <Modal
  2457. open={checkPoleModal.visible}
  2458. onCancel={() =>
  2459. setCheckPoleModal({ ...checkPoleModal, visible: false })
  2460. }
  2461. >
  2462. <Descriptions column={1}>
  2463. <Descriptions.Item label="杆位号">
  2464. {checkPoleModal.record.code}
  2465. </Descriptions.Item>
  2466. <Descriptions.Item label="经纬度">
  2467. {checkPoleModal.record.lng_lat}
  2468. </Descriptions.Item>
  2469. <Descriptions.Item label="是否自由杆">
  2470. {checkPoleModal.record.has_pole === 1 ? "是" : "否"}
  2471. </Descriptions.Item>
  2472. <Descriptions.Item label="视频设备">
  2473. {checkPoleModal.record.video_device_codes}
  2474. </Descriptions.Item>
  2475. <Descriptions.Item label="监控设备">
  2476. {checkPoleModal.record.monitor_device_codes}
  2477. </Descriptions.Item>
  2478. </Descriptions>
  2479. </Modal>
  2480. {/* 数据采集设备添加和编辑窗口 */}
  2481. <Modal
  2482. open={dataAcquistionModal.visible}
  2483. onCancel={() => {
  2484. setDataAcquistionModal({ ...dataAcquistionModal, visible: false });
  2485. }}
  2486. confirmLoading={modalBtnLoading}
  2487. destroyOnClose
  2488. onOk={handleDataAcquistionModal}
  2489. title={dataAcquistionModal.isEdit ? "编辑设备" : "添加设备"}
  2490. width={770}
  2491. >
  2492. <Form
  2493. form={dataAcquistionModal.form}
  2494. labelCol={{ span: 6 }}
  2495. wrapperCol={{ span: 12 }}
  2496. colon={false}
  2497. >
  2498. <Row gutter={[30]}>
  2499. <Col span={12}>
  2500. <Form.Item
  2501. label="设备名称"
  2502. name="name"
  2503. rules={[{ required: true }]}
  2504. >
  2505. <Input />
  2506. </Form.Item>
  2507. </Col>
  2508. <Col span={12}>
  2509. <Form.Item
  2510. label="硬件编码"
  2511. name="code"
  2512. rules={[{ required: true }]}
  2513. >
  2514. <Input
  2515. disabled={dataAcquistionModal.isEdit === 0 ? false : true}
  2516. />
  2517. </Form.Item>
  2518. </Col>
  2519. <Col span={12}>
  2520. <Form.Item
  2521. label="设备类型"
  2522. name="type"
  2523. rules={[{ required: true }]}
  2524. >
  2525. <Select options={dataAcquistionSelect.typeList} />
  2526. </Form.Item>
  2527. </Col>
  2528. <Col span={12}>
  2529. <Form.Item
  2530. label="设备品牌"
  2531. name="brand"
  2532. rules={[{ required: true }]}
  2533. >
  2534. <Select options={dataAcquistionSelect.brandList} />
  2535. </Form.Item>
  2536. </Col>
  2537. <Col span={12}>
  2538. <Form.Item
  2539. label="设备功能"
  2540. name="function"
  2541. rules={[{ required: true }]}
  2542. >
  2543. <Select options={dataAcquistionSelect.funcList} />
  2544. </Form.Item>
  2545. </Col>
  2546. <Col span={12}>
  2547. <Form.Item label="备注" name="note">
  2548. <Input />
  2549. </Form.Item>
  2550. </Col>
  2551. {dataAcquistionModal.isEdit === 0 ? (
  2552. <Col span={12}>
  2553. <Form.Item label="对应的泊位号" name="berth">
  2554. <Transfer
  2555. dataSource={dataAcquistionBerth}
  2556. titles={["未选择", "已选择"]}
  2557. targetKeys={dataAcquistionTargetKeys}
  2558. onChange={(nexTargetKeys) => {
  2559. setDataAcquistionTargetKeys(nexTargetKeys);
  2560. }}
  2561. render={(item) => item.label}
  2562. />
  2563. </Form.Item>
  2564. </Col>
  2565. ) : (
  2566. <Col span={12}>
  2567. <Form.Item label="对应的泊位号" name="berth">
  2568. <Transfer
  2569. dataSource={getLeftBerth}
  2570. titles={["未选择", "已选择"]}
  2571. targetKeys={targetKeys}
  2572. onChange={onChangeSelect}
  2573. selectedKeys={selectedKeys}
  2574. onSelectChange={onSelectChange}
  2575. render={(item) => item.title}
  2576. />
  2577. </Form.Item>
  2578. </Col>
  2579. )}
  2580. </Row>
  2581. </Form>
  2582. </Modal>
  2583. {/* 数据采集设备上线,下线,删除弹窗 */}
  2584. <Modal
  2585. open={dataStatusChangeModal.visible}
  2586. onOk={handleDataStatusChange}
  2587. title="提示"
  2588. onCancel={() => {
  2589. setDataStatusChangeModal({
  2590. ...dataStatusChangeModal,
  2591. visible: false,
  2592. });
  2593. }}
  2594. >
  2595. <p>
  2596. 确定
  2597. {dataStatusChangeModal.type === 1
  2598. ? "上线"
  2599. : dataStatusChangeModal.type === 2
  2600. ? "下线"
  2601. : "删除"}
  2602. {" "}
  2603. </p>
  2604. </Modal>
  2605. {/* 数据采集设备管理查看弹窗 */}
  2606. <Modal
  2607. open={dataAcquistionDetail.visible}
  2608. onCancel={() => {
  2609. setDataAcquistionDetail({ ...dataAcquistionDetail, visible: false });
  2610. }}
  2611. title="详情"
  2612. >
  2613. <Descriptions column={2}>
  2614. <Descriptions.Item label="设备名称">
  2615. {dataAcquistionDetail.record.name}
  2616. </Descriptions.Item>
  2617. <Descriptions.Item label="硬件编码">
  2618. {dataAcquistionDetail.record.code}
  2619. </Descriptions.Item>
  2620. <Descriptions.Item label="设备类型">
  2621. {dataAcquistionDetail.record.type_name}
  2622. </Descriptions.Item>
  2623. <Descriptions.Item label="设备品牌">
  2624. {dataAcquistionDetail.record.brand_name}
  2625. </Descriptions.Item>
  2626. <Descriptions.Item label="设备功能">
  2627. {dataAcquistionDetail.record.function}
  2628. </Descriptions.Item>
  2629. <Descriptions.Item label="备注">
  2630. {dataAcquistionDetail.record.note}
  2631. </Descriptions.Item>
  2632. <Descriptions.Item label="对应泊位号">
  2633. {dataAcquistionDetail.record.berth_code}
  2634. </Descriptions.Item>
  2635. </Descriptions>
  2636. </Modal>
  2637. </div>
  2638. );
  2639. }
  2640. const SearchPart = forwardRef((props, ref) => {
  2641. const {
  2642. formData = [],
  2643. search = () => { },
  2644. initialValues = {},
  2645. pageData,
  2646. exporturl,
  2647. total = 0,
  2648. setSelectedRowKeys = () => { },
  2649. road_id,
  2650. closeConfirmModal = () => { },
  2651. confirmModalData = {},
  2652. delTollModal = {},
  2653. isShowExportBtn = true,
  2654. } = props;
  2655. const confirmtype = confirmModalData.type;
  2656. const [form] = Form.useForm();
  2657. const [exportData, setExportData] = useState({});
  2658. function getList(pndata = pageData) {
  2659. const params = { ...form.getFieldsValue(), ...pndata, road_id };
  2660. setExportData(params);
  2661. search(params);
  2662. }
  2663. async function onOk() {
  2664. setSelectedRowKeys([])
  2665. const res = await confirmModalData.func(confirmModalData.ids, confirmtype);
  2666. // if (res?.status === 20000) {
  2667. // closeConfirmModal();
  2668. // getList();
  2669. // }
  2670. closeConfirmModal();
  2671. getList();
  2672. }
  2673. function handleDelToll() {
  2674. delTollModal.delFunc(delTollModal.id);
  2675. delTollModal.close();
  2676. setTimeout(() => {
  2677. getList();
  2678. }, 5000);
  2679. }
  2680. useImperativeHandle(ref, () => {
  2681. return { getList };
  2682. }, [formData]);
  2683. useEffect(() => {
  2684. getList();
  2685. }, [pageData, formData]);
  2686. const reastBtn = () => {
  2687. form.resetFields();
  2688. };
  2689. return (
  2690. <>
  2691. <Form
  2692. form={form}
  2693. labelCol={{ span: 6 }}
  2694. wrapperCol={{ span: 18 }}
  2695. colon={false}
  2696. initialValues={initialValues}
  2697. >
  2698. <Row>
  2699. {formData.map((item) => {
  2700. let children = null;
  2701. switch (item.type) {
  2702. case "input":
  2703. children = (
  2704. <Form.Item
  2705. label={item.label}
  2706. name={item.name}
  2707. key={item.name}
  2708. >
  2709. <Input placeholder={item.placeholder} />
  2710. </Form.Item>
  2711. );
  2712. break;
  2713. case "select":
  2714. children = (
  2715. <Form.Item
  2716. label={item.label}
  2717. name={item.name}
  2718. key={item.name}
  2719. >
  2720. <Select
  2721. options={item.options}
  2722. placeholder={item.placeholder}
  2723. />
  2724. </Form.Item>
  2725. );
  2726. default:
  2727. break;
  2728. }
  2729. return <Col span={24}>{children}</Col>;
  2730. })}
  2731. </Row>
  2732. </Form>
  2733. <div className="bottomBox">
  2734. <Button className="reset" onClick={reastBtn}>
  2735. 重置
  2736. </Button>
  2737. <Button
  2738. type="primary"
  2739. className="submit search-button"
  2740. onClick={() => {
  2741. getList((formData, { ...pageData, pn: 1 }));
  2742. }}
  2743. >
  2744. 查询
  2745. </Button>
  2746. {!isShowExportBtn ? (
  2747. <div></div>
  2748. ) : (
  2749. <ExportPMS
  2750. url={exporturl}
  2751. data={exportData}
  2752. style={{
  2753. height: "36px",
  2754. }}
  2755. />
  2756. )}
  2757. </div>
  2758. {/* 上线下线删除的确认框 */}
  2759. <Modal
  2760. open={confirmModalData.visible}
  2761. onCancel={closeConfirmModal}
  2762. onOk={onOk}
  2763. title="提示"
  2764. >
  2765. <p>
  2766. 确认{confirmtype === 1 ? "上线" : confirmtype === 2 ? "下线" : "删除"}
  2767. ?
  2768. </p>
  2769. </Modal>
  2770. <Modal
  2771. open={delTollModal.visible}
  2772. onCancel={delTollModal.close}
  2773. onOk={handleDelToll}
  2774. title="提示"
  2775. >
  2776. <p>确定删除吗</p>
  2777. </Modal>
  2778. </>
  2779. );
  2780. });
  2781. export default ConfigRoad;