|
@@ -2,6 +2,9 @@
|
2
|
2
|
<script setup>
|
3
|
3
|
import {getPreview} from "@/api/previewPlayback";
|
4
|
4
|
import { useRoute } from 'vue-router';
|
|
5
|
+import commonSelect from '@/components/CommonSelector/index.vue'
|
|
6
|
+const activeKey = ref('1')
|
|
7
|
+const windowCount = ref('1')
|
5
|
8
|
const route = useRoute();
|
6
|
9
|
const orgId = route.query.orgId
|
7
|
10
|
console.log('orgId', orgId)
|
|
@@ -21,7 +24,7 @@ const createPlayer = () => {
|
21
|
24
|
szId: 'player',
|
22
|
25
|
szBasePath: "./",
|
23
|
26
|
iMaxSplit: 4,
|
24
|
|
- iCurrentSplit: IS_MOVE_DEVICE ? 1 : 2,
|
|
27
|
+ iCurrentSplit: parseInt(windowCount.value),
|
25
|
28
|
openDebug: true,
|
26
|
29
|
oStyle: {
|
27
|
30
|
borderSelect: IS_MOVE_DEVICE ? '#000' : '#FFCC00',
|
|
@@ -78,38 +81,107 @@ onMounted(() => {
|
78
|
81
|
</script>
|
79
|
82
|
|
80
|
83
|
<template>
|
81
|
|
- <div style="margin-top: 10px; ">
|
82
|
|
- <a-row style="min-height: 100%;">
|
83
|
|
- <a-col :span="24" :md="12">
|
84
|
|
- <a-affix :offset-top="8">
|
85
|
|
- <div id="player" style="min-height: 500px;"></div>
|
86
|
|
- </a-affix>
|
87
|
|
- <a-form-item>
|
88
|
|
- 分屏
|
89
|
|
- <a-radio-group v-model:value="splitNum" @change="arrangeWindow">
|
90
|
|
- <a-radio-button :value="1">1x1</a-radio-button>
|
91
|
|
- <a-radio-button :value="2">2x2</a-radio-button>
|
92
|
|
- <a-radio-button :value="3" v-show="!isMoveDevice">3x3</a-radio-button>
|
93
|
|
- <a-radio-button :value="4" v-show="!isMoveDevice">4x4</a-radio-button>
|
94
|
|
- </a-radio-group>
|
95
|
|
- <a-button @click="wholeFullScreen" v-show="!isMoveDevice">整体全屏</a-button>
|
96
|
|
- </a-form-item>
|
97
|
|
- </a-col>
|
98
|
|
- </a-row>
|
|
84
|
+ <div class="flex mt-[5px]">
|
|
85
|
+ <div class="tree w-[20%] mr-4">树</div>
|
|
86
|
+ <div class="player mr-4">
|
|
87
|
+ <div class="w-full h-[25px] bg-black text-white pl-5">
|
|
88
|
+ 播放通道
|
|
89
|
+ </div>
|
|
90
|
+ <div id="player"></div>
|
|
91
|
+ </div>
|
|
92
|
+ <div class="control w-[20%] h-full">
|
|
93
|
+ <a-tabs v-model:activeKey="activeKey">
|
|
94
|
+ <a-tab-pane key="1" tab="摄像头列表"></a-tab-pane>
|
|
95
|
+ <a-tab-pane key="2" tab="操作" force-render>
|
|
96
|
+ <div class="row">
|
|
97
|
+ <span class="w-[30%]">窗口数量:</span> <common-select v-model:value="windowCount" type="windowCount" class="w-[70%]"/>
|
|
98
|
+ </div>
|
|
99
|
+ <div class="row">
|
|
100
|
+ <a-button type="primary" class="mr-5 btn">轮巡</a-button>
|
|
101
|
+ <a-button type="primary" class="btn">中止轮巡</a-button>
|
|
102
|
+ </div>
|
|
103
|
+ <div class="row">
|
|
104
|
+ <a-button type="primary" class="mr-5 btn">窗口抓图</a-button>
|
|
105
|
+ <a-button type="primary" class="btn">窗口关闭</a-button>
|
|
106
|
+ </div>
|
|
107
|
+ <div class="row">
|
|
108
|
+ <a-button type="primary" class="mr-5 btn">全部抓图</a-button>
|
|
109
|
+ <a-button type="primary" class="btn">全部关闭</a-button>
|
|
110
|
+ </div>
|
|
111
|
+ <div v-if="hasPerm(['controlCloud'])" class="flex flex-col">
|
|
112
|
+ <div>云控制台</div>
|
|
113
|
+ <div>
|
|
114
|
+ <template
|
|
115
|
+ v-for="list in [
|
|
116
|
+ [{label: '↖', code: 'LEFT_UP'}, {label: '↑', code: 'UP'}, {label: '↗', code: 'RIGHT_UP'}],
|
|
117
|
+ [{label: '←', code: 'LEFT'}, {label: 'center', code: 'GOTO_PRESET'}, {label: '→', code: 'RIGHT'}],
|
|
118
|
+ [{label: '↙', code: 'LEFT_DOWN'}, {label: '↓', code: 'DOWN'}, {label: '↘', code: 'RIGHT_DOWN'}]]" >
|
|
119
|
+ <div class="control-row">
|
|
120
|
+ <template v-for="item in list">
|
|
121
|
+ <a-button
|
|
122
|
+ v-if="item.code !== 'GOTO_PRESET'"
|
|
123
|
+ :key="item.code"
|
|
124
|
+ class="small-btn"
|
|
125
|
+ >{{ item.label }}</a-button>
|
|
126
|
+ <a-button v-else class="small-btn">
|
|
127
|
+ <template #icon>
|
|
128
|
+ <UndoOutlined />
|
|
129
|
+ </template>
|
|
130
|
+ </a-button>
|
|
131
|
+ </template>
|
|
132
|
+ </div>
|
|
133
|
+ </template>
|
|
134
|
+ </div>
|
|
135
|
+ </div>
|
|
136
|
+ <div class="row">
|
|
137
|
+ <a-button type="primary" class="mr-5 btn">
|
|
138
|
+ + 聚焦
|
|
139
|
+ </a-button>
|
|
140
|
+ <a-button type="primary" class="btn">- 聚焦</a-button>
|
|
141
|
+ </div>
|
|
142
|
+ <div class="row">
|
|
143
|
+ <a-button type="primary" class="mr-5 btn">
|
|
144
|
+ + 调焦
|
|
145
|
+ </a-button>
|
|
146
|
+ <a-button type="primary" class="btn">- 调焦</a-button>
|
|
147
|
+ </div>
|
|
148
|
+ <div class="row">
|
|
149
|
+ <a-button type="primary" class="mr-5 btn">
|
|
150
|
+ 录像开始
|
|
151
|
+ </a-button>
|
|
152
|
+ <a-button type="primary" class="btn">录像结束</a-button>
|
|
153
|
+ </div>
|
|
154
|
+ </a-tab-pane>
|
|
155
|
+ </a-tabs>
|
|
156
|
+ </div>
|
99
|
157
|
</div>
|
100
|
158
|
</template>
|
101
|
159
|
|
102
|
160
|
<style scoped lang="less">
|
103
|
|
-@media screen and (max-width: 991px) {
|
|
161
|
+.player {
|
104
|
162
|
#player {
|
105
|
|
- width: calc(100vw - 16px);
|
106
|
|
- height: calc((100vw - 16px) * 5 / 8);
|
|
163
|
+ width: 55vw;
|
|
164
|
+ height: calc((55vw) * 5 / 8);
|
107
|
165
|
}
|
108
|
166
|
}
|
109
|
|
-@media screen and (min-width: 992px) {
|
110
|
|
- #player {
|
111
|
|
- width: calc(50vw - 8px);
|
112
|
|
- height: calc((50vw - 8px) * 5 / 8);
|
|
167
|
+
|
|
168
|
+.row {
|
|
169
|
+ margin-bottom: 10px;
|
|
170
|
+ display: flex;
|
|
171
|
+ justify-content: center;
|
|
172
|
+ align-items: center;
|
|
173
|
+ .btn {
|
|
174
|
+ width: 120px;
|
|
175
|
+ margin-top: 5px;
|
|
176
|
+ }
|
|
177
|
+}
|
|
178
|
+.control-row {
|
|
179
|
+ display: flex;
|
|
180
|
+ justify-content: center;
|
|
181
|
+ align-items: center;
|
|
182
|
+ .small-btn {
|
|
183
|
+ width: 80px;
|
|
184
|
+ margin-top: 5px;
|
113
|
185
|
}
|
114
|
186
|
}
|
115
|
187
|
</style>
|