Browse Source

Merge branch 'dev_trial' of https://gitea.free-sun.vip/free-sun/FS-IOT into dev_trial

release_0.0.2
巴林闲侠 3 years ago
parent
commit
1cd95e5ad3
  1. 35
      code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/actions/camera.js
  2. 189
      code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/cameraModal.jsx
  3. 2
      code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/fluoriteCamera.jsx
  4. 728
      code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/nvrCamera.jsx
  5. 15
      code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/nvrModal.jsx
  6. 36
      code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/containers/camera.jsx
  7. 22
      code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/containers/nvr.jsx
  8. 3
      code/VideoAccess-VCMP/web/client/src/utils/webapi.js

35
code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/actions/camera.js

@ -161,3 +161,38 @@ export function getParentCamera(query) {
msg: { option: "" }, //获取级联摄像头父级设备 msg: { option: "" }, //获取级联摄像头父级设备
}); });
} }
export function getVerifyYingshi(data) {
return (dispatch) =>
basicAction({
type: "post",
dispatch: dispatch,
data,
actionType: "POST_VERIFY_YINGSHI",
url: `${ApiTable.getVerifyYingshi}`,
msg: { option: "" }, //获取级联摄像头父级设备
});
}
export function getVerifyIpc(data) {
return (dispatch) =>
basicAction({
type: "post",
dispatch: dispatch,
data,
actionType: "POST_VERIFY_IPC",
url: `${ApiTable.getVerifyIpc}`,
msg: { option: "" }, //获取级联摄像头父级设备
});
}
export function getVerifyCascade(data) {
return (dispatch) =>
basicAction({
type: "post",
dispatch: dispatch,
data,
actionType: "POST_VERIFY_CASCADE",
url: `${ApiTable.getVerifyCascade}`,
msg: { option: "" }, //获取级联摄像头父级设备
});
}

189
code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/cameraModal.jsx

