Browse Source

gb

dev_trial
wenlele 3 years ago
parent
commit
361f06603d
  1. 2
      code/VideoAccess-VCMP/web/client/index.ejs
  2. 2
      code/VideoAccess-VCMP/web/client/index.html
  3. 5
      code/VideoAccess-VCMP/web/client/src/components/videoPlayer/videoPlay.jsx
  4. 6
      code/VideoAccess-VCMP/web/client/src/components/videoPlayer/voiceHeader.jsx
  5. 748
      code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/cascadeCamera.jsx
  6. 6
      code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/fluoriteCamera.jsx
  7. 4
      code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/ipcCamera.jsx
  8. 5
      code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/sideSheet.jsx
  9. 2
      code/VideoAccess-VCMP/web/package.json

2
code/VideoAccess-VCMP/web/client/index.ejs

@ -4,7 +4,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="minimum-scale=1, initial-scale=1, width=device-width" />
<!-- <meta content="upgrade-insecure-requests" http-equiv="Content-Security-Policy"> -->
<meta content="upgrade-insecure-requests" http-equiv="Content-Security-Policy">
<link rel="shortcut icon" href="/assets/images/favicon.ico">
<script src="/assets/js/jessibuca/jessibuca.js"></script>
<script

2
code/VideoAccess-VCMP/web/client/index.html

@ -5,7 +5,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="minimum-scale=1, initial-scale=1, width=device-width" />
<!-- <meta content="upgrade-insecure-requests" http-equiv="Content-Security-Policy"> 会将http转化成https,导致jessibuca视频播放不成功 -->
<meta content="upgrade-insecure-requests" http-equiv="Content-Security-Policy">
<link rel="shortcut icon" href="/assets/images/favicon.ico">
<script src="/assets/js/jessibuca/jessibuca.js"></script>

5
code/VideoAccess-VCMP/web/client/src/components/videoPlayer/videoPlay.jsx

