import React, { useState, useEffect, useRef } from "react"; import { connect } from "react-redux"; import moment from "moment"; import qs from "qs"; import { Button, Form, Table, Pagination, Popover, Tag, Skeleton, Popconfirm, Row, } from "@douyinfe/semi-ui"; import { SimpleFileDownButton, VideoPlayModal } from "$components"; import "../style.less"; import CameraModal from "../components/cameraModal"; import RemarksModal from "../components/remarksModal"; import Setup from "../components/setup"; import SideSheets from "../components/sideSheet"; import { skeletonScreen } from "../components/skeletonScreen"; import { accessType } from "./nvr"; const CameraHeader = (props) => { const { dispatch, actions, user, loading, equipmentWarehouseCamera } = props; const [cameraModal, setCameraModal] = useState(false); const [remarksModal,setRemarksModal] = useState(false); const [videoPlay, setVideoPlay] = useState(false); const [modalName, setModalName] = useState(""); const [setup, setSetup] = useState(false); const [sideSheet, setSideSheet] = useState(false); const [cameraSetup, setcameraSetup] = useState(false); const [setupp, setSetupp] = useState([]); const [venderList, setvenderList] = useState([]); //厂商信息 const [query, setQuery] = useState({ limit: 10, page: 0 }); //页码信息 const [search, setSearch] = useState({}); //搜索条件 const [rowId, setRowId] = useState(); //表格数据id const [cameraData, setCameraData] = useState({}); //表格传递数据 const [modify, setModify] = useState(false); //修改 const [parentCamera, setParentCamera] = useState(""); //级联摄像头父级设备 const [addNvr, setAddNvr] = useState(false); //nvr页面传递参数打开NVR摄像头添加弹框 const [nvrNumber, setNvrNumber] = useState(); const [videoObj, setVideoObj] = useState(); //播放条件 const [axyData, setAxyData] = useState(); const [cameraRemarks, setCameraRemarks] = useState([]);//备注 const { equipmentWarehouse } = actions; const api = useRef(); const searchData = useRef({}) const limits = useRef(); //每页实际条数 const page = useRef(query.page); const deviceClickb = useRef(true) const CAMERAS = "cameras"; useEffect(() => { //安心云传参 let isAxyData = props.location.search if (isAxyData) { setAxyData(qs.parse(isAxyData.slice(1))) setCameraModal(true) } //NVR传来的参数 if (props.location.query) { setAddNvr(props.location.query.addNvr) setNvrNumber(props.location.query.serialNo) setCameraModal(true); } dispatch(actions.equipmentWarehouse.getVender()).then((res) => { setvenderList(res.payload.data); attribute(res.payload.data); }); //初始化表格显示设置 localStorage.getItem(CAMERAS) == null ? localStorage.setItem( CAMERAS, JSON.stringify(["state", "type", "manufactor"]) ) : ""; }, []); useEffect(() => { equipmentGetCamera(); }, [query, search]); const equipmentGetCamera = () => { searchData.current = { ...query, ...search } dispatch(equipmentWarehouse.getCamera(searchData.current)).then((res) => { limits.current = res.payload.data.data.length }); } function equipmentStatus (data) { switch (data) { case "ON": return "在线" case "ONLINE": return "在线" case "OFF": return "离线" default: return "未知" } } function colorStatus (data) { switch (data) { case "ON": return "#04B234" case "ONLINE": return "#04B234" case "OFF": return "rgba(0, 0, 0, 0.45)" default: return "#1859C1" } } const columns = [ { title: "序号", dataIndex: "", render: (text, r, index) => { return index + 1; }, }, { title: "设备名称", dataIndex: "name", render: (_, row) => { return (
{row.name} { if (deviceClickb.current) { if (row.type == "nvr") { setSearch({ ...search, nvrId: row.nvr.id }) } else { setSearch({ ...search, externalDomain: row.externalDomain }) } deviceClickb.current = false } else { if (row.type == "nvr") { setSearch({ ...search, nvrId: null }) } else { setSearch({ ...search, externalDomain: null }) } deviceClickb.current = true } }} > {row.type == "nvr" ? `@${row.nvr.name}` : row.type == "cascade" ? `@${row.externalDomain}` : ""}
); }, }, { title: "操作", width: "20%", dataIndex: "", render: (_, row) => { return (
{row.forbidden ? ( ) : ( { dispatch( equipmentWarehouse.putForbidden( { cameraId: row.id, forbidden: !row.forbidden, }, row.forbidden ) ).then(() => { dispatch(equipmentWarehouse.getCamera(searchData.current)) }); }} > )} { dispatch( equipmentWarehouse.delCamera(row.id) ).then(() => { if (page.current > 0 && limits.current < 2) { setQuery({ limit: 10, page: page.current - 1 }) } else { setQuery({ limit: 10, page: page.current }) } }); }} >
); }, }, ]; //获取表格属性设置 function attribute (data) { const arr = localStorage.getItem(CAMERAS) ? JSON.parse(localStorage.getItem(CAMERAS)) : []; const column = [ { title: "设备厂家", dataIndex: "venderId", key: "manufactor", render: (_, r, index) => { let manufactorName = data.find((item) => item.id == r.venderId); return manufactorName ? manufactorName.name : "未知"; }, }, { title: "接入类型", dataIndex: "cameraAbility.type", key: "type", render: (_, r, index) => { let access = accessType.find((item) => item.key == r.type); return access ? access.name : ""; }, }, { title: "设备状态", dataIndex: "channelCount", key: "state", render: (_, r, index) => { let status = r.gbCamera; return (
{r.forbidden ? "禁用" : status ? equipmentStatus(status.online) : ""}
); }, }, { title: "云台支持", dataIndex: "cloudControl", key: "support", render: (text, r, index) => { return r.cloudControl ? "支持" : "不支持"; }, }, { title: "内存卡信息", dataIndex: "memoryCard", key: "memoryCard", }, { title: "设备创建时间", dataIndex: "createTime", key: "time", render: (_, r, index) => { return moment(r.createTime).format("YYYY-MM-DD HH:MM:SS"); }, }, { title: "设备添加账号", dataIndex: "size", key: "account", render: (text, r, index) => { return r.createUser?.namePresent }, }, { title: "项目名称", dataIndex: "updateTime", key: "name", render: (_, r, index) => { return r.station.length == 0 ? "" : station(r, "name", _, "projects") }, }, { title: "pcode", dataIndex: "updateTime", key: "pcode", render: (_, r, index) => { return r.station.length == 0 ? "" : station(r, "url", _, "projects") }, }, { title: "结构物", dataIndex: "", key: "structure", render: (_, r, index) => { return r.station.length == 0 ? "" : station(r, "name", r.station[0].structure.name, _, "structure") }, }, { title: "测点", dataIndex: "updateTime", key: "measuringPoint", render: (_, r, index) => { return r.station.length == 0 ? "" : station(r, "name", r.station[0].name, _, "point") }, }, { title: "监测因素", dataIndex: "updateTime", key: "factor", render: (_, r, index) => { return r.station.length == 0 ? "" : station(r, "name", r.station[0].factor.name) }, }, ]; for (let i = 0; i < arr.length; i++) { let colum = column.filter((item) => { return item.key === arr[i]; }); columns.splice(i + 2, 0, colum[0]); } setSetupp(columns); } //表格请求数据中station属性数据的展示 function station (r, name, data, projects, exhibition) { let datas = [] if (projects == "projects") { r.station.map((v) => { if (v.structure.projects.length > 0) { v.structure.projects.map((item) => datas.push(item[name])) } }) } else { r.station.map((v) => { if (exhibition == "structure") { datas.push(v.structure.name) } else { if (exhibition == "point") { datas.push(v.name) } else { datas.push(v.factor.name) } } }) } let dataSet = [...(new Set(datas))] return dataSet.length > 0 ? 1 ?
{dataSet.map((v, index) =>
{v}
)}
: "" } > {dataSet.length > 1 ? `${dataSet[0]}...` : dataSet.length > 0 ? dataSet[0] : ""}
: "" } //条件赛选样式 const screen = { width: 193, marginRight: 20, marginBottom: 16, color: "rgba(0, 0, 0, 0.65)", }; return ( <>
筛选条件
console.log(values)} // onValueChange={values=>console.log(values)} getFormApi={(formApi) => (api.current = formApi)} layout="horizontal" style={{ position: "relative", width: "100%", flex: 1 }} > {accessType.map((item) => { return ( {item.name} ); })} {venderList.map((item) => { return ( {item.name} ); })} 在线 离线 未知 禁用 {/* 飞尚科技1 飞尚科技2 */}
设备列表
s)} dataSource={equipmentWarehouseCamera.data} bordered={false} empty="暂无数据" style={{ padding: "0px 20px", }} pagination={false} />
共{equipmentWarehouseCamera.total}个设备 { setQuery({ limit: pageSize, page: currentPage - 1 }); page.current = currentPage - 1 }} />
{setup ? ( { setSetup(false); attribute(venderList); setcameraSetup(false); }} /> ) : ( "" )} {sideSheet ? ( { setSideSheet(false); setcameraSetup(false); }} /> ) : ( [] )} {cameraModal ? ( { setCameraModal(false); setCameraData({}); setModify(false) setParentCamera("") setAddNvr(false) setNvrNumber("") setAxyData("") equipmentGetCamera() }} modalName={modalName} /> ) : ( "" )} {videoPlay ? { setVideoPlay(false) }} /> : "" } { remarksModal? { setRemarksModal(false); setRowId(); equipmentGetCamera(); }} > :'' } ); }; function mapStateToProps (state) { const { auth, global, members, equipmentWarehouseCamera } = state; return { loading: equipmentWarehouseCamera.isRequesting && !equipmentWarehouseCamera.data, user: auth.user, actions: global.actions, members: members.data, equipmentWarehouseCamera: equipmentWarehouseCamera.data || [], }; } export default connect(mapStateToProps)(CameraHeader);