Browse Source

bug修改

huliu 1 year ago
parent
commit
1b61fde00c

BIN
dist.zip


BIN
public/img/bg.png


BIN
public/img/head.png


BIN
public/img/head2.png


BIN
public/img/login.png


+ 16 - 4
src/assets/css/home.scss

@@ -2,12 +2,14 @@
2 2
     margin: 0;
3 3
     padding: 0;
4 4
     overflow: hidden;
5
+    width: 100%;
6
+    height: 100%;
5 7
 
6 8
     .header {
7 9
         position: absolute;
8 10
         z-index: 555;
9 11
         margin-bottom: 20px;
10
-
12
+        height: 70px;
11 13
         width: 100%;
12 14
         top: 0;
13 15
 
@@ -27,11 +29,13 @@
27 29
 .modelInfo {
28 30
     position: absolute;
29 31
     padding: 10px;
30
-    border-radius: 5px;
31
-    background-color: #fff;
32
+    padding-left: 20px;
33
+    border-radius: 10px;
34
+    background: rgba(255, 255, 255, 0.80);
32 35
     width: 206px;
33 36
     height: 165px;
34 37
     display: none;
38
+
35 39
     z-index: 999;
36 40
 
37 41
     .model-detail {
@@ -58,9 +62,17 @@
58 62
             font-weight: 400;
59 63
 
60 64
             .title {
61
-                color: #000;
65
+                color: #333;
62 66
                 font-weight: 700;
63 67
             }
68
+
69
+            .green {
70
+                color: #00C767;
71
+            }
72
+
73
+            .red {
74
+                color: #DB4A36;
75
+            }
64 76
         }
65 77
     }
66 78
 }

+ 28 - 4
src/assets/css/left.scss

@@ -149,6 +149,7 @@
149 149
              margin-bottom: 20px;
150 150
          }
151 151
 
152
+
152 153
          .table {
153 154
              width: 100%;
154 155
 
@@ -188,6 +189,8 @@
188 189
                  color: #fff;
189 190
                  border: none;
190 191
              }
192
+
193
+
191 194
          }
192 195
      }
193 196
 
@@ -226,21 +229,42 @@
226 229
      display: flex;
227 230
      justify-content: space-between;
228 231
      flex-wrap: wrap;
229
-     padding: 10px;
232
+     //  padding: 10px;
233
+     //  border: 2px solid firebrick;
234
+     border-radius: 10px;
230 235
 
231 236
      span {
232 237
          font-size: 16px;
233
-
234
-         width: 160px;
238
+         width: 166px;
235 239
          font-family: Microsoft YaHei UI;
236
-
237 240
          // border: 1px solid red;
238 241
          margin: 6px;
239 242
          font-weight: 400;
243
+         //  padding: 0;
240 244
 
241 245
          .title {
242 246
              color: #000;
243 247
              font-weight: 700;
244 248
          }
249
+
250
+         .green {
251
+             color: #00C767;
252
+         }
253
+
254
+         .red {
255
+             color: #DB4A36;
256
+         }
245 257
      }
258
+ }
259
+
260
+ .scroll::-webkit-scrollbar {
261
+     width: 5px;
262
+     height: 5px;
263
+     background-color: transparent;
264
+     border-radius: 3px;
265
+ }
266
+
267
+ .scroll::-webkit-scrollbar-thumb {
268
+     background-color: #999;
269
+     border-radius: 3px;
246 270
  }

+ 1 - 1
src/assets/css/right.scss

@@ -224,7 +224,7 @@
224 224
                     span {
225 225
                         position: absolute;
226 226
                         top: 0;
227
-                        left: 0;
227
+                        left: 10px;
228 228
                     }
229 229
                 }
230 230
             }

+ 1 - 1
src/components/CircleProgress.vue

@@ -1,7 +1,7 @@
1 1
 <template>
2 2
     <div>
3 3
         <div class="number" v-if="textPosition == 'top'">
4
-            {{ showProgress }} <span> ()</span>
4
+            {{ showProgress }} <span> ()</span>
5 5
         </div>
6 6
     </div>
7 7
     <div class="progress" :style="{ width, height }">

+ 108 - 0
src/components/Login.vue

