flx:提交大华icc

This commit is contained in:
Rain_ 2025-07-24 16:52:08 +08:00
parent e1115d2c08
commit c05680fd5b
11 changed files with 4680 additions and 1356 deletions

View File

@ -22,7 +22,7 @@ export default {
// devTypeList: ['杭州宇泛智能科技', '用jdpush推送', 'mqtt', '芊熠智能'], // devTypeList: ['杭州宇泛智能科技', '用jdpush推送', 'mqtt', '芊熠智能'],
// devTypeList: [{name:'杭州宇泛智能科技',id:1},{name:'芊熠智能',id:4},{name:'佳信捷第一版',id:5},{name:'佳信捷',id:6}], // devTypeList: [{name:'杭州宇泛智能科技',id:1},{name:'芊熠智能',id:4},{name:'佳信捷第一版',id:5},{name:'佳信捷',id:6}],
// devTypeList: [{name:'定制YF',id:1},{name:'定制QY',id:4},{name:'通用V2',id:5},{name:'通用V1',id:6}], //找不到最新版本所以更改了通用v1v2 // devTypeList: [{name:'定制YF',id:1},{name:'定制QY',id:4},{name:'通用V2',id:5},{name:'通用V1',id:6}], //找不到最新版本所以更改了通用v1v2
devTypeList: [{name:'定制YF',id:1},{name:'定制QY',id:4},{name:'通用V1',id:5},{name:'通用V2',id:6},{name:'海康门禁',id:7},{name:'弹弓',id:8},{name:'海康门禁isc',id:9}], devTypeList: [{ name: '定制YF', id: 1 }, { name: '定制QY', id: 4 }, { name: '通用V1', id: 5 }, { name: '通用V2', id: 6 }, { name: '海康门禁', id: 7 }, { name: '弹弓', id: 8 }, { name: '海康门禁isc', id: 9 }, { name: '大华ICC', id: 10 }],
devGroupTypeList: [{ name: '工地区', id: 1 }, { name: '生活区', id: 2 }, { name: '项目部', id: 3 }], devGroupTypeList: [{ name: '工地区', id: 1 }, { name: '生活区', id: 2 }, { name: '项目部', id: 3 }],
devTypeLabel: '设备类型', devTypeLabel: '设备类型',
noData: '暂无数据', noData: '暂无数据',
@ -97,4 +97,3 @@ export default {
faceDockingProtocol: 'HTTP人脸设备对接协议', faceDockingProtocol: 'HTTP人脸设备对接协议',
error1: '同一时间段内无法同时选择进出!' error1: '同一时间段内无法同时选择进出!'
} }

View File

