|
@ -8,393 +8,393 @@ import { VideoPlayModal } from "$components"; |
|
|
|
|
|
|
|
|
let equipmentScrollbar; |
|
|
let equipmentScrollbar; |
|
|
function cascadeCamera ({ dRef, dispatch, actions, cameraData, parentCamera, testComplete, close, ashTrue, ashFalse }) { |
|
|
function cascadeCamera ({ dRef, dispatch, actions, cameraData, parentCamera, testComplete, close, ashTrue, ashFalse }) { |
|
|
const form = useRef(); |
|
|
const form = useRef(); |
|
|
const { equipmentWarehouse } = actions; |
|
|
const { equipmentWarehouse } = actions; |
|
|
const [sip, setSip] = useState([]); |
|
|
const [sip, setSip] = useState([]); |
|
|
const [cascadeList, setCascadeList] = useState([]); //nvr视频流列表 |
|
|
const [cascadeList, setCascadeList] = useState([]); //nvr视频流列表 |
|
|
const [CheckList, setCheckList] = useState([]); //nvr视频流多选 |
|
|
const [CheckList, setCheckList] = useState([]); //nvr视频流多选 |
|
|
const [isAllChoose, setIsAllChoose] = useState(false); //全选 |
|
|
const [isAllChoose, setIsAllChoose] = useState(false); //全选 |
|
|
const [formData, setFormData] = useState() //表单数据 |
|
|
const [formData, setFormData] = useState() //表单数据 |
|
|
const [videoPlay, setVideoPlay] = useState(false);//播放 |
|
|
const [videoPlay, setVideoPlay] = useState(false);//播放 |
|
|
const [videoObj, setVideoObj] = useState(); //播放条件 |
|
|
const [videoObj, setVideoObj] = useState(); //播放条件 |
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
useEffect(() => { |
|
|
dispatch(equipmentWarehouse.getCascadeSIP()).then((res) => { |
|
|
dispatch(equipmentWarehouse.getCascadeSIP()).then((res) => { |
|
|
setSip(res.payload.data); |
|
|
setSip(res.payload.data); |
|
|
if (cameraData.id) { |
|
|
if (cameraData.id) { |
|
|
let sip = res.payload.data.find((item) => item.streamid == cameraData.topSerialNo) |
|
|
let sip = res.payload.data.find((item) => item.streamid == cameraData.topSerialNo) |
|
|
dispatch(equipmentWarehouse.getCascadeStream({ streamId: sip.streamid })).then((res) => { |
|
|
dispatch(equipmentWarehouse.getCascadeStream({ streamId: sip.streamid })).then((res) => { |
|
|
let oneData = res.payload.data[0]; |
|
|
let oneData = res.payload.data[0]; |
|
|
let modifyData = res.payload.data.find( |
|
|
let modifyData = res.payload.data.find( |
|
|
(item) => item.id == cameraData.gbId |
|
|
(item) => item.id == cameraData.gbId |
|
|
); |
|
|
); |
|
|
let data = res.payload.data.map((item, index) => { |
|
|
let data = res.payload.data.map((item, index) => { |
|
|
if (item.camera) { |
|
|
if (item.camera) { |
|
|
item.name = item.camera.name; |
|
|
item.name = item.camera.name; |
|
|
} |
|
|
} |
|
|
if (item.id == cameraData.gbId) { |
|
|
if (item.id == cameraData.gbId) { |
|
|
item = oneData; |
|
|
item = oneData; |
|
|
} |
|
|
} |
|
|
if (index == 0) { |
|
|
if (index == 0) { |
|
|
item = modifyData; |
|
|
item = modifyData; |
|
|
} |
|
|
} |
|
|
return item; |
|
|
return item; |
|
|
}) |
|
|
}) |
|
|
setCascadeList(data) |
|
|
setCascadeList(data) |
|
|
setCheckList([data[0].id]) |
|
|
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); |
|
|
|
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
close() |
|
|
}); |
|
|
}, [testComplete]) |
|
|
const videoStreaming = document.getElementById("video_streaming"); |
|
|
|
|
|
if (videoStreaming && equipmentScrollbar) { |
|
|
|
|
|
equipmentScrollbar.update(); |
|
|
|
|
|
} |
|
|
|
|
|
}, []); |
|
|
|
|
|
|
|
|
//内存卡列表 |
|
|
useEffect(() => { |
|
|
const memoryList = [ |
|
|
cascadeList |
|
|
{ |
|
|
? (equipmentScrollbar = new PerfectScrollbar("#video_streaming", { |
|
|
id: 1, |
|
|
suppressScrollX: true, |
|
|
value: "8g", |
|
|
})) |
|
|
}, |
|
|
: ""; |
|
|
{ |
|
|
}, [cascadeList]); |
|
|
id: 2, |
|
|
|
|
|
value: "16g", |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
id: 3, |
|
|
|
|
|
value: "32g", |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
id: 4, |
|
|
|
|
|
value: "64g", |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
id: 5, |
|
|
|
|
|
value: "128g", |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
id: 6, |
|
|
|
|
|
value: "256g", |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
id: 7, |
|
|
|
|
|
value: ">256g", |
|
|
|
|
|
}, |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
function NvrChangeName (e, index, id) { |
|
|
useEffect(() => { |
|
|
//级联摄像头视频流获取修改名称 |
|
|
//测试成功后获取级联视频流 |
|
|
let NvrchangeList = JSON.parse(JSON.stringify(cascadeList)); |
|
|
if (testComplete) { |
|
|
if (!cameraData.gbId || cameraData.gbId == id) { |
|
|
dispatch(equipmentWarehouse.getCascadeStream({ streamId: formData.streamId })).then((res) => { |
|
|
NvrchangeList[index].change = true; |
|
|
let chooseList = []; |
|
|
setCascadeList(NvrchangeList); |
|
|
let data = res.payload.data.map((item, index) => { |
|
|
} |
|
|
if (item.camera) { |
|
|
e.stopPropagation(); |
|
|
item.name = item.camera.name; |
|
|
} |
|
|
} |
|
|
function nvronBlur (index) { |
|
|
return item; |
|
|
//nvr摄像头名称修改失去焦点 |
|
|
}) |
|
|
let NvrchangeList = JSON.parse(JSON.stringify(cascadeList)); |
|
|
setCascadeList(data) |
|
|
NvrchangeList[index].change = false; |
|
|
for (let index = 0; index < data.length; index++) { |
|
|
setCascadeList(NvrchangeList); |
|
|
chooseList.push(data[index].id); |
|
|
} |
|
|
|
|
|
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); |
|
|
setCheckList(chooseList); |
|
|
setIsAllChoose(true); |
|
|
setIsAllChoose(true); |
|
|
} |
|
|
}); |
|
|
} |
|
|
} |
|
|
function playVideo (e, id) { |
|
|
close() |
|
|
//nvr播放视频 |
|
|
}, [testComplete]) |
|
|
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; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
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={{ |
|
|
const memoryList = [ |
|
|
externalDomain: cameraData.externalDomain || "" |
|
|
{ |
|
|
}} |
|
|
id: 1, |
|
|
getFormApi={(formApi) => (form.current = formApi)} |
|
|
value: "8g", |
|
|
> |
|
|
}, |
|
|
<Row> |
|
|
{ |
|
|
<Col span={12}> |
|
|
id: 2, |
|
|
<Form.Input |
|
|
value: "16g", |
|
|
field="externalDomain" |
|
|
}, |
|
|
label="外域名称:" |
|
|
{ |
|
|
maxLength="36" |
|
|
id: 3, |
|
|
placeholder="请输入外域 名称,例如“xxx市级平台”" |
|
|
value: "32g", |
|
|
style={{ width: 307 }} |
|
|
}, |
|
|
rules={[{ required: true, message: "请输入外域名称" }]} |
|
|
{ |
|
|
/> |
|
|
id: 4, |
|
|
</Col> |
|
|
value: "64g", |
|
|
<Col span={12}> |
|
|
}, |
|
|
<Form.Select |
|
|
{ |
|
|
label="级联方式:" |
|
|
id: 5, |
|
|
field="cascadeType" |
|
|
value: "128g", |
|
|
initValue={cameraData.cascadeType || "上级域"} |
|
|
}, |
|
|
style={{ width: 307 }} |
|
|
{ |
|
|
rules={[{ required: true, message: "请选择输入级联方式" }]} |
|
|
id: 6, |
|
|
> |
|
|
value: "256g", |
|
|
<Form.Select.Option value="上级域"> |
|
|
}, |
|
|
上级域 |
|
|
{ |
|
|
</Form.Select.Option> |
|
|
id: 7, |
|
|
</Form.Select> |
|
|
value: ">256g", |
|
|
</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 |
|
|
function NvrChangeName (e, index, id) { |
|
|
id="video_streaming" |
|
|
//级联摄像头视频流获取修改名称 |
|
|
style={{ maxHeight: 300, position: "relative" }} |
|
|
let NvrchangeList = JSON.parse(JSON.stringify(cascadeList)); |
|
|
> |
|
|
if (!cameraData.gbId || cameraData.gbId == id) { |
|
|
{cascadeList.length > 0 ? ( |
|
|
NvrchangeList[index].change = true; |
|
|
<div |
|
|
setCascadeList(NvrchangeList); |
|
|
style={{ display: "flex", justifyContent: "flex-end", marginRight: 50 }} |
|
|
} |
|
|
> |
|
|
e.stopPropagation(); |
|
|
<Radio |
|
|
} |
|
|
checked={isAllChoose} |
|
|
function nvronBlur (index) { |
|
|
mode="advanced" |
|
|
//nvr摄像头名称修改失去焦点 |
|
|
disabled={cameraData.gbId ? true : false} |
|
|
let NvrchangeList = JSON.parse(JSON.stringify(cascadeList)); |
|
|
onChange={(e) => allChoose(e)} |
|
|
NvrchangeList[index].change = false; |
|
|
aria-label="全选" |
|
|
setCascadeList(NvrchangeList); |
|
|
> |
|
|
} |
|
|
全选 |
|
|
function inputchange (e, index) { |
|
|
</Radio> |
|
|
//nvr摄像头名称修改 |
|
|
</div> |
|
|
let NvrchangeList = JSON.parse(JSON.stringify(cascadeList)); |
|
|
) : ( |
|
|
NvrchangeList[index].name = e; |
|
|
"" |
|
|
setCascadeList(NvrchangeList); |
|
|
)} |
|
|
} |
|
|
<CheckboxGroup |
|
|
function allChoose (e) { |
|
|
type="pureCard" |
|
|
//全选/全不选 |
|
|
direction="vertical" |
|
|
let chooseList = []; |
|
|
aria-label="视频流获取" |
|
|
if (cascadeList.length == CheckList.length) { |
|
|
value={CheckList} |
|
|
setCheckList([]); |
|
|
onChange={(nvrCheck) => { |
|
|
setIsAllChoose(false); |
|
|
setCheckList(nvrCheck); |
|
|
} else { |
|
|
if (cascadeList.length == nvrCheck.length) { |
|
|
for (let index = 0; index < cascadeList.length; index++) { |
|
|
setIsAllChoose(true); |
|
|
chooseList.push(cascadeList[index].id); |
|
|
} else { |
|
|
} |
|
|
setIsAllChoose(false); |
|
|
setCheckList(chooseList); |
|
|
} |
|
|
setIsAllChoose(true); |
|
|
}}> |
|
|
} |
|
|
{cascadeList.length > 0 |
|
|
} |
|
|
? cascadeList.map((item, index) => ( |
|
|
function playVideo (e, id) { |
|
|
<Col |
|
|
//nvr播放视频 |
|
|
key={index} |
|
|
if (cameraData.gbId == id || !cameraData.gbId) { |
|
|
span={12} |
|
|
let data = cascadeList.find((item) => item.id == id) |
|
|
style={{ |
|
|
setVideoObj({ |
|
|
display: "flex", |
|
|
type: 'cascade', |
|
|
justifyContent: "center", |
|
|
audio: false, |
|
|
marginTop: 12, |
|
|
serialNo: data.streamid, |
|
|
}} |
|
|
topSerialNo: cameraData.id ? cameraData.topSerialNo : formData?.streamId, |
|
|
> |
|
|
playUrlSd: data?.playUrl?.liveUrl?.sd["WS-RAW"], |
|
|
<Checkbox |
|
|
content: data?.camera?.cameraRemarks.map((item) => item.remark), |
|
|
value={item.id} |
|
|
}) |
|
|
disabled={onDisabled(item.id)} |
|
|
setVideoPlay(true); |
|
|
extra={ |
|
|
} |
|
|
<div> |
|
|
e.stopPropagation(); |
|
|
<div |
|
|
} |
|
|
style={{ |
|
|
function onDisabled (id) { |
|
|
display: "flex", |
|
|
if (id == cameraData.gbId || !cameraData.gbId) { |
|
|
alignItems: "center", |
|
|
return false; |
|
|
justifyContent: "space-between", |
|
|
} else { |
|
|
height: 30, |
|
|
return true; |
|
|
}} |
|
|
} |
|
|
> |
|
|
} |
|
|
<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> |
|
|
useImperativeHandle(dRef, () => ({ |
|
|
</Form> |
|
|
//传给父组件方法 |
|
|
{videoPlay ? |
|
|
//子组件暴露给父组件的方法 |
|
|
<VideoPlayModal |
|
|
cascadeCameraForm: form.current.validate, |
|
|
visible={true} |
|
|
resetCascadeCamera: form.current.reset, |
|
|
videoObj={videoObj} |
|
|
cascadeList: cascadeList.filter((v) => |
|
|
close={() => { |
|
|
CheckList.some((e) => e == v.id) |
|
|
setVideoPlay(false) |
|
|
), |
|
|
}} /> |
|
|
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) { |
|
|
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)(cascadeCamera); |
|
|
export default connect(mapStateToProps)(cascadeCamera); |
|
|