import React, { useState, useRef, useEffect } from "react";
import { ResultFlowResult, BaseMap, Marker } from "@/components"
import { Select, Input, Button, Table, message, Pagination, Cascader, Modal, TreeSelect, Form, Row, Col } from 'antd'
import {
pageSizeOptions
} from '@/config/character.config.js'
import moment from "moment";
import "./index.scss";
import { useSessionStorageState } from "ahooks"
import { SearchOutlined, DeleteOutlined, PlayCircleOutlined, EditOutlined, PlusCircleOutlined } from '@ant-design/icons';
import ajax from '@/services'
const { SHOW_PARENT } = TreeSelect;
function Fence(props) {
// const configData = props.sysConfig["lib-deploy"] || {};
const [form] = Form.useForm()
const [ajaxLoading, setAjaxLoading] = useState(false)
const [getModalData, setGetModalData] = useState({
attendDistance: '',
effective: ''
})
const [getEditModal, setGetEditModal] = useState({
attendDistance: '',
attend: '',
attendName: ''
})
const roadSelectRef = useRef()
const [editModalVisible, setEditModalVisible] = useState(false)
const [editStatus, setEditStatus] = useState(false)
const [storeData, setStoreData] = useState([{ label: '全部', value: -1 }]) //所属商户
const [getStatus, setGetStatus] = useState(2)
const [deviceTypeData, setDeviceTypeData] = useState([])
const [resultData, setResultData] = useState({
data: [],
total_records: 0,
export_url: '',
process_url: ""
})
const parameter = {
address: '',
device_name: '',
road_name: '',//路段名称
operator: -1,//运营商
export: false,
road_id: '',//所属路段
pn: 1,
length: Number(pageSizeOptions[0]), // 每页条数
}
const [formData, setFormData] = useState(parameter)
const [formSubmitData, setFormSubmitData] = useState({
address: "",
create_time: "",
device_name: "",
ip_address: "",
network_mode: "",
operator: "",
id: '',
password: "",
port: "",
road_name: "",
road_id: "",
type: "",
user_name: "",
video_port: ""
})
const [lastFormData, setLastFormData] = useState(formData)
const lastFormDataRef = useRef(formData)
const getOperatorData = () => {
ajax.getOperator().then((e) => {
setStoreData([
...storeData,
...e.data
])
})
}
const handlePlay = (item) => {
message.error(`播放数据暂未对接`)
}
const handleDel = (item, index) => {
Modal.confirm({
title: '确认删除?',
content: `是否确认删除设备:${item.device_name} ?`,
icon: ,
onOk: () => {
handleDelToServer(item.id).then((msg) => {
message.success(msg || '删除成功')
let copyData = resultData.data
copyData.splice(index, 1)
setResultData({
...resultData,
data: [...copyData]
})
}).catch((err) => {
message.error(err)
})
}
})
}
const getRoadById = (id) => {
return new Promise((resolved, rejected) => {
ajax.getAllRoad({ operator_id: id }).then((e) => {
if (e.status == 20000) {
resolved(e.data)
}
}).catch((err) => {
console.error(err)
rejected(err)
})
})
}
const handleDelToServer = (id) => {
return new Promise((resolved, rejected) => {
ajax.nvrDel({ id: id }).then((e) => {
if (e.status == 20000) {
resolved(e.message)
}
}).catch((err) => {
rejected(err)
})
})
}
const handleEdit = (item) => {
setEditStatus(true)
getRoadById(item.operator_id).then((data) => {
setRoadData(data)
})
form.setFieldsValue({
...item
})
setEditModalVisible(true)
}
const editModalCancel = () => {
setEditModalVisible(false)
form.resetFields()
}
//列表
const handleColumns = (tab) => {
let result = [...tableColumns];
switch (tab) {
case '1':
result.splice(9, 1)
break;
}
return result;
}
//列表
const tableColumns = [{
title: '序号',
width: 60,
render: (_, record, index) => {
return index + 1
}
},
{
title: '设备名称',
dataIndex: 'device_name'
},
{
title: '所属商户',
dataIndex: 'operqator'
},
{
title: '所属路段',
dataIndex: 'road_name',
},
{
title: '地址',
dataIndex: 'address',
},
{
title: '网络模式',
dataIndex: 'network_mode',
},
{
title: 'IP地址/设备编码',
width: 145,
dataIndex: 'ip_address',
},
{
title: '端口号',
dataIndex: 'port',
},
{
title: '视频端口号',
width: 110,
dataIndex: 'video_port',
},
{
title: '用户名',
dataIndex: 'user_name',
},
{
title: '密码',
dataIndex: 'password'
},
{
title: '创建日期',
dataIndex: 'create_time',
width: 110
},
{
title: '操作',
width: 135,
render: (text, record, index) => {
return <>
} onClick={() => handleDel(record, index)} />
} onClick={() => handlePlay(record)} />
} onClick={() => handleEdit(record)} />
>
}
}
]
// 获取列表数据
const getData = (data = formData) => {
setAjaxLoading(true)
ajax.getNVRListData(data).then(res => {
setAjaxLoading(false)
if (res.status === 20000) {
let resDataArr = res?.data?.list?.length ? res.data.list.map((item) => {
item.key = item.id
return item
}) : []
setResultData({
...resultData,
data: resDataArr,
total_records: res.data.total
})
} else {
setResultData({
data: [],
total_records: 0,
export_url: '',
process_url: ""
})
message.error(res.message)
}
}, err => {
console.log(err)
})
}
const getDeviceType = () => {
ajax.getDeviceTypeList().then((e) => {
setDeviceTypeData([
...deviceTypeData,
...e.data
])
})
}
//切换分页
const changePn = (pn, length) => {
if (lastFormData.length === length) {
setLastFormData(Object.assign({}, lastFormData, { pn: pn }))
lastFormDataRef.current = Object.assign({}, lastFormData, { pn: pn })
getData(Object.assign({}, lastFormData, { pn: pn }))
}
}
//切换每页条数
const changeLength = (pn, length) => {
setFormData(Object.assign({}, formData, { pn: 1, length: length }))
setLastFormData(Object.assign({}, lastFormData, { pn: 1, length: length }))
lastFormDataRef.current = Object.assign({}, lastFormData, { pn: 1, length: length })
getData(Object.assign({}, lastFormData, { pn: 1, length: length }))
}
//检索数据
const getSearchData = (data = formData) => {
getData(data)
}
//重置表单
const formReset = () => {
setFormData({
...parameter
})
getData({ ...parameter })
}
const handleEditFinish = () => {
console.log('form finish')
}
const nvrUpdate = (params) => {
return new Promise((resolved, rejected) => {
ajax.nvrUpdate(params).then((e) => {
if (e.status == 20000) {
resolved(e.message)
}
}).catch(err => {
rejected(err)
})
})
}
const nvrAdd = (params) => {
return new Promise((resolved, rejected) => {
ajax.nvrAdd(params).then((e) => {
if (e.status == 20000) {
resolved(e.message)
}
}).catch(err => {
rejected(err)
})
})
}
const handleAdd = () => {
setEditStatus(false)
form.resetFields()
setEditModalVisible(true)
}
const handleRoadChange = (v) => {
ajax.getRoadInfo({ road_id: v }).then((e) => {
if (e.status == 20000) {
form.setFieldValue('address', e.data.address)
form.setFieldValue('lng_lat', e.data.lng_lat)
}
})
}
const [roadData, setRoadData] = useState([]);
const handleOperaChange = (id) => {
// let roadSelect = document.querySelectorAll('.fenceModal .road-selector .ant-select-selection-item')
// if (roadSelect.length) {
// roadSelect[0].innerText = ''
// }
setFormSubmitData({
...formSubmitData,
road_name: undefined
})
form.setFieldValue('road_name', '')
getRoadById(id).then((data) => {
setRoadData(data)
})
}
const handleSubmit = () => {
if (editStatus) { // 编辑
nvrUpdate(form.getFieldsValue()).then((msg) => {
message.success(msg || '设备更新成功')
setEditModalVisible(false)
getData()
})
} else { // 新增
nvrAdd(form.getFieldsValue()).then((msg) => {
message.success(msg || '设备添加成功')
setEditModalVisible(false)
getData()
})
}
}
const [sessionTabList, setSessionTabList] = useSessionStorageState('nvrMgm', {
value: {
}
})
useEffect(() => {
if (sessionTabList && Object.values(sessionTabList).length > 0) {
setFormData({
address: sessionTabList?.address,
device_name: sessionTabList?.device_name,
road_name: sessionTabList?.road_name,
operator: sessionTabList?.operator
})
}
}, [])
useEffect(() => {
setSessionTabList({
...formData
})
}, [formData])
// 获取下拉菜单
const getSelectList = () => {
// 商户名称
ajax.getOperator().then(
(res) => {
if (parseInt(res?.status) === 20000) {
setStoreData(res?.data || []);
} else {
message.error(res?.message);
}
},
(err) => {
console.log(err);
}
);
};
const getAllRoad = (id, setData) => {
ajax.getAllRoadByOperatort({ operator: id }).then(
(res) => {
setData(res?.data || []);
},
(err) => {
console.log(err);
}
);
};
useEffect(() => {
getSelectList();
if (formData?.operator) {
getAllRoad(formData?.operator, setRoadData);
}
}, []);
useEffect(() => {
getData()
getOperatorData()
getDeviceType()
}, [])
return <>
共检索到{resultData.total_records}条结果
record.cap_id + "_" + record.bk_id}
pagination={false}
loading={ajaxLoading}
/>
`共 ${resultData.total_records} 条`}
total={resultData.total_records}
current={lastFormData.pn}
pageSize={lastFormData.length}
pageSizeOptions={pageSizeOptions}
onChange={changePn}
onShowSizeChange={changeLength}
/>
>
}
export default Fence;