@ -58,7 +58,7 @@ const VideoPlay = ({ dispatch, actions,
// audio: false,
// serialNo: '34020000001310000003', //
// topSerialNo: '34020000001110000079', //
// playUrlSd: 'ws://221.230.55.27:8081/jessica/34020000001110000079/34020000001310000003', //
// playUrlSd: 'wss://221.230.55.27:8082/jessica/34020000001110000079/34020000001310000003.flv', //
// // playUrlHd: 'ezopen://open.ys7.com/G75922040/1.hd.live',
// // replayUrl: 'ezopen://open.ys7.com/G75922040/1.rec',
// },
@ -393,12 +393,13 @@ const VideoPlay = ({ dispatch, actions,
debug: true,
showBandwidth: false, //
operateBtns: {
fullscreen: true,
fullscreen: false,
screenshot: false,
play: false,
audio: false,
},
forceNoOffscreen: false,
controlAutoHide:true,
isNotMute: false,
});
setjessibuca(jessibuca)

6
code/VideoAccess-VCMP/web/client/src/components/videoPlayer/voiceHeader.jsx

@ -86,8 +86,8 @@ const VideoHeader = ({ operationState, changeSelectState, setProcessDisX, name,
color: '#fff'
}}>
<Row>
<Col span={videoStyle == 'true' ? histroyTime.length ? 3 : 0 : 9} style={{
backgroundImage: content && content?.length > 0 ? 'url(/assets/images/background/videoPlayBg.png)' : '',
<Col span={videoStyle == 'true' ? histroyTime.length ? 3 : 0 : 9} style={{
backgroundImage: videoStyle == 'true' ? "" : 'url(/assets/images/background/videoPlayBg.png)',
backgroundSize: '100% 100%',
backgroundRepeat: 'no-repeat',
padding: '0 12px'
@ -103,7 +103,7 @@ const VideoHeader = ({ operationState, changeSelectState, setProcessDisX, name,
'' : `${showTime_} ${name || ''}`
}
</Col>
<Col span={videoStyle == 'true' ? histroyTime.length ? 21 : 24 : vcmp_videopla > 480?15:10} style={{}}>
<Col span={videoStyle == 'true' ? histroyTime.length ? 21 : 24 : vcmp_videopla > 480 ? 15 : 10} style={{}}>
<div style={{ paddingRight: 12 }}>
{content && content?.length > 0 ? <TextScroll content={content || []} duration={6} videoObj={videoObj} /> : ""}
</div>

748
code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/cascadeCamera.jsx

@ -8,393 +8,393 @@ import { VideoPlayModal } from "$components";
let equipmentScrollbar;
function cascadeCamera ({ dRef, dispatch, actions, cameraData, parentCamera, testComplete, close, ashTrue, ashFalse }) {
const form = useRef();
const { equipmentWarehouse } = actions;
const [sip, setSip] = useState([]);
const [cascadeList, setCascadeList] = useState([]); //nvr
const [CheckList, setCheckList] = useState([]); //nvr
const [isAllChoose, setIsAllChoose] = useState(false); //
const [formData, setFormData] = useState() //
const [videoPlay, setVideoPlay] = useState(false);//
const [videoObj, setVideoObj] = useState(); //
const form = useRef();
const { equipmentWarehouse } = actions;
const [sip, setSip] = useState([]);
const [cascadeList, setCascadeList] = useState([]); //nvr
const [CheckList, setCheckList] = useState([]); //nvr
const [isAllChoose, setIsAllChoose] = useState(false); //
const [formData, setFormData] = useState() //
const [videoPlay, setVideoPlay] = useState(false);//
const [videoObj, setVideoObj] = useState(); //
useEffect(() => {
dispatch(equipmentWarehouse.getCascadeSIP()).then((res) => {
setSip(res.payload.data);
if (cameraData.id) {
let sip = res.payload.data.find((item) => item.streamid == cameraData.topSerialNo)
dispatch(equipmentWarehouse.getCascadeStream({ streamId: sip.streamid })).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;
}
if (item.id == cameraData.gbId) {
item = oneData;
}
if (index == 0) {
item = modifyData;
}
return item;
})
setCascadeList(data)
setCheckList([data[0].id])
});
}
});
const videoStreaming = document.getElementById("video_streaming");
if (videoStreaming && equipmentScrollbar) {
equipmentScrollbar.update();
}
}, []);
useEffect(() => {
cascadeList
? (equipmentScrollbar = new PerfectScrollbar("#video_streaming", {
suppressScrollX: true,
}))
: "";
}, [cascadeList]);
useEffect(() => {
//
if (testComplete) {
dispatch(equipmentWarehouse.getCascadeStream({ streamId: formData.streamId })).then((res) => {
let chooseList = [];
let data = res.payload.data.map((item, index) => {
if (item.camera) {
item.name = item.camera.name;
}
return item;
})
setCascadeList(data)
for (let index = 0; index < data.length; index++) {
chooseList.push(data[index].id);
}
setCheckList(chooseList);
setIsAllChoose(true);
useEffect(() => {
dispatch(equipmentWarehouse.getCascadeSIP()).then((res) => {
setSip(res.payload.data);
if (cameraData.id) {
let sip = res.payload.data.find((item) => item.streamid == cameraData.topSerialNo)
dispatch(equipmentWarehouse.getCascadeStream({ streamId: sip.streamid })).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;
}
if (item.id == cameraData.gbId) {
item = oneData;
}
if (index == 0) {
item = modifyData;
}
return item;
})
setCascadeList(data)
setCheckList([data[0].id])
});
}
close()
}, [testComplete])
}
});
const videoStreaming = document.getElementById("video_streaming");
if (videoStreaming && equipmentScrollbar) {
equipmentScrollbar.update();
}
}, []);
//
const memoryList = [
{
id: 1,
value: "8g",
},
{
id: 2,
value: "16g",
},
{
id: 3,
value: "32g",
},
{
id: 4,
value: "64g",
},
{
id: 5,
value: "128g",
},
{
id: 6,
value: "256g",
},
{
id: 7,
value: ">256g",
},
];
useEffect(() => {
cascadeList
? (equipmentScrollbar = new PerfectScrollbar("#video_streaming", {
suppressScrollX: true,
}))
: "";
}, [cascadeList]);
function NvrChangeName (e, index, id) {
//
let NvrchangeList = JSON.parse(JSON.stringify(cascadeList));
if (!cameraData.gbId || cameraData.gbId == id) {
NvrchangeList[index].change = true;
setCascadeList(NvrchangeList);
}
e.stopPropagation();
}
function nvronBlur (index) {
//nvr
let NvrchangeList = JSON.parse(JSON.stringify(cascadeList));
NvrchangeList[index].change = false;
setCascadeList(NvrchangeList);
}
function inputchange (e, index) {
//nvr
let NvrchangeList = JSON.parse(JSON.stringify(cascadeList));
NvrchangeList[index].name = e;
setCascadeList(NvrchangeList);
}
function allChoose (e) {
///
let chooseList = [];
if (cascadeList.length == CheckList.length) {
setCheckList([]);
setIsAllChoose(false);
} else {
for (let index = 0; index < cascadeList.length; index++) {
chooseList.push(cascadeList[index].id);
useEffect(() => {
//
if (testComplete) {
dispatch(equipmentWarehouse.getCascadeStream({ streamId: formData.streamId })).then((res) => {
let chooseList = [];
let data = res.payload.data.map((item, index) => {
if (item.camera) {
item.name = item.camera.name;
}
return item;
})
setCascadeList(data)
for (let index = 0; index < data.length; index++) {
chooseList.push(data[index].id);
}
setCheckList(chooseList);
setIsAllChoose(true);
}
}
function playVideo (e, id) {
//nvr
if (cameraData.gbId == id || !cameraData.gbId) {
let data = cascadeList.find((item) => item.id == id)
setVideoObj({
type: 'cascade',
audio: false,
serialNo: data.streamid,
topSerialNo: cameraData.id ? cameraData.topSerialNo : formData?.streamId,
playUrlSd: data?.playUrl?.liveUrl?.sd["WS-RAW"],
content: data?.camera?.cameraRemarks.map((item) => item.remark),
})
setVideoPlay(true);
}
e.stopPropagation();
}
function onDisabled (id) {
if (id == cameraData.gbId || !cameraData.gbId) {
return false;
} else {
return true;
}
}
});
}
close()
}, [testComplete])
useImperativeHandle(dRef, () => ({
//
//
cascadeCameraForm: form.current.validate,
resetCascadeCamera: form.current.reset,
cascadeList: cascadeList.filter((v) =>
CheckList.some((e) => e == v.id)
),
toempty: () => {
setCascadeList([])
}
}));
return (
<>
<Form
labelPosition="left"
labelAlign="left"
labelWidth="115px"
onValueChange={(values) => {
setFormData(values)
let setting = ["externalDomain", "cascadeType", "streamId"]
let b = {}
setting.map((item) => {
if (values.hasOwnProperty(item)) {
return b.true = values.hasOwnProperty(item)
} else {
return b.false = values.hasOwnProperty(item)
}
})
Object.keys(b).length == 1 ? ashTrue() : ashFalse()
}}
initValues={{
externalDomain: cameraData.externalDomain || ""
}}
getFormApi={(formApi) => (form.current = formApi)}
>
<Row>
<Col span={12}>
<Form.Input
field="externalDomain"
label="外域名称:"
maxLength="36"
placeholder="请输入外域 名称,例如“xxx市级平台”"
style={{ width: 307 }}
rules={[{ required: true, message: "请输入外域名称" }]}
/>
</Col>
<Col span={12}>
<Form.Select
label="级联方式:"
field="cascadeType"
initValue={cameraData.cascadeType || "上级域"}
style={{ width: 307 }}
rules={[{ required: true, message: "请选择输入级联方式" }]}
>
<Form.Select.Option value="上级域">
上级域
</Form.Select.Option>
</Form.Select>
</Col>
<Col span={14}>
<Form.Select
label="设备编号:"
field="streamId"
disabled={cameraData.id ? true : false}
initValue={cameraData?.topSerialNo || ""}
placeholder="请选择设备编号"
style={{ width: 307 }}
rules={[{ required: true, message: "请选择设备编号" }]}
>
{sip.map((item, index) => (
<Form.Select.Option key={index} value={item.streamid}>
{item.streamid}
</Form.Select.Option>
))}
</Form.Select>
</Col>
</Row>
<Row>
//
const memoryList = [
{
id: 1,
value: "8g",
},
{
id: 2,
value: "16g",
},
{
id: 3,
value: "32g",
},
{
id: 4,
value: "64g",
},
{
id: 5,
value: "128g",
},
{
id: 6,
value: "256g",
},
{
id: 7,
value: ">256g",
},
];
<div
id="video_streaming"
style={{ maxHeight: 300, position: "relative" }}
>
{cascadeList.length > 0 ? (
<div
style={{ display: "flex", justifyContent: "flex-end", marginRight: 50 }}
>
<Radio
checked={isAllChoose}
mode="advanced"
disabled={cameraData.gbId ? true : false}
onChange={(e) => allChoose(e)}
aria-label="全选"
>
全选
</Radio>
</div>
) : (
""
)}
<CheckboxGroup
type="pureCard"
direction="vertical"
aria-label="视频流获取"
value={CheckList}
onChange={(nvrCheck) => {
setCheckList(nvrCheck);
if (cascadeList.length == nvrCheck.length) {
setIsAllChoose(true);
} else {
setIsAllChoose(false);
}
}}>
{cascadeList.length > 0
? cascadeList.map((item, index) => (
<Col
key={index}
span={12}
style={{
display: "flex",
justifyContent: "center",
marginTop: 12,
}}
>
<Checkbox
value={item.id}
disabled={onDisabled(item.id)}
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)}
onClick={(e) => e.stopPropagation()}
></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.id)
}
/>
</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, item.id)}
/>
</div>
</div>
}
style={{ width: 280, border: "1px solid #F9F9F9" }}
></Checkbox>
</Col>
))
: ""}
</CheckboxGroup>
</div>
function NvrChangeName (e, index, id) {
//
let NvrchangeList = JSON.parse(JSON.stringify(cascadeList));
if (!cameraData.gbId || cameraData.gbId == id) {
NvrchangeList[index].change = true;
setCascadeList(NvrchangeList);
}
e.stopPropagation();
}
function nvronBlur (index) {
//nvr
let NvrchangeList = JSON.parse(JSON.stringify(cascadeList));
NvrchangeList[index].change = false;
setCascadeList(NvrchangeList);
}
function inputchange (e, index) {
//nvr
let NvrchangeList = JSON.parse(JSON.stringify(cascadeList));
NvrchangeList[index].name = e;
setCascadeList(NvrchangeList);
}
function allChoose (e) {
///
let chooseList = [];
if (cascadeList.length == CheckList.length) {
setCheckList([]);
setIsAllChoose(false);
} else {
for (let index = 0; index < cascadeList.length; index++) {
chooseList.push(cascadeList[index].id);
}
setCheckList(chooseList);
setIsAllChoose(true);
}
}
function playVideo (e, id) {
//nvr
if (cameraData.gbId == id || !cameraData.gbId) {
let data = cascadeList.find((item) => item.id == id)
setVideoObj({
type: 'cascade',
audio: false,
serialNo: data.streamid,
topSerialNo: cameraData.id ? cameraData.topSerialNo : formData?.streamId,
playUrlSd: data?.playUrl?.liveUrl?.sd["WS-RAW"],
content: data?.camera?.cameraRemarks.map((item) => item.remark),
})
setVideoPlay(true);
}
e.stopPropagation();
}
function onDisabled (id) {
if (id == cameraData.gbId || !cameraData.gbId) {
return false;
} else {
return true;
}
}
</Row>
</Form>
{videoPlay ?
<VideoPlayModal
visible={true}
videoObj={videoObj}
close={() => {
setVideoPlay(false)
}} />
: ""
}
</>
);
useImperativeHandle(dRef, () => ({
//
//
cascadeCameraForm: form.current.validate,
resetCascadeCamera: form.current.reset,
cascadeList: cascadeList.filter((v) =>
CheckList.some((e) => e == v.id)
),
toempty: () => {
setCascadeList([])
}
}));
return (
<>
<Form
labelPosition="left"
labelAlign="left"
labelWidth="115px"
onValueChange={(values) => {
setFormData(values)
let setting = ["externalDomain", "cascadeType", "streamId"]
let b = {}
setting.map((item) => {
if (values.hasOwnProperty(item)) {
return b.true = values.hasOwnProperty(item)
} else {
return b.false = values.hasOwnProperty(item)
}
})
Object.keys(b).length == 1 ? ashTrue() : ashFalse()
}}
initValues={{
externalDomain: cameraData.externalDomain || ""
}}
getFormApi={(formApi) => (form.current = formApi)}
>
<Row>
<Col span={12}>
<Form.Input
field="externalDomain"
label="外域名称:"
maxLength="36"
placeholder="请输入外域 名称,例如“xxx市级平台”"
style={{ width: 307 }}
rules={[{ required: true, message: "请输入外域名称" }]}
/>
</Col>
<Col span={12}>
<Form.Select
label="级联方式:"
field="cascadeType"
initValue={cameraData.cascadeType || "上级域"}
style={{ width: 307 }}
rules={[{ required: true, message: "请选择输入级联方式" }]}
>
<Form.Select.Option value="上级域">
上级域
</Form.Select.Option>
</Form.Select>
</Col>
<Col span={14}>
<Form.Select
label="设备编号:"
field="streamId"
disabled={cameraData.id ? true : false}
initValue={cameraData?.topSerialNo || ""}
placeholder="请选择设备编号"
style={{ width: 307 }}
rules={[{ required: true, message: "请选择设备编号" }]}
>
{sip.map((item, index) => (
<Form.Select.Option key={index} value={item.streamid}>
{item.streamid}
</Form.Select.Option>
))}
</Form.Select>
</Col>
</Row>
<Row>
<div
id="video_streaming"
style={{ maxHeight: 300, position: "relative" }}
>
{cascadeList.length > 0 ? (
<div
style={{ display: "flex", justifyContent: "flex-end", marginRight: 50 }}
>
<Radio
checked={isAllChoose}
mode="advanced"
disabled={cameraData.gbId ? true : false}
onChange={(e) => allChoose(e)}
aria-label="全选"
>
全选
</Radio>
</div>
) : (
""
)}
<CheckboxGroup
type="pureCard"
direction="vertical"
aria-label="视频流获取"
value={CheckList}
onChange={(nvrCheck) => {
setCheckList(nvrCheck);
if (cascadeList.length == nvrCheck.length) {
setIsAllChoose(true);
} else {
setIsAllChoose(false);
}
}}>
{cascadeList.length > 0
? cascadeList.map((item, index) => (
<Col
key={index}
span={12}
style={{
display: "flex",
justifyContent: "center",
marginTop: 12,
}}
>
<Checkbox
value={item.id}
disabled={onDisabled(item.id)}
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)}
onClick={(e) => e.stopPropagation()}
></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.id)
}
/>
</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, item.id)}
/>
</div>
</div>
}
style={{ width: 280, border: "1px solid #F9F9F9" }}
></Checkbox>
</Col>
))
: ""}
</CheckboxGroup>
</div>
</Row>
</Form>
{videoPlay ?
<VideoPlayModal
visible={true}
videoObj={videoObj}
close={() => {
setVideoPlay(false)
}} />
: ""
}
</>
);
}
function mapStateToProps (state) {
const { auth, global, members } = state;
return {
loading: members.isRequesting,
user: auth.user,
actions: global.actions,
members: members.data,
};
const { auth, global, members } = state;
return {
loading: members.isRequesting,
user: auth.user,
actions: global.actions,
members: members.data,
};
}
export default connect(mapStateToProps)(cascadeCamera);

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

