import React, { useState, useRef, useEffect, useImperativeHandle } from "react"; import { connect } from "react-redux"; import { Form, Row, Col, Button, CheckboxGroup, Checkbox, Radio, Input, Spin, } from "@douyinfe/semi-ui"; import { IconEdit, IconPlayCircle, IconTickCircle } from "@douyinfe/semi-icons"; import "./cameraModal.less"; import PerfectScrollbar from "perfect-scrollbar"; import { VideoPlayModal } from "$components"; let equipmentScrollbar; function nvrCamera ({ dispatch, actions, nvrRef, cameraData, addNvr, nvrNumber, }) { const { equipmentWarehouse } = actions; const cameraDataNvr = cameraData.nvr || ""; const form = useRef(); const [nvrCheckList, setNvrCheckList] = useState([]); //nvr视频流多选 const [NVRcameraList, setNVRcameraList] = useState([]); //nvr视频流列表 const [isAllChoose, setIsAllChoose] = useState(false); //全选 const [equipmentNum, setEquipmentNum] = useState(""); //nvr视频编号 const [isloading, setloading] = useState(false); //是否显示loading const [loadingTip, setloadingTip] = useState("获取中..."); //loading tip的值 const [step, setstep] = useState("none"); const [stepp, setstepp] = useState("none"); const [videoPlay, setVideoPlay] = useState(false);//播放 const [videoObj, setVideoObj] = useState(); //播放条件 useEffect(() => { NVRcameraList ? (equipmentScrollbar = new PerfectScrollbar("#video_streaming", { suppressScrollX: true, })) : ""; }, [NVRcameraList]); useEffect(() => { const videoStreaming = document.getElementById("video_streaming"); if (videoStreaming && equipmentScrollbar) { equipmentScrollbar.update(); } }); useEffect(() => { if (cameraDataNvr) { setloading(true); setstep("block"); dispatch( equipmentWarehouse.getVideoStreaming({ streamId: cameraDataNvr.serialNo, }) ).then((res) => { let oneData = res.payload.data[0]; let modifyData = res.payload.data.find( (item) => item.id == cameraData.gbId); let data = res.payload.data.map((item, index) => { if (item.camera) { item.name = item.camera.name; item.support = item.camera.cloudControl } if (item.id == cameraData.gbId) { item = oneData; } if (index == 0) { item = modifyData; } return item; }); setNVRcameraList(data); setNvrCheckList([data[0].id]); if (res.success) { setTimeout(() => { setloadingTip("获取完成"); setTimeout(() => { setstep("none"); setloading(false); setstepp("block"); setloadingTip("获取中..."); }, 800); }, 800) } }) } //NVR添加页面跳到nvr摄像头添加页面 if (addNvr) { setloading(true); setstep("block"); dispatch(equipmentWarehouse.getVideoStreaming({ streamId: nvrNumber })).then((res) => { let chooseList = []; let data = res.payload.data.map((item) => { item.change = false; item.support = false; return item; }); setNVRcameraList(data); for (let index = 0; index < data.length; index++) { chooseList.push(data[index].id); } setNvrCheckList(chooseList); setIsAllChoose(true); if (res.success) { setTimeout(() => { setloadingTip("接入完成"); setTimeout(() => { setstep("none"); setloading(false); setstepp("block"); setloadingTip("正在接入视频流..."); }, 800); }, 800) } }) } }, []); function NvrChangeName (e, index, id) { //nvr摄像头视频流获取修改名称 let NvrchangeList = JSON.parse(JSON.stringify(NVRcameraList)); if (!cameraData.gbId || cameraData.gbId == id) { NvrchangeList[index].change = true; setNVRcameraList(NvrchangeList); } e.stopPropagation(); } function nvronBlur (index) { //nvr摄像头名称修改失去焦点 let NvrchangeList = JSON.parse(JSON.stringify(NVRcameraList)); NvrchangeList[index].change = false; setNVRcameraList(NvrchangeList); } function inputchange (e, index) { //nvr摄像头名称修改 let NvrchangeList = JSON.parse(JSON.stringify(NVRcameraList)); NvrchangeList[index].name = e; setNVRcameraList(NvrchangeList); } function toggle (e, index) { //nvr云台支持 let NvrchangeList = JSON.parse(JSON.stringify(NVRcameraList)); NvrchangeList[index].support = e.target.checked; setNVRcameraList(NvrchangeList); e.stopPropagation(); } function getVideoList () { form.current .validate() .then((values) => { //表单校验成功 let chooseList = []; let valuess = JSON.parse(JSON.stringify(values)); valuess.streamId = values.serialNo; delete valuess.serialNo; setloading(true); setstep("block"); dispatch(equipmentWarehouse.getVideoStreaming(valuess)).then((res) => { let data = res.payload.data.map((item) => { item.change = false; item.support = false; return item; }); setNVRcameraList(data); for (let index = 0; index < data.length; index++) { chooseList.push(data[index].id); } setNvrCheckList(chooseList); setIsAllChoose(true); if (res.success) { setTimeout(() => { setloadingTip("获取完成"); setTimeout(() => { setstep("none"); setloading(false); setstepp("block"); setloadingTip("获取中..."); }, 800); }, 800) } }); }) .catch((errors) => { //表单校验失败 // console.log("errors", errors); }); } function allChoose (e) { //全选/全不选 let chooseList = []; if (NVRcameraList.length == nvrCheckList.length) { setNvrCheckList([]); setIsAllChoose(false); } else { for (let index = 0; index < NVRcameraList.length; index++) { chooseList.push(NVRcameraList[index].id); } setNvrCheckList(chooseList); setIsAllChoose(true); } } function playVideo (e, id) { //nvr播放视频 if (cameraData.gbId == id || !cameraData.gbId) { let data = NVRcameraList.find((item) => item.id == id) setVideoObj({ type: "nvr", audio: false, serialNo: data.streamid, topSerialNo: cameraDataNvr ? cameraDataNvr.serialNo : addNvr ? nvrNumber : equipmentNum, playUrlSd: data?.playUrl?.liveUrl?.sd["WS-RAW"], content:data?.camera?.cameraRemarks.map((item) => item.remark) }) setVideoPlay(true); } e.stopPropagation(); } function onDisabled (id) { if (cameraData.gbId == id || !cameraData.gbId) { return false; } else { return true; } } useImperativeHandle(nvrRef, () => ({ //传给父组件方法 //aa即为子组件暴露给父组件的方法 resetFluoriteCamera: form.current.reset, equipmentNum: cameraDataNvr ? cameraDataNvr.serialNo : addNvr ? nvrNumber : equipmentNum, NVRcameraList: NVRcameraList.filter((v) => nvrCheckList.some((e) => e == v.id) ), })); return ( <>
{videoPlay ?