停车场项目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

import React, {
useState,
useEffect,
useRef,
useImperativeHandle,
forwardRef,
} from "react";
import { useLocation, useNavigate } from "react-router-dom";
import {
message,
Form,
Pagination,
Table,
Space,
Modal,
Button,
Select,
Row,
Col,
Tabs,
Input,
Upload,
Checkbox,
Tag,
Radio,
Descriptions,
Popover,
Transfer,
} from "antd";
import { UploadOutlined } from "@ant-design/icons";
import ajax from "@/services";
import moment from "moment";
import { dictionary, utils } from "@/config/common";
import {
FormSelect,
ExportBtnNew,
ExportPMS,
OptionPanel,
SystemSearch,
ResultPanel,
FormSliderPicker,
SelectGaodeLngLat,
ResultFlow,
AreaCascader,
ImgResize,
ImgZoom,
TreeSelectGroup,
} from "@/components";
import "./index.scss";
import { getToken } from "@/config/cookie";
import { useSetState, useSessionStorageState, useUpdateEffect } from "ahooks";
const { TextArea } = Input;
const ConfigRoad = (props) => {
const {
getRecordList = {}
} = props
console.log(getRecordList);
const navigate = useNavigate();
//编辑泊位提交的编辑泊位
const location = useLocation();
const parking_id = getRecordList.id;
const operator_id = getRecordList.operator_id;
// const region_id = location.search.split("&")[2].split("=")[1];
const [modalBtnLoading, setModalBtnLoading] = useState(false)
//泊位管理Form
const [berthForm] = Form.useForm();
const [dataForm] = Form.useForm();
const [editPoleForm] = Form.useForm();
const [ruleForm] = Form.useForm(); //计费规则-添加或编辑规则的Form
const [getEditData, setGetEditData] = useState({})
const [getIdValue, setGetIdValue] = useState({})
//计费规则添加弹窗的泊位选择框
const [showBerthSelect, setShowBerthSelect] = useState(false);
//编辑杆位
const [editTitle, setEditTitle] = useState(false)
const berthManage = {
form: [
{
label: "泊位号",
type: "input",
placeholder: "请输入泊位号",
name: "berth_code",
},
{
label: "视频设备名称",
type: "input",
placeholder: "请输入内容",
name: "video_content",
},
],
columns: [
{
title: "泊位排序",
dataIndex: "index",
key: "index",
align: "center",
render: (_, record, index) => {
return index + 1;
},
},
{
title: "泊位号",
dataIndex: "berth_code",
key: "berth_code",
align: "center",
},
{
title: "ETC是否开启",
dataIndex: "etc_status_name",
key: "etc_status_name",
align: "center",
},
{
title: "对应视频设备",
dataIndex: "video_equipment_name",
key: "video_equipment_name",
align: "center",
},
{
title: "计费规则",
dataIndex: "rule_id",
key: "rule_id",
align: "center",
},
{
title: "经纬度",
dataIndex: "lng_lat",
key: "lng_lat",
align: "center",
},
{
title: "服务属性",
dataIndex: "service_type_name",
key: "service_type_name",
align: "center",
},
{
title: "状态",
dataIndex: "status",
key: "status",
align: "center",
render: (text) => {
return text == 1 ? "上线" : text == 2 ? "下线" : "已删除";
},
},
{
title: "更新时间",
dataIndex: "update_time",
key: "update_time",
align: "center",
},
{
title: "操作",
dataIndex: "operator",
key: "operator",
align: "center",
render: (_, record) => {
return (
<>
<Popover
content={
<>
<div>
<a
onClick={() => {
setBerthModal({ record, visible: true });
}}
>
查看
</a>
</div>
<div>
<a
onClick={() => {
setIsEdit(true);
setEditBerthModal(true);
setGetEditData(record);
berthForm.setFieldsValue({
berth_code: record.berth_code,
service_type: record.service_type,
berth_type: record.berth_type,
etc_status: record.etc_status,
});
setLngLat(record.lng_lat);
}}
>
编辑
</a>
</div>
<div>
<a
onClick={() => {
setConfirmModalData({
...confirmModalData,
visible: true,
type: record.status == 1 ? 2 : 1,
ids: [record.id],
func: (ids, status) =>
ajax.editStatus({
ids: ids,
status,
})
});
// console.log(record.status);
}}
>
{record.status == 1 ? "下线" : "上线"}
</a>
</div>
<div>
<a
onClick={() => {
setConfirmModalData({
...confirmModalData,
visible: true,
type: 3,
ids: [record.id],
func: (ids, status) =>
ajax.editStatus({
ids: ids,
status,
})
});
}}
>
删除
</a>
</div>
</>
}
>
<Button type="primary">操作</Button>
</Popover>
</>
);
},
},
],
confirmModalData: {
visible: false,
type: 1, //1上线 2下线 3 删除
ids: [],
},
initialValues: {
berth_id: "",
video_content: "",
},
exporturl: "/api/bpm/berth/export",
downloadUrl: "api/bpm/berth/berth_import_template",
importProps: {
name: "file",
data: { road_id: parking_id },
action: "/PMS/api/bpm/berth/import",
headers: {
Authorization: getToken(),
},
onChange(info) {
if (info.file.status !== "uploading") {
console.log(info.file, info.fileList);
}
if (info.file.status === "done") {
if (info.file.response.status === 20000) {
message.success(`${info.file.name} 上传成功`);
formRef.current.getList();
} else {
message.error(info.file.response.message);
}
} else if (info.file.status === "error") {
message.error(`${info.file.name} file upload failed.`);
}
},
},
search: function (params) {
ajax
.getManageList(params)
.then((res) => {
if (res.status === 20000) {
setResultData({
data: res.data.list,
total_records: res.data.total,
});
setLoading(false)
} else {
message.error(res.message);
}
})
.catch((err) => {
console.log(err);
});
},
key: "berth_code",
create: function (params) {
setIsEdit(false);
berthForm.resetFields();
setEditBerthModal(true);
},
};
const [transferSouceData, setTransferSouceData] = useState([]);
//数据采集设备管理
const dataDevice = {
form: [
{
label: "设备名称",
type: "input",
placeholder: "请输入内容",
name: "device_name",
},
{
label: "设备编号",
type: "input",
placeholder: "请输入内容",
name: "device_id",
},
{
label: "对应杆位号",
type: "input",
placeholder: "请输入内容",
name: "num",
},
{
label: "状态",
type: "select",
placeholder: "请输入内容",
name: "status",
options: [
{
label: "上线",
value: 1,
},
{
label: "下线",
value: 2,
},
],
},
],
columns: [
{
title: "设备名称",
dataIndex: "name",
key: "name",
align: "center",
},
{
title: "设备号",
dataIndex: "code",
key: "code",
align: "center",
},
{
title: "设备类型",
dataIndex: "type_name",
key: "type_name",
align: "center",
},
{
title: "对应杆位号",
dataIndex: "pole_position_code",
key: "pole_position_code",
align: "center",
},
{
title: "状态",
dataIndex: "operate_status",
key: "operate_status",
align: "center",
},
{
title: "更新时间",
dataIndex: "update_time",
key: "update_time",
align: "center",
},
{
title: "操作",
dataIndex: "operator",
key: "operator",
align: "center",
render: (_, record) => {
return (
<Popover
trigger="hover"
content={
<>
<div>
<a
onClick={() => {
ajax.getDeviceInfo({ id: record.id }).then((res) => {
if (res.status === 20000) {
setDataAcquistionDetail({
visible: true,
record: res.data,
});
} else {
message.error(res.message);
}
});
}}
>
查看
</a>
</div>
<div>
<a
onClick={() => {
setGetIdValue(record.id);
setDataAcquistionModal({
...dataAcquistionModal,
visible: true,
record: record,
isEdit: 1,
});
getEditInRoad(record);
dataAcquistionModal.form.setFieldsValue({
name: record.name,
code: record.code,
type: record.type_id,
brand: record.brand_id,
function: record.function_id,
note: record.note,
});
}}
>
编辑
</a>
</div>
<div>
<a
onClick={() => {
setDataStatusChangeModal({
visible: true,
type: record.status === 1 ? 2 : 1,
record: record,
});
}}
>
{record.status === 1 ? "下线" : "上线"}
</a>
</div>
<div>
<a
onClick={() => {
setDataStatusChangeModal({
visible: true,
type: 3,
record: record,
});
}}
>
删除
</a>
</div>
</>
}
>
<Button type="primary">操作</Button>
</Popover>
);
},
},
],
exporturl: "/api/bpm/device/export_device",
downloadUrl: "/api/bpm/device/device_import_template",
importProps: {
name: "file",
data: { road_id: parking_id },
headers: {
Authorization: getToken(),
},
action: "/PMS/api/bpm/device/import_device",
onChange(info) {
if (info.file.status !== "uploading") {
console.log(info.file, info.fileList);
}
if (info.file.status === "done") {
if (info.file.response.status === 20000) {
message.success(`${info.file.name} 上传成功`);
formRef.current.getList();
} else {
message.error(info.file.response.message);
}
} else if (info.file.status === "error") {
message.error(`${info.file.name} file upload failed.`);
}
},
},
key: "id",
search: function (params) {
ajax
.getDeviceDimensionList(params)
.then((res) => {
if (res.status === 20000) {
setResultData({
data: res.data.list,
total_records: res.data.total,
});
setLoading(false)
} else {
message.error(res.message);
}
})
.catch((err) => console.error(err));
},
create: function (params) {
getAllBerth();
setDataAcquistionModal({
...dataAcquistionModal,
visible: true,
isEdit: 0,
});
dataAcquistionModal.form.resetFields();
},
};
//杆位管理
const poleManage = {
form: [
{
label: "杆位号",
type: "input",
placeholder: "请输入内容",
name: "pole_content",
},
],
columns: [
{
title: "杆位号",
dataIndex: "code",
width: 180,
key: "code",
align: "center",
},
{
title: "更新时间",
dataIndex: "update_time",
width: 180,
key: "update_time",
align: "center",
},
{
title: "操作",
width: 180,
dataIndex: "operator",
key: "operator",
align: "center",
render: (_, record) => {
return (
<Popover
trigger="hover"
content={
<>
<div>
<a
onClick={() => {
ajax.getPoleInfo({ id: record.id }).then((res) => {
if (res.status === 20000) {
setCheckPoleModal({
visible: true,
record: res.data,
});
}
});
}}
>
查看
</a>
</div>
<div>
<a
onClick={() => {
getEditRoadDevice(record)
getDevice(record)
ajax.getPoleInfo({ id: record.id }).then((res) => {
setEditTitle(true)
if (res.status === 20000) {
const { data } = res;
let videoIds = [];
if (
data.video_device_ids !== null &&
data.video_device_ids !== ""
) {
videoIds = data.video_device_ids
.split(",")
.map((item) => +item);
}
let monitorIds = [];
if (
data.monitor_device_ids !== null &&
data.monitor_device_ids !== ""
) {
monitorIds = data.monitor_device_ids
.split(",")
.map((item) => +item);
}
setEditPoleModal({
...editPoleModal,
visible: true,
record: data,
isEdit: 1,
});
editPoleForm.setFieldsValue({
code: data.code,
has_pole: data.has_pole,
video_device_ids: videoIds,
monitor_device_ids: monitorIds,
});
setLngLatModal({
...lngLatModal,
value: data.lng_lat,
});
}
});
}}
>
编辑
</a>
</div>
<div>
<a
onClick={() => {
setPoleModal({ visible: true, id: [record.id] });
}}
>
删除
</a>
</div>
</>
}
>
<Button type="primary">操作</Button>
</Popover>
);
},
},
],
key: "id",
exporturl: "/api/bpm/device/export_pole_position",
downloadUrl: "/api/bpm/device/road_set_pole_position_import_template",
importProps: {
name: "file",
action: "/PMS/api/bpm/device/road_set_import_pole_position",
data: { road_id: parking_id },
headers: {
Authorization: getToken(),
},
onChange(info) {
if (info.file.status !== "uploading") {
console.log(info.file, info.fileList);
}
if (info.file.status === "done") {
if (info.file.response.status === 20000) {
message.success(`${info.file.name} 上传成功`);
formRef.current.getList();
} else {
message.error(info.file.response.message);
}
} else if (info.file.status === "error") {
message.error(`${info.file.name} file upload failed.`);
}
},
},
search: function (params) {
ajax
.getPoleListData(params)
.then((res) => {
if (res.status === 20000) {
setResultData({
data: res.data.list,
total_records: res.data.total,
});
setLoading(false)
} else {
message.error(res.message);
}
})
.catch((err) => console.error(err));
},
create: function (params) {
setEditTitle(false)
getRoadDevice(parking_id);
getRoadMonitorDevice(parking_id);
console.log(12122);
setEditPoleModal({
...editPoleModal,
visible: true,
record: {},
isEdit: 0,
});
editPoleForm.resetFields();
setLngLatModal({
...lngLatModal,
value: [],
});
},
};
useEffect(() => {
getAllBerth();
}, [currentObj]);
//计费规则
const billingRule = {
form: [
{
label: "计费规则",
type: "select",
name: "rule",
options: billRuleList,
},
],
columns: [
{
title: "序号",
dataIndex: "index",
key: "index",
align: "center",
render: (_, record, index) => {
return index + 1;
},
},
{
title: "规则名称",
dataIndex: "rule_name",
key: "rule_name",
align: "center",
},
{
title: "车辆类型",
dataIndex: "vehicle_type_name",
key: "vehicle_type_name",
align: "center",
},
{
title: "计费说明",
dataIndex: "note",
key: "note",
align: "center",
},
{
title: "是否按泊位计费",
dataIndex: "berth_ids",
key: "berth_ids",
align: "center",
render: (text) => {
return text === "" ? "否" : "是";
},
},
{
title: "更新时间",
dataIndex: "update_time",
key: "update_time",
align: "center",
},
{
title: "操作",
dataIndex: "operator",
key: "operator",
align: "center",
render: (_, record) => {
return (
<Popover
trigger="hover"
content={
<>
<div>
<a
onClick={() => {
setCurRuleRecord(record);
setRuleDetailModal(true);
}}
>
查看
</a>
</div>
<div>
<a
onClick={() => {
setCurRuleRecord(record);
console.log(record);
ruleForm.setFieldsValue({
vehicle_type: record.vehicle_type,
rule_id: record.rule_id,
is_select: record.berth_ids === "" ? 0 : 1,
id: record.id
});
// setSelectedBerth(record.berth_ids.split(",").map(item => +item))
setRuleModal(true);
// setIsRuleEdit(true);
setIsRuleEdit(true);
setShowBerthSelect(false);
if (record.berth_ids != '') {
setShowBerthSelect(true);
setIsRuleEdit(true);
}
// }
let data = {
road_id: parking_id,
vehicle_type: record.vehicle_type,
id: record.id
}
ajax
.getRuleBerth(data)
.then((res) => {
if (res.status === 20000) {
res.data.left.map(item => {
item.key = item.value
return item
})
setAllBerthList(res.data.left);
setSelectedBerth(res.data.right)
console.log(res.data.list);
} else {
message.error(res.message)
}
})
}}
>
编辑
</a>
</div>
<div>
<a
onClick={() => {
setCurRuleRecord(record);
setRuleDelModal({ id: record.id, visible: true });
}}
>
删除
</a>
</div>
</>
}
>
<Button type="primary">操作</Button>
</Popover>
);
},
},
],
exporturl: "",
downloadUrl: "",
importProps: {
name: "file",
action: "/PMS/api/bpm/berth/import",
onChange(info) {
if (info.file.status !== "uploading") {
console.log(info.file, info.fileList);
}
if (info.file.status === "done") {
if (info.file.response.status === 20000) {
message.success(`${info.file.name} 上传成功`);
} else {
message.error(info.file.response.message);
}
} else if (info.file.status === "error") {
message.error(`${info.file.name} file upload failed.`);
}
},
},
key: "rule_name",
search: function (params) {
ajax
.getRoadRuleList(params)
.then((res) => {
if (res.status === 20000) {
setResultData({
data: res.data.list,
total_records: res.data.total,
});
setLoading(false)
} else {
message.error(res.message);
}
})
.catch((err) => console.error(err));
},
create: function () {
setCurRuleRecord({
vehicle_type: null,
rule_id: null,
is_select: 0,
});
setShowBerthSelect(false);
ruleForm.setFieldsValue({
vehicle_type: null,
rule_id: null,
is_select: 0,
});
setIsRuleEdit(false);
setRuleModal(true);
},
};
//form子组件
const formRef = React.useRef();
//收费员管理
const tollCollector = {
form: [
{
label: "收费员姓名",
type: "input",
placeholder: "请输入内容",
name: "collect_name",
},
{
label: "登陆名",
type: "input",
placeholder: "请输入内容",
name: "login_name",
},
],
columns: [
{
title: "收费员姓名",
dataIndex: "name",
key: "name",
align: "center",
},
{
title: "员工编号",
dataIndex: "number",
key: "number",
align: "center",
},
{
title: "PDA账号",
dataIndex: "pda_number",
key: "pda_number",
align: "center",
},
{
title: "操作",
dataIndex: "operator",
key: "operator",
align: "center",
render: (_, record) => {
return (
<Popover
trigger="hover"
content={
<div>
<a
onClick={() => {
setDelTollModal({
...delTollModal,
visible: true,
id: record.id,
});
}}
>
删除
</a>
</div>
}
>
<Button type="primary">操作</Button>
</Popover>
);
},
},
],
initialValues: {
collect_name: "",
login_name: "",
},
exporturl: "",
key: "number",
search: function (params) {
ajax
.getTollList(params)
.then((res) => {
if (res.status === 20000) {
setResultData({
data: res.data.list,
total_records: res.data.total,
});
setLoading(false)
} else {
message.error(res.message);
}
})
.catch((err) => console.error(err));
},
create: function (params) {
setTollModal(true);
},
};
//目前页面的对象
const [currentObj, setCurrentObj] = useState(berthManage);
const [type, setType] = useState(1);
const [loading, setLoading] = useState(false);
const [resultData, setResultData] = useSetState({
// 请求结果
total_records: 0,
data: [],
});
//批量导入弹窗
const [importGroup, setImportGroup] = useState({
visible: false,
imPortUrl: "",
});
//泊位弹窗
const [berthModal, setBerthModal] = useState({
visible: false,
record: {},
});
//编辑泊位弹窗
const [editBerthModal, setEditBerthModal] = useState(false);
//是编辑还是添加的标志
const [isEdit, setIsEdit] = useState(true);
//经纬度弹窗和经纬度数据
const [lngLatVisible, setLngLatVisible] = useState(false);
const [lngLat, setLngLat] = useState([]);
//操作选中的数据
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [pageData, setPageData] = useSetState({
// 分页参数
pn: 1,
page_size: 20,
});
//收费员弹窗
const [tollModal, setTollModal] = useState(false);
//可以选择的收费员列表
const [canSelectTollList, setCanSelectTollList] = useState([]);
//已选择的收费员列表
const [hasSelectTollList, setHasSelectTollList] = useState([]);
//rowkey
const [rowKey, setRowKey] = useState("");
//计费规则添加弹窗
const [ruleModal, setRuleModal] = useState(false);
//确认弹框的数据
const [confirmModalData, setConfirmModalData] = useState({
visible: false,
type: 1, //1上线 2下线 3 删除
ids: [],
func: () => { },
});
//计费规则添加对应的泊位号
const [allBerthList, setAllBerthList] = useState([]);
//计费规则编辑弹窗是编辑还是新增
const [isRuleEdit, setIsRuleEdit] = useState(false);
//计费规则
const [billRuleList, setBillRuleList] = useState([]);
//编辑计费规则时候的记录信息
const [curRuleRecord, setCurRuleRecord] = useState({});
//选择中的泊位号
const [selectedBerth, setSelectedBerth] = useState([]);
//ruleDetailModal
const [ruleDetailModal, setRuleDetailModal] = useState(false);
//删除弹框
const [ruleDelModal, setRuleDelModal] = useState({
visible: false,
id: [],
});
//收费员管理-删除收费员
const [delTollModal, setDelTollModal] = useState({
visible: false,
id: -1,
delFunc: deletToll,
close: () => {
setDelTollModal({ ...delTollModal, visible: false });
},
});
//数据采集设备管理添加弹窗
const [dataAcquistionModal, setDataAcquistionModal] = useState({
visible: false,
record: {},
form: dataForm,
isEdit: 0,
});
//数据采集设备新增弹窗里面啊的选择数据
const [dataAcquistionSelect, setDataAcquistionSelect] = useState({
typeList: [],
brandList: [],
funcList: [],
});
//数据采集设备泊位列表数据
const [dataAcquistionBerth, setDataAcquistionBerth] = useState([]);
const [dataAcquistionTargetKeys, setDataAcquistionTargetKeys] = useState([]);
//数据采集设备上线,下线,删除弹窗
const [dataStatusChangeModal, setDataStatusChangeModal] = useState({
visible: false,
type: 1,
record: {},
});
//杆位删除
const [poleModal, setPoleModal] = useState({
visible: false,
id: [],
});
//杆位查看弹窗
const [checkPoleModal, setCheckPoleModal] = useState({
visible: false,
record: {},
});
const [getMonitorData, setGetMonitorData] = useState([])
const [getRoadData, seGetRoadData] = useState([])
//杆位修改弹窗
const [editPoleModal, setEditPoleModal] = useState({
form: editPoleForm,
visible: false,
isEdit: 0,
record: {},
});
//video_device
const [videoDeviceList, setVideoDeviceList] = useState([]);
const [monitorDeviceList, setMonitorDeviceList] = useState([]);
//杆位管理地图选点弹窗
const [lngLatModal, setLngLatModal] = useState({
visible: false,
value: [],
});
//数据采集设备管理页面弹窗
const [dataAcquistionDetail, setDataAcquistionDetail] = useState({
visible: false,
record: {},
});
function onShowSizeChange(pn, page_size) {
setPageData({ pn, page_size });
}
//table选择
const rowSelection = {
onChange: (selectedRowKeys, selectedRows) => {
let arr = [];
selectedRows.map((res) => {
arr.push(res.id);
});
setSelectedRowKeys(arr);
},
getCheckboxProps: (record) => ({
disabled: record.name === "Disabled User",
// Column configuration not to be checked
name: record.berth_code,
// key: record.berth_code,
}),
};
//收费员管理-添加收费员
function addToll(road_id, ids) {
ajax
.addToll({ road_id, ids })
.then((res) => {
if (res.status === 20000) {
message.success(res.message);
formRef.current.getList();
} else {
message.error(res.message);
}
})
.catch((err) => console.error(err));
}
const [getDeviceType, setGetDeviceType] = useState([])
const deviceType = () => {
let arr = sysConfig.berthType
let newArr = arr.slice(1)
setGetDeviceType(newArr)
}
useEffect(() => {
deviceType()
}, [])
//1:泊位管理上线,2:下线,3:已删除
function changeBerthManage(status) {
console.log(selectedRowKeys);
if (selectedRowKeys.length != []) {
setConfirmModalData({
...confirmModalData,
type: status,
ids: selectedRowKeys,
visible: true,
});
} else {
message.error("请至少选择一条数据");
}
}
const [getLeftBerth, setLeftGetBerth] = useState([]);
const [selectedKeys, setSelectedKeys] = useState([]);
const [targetKeys, setTargetKeys] = useState([]);
function getEditInRoad(record) {
let data = {
video_equipment_id: record.id,
road_id: record.road_id,
};
ajax.getEditInRoadData(data).then((res) => {
if (res.status == 20000) {
let temparr = [];
let temparrRight = [];
res.data.left.map((item) => {
temparr.push({
key: item.value + "",
title: item.label,
});
});
setLeftGetBerth(temparr);
setTargetKeys(res.data.right);
}
});
}
const onChangeSelect = (nextTargetKeys, direction, moveKeys) => {
console.log("targetKeys:", nextTargetKeys);
console.log("direction:", direction);
console.log("moveKeys:", moveKeys);
setTargetKeys(nextTargetKeys);
};
const onSelectChange = (sourceSelectedKeys, targetSelectedKeys) => {
console.log("sourceSelectedKeys:", sourceSelectedKeys);
setSelectedKeys([...sourceSelectedKeys, ...targetSelectedKeys]);
};
//收费员管理-删除收费员
function deletToll(id) {
ajax
.delToll({ id })
.then((res) => {
if (res.status === 20000) {
message.success(res.message);
formRef.current.getList();
} else {
message.error(res.message);
}
})
.catch((err) => console.error(err));
}
useEffect(() => {
console.log(formRef.current);
}, [formRef.current])
function getRoadTollList() {
ajax
.getRoadTollList({ road_id: parking_id })
.then((res) => {
if (res.status === 20000) {
let data = res.data.map((item) => {
item.label = item.text;
item.key = item.value;
return item;
});
setCanSelectTollList(data);
} else {
message.error(res.message);
}
})
.catch((err) => console.error(err));
}
const [getCarType, setGetCarType] = useState(true)
const [getCarTypeValue, setGetCarTypeValue] = useState({})
//处理添加计费规则-车辆类型切换
function handleCarTypeChange(value) {
setGetCarTypeValue(value)
if (value === '') {
setGetCarType(true)
} else {
setGetCarType(false)
let data = {
road_id: parking_id,
vehicle_type: value
}
ajax
.getRuleBerth(data)
.then((res) => {
if (res.status === 20000) {
res.data.left.map(item => {
item.key = item.value
return item
})
setAllBerthList(res.data.left);
} else {
message.error(res.message)
}
})
.catch((err) => console.error(err));
}
if (value === void 0) {
return;
}
}
const [getCarTypeType, setGetCarTypeType] = useState({})
useEffect(() => {
if (selectedBerth.length != []) {
setGetCarTypeType(0)
}
}, [selectedBerth])
//新增或编辑计费规则
function addOrEditRoadRule() {
function addRule(data) {
if (getCarTypeType === 1 && selectedBerth.length == []) {
message.error('请选择对应的泊位号')
} else {
ajax
.addOrEditRoadRule(data)
.then((res) => {
if (res.status === 20000) {
setRuleModal(false);
formRef.current.getList();
setSelectedBerth([]);
setGetCarType(true)
} else {
message.error(res.message);
}
})
.catch((err) => console.error(err));
}
}
function editRule(data) {
console.log(data);
data.berth_ids = selectedBerth;
ajax
.editRoadRule(data)
.then((res) => {
if (res.status === 20000) {
setRuleModal(false);
formRef.current.getList();
setSelectedBerth([]);
} else {
message.error(res.message);
}
})
.catch((err) => console.error(err));
}
ruleForm
.validateFields()
.then((res) => {
const data = {
road_id: parking_id,
type: isRuleEdit ? "edit" : "add",
id: isRuleEdit ? curRuleRecord.id : null,
...ruleForm.getFieldsValue(),
berth_ids:
ruleForm.getFieldsValue().is_select === 0 ? [] : selectedBerth,
};
switch (isRuleEdit) {
case true:
editRule(data);
break;
case false:
addRule(data);
break;
}
})
.catch((err) => {
message.error(err);
});
}
//数据采集设备管理添加弹窗里面的Select数据
async function getDataSelect() {
const typeListAjax = ajax.getDeviceTypeList();
const brandListAjax = ajax.getAllBrandNameList();
const funcListAjax = ajax.getDeviceFuncList();
const [typeList, brandList, funcList] = await Promise.all([
typeListAjax,
brandListAjax,
funcListAjax,
]);
setDataAcquistionSelect({
typeList: typeList.data,
brandList: brandList.data,
funcList: funcList.data,
});
}
//数据采集设备管理提交接口
function handleDataAcquistionModal() {
function addDevice(res) {
ajax
.addDevice({
...res,
road_id: parking_id,
berth_ids: dataAcquistionTargetKeys,
})
.then((res) => {
if (res.status === 20000) {
message.success(res.message);
setDataAcquistionModal({
...dataAcquistionModal,
visible: false,
});
formRef.current.getList();
setModalBtnLoading(false)
} else {
message.error(res.message);
setModalBtnLoading(false)
}
});
}
function editDevice(res) {
console.log(res);
ajax
.editDevice({
...res,
id: getIdValue,
road_id: parking_id,
berth_ids: selectedKeys,
})
.then((res) => {
if (res.status === 20000) {
message.success(res.message);
setDataAcquistionModal({
...dataAcquistionModal,
visible: false,
});
formRef.current.getList();
} else {
message.error(res.message);
}
});
}
dataAcquistionModal.form.validateFields().then(
(res) => {
switch (dataAcquistionModal.isEdit) {
case 0:
addDevice(res);
break;
case 1:
editDevice(res);
break;
}
},
(err) => {
console.error(err);
}
);
}
//数据采集设备上线下线删除接口
function handleDataStatusChange() {
const id = [dataStatusChangeModal.record.id];
console.log(id);
//上线
function online(id) {
ajax
.onlineOrOffline({
id,
})
.then((res) => {
if (res.status === 20000) {
message.success(res.message);
setDataStatusChangeModal({
...dataStatusChangeModal,
visible: false,
});
formRef.current.getList();
} else {
message.error(res.message);
}
});
}
//下线
function offline(id) {
ajax.offlineDevice({ id }).then((res) => {
if (res.status === 20000) {
message.success(res.message);
setDataStatusChangeModal({
...dataStatusChangeModal,
visible: false,
});
formRef.current.getList();
} else {
message.error(res.message);
}
});
}
//删除
function deleteDevice(id) {
ajax.delDataDevice({ id }).then((res) => {
if (res.status === 20000) {
message.success(res.message);
setDataStatusChangeModal({
...dataStatusChangeModal,
visible: false,
});
formRef.current.getList();
} else {
message.error(res.message);
}
});
}
switch (dataStatusChangeModal.type) {
case 1:
online(id);
break;
case 2:
offline(id);
break;
case 3:
deleteDevice(id);
break;
default:
break;
}
}
//获取所有泊位
function getAllBerth() {
ajax.getAllBerth({ road_id: parking_id, is_bind_device: 1 }).then((res) => {
if (res.status === 20000) {
let _data = res.data.map((item) => {
item.key = item.value;
return item;
});
setDataAcquistionBerth(_data);
} else {
message.error(res.message);
}
});
}
//获取视频设备
function getRoadDevice(id) {
ajax.getRoadDevice({ road_id: id }).then((res) => {
if (res.status === 20000) {
res.data.left.map((item) => {
item.key = item.value;
return item;
});
// console.log(res.data.left);
setVideoDeviceList(res.data.left);
} else {
message.error(res.message);
}
});
}
const [getEditTarket, setGetEditTarket] = useState([])
const [getLeftEditTarket, setGetLeftEditTarket] = useState([])
const [getSelectedKeys, setGetSelectedKeyst] = useState([])
function getEditRoadDevice(record) {
let data = {
road_id: parking_id,
id: record.id
}
ajax.getRoadDevice(data).then((res) => {
if (res.status === 20000) {
res.data.left.map((item) => {
item.key = item.value;
return item;
});
setGetLeftEditTarket(res.data.left);
setGetEditTarket(res.data.right);
} else {
message.error(res.message);
}
});
}
const onSelectRoadChange = (sourceSelectedKeys, targetSelectedKeys) => {
console.log("sourceSelectedKeys:", sourceSelectedKeys);
setGetSelectedKeyst([...sourceSelectedKeys, ...targetSelectedKeys]);
};
const onSelectChangeRoad = (nextTargetKeys, direction, moveKeys) => {
setGetEditTarket(nextTargetKeys);
};
//获取监控设备
function getRoadMonitorDevice(id) {
ajax.getRoadMonitorDevice({ road_id: id }).then((res) => {
if (res.status === 20000) {
res.data.left.map((item) => {
item.key = item.value;
return item;
});
setMonitorDeviceList(res.data.left);
} else {
message.error(res.message);
}
});
}
const [getDeviceTarket, setGetDeviceTarket] = useState([])
const [getLeftDeviceTarket, setGetLeftDeviceTarket] = useState([])
const [getLeftDevicetargetKey, setGetLeftDevicetargetKey] = useState([])
function getDevice(record) {
let data = {
road_id: parking_id,
id: record.id
}
ajax.getRoadMonitorDevice(data).then((res) => {
if (res.status === 20000) {
res.data.left.map((item) => {
item.key = item.value;
return item;
});
setGetLeftDeviceTarket(res.data.left);
setGetDeviceTarket(res.data.right);
} else {
message.error(res.message);
}
});
}
const onSelectDeviceChange = (sourceSelectedKeys, targetSelectedKeys) => {
console.log("sourceSelectedKeys:", sourceSelectedKeys);
setGetLeftDevicetargetKey([...sourceSelectedKeys, ...targetSelectedKeys]);
};
const onSelectChangeDevice = (nextTargetKeys, direction, moveKeys) => {
setGetDeviceTarket(nextTargetKeys);
};
//获取计费规则
const getBillRule = (operator_id) => {
ajax
.getBillRule({ operator_id })
.then((res) => {
if (res.status === 20000) {
setBillRuleList(res.data);
return Promise.resolve(res.data);
} else {
message.error(res.message);
}
})
.then((res) => {
billingRule.form[0].options = res;
setCurrentObj(billingRule);
});
};
const submitPole = () => {
const isEdit = editPoleModal.isEdit;
function addPole(params) {
ajax.addPolePosition(params).then((res) => {
if (res.status === 20000) {
setEditPoleModal({ ...editPoleModal, visible: false });
message.success(res.message);
formRef.current.getList();
seGetRoadData([])
setGetMonitorData([])
} else {
message.error(res.message);
}
});
}
function editPole(params) {
ajax.editPolePosition(params).then((res) => {
if (res.status === 20000) {
setEditPoleModal({ ...editPoleModal, visible: false });
message.success(res.message);
formRef.current.getList();
} else {
message.error(res.message);
}
});
}
editPoleForm
.validateFields()
.then((value) => {
console.log(value);
if (editPoleModal.isEdit) {
value = { ...value, id: editPoleModal.record.id };
} else {
value = { ...value };
}
value = { ...value, lng_lat: lngLatModal.value, road_id: parking_id };
switch (isEdit) {
case 1:
editPole(value);
break;
case 0:
addPole(value);
break;
}
})
.catch((err) => {
console.error(err);
});
};
//删除杆位
function delPolePosition(params) {
ajax.delPolePosition(params).then((res) => {
if (res.status === 20000) {
message.success(res.message);
setPoleModal({ ...poleModal, visible: false });
formRef.current.getList();
} else {
message.error(res.message);
}
});
}
function confirmDelPole() {
delPolePosition({ id: poleModal.id });
}
const beforeUpload = (file) => {
const isExcel = file.type === 'application/vnd.ms-excel' || file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
if (!isExcel) {
message.error('你只能上传Excel文件!');
}
return isExcel || Upload.LIST_IGNORE;
};
useEffect(() => {
switch (type) {
case 1:
setCurrentObj(berthManage);
setRowKey(berthManage.key);
setConfirmModalData({
...confirmModalData,
func: (ids, status) =>
ajax.editStatus({
ids: ids,
status,
}).then(res => {
if (res.status === 20000) {
message.success(res.message)
}
}),
});
break;
case 2:
setCurrentObj(dataDevice);
setRowKey(dataDevice.key);
getDataSelect();
getAllBerth();
setConfirmModalData({
...confirmModalData,
func: (ids, status) => {
let func = null;
switch (status) {
case 1:
func = ajax.onlineOrOffline({
id: ids,
});
break;
case 2:
func = ajax.offlineDevice({ id: ids });
break;
case 3:
func = ajax.delDataDevice({ id: ids });
}
return func;
},
});
break;
case 3:
setCurrentObj(poleManage);
setRowKey(poleManage.key);
setConfirmModalData({
...confirmModalData,
func: (ids, status) => ajax.delPolePosition({ id: ids }),
});
break;
case 4:
getBillRule(operator_id);
break;
case 5:
setCurrentObj(tollCollector);
setRowKey(tollCollector.key);
getRoadTollList();
break;
default:
break;
}
}, [type]);
return (
<div className="ConfigRoad">
<div className="left-search">
<div className="title">{"查询条件"}</div>
<div className="searchWrap">
<SearchPart
ref={formRef}
road_id={parking_id}
formData={currentObj.form}
search={currentObj.search}
initialValues={currentObj.initialValues}
pageData={pageData}
setSelectedRowKeys={setSelectedRowKeys}
total={resultData.total_records}
exporturl={currentObj.exporturl}
closeConfirmModal={() => {
setConfirmModalData({ ...confirmModalData, visible: false });
}}
confirmModalData={confirmModalData}
delTollModal={delTollModal}
isShowExportBtn={type !== 4 && type !== 5}
/>
</div>
</div>
<div className="right-list">
<div className="total-row-wrapper">
<span className="number-wrapper">
{/* <span>
<Button
type="primary"
style={{ marginRight: "10px" }}
onClick={() => {
navigate(-1);
}}
>
返回
</Button>
</span> */}
<span className="letter">共查询到</span>
<span className="total-number"> {resultData.total_records}</span>
<span className="letter">条结果</span>
</span>
<div>
<Button
style={{ margin: "0 10px" }}
type="primary"
onClick={currentObj.create}
>
添加
</Button>
{type === 4 || type === 5 ? (
<></>
) : (
<Button
type="primary"
onClick={() => {
setImportGroup({ ...importGroup, visible: true });
}}
>
批量导入
</Button>
)}
</div>
</div>
<div className="tabs-box">
<Tabs
activeKey={type}
items={[
{
key: 1,
label: "泊位管理",
},
{
key: 2,
label: "数据采集设备管理",
},
{
key: 3,
label: "杆位管理",
},
{
key: 4,
label: "计费规则",
},
{
key: 5,
label: "收费员管理",
},
]}
hideAdd={true}
onChange={(type) => {
setLoading(true)
setType(type);
}}
/>
</div>
<ResultFlow
hasLoad={true}
ajaxLoad={loading}
resultData={resultData}
message={"暂无数据"}
>
<div className="table-wrap">
<Table
rowKey={rowKey}
// loading={loading}
rowSelection={
type === 4 || type === 5
? false
: {
type: "checkbox",
...rowSelection,
}
}
// className="yisa-table"
columns={currentObj.columns}
dataSource={resultData.data}
pagination={false}
/>
</div>
<div className="page-part">
{type === 4 || type === 5 ? (
<></>
) : (
<div className="button-part">
{type === 3 ? (
<></>
) : (
<>
<Button
type="primary"
onClick={() => {
changeBerthManage(1);
}}
>
上线
</Button>
<Button
type="primary"
onClick={() => {
changeBerthManage(2);
}}
>
下线
</Button>
</>
)}
<Button
type="primary"
onClick={() => {
changeBerthManage(3);
}}
>
删除
</Button>
</div>
)}
<Pagination
className="pagination-common"
showSizeChanger={true}
showQuickJumper={true}
// showTotal={() => `共 ${total_records} 条`}
total={resultData.total_records}
current={pageData.pn}
pageSize={pageData.page_size}
pageSizeOptions={dictionary?.pageSizeOptions}
onChange={onShowSizeChange}
onShowSizeChange={onShowSizeChange}
/>
</div>
</ResultFlow>
</div>
<Modal
open={importGroup.visible}
destroyOnClose={true}
style={{ width: 88 }}
onCancel={() => {
setImportGroup({ ...importGroup, visible: false });
}}
title={"批量导入"}
footer={null}
>
<div>
<p>
1.请先获取批量添加设备的Excel模板将需要添加的信息填写后进行上传该Excel文件
上传非规范文件可能造成数据错误
<ExportPMS
url={currentObj.downloadUrl}
data={{ road_id: parking_id }}
>
点击下载
</ExportPMS>
模板文件
</p>
<p>2.请选择上传文件并上传</p>
<Upload {...currentObj.importProps} beforeUpload={beforeUpload}>
<Button type="primaryimport { pages } from '@/pages';" icon={<UploadOutlined />}>
上传
</Button>
</Upload>
</div>
</Modal>
<Modal
open={berthModal.visible}
title="查看泊位"
onCancel={() => {
setBerthModal({ ...berthModal, visible: false });
}}
>
<Descriptions column={1}>
<Descriptions.Item label="泊位号">
{berthModal.record.berth_code}
</Descriptions.Item>
<Descriptions.Item label="经纬度">
{berthModal.record.lng_lat}
</Descriptions.Item>
<Descriptions.Item label="服务属性">
<Checkbox.Group
defaultValue={berthModal.record.service_type}
disabled={true}
options={[
{
label: "潮汐泊位",
value: 1,
},
{
label: "共享泊位",
value: 2,
},
{
label: "充电泊位",
value: 3,
},
]}
/>
</Descriptions.Item>
<Descriptions.Item label="泊位类型">
{sysConfig.berthType[berthModal.record.berth_type]?.label}
</Descriptions.Item>
<Descriptions.Item label="充电泊位">
{berthModal.record.charge === 0 ? "否" : "是"}
</Descriptions.Item>
<Descriptions.Item label="ETC是否开启">
{berthModal.record.etc_status_name}
</Descriptions.Item>
<Descriptions.Item label="计费规则">
<TextArea disabled value={berthModal.record.rule_id} />
</Descriptions.Item>
</Descriptions>
</Modal>
{/* 编辑泊位 */}
<Modal
title={isEdit ? "编辑泊位" : "添加泊位"}
open={editBerthModal}
onCancel={() => {
setEditBerthModal(false);
}}
onOk={() => {
let reg = /^[2-9]\d*$|^[1-9]\d+\d*$/
console.log(berthForm.getFieldsValue().berth_count);
if (berthForm.getFieldsValue().berth_code === null) {
message.error('请填写泊位号')
} else if (berthForm.getFieldsValue().etc_status === null) {
message.error('请选择ETC是开开启')
} else if (berthForm.getFieldsValue().berth_type === null) {
message.error('请选择泊位类型')
} else if ((!reg.test(berthForm.getFieldsValue().berth_count) && berthForm.getFieldsValue().berth_count)) {
message.error('添加泊位数为大于1的整数')
} else {
let arr = berthForm.getFieldsValue().etc_status
let str = arr.toString()
const params = {
...berthForm.getFieldsValue(),
lng_lat: lngLat,
road_id: parking_id,
etc_status: Number(str),
};
console.log(params);
function addBerth(params) {
ajax
.addBerth(params)
.then((res) => {
if (res.status === 20000) {
message.success(res.message);
setEditBerthModal(false);
formRef.current.getList();
berthForm.resetFields();
setLngLat([]);
} else {
message.error(res.message);
}
})
.catch((err) => console.error(err));
}
function editBerth(params) {
ajax
.editBerth(params)
.then((res) => {
if (res.status === 20000) {
message.success(res.message);
setEditBerthModal(false);
formRef.current.getList();
berthForm.resetFields();
setLngLat([]);
} else {
message.error(res.message);
}
})
.catch((err) => console.error(err));
}
switch (isEdit) {
case true:
editBerth(params);
break;
case false:
addBerth(params);
break;
}
}
}}
>
<div
style={{
padding: "0 30px",
}}
>
<Form
form={berthForm}
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
colon={false}
initialValues={{
berth_code: "",
service_type: null,
berth_type: null,
etc_status: null,
}}
>
<Form.Item label="泊位号" name="berth_code" required>
<Input disabled={isEdit} />
</Form.Item>
{!isEdit && (
<Form.Item label="批量添加泊位数" name="berth_count">
<Input />
</Form.Item>
)}
<Form.Item label="服务属性" name="service_type">
<Checkbox.Group
value={getEditData.service_type}
options={[
{
label: "潮汐泊位",
value: 1,
},
{
label: "共享泊位",
value: 2,
},
{
label: "充电泊位",
value: 3,
disabled: false,
},
]}
/>
</Form.Item>
<Form.Item label="ETC是否开启" name="etc_status" required>
<Radio.Group
placeholder="请选择ETC是否开启"
options={[
{
label: "否",
value: 0,
},
{
label: "是",
value: 1,
},
]}
/>
</Form.Item>
<Form.Item label="泊位类型" name="berth_type" required>
<Select
placeholder="请选择泊位类型"
options={getDeviceType}
/>
</Form.Item>
<Form.Item label="经纬度">
<Input
value={lngLat}
addonAfter={
<SelectGaodeLngLat
open={() => setLngLatVisible(true)}
lngLatVisible={lngLatVisible}
getLntLat={(value) => {
setLngLat(value);
}}
close={() => setLngLatVisible(false)}
/>
}
/>
</Form.Item>
</Form>
</div>
</Modal>
{/* 收费员管理添加弹窗 */}
<Modal
open={tollModal}
title="收费员配置"
onCancel={() => {
setTollModal(false);
}}
onOk={() => {
const ids = hasSelectTollList;
addToll(parking_id, ids);
setTollModal(false);
}}
width={770}
>
<Transfer
dataSource={canSelectTollList}
targetKeys={hasSelectTollList}
onChange={(nexTargetKeys) => {
setHasSelectTollList(nexTargetKeys);
console.log(nexTargetKeys);
}}
render={(item) => item.label}
/>
{/* <TreeSelectGroup
unSelectedList={canSelectTollList}
onChange={(list) => {
setHasSelectTollList(list);
}}
/> */}
</Modal>
{/* 计费规则添加弹窗 */}
<Modal
open={ruleModal}
title={isRuleEdit ? '编辑' : '添加'}
width={1000}
onCancel={() => {
setRuleModal(false);
setSelectedBerth([]);
}}
style={{
top: 2,
}}
onOk={addOrEditRoadRule}
>
<Form
form={ruleForm}
colon={false}
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<Form.Item
rules={[{ required: true }]}
label="车辆类型"
name="vehicle_type"
>
<Select
disabled={isRuleEdit}
style={{ width: 300 }}
onChange={handleCarTypeChange}
options={[
{
label: "小型车",
value: 1,
},
{
label: "中型车",
value: 2,
},
{
label: "大型车",
value: 3,
},
]}
/>
</Form.Item>
<Form.Item rules={[{ required: true }]} label="计费规则" name="rule_id">
<Select style={{ width: 300 }} options={billRuleList} />
</Form.Item>
<Form.Item rules={[{ required: true }]} label="是否按泊位计费" style={{ marginLeft: 51 }} name="is_select">
<Radio.Group
disabled={getCarType || isRuleEdit}
onChange={(e) => {
setGetCarTypeType(e.target.value)
console.log(e.target.value);
if (e.target.value === 1) {
setShowBerthSelect(true);
} else {
setShowBerthSelect(false);
setSelectedBerth([])
}
}}
options={[
{
label: "否",
value: 0,
},
{
label: "是",
value: 1,
},
]}
/>
</Form.Item>
{showBerthSelect ? (
<Form.Item
label="对应的泊位号"
shouldUpdate={(preValue, curValue) => {
return curValue.vehicle_type !== preValue.vehicle_type;
}}
>
<Transfer
dataSource={allBerthList}
targetKeys={selectedBerth}
onChange={(nextTargetKeys) => {
setSelectedBerth(nextTargetKeys);
}}
render={(item) => item.label}
/>
{/* <TreeSelectGroup
unSelectedList={allBerthList}
onChange={(value) => {
setSelectedBerth(value);
}}
/> */}
</Form.Item>
) : null}
</Form>
</Modal>
{/* 计费规则查看弹窗 */}
<Modal
title="查看计费规则"
open={ruleDetailModal}
onCancel={() => {
setRuleDetailModal(false);
}}
>
<Descriptions column={1}>
<Descriptions.Item label="车辆类型">
{curRuleRecord.vehicle_type_name}
</Descriptions.Item>
<Descriptions.Item label="计费规则">
{curRuleRecord.rule_name}
</Descriptions.Item>
<Descriptions.Item label="是否按泊位计费">
{curRuleRecord.berth_ids === "" ? "否" : "是"}
</Descriptions.Item>
</Descriptions>
</Modal>
{/* 删除弹框 */}
<Modal
title="提示"
open={ruleDelModal.visible}
onOk={() => {
ajax.delRoadRule({ rule_id: ruleDelModal.id }).then((res) => {
if (res.status === 20000) {
setRuleDelModal({ ...ruleDelModal, visible: false });
formRef.current.getList();
message.success(res.message);
} else {
message.error(res.message);
}
});
}}
onCancel={() => {
setRuleDelModal({ ...ruleDelModal, visible: false });
}}
>
<p>确定删除吗</p>
</Modal>
{/* 杆位添加或修改弹窗 */}
<Modal
width={770}
open={editPoleModal.visible}
onCancel={() => {
setEditPoleModal({ ...editPoleModal, visible: false });
setGetMonitorData([])
seGetRoadData([])
}}
title={editTitle ? "编辑杆位" : "添加杆位"}
onOk={submitPole}
>
<Form
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
colon={false}
form={editPoleModal.form}
>
<Form.Item
label="杆位号"
name="code"
rules={[{ required: true }]}
required
>
<Input />
</Form.Item>
<Form.Item
label="是否自有杆"
name="has_pole"
rules={[{ required: true }]}
required
>
<Radio.Group
options={[
{
label: "自有杆",
value: 1,
},
{
label: "外部杆",
value: 2,
},
]}
/>
</Form.Item>
<Form.Item label="经纬度">
<Input.Group>
<Row>
<Col span={19}>
<Input value={lngLatModal.value} />
</Col>
<Col span={5}>
<SelectGaodeLngLat
open={() =>
setLngLatModal({ ...lngLatModal, visible: true })
}
lngLatVisible={lngLatModal.visible}
getLntLat={(value) => {
setLngLatModal({ ...lngLatModal, value: value });
}}
close={() =>
setLngLatModal({ ...lngLatModal, visible: false })
}
/>
</Col>
</Row>
</Input.Group>
</Form.Item>
{
editTitle ? <>
<Form.Item label="视频设备" name="video_device_ids">
{/* <Select mode="multiple" options={videoDeviceList} /> */}
<Transfer
dataSource={getLeftEditTarket}
titles={["未选择", "已选择"]}
targetKeys={getEditTarket}
onSelectChange={onSelectRoadChange}
onChange={onSelectChangeRoad}
selectedKeys={getSelectedKeys}
render={(item) => item.label}
/>
{/* <label>视频设备</label> */}
{/* <TreeSelectGroup
unSelectedList={editPoleModal.video_device.left}
selecedList={editPoleModal.video_device.right}
/> */}
</Form.Item>
<Form.Item label="监控设备" name="monitor_device_ids">
{/* <Select mode="multiple" options={monitorDeviceList} /> */}
<Transfer
dataSource={getLeftDeviceTarket}
titles={["未选择", "已选择"]}
targetKeys={getDeviceTarket}
selectedKeys={getLeftDevicetargetKey}
onSelectChange={onSelectDeviceChange}
onChange={onSelectChangeDevice}
render={(item) => item.label}
/>
</Form.Item>
</> :
<>
<Form.Item label="视频设备" name="video_device_ids">
{/* <Select mode="multiple" options={videoDeviceList} /> */}
<Transfer
dataSource={videoDeviceList}
titles={["未选择", "已选择"]}
targetKeys={getMonitorData}
onChange={(nexTargetKeys) => {
setGetMonitorData(nexTargetKeys);
}}
render={(item) => item.label}
/>
{/* <label>视频设备</label> */}
{/* <TreeSelectGroup
unSelectedList={editPoleModal.video_device.left}
selecedList={editPoleModal.video_device.right}
/> */}
</Form.Item>
<Form.Item label="监控设备" name="monitor_device_ids">
{/* <Select mode="multiple" options={monitorDeviceList} /> */}
<Transfer
dataSource={monitorDeviceList}
titles={["未选择", "已选择"]}
targetKeys={getRoadData}
onChange={(nexTargetKeys) => {
seGetRoadData(nexTargetKeys);
}}
render={(item) => item.label}
/>
{/* <label>监控设备</label> */}
{/* <TreeSelectGroup
unSelectedList={editPoleModal.monitor_device.left}
selecedList={editPoleModal.monitor_device.right}
/> */}
</Form.Item>
</>
}
</Form>
</Modal>
{/* 杆位删除弹窗 */}
<Modal
open={poleModal.visible}
onCancel={() => {
setPoleModal({ ...poleModal, visible: false });
}}
title="提示"
onOk={confirmDelPole}
>
<p>确定删除吗</p>
</Modal>
{/* 杆位查看弹窗 */}
<Modal
open={checkPoleModal.visible}
onCancel={() =>
setCheckPoleModal({ ...checkPoleModal, visible: false })
}
>
<Descriptions column={1}>
<Descriptions.Item label="杆位号">
{checkPoleModal.record.code}
</Descriptions.Item>
<Descriptions.Item label="经纬度">
{checkPoleModal.record.lng_lat}
</Descriptions.Item>
<Descriptions.Item label="是否自由杆">
{checkPoleModal.record.has_pole === 1 ? "是" : "否"}
</Descriptions.Item>
<Descriptions.Item label="视频设备">
{checkPoleModal.record.video_device_codes}
</Descriptions.Item>
<Descriptions.Item label="监控设备">
{checkPoleModal.record.monitor_device_codes}
</Descriptions.Item>
</Descriptions>
</Modal>
{/* 数据采集设备添加和编辑窗口 */}
<Modal
open={dataAcquistionModal.visible}
onCancel={() => {
setDataAcquistionModal({ ...dataAcquistionModal, visible: false });
}}
confirmLoading={modalBtnLoading}
destroyOnClose
onOk={handleDataAcquistionModal}
title={dataAcquistionModal.isEdit ? "编辑设备" : "添加设备"}
width={770}
>
<Form
form={dataAcquistionModal.form}
labelCol={{ span: 6 }}
wrapperCol={{ span: 12 }}
colon={false}
>
<Row gutter={[30]}>
<Col span={12}>
<Form.Item
label="设备名称"
name="name"
rules={[{ required: true }]}
>
<Input />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="硬件编码"
name="code"
rules={[{ required: true }]}
>
<Input
disabled={dataAcquistionModal.isEdit === 0 ? false : true}
/>
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="设备类型"
name="type"
rules={[{ required: true }]}
>
<Select options={dataAcquistionSelect.typeList} />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="设备品牌"
name="brand"
rules={[{ required: true }]}
>
<Select options={dataAcquistionSelect.brandList} />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="设备功能"
name="function"
rules={[{ required: true }]}
>
<Select options={dataAcquistionSelect.funcList} />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item label="备注" name="note">
<Input />
</Form.Item>
</Col>
{dataAcquistionModal.isEdit === 0 ? (
<Col span={12}>
<Form.Item label="对应的泊位号" name="berth">
<Transfer
dataSource={dataAcquistionBerth}
titles={["未选择", "已选择"]}
targetKeys={dataAcquistionTargetKeys}
onChange={(nexTargetKeys) => {
setDataAcquistionTargetKeys(nexTargetKeys);
}}
render={(item) => item.label}
/>
</Form.Item>
</Col>
) : (
<Col span={12}>
<Form.Item label="对应的泊位号" name="berth">
<Transfer
dataSource={getLeftBerth}
titles={["未选择", "已选择"]}
targetKeys={targetKeys}
onChange={onChangeSelect}
selectedKeys={selectedKeys}
onSelectChange={onSelectChange}
render={(item) => item.title}
/>
</Form.Item>
</Col>
)}
</Row>
</Form>
</Modal>
{/* 数据采集设备上线,下线,删除弹窗 */}
<Modal
open={dataStatusChangeModal.visible}
onOk={handleDataStatusChange}
title="提示"
onCancel={() => {
setDataStatusChangeModal({
...dataStatusChangeModal,
visible: false,
});
}}
>
<p>
确定
{dataStatusChangeModal.type === 1
? "上线"
: dataStatusChangeModal.type === 2
? "下线"
: "删除"}
{" "}
</p>
</Modal>
{/* 数据采集设备管理查看弹窗 */}
<Modal
open={dataAcquistionDetail.visible}
onCancel={() => {
setDataAcquistionDetail({ ...dataAcquistionDetail, visible: false });
}}
title="详情"
>
<Descriptions column={2}>
<Descriptions.Item label="设备名称">
{dataAcquistionDetail.record.name}
</Descriptions.Item>
<Descriptions.Item label="硬件编码">
{dataAcquistionDetail.record.code}
</Descriptions.Item>
<Descriptions.Item label="设备类型">
{dataAcquistionDetail.record.type_name}
</Descriptions.Item>
<Descriptions.Item label="设备品牌">
{dataAcquistionDetail.record.brand_name}
</Descriptions.Item>
<Descriptions.Item label="设备功能">
{dataAcquistionDetail.record.function}
</Descriptions.Item>
<Descriptions.Item label="备注">
{dataAcquistionDetail.record.note}
</Descriptions.Item>
<Descriptions.Item label="对应泊位号">
{dataAcquistionDetail.record.berth_code}
</Descriptions.Item>
</Descriptions>
</Modal>
</div>
);
}
const SearchPart = forwardRef((props, ref) => {
const {
formData = [],
search = () => { },
initialValues = {},
pageData,
exporturl,
total = 0,
setSelectedRowKeys = () => { },
road_id,
closeConfirmModal = () => { },
confirmModalData = {},
delTollModal = {},
isShowExportBtn = true,
} = props;
const confirmtype = confirmModalData.type;
const [form] = Form.useForm();
const [exportData, setExportData] = useState({});
function getList(pndata = pageData) {
const params = { ...form.getFieldsValue(), ...pndata, road_id };
setExportData(params);
search(params);
}
async function onOk() {
setSelectedRowKeys([])
const res = await confirmModalData.func(confirmModalData.ids, confirmtype);
// if (res?.status === 20000) {
// closeConfirmModal();
// getList();
// }
closeConfirmModal();
getList();
}
function handleDelToll() {
delTollModal.delFunc(delTollModal.id);
delTollModal.close();
setTimeout(() => {
getList();
}, 5000);
}
useImperativeHandle(ref, () => {
return { getList };
}, [formData]);
useEffect(() => {
getList();
}, [pageData, formData]);
const reastBtn = () => {
form.resetFields();
};
return (
<>
<Form
form={form}
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
colon={false}
initialValues={initialValues}
>
<Row>
{formData.map((item) => {
let children = null;
switch (item.type) {
case "input":
children = (
<Form.Item
label={item.label}
name={item.name}
key={item.name}
>
<Input placeholder={item.placeholder} />
</Form.Item>
);
break;
case "select":
children = (
<Form.Item
label={item.label}
name={item.name}
key={item.name}
>
<Select
options={item.options}
placeholder={item.placeholder}
/>
</Form.Item>
);
default:
break;
}
return <Col span={24}>{children}</Col>;
})}
</Row>
</Form>
<div className="bottomBox">
<Button className="reset" onClick={reastBtn}>
重置
</Button>
<Button
type="primary"
className="submit search-button"
onClick={() => {
getList((formData, { ...pageData, pn: 1 }));
}}
>
查询
</Button>
{!isShowExportBtn ? (
<div></div>
) : (
<ExportPMS
url={exporturl}
data={exportData}
style={{
height: "36px",
}}
/>
)}
</div>
{/* 上线下线删除的确认框 */}
<Modal
open={confirmModalData.visible}
onCancel={closeConfirmModal}
onOk={onOk}
title="提示"
>
<p>
确认{confirmtype === 1 ? "上线" : confirmtype === 2 ? "下线" : "删除"}
?
</p>
</Modal>
<Modal
open={delTollModal.visible}
onCancel={delTollModal.close}
onOk={handleDelToll}
title="提示"
>
<p>确定删除吗</p>
</Modal>
</>
);
});
export default ConfigRoad;