|
@@ -1,215 +1,426 @@
|
|
|
<template>
|
|
|
<div class="container">
|
|
|
- <Breadcrumb :items="['menu.previewList.basic']" />
|
|
|
- <a-card class="general-card" :body-style="{ height: '100%' }">
|
|
|
- <a-space direction="vertical" fill>
|
|
|
- <a-row class="grid-demo" :gutter="24">
|
|
|
- <a-col :span="4">
|
|
|
- <a-input-search
|
|
|
- v-model="searchKey"
|
|
|
- style="margin-bottom: 8px; max-width: 100%"
|
|
|
- />
|
|
|
- <a-spin v-if="loading" />
|
|
|
- <a-tree v-else block-node :data="treeData" @select="onSelect">
|
|
|
- <template #icon>
|
|
|
- <icon-camera />
|
|
|
- </template>
|
|
|
- <template #title="nodeData">
|
|
|
- <template
|
|
|
- v-if="((index = getMatchIndex(nodeData?.title)), index < 0)"
|
|
|
- >{{ nodeData?.title }}</template
|
|
|
- >
|
|
|
- <span v-else>
|
|
|
- {{ nodeData?.title?.substr(0, index) }}
|
|
|
- <span style="color: var(--color-primary-light-4)">
|
|
|
- {{
|
|
|
- nodeData?.title?.substr(index, searchKey.length)
|
|
|
- }} </span
|
|
|
- >{{ nodeData?.title?.substr(index + searchKey.length) }}
|
|
|
- </span>
|
|
|
- </template>
|
|
|
- <template #extra="nodeData">
|
|
|
- <a-button type="text" size="mini" @click="() => nodeData">
|
|
|
- <icon-to-left
|
|
|
- style="font-size: 12px; color: #3370ff; cursor: pointer"
|
|
|
- />
|
|
|
- </a-button>
|
|
|
- </template>
|
|
|
- </a-tree>
|
|
|
- </a-col>
|
|
|
- <a-col :span="20" class="right-box">
|
|
|
- <a-divider direction="vertical" :size="2" />
|
|
|
+ <Transition
|
|
|
+ name="custom-classes"
|
|
|
+ enter-active-class="animate__animated animate__faster animate__fadeIn"
|
|
|
+ leave-active-class="animate__animated animate__faster animate__fadeOut"
|
|
|
+ mode="out-in"
|
|
|
+ >
|
|
|
+ <div v-if="comName === 'index'" style="width: 100%; height: 100%">
|
|
|
+ <Breadcrumb :items="['menu.previewList.basic']" />
|
|
|
+ <a-card class="general-card" :body-style="{ height: '100%' }">
|
|
|
+ <a-space direction="vertical" fill>
|
|
|
+ <a-row class="grid-demo" :gutter="24">
|
|
|
+ <a-col :span="4">
|
|
|
+ <a-input-search
|
|
|
+ v-model="searchKey"
|
|
|
+ style="margin-bottom: 8px; max-width: 100%"
|
|
|
+ />
|
|
|
+ <a-spin v-if="loading" />
|
|
|
+ <a-tree v-else block-node :data="treeData" @select="onSelect">
|
|
|
+ <template #icon>
|
|
|
+ <icon-camera />
|
|
|
+ </template>
|
|
|
+ <template #title="nodeData">
|
|
|
+ <template
|
|
|
+ v-if="
|
|
|
+ ((index = getMatchIndex(nodeData?.title)), index < 0)
|
|
|
+ "
|
|
|
+ >{{ nodeData?.title }}</template
|
|
|
+ >
|
|
|
+ <span v-else>
|
|
|
+ {{ nodeData?.title?.substr(0, index) }}
|
|
|
+ <span style="color: var(--color-primary-light-4)">
|
|
|
+ {{
|
|
|
+ nodeData?.title?.substr(index, searchKey.length)
|
|
|
+ }} </span
|
|
|
+ >{{ nodeData?.title?.substr(index + searchKey.length) }}
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
+ <template #extra="nodeData">
|
|
|
+ <a-button
|
|
|
+ type="text"
|
|
|
+ size="mini"
|
|
|
+ @click="toView('PreviewInfo', nodeData)"
|
|
|
+ >
|
|
|
+ <icon-to-left
|
|
|
+ style="font-size: 12px; color: #3370ff; cursor: pointer"
|
|
|
+ />
|
|
|
+ </a-button>
|
|
|
+ </template>
|
|
|
+ </a-tree>
|
|
|
+ </a-col>
|
|
|
+ <a-col :span="20" class="right-box">
|
|
|
+ <a-divider direction="vertical" :size="2" />
|
|
|
|
|
|
- <div class="split-screen-btn">
|
|
|
- <a-dropdown @select="handleTypeChange">
|
|
|
- <a-button type="outline" size="mini">{{
|
|
|
- typeActiveText
|
|
|
- }}</a-button>
|
|
|
- <template #content>
|
|
|
- <a-doption
|
|
|
- v-for="item in typeList"
|
|
|
- :key="item.label"
|
|
|
- :value="item.value"
|
|
|
- >
|
|
|
- <template #default>{{ item.label }}</template>
|
|
|
- </a-doption>
|
|
|
- </template>
|
|
|
- </a-dropdown>
|
|
|
- <a-dropdown @select="handleRadioChange">
|
|
|
- <a-button type="outline" size="mini">{{ activeText }}</a-button>
|
|
|
- <template #content>
|
|
|
- <a-doption
|
|
|
- v-for="item in btnList"
|
|
|
- :key="item.label"
|
|
|
- :value="item.value"
|
|
|
- >
|
|
|
- <template #default>{{ item.label }}</template>
|
|
|
- </a-doption>
|
|
|
- </template>
|
|
|
- </a-dropdown>
|
|
|
- </div>
|
|
|
- <div class="split-screen-main">
|
|
|
- <div v-if="typeActive === 1" class="split-screen-box">
|
|
|
- <a-grid
|
|
|
- class="grid-demo-grid"
|
|
|
- :cols="radioActive"
|
|
|
- :col-gap="2"
|
|
|
- :row-gap="2"
|
|
|
- >
|
|
|
- <a-grid-item
|
|
|
- v-for="(item, i) in radioActive"
|
|
|
- :key="item + '' + i"
|
|
|
- @click="handleScreen(i)"
|
|
|
- >
|
|
|
- <div
|
|
|
- class="video-box"
|
|
|
- :class="[
|
|
|
- 'demo-item',
|
|
|
- screenActive === i ? 'screen-active' : '',
|
|
|
- ]"
|
|
|
- @mouseleave="handleMouseLeave(i)"
|
|
|
- @mouseenter="handleMouseEnter(i)"
|
|
|
- @dblclick="handleDoubleClick(i)"
|
|
|
+ <div class="split-screen-btn">
|
|
|
+ <a-dropdown @select="handleTypeChange">
|
|
|
+ <a-button size="mini">
|
|
|
+ <template #icon>
|
|
|
+ <Icon
|
|
|
+ icon="stash:arrows-switch"
|
|
|
+ width="25"
|
|
|
+ height="25"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </a-button>
|
|
|
+ <template #content>
|
|
|
+ <a-doption
|
|
|
+ v-for="item in typeList"
|
|
|
+ :key="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ >
|
|
|
+ <template #default>{{ item.label }}</template>
|
|
|
+ </a-doption>
|
|
|
+ </template>
|
|
|
+ </a-dropdown>
|
|
|
+ <a-dropdown @select="handleRadioChange">
|
|
|
+ <a-button size="mini">
|
|
|
+ <template #icon>
|
|
|
+ <Icon
|
|
|
+ icon="carbon:split-screen"
|
|
|
+ width="20"
|
|
|
+ height="20"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </a-button>
|
|
|
+ <template #content>
|
|
|
+ <a-doption
|
|
|
+ v-for="item in btnList"
|
|
|
+ :key="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ >
|
|
|
+ <template #default>{{ item.label }}</template>
|
|
|
+ </a-doption>
|
|
|
+ </template>
|
|
|
+ </a-dropdown>
|
|
|
+ </div>
|
|
|
+ <div class="split-screen-main">
|
|
|
+ <div v-if="typeActive === 1" class="split-screen-box">
|
|
|
+ <a-grid
|
|
|
+ class="grid-demo-grid"
|
|
|
+ :cols="radioActive"
|
|
|
+ :col-gap="2"
|
|
|
+ :row-gap="2"
|
|
|
>
|
|
|
- <a-spin v-if="activeObj[i].loading" dot />
|
|
|
- <div v-if="!activeObj[i].isSignal" class="video-box-tip"
|
|
|
- ><span>{{ t('previewList.wxh') }}</span></div
|
|
|
+ <a-grid-item
|
|
|
+ v-for="(item, i) in radioActive"
|
|
|
+ :key="item + '' + i"
|
|
|
+ @click="handleScreen(i)"
|
|
|
>
|
|
|
- <div class="video-tools">
|
|
|
- <a-button
|
|
|
- v-if="activeObj[i].isCloseBtn"
|
|
|
- type="outline"
|
|
|
- size="mini"
|
|
|
- @click="handleClose(i)"
|
|
|
- >{{ $t('previewList.close') }}</a-button
|
|
|
+ <div
|
|
|
+ class="video-box"
|
|
|
+ :class="[
|
|
|
+ 'demo-item',
|
|
|
+ screenActive === i ? 'screen-active' : '',
|
|
|
+ ]"
|
|
|
+ @mouseleave="handleMouseLeave(i)"
|
|
|
+ @mouseenter="handleMouseEnter(i)"
|
|
|
+ @dblclick="handleDoubleClick(i)"
|
|
|
>
|
|
|
- </div>
|
|
|
+ <a-spin v-if="activeObj[i].loading" dot />
|
|
|
+ <div
|
|
|
+ v-if="!activeObj[i].isSignal"
|
|
|
+ class="video-box-tip"
|
|
|
+ ><span>{{ t('previewList.wxh') }}</span></div
|
|
|
+ >
|
|
|
+ <div class="video-tools">
|
|
|
+ <!-- 截图 -->
|
|
|
+ <a-tooltip :content="$t('previewList.jt')">
|
|
|
+ <a-button
|
|
|
+ v-if="activeObj[i].isCloseBtn"
|
|
|
+ type="text"
|
|
|
+ size="mini"
|
|
|
+ >
|
|
|
+ <template #icon>
|
|
|
+ <Icon
|
|
|
+ icon="ri:screenshot-2-line"
|
|
|
+ width="24"
|
|
|
+ height="24"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </a-button>
|
|
|
+ </a-tooltip>
|
|
|
+ <!-- 录像 -->
|
|
|
+ <a-tooltip :content="$t('previewList.lx')">
|
|
|
+ <a-button
|
|
|
+ v-if="activeObj[i].isCloseBtn"
|
|
|
+ type="text"
|
|
|
+ size="mini"
|
|
|
+ >
|
|
|
+ <template #icon>
|
|
|
+ <Icon
|
|
|
+ icon="bx:video-recording"
|
|
|
+ width="24"
|
|
|
+ height="24"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </a-button>
|
|
|
+ </a-tooltip>
|
|
|
+ <!-- 对讲 -->
|
|
|
+ <a-tooltip :content="$t('previewList.dj')">
|
|
|
+ <a-button
|
|
|
+ v-if="activeObj[i].isCloseBtn"
|
|
|
+ type="text"
|
|
|
+ size="mini"
|
|
|
+ >
|
|
|
+ <template #icon>
|
|
|
+ <Icon
|
|
|
+ icon="material-symbols:record-voice-over-outline"
|
|
|
+ width="22"
|
|
|
+ height="22"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </a-button>
|
|
|
+ </a-tooltip>
|
|
|
+ <!-- 关闭 -->
|
|
|
+ <a-tooltip :content="$t('previewList.close')">
|
|
|
+ <a-button
|
|
|
+ v-if="activeObj[i].isCloseBtn"
|
|
|
+ type="text"
|
|
|
+ size="mini"
|
|
|
+ @click="handleClose(i)"
|
|
|
+ >
|
|
|
+ <template #icon>
|
|
|
+ <Icon
|
|
|
+ icon="mdi:shutdown"
|
|
|
+ width="24"
|
|
|
+ height="24"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </a-button>
|
|
|
+ </a-tooltip>
|
|
|
+ </div>
|
|
|
|
|
|
- <canvas
|
|
|
- v-if="activeObj[i].isReset"
|
|
|
- :id="'video-canvas-' + i"
|
|
|
- style="width: 100%"
|
|
|
- ></canvas>
|
|
|
- </div>
|
|
|
- </a-grid-item>
|
|
|
- </a-grid>
|
|
|
- </div>
|
|
|
- <div v-else class="split-screen-box">
|
|
|
- <a-grid
|
|
|
- class="grid-demo-grid"
|
|
|
- :cols="gridCount"
|
|
|
- :col-gap="2"
|
|
|
- :row-gap="2"
|
|
|
- >
|
|
|
- <a-grid-item
|
|
|
- v-for="(item, i) in radioActive"
|
|
|
- :key="item + '' + i"
|
|
|
- @click="handleScreen(i)"
|
|
|
- >
|
|
|
- <div
|
|
|
- class="video-box"
|
|
|
- :class="[
|
|
|
- 'demo-item',
|
|
|
- screenActive === i ? 'screen-active' : '',
|
|
|
- ]"
|
|
|
- @mouseleave="handleMouseLeave(i)"
|
|
|
- @mouseenter="handleMouseEnter(i)"
|
|
|
- @dblclick="handleDoubleClick(i)"
|
|
|
+ <canvas
|
|
|
+ v-if="activeObj[i].isReset"
|
|
|
+ :id="'video-canvas-' + i"
|
|
|
+ style="width: 100%"
|
|
|
+ ></canvas>
|
|
|
+ </div>
|
|
|
+ </a-grid-item>
|
|
|
+ </a-grid>
|
|
|
+ </div>
|
|
|
+ <div v-else class="split-screen-box">
|
|
|
+ <a-grid
|
|
|
+ class="grid-demo-grid"
|
|
|
+ :cols="gridCount"
|
|
|
+ :col-gap="2"
|
|
|
+ :row-gap="2"
|
|
|
>
|
|
|
- <a-spin v-if="activeObj[i].loading" dot />
|
|
|
- <div v-if="!activeObj[i].isSignal" class="video-box-tip"
|
|
|
- ><span>{{ t('previewList.wxh') }}</span></div
|
|
|
+ <a-grid-item
|
|
|
+ v-for="(item, i) in radioActive"
|
|
|
+ :key="item + '' + i"
|
|
|
+ @click="handleScreen(i)"
|
|
|
>
|
|
|
- <div class="video-tools">
|
|
|
- <a-button
|
|
|
- v-if="activeObj[i].isCloseBtn"
|
|
|
- type="outline"
|
|
|
- size="mini"
|
|
|
- @click="handleClose(i)"
|
|
|
- >{{ $t('previewList.close') }}</a-button
|
|
|
+ <div
|
|
|
+ class="video-box"
|
|
|
+ :class="[
|
|
|
+ 'demo-item',
|
|
|
+ screenActive === i ? 'screen-active' : '',
|
|
|
+ ]"
|
|
|
+ @mouseleave="handleMouseLeave(i)"
|
|
|
+ @mouseenter="handleMouseEnter(i)"
|
|
|
+ @dblclick="handleDoubleClick(i)"
|
|
|
>
|
|
|
- </div>
|
|
|
+ <a-spin v-if="activeObj[i].loading" dot />
|
|
|
+ <div
|
|
|
+ v-if="!activeObj[i].isSignal"
|
|
|
+ class="video-box-tip"
|
|
|
+ ><span>{{ t('previewList.wxh') }}</span></div
|
|
|
+ >
|
|
|
+ <div class="video-tools">
|
|
|
+ <!-- 截图 -->
|
|
|
+ <a-tooltip :content="$t('previewList.jt')">
|
|
|
+ <a-button
|
|
|
+ v-if="activeObj[i].isCloseBtn"
|
|
|
+ type="text"
|
|
|
+ size="mini"
|
|
|
+ >
|
|
|
+ <template #icon>
|
|
|
+ <Icon
|
|
|
+ icon="ri:screenshot-2-line"
|
|
|
+ width="24"
|
|
|
+ height="24"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </a-button>
|
|
|
+ </a-tooltip>
|
|
|
+ <!-- 录像 -->
|
|
|
+ <a-tooltip :content="$t('previewList.lx')">
|
|
|
+ <a-button
|
|
|
+ v-if="activeObj[i].isCloseBtn"
|
|
|
+ type="text"
|
|
|
+ size="mini"
|
|
|
+ >
|
|
|
+ <template #icon>
|
|
|
+ <Icon
|
|
|
+ icon="bx:video-recording"
|
|
|
+ width="24"
|
|
|
+ height="24"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </a-button>
|
|
|
+ </a-tooltip>
|
|
|
+ <!-- 对讲 -->
|
|
|
+ <a-tooltip :content="$t('previewList.dj')">
|
|
|
+ <template #icon>
|
|
|
+ <a-button
|
|
|
+ v-if="activeObj[i].isCloseBtn"
|
|
|
+ type="text"
|
|
|
+ size="mini"
|
|
|
+ >
|
|
|
+ <Icon
|
|
|
+ icon="material-symbols:record-voice-over-outline"
|
|
|
+ width="22"
|
|
|
+ height="22"
|
|
|
+ />
|
|
|
+ </a-button>
|
|
|
+ </template>
|
|
|
+ </a-tooltip>
|
|
|
+ <!-- 关闭 -->
|
|
|
+ <a-tooltip :content="$t('previewList.close')">
|
|
|
+ <a-button
|
|
|
+ v-if="activeObj[i].isCloseBtn"
|
|
|
+ type="text"
|
|
|
+ size="mini"
|
|
|
+ @click="handleClose(i)"
|
|
|
+ >
|
|
|
+ <template #icon>
|
|
|
+ <Icon
|
|
|
+ icon="mdi:shutdown"
|
|
|
+ width="24"
|
|
|
+ height="24"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </a-button>
|
|
|
+ </a-tooltip>
|
|
|
+ </div>
|
|
|
|
|
|
- <canvas
|
|
|
- v-if="activeObj[i].isReset"
|
|
|
- :id="'video-canvas-' + i"
|
|
|
- style="width: 100%"
|
|
|
- ></canvas>
|
|
|
- </div>
|
|
|
- </a-grid-item>
|
|
|
- </a-grid>
|
|
|
- </div>
|
|
|
- <div class="alarm-box">
|
|
|
- <a-table
|
|
|
- :columns="alarmColumns"
|
|
|
- :data="alarmData"
|
|
|
- :scroll="{ y: 100 }"
|
|
|
- :pagination="false"
|
|
|
- :bordered="{ cell: true }"
|
|
|
- size="small"
|
|
|
- style="height: 100%"
|
|
|
- >
|
|
|
- <template #columns>
|
|
|
- <a-table-column
|
|
|
- :title="t('previewList.bjlx')"
|
|
|
- data-index="type"
|
|
|
- ></a-table-column>
|
|
|
- <a-table-column
|
|
|
- :title="t('previewList.status')"
|
|
|
- data-index="status"
|
|
|
- :width="150"
|
|
|
+ <canvas
|
|
|
+ v-if="activeObj[i].isReset"
|
|
|
+ :id="'video-canvas-' + i"
|
|
|
+ style="width: 100%"
|
|
|
+ ></canvas>
|
|
|
+ </div>
|
|
|
+ </a-grid-item>
|
|
|
+ </a-grid>
|
|
|
+ </div>
|
|
|
+ <div class="alarm-box">
|
|
|
+ <a-table
|
|
|
+ :columns="alarmColumns"
|
|
|
+ :data="alarmData"
|
|
|
+ :scroll="{ y: 100 }"
|
|
|
+ :pagination="false"
|
|
|
+ :bordered="{ cell: true }"
|
|
|
+ size="small"
|
|
|
+ style="height: 100%"
|
|
|
>
|
|
|
- <template #cell="{ record }">
|
|
|
- <span>{{
|
|
|
- record.status
|
|
|
- ? t('previewList.ycl')
|
|
|
- : t('previewList.wcl')
|
|
|
- }}</span>
|
|
|
- </template>
|
|
|
- </a-table-column>
|
|
|
- <a-table-column :title="t('previewList.cz')" :width="150">
|
|
|
- <template #cell="{ record }">
|
|
|
- <a-button
|
|
|
- type="text"
|
|
|
- size="mini"
|
|
|
- @click="
|
|
|
- $modal.info({ title: 'Name', content: record.type })
|
|
|
+ <template #columns>
|
|
|
+ <a-table-column
|
|
|
+ :title="t('previewList.bjlx')"
|
|
|
+ data-index="type"
|
|
|
+ >
|
|
|
+ </a-table-column>
|
|
|
+ <a-table-column
|
|
|
+ :title="t('previewList.status')"
|
|
|
+ data-index="status"
|
|
|
+ :width="150"
|
|
|
+ :body-cell-style="
|
|
|
+ (record) => ({
|
|
|
+ background: record.status ? '' : '#7e2d2d',
|
|
|
+ })
|
|
|
"
|
|
|
- >{{ t('previewList.ck') }}</a-button
|
|
|
>
|
|
|
+ <template #cell="{ record }">
|
|
|
+ <span>{{
|
|
|
+ record.status
|
|
|
+ ? t('previewList.ycl')
|
|
|
+ : t('previewList.wcl')
|
|
|
+ }}</span>
|
|
|
+ </template>
|
|
|
+ </a-table-column>
|
|
|
+ <a-table-column
|
|
|
+ :title="t('previewList.dqstatus')"
|
|
|
+ data-index="isRead"
|
|
|
+ :width="150"
|
|
|
+ :body-cell-style="
|
|
|
+ (record) => ({
|
|
|
+ background: record.isRead ? '' : '#2d4f7e',
|
|
|
+ })
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <template #cell="{ record }">
|
|
|
+ <span>{{
|
|
|
+ record.isRead
|
|
|
+ ? t('previewList.yd')
|
|
|
+ : t('previewList.wd')
|
|
|
+ }}</span>
|
|
|
+ </template>
|
|
|
+ </a-table-column>
|
|
|
+ <a-table-column
|
|
|
+ :title="t('previewList.cz')"
|
|
|
+ :width="150"
|
|
|
+ >
|
|
|
+ <template #cell="{ record }">
|
|
|
+ <a-button
|
|
|
+ type="text"
|
|
|
+ size="mini"
|
|
|
+ @click="
|
|
|
+ $modal.info({
|
|
|
+ title: '提示',
|
|
|
+ content: record.type,
|
|
|
+ })
|
|
|
+ "
|
|
|
+ >{{ t('previewList.ck') }}</a-button
|
|
|
+ >
|
|
|
+ </template>
|
|
|
+ <template #title>
|
|
|
+ <span>{{ t('previewList.cz') }}</span>
|
|
|
+ <a-tooltip :content="$t('previewList.tip1')">
|
|
|
+ <a-button
|
|
|
+ type="text"
|
|
|
+ size="mini"
|
|
|
+ style="position: absolute; right: 8px"
|
|
|
+ @click="
|
|
|
+ () =>
|
|
|
+ alarmData.forEach(
|
|
|
+ (item) => (item.isRead = true)
|
|
|
+ )
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <template #icon>
|
|
|
+ <a-badge
|
|
|
+ dot
|
|
|
+ color="#FFB400"
|
|
|
+ :count="
|
|
|
+ alarmData.filter((v) => !v.isRead).length
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <Icon
|
|
|
+ icon="ant-design:clear-outlined"
|
|
|
+ width="20"
|
|
|
+ height="20"
|
|
|
+ />
|
|
|
+ </a-badge>
|
|
|
+ </template>
|
|
|
+ </a-button>
|
|
|
+ </a-tooltip>
|
|
|
+ </template>
|
|
|
+ </a-table-column>
|
|
|
</template>
|
|
|
- <template #title>
|
|
|
- <span>{{ t('previewList.cz') }}1</span>
|
|
|
- </template>
|
|
|
- </a-table-column>
|
|
|
- </template>
|
|
|
- </a-table>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </a-col>
|
|
|
- </a-row>
|
|
|
- </a-space>
|
|
|
- </a-card>
|
|
|
+ </a-table>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ </a-space>
|
|
|
+ </a-card>
|
|
|
+ </div>
|
|
|
+ <template v-else-if="comName === 'PreviewInfo'">
|
|
|
+ <PreviewInfo :data="comData" @handle-back="handleBack" />
|
|
|
+ </template>
|
|
|
+ </Transition>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -219,7 +430,15 @@
|
|
|
import { useAppStore } from '@/store';
|
|
|
import useWorker from '@/assets/js/video-lib/omnimatrix-video-player';
|
|
|
import { TreeNodeData } from '@arco-design/web-vue/es/tree/interface';
|
|
|
- import { ref, computed, watch, nextTick, reactive } from 'vue';
|
|
|
+ import { Icon } from '@iconify/vue'; // https://iconify.design/docs/icon-components/vue/#iconify-for-vue
|
|
|
+ import {
|
|
|
+ ref,
|
|
|
+ computed,
|
|
|
+ watch,
|
|
|
+ nextTick,
|
|
|
+ reactive,
|
|
|
+ defineAsyncComponent,
|
|
|
+ } from 'vue';
|
|
|
import { useI18n } from 'vue-i18n';
|
|
|
import { queryPolicyList, PolicyRecord, PolicyParams } from '@/api/list';
|
|
|
import { getPreview } from '@/api/system';
|
|
@@ -227,6 +446,22 @@
|
|
|
|
|
|
const { loading, setLoading } = useLoading(true);
|
|
|
const app = useAppStore();
|
|
|
+ const comName = ref('index');
|
|
|
+ const comNameList = ['index'];
|
|
|
+ const comData: any = ref({});
|
|
|
+
|
|
|
+ const PreviewInfo = defineAsyncComponent(
|
|
|
+ () => import('./children/preview-info.vue')
|
|
|
+ );
|
|
|
+ const toView = (path: string, data: unknown) => {
|
|
|
+ comName.value = path;
|
|
|
+ comNameList.push(path);
|
|
|
+ comData.value = data;
|
|
|
+ };
|
|
|
+ const handleBack = () => {
|
|
|
+ comNameList.pop();
|
|
|
+ comName.value = comNameList[comNameList.length - 1];
|
|
|
+ };
|
|
|
|
|
|
interface IBtn {
|
|
|
label: string;
|
|
@@ -235,10 +470,7 @@
|
|
|
|
|
|
const { t } = useI18n();
|
|
|
const index = ref<number>(0);
|
|
|
-
|
|
|
- const activeText = computed(() => t('previewList.sfp'));
|
|
|
const radioActive = ref<number>(4);
|
|
|
- const typeActiveText = computed(() => t('previewList.sp'));
|
|
|
const typeActive = ref<number>(1);
|
|
|
const screenActive = ref<number>(0);
|
|
|
// const { isFullscreen, enter, exit, toggle } = useFullscreen(
|
|
@@ -325,30 +557,37 @@
|
|
|
{
|
|
|
type: '行人闯入',
|
|
|
status: 0,
|
|
|
+ isRead: false,
|
|
|
},
|
|
|
{
|
|
|
type: '行人闯入',
|
|
|
status: 0,
|
|
|
+ isRead: false,
|
|
|
},
|
|
|
{
|
|
|
type: '行人闯入',
|
|
|
status: 0,
|
|
|
+ isRead: true,
|
|
|
},
|
|
|
{
|
|
|
type: '行人闯入',
|
|
|
status: 0,
|
|
|
+ isRead: false,
|
|
|
},
|
|
|
{
|
|
|
type: '行人闯入',
|
|
|
status: 0,
|
|
|
+ isRead: false,
|
|
|
},
|
|
|
{
|
|
|
type: '行人闯入',
|
|
|
status: 0,
|
|
|
+ isRead: false,
|
|
|
},
|
|
|
{
|
|
|
type: '行人闯入',
|
|
|
status: 1,
|
|
|
+ isRead: true,
|
|
|
},
|
|
|
]);
|
|
|
|
|
@@ -487,9 +726,6 @@
|
|
|
v: string | number | Record<string, any> | undefined
|
|
|
) => {
|
|
|
radioActive.value = typeof v === 'number' ? v : 4;
|
|
|
- activeText.value = btnList.value.filter(
|
|
|
- (item) => item.value === v
|
|
|
- )[0].label;
|
|
|
if (typeof v === 'number') {
|
|
|
screenActive.value = 0;
|
|
|
// eslint-disable-next-line no-plusplus
|
|
@@ -502,9 +738,6 @@
|
|
|
v: string | number | Record<string, any> | undefined
|
|
|
) => {
|
|
|
typeActive.value = typeof v === 'number' ? v : 1;
|
|
|
- typeActiveText.value = typeList.value.filter(
|
|
|
- (item) => item.value === v
|
|
|
- )[0].label;
|
|
|
};
|
|
|
let parent: any = null;
|
|
|
const handleDoubleClick = (i: number) => {
|
|
@@ -643,6 +876,8 @@
|
|
|
right: 10px;
|
|
|
top: 10px;
|
|
|
z-index: 99;
|
|
|
+ display: flex;
|
|
|
+ gap: 8px;
|
|
|
}
|
|
|
}
|
|
|
</style>
|