@@ -0,0 +1,108 @@
1
+<template>
2
+    <div class="bg">
3
+        <div class="loginbutton">
4
+            <img :src="loginimg" alt="" style="">
5
+            <span @click="login"> 登录</span>
6
+        </div>
7
+        <div class="slogan">
8
+            <span class="slogan1">
9
+                元宇宙智慧校园
10
+            </span>
11
+            <span class="slogan2">
12
+                校园最好的导游
13
+            </span>
14
+
15
+        </div>
16
+    </div>
17
+</template>
18
+
19
+<script >
20
+import * as echarts from "echarts";
21
+import { ref } from "vue";
22
+// import login from '/''
23
+export default ({
24
+    setup() {
25
+        const loginimg = ref("./img/login.png")
26
+        const login = function () {
27
+            window.open("https://cas.huanghuai.edu.cn/cas/")
28
+        }
29
+        return {
30
+            loginimg,
31
+            login
32
+        }
33
+    }
34
+})
35
+
36
+</script>
37
+
38
+<style scoped lang="scss">
39
+.bg {
40
+    position: absolute;
41
+    box-sizing: border-box;
42
+    // height: 200vw;
43
+    width: 100%;
44
+    height: 100%;
45
+    margin: 0;
46
+    padding: 0;
47
+    // border: 1px solid red;
48
+    z-index: 888;
49
+    // background-color: darkcyan;
50
+    background: url('/public/img/bg.png');
51
+    background-size: cover;
52
+    z-index: 888;
53
+
54
+
55
+}
56
+
57
+.loginbutton {
58
+    display: flex;
59
+
60
+    align-items: center;
61
+    position: absolute;
62
+    right: 0;
63
+
64
+    img {
65
+        width: 24px;
66
+        height: 24px;
67
+    }
68
+
69
+    span {
70
+        cursor: pointer;
71
+        color: #FFF;
72
+        font-family: PingFang SC;
73
+        font-size: 18px;
74
+        font-style: normal;
75
+        font-weight: 700;
76
+        margin-left: 3px;
77
+    }
78
+}
79
+
80
+.slogan {
81
+    width: 635px;
82
+    display: flex;
83
+    flex-direction: column;
84
+    // border: 1px solid aliceblue;
85
+    color: #fff;
86
+    // display: ;
87
+    font-family: MF LangQian (Noncommercial);
88
+
89
+    font-size: 64px;
90
+    font-style: normal;
91
+    font-weight: 400;
92
+    line-height: 126px;
93
+    position: absolute;
94
+    bottom: 246px;
95
+    left: 112px;
96
+
97
+    .slogan1 {
98
+        display: flex;
99
+
100
+    }
101
+
102
+    .slogan2 {
103
+        display: flex;
104
+
105
+        justify-content: flex-end
106
+    }
107
+}
108
+</style>

+ 1 - 1
src/components/UeVideo.vue

