From d814622c8aca2a3b5d427a5f3d76d6d606d0c967 Mon Sep 17 00:00:00 2001 From: douyage Date: Thu, 13 Aug 2026 20:16:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E8=A7=86=E9=A2=91=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E3=80=81=E4=BF=AE=E6=94=B9=E5=9B=BE=E6=A0=87=EF=BC=8C?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 1 + .env.htjc6 | 1 + .env.production | 1 + public/aa-logo.png | Bin 0 -> 808 bytes public/index.html | 2 +- src/api/nvrVideo.js | 123 +++++--- src/api/videosMonitor/index.js | 15 +- src/assets/images/aa-logo.png | Bin 0 -> 808 bytes src/layout/components/Navbar.vue | 6 +- src/store/modules/user.js | 3 +- src/views/cards/patrolPlan/notstart.vue | 21 +- src/views/video/HistoryPlayback.vue | 9 +- src/views/video/LivePreview.vue | 42 +-- src/views/video/components/NvrDeviceTree.vue | 277 +++++++++---------- 14 files changed, 277 insertions(+), 224 deletions(-) create mode 100644 public/aa-logo.png create mode 100644 src/assets/images/aa-logo.png diff --git a/.env.development b/.env.development index 09664d8..1143454 100644 --- a/.env.development +++ b/.env.development @@ -8,6 +8,7 @@ ENV = 'development' VUE_APP_BASE_API = '/dev-api' VUE_APP_NVR_API = '/nvr-api' +VUE_APP_DEVICE_TREE_API = 'http://192.168.1.116:18891/app/htjc6/api' # 路由懒加载 VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/.env.htjc6 b/.env.htjc6 index c3ee4e4..265c82e 100644 --- a/.env.htjc6 +++ b/.env.htjc6 @@ -4,6 +4,7 @@ ENV = 'production' VUE_APP_TITLE = 智能巡视 VUE_APP_BASE_API = '/prod-api' VUE_APP_NVR_API = 'http://192.168.1.86:28081' +VUE_APP_DEVICE_TREE_API = 'http://192.168.1.116:18891/app/htjc6/api' VUE_APP_PUBLIC_PATH = '/app/htjc6/' VUE_APP_OUTPUT_DIR = 'dist/app/htjc6' diff --git a/.env.production b/.env.production index ec7891a..3ee2ee3 100644 --- a/.env.production +++ b/.env.production @@ -8,3 +8,4 @@ ENV = 'production' VUE_APP_BASE_API = '/prod-api' VUE_APP_NVR_API = 'http://192.168.1.86:28081' +VUE_APP_DEVICE_TREE_API = 'http://192.168.1.116:18891/app/htjc6/api' diff --git a/public/aa-logo.png b/public/aa-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bf790f3989b07b992021853c9f9cc1587271573b GIT binary patch literal 808 zcmV+@1K0eCP)Z zT}TvB6vu!0vDxkxyO?I0^kDWSlmk&LL{OMdL4^>gDB(jyP`wOHLAY!$v9J#n_0m%x zSP+Eu5+Q*Q)shdbNI}m*;oFX}NC;Zoy1R_)%)NKi1H;VR^Kt+8oO}LrX9FQ*$K9FH z(!ydU$U_7h=x$Bl@7Z?KG-^#40HuY+vnu`0unsxi6D1M*ZwV0RYa3MXC(;H~XsN(s#`O zl&NfrMQDuHugX^oAdxGy0KF=kfYq0!HiPvoT%B{i!upj&+jcqy-v#x^jPF8~wj1zxzeHJ?r;=f$(eHjtWwGN7g2 zs?_Vs5J=5I0CfHP1DN!@Ps%Zs_{LlTz=V2%G1s;#?Uzm^#q*fP$CsM@GN7ei;IZMD zSA4124}dQH)2?lOtsYFLl45LH_*{oR50B{*N6yX057;zluk9hH>+w>$m5-|BmxqwHC$%UK; zu9RQACD8SLS<;DI;j?R7Z{)-qf!n}ELw_NcfIHOyIt-m7!0SY=FfMA!;>3`wbr{)Q zw)K`^E<^yaca8wxfExxhTrHKkya2{S1b7M@bZu+Oahy-$S&o@XWiD?Qv;tF_ub}wo zjJme<-cOm$W{(2m&sgVZah#va07wvG@>{@ZV2eCx%m8nJ=YA9%07SI(Ik`6u m$nU_fe|rY5JC5_eWWZln!nJBM5(Hxa0000 - + <%= webpackConfig.name %> diff --git a/src/api/nvrVideo.js b/src/api/nvrVideo.js index 39495c9..4534438 100644 --- a/src/api/nvrVideo.js +++ b/src/api/nvrVideo.js @@ -1,80 +1,129 @@ -import axios from 'axios' +import request from '@/utils/request' -const nvr = axios.create({ - baseURL: process.env.VUE_APP_NVR_API || '/nvr-api', - timeout: 30000, - withCredentials: false +const unwrap = promise => promise.then(result => { + if (result && Object.prototype.hasOwnProperty.call(result, 'data')) return result.data + return result }) -nvr.interceptors.response.use( - response => response, - error => { - const response = error.response - const data = response && response.data - const message = data && (data.message || data.msg) - const normalized = new Error(message || error.message || 'NVR 服务请求失败') - normalized.status = response && response.status - normalized.response = response - return Promise.reject(normalized) +function encodeCameraCodeSegments(cameraCode) { + const value = String(cameraCode || '') + const separatorIndex = value.indexOf('#') + if (separatorIndex <= 0 || separatorIndex === value.length - 1) { + throw new Error('摄像机编码格式不正确') } -) - -const data = promise => promise.then(response => response.data) -const uiBase = '/hik/nvr/playback/hls/ui' -const playbackBase = '/hik/nvr/playback/hls' + return [ + encodeURIComponent(value.slice(0, separatorIndex)), + encodeURIComponent(value.slice(separatorIndex + 1)) + ] +} export function getNvrConfig() { - return data(nvr.get(`${uiBase}/config`)) + return unwrap(request({ url: '/patrol/video/config', method: 'get' })) } -export function startLive(cameraCode) { - return data(nvr.post(`${uiBase}/actions/live/start`, { cameraCode, streamType: 1 })) +export function startLive(channel) { + return unwrap(request({ + url: '/patrol/video/realtime/start', + method: 'post', + data: { + cameraCode: channel.cameraCode || channel.channelCode, + streamType: 1 + } + })) } export function getLiveStatus(cameraCode) { - return data(nvr.get(`${uiBase}/actions/live/status`, { params: { cameraCode }})) + return unwrap(request({ + url: '/patrol/video/realtime/status', + method: 'get', + params: { cameraCode } + })) } export function stopLive(cameraCode) { - return data(nvr.post(`${uiBase}/actions/live/stop`, { cameraCode })) + return unwrap(request({ + url: '/patrol/video/realtime/stop', + method: 'post', + data: { cameraCode } + })) } export function controlPtz(payload) { - return data(nvr.post('/device/ptzcontrol', payload)) + return unwrap(request({ + url: '/patrol/preset/ptzControl', + method: 'post', + data: payload + })) } -export function getPresetList(deviceCode, domainCode) { - return data(nvr.get(`/device/ptzpresetlist/${encodeURIComponent(deviceCode)}/${encodeURIComponent(domainCode)}`)) +export function getPresetList(cameraCode) { + const [device, domain] = encodeCameraCodeSegments(cameraCode) + return unwrap(request({ + url: `/patrol/preset/presetList/${device}/${domain}`, + method: 'get' + })) } export function createPreset(payload) { - return data(nvr.post(`${uiBase}/actions/preset/create`, payload)) + return unwrap(request({ + url: '/patrol/preset/presetCreate', + method: 'post', + data: payload + })) } -export function createSnapshot(deviceCode, domainCode) { - return data(nvr.get(`/platform/platformSnapshot/${encodeURIComponent(deviceCode)}/${encodeURIComponent(domainCode)}`)) +export function createSnapshot(cameraCode) { + const [device, domain] = encodeCameraCodeSegments(cameraCode) + return unwrap(request({ + url: `/patrol/videotape/snapshot/task/${device}/${domain}`, + method: 'get' + })) } export function downloadSnapshot(taskId) { - return nvr.get(`/platform/snapshot/${encodeURIComponent(taskId)}`, { responseType: 'blob' }) + return request({ + url: `/patrol/videotape/snapshot/${encodeURIComponent(taskId)}`, + method: 'get', + responseType: 'blob' + }) } export function createPlaybackSession(payload) { - return data(nvr.post(`${uiBase}/sessions`, payload)) + return unwrap(request({ + url: '/patrol/videotape/hls/ui/session/create', + method: 'post', + data: payload + })) } export function getPlaybackSession(sessionId) { - return data(nvr.get(`${playbackBase}/sessions/${encodeURIComponent(sessionId)}`)) + return unwrap(request({ + url: `/patrol/videotape/hls/session/query/${encodeURIComponent(sessionId)}`, + method: 'get' + })) } export function controlPlayback(sessionId, payload) { - return data(nvr.post(`${uiBase}/sessions/${encodeURIComponent(sessionId)}/controls`, payload)) + return unwrap(request({ + url: `/patrol/videotape/hls/ui/session/control/${encodeURIComponent(sessionId)}`, + method: 'post', + data: payload + })) } export function deletePlaybackSession(sessionId) { - return data(nvr.delete(`${playbackBase}/sessions/${encodeURIComponent(sessionId)}`)) + return unwrap(request({ + url: `/patrol/videotape/hls/session/delete/${encodeURIComponent(sessionId)}`, + method: 'delete' + })) } export function downloadPlaybackClip(payload) { - return nvr.post('/hik/nvr/playback/clips/download', payload, { responseType: 'blob', timeout: 120000 }) + return request({ + url: '/patrol/videotape/clip/download', + method: 'post', + data: payload, + responseType: 'blob', + timeout: 120000 + }) } diff --git a/src/api/videosMonitor/index.js b/src/api/videosMonitor/index.js index 279bc11..efe759c 100644 --- a/src/api/videosMonitor/index.js +++ b/src/api/videosMonitor/index.js @@ -7,11 +7,20 @@ import { defectList } from "../home/index"; * @returns */ export function getAreaEqubookTreeSelect(params) { + const query = params || {}; + const patroldeviceName = encodeURIComponent(query.patroldeviceName || ""); + const onlineStatus = encodeURIComponent(query.onlineStatus || ""); + const patroldeviceTypeFlag = encodeURIComponent( + query.patroldeviceTypeFlag || "ipc" + ); return request({ - // url: '/basedata/eqpbook/getAreaEqubookTreeSelect', - url: "/basedata/eqpbook/getAreaEqubookTreeSelectForFilter", + baseURL: process.env.VUE_APP_DEVICE_TREE_API, + url: + "/basedata/eqpbook/getAreaEqubookTreeSelectForFilter" + + `?patroldeviceName=${patroldeviceName}` + + `&onlineStatus=${onlineStatus}` + + `&patroldeviceTypeFlag=${patroldeviceTypeFlag}`, method: "get", - params, }); } /** diff --git a/src/assets/images/aa-logo.png b/src/assets/images/aa-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bf790f3989b07b992021853c9f9cc1587271573b GIT binary patch literal 808 zcmV+@1K0eCP)Z zT}TvB6vu!0vDxkxyO?I0^kDWSlmk&LL{OMdL4^>gDB(jyP`wOHLAY!$v9J#n_0m%x zSP+Eu5+Q*Q)shdbNI}m*;oFX}NC;Zoy1R_)%)NKi1H;VR^Kt+8oO}LrX9FQ*$K9FH z(!ydU$U_7h=x$Bl@7Z?KG-^#40HuY+vnu`0unsxi6D1M*ZwV0RYa3MXC(;H~XsN(s#`O zl&NfrMQDuHugX^oAdxGy0KF=kfYq0!HiPvoT%B{i!upj&+jcqy-v#x^jPF8~wj1zxzeHJ?r;=f$(eHjtWwGN7g2 zs?_Vs5J=5I0CfHP1DN!@Ps%Zs_{LlTz=V2%G1s;#?Uzm^#q*fP$CsM@GN7ei;IZMD zSA4124}dQH)2?lOtsYFLl45LH_*{oR50B{*N6yX057;zluk9hH>+w>$m5-|BmxqwHC$%UK; zu9RQACD8SLS<;DI;j?R7Z{)-qf!n}ELw_NcfIHOyIt-m7!0SY=FfMA!;>3`wbr{)Q zw)K`^E<^yaca8wxfExxhTrHKkya2{S1b7M@bZu+Oahy-$S&o@XWiD?Qv;tF_ub}wo zjJme<-cOm$W{(2m&sgVZah#va07wvG@>{@ZV2eCx%m8nJ=YA9%07SI(Ik`6u m$nU_fe|rY5JC5_eWWZln!nJBM5(Hxa0000
- +
@@ -71,6 +71,7 @@ import { mapGetters } from "vuex"; import TopNav from "@/components/TopNav"; import Screenfull from "@/components/Screenfull"; import headerLogo from "@/assets/images/header/logo.png"; +import loginAvatar from "@/assets/images/aa-logo.png"; // import { changeLanguage } from "@/api/login"; export default { components: { @@ -79,7 +80,8 @@ export default { }, data() { return { - headerLogo + headerLogo, + loginAvatar }; }, computed: { diff --git a/src/store/modules/user.js b/src/store/modules/user.js index a8e01cf..0db53db 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -1,5 +1,6 @@ import { login, logout, getInfo, refreshToken } from "@/api/login"; import { getToken, setToken, setExpiresIn, removeToken } from "@/utils/auth"; +import defaultAvatar from "@/assets/images/aa-logo.png"; const user = { state: { @@ -84,7 +85,7 @@ const user = { const user = res.user; const avatar = user.avatar == "" || user.avatar == null - ? require("@/assets/images/profile.jpg") + ? defaultAvatar : user.avatar; if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 diff --git a/src/views/cards/patrolPlan/notstart.vue b/src/views/cards/patrolPlan/notstart.vue index a43a06e..ad8340f 100644 --- a/src/views/cards/patrolPlan/notstart.vue +++ b/src/views/cards/patrolPlan/notstart.vue @@ -106,14 +106,21 @@ align="center" :index="table_index" /> - - - - + + + + @@ -123,7 +130,7 @@ prop="taskCycle" :formatter="stateTask" /> --> - +