diff --git a/src/views/car/carAlarm/index.vue b/src/views/car/carAlarm/index.vue index d656228..96466e3 100644 --- a/src/views/car/carAlarm/index.vue +++ b/src/views/car/carAlarm/index.vue @@ -12,7 +12,7 @@ placeholder="请选择报警类型" /> - diff --git a/src/views/car/carRecord/index.vue b/src/views/car/carRecord/index.vue index 2528752..48c3a70 100644 --- a/src/views/car/carRecord/index.vue +++ b/src/views/car/carRecord/index.vue @@ -10,7 +10,7 @@ - + diff --git a/src/views/device/components/lib/icc/PlayerManager.js b/src/views/device/components/lib/icc/PlayerManager.js index def44c0..a23d8de 100644 --- a/src/views/device/components/lib/icc/PlayerManager.js +++ b/src/views/device/components/lib/icc/PlayerManager.js @@ -7,7 +7,7 @@ import API from "./api.js"; */ class PlayerManager { constructor(opt) { - if(!opt.el) { + if (!opt.el) { console.warn(`请初始化播放器时传入必传参数: new PlayerManager({ el: "wsplayer_id", // 播放器所在的容器ID @@ -37,24 +37,24 @@ new PlayerManager({ * 在 ws/wss 直连模式下, serverIp 表示MTS流媒体服务 IP * 在 代理 模式下, serverIp 表示的是 代理服务器的IP 地址 */ - this.serverIp = opt.serverIp + this.serverIp = opt.serverIp - /** - * V1.2.8 版本新增字段 - * 解码库资源文件前缀 - */ - this.prefixUrl = opt.prefixUrl || './static' - /** - * V1.2.8 版本新增字段 - * 优先级最高,该方法传入后 - * 结构如下: - * eg: - * (rtspUrl) => { - * return "wss://{ip}:9102" - * } - * 配置后:protocol, isIntranet, proxyServerIp, streamServerIp - */ - this.setWSUrl = opt.setWSUrl + /** + * V1.2.8 版本新增字段 + * 解码库资源文件前缀 + */ + this.prefixUrl = opt.prefixUrl || './static' + /** + * V1.2.8 版本新增字段 + * 优先级最高,该方法传入后 + * 结构如下: + * eg: + * (rtspUrl) => { + * return "wss://{ip}:9102" + * } + * 配置后:protocol, isIntranet, proxyServerIp, streamServerIp + */ + this.setWSUrl = opt.setWSUrl /** * V1.2.8 版本新增字段 * websocket协议,http支持wss协议拉流,因此增加protocol配置 @@ -69,28 +69,28 @@ new PlayerManager({ */ this.isIntranet = opt.isIntranet this.intranetMap = opt.intranetMap - /** - * V1.2.7 版本新增字段 - * 用于只有内网 - * @desc 代理 模式下,代理服务器的IP 地址 - * 如果代理服务有端口则拼接端口 - * - */ - this.proxyServerIp = opt.proxyServerIp - /** - * V1.2.7 版本新增字段 - * 用于只有内网 - * @desc 流媒体服务 IP 地址 - * 如果拉流的 9100 9320 端口发生修改,则需要后面拼接修改后的端口 - */ - this.streamServerIp = opt.streamServerIp - /** - * V1.2.7 版本新增字段 - * @desc 模式类型 是直连模式/代理模式 - */ - this.useNginxProxy = opt.useNginxProxy || false + /** + * V1.2.7 版本新增字段 + * 用于只有内网 + * @desc 代理 模式下,代理服务器的IP 地址 + * 如果代理服务有端口则拼接端口 + * + */ + this.proxyServerIp = opt.proxyServerIp + /** + * V1.2.7 版本新增字段 + * 用于只有内网 + * @desc 流媒体服务 IP 地址 + * 如果拉流的 9100 9320 端口发生修改,则需要后面拼接修改后的端口 + */ + this.streamServerIp = opt.streamServerIp + /** + * V1.2.7 版本新增字段 + * @desc 模式类型 是直连模式/代理模式 + */ + this.useNginxProxy = opt.useNginxProxy || false - if(opt.importLoad) { + if (opt.importLoad) { this.loadWSPlayer(() => { this.initPlayer(opt) }) @@ -104,9 +104,9 @@ new PlayerManager({ dom.src = `${this.prefixUrl}/WSPlayer/WSPlayer.js`; document.head.appendChild(dom); var loaded = false; - if(typeof callback === 'function') { - dom.onload = dom.onreadystatechange = function() { - if(!loaded && (!dom.readyState || /loaded|complete/.test(dom.readyState))) { + if (typeof callback === 'function') { + dom.onload = dom.onreadystatechange = function () { + if (!loaded && (!dom.readyState || /loaded|complete/.test(dom.readyState))) { dom.onload = dom.onreadystatechange = null; loaded = true; callback(); @@ -118,10 +118,10 @@ new PlayerManager({ // 初始化播放器 initPlayer(opt) { // 初始化播放器 - if(window.WSPlayer.WSPlayer) { + if (window.WSPlayer.WSPlayer) { window.WSPlayer = window.WSPlayer.WSPlayer } - switch(opt.type) { + switch (opt.type) { case "real": this.initRealPlayer(opt); break; @@ -165,7 +165,7 @@ new PlayerManager({ useNginxProxy: this.useNginxProxy, // V1.2.7 版本新增该配置 直连时需要改为 false, 代理模式为 true showIcons: opt.showIcons || { streamChangeSelect: true, // 主辅码流切换 - replayIcon:true, // 刷新重播按钮 + replayIcon: true, // 刷新重播按钮 ivsIcon: true, // 控制智能帧按钮 talkIcon: true, // 对讲功能按钮 localRecordIcon: true, // 本地录像功能按钮 @@ -196,7 +196,7 @@ new PlayerManager({ }) this.player = this.realPlayer; // 初始化云台控制组件 - if(opt.pztEl) { + if (opt.pztEl) { this.realPlayer.initPanTilt({ // 云台控制容器的id el: opt.pztEl, @@ -237,7 +237,7 @@ new PlayerManager({ useNginxProxy: this.useNginxProxy, // V1.2.7 版本新增该配置 直连时需要改为 false, 【代理模式可不传】 showIcons: opt.showIcons || { streamChangeSelect: true, // 主辅码流切换 - replayIcon:true, // 刷新重播按钮 + replayIcon: true, // 刷新重播按钮 ivsIcon: true, // 控制智能帧按钮 talkIcon: true, // 对讲功能按钮 localRecordIcon: true, // 本地录像功能按钮 @@ -425,7 +425,7 @@ new PlayerManager({ * 关闭播放器 * @param {number} index 可选,关闭指定索引的窗口的播放器,不传则表示关闭所有播放器 */ - close(index, closeReason="api") { + close(index, closeReason = "api") { this.player && this.player.close(index, closeReason); } @@ -565,7 +565,7 @@ new PlayerManager({ // ----------------- 播放器事件 ------------------------ __receiveMessageFromWSPlayer(method, data) { - switch(method) { + switch (method) { // ------------- 公共事件 --------------------- case "initializationCompleted": // 初始化完成,可调用播放方法(适用于动态加载解码库) @@ -601,7 +601,7 @@ new PlayerManager({ case "closeVideo": // 视频关闭 // 点击关闭按钮引发的视频关闭进行提示 // 切换视频引发的视频关闭不进行提示 - if(!data.changeVideoFlag) { + if (!data.changeVideoFlag) { console.log(`窗口${data.selectIndex}的视频已关闭`) } // 关闭原因: btnClick-按钮关闭 chromeMemoryOut-浏览器内存不足 changeStream-切换视频调用 playSDKError-解码库报错关闭 recordFinish-录像回放完成 api-调用API关闭 destroy-解码库销毁关闭 otherCustom-可自定义关闭内容 @@ -638,12 +638,12 @@ new PlayerManager({ console.error(data) break; case "customDomInfo": // 窗口大小发生变化,视频播放时均会触发 - // data.customDomId 为每一个小窗口的自定义dom的id - // data.width 为当前窗口的宽度 - // data.height 为当前窗口的高度 - // data.currentWindowPlaying 当前窗口是否正在播放视频 - // 根据上述内容 进行水印的添加,或其他操作 - break; + // data.customDomId 为每一个小窗口的自定义dom的id + // data.width 为当前窗口的宽度 + // data.height 为当前窗口的高度 + // data.currentWindowPlaying 当前窗口是否正在播放视频 + // 根据上述内容 进行水印的添加,或其他操作 + break; case "chromeMemoryOut": console.warn("浏览器资源不足!") break; @@ -660,7 +660,7 @@ new PlayerManager({ case 'localRecordFile': // 本地录像停止时返回Blob数据 break; case "notifyTalk": // 点击顶部对讲按钮,触发此回调 - // 当采用 realByUrl 进行实时预览时,点击顶部对讲按钮,会触发此回调,需要在此回调内 获取对讲rtsp发起对讲 + // 当采用 realByUrl 进行实时预览时,点击顶部对讲按钮,会触发此回调,需要在此回调内 获取对讲rtsp发起对讲 case "switchStartTime": // 在调用 recordByUrl 中配置 playRecordByTime: false 后, 每次拖拽都会触发此回调,此回调需要重新获取rtsp拉流(不支持直接拖拽跳转的设备需要重新拉流,走此回调) break; diff --git a/src/views/device/components/preview-video/index.vue b/src/views/device/components/preview-video/index.vue index 48d73c8..8cfe442 100644 --- a/src/views/device/components/preview-video/index.vue +++ b/src/views/device/components/preview-video/index.vue @@ -51,8 +51,7 @@ async function init(list: any) { channelIdList: list }) if (cameraCode != 0) throw new Error() - if (channelList == null || channelList.length == 0) throw new Error() - channel.playList = channelList + channel.playList = channelList ?? [] initVideo() } } catch (error: any) { @@ -67,7 +66,7 @@ function initVideo() { realPlayer = new PlayerManager({ el: "ws-real-player" /** 实时预览容器id,创建多个播放器,传入不同的容器id即可 **/, type: "real" /** real - 实时预览 record - 录像回放 **/, - maxNum: 25 /** 一个播放器上限能播放的路数,可根据实际情况设置,支持 1 4 9 16 25 **/, + maxNum: 16 /** 一个播放器上限能播放的路数,可根据实际情况设置,支持 1 4 9 16 25 **/, num: videoState.videoNum /** 初始化,页面显示的路数 **/, showControl: true /** 是否显示工具栏,默认显示 **/, prefixUrl: "lib" /** 解码库所在位置的前缀 **/, @@ -160,6 +159,7 @@ function destroy() { realPlayer.close(index) } } + realPlayer.destroy() realPlayer = null; } } diff --git a/src/views/device/components/preview-video/preview-video-dialog.vue b/src/views/device/components/preview-video/preview-video-dialog.vue index 7b2003d..e9442bd 100644 --- a/src/views/device/components/preview-video/preview-video-dialog.vue +++ b/src/views/device/components/preview-video/preview-video-dialog.vue @@ -144,7 +144,7 @@ function initVideo(channelCode?: string) { realPlayer = new PlayerManager({ el: "ws-real-player" /** 实时预览容器id,创建多个播放器,传入不同的容器id即可 **/, type: "real" /** real - 实时预览 record - 录像回放 **/, - maxNum: 25 /** 一个播放器上限能播放的路数,可根据实际情况设置,支持 1 4 9 16 25 **/, + maxNum: 16 /** 一个播放器上限能播放的路数,可根据实际情况设置,支持 1 4 9 16 25 **/, num: state.videoNum /** 初始化,页面显示的路数 **/, showControl: true /** 是否显示工具栏,默认显示 **/, prefixUrl: "lib" /** 解码库所在位置的前缀 **/, @@ -250,6 +250,7 @@ function destroy() { realPlayer.close(index) } } + realPlayer.destroy() realPlayer = null; } } diff --git a/src/views/device/components/replay-video/index.vue b/src/views/device/components/replay-video/index.vue index d7ba823..5661cd8 100644 --- a/src/views/device/components/replay-video/index.vue +++ b/src/views/device/components/replay-video/index.vue @@ -38,7 +38,6 @@ onUnmounted(() => { // 初始化播放器 const init = (dataList: any, queryForm: any) => { destroy() - if (!dataList || !dataList.length) return state.queryForm = queryForm if (dataList && dataList.length) { state.channelList = dataList @@ -50,7 +49,6 @@ const init = (dataList: any, queryForm: any) => { state.startTimestamp = dateRange.startTimestamp state.endTimestamp = dateRange.endTimestamp } - state.currentNum = findSuitableNum(state.channelList.length, state.numList) replayVideo = new PlayerManager({ @@ -159,6 +157,7 @@ function destroy() { replayVideo.close(index) } } + replayVideo.destroy() replayVideo = null; } diff --git a/src/views/device/components/replay-video/replay-video-dialog.vue b/src/views/device/components/replay-video/replay-video-dialog.vue index 45d1291..850bed6 100644 --- a/src/views/device/components/replay-video/replay-video-dialog.vue +++ b/src/views/device/components/replay-video/replay-video-dialog.vue @@ -314,6 +314,7 @@ function destroy() { replayVideo.close(index) } } + replayVideo.destroy() replayVideo = null; } diff --git a/src/views/device/deviceGroup/form.vue b/src/views/device/deviceGroup/form.vue index 3f78785..61b3a4f 100644 --- a/src/views/device/deviceGroup/form.vue +++ b/src/views/device/deviceGroup/form.vue @@ -97,6 +97,8 @@ const onSubmit = async () => { const _form: any = { ...form } if (_form.panelViewCodes && _form.panelViewCodes.length) { _form.panelViewCodes = _form.panelViewCodes.join(',') + } else { + _form.panelViewCodes = "" } form.id ? await deviceGroupApi.putObj(_form) : await deviceGroupApi.addObj(_form); useMessage().success(form.id ? '修改成功' : '添加成功'); diff --git a/src/views/device/deviceGroup/index.vue b/src/views/device/deviceGroup/index.vue index 31f13ba..2125762 100644 --- a/src/views/device/deviceGroup/index.vue +++ b/src/views/device/deviceGroup/index.vue @@ -49,6 +49,13 @@ + + + \ No newline at end of file diff --git a/src/views/report/car/index.vue b/src/views/report/car/index.vue index 12078b3..0810e1f 100644 --- a/src/views/report/car/index.vue +++ b/src/views/report/car/index.vue @@ -12,7 +12,7 @@ :options="car_alarm_type" multiple placeholder="请选择进开门类型" /> - diff --git a/src/views/report/door/index.vue b/src/views/report/door/index.vue index 7529808..dd88240 100644 --- a/src/views/report/door/index.vue +++ b/src/views/report/door/index.vue @@ -20,7 +20,7 @@ :options="door_alarm_type" multiple placeholder="请选择报警类型" /> -