@@ -19,7 +19,6 @@ export default {
19 19
     let videoInstance = ref(null);
20 20
 
21 21
     onMounted(() => {
22
-      console.log("video.value", video.value);
23 22
 
24 23
       videoInstance = initLoad({
25 24
         context,
@@ -32,6 +31,7 @@ export default {
32 31
           suppressBrowserKeys: false,
33 32
         },
34 33
       });
34
+      console.log("video.videoInstance", videoInstance);
35 35
 
36 36
     });
37 37
     // function handleResponseFunction(data) {

+ 68 - 21
src/components/home.vue

@@ -1,4 +1,5 @@
1 1
 <template>
2
+    <!-- <Login></Login> -->
2 3
     <div class="container">
3 4
         <div class="header">
4 5
             <img :src="headImg" alt="" />
@@ -6,7 +7,8 @@
6 7
         <el-container>
7 8
             <left></left>
8 9
             <right></right>
9
-            <div ref="linedomRef" style="width:10px;height:1px;position: absolute;z-index: 228;">
10
+            <div ref="linedomRef"
11
+                style="width:1px;height:1px;position: absolute;z-index: 228;border-radius:15px;background:#ccc;border: 1px solid darkcyan;">
10 12
             </div>
11 13
 
12 14
         </el-container>
@@ -15,11 +17,14 @@
15 17
 
16 18
         <div ref="popoverRef" id="popoverRef" class="modelInfo">
17 19
             <div class="model-detail">
20
+
18 21
                 <span v-for="item in classDeviceInfo">
19
-                    <span class="title">{{ item && item.name }}: </span>
20
-                    {{ item && item.value }}
21
-                    {{ classDeviceInfo.value &&
22
-                        classDeviceInfo.value.status }}
22
+                    <!-- {{ item }} -->
23
+                    <!-- {{ item.value === "在线" }} -->
24
+                    <span class="title">{{ item && item.name }}: </span>
25
+                    <span :class="item.online ? 'green' : item.online == 'false' ? 'red' : ''">{{ item && item.value }}
26
+                    </span>
27
+
23 28
                 </span>
24 29
             </div>
25 30
         </div>
@@ -41,11 +46,17 @@ import { videoPlay } from "vue3-video-play";
41 46
 import CircleProgress from './CircleProgress.vue';
42 47
 import Left from './left.vue'
43 48
 import Right from './right.vue'
49
+import Login from './Login.vue'
44 50
 import LeaderLine from "../../public/js/leaderline.js"
45 51
 import { getClassDetail } from '../request/api.js'
52
+import {
53
+    callUIInteraction,
54
+} from "../webrtcVideo";
55
+import axios from 'axios';
56
+
46 57
 export default ({
47 58
     name: 'Histogram',
48
-    components: { Left, Right, ElScrollbar, ElPagination, ElDialog, videoPlay, ElCarousel, ElCarouselItem, CircleProgress },
59
+    components: { Login, Left, Right, ElScrollbar, ElPagination, ElDialog, videoPlay, ElCarousel, ElCarouselItem, CircleProgress },
49 60
     setup() {
50 61
         // 视频数据
51 62
         const videoData = reactive({
@@ -151,22 +162,40 @@ export default ({
151 162
             clickData1.value.y = e.clientY;
152 163
 
153 164
         }
165
+        const clickFun = function (e) {
166
+            console.log("当前鼠标点击的坐标", e, e.clientX, e.clientY);
167
+        }
154 168
         const handleResponseFunction = (data) => {
155 169
             // console.log("从UE返回过来的值", data)
170
+            console.log("重新变了坐标", 2423423423);
156 171
             let json = eval("(" + data + ")");//转对象
157 172
             clickData.value = json;
158 173
             console.log("clickData---点击的数据", json)
159 174
             if (json.deviceCode) {
160 175
                 getClassDetail(json.deviceCode).then(res => {
161 176
                     classDeviceInfo.value = res.data;
177
+                    classDeviceInfo.value.map(i => {
178
+                        // if (i.name === "设备状态") {
179
+                        //     i.online = true
180
+                        // } else {
181
+                        //     i.online = "no"
182
+                        // }
183
+                        if (i.value == "在线") {
184
+                            i.online = true
185
+                        }
186
+                        if (i.value == "离线") {
187
+                            i.online = false
188
+                        }
189
+                        // i.online = i.name === "设备状态" ? true : false
190
+                    })
162 191
                     console.log("json.y ", json,);
163
-                    linedomRef.value.style.top = clickData.value.y + "px";
164
-                    linedomRef.value.style.left = clickData.value.x + "px";
192
+                    linedomRef.value.style.top = (clickData.value.y) + "px";
193
+                    linedomRef.value.style.left = (clickData.value.x) + "px";
165 194
                     console.log("可以开始移动")
166 195
                     console.log("看一下---小圆点的值--top", linedomRef.value.style.top)
167 196
                     console.log("看一下---小圆点的值--left", linedomRef.value.style.left)
168 197
 
169
-                    // // 弹出框位置
198
+                    // 弹出框位置
170 199
                     popoverRef.value.style.display = "block"
171 200
                     switch (json.direction) {
172 201
                         case "Left":
@@ -189,7 +218,6 @@ export default ({
189 218
                         default:
190 219
                             popoverRef.value.style.top = json.y - 60 + 'px'
191 220
                             popoverRef.value.style.left = json.x + 'px'
192
-
193 221
                             break;
194 222
                     }
195 223
 
@@ -199,7 +227,7 @@ export default ({
199 227
 
200 228
                     lineContainer.value = new LeaderLine(linedomRef.value, popoverRef.value, lineStyleOption.value)
201 229
                     lineContainer.value.show('draw', {
202
-                        duration: 1000, //持续时长
230
+                        duration: 100, //持续时长
203 231
                         timing: 'ease-in' // 动画函数
204 232
                     })
205 233
                     lineContainer.value.endPlugOutline = true;
@@ -213,19 +241,38 @@ export default ({
213 241
 
214 242
 
215 243
         }
216
-        const getWindowInfo = function () {
217
-            console.log("监听一下窗口是不是改了", lineContainer);
218
-            setTimeout(() => {
219
-                if (lineContainer) {
220
-                    console.log("怎么没有变黄啊");
221
-                    lineContainer.value.position();
222
-                }
223
-            }, 0);
244
+        const windowSize = function () {
245
+            // console.log("监听一下窗口是不是改了--click", lineContainer);
246
+            callUIInteraction("windowSizeChange")
247
+        }
248
+        const getUserInfo = (url) => {
249
+            let userurl = "   https://weizhi.huanghuai.edu.cn/cmccr-server/center/cas/v1/getUser?casLoginUrl=https://cas.huanghuai.edu.cn/cas/serviceValidate?"
250
+                + url + "&service=https://weizhi.huanghuai.edu.cn/cmips/"
251
+            // axios.get(userurl).then(res => {
252
+
253
+            // })
254
+
255
+
224 256
 
225 257
         }
226 258
         onMounted(() => {
227
-            addResponseEventListener("End", handleResponseFunction);
228
-            window.addEventListener('resize', getWindowInfo);
259
+            addResponseEventListener("444", handleResponseFunction);
260
+            window.addEventListener('resize', windowSize);
261
+            // window.addEventListener('click', windowSize);
262
+            // addResponseEventListener("widowSizeChange", windoChangeFunction);
263
+
264
+            let search = window.location.hash.split("?")[1];
265
+            getUserInfo(search)
266
+            // console.log(search, "编码")
267
+            // let code = result.split("?")[0]; //去掉&之后的冗余部分
268
+
269
+            // console.log(result);
270
+            // // window.addEventListener('hashchange', pathChange);
271
+            // const searchParams = currentUrl.searchParams;
272
+            // let ticket = searchParams.get("ticket"); // 'devpoint'
273
+            // console.log("ticket", ticket);
274
+            // searchParams.get("page"); // '1'
275
+
229 276
 
230 277
         })
231 278
         const headImg = ref('./img/head.png')

+ 25 - 71
src/components/left.vue

@@ -49,7 +49,7 @@
49 49
                         <li>到课率</li>
50 50
                         <li>操作</li>
51 51
                     </ul>
52
-                    <div ref="testMain" style="height: 310px;overflow: hidden;">
52
+                    <div ref="testMain" style="height: 310px;overflow: scroll;" class="scroll">
53 53
                         <ul v-for="item in classRoom" @mouseenter="testMove" @mouseleave="testMend">
54 54
                             <li> {{ item.class }} </li>
55 55
                             <li>{{ item.status }}</li>
@@ -69,7 +69,13 @@
69 69
         <el-popover ref="popoverRef" v-model:visible="popoverVisible" placement="bottom" :width="400"
70 70
             :virtual-ref="triggerRef" trigger="click" virtual-triggering popper-class="classpopover">
71 71
             <div class="model-detail">
72
-                <span><span class="title">教室状态: </span>{{ classInfo && classInfo.status }} </span>
72
+                <span><span class="title">教室状态: </span>
73
+                    <span :class="classInfo.online ? 'green' : 'red'">{{ classInfo &&
74
+                        classInfo.status }}</span>
75
+                </span>
76
+
77
+
78
+
73 79
                 <span><span class="title">班级: </span>{{ classInfo && classInfo.className }}</span>
74 80
                 <span><span class="title">课程名称: </span>{{ classInfo && classInfo.courseName }}</span>
75 81
                 <span><span class="title">应到人数: </span>{{ classInfo && classInfo.expected }}</span>
@@ -87,10 +93,8 @@ import { reactive, onMounted, ref, onBeforeUnmount, onUnmounted, nextTick, getCu
87 93
 import { ElScrollbar, ElPagination, ElDialog, ElCarousel, ElCarouselItem } from "element-plus";
88 94
 import { getClass } from '../request/api'
89 95
 import CircleProgress from './CircleProgress.vue';
90
-// import {
91
-//     callUIInteraction,
92
-//     addResponseEventListener
93
-// } from "../webRtcPlayer";
96
+import { callUIInteraction }
97
+    from "../webrtcVideo";
94 98
 
95 99
 export default ({
96 100
 
@@ -164,44 +168,7 @@ export default ({
164 168
 
165 169
 
166 170
         // 物联设备类型统计
167
-        const interDevice = ref([
168
-            // {
169
-            //     number: 98,
170
-            //     color: "#63ABFF",
171
-            //     icon: 'r1',
172
-            //     text: "显示系统"
173
-            // },
174
-            // {
175
-            //     number: 185,
176
-            //     color: "#63FFC7",
177
-            //     icon: 'r2',
178
-            //     text: "控制设备"
179
-            // },
180
-            // {
181
-            //     number: 58,
182
-            //     color: "#918EFF",
183
-            //     icon: 'r3',
184
-            //     text: "音频设备"
185
-            // },
186
-            // {
187
-            //     number: 68,
188
-            //     color: "#00C8E3",
189
-            //     icon: 'r4',
190
-            //     text: "录播设备"
191
-            // },
192
-            // {
193
-            //     number: 189,
194
-            //     color: "#FFBB54",
195
-            //     icon: 'r5',
196
-            //     text: "环境设备"
197
-            // },
198
-            // {
199
-            //     number: 98,
200
-            //     color: "#00CF78",
201
-            //     icon: 'r6',
202
-            //     text: "安全管理"
203
-            // },   
204
-        ])
171
+        const interDevice = ref([])
205 172
 
206 173
         const popoverVisible = ref(false)
207 174
         const popoverRef = ref(null)
@@ -231,36 +198,18 @@ export default ({
231 198
 
232 199
             popoverVisible.value = true;
233 200
             classInfo.value = item;
201
+            console.log(classInfo.value);
202
+            classInfo.value.online = classInfo.value.status == "在用" ? true : false
203
+
234 204
             mousemoveHandler(1000, 60)
205
+            callUIInteraction("initRoom")
235 206
             console.log("item", item, item.lat);
236
-
237
-            // callUIInteraction({
238
-            //     "x": item.lat,
239
-            //     "y": item.lot,
240
-            //     "level": item.leaf
241
-            // });
242 207
         }
243 208
 
244 209
 
245 210
 
246 211
         // 教室分类统计
247
-        const classRoomCount = ref([
248
-            {
249
-                name: "基础性",
250
-                color: '#4ED2E4',
251
-                number: '40%'
252
-            },
253
-            {
254
-                name: "扩展型",
255
-                color: '#5E91F6',
256
-                number: '25%'
257
-            },
258
-            {
259
-                name: "其他",
260
-                color: '#67F0A8',
261
-                number: '45%'
262
-            }
263
-        ])
212
+        const classRoomCount = ref([])
264 213
         // 本周课程统计数据
265 214
         const classCount = ref([])
266 215
         // 智慧教室使用数据
@@ -271,8 +220,11 @@ export default ({
271 220
             let res = await getClass()
272 221
             console.log("res----教室分类统计", res)
273 222
             let { course, classroomDetail, category } = res.data;
274
-            classRoomCount.value = category
275
-            classCount.value = course
223
+            classRoomCount.value = category;
224
+
225
+
226
+            classCount.value = course;
227
+            console.log("看一下颜色", classCount.value)
276 228
             classRoom.value = classroomDetail
277 229
 
278 230
         }
@@ -363,7 +315,7 @@ export default ({
363 315
 <style>
364 316
 .classpopover {
365 317
     .el-popper__arrow {
366
-        top: 216px !important;
318
+        top: 196px !important;
367 319
     }
368 320
 
369 321
     .el-popper[data-popper-placement^=bottom],
@@ -373,5 +325,7 @@ export default ({
373 325
     }
374 326
 }
375 327
 
376
-/* el-popper__arrow {} */
328
+.el-popper.is-light {
329
+    border-radius: 10px;
330
+}
377 331
 </style>

+ 3 - 1
src/components/right.vue

@@ -53,7 +53,9 @@
53 53
             <div class="monitorContent">
54 54
                 <el-carousel class="monitor">
55 55
                     <el-carousel-item v-for="(item, index) in carouselData" :key="index">
56
+                        <p>{{ item.activeMonitor.title }}</p>
56 57
                         <div class="interactclass">
58
+
57 59
                             <div class="room" v-for="(item, index) in item.activeMonitor.array" :key="index">
58 60
                                 <span>{{ item.title }}</span>
59 61
                                 <img :src="deviceImg + 'rb2.png'" alt="" @click="lookVideo(item.src)">
@@ -61,7 +63,7 @@
61 63
                             </div>
62 64
                         </div>
63 65
 
64
-                        <p>{{ item.activeMonitor.title }}</p>
66
+                        <p style="margin-top: 5px;">{{ item.activeMonitor.title }}</p>
65 67
                         <div class="interactclass">
66 68
                             <div class="room" v-for="(item, index) in item.activeMonitor.array" :key="index">
67 69
                                 <span>{{ item.title }}</span>

+ 9 - 6
src/webrtcVideo.js

@@ -424,6 +424,7 @@ function setOverlay(htmlClass, htmlElement, onClickFunction) {
424 424
 
425 425
     if (onClickFunction) {
426 426
         videoPlayOverlay.addEventListener('click', function onOverlayClick(event) {
427
+            console.log("32342342", "嘻嘻嘻嘻");
427 428
             onClickFunction(event);
428 429
             videoPlayOverlay.removeEventListener('click', onOverlayClick);
429 430
         });
@@ -1302,9 +1303,9 @@ function setupMouseAndFreezeFrame(playerElement) {
1302 1303
 
1303 1304
 function updateVideoStreamSize() {
1304 1305
     // console.log(matchViewportResolution, !matchViewportResolution);
1305
-    if (!matchViewportResolution) {
1306
-        return;
1307
-    }
1306
+    // if (!matchViewportResolution) {
1307
+    //     return;
1308
+    // }
1308 1309
     // console.log("看一下走到这里美哟u");
1309 1310
 
1310 1311
     let now = new Date().getTime();
@@ -1321,7 +1322,7 @@ function updateVideoStreamSize() {
1321 1322
             "Resolution.Width": playerElement.clientWidth,
1322 1323
             "Resolution.Height": playerElement.clientHeight
1323 1324
         };
1324
-        console.log(" playerElement.clientWidth ", playerElement.clientWidth, "playerElement.clientHeight", playerElement.clientHeight)
1325
+        // console.log(" playerElement.clientWidth ", playerElement.clientWidth, "playerElement.clientHeight", playerElement.clientHeight)
1325 1326
         emitCommand(descriptor);
1326 1327
         console.log(descriptor);
1327 1328
         lastTimeResized = new Date().getTime();
@@ -1420,6 +1421,7 @@ function emitDescriptor(messageType, descriptor) {
1420 1421
 // JavaScript as opposed to pressing a button which is part of the pixel
1421 1422
 // streamed UI from the UE4 client.
1422 1423
 function emitUIInteraction(descriptor) {
1424
+    console.log("看一下进入这里没有", descriptor)
1423 1425
     emitDescriptor(MessageType.UIInteraction, descriptor);
1424 1426
 }
1425 1427
 
@@ -2064,11 +2066,10 @@ function onExpandOverlay_Click( /* e */) {
2064 2066
 
2065 2067
 function showConnectOverlay() {
2066 2068
 
2067
-
2068 2069
     const startText = document.createElement('div');
2069 2070
     startText.id = 'playButton';
2070 2071
     startText.innerHTML = '点击连接';
2071
-    startText.style.zIndex = "999"
2072
+    startText.style.zIndex = "777"
2072 2073
     startText.style.position = "absolute"
2073 2074
     startText.style.top = "50%"
2074 2075
     startText.style.left = "50%"
@@ -2253,3 +2254,5 @@ export const callCommand = emitCommand;
2253 2254
 
2254 2255
 //给UE5发消息,json
2255 2256
 export const callUIInteraction = emitUIInteraction;
2257
+
2258
+// export default emitUIInteraction