diff --git a/apps/web-antd/src/api/sis/stream/index.ts b/apps/web-antd/src/api/sis/stream/index.ts index 87e18d94..5d77780d 100644 --- a/apps/web-antd/src/api/sis/stream/index.ts +++ b/apps/web-antd/src/api/sis/stream/index.ts @@ -1,4 +1,4 @@ -import type { AddStreamProxyResult } from './model'; +import type {AddStreamProxyResult, SdkPlayBack} from './model'; import { requestClient } from '#/api/request'; /** @@ -30,3 +30,11 @@ export function addFFmpegMediaStreamProxy(params?: any) { params, ); } + +/** + * sdk回放 + * @param params + */ +export function playBack(params?: any) { + return requestClient.post('sis/stream/sdk/plackBack', params); +} diff --git a/apps/web-antd/src/api/sis/stream/model.d.ts b/apps/web-antd/src/api/sis/stream/model.d.ts index dde8e896..7e2be7f4 100644 --- a/apps/web-antd/src/api/sis/stream/model.d.ts +++ b/apps/web-antd/src/api/sis/stream/model.d.ts @@ -22,3 +22,7 @@ export interface AddStreamProxyQuery { stream:string; } + +export interface SdkPlayBack { + wsUrl:string; +} diff --git a/apps/web-antd/src/layouts/basic.vue b/apps/web-antd/src/layouts/basic.vue index 61256dab..eaa9997b 100644 --- a/apps/web-antd/src/layouts/basic.vue +++ b/apps/web-antd/src/layouts/basic.vue @@ -41,15 +41,15 @@ const { destroyWatermark, updateWatermark } = useWatermark(); const tenantStore = useTenantStore(); const menus = computed(() => { const defaultMenus = [ - { - handler: () => { - openWindow(VBEN_DOC_URL, { - target: '_blank', - }); - }, - icon: BookOpenText, - text: $t('ui.widgets.document'), - }, + // { + // handler: () => { + // openWindow(VBEN_DOC_URL, { + // target: '_blank', + // }); + // }, + // icon: BookOpenText, + // text: $t('ui.widgets.document'), + // }, { handler: () => { router.push('/profile'); @@ -146,7 +146,7 @@ watch( :avatar :menus :text="userStore.userInfo?.realName" - :description="userStore.userInfo?.roles[0]" + :description="userStore.userInfo?.roleName" tag-text="Pro" @logout="handleLogout" /> diff --git a/apps/web-antd/src/store/auth.ts b/apps/web-antd/src/store/auth.ts index 2160ba05..db3637c4 100644 --- a/apps/web-antd/src/store/auth.ts +++ b/apps/web-antd/src/store/auth.ts @@ -116,6 +116,7 @@ export const useAuthStore = defineStore('auth', () => { roles, userId: user.userId, username: user.userName, + roleName:user.roles[0]?.roleName, } userStore.setUserInfo(userInfo) diff --git a/apps/web-antd/src/views/dashboard/analytics/index.vue b/apps/web-antd/src/views/dashboard/analytics/index.vue index 826e7d35..4eb8c766 100644 --- a/apps/web-antd/src/views/dashboard/analytics/index.vue +++ b/apps/web-antd/src/views/dashboard/analytics/index.vue @@ -123,8 +123,7 @@ async function getCarCount() { endDate.setHours(23, 59, 59, 999); // 转换为正确的 ISO 格式,考虑时区偏移 const toLocalISOString = (date: Date) => { - const timezoneOffset = date.getTimezoneOffset() * 60000; // 转换为毫秒 - const localTime = new Date(date.getTime() - timezoneOffset); + const localTime = new Date(date.getTime()); return localTime.toISOString().slice(0, -1) + 'Z'; }; const response = await fetch( diff --git a/apps/web-antd/src/views/sis/video/playback/index.vue b/apps/web-antd/src/views/sis/video/playback/index.vue index 587f013a..d7eb6656 100644 --- a/apps/web-antd/src/views/sis/video/playback/index.vue +++ b/apps/web-antd/src/views/sis/video/playback/index.vue @@ -43,8 +43,8 @@
-
-
+
+
@@ -85,9 +85,8 @@ import ChannelTree from './channel-tree.vue'; import Process from './process.vue'; import mpegts from 'mpegts.js'; import { DatePicker, message } from 'ant-design-vue'; -import { addStreamProxy } from '#/api/sis/stream'; +import { addStreamProxy, playBack } from '#/api/sis/stream'; import { checkHEVCSupport } from '#/utils/video'; -import type { AddStreamProxyResult } from '#/api/sis/stream/model'; import { CaretRightOutlined, PauseCircleOutlined } from '@ant-design/icons-vue'; import type { Dayjs } from 'dayjs'; import dayjs from 'dayjs'; @@ -224,15 +223,6 @@ function onTreeSelect(_key: any, selectNode: any) { if (selected) { doPlayer(data, currentSelectPlayerIndex.value); } - // 取消播放 - else { - for (let i = 0; i < playerNum.value; i++) { - const player = playerList[i]; - if (player && player.data.id === data.id) { - closePlayer(i); - } - } - } } else { message.error('请选择摄像头'); } @@ -379,7 +369,53 @@ function streamProxy(nodeData: any, cb: Function) { function doPlayer(nodeData: any, index: number = 0) { console.log('index=', index); if (mpegts.isSupported()) { - streamProxy(nodeData, (res: AddStreamProxyResult) => { + const params = { + deviceIp: nodeData.nvrIp, + factoryNo: nodeData.nvrFactoryNo, + channelNo: nodeData.nvrChannelNo, + startTime: dayjs('2025-09-07 00:00:00'), + endTime: dayjs('2025-09-07 01:00:00'), + }; + if (!params.deviceIp || !params.channelNo) { + message.error('未配置录像机'); + return; + } + playBack(params).then((res) => { + const url = res.wsUrl; + nodeData.url = url; + closePlayer(index); + const videoConfig = { + type: 'm2ts', + url: url, + isLive: true, + hasAudio: false, + hasVideo: true, + enableWorker: true, // 启用分离的线程进行转码 + enableStashBuffer: false, // 关闭IO隐藏缓冲区 + stashInitialSize: 256, // 减少首帧显示等待时长 + }; + // 开启loading + // loading(index); + const player = mpegts.createPlayer(videoConfig, playerConfig); + addPlayerListener(index, player); + const videoElement = itemRefs[index]; + if (videoElement) { + player.attachMediaElement(videoElement); + player.load(); + player.play(); + playerList[index] = { + player, + key: nodeData.id, + data: nodeData, + }; + // 播放完成后, 需要处理树组件的状态 + treeSelectHandle(); + } else { + console.log('视频播放元素获取异常'); + } + }); + + /*streamProxy(nodeData, (res: AddStreamProxyResult) => { const host = window.location.host; const url = `ws://${host}/${res.app}/${res.streamId}.live.flv`; // const url = `ws://183.230.235.66:11010/${res.app}/${res.streamId}.live.flv`; @@ -415,19 +451,19 @@ function doPlayer(nodeData: any, index: number = 0) { } else { console.log('视频播放元素获取异常'); } - }); + });*/ } else { message.error('浏览器不支持播放'); } } -function closePlayVieo(plInfo: any) { - if (plInfo) { +function closePlayVieo(player: any) { + if (player) { try { - plInfo.pause(); // 暂停 - plInfo.unload(); // 卸载 - plInfo.detachMediaElement(); - plInfo.destroy(); // 销毁 + player.pause(); // 暂停 + player.unload(); // 卸载 + player.detachMediaElement(); + player.destroy(); // 销毁 treeSelectHandle(); } catch (e) { console.log('播放器关闭失败,e=', e); @@ -501,7 +537,5 @@ onUnmounted(() => { .play-option { background-color: #606060; } - - } diff --git a/apps/web-antd/src/views/sis/video/realtime/channel-tree.vue b/apps/web-antd/src/views/sis/video/realtime/channel-tree.vue new file mode 100644 index 00000000..efdf5cad --- /dev/null +++ b/apps/web-antd/src/views/sis/video/realtime/channel-tree.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/apps/web-antd/src/views/sis/video/realtime/data.ts b/apps/web-antd/src/views/sis/video/realtime/data.ts new file mode 100644 index 00000000..15201e48 --- /dev/null +++ b/apps/web-antd/src/views/sis/video/realtime/data.ts @@ -0,0 +1,4 @@ +export interface CacheNode { + player: any; // 播放器控制对象 + data: any; // 播放节点参数 +} diff --git a/apps/web-antd/src/views/sis/video/realtime/index.vue b/apps/web-antd/src/views/sis/video/realtime/index.vue new file mode 100644 index 00000000..82f64f8b --- /dev/null +++ b/apps/web-antd/src/views/sis/video/realtime/index.vue @@ -0,0 +1,495 @@ + + + + + diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/data.ts b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/data.ts index e939bf2b..66e0939f 100644 --- a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/data.ts +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/data.ts @@ -5,14 +5,25 @@ import { getPopupContainer } from '@vben/utils'; import { getDictOptions } from '#/utils/dict'; import { DictEnum } from '@vben/constants'; -export const fallImg = - 'data:image/png;base64,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'; - export const querySchema: FormSchemaGetter = () => [ + { + component: 'Input', + fieldName: 'deviceName', + label: '设备名称', + }, + { + component: 'DatePicker', + fieldName: 'reportTime', + label: '预警时间', + componentProps: { + format: 'YYYY-MM-DD', + valueFormat: 'YYYY-MM-DD HH:mm:ss', + }, + }, { component: 'Input', fieldName: 'alarmType', - label: '视频预警类型', + label: '预警类型', }, { component: 'Select', diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/warning-detail.vue b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/warning-detail.vue index 2e0dd845..444bf001 100644 --- a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/warning-detail.vue +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningHasDone/warning-detail.vue @@ -4,7 +4,7 @@ import { useVbenModal } from '@vben/common-ui'; import { Descriptions, DescriptionsItem, Image, Tag,Divider } from 'ant-design-vue'; import { queryAlarmEventAttachmentsList } from '#/api/sis/alarmEventAttachments'; import type { AlarmEventAttachmentsVO } from '#/api/sis/alarmEventAttachments/model'; -import { fallImg } from './data'; +import { fallImg } from '../../common'; import {alarmEventProcessList, queryResult} from '#/api/sis/alarmEventProcess'; import type { AlarmEventProcessVO } from '#/api/sis/alarmEventProcess/model'; diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/data.ts b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/data.ts index e939bf2b..6299b0b6 100644 --- a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/data.ts +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/data.ts @@ -5,14 +5,25 @@ import { getPopupContainer } from '@vben/utils'; import { getDictOptions } from '#/utils/dict'; import { DictEnum } from '@vben/constants'; -export const fallImg = - 'data:image/png;base64,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'; - export const querySchema: FormSchemaGetter = () => [ + { + component: 'Input', + fieldName: 'deviceName', + label: '设备名称', + }, + { + component: 'DatePicker', + fieldName: 'reportTime', + label: '预警时间', + componentProps: { + format: 'YYYY-MM-DD', + valueFormat: 'YYYY-MM-DD HH:mm:ss', + }, + }, { component: 'Input', fieldName: 'alarmType', - label: '视频预警类型', + label: '预警类型', }, { component: 'Select', @@ -23,15 +34,6 @@ export const querySchema: FormSchemaGetter = () => [ fieldName: 'level', label: '预警级别', }, - /*{ - component: 'Select', - componentProps: { - getPopupContainer, - options: getDictOptions(DictEnum.alarm_state, true), - }, - fieldName: 'state', - label: '处理状态', - },*/ ]; export const columns: VxeGridProps['columns'] = [ diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/warning-detail.vue b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/warning-detail.vue index fea8dd66..543490bb 100644 --- a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/warning-detail.vue +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/warning-detail.vue @@ -4,7 +4,7 @@ import { useVbenModal } from '@vben/common-ui'; import { Descriptions, DescriptionsItem, Image, Tag } from 'ant-design-vue'; import { queryAlarmEventAttachmentsList } from '#/api/sis/alarmEventAttachments'; import type { AlarmEventAttachmentsVO } from '#/api/sis/alarmEventAttachments/model'; -import { fallImg } from './data'; +import { fallImg } from '../../common'; import { alarmEventProcessList } from '#/api/sis/alarmEventProcess'; import type { AlarmEventProcessVO } from '#/api/sis/alarmEventProcess/model'; diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/data.ts b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/data.ts index b6513a58..0e4fa93d 100644 --- a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/data.ts +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/data.ts @@ -6,14 +6,25 @@ import { getDictOptions } from '#/utils/dict'; import { DictEnum } from '@vben/constants'; import { uploadApi } from '#/api'; -export const fallImg = - 'data:image/png;base64,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'; - export const querySchema: FormSchemaGetter = () => [ + { + component: 'Input', + fieldName: 'deviceName', + label: '设备名称', + }, + { + component: 'DatePicker', + fieldName: 'reportTime', + label: '预警时间', + componentProps: { + format: 'YYYY-MM-DD', + valueFormat: 'YYYY-MM-DD HH:mm:ss', + }, + }, { component: 'Input', fieldName: 'alarmType', - label: '视频预警类型', + label: '预警类型', }, { component: 'Select', @@ -24,15 +35,6 @@ export const querySchema: FormSchemaGetter = () => [ fieldName: 'level', label: '预警级别', }, - /*{ - component: 'Select', - componentProps: { - getPopupContainer, - options: getDictOptions(DictEnum.alarm_state, true), - }, - fieldName: 'state', - label: '处理状态', - },*/ ]; export const columns: VxeGridProps['columns'] = [ @@ -196,7 +198,6 @@ export const modalSchema: FormSchemaGetter = () => [ }, }, - // 插入分割线 { component: 'Divider', diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/index.vue b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/index.vue index 68a8a6aa..621acb28 100644 --- a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/index.vue +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/index.vue @@ -12,7 +12,7 @@ import { import { columns, querySchema } from './data'; import warningModal from './warning-modal.vue'; import warningDetail from './warning-detail.vue'; -import {alarmEventsList, alarmEventsListCurr, alarmEventsRemove} from '#/api/sis/alarmEvents'; +import { alarmEventsListCurr, alarmEventsRemove } from '#/api/sis/alarmEvents'; import type { AlarmEventsForm } from '#/api/sis/alarmEvents/model'; /* 搜索栏配置 */ diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/warning-detail.vue b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/warning-detail.vue index 112bd749..97376165 100644 --- a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/warning-detail.vue +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningToDone/warning-detail.vue @@ -1,10 +1,16 @@