@ -96,7 +96,7 @@ function fluoriteCamera ({ cRef, CameraKind, CameraAbility, cameraData, ashTrue,
}}
initValues={{
name: cameraData.name || "",
highDefinition: cameraData?.highDefinition || "",
highDefinition: cameraData?.highDefinition,
memoryCard: cameraData.memoryCard || "",
position: cameraData.longitude
? `${cameraData.longitude},${cameraData.latitude}`
@ -106,8 +106,8 @@ function fluoriteCamera ({ cRef, CameraKind, CameraAbility, cameraData, ashTrue,
? cameraData.cameraAbilities.map((item) => item.id)
: ""
,
cloudControl: cameraData.cloudControl || "",
voice: cameraData.voice || "",
cloudControl: cameraData.cloudControl,
voice: cameraData.voice,
serialNo: cameraData.serialNo || "",
channelNo: cameraData.channelNo || "",
// rtmp: cameraData.rtmp || "",

4
code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/ipcCamera.jsx

@ -109,9 +109,9 @@ function ipcCamera ({
: "",
kindId: cameraData.kindId || "",
abilityId: cameraData.cameraAbilities ? cameraData.cameraAbilities.map((item) => item.id) : "",
cloudControl: cameraData.cloudControl || "",
cloudControl: cameraData.cloudControl,
voice: cameraData.voice || "",
serialNo: cameraData.serialNo || "",
serialNo: cameraData.serialNo,
rtmp: "此处无效 自动生成",
// rtmp: cameraData.rtmp || "",
}}

5
code/VideoAccess-VCMP/web/client/src/sections/equipmentWarehouse/components/sideSheet.jsx

@ -138,6 +138,7 @@ function SideSheets (props) {
rowId
)
).then((res) => {
if(res?.success){
setNvrDetails(res.payload.data);
projectScrollbar = new PerfectScrollbar("#project_information", {
suppressScrollX: true,
@ -146,6 +147,8 @@ function SideSheets (props) {
suppressScrollX: true,
});
}
});
}, []);
@ -180,7 +183,7 @@ function SideSheets (props) {
<SideSheet
visible={visible}
title={cameraSetup ?
<><img src={`/assets/images/background/${nvrDetails.forbidden ? "red" : colorStatus(statusNvr ? statusCamera.online : "")}.png`} style={{ marginRight: "10px" }} />{nvrDetails?.name}</>
<><img src={`/assets/images/background/${nvrDetails.forbidden ? "red" : colorStatus(statusNvr ? statusCamera?.online : "")}.png`} style={{ marginRight: "10px" }} />{nvrDetails?.name}</>
: <><img src={`/assets/images/background/${colorStatus(statusCamera ? statusNvr.online : "")}.png`} style={{ marginRight: "10px" }} />{nvrDetails?.name}</>
}
style={{ background: "#F9FBFF" }}

2
code/VideoAccess-VCMP/web/package.json

@ -7,7 +7,7 @@
"test": "mocha",
"start-vite": "cross-env NODE_ENV=developmentVite npm run start-params",
"start": "cross-env NODE_ENV=development npm run start-params",
"start-params": "node server -p 5000 -u http://localhost:4000 --apiVcmpUrl http://localhost:4000 --apiAuthUrl http://localhost:4200 --apiAnxinyunUrl http://localhost:4100 --iotAuthWeb http://localhost:5200 --iotVideoServer http://221.230.55.27:8081",
"start-params": "node server -p 5000 -u http://localhost:4000 --apiVcmpUrl http://localhost:4000 --apiAuthUrl http://localhost:4200 --apiAnxinyunUrl http://localhost:4100 --iotAuthWeb http://localhost:5200 --iotVideoServer http://iotmedia.anxinyun.cn",
"deploy": "export NODE_ENV=production&& npm run build && node server",
"build-dev": "cross-env NODE_ENV=development&&webpack --config webpack.config.js",
"build": "cross-env NODE_ENV=production&&webpack --config webpack.config.prod.js"

Loading…
Cancel
Save