@ -25,7 +25,7 @@ export default {
delete: '删除', delete: '删除',
video_type_tips: '视频类型(以下视频类型同时只可开启一种,如果当前有开启的视频,在选择其他视频类型时,该类型配置及所有信息将归零)', video_type_tips: '视频类型(以下视频类型同时只可开启一种,如果当前有开启的视频,在选择其他视频类型时,该类型配置及所有信息将归零)',
// videoTypeList: ['萤石云', '乐橙', 'ISC', '大华', '宇视', '国标','国密'], // videoTypeList: ['萤石云', '乐橙', 'ISC', '大华', '宇视', '国标','国密'],
videoTypeList: ['萤石云','乐橙','ISC',],//只显示1和3 videoTypeList: ['萤石云', '乐橙', 'ISC', '大华'], //只显示1和3
playTypeList: ['RTMP高清', 'RTMP流畅', 'HLS高清', 'HLS流畅', '高清轻量级插件(高清)', '流畅轻量级插件(流畅)'], playTypeList: ['RTMP高清', 'RTMP流畅', 'HLS高清', 'HLS流畅', '高清轻量级插件(高清)', '流畅轻量级插件(流畅)'],
deviceType: ['枪机', '球机', '热成像', '单兵', '全景', '无人机'], deviceType: ['枪机', '球机', '热成像', '单兵', '全景', '无人机'],
dialog_video_config: { dialog_video_config: {

View File

@ -58,3 +58,30 @@ export const countQualityApi = data => post('xmgl/projectVideoHkVqd/countQuality
export const countFullApi = data => post('xmgl/xzHikvisionVideoFull/countFull', data); export const countFullApi = data => post('xmgl/xzHikvisionVideoFull/countFull', data);
export const countFullPageApi = data => get('xmgl/projectVideoHkVqd/page', data); export const countFullPageApi = data => get('xmgl/projectVideoHkVqd/page', data);
// 查询启用的ocr配置信息
export const getEnableConfigOcrConfigApi = data => get('xmgl/ocrConfig/getEnableConfig', data);
// 编辑ocr配置信息
export const editOcrConfigApi = data => post('xmgl/ocrConfig/edit', data);
// 保存ocr识别模块位置信息
export const saveConfigOcrConfigApi = data => post('xmgl/ocrConfig/saveConfig', data);
// 启用指定类型的ocr配置
export const enableConfigOcrConfigApi = data => post('xmgl/ocrConfig/enableConfig', data);
// 分页列表查询ocr识别模块位置信息
export const getOcrModulePlacePageApi = data => get('xmgl/ocrModulePlace/page', data);
// 添加ocr识别模块位置信息
export const addOcrModulePlaceApi = data => post('xmgl/ocrModulePlace/add', data);
// 编辑ocr识别模块位置信息
export const editOcrModulePlaceApi = data => post('xmgl/ocrModulePlace/edit', data);
// 删除ocr识别模块位置信息
export const deleteOcrModulePlaceApi = data => post('xmgl/ocrModulePlace/delete', data);
// 分页列表查询ocr识别区域位置信息
export const getOcrZonePlacePageApi = data => get('xmgl/ocrZonePlace/page', data);
// 添加ocr识别区域位置信息
export const addOcrZonePlaceApi = data => post('xmgl/ocrZonePlace/add', data);
// 编辑ocr识别区域位置信息
export const editOcrZonePlaceApi = data => post('xmgl/ocrZonePlace/edit', data);
// 删除ocr识别区域位置信息
export const deleteOcrZonePlaceApi = data => post('xmgl/ocrZonePlace/delete', data);

View File

@ -206,7 +206,6 @@ if (process.env.NODE_ENV == "development") {
// axios.defaults.baseURL = "https://zm.zhgdyun.com:11111"; // axios.defaults.baseURL = "https://zm.zhgdyun.com:11111";
// // axios.defaults.baseURL = "http://121.37.106.37:9809"; // // axios.defaults.baseURL = "http://121.37.106.37:9809";
// axios.defaults.baseURL = "http://139.9.66.234:20628"; // axios.defaults.baseURL = "http://139.9.66.234:20628";
axios.defaults.baseURL = "http://jxj.zhgdyun.com:9500/";
} else if (process.env.NODE_ENV == "debug") { } else if (process.env.NODE_ENV == "debug") {
axios.defaults.baseURL = "https://www.ceshi.com"; axios.defaults.baseURL = "https://www.ceshi.com";

View File

@ -0,0 +1,265 @@
<template>
<div
id="dhplayer-dom"
:style="{ width: width, height: height, border: '1px solid #000' }"
>
<!-- <div class="shield-class" style="width: 100px; height: 100px;">测试遮挡</div> -->
</div>
</template>
<script setup>
import { ref, reactive, onMounted, watch } from "vue";
import { Message, MessageBox } from "element-ui";
import "./videoPlayer";
import dayjs from "dayjs";
const props = defineProps({
width: {
type: String,
default: "100%",
},
height: {
type: String,
default: "100%",
},
devList: {
type: Array,
default: () => [],
},
});
const emit = defineEmits([
"createSuccess",
"createError",
"realSuccess",
"realError",
//
]);
let myVideoPlayer = ref(null);
let myVideoPlayer1 = ref(null);
const pluginLoginInfo = ref({
host: "124.160.33.135",
port: "4077",
username: "TEST",
password: "OGR28u6_cc",
});
const windowType = ref(0);
const division = ref(1);
const snumType = ref(0);
//
function initDHPlayer() {
myVideoPlayer.value = new VideoPlayer({
videoId: "dhplayer-dom", //
windowType: windowType.value, // 0 - 3 - 7-
usePluginLogin: true, // (true)
pluginLoginInfo: pluginLoginInfo.value,
division: division.value, //
draggable: false, //
showBar: true, // true - , false -
shieldClass: ["shield-class", "select"], // DOMDOM
coverShieldClass: [], // domDOM-
parentIframeShieldClass: [], // iframe top dom DOM
//
createSuccess: (versionInfo) => {
myVideoPlayer.value.changeDivision(9);
emit("createSuccess", versionInfo);
handleRealClick();
},
//
createError: (err) => {
console.log("创建失败!!!" + JSON.stringify(err));
emit("createError", err);
},
//
dhPlayerMessage: (info, err) => {},
//
realSuccess: (info) => {
emit("realSuccess", info);
},
//
realError: (info, err) => {
emit("realError", info, err);
},
// ... emit
//
snapshotSuccess: ({ base64Url, path }, info) => {
const byteCharacters = atob(
base64Url.replace(/^data:image\/(png|jpeg|jpg);base64,/, "")
);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
const blob = new Blob([byteArray], {
type: undefined,
});
const aLink = document.createElement("a");
aLink.download = "图片名称.jpg";
aLink.href = URL.createObjectURL(blob);
aLink.click();
},
//
videoDownloadSuccess: (path, info) => {
hideDHPlayer();
MessageBox.alert("本地录像地址:" + path, "", {
confirmButtonText: "确定",
callback: (action) => {
console.log("确定");
showDHPlayer();
},
});
},
//
clickWindow: (snum) => {
snumType.value = snum;
},
//
closeWindowSuccess: ({ isAll, snum, channelList }) => {
console.log("关闭窗口回调", isAll, snum, channelList);
snumType.value = snum;
dataVideoList.value = channelList.map(item => {
return {
serialNumber: item.channelId,
videoName: item.channelName,
}
});
},
// ...
});
}
//
const handleRealClick = () => {
console.log("开始播放实时预览", windowType.value);
if (windowType.value == "0") {
startReal();
} else {
startPlayback();
}
};
// ... DOM
const dataVideoList = ref([]);
//
function startReal() {
if (!myVideoPlayer.value) {
console.log("不能播放,请先初始化插件!!!!!");
return;
}
console.log("开始播放实时预览");
const resultList = props.devList.map((item) => {
return {
channelId: item.serialNumber,
channelName: item.videoName,
snum: snumType.value,
streamType: 1,
deviceType: 5,
cameraType: "1",
capability: "00000000000000000000000000000001",
};
});
snumType.value += 1;
myVideoPlayer.value.startReal(resultList);
}
//
function startPlayback() {
if (myVideoPlayer.value && date) {
const resultList = props.devList.map((item) => {
return {
channelId: item.serialNumber,
channelName: item.videoName,
startTime: dayjs().format("YYYY-MM-DD") + " 00:00:00",
endTime: dayjs().format("YYYY-MM-DD") + " 23:59:59",
recordSource: 3,
streamType: 0,
snum: snumType.value,
};
});
snumType.value += 1;
myVideoPlayer.value.startPlayback(resultList);
}
}
//
function showDHPlayer() {
console.log("显示");
if (myVideoPlayer.value) {
// 1.
myVideoPlayer.value._update({
visible: true,
});
// 2.
// myVideoPlayer.value.show();
}
}
//
function hideDHPlayer() {
console.log("隐藏");
if (myVideoPlayer.value) {
// 1.
myVideoPlayer.value._update({
visible: false,
});
// 2.
// myVideoPlayer.value.hide();
}
}
watch(
() => props.devList,
(newVal) => {
console.log(
"设备列表变化",
newVal[0].serialNumber,
dataVideoList.value[0].serialNumber
);
if (newVal && newVal.length > 0) {
const findIndex = dataVideoList.value.findIndex(
(item) => item.serialNumber == newVal[0].serialNumber
);
console.log("设备列表变化", findIndex);
if (findIndex > -1) return Message.warning("设备已存在,无需重复添加");
dataVideoList.value.push(newVal[0]);
handleRealClick();
}
},
{ deep: true }
);
onMounted(() => {
console.log("开始初始化插件", props.devList);
if (props.devList.length > 0) {
pluginLoginInfo.value.host = props.devList[0].account;
pluginLoginInfo.value.port = props.devList[0].password;
pluginLoginInfo.value.username = props.devList[0].appId;
pluginLoginInfo.value.password = props.devList[0].appSecret;
dataVideoList.value = props.devList;
}
initDHPlayer();
});
// 线
const openivsRuleOutline = () => {
if (myVideoPlayer.value) {
myVideoPlayer.value.isEnableIvs({
snum: snumType.value,
isEnableIVS: true,
ivsType: 1,
});
}
};
// 线
const closeivsRuleOutline = () => {
if (myVideoPlayer.value) {
myVideoPlayer.value.isEnableIvs({
snum: snumType.value,
isEnableIVS: false,
ivsType: 1,
});
}
};
</script>
<style lang="less" scoped>
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -136,6 +136,44 @@
{{ $t("message.laborDev.openPlatform") }} {{ $t("message.laborDev.openPlatform") }}
</el-button> </el-button>
</el-form-item> </el-form-item>
<template v-if="beaconForm.supplierType == 10">
<el-form-item label="ip">
<el-input
v-model="beaconForm.iccIp"
:placeholder="$t('message.videoManage.placeholder')"
></el-input>
</el-form-item>
<el-form-item label="端口号">
<el-input
v-model="beaconForm.iccPort"
:placeholder="$t('message.videoManage.placeholder')"
></el-input>
</el-form-item>
<el-form-item label="username">
<el-input
v-model="beaconForm.iccUserName"
:placeholder="$t('message.videoManage.placeholder')"
></el-input>
</el-form-item>
<el-form-item label="password">
<el-input
v-model="beaconForm.iccPassword"
:placeholder="$t('message.videoManage.placeholder')"
></el-input>
</el-form-item>
<el-form-item label="clientId">
<el-input
v-model="beaconForm.iccClientId"
:placeholder="$t('message.videoManage.placeholder')"
></el-input>
</el-form-item>
<el-form-item label="clientSecret">
<el-input
v-model="beaconForm.iccClientSecret"
:placeholder="$t('message.videoManage.placeholder')"
></el-input>
</el-form-item>
</template>
<div class="dialog-footer"> <div class="dialog-footer">
<!-- 取消按钮 --> <!-- 取消按钮 -->
<el-button <el-button
@ -361,6 +399,12 @@ export default {
initDialog: false, initDialog: false,
beaconForm: { beaconForm: {
supplierType: "", supplierType: "",
iccIp: "",
iccPort: "",
iccUserName: "",
iccPassword: "",
iccClientId: "",
iccClientSecret: "",
}, },
beaconFormRules: { beaconFormRules: {
supplierType: [ supplierType: [
@ -461,6 +505,12 @@ export default {
this.initDialog = false; this.initDialog = false;
this.beaconForm = { this.beaconForm = {
supplierType: "", supplierType: "",
iccIp: "",
iccPort: "",
iccUserName: "",
iccPassword: "",
iccClientId: "",
iccClientSecret: "",
}; };
}, },
saveBeaconFn() { saveBeaconFn() {

File diff suppressed because it is too large Load Diff

View File

@ -195,7 +195,7 @@
ref="camera" ref="camera"
></camera-list> ></camera-list>
<camera-list-lc <camera-list-lc
v-if="videoType === 2 || videoType === 3 || videoType === 7" v-if="videoType === 2 || videoType === 3 || videoType === 7 || this.videoType === 4"
@editDevice="edit" @editDevice="edit"
ref="cameralc" ref="cameralc"
></camera-list-lc> ></camera-list-lc>
@ -574,7 +574,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="videoType == '1'" v-if="videoType == '1' || videoType == '4'"
:label="$t('message.videoManage.dialog_newVideo.serialNumber')" :label="$t('message.videoManage.dialog_newVideo.serialNumber')"
> >
<el-input <el-input
@ -850,7 +850,7 @@
<el-form label-width="100px" class="dialogFormBox" size="medium"> <el-form label-width="100px" class="dialogFormBox" size="medium">
<el-form-item <el-form-item
:label=" :label="
videoType == '3' videoType == '3' || videoType == '4'
? 'ip' ? 'ip'
: $t('message.videoManage.dialog_account_config.account') : $t('message.videoManage.dialog_account_config.account')
" "
@ -862,7 +862,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
:label=" :label="
videoType == '3' videoType == '3' || videoType == '4'
? 'port' ? 'port'
: $t('message.videoManage.dialog_account_config.password') : $t('message.videoManage.dialog_account_config.password')
" "
@ -884,6 +884,7 @@
:label=" :label="
videoType == '3' videoType == '3'
? 'APP Key' ? 'APP Key'
: videoType == '4' ? 'username'
: $t('message.videoManage.dialog_account_config.appId') : $t('message.videoManage.dialog_account_config.appId')
" "
> >
@ -894,7 +895,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="videoType != '7'" v-if="videoType != '7'"
:label="$t('message.videoManage.dialog_account_config.appSecret')" :label="videoType == '4' ? 'password' :$t('message.videoManage.dialog_account_config.appSecret')"
> >
<el-input <el-input
v-model="currentVideoTypeDetail.appSecret" v-model="currentVideoTypeDetail.appSecret"
@ -902,6 +903,19 @@
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item v-if="videoType == '4'" label="clientId">
<el-input
v-model="currentVideoTypeDetail.clientId"
placeholder="请输入"
></el-input>
</el-form-item>
<el-form-item v-if="videoType == '4'" label="clientSecret">
<el-input
v-model="currentVideoTypeDetail.clientSecret"
placeholder="请输入"
></el-input>
</el-form-item>
<el-form-item v-if="videoType == '3'" label="外网IP"> <el-form-item v-if="videoType == '3'" label="外网IP">
<el-input <el-input
v-model="currentVideoTypeDetail.outip" v-model="currentVideoTypeDetail.outip"
@ -1338,6 +1352,8 @@ export default {
coverUr: "", coverUr: "",
outip: "", outip: "",
outport: "", outport: "",
clientId: "",
clientSecret: "",
// appSecret: '0a5836c68a7edabcc78e6a18f05bb317' // appSecret: '0a5836c68a7edabcc78e6a18f05bb317'
}, },
isCreateNewUser: [ isCreateNewUser: [
@ -2047,7 +2063,7 @@ export default {
if ( if (
this.videoType === 2 || this.videoType === 2 ||
this.videoType === 3 || this.videoType === 3 ||
this.videoType === 7 this.videoType === 7 || this.videoType === 4
) { ) {
//isc //isc
this.$refs.cameralc.getSelectVideoItemListByTypeApi(id); this.$refs.cameralc.getSelectVideoItemListByTypeApi(id);
@ -2092,7 +2108,8 @@ export default {
if ( if (
this.videoType === 2 || this.videoType === 2 ||
this.videoType === 3 || this.videoType === 3 ||
this.videoType === 7 this.videoType === 7 || this.videoType === 4
) { ) {
//isc xiongmai //isc xiongmai
this.$refs.cameralc.setVideoInfo(res.result); this.$refs.cameralc.setVideoInfo(res.result);
@ -2139,6 +2156,8 @@ export default {
this.currentVideoTypeDetail.monitoringPointLocation, this.currentVideoTypeDetail.monitoringPointLocation,
latitude: this.currentVideoTypeDetail.latitude, latitude: this.currentVideoTypeDetail.latitude,
longitude: this.currentVideoTypeDetail.longitude, longitude: this.currentVideoTypeDetail.longitude,
clientId: this.currentVideoTypeDetail.clientId,
clientSecret: this.currentVideoTypeDetail.clientSecret,
}; };
console.log("传入的参数", params); console.log("传入的参数", params);
console.log(this.currentVideoTypeDetail.aiFunctionType); console.log(this.currentVideoTypeDetail.aiFunctionType);

View File

@ -2703,43 +2703,15 @@ export default {
if (data.workerInfo.ufaceDevId) { if (data.workerInfo.ufaceDevId) {
arr = data.workerInfo.ufaceDevId.split(","); arr = data.workerInfo.ufaceDevId.split(",");
} }
console.log("arr", arr); console.log("arr111", arr);
// if(type == 2) {
// let arr2 = [];
// this.ufaceDevAllList.forEach(item2=>{
// arr2.push(item2.id);
// })
// arr = arr.map(item=>{
// console.log('this.ufaceDevAllList',this.ufaceDevAllList);
// if(arr2.indexOf(item) != -1){
// console.log('item',item)
// return item
// }
// }).filter(item=>item);
// console.log('arr2',arr)
// this.$forceUpdate();
// }
// console.log("arr", arr);
// this.workerInfo.ufaceDevId = [];
this.workerInfo.ufaceDevId = arr; this.workerInfo.ufaceDevId = arr;
let id = "";
for (let i = 0; i < arr.length; i++) { this.ufaceDevAllList.forEach(item => {
//fixed if(arr.includes(item.id)) {
// this.workerInfo.ufaceDevId.push(arr[i]); this.ufaceDevNameList.push(item.devName);
// console.log(this.workerInfo.ufaceDevId) item.disabled = false;
id = parseInt(arr[i]);
for (let j = 0; j < this.ufaceDevAllList.length; j++) {
// console.log(this.ufaceDevAllList[j].id, id)
if (this.ufaceDevAllList[j].id == id) {
// console.log(this.ufaceDevAllList)
this.ufaceDevNameList.push(this.ufaceDevAllList[j].devName);
this.ufaceDevAllList[j].disabled = false;
}
}
} }
})
this.ufaceDevIdChange(this.workerInfo?.ufaceDevId); this.ufaceDevIdChange(this.workerInfo?.ufaceDevId);
} }