@ -2,6 +2,7 @@ import React, { useState, useRef, useEffect } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Modal, Spin } from "@douyinfe/semi-ui"; import { Modal, Spin } from "@douyinfe/semi-ui";
import { IconChevronLeft, IconChevronRight } from "@douyinfe/semi-icons"; import { IconChevronLeft, IconChevronRight } from "@douyinfe/semi-icons";
import moment from "moment";
import FluoriteCamera from "./fluoriteCamera"; import FluoriteCamera from "./fluoriteCamera";
import NvrCamera from "./nvrCamera"; import NvrCamera from "./nvrCamera";
import IpcCamera from "./ipcCamera"; import IpcCamera from "./ipcCamera";
@ -20,7 +21,9 @@ function cameraModal (props) {
CameraAbility, CameraAbility,
cameraData, // cameraData, //
modify, modify,
parentCamera parentCamera,
addNvr,
nvrNumber
} = props; } = props;
const { equipmentWarehouse } = actions; const { equipmentWarehouse } = actions;
const fluoriteRef = useRef(); const fluoriteRef = useRef();
@ -28,7 +31,7 @@ function cameraModal (props) {
const cascadeRef = useRef(); const cascadeRef = useRef();
const nvrRef = useRef(); const nvrRef = useRef();
const [isloading, setloading] = useState(false); //loading const [isloading, setloading] = useState(false); //loading
const [loadingTip, setloadingTip] = useState("获取中...请稍后..."); //loading tip const [loadingTip, setloadingTip] = useState("测试进行中..."); //loading tip
const [okText, setokText] = useState("确定"); //oktext const [okText, setokText] = useState("确定"); //oktext
const [cancelText, setcancelText] = useState("取消"); //text const [cancelText, setcancelText] = useState("取消"); //text
@ -37,7 +40,7 @@ function cameraModal (props) {
? 1 ? 1
: cameraData.type == "ipc" : cameraData.type == "ipc"
? 3 ? 3
: cameraData.type == "nvr" : cameraData.type == "nvr" || addNvr
? 2 ? 2
: cameraData.type == "cascade" : cameraData.type == "cascade"
? 4 ? 4
@ -47,7 +50,7 @@ function cameraModal (props) {
useEffect(() => { useEffect(() => {
dispatch(equipmentWarehouse.getCameraKind()); dispatch(equipmentWarehouse.getCameraKind());
dispatch(equipmentWarehouse.getAbility()); dispatch(equipmentWarehouse.getAbility());
cameraData.type == "nvr" ? setcameraList(cameraList.slice(1, 4)) : ""; cameraData.type == "nvr" || addNvr ? setcameraList(cameraList.slice(1, 4)) : "";
}, []); }, []);
const cameraList = [ const cameraList = [
// //
@ -149,20 +152,19 @@ function cameraModal (props) {
} }
function handleChoose (id) { function handleChoose (id) {
// //
if (!modify) { if (!addNvr && !modify) {
setclickNum(id); setclickNum(id);
} }
} }
function turnLift () { function turnLift () {
// //
if (!modify) { if (!addNvr && !modify) {
setcameraList(cameraList.slice(0, 3)); setcameraList(cameraList.slice(0, 3));
} }
} }
function turnRight () { function turnRight () {
// //
if (!modify) { if (!addNvr && !modify) {
setcameraList(cameraList.slice(1, 4)); setcameraList(cameraList.slice(1, 4));
} }
} }
@ -198,13 +200,40 @@ function cameraModal (props) {
} }
} }
//
function toTest () { function toTest () {
if (clickNum == 1) { if (clickNum == 1) {
fluoriteRef.current fluoriteRef.current
.fluoriteCameraForm() .fluoriteCameraForm()
.then((values) => { .then((values) => {
// //
console.log("111111111", values); var front = new moment(); //
setloading(true);
dispatch(
equipmentWarehouse.getVerifyYingshi({
serialNo: values.serialNo,
})
).then((res) => {
var after = new moment(); //
var duration = moment.duration(after.diff(front))._data.milliseconds;
if (res.success) {
setTimeout(() => {
setloadingTip("校验成功");
setTimeout(() => {
setloading(false);
setloadingTip("测试进行中...");
}, 800);
}, duration > 2000 ? 0 : 2000 - duration)
} else {
setTimeout(() => {
setloadingTip("校验失败");
setTimeout(() => {
setloading(false);
setloadingTip("测试进行中...");
}, 800);
}, duration > 2000 ? 0 : 2000 - duration)
}
})
}) })
.catch((errors) => { .catch((errors) => {
// //
@ -215,54 +244,72 @@ function cameraModal (props) {
.ipcCameraForm() .ipcCameraForm()
.then((values) => { .then((values) => {
// //
console.log("111111111", values); console.log(values);
var front = new moment(); //
setloading(true);
dispatch(
equipmentWarehouse.getVerifyIpc({
serialNo: values.serialNo,
})
).then((res) => {
var after = new moment(); //
var duration = moment.duration(after.diff(front))._data.milliseconds;
if (res.success) {
setTimeout(() => {
setloadingTip("校验成功");
setTimeout(() => {
setloading(false);
setloadingTip("测试进行中...");
}, 800);
}, duration > 2000 ? 0 : 2000 - duration)
} else {
setTimeout(() => {
setloadingTip("校验失败");
setTimeout(() => {
setloading(false);
setloadingTip("测试进行中...");
}, 800);
}, duration > 2000 ? 0 : 2000 - duration)
}
})
}) })
.catch((errors) => { .catch((errors) => {
// //
console.log("errors", errors); console.log();
}); });
} else if (clickNum == 4) { } else if (clickNum == 4) {
cascadeRef.current cascadeRef.current
.cascadeCameraForm() .cascadeCameraForm()
.then((values) => { .then((values) => {
// console.log(values);
let chooseList = []; var front = new moment(); //
let nvrCameraList = [ setloading(true);
{ dispatch(
id: 10, equipmentWarehouse.getVerifyCascade({
name: "南昌县1", sip: values.sip,
number: "111111111111111111", })
support: false, ).then((res) => {
change: false, var after = new moment(); //
}, var duration = moment.duration(after.diff(front))._data.milliseconds;
{ if (res.success) {
id: 20, setTimeout(() => {
name: "南昌县2", setloadingTip("校验成功");
number: "222222222222222222", setTimeout(() => {
support: false, setloading(false);
change: false, setloadingTip("测试进行中...");
}, }, 800);
{ }, duration > 2000 ? 0 : 2000 - duration)
id: 30, } else {
name: "南昌县3", setTimeout(() => {
number: "333333333333333333", setloadingTip("校验失败");
support: false, setTimeout(() => {
change: false, setloading(false);
}, setloadingTip("测试进行中...");
{ }, 800);
id: 40, }, duration > 2000 ? 0 : 2000 - duration)
name: "南昌县4", }
number: "444444444444444444", })
support: false,
change: false,
},
];
cascadeRef.current.setNVRcameraList(nvrCameraList);
for (let index = 0; index < nvrCameraList.length; index++) {
chooseList.push(nvrCameraList[index].id);
}
cascadeRef.current.setNvrCheckList(chooseList);
cascadeRef.current.setIsAllChoose(true);
}) })
.catch((errors) => { .catch((errors) => {
// //
@ -283,7 +330,7 @@ function cameraModal (props) {
afterClose={handleAfterClose} afterClose={handleAfterClose}
onCancel={handleCancel} onCancel={handleCancel}
> >
<Spin tip={loadingTip} spinning={isloading}> <>
<div <div
style={{ marginLeft: "-24px", marginRight: "-24px", marginTop: 8 }} style={{ marginLeft: "-24px", marginRight: "-24px", marginTop: 8 }}
> >
@ -337,7 +384,7 @@ function cameraModal (props) {
}} }}
onClick={() => handleChoose(item.id)} onClick={() => handleChoose(item.id)}
> >
{modify ? item.id == clickNum ? "" : <div style={{ {modify || addNvr ? item.id == clickNum ? "" : <div style={{
width: 266, width: 266,
height: 146, height: 146,
borderRadius: 3, borderRadius: 3,
@ -483,27 +530,35 @@ function cameraModal (props) {
</div> </div>
<div> <div>
{clickNum == 1 ? ( {clickNum == 1 ? (
<FluoriteCamera <Spin tip={loadingTip} spinning={isloading}>
cRef={fluoriteRef} <FluoriteCamera
CameraKind={CameraKind} cRef={fluoriteRef}
CameraAbility={CameraAbility} CameraKind={CameraKind}
cameraData={cameraData} CameraAbility={CameraAbility}
/> cameraData={cameraData}
/>
</Spin>
) : clickNum == 2 ? ( ) : clickNum == 2 ? (
<NvrCamera nvrRef={nvrRef} cameraData={cameraData} /> <Spin tip={loadingTip} spinning={isloading}>
<NvrCamera nvrRef={nvrRef} cameraData={cameraData} addNvr={addNvr} nvrNumber={nvrNumber} />
</Spin>
) : clickNum == 3 ? ( ) : clickNum == 3 ? (
<IpcCamera <Spin tip={loadingTip} spinning={isloading}>
aRef={ipcRef} <IpcCamera
CameraKind={CameraKind} aRef={ipcRef}
CameraAbility={CameraAbility} CameraKind={CameraKind}
venderList={venderList} CameraAbility={CameraAbility}
cameraData={cameraData} venderList={venderList}
/> cameraData={cameraData}
/>
</Spin>
) : ( ) : (
<CascadeCamera dRef={cascadeRef} cameraData={cameraData} parentCamera={parentCamera} /> <Spin tip={loadingTip} spinning={isloading}>
<CascadeCamera dRef={cascadeRef} cameraData={cameraData} parentCamera={parentCamera} />
</Spin>
)} )}
</div> </div>
</Spin> </>
</Modal> </Modal>
</> </>
); );

2
code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/fluoriteCamera.jsx

@ -1,6 +1,6 @@
import React, { useState, useRef, useEffect, useImperativeHandle } from "react"; import React, { useState, useRef, useEffect, useImperativeHandle } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Form, Row, Col } from "@douyinfe/semi-ui"; import { Form, Row, Col,Spin } from "@douyinfe/semi-ui";
import "./cameraModal.less"; import "./cameraModal.less";
function fluoriteCamera ({ cRef, CameraKind, CameraAbility, cameraData }) { function fluoriteCamera ({ cRef, CameraKind, CameraAbility, cameraData }) {
const { TextArea } = Form; const { TextArea } = Form;

728
code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/nvrCamera.jsx

@ -1,358 +1,416 @@
import React, { useState, useRef, useEffect, useImperativeHandle } from "react"; import React, { useState, useRef, useEffect, useImperativeHandle } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { import {
Form, Form,
Row, Row,
Col, Col,
Button, Button,
CheckboxGroup, CheckboxGroup,
Checkbox, Checkbox,
Radio, Radio,
Input, Input,
Spin,
} from "@douyinfe/semi-ui"; } from "@douyinfe/semi-ui";
import { IconEdit, IconPlayCircle } from "@douyinfe/semi-icons"; import { IconEdit, IconPlayCircle, IconTickCircle } from "@douyinfe/semi-icons";
import "./cameraModal.less"; import "./cameraModal.less";
import PerfectScrollbar from "perfect-scrollbar"; import PerfectScrollbar from "perfect-scrollbar";
import { isIndexed } from "immutable"; import { isIndexed } from "immutable";
let equipmentScrollbar; let equipmentScrollbar;
function nvrCamera({ dispatch, actions, nvrRef, cameraData }) { function nvrCamera ({ dispatch, actions, nvrRef, cameraData, addNvr, nvrNumber }) {
const { equipmentWarehouse } = actions; const { equipmentWarehouse } = actions;
const cameraDataNvr = cameraData.nvr || ""; const cameraDataNvr = cameraData.nvr || "";
const form = useRef(); const form = useRef();
const [nvrCheckList, setNvrCheckList] = useState([]); //nvr const [nvrCheckList, setNvrCheckList] = useState([]); //nvr
const [NVRcameraList, setNVRcameraList] = useState([]); //nvr const [NVRcameraList, setNVRcameraList] = useState([]); //nvr
const [isAllChoose, setIsAllChoose] = useState(false); // const [isAllChoose, setIsAllChoose] = useState(false); //
const [equipmentNum, setEquipmentNum] = useState(""); //nvr 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");
useEffect(() => { useEffect(() => {
NVRcameraList NVRcameraList
? (equipmentScrollbar = new PerfectScrollbar("#video_streaming", { ? (equipmentScrollbar = new PerfectScrollbar("#video_streaming", {
suppressScrollX: true, suppressScrollX: true,
})) }))
: ""; : "";
}, [NVRcameraList]); }, [NVRcameraList]);
useEffect(() => { useEffect(() => {
const videoStreaming = document.getElementById("video_streaming"); const videoStreaming = document.getElementById("video_streaming");
if (videoStreaming && equipmentScrollbar) { if (videoStreaming && equipmentScrollbar) {
equipmentScrollbar.update(); equipmentScrollbar.update();
} }
}); });
useEffect(() => { useEffect(() => {
cameraDataNvr if (cameraDataNvr) {
? dispatch( setloading(true);
equipmentWarehouse.getVideoStreaming({ setstep("block");
streamId: cameraDataNvr.serialNo, dispatch(
}) equipmentWarehouse.getVideoStreaming({
).then((res) => { streamId: cameraDataNvr.serialNo,
let oneData = res.payload.data[0]; })
).then((res) => {
let modifyData = res.payload.data.find( let oneData = res.payload.data[0];
(item) => item.camera.name == cameraData.name let modifyData = res.payload.data.find(
); (item) => item.camera == null ? false : item.camera.name == cameraData.name
console.log(oneData); );
console.log(modifyData); let data = res.payload.data.map((item, index) => {
let data = res.payload.data.map((item, index) => { if (index == 0) {
if (index == 0) { item = modifyData;
item = modifyData; }
} if (
if ( item.camera
item.camera ? item.camera.name == cameraData.name && index > 0
? item.camera.name == cameraData.name && index > 0 : index < 0
: index < 0 ) {
) { item = oneData;
item = oneData; }
} item.change = false;
item.change = false; item.support = false;
item.support = false; if (item.camera) {
if (item.camera) { item.name = item.camera.name;
item.name = item.camera.name; }
} return item;
});
setNVRcameraList(data);
setNvrCheckList([data[0].id]);
if (res.success) {
setTimeout(() => {
setloadingTip("接入完成");
setTimeout(() => {
setstep("none");
setloading(false);
setstepp("block");
setloadingTip("正在接入视频流...");
}, 800);
}, 800)
}
})
}
return item; //NVRnvr
}); if (addNvr) {
console.log(data); setloading(true);
setNVRcameraList(data); 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)
}
})
}
setNvrCheckList([data[0].id]); }, []);
}) function NvrChangeName (e, index, name) {
: ""; //nvr
}, []); let NvrchangeList = JSON.parse(JSON.stringify(NVRcameraList));
function NvrChangeName(e, index, name) { if (!cameraDataNvr || cameraData.name == name) {
//nvr NvrchangeList[index].change = true;
let NvrchangeList = JSON.parse(JSON.stringify(NVRcameraList)); setNVRcameraList(NvrchangeList);
if (!cameraDataNvr || cameraData.name == name) { e.stopPropagation();
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) {
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));
console.log(e);
NvrchangeList[index].name = e;
setNVRcameraList(NvrchangeList);
}
function toggle(e, index) {
//nvr
console.log(e)
let NvrchangeList = JSON.parse(JSON.stringify(NVRcameraList));
console.log(NvrchangeList)
NvrchangeList[index].support = e.target.checked;
setNVRcameraList(NvrchangeList);
e.stopPropagation();
}
function getVideoList() {
form.current
.validate()
.then((values) => {
//
let chooseList = []; let chooseList = [];
let valuess = JSON.parse(JSON.stringify(values)); if (NVRcameraList.length == nvrCheckList.length) {
valuess.streamId = values.serialNo; setNvrCheckList([]);
delete valuess.serialNo; setIsAllChoose(false);
dispatch(equipmentWarehouse.getVideoStreaming(valuess)).then((res) => { } else {
let data = res.payload.data.map((item) => { for (let index = 0; index < NVRcameraList.length; index++) {
item.change = false; chooseList.push(NVRcameraList[index].id);
item.support = false; }
return item; setNvrCheckList(chooseList);
}); setIsAllChoose(true);
console.log(data); }
setNVRcameraList(data);
for (let index = 0; index < data.length; index++) {
chooseList.push(data[index].id);
}
console.log(chooseList);
setNvrCheckList(chooseList);
setIsAllChoose(true);
});
})
.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) {
function playVideo(e) { //nvr
//nvr console.log("22222222222222222");
console.log("22222222222222222"); e.stopPropagation();
e.stopPropagation();
}
function onDisabled(name) {
if ((cameraDataNvr && cameraData.name == name) || !cameraDataNvr) {
return false;
} else {
return true;
} }
} function onDisabled (name) {
useImperativeHandle(nvrRef, () => ({ if ((cameraDataNvr && cameraData.name == name) || !cameraDataNvr) {
// return false;
//aa } else {
resetFluoriteCamera: form.current.reset, return true;
equipmentNum: cameraDataNvr ? cameraDataNvr.serialNo : equipmentNum, }
NVRcameraList: NVRcameraList.filter((v) => }
nvrCheckList.some((e) => e == v.id) useImperativeHandle(nvrRef, () => ({
), //
})); //aa
return ( resetFluoriteCamera: form.current.reset,
<> equipmentNum: cameraDataNvr ? cameraDataNvr.serialNo : addNvr ? nvrNumber : equipmentNum,
<Form NVRcameraList: NVRcameraList.filter((v) =>
allowEmpty nvrCheckList.some((e) => e == v.id)
labelPosition="left" ),
labelAlign="left" }));
labelWidth="115px" return (
onValueChange={(values) => { <>
setEquipmentNum(values.serialNo); <Form
}} allowEmpty
getFormApi={(formApi) => (form.current = formApi)} labelPosition="left"
> labelAlign="left"
<div style={{ display: "flex" }}> labelWidth="115px"
<Form.Input onValueChange={(values) => {
field="serialNo" setEquipmentNum(values.serialNo);
maxLength="39" }}
label="设备编号:" getFormApi={(formApi) => (form.current = formApi)}
disabled={cameraDataNvr ? true : false}
initValue={cameraDataNvr ? cameraDataNvr.serialNo : ""}
placeholder="请输入设备编号"
style={{ width: 307 }}
rules={[
{ required: true, message: "请输入设备编号" },
{ pattern: "^[A-Za-z0-9]+$", message: "只能输入数字或者字母" },
]}
/>
<Button
disabled={!equipmentNum.length > 0}
theme="solid"
type="primary"
onClick={() => {
getVideoList();
}}
style={{ marginLeft: 8, marginTop: 12 }}
>
视频流获取
</Button>
{NVRcameraList.length > 0 ? (
<div
style={{ display: "flex", alignItems: "center", marginLeft: 211 }}
>
<Radio
checked={isAllChoose}
mode="advanced"
disabled={cameraDataNvr ? true : false}
onChange={(e) => allChoose(e)}
aria-label="全选"
>
全选
</Radio>
</div>
) : (
""
)}
</div>
<Row>
<CheckboxGroup
type="pureCard"
direction="vertical"
aria-label="视频流获取"
value={nvrCheckList}
onChange={(nvrCheck) => {
setNvrCheckList(nvrCheck);
if (NVRcameraList.length == nvrCheck.length) {
setIsAllChoose(true);
} else {
setIsAllChoose(false);
}
}}
>
<div
id="video_streaming"
style={{ maxHeight: 300, position: "relative" }}
> >
{NVRcameraList.length > 0 <div style={{ display: "flex" }}>
? NVRcameraList.map((item, index) => ( <Form.Input
<Col field="serialNo"
key={index} maxLength="39"
span={12} label="设备编号:"
style={{ disabled={cameraDataNvr ? true : addNvr ? true : false}
display: "flex", initValue={cameraDataNvr ? cameraDataNvr.serialNo : addNvr ? nvrNumber : ""}
justifyContent: "center", placeholder="请输入设备编号"
marginTop: 12, style={{ width: 307 }}
}} rules={[
{ required: true, message: "请输入设备编号" },
{ pattern: "^[A-Za-z0-9]+$", message: "只能输入数字或者字母" },
]}
/>
<Button
disabled={!equipmentNum.length > 0}
theme="solid"
type="primary"
onClick={() => {
getVideoList();
}}
style={{ marginLeft: 8, marginTop: 12 }}
> >
<Checkbox 视频流获取
value={item.id} </Button>
disabled={onDisabled(item.name)} {NVRcameraList.length > 0 ? (
extra={ <div
<div> style={{ display: "flex", alignItems: "center", marginLeft: 211 }}
<div >
style={{ <Radio
display: "flex", checked={isAllChoose}
alignItems: "center",
justifyContent: "space-between",
height: 30,
}}
>
<div>
通道名称
{item.change ? (
<Input
autofocus
style={{ width: 100 }}
value={item.name}
onChange={(e) => inputchange(e, index)}
onBlur={() => nvronBlur(index)}
></Input>
) : (
item.name
)}
</div>
<div
style={{
display: "flex",
alignItems: "center",
}}
>
<IconEdit
style={{
fontSize: 16,
marginLeft: 18,
cursor: "pointer",
color: "#1859C1",
}}
onClick={(e) =>
NvrChangeName(e, index, item.name)
}
/>
</div>
</div>
<div style={{ marginTop: 8, width: 246 }}>
设备编号{item.streamid}
</div>
<div
style={{
marginTop: 12,
display: "flex",
justifyContent: "space-between",
alignItems: "center",
}}
>
<IconPlayCircle
size="extra-large"
style={{ color: "#1859C1" }}
onClick={(e) => playVideo(e)}
/>
<Radio
checked={item.support}
mode="advanced" mode="advanced"
disabled={onDisabled(item.name)} disabled={cameraDataNvr ? true : false}
onChange={(e) => toggle(e, index)} onChange={(e) => allChoose(e)}
aria-label="单选" aria-label="全选"
> >
云台支持 全选
</Radio> </Radio>
</div> </div>
</div> ) : (
} ""
style={{ width: 280, border: "1px solid #F9F9F9" }} )}
></Checkbox> </div>
</Col> <Row>
)) <CheckboxGroup
: ""} type="pureCard"
</div> direction="vertical"
</CheckboxGroup> aria-label="视频流获取"
</Row> value={nvrCheckList}
</Form> onChange={(nvrCheck) => {
</> setNvrCheckList(nvrCheck);
); if (NVRcameraList.length == nvrCheck.length) {
setIsAllChoose(true);
} else {
setIsAllChoose(false);
}
}}
>
<div
id="video_streaming"
style={{ maxHeight: 300, position: "relative" }}
>
<Spin tip={loadingTip} spinning={isloading}>
<div style={{ display: stepp }}>
{NVRcameraList.length > 0
? NVRcameraList.map((item, index) => (
<Col
key={index}
span={12}
style={{
display: "flex",
justifyContent: "center",
marginTop: 12,
}}
>
<Checkbox
value={item.id}
disabled={onDisabled(item.name)}
extra={
<div>
<div
style={{
display: "flex",
alignItems: "center",
justifyContent: "space-between",
height: 30,
}}
>
<div>
通道名称
{item.change ? (
<Input
autofocus
style={{ width: 100 }}
value={item.name}
onChange={(e) => inputchange(e, index)}
onBlur={() => nvronBlur(index)}
></Input>
) : (
item.name
)}
</div>
<div
style={{
display: "flex",
alignItems: "center",
}}
>
<IconEdit
style={{
fontSize: 16,
marginLeft: 18,
cursor: "pointer",
color: "#1859C1",
}}
onClick={(e) =>
NvrChangeName(e, index, item.name)
}
/>
</div>
</div>
<div style={{ marginTop: 8, width: 246 }}>
设备编号{item.streamid}
</div>
<div
style={{
marginTop: 12,
display: "flex",
justifyContent: "space-between",
alignItems: "center",
}}
>
<IconPlayCircle
size="extra-large"
style={{ color: "#1859C1" }}
onClick={(e) => playVideo(e)}
/>
<Radio
checked={item.support}
mode="advanced"
disabled={onDisabled(item.name)}
onChange={(e) => toggle(e, index)}
aria-label="单选"
>
云台支持
</Radio>
</div>
</div>
}
style={{ width: 280, border: "1px solid #F9F9F9" }}
></Checkbox>
</Col>
))
: ""}
</div>
<div style={{ height: 50, width: "100%", display: step }}></div>
</Spin>
</div>
</CheckboxGroup>
</Row>
</Form>
</>
);
} }
function mapStateToProps(state) { function mapStateToProps (state) {
const { auth, global, members } = state; const { auth, global, members } = state;
return { return {
loading: members.isRequesting, loading: members.isRequesting,
user: auth.user, user: auth.user,
actions: global.actions, actions: global.actions,
members: members.data, members: members.data,
}; };
} }
export default connect(mapStateToProps)(nvrCamera); export default connect(mapStateToProps)(nvrCamera);

15
code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/nvrModal.jsx

@ -1,4 +1,4 @@
import React, { useState, useRef, useEffect } from "react"; import React, { useState, useRef, useEffect,useImperativeHandle } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Modal, Form, Row, Col, Spin } from "@douyinfe/semi-ui"; import { Modal, Form, Row, Col, Spin } from "@douyinfe/semi-ui";
import { IconTickCircle } from "@douyinfe/semi-icons"; import { IconTickCircle } from "@douyinfe/semi-icons";
@ -6,7 +6,7 @@ import { IconTickCircle } from "@douyinfe/semi-icons";
import moment from "moment"; import moment from "moment";
function nvrModal(props) { function nvrModal(props) {
const { modalName } = props; const { modalName ,nvrRef} = props;
const { dispatch, actions, vender, close } = props; const { dispatch, actions, vender, close } = props;
const nvrData = props.nvrData || {}; // const nvrData = props.nvrData || {}; //
const form = useRef(); const form = useRef();
@ -18,10 +18,6 @@ function nvrModal(props) {
const [cancelText, setcancelText] = useState("取消"); //text const [cancelText, setcancelText] = useState("取消"); //text
const [formObj, setformObj] = useState(); // const [formObj, setformObj] = useState(); //
useEffect(() => {
console.log(props.user.id);
}, []);
function showDialog() { function showDialog() {
// //
setVisible(true); setVisible(true);
@ -47,6 +43,7 @@ function nvrModal(props) {
.validate() .validate()
.then((values) => { .then((values) => {
// //
console.log(values)
let valuesObj = JSON.parse(JSON.stringify(values)); let valuesObj = JSON.parse(JSON.stringify(values));
valuesObj.longitude = values.position.split(",")[0]; valuesObj.longitude = values.position.split(",")[0];
valuesObj.latitude = values.position.split(",")[1]; valuesObj.latitude = values.position.split(",")[1];
@ -61,7 +58,6 @@ function nvrModal(props) {
serialNo: valuesObj.serialNo, serialNo: valuesObj.serialNo,
}) })
).then((res) => { ).then((res) => {
console.log(res);
var after = new moment(); // var after = new moment(); //
var duration = moment.duration(after.diff(front))._data.milliseconds; var duration = moment.duration(after.diff(front))._data.milliseconds;
if (res.success) { if (res.success) {
@ -127,6 +123,11 @@ function nvrModal(props) {
// //
window.open("https://lbs.amap.com/tools/picker", "_blank"); window.open("https://lbs.amap.com/tools/picker", "_blank");
} }
useImperativeHandle(nvrRef, () => ({
//
//aa
nvrNumber: ()=>formObj.serialNo
}));
return ( return (
<> <>
<div onClick={showDialog}>{modalName == "add" ? "添加NVR" : "修改"}</div> <div onClick={showDialog}>{modalName == "add" ? "添加NVR" : "修改"}</div>

36
code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/containers/camera.jsx

@ -37,6 +37,8 @@ const CameraHeader = (props) => {
const [cameraData, setCameraData] = useState({}); // const [cameraData, setCameraData] = useState({}); //
const [modify, setModify] = useState(false); // const [modify, setModify] = useState(false); //
const [parentCamera, setParentCamera] = useState(""); // const [parentCamera, setParentCamera] = useState(""); //
const [addNvr, setAddNvr] = useState(false); //nvrNVR
const [nvrNumber, setNvrNumber] = useState();
const { equipmentWarehouse } = actions; const { equipmentWarehouse } = actions;
const api = useRef(); const api = useRef();
const searchb = useRef(search) const searchb = useRef(search)
@ -44,8 +46,14 @@ const CameraHeader = (props) => {
const CAMERAS = "cameras"; const CAMERAS = "cameras";
useEffect(() => { useEffect(() => {
console.log(props) console.log(props)
if (props.location.query) {
setAddNvr(props.location.query.addNvr)
setNvrNumber(props.location.query.serialNo)
setCameraModal(true);
}
dispatch(actions.equipmentWarehouse.getVender()).then((res) => { dispatch(actions.equipmentWarehouse.getVender()).then((res) => {
setvenderList(res.payload.data); setvenderList(res.payload.data);
attribute(res.payload.data); attribute(res.payload.data);
@ -115,7 +123,6 @@ const CameraHeader = (props) => {
width: "20%", width: "20%",
dataIndex: "", dataIndex: "",
render: (_, row) => { render: (_, row) => {
console.log(row);
return ( return (
<div style={{ display: "flex" }}> <div style={{ display: "flex" }}>
<Button <Button
@ -220,26 +227,6 @@ const CameraHeader = (props) => {
}, },
]; ];
const device_ = (r) => {
console.log(searchb)
if (deviceClick) {
// if (r.type == "nvr") {
// console.log(search)
// setearch({ ...search, nvrId: r.nvr.id })
// } else {
// setearch({ ...search, externalDomain: r.externalDomain })
// }
setDeviceClick(false)
} else {
// if (r.type == "nvr") {
// setearch({ ...search, nvrId: null })
// } else {
// setearch({ ...search, externalDomain: null })
// }
setDeviceClick(true)
}
}
// //
function attribute (data) { function attribute (data) {
const arr = localStorage.getItem(CAMERAS) const arr = localStorage.getItem(CAMERAS)
@ -706,14 +693,17 @@ const CameraHeader = (props) => {
venderList={venderList} venderList={venderList}
cameraData={cameraData} cameraData={cameraData}
modify={modify} modify={modify}
addNvr={addNvr}
nvrNumber={nvrNumber}
parentCamera={parentCamera} parentCamera={parentCamera}
close={() => { close={() => {
setCameraModal(false); setCameraModal(false);
setCameraData({}); setCameraData({});
setModify(false) setModify(false)
setParentCamera("") setParentCamera("")
setAddNvr(false)
setNvrNumber("")
equipmentGetCamera(); equipmentGetCamera();
}} }}
modalName={modalName} modalName={modalName}
/> />

22
code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/containers/nvr.jsx

@ -1,6 +1,6 @@
import React, { useState, useEffect, useRef } from "react"; import React, { useState, useEffect, useRef } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { push } from "react-router-redux"; // import { push } from "react-router-redux";
import moment from "moment"; import moment from "moment";
import { import {
Button, Button,
@ -30,7 +30,7 @@ export const accessType = [
]; ];
const NvrHeader = (props) => { const NvrHeader = (props) => {
const { dispatch, actions, user, loading, equipmentWarehouseNvr } = props; const { history, dispatch, actions, user, loading, equipmentWarehouseNvr } = props;
const { equipmentWarehouse } = actions; const { equipmentWarehouse } = actions;
const [setup, setSetup] = useState(false); const [setup, setSetup] = useState(false);
const [sideSheet, setSideSheet] = useState(false); const [sideSheet, setSideSheet] = useState(false);
@ -39,12 +39,13 @@ const NvrHeader = (props) => {
const [query, setQuery] = useState({ limit: 10, page: 0 }); // const [query, setQuery] = useState({ limit: 10, page: 0 }); //
const [search, setearch] = useState({}); // const [search, setearch] = useState({}); //
const [rowId, setRowId] = useState(); //id const [rowId, setRowId] = useState(); //id
const [reminder, setReminder] = useState(false); // const [reminder, setReminder] = useState(false); //
const api = useRef(); const api = useRef();
const SETUPS = "setups"; const SETUPS = "setups";
const nvrRef = useRef(); //
useEffect(() => { useEffect(() => {
console.log(props)
dispatch(actions.equipmentWarehouse.getVender()).then((res) => { dispatch(actions.equipmentWarehouse.getVender()).then((res) => {
setvenderList(res.payload.data); setvenderList(res.payload.data);
attribute(res.payload.data); attribute(res.payload.data);
@ -72,12 +73,22 @@ const NvrHeader = (props) => {
OFF: "离线", OFF: "离线",
Alarmed: "未知", Alarmed: "未知",
}; };
const colorStatus = { const colorStatus = {
ON: "#04B234", ON: "#04B234",
ONLINE: "#04B234", ONLINE: "#04B234",
OFF: "rgba(0, 0, 0, 0.45)", OFF: "rgba(0, 0, 0, 0.45)",
Alarmed: "#1859C1", Alarmed: "#1859C1",
}; };
// function colorStatus (data) {
// switch (data) {
// case ON || ONLINE:
// break;
// default:
// break;
// }
// }
const columns = [ const columns = [
{ {
title: "序号", title: "序号",
@ -157,7 +168,6 @@ const NvrHeader = (props) => {
dataIndex: "venderId", dataIndex: "venderId",
key: "manufactor", key: "manufactor",
render: (_, r, index) => { render: (_, r, index) => {
console.log(r);
let manufactorName = data.find((item) => item.id == r.venderId); let manufactorName = data.find((item) => item.id == r.venderId);
return manufactorName ? manufactorName.name : ""; return manufactorName ? manufactorName.name : "";
}, },
@ -327,7 +337,9 @@ const NvrHeader = (props) => {
<NvrModal <NvrModal
modalName="add" modalName="add"
venderList={venderList} venderList={venderList}
nvrRef={nvrRef}
close={() => { close={() => {
setReminder(true)
equipmentGetNvr(); equipmentGetNvr();
}} }}
/> />
@ -592,7 +604,7 @@ const NvrHeader = (props) => {
toadd="去添加" toadd="去添加"
visible={reminder} visible={reminder}
onOk={() => { onOk={() => {
dispatch(push('/equipmentWarehouse/camera/:addNvr=true')); history.push({ pathname: '/equipmentWarehouse/camera', query: { addNvr: true, serialNo: nvrRef.current.nvrNumber() } });
setReminder(false) setReminder(false)
}} }}
/> />

3
code/VideoAccess-VCMP/web/client/src/utils/webapi.js

@ -31,6 +31,9 @@ export const ApiTable = {
getCascadeSIP: "camera/sip_list/cascade", //获取级联摄像头sip列表 getCascadeSIP: "camera/sip_list/cascade", //获取级联摄像头sip列表
postAddCascade: "camera/create/cascade", //添加级联摄像头 postAddCascade: "camera/create/cascade", //添加级联摄像头
getParentCamera:"camera/cascade_device", //获取级联摄像头父级设备 getParentCamera:"camera/cascade_device", //获取级联摄像头父级设备
getVerifyYingshi:"camera/verify/yingshi", //验证萤石摄像头信息
getVerifyIpc:"camera/verify/ipc", //验证IPC摄像头信息
getVerifyCascade:"camera/verify/cascade", //验证级联摄像头信息
}; };

Loading…
Cancel
Save