Selaa lähdekoodia

大屏代码提交

miaofuhao 1 kuukausi sitten
vanhempi
commit
232be76d4b

BIN
bigScreen3/src/assets/base_bj.png


BIN
bigScreen3/src/assets/bj2.png


BIN
bigScreen3/src/assets/daohang_bj.png


BIN
bigScreen3/src/assets/tupian_bj.png


BIN
bigScreen3/src/assets/xiangmu_bj.png


+ 24 - 1
bigScreen3/src/views/dashboard/cpns/CompanyProfile.vue

35
           :interval="3000"
35
           :interval="3000"
36
         > 
36
         > 
37
           <el-carousel-item v-for="(item, index) in companyInfo" :key="index"> 
37
           <el-carousel-item v-for="(item, index) in companyInfo" :key="index"> 
38
-            <div class="carousel-item-content">
38
+            <div class="carousel-item-content" @click="handleClick(item)">
39
               <div class="detail-block">
39
               <div class="detail-block">
40
                 <div class="project-title">{{ item.projectName }}</div>
40
                 <div class="project-title">{{ item.projectName }}</div>
41
                 <div class="info-section">
41
                 <div class="info-section">
63
       </div>
63
       </div>
64
 
64
 
65
     </div>
65
     </div>
66
+    <!-- 对话框显示公园信息 -->
67
+    <el-dialog
68
+      v-model="dialogVisible"
69
+      width="70%"
70
+      height="70%"
71
+      :close-on-click-modal="false"
72
+      :show-close="true"
73
+      :append-to-body="true"
74
+      :modal="false"
75
+      style="background: rgba(0, 20, 40, 0.98);"
76
+    >
77
+      <InfoPopup :data="dialogData"  />
78
+    </el-dialog>
66
   </div>
79
   </div>
67
 </template>
80
 </template>
68
 
81
 
71
 import { ElCarousel, ElCarouselItem } from 'element-plus'
84
 import { ElCarousel, ElCarouselItem } from 'element-plus'
72
 import { getPageListData, createPageData } from '@/api/index'
85
 import { getPageListData, createPageData } from '@/api/index'
73
 import ziyuanVideo from '@/assets/mp4/ziyuan.mp4'
86
 import ziyuanVideo from '@/assets/mp4/ziyuan.mp4'
87
+import InfoPopup from '@/views/dashboard/cpns/InfoPopup.vue'
74
 import icon1_1 from '@/assets/1.1.png'
88
 import icon1_1 from '@/assets/1.1.png'
75
 import icon1_2 from '@/assets/1.2.png'
89
 import icon1_2 from '@/assets/1.2.png'
76
 import icon1_3 from '@/assets/1.3.png'
90
 import icon1_3 from '@/assets/1.3.png'
170
       // 根据实际接口返回结构调整 - 转换为数组格式
184
       // 根据实际接口返回结构调整 - 转换为数组格式
171
       const parkData = response.data.park || []
185
       const parkData = response.data.park || []
172
       companyInfo.value = parkData.map(item => ({
186
       companyInfo.value = parkData.map(item => ({
187
+        ...item,
173
         projectName: item.fParkname || '项目名称',
188
         projectName: item.fParkname || '项目名称',
174
         location: item.fAddress || '暂无地点信息',
189
         location: item.fAddress || '暂无地点信息',
175
         area: item.fArea || '暂无面积信息'
190
         area: item.fArea || '暂无面积信息'
180
     console.error('获取公司信息失败:', error)
195
     console.error('获取公司信息失败:', error)
181
   }
196
   }
182
 }
197
 }
198
+const dialogVisible = ref(false)
199
+const dialogData = ref({})
183
 
200
 
201
+// 显示公园信息对话框
202
+const handleClick = (parkData) => {
203
+  dialogData.value = parkData
204
+  
205
+  dialogVisible.value = true
206
+}
184
 // 组件挂载时获取数据
207
 // 组件挂载时获取数据
185
 onMounted(() => {
208
 onMounted(() => {
186
   fetchCompanyInfo()
209
   fetchCompanyInfo()

+ 6 - 6
bigScreen3/src/views/dashboard/cpns/DataInsightsDetail.vue

108
   position: fixed;
108
   position: fixed;
109
   z-index: 9999;
109
   z-index: 9999;
110
   inset: 0;
110
   inset: 0;
111
-  background: rgba(0, 10, 30, 0.8);
112
   display: flex;
111
   display: flex;
113
   align-items: center;
112
   align-items: center;
114
   justify-content: center;
113
   justify-content: center;
128
   position: relative;
127
   position: relative;
129
   width: min(90vw, 1400px);
128
   width: min(90vw, 1400px);
130
   max-height: 90vh;
129
   max-height: 90vh;
131
-  background: linear-gradient(135deg, #001a33 0%, #003366 100%);
132
-  border: 2px solid #0099ff;
130
+  background-image: url('@/assets/bj2.png');
131
+  background-size: 100% 100%;
132
+  background-position: center;
133
+  background-repeat: no-repeat;
133
   border-radius: 8px;
134
   border-radius: 8px;
134
   overflow: hidden;
135
   overflow: hidden;
135
-  box-shadow: 0 0 30px rgba(0, 153, 255, 0.3);
136
-  backdrop-filter: blur(10px);
137
   animation: slideIn 0.3s ease;
136
   animation: slideIn 0.3s ease;
138
 }
137
 }
139
 
138
 
168
   text-shadow: 0 0 8px rgba(0, 153, 255, 0.6);
167
   text-shadow: 0 0 8px rgba(0, 153, 255, 0.6);
169
   border-radius: 4px;
168
   border-radius: 4px;
170
   display: inline-block;
169
   display: inline-block;
170
+  margin-top: -20px;
171
 }
171
 }
172
 
172
 
173
 .early-warning-close {
173
 .early-warning-close {
195
 }
195
 }
196
 
196
 
197
 .early-warning-body {
197
 .early-warning-body {
198
-  padding: 20px;
198
+  padding: 20px 38px;
199
   overflow-y: auto;
199
   overflow-y: auto;
200
   max-height: calc(90vh - 120px);
200
   max-height: calc(90vh - 120px);
201
 }
201
 }

+ 6 - 5
bigScreen3/src/views/dashboard/cpns/EarlyWarningDetail.vue

121
   position: fixed;
121
   position: fixed;
122
   z-index: 9999;
122
   z-index: 9999;
123
   inset: 0;
123
   inset: 0;
124
-  background: rgba(0, 10, 30, 0.8);
125
   display: flex;
124
   display: flex;
126
   align-items: center;
125
   align-items: center;
127
   justify-content: center;
126
   justify-content: center;
132
   width: min(90vw, 1400px);
131
   width: min(90vw, 1400px);
133
   max-height: 90vh;
132
   max-height: 90vh;
134
   background: linear-gradient(135deg, #001a33 0%, #003366 100%);
133
   background: linear-gradient(135deg, #001a33 0%, #003366 100%);
135
-  border: 2px solid #0099ff;
134
+  background-image: url('@/assets/bj2.png');
135
+  background-size: 100% 100%;
136
+  background-position: center;
137
+  background-repeat: no-repeat;
136
   border-radius: 8px;
138
   border-radius: 8px;
137
   overflow: hidden;
139
   overflow: hidden;
138
-  box-shadow: 0 0 30px rgba(0, 153, 255, 0.3);
139
-  backdrop-filter: blur(10px);
140
 }
140
 }
141
 
141
 
142
 .early-warning-header {
142
 .early-warning-header {
159
   text-shadow: 0 0 8px rgba(0, 153, 255, 0.6);
159
   text-shadow: 0 0 8px rgba(0, 153, 255, 0.6);
160
   border-radius: 4px;
160
   border-radius: 4px;
161
   display: inline-block;
161
   display: inline-block;
162
+  margin-top: -20px;
162
 }
163
 }
163
 
164
 
164
 .early-warning-close {
165
 .early-warning-close {
186
 }
187
 }
187
 
188
 
188
 .early-warning-body {
189
 .early-warning-body {
189
-  padding: 20px;
190
+  padding: 20px 38px;
190
   overflow-y: auto;
191
   overflow-y: auto;
191
   max-height: calc(90vh - 120px);
192
   max-height: calc(90vh - 120px);
192
 }
193
 }

+ 1 - 0
bigScreen3/src/views/dashboard/cpns/EquipmentDetail.vue

212
   text-shadow: 0 0 8px rgba(0, 153, 255, 0.6);
212
   text-shadow: 0 0 8px rgba(0, 153, 255, 0.6);
213
   border-radius: 4px;
213
   border-radius: 4px;
214
   display: inline-block;
214
   display: inline-block;
215
+  margin-top: -20px;
215
 }
216
 }
216
 
217
 
217
 .work-order-detail-close {
218
 .work-order-detail-close {

+ 63 - 12
bigScreen3/src/views/dashboard/cpns/InfoPopup.vue

792
 .info-popup-content {
792
 .info-popup-content {
793
   height: 100%;
793
   height: 100%;
794
   padding: 20px;
794
   padding: 20px;
795
-  background: #031542;
796
   color: #FFFFFF;
795
   color: #FFFFFF;
797
   
796
   
798
   // 顶部基础信息样式
797
   // 顶部基础信息样式
803
     padding-bottom: 20px;
802
     padding-bottom: 20px;
804
     border-bottom: 1px solid #07B9FF;
803
     border-bottom: 1px solid #07B9FF;
805
     margin-bottom: 20px;
804
     margin-bottom: 20px;
805
+    background-image: url('@/assets/xiangmu_bj.png');
806
+    background-size: 100% 100%;
807
+    background-position: center;
808
+    background-repeat: no-repeat;
809
+    border-radius: 8px;
810
+    padding: 20px;
811
+    position: relative;
812
+    
813
+    // 添加半透明遮罩层,确保文字清晰可见
814
+    &::before {
815
+      content: '';
816
+      position: absolute;
817
+      top: 0;
818
+      left: 0;
819
+      right: 0;
820
+      bottom: 0;
821
+      background: rgba(0, 30, 60, 0.3);
822
+      border-radius: 8px;
823
+      z-index: 1;
824
+    }
825
+    
826
+    // 确保内容在遮罩层之上
827
+    > * {
828
+      position: relative;
829
+      z-index: 2;
830
+    }
806
     
831
     
807
     .basic-info {
832
     .basic-info {
808
       flex: 1;
833
       flex: 1;
877
         border: 1px solid #07B9FF;
902
         border: 1px solid #07B9FF;
878
         border-radius: 4px;
903
         border-radius: 4px;
879
         padding: 10px 0;
904
         padding: 10px 0;
905
+        background-image: url('@/assets/daohang_bj.png');
906
+        background-size: 100% 100%;
907
+        background-position: center;
908
+        background-repeat: no-repeat;
909
+        position: relative;
910
+        
911
+        // 添加半透明遮罩层,确保文字清晰可见
912
+        &::before {
913
+          content: '';
914
+          position: absolute;
915
+          top: 0;
916
+          left: 0;
917
+          right: 0;
918
+          bottom: 0;
919
+          background: rgba(3, 21, 66, 0.7);
920
+          border-radius: 4px;
921
+          z-index: 1;
922
+        }
923
+        
924
+        // 确保内容在遮罩层之上
925
+        > * {
926
+          position: relative;
927
+          z-index: 2;
928
+        }
880
         
929
         
881
         .tab-item {
930
         .tab-item {
882
           padding: 0px 5px;
931
           padding: 0px 5px;
929
     // 右侧内容区域样式
978
     // 右侧内容区域样式
930
     .content-section {
979
     .content-section {
931
       flex: 1;
980
       flex: 1;
932
-      background: rgba(0, 30, 60, 0.5);
933
-      border: 1px solid #07B9FF;
981
+      // background: rgba(0, 30, 60, 0.5);
982
+      // border: 1px solid #07B9FF;
934
       border-radius: 4px;
983
       border-radius: 4px;
935
       overflow: hidden;
984
       overflow: hidden;
936
       
985
       
937
       // 基础数据内容样式
986
       // 基础数据内容样式
938
       .basic-data {
987
       .basic-data {
939
         height: 100%;
988
         height: 100%;
940
-        padding: 20px;
989
+        // padding: 20px;
941
         display: flex;
990
         display: flex;
942
         gap: 20px;
991
         gap: 20px;
943
         
992
         
944
         .facility-table {
993
         .facility-table {
994
+          background-image: url('@/assets/base_bj.png');
995
+          background-size: 100% 100%;
996
+          background-position: center;
997
+          background-repeat: no-repeat;
945
           flex: 1;
998
           flex: 1;
946
-          background: #031542;
947
           border: 1px solid #07B9FF;
999
           border: 1px solid #07B9FF;
948
           border-radius: 4px;
1000
           border-radius: 4px;
949
           padding: 15px;
1001
           padding: 15px;
951
           h3 {
1003
           h3 {
952
             font-size: 16px;
1004
             font-size: 16px;
953
             color: #07B9FF;
1005
             color: #07B9FF;
954
-            margin: 0 0 15px 0;
955
             padding-bottom: 10px;
1006
             padding-bottom: 10px;
956
-            border-bottom: 1px solid #07B9FF;
957
           }
1007
           }
958
           
1008
           
959
           .table-container {
1009
           .table-container {
960
-            height: 400px;
1010
+            height: 380px;
961
             overflow-y: auto;
1011
             overflow-y: auto;
962
             /* 自定义滚动条样式 */
1012
             /* 自定义滚动条样式 */
963
             &::-webkit-scrollbar {
1013
             &::-webkit-scrollbar {
1008
         
1058
         
1009
         .park-images {
1059
         .park-images {
1010
           width: 320px;
1060
           width: 320px;
1011
-          background: #031542;
1061
+          background-image: url('@/assets/tupian_bj.png');
1062
+          background-size: 100% 100%;
1063
+          background-position: center;
1064
+          background-repeat: no-repeat;
1012
           border: 1px solid #07B9FF;
1065
           border: 1px solid #07B9FF;
1013
           border-radius: 4px;
1066
           border-radius: 4px;
1014
           padding: 15px;
1067
           padding: 15px;
1016
           h3 {
1069
           h3 {
1017
             font-size: 16px;
1070
             font-size: 16px;
1018
             color: #07B9FF;
1071
             color: #07B9FF;
1019
-            margin: 0 0 15px 0;
1020
             padding-bottom: 10px;
1072
             padding-bottom: 10px;
1021
-            border-bottom: 1px solid #07B9FF;
1022
           }
1073
           }
1023
           
1074
           
1024
           .image-grid {
1075
           .image-grid {
1025
-            height:400px;
1076
+            height:380px;
1026
             overflow-y: auto;
1077
             overflow-y: auto;
1027
             flex-direction: column;
1078
             flex-direction: column;
1028
             gap: 15px;
1079
             gap: 15px;

+ 29 - 2
bigScreen3/src/views/dashboard/cpns/ProjectOverview.vue

9
     <el-dialog
9
     <el-dialog
10
       v-model="dialogVisible"
10
       v-model="dialogVisible"
11
       width="70%"
11
       width="70%"
12
-      height="70%"
12
+      height="60%"
13
       :close-on-click-modal="false"
13
       :close-on-click-modal="false"
14
       :show-close="true"
14
       :show-close="true"
15
       :append-to-body="true"
15
       :append-to-body="true"
16
       :modal="false"
16
       :modal="false"
17
-      style="background: rgba(0, 20, 40, 0.98);"
18
     >
17
     >
19
       <InfoPopup :data="dialogData"  />
18
       <InfoPopup :data="dialogData"  />
20
     </el-dialog>
19
     </el-dialog>
26
 import { loadAMap } from '@/utils/amap.js'
25
 import { loadAMap } from '@/utils/amap.js'
27
 import { getPageListData } from '@/api/index'
26
 import { getPageListData } from '@/api/index'
28
 import markerIcon from '@/assets/icon4.png';
27
 import markerIcon from '@/assets/icon4.png';
28
+import bj2 from '@/assets/bj2.png'
29
 import InfoPopup from './InfoPopup.vue';
29
 import InfoPopup from './InfoPopup.vue';
30
 
30
 
31
 // 响应式数据
31
 // 响应式数据
465
   }
465
   }
466
 }
466
 }
467
 
467
 
468
+/* 组件级别的 el-dialog 样式优化 */
469
+:global(.el-dialog) {
470
+  background-color: transparent !important;
471
+  background-image: url('@/assets/bj2.png') !important;
472
+  background-size: 100% 100% !important;
473
+  background-position: center !important;
474
+  background-repeat: no-repeat !important;
475
+  // border: 2px solid #07B9FF !important;
476
+  // box-shadow: 0 0 20px rgba(7, 185, 255, 0.5) !important;
477
+}
478
+
479
+:global(.el-dialog__title) {
480
+  color: #ffffff !important;
481
+  font-weight: bold !important;
482
+}
483
+
484
+:global(.el-dialog__headerbtn .el-dialog__close) {
485
+  color: #ffffff !important;
486
+  font-size: 20px !important;
487
+}
488
+
489
+:global(.el-dialog__body) {
490
+  background-color: transparent !important;
491
+  padding: 20px !important;
492
+  color: #ffffff !important;
493
+}
494
+
468
 // 悬浮框出现动画
495
 // 悬浮框出现动画
469
 @keyframes popupAppear {
496
 @keyframes popupAppear {
470
   0% {
497
   0% {

+ 3 - 0
bigScreen3/src/views/dashboard/cpns/TypicalCase.vue

87
         fWorkorderid: item.fWorkorderid || ''
87
         fWorkorderid: item.fWorkorderid || ''
88
       }))
88
       }))
89
 
89
 
90
+    } else {
91
+      caseList.value = []
92
+      // useDefaultCaseData()
90
     }
93
     }
91
   } catch (error) {
94
   } catch (error) {
92
     console.error('获取典型案例数据失败:', error)
95
     console.error('获取典型案例数据失败:', error)

+ 12 - 8
bigScreen3/src/views/dashboard/cpns/VideoSurveillance.vue

28
     <div v-if="isModalOpen" class="video-modal" @click.self="closeModal">
28
     <div v-if="isModalOpen" class="video-modal" @click.self="closeModal">
29
       <div class="video-modal-content">
29
       <div class="video-modal-content">
30
         <video v-if="selectedVideo" :src="videoSrc" controls autoplay muted playsinline></video>
30
         <video v-if="selectedVideo" :src="videoSrc" controls autoplay muted playsinline></video>
31
-        <div class="video-modal-title">{{ selectedVideo?.name }}</div>
31
+        <!-- <div class="video-modal-title">{{ selectedVideo?.name }}</div> -->
32
         <button class="video-modal-close" @click="closeModal">×</button>
32
         <button class="video-modal-close" @click="closeModal">×</button>
33
       </div>
33
       </div>
34
     </div>
34
     </div>
289
 
289
 
290
   .video-modal-content {
290
   .video-modal-content {
291
     position: relative;
291
     position: relative;
292
-    width: min(86vw, 1400px);
292
+    width: 70%;
293
     aspect-ratio: 16 / 9;
293
     aspect-ratio: 16 / 9;
294
-    background: #0a1a2a;
295
-    border: 1px solid rgba(7, 185, 255, 0.6);
294
+    background-image: url('@/assets/bj2.png');
295
+    background-size: cover;
296
+    background-position: center;
297
+    background-repeat: no-repeat;
296
     border-radius: 6px;
298
     border-radius: 6px;
297
     overflow: hidden;
299
     overflow: hidden;
298
 
300
 
299
     video {
301
     video {
302
+      padding: 4%;
300
       width: 100%;
303
       width: 100%;
301
       height: 100%;
304
       height: 100%;
302
-      object-fit: contain;
303
-      background: #000;
305
+      // 撑满父容器
306
+      object-fit: fill;
304
     }
307
     }
305
 
308
 
306
     .video-modal-title {
309
     .video-modal-title {
318
       top: 6px;
321
       top: 6px;
319
       width: 32px;
322
       width: 32px;
320
       height: 32px;
323
       height: 32px;
321
-      border: 1px solid rgba(7, 185, 255, 0.6);
322
-      background: rgba(0, 30, 60, 0.6);
324
+      // border: 1px solid rgba(7, 185, 255, 0.3);
325
+      background: rgba(0, 30, 60, 0.2);
323
       color: #e6f0ff;
326
       color: #e6f0ff;
324
       font-size: 20px;
327
       font-size: 20px;
325
       line-height: 28px;
328
       line-height: 28px;
326
       border-radius: 4px;
329
       border-radius: 4px;
327
       cursor: pointer;
330
       cursor: pointer;
331
+      padding: 0;
328
     }
332
     }
329
   }
333
   }
330
 }
334
 }

+ 10 - 12
bigScreen3/src/views/dashboard/cpns/WorkOrderList.vue

335
   position: fixed;
335
   position: fixed;
336
   z-index: 9999;
336
   z-index: 9999;
337
   inset: 0;
337
   inset: 0;
338
-  /* background: rgba(0, 10, 30, 0.8); */
339
   display: flex;
338
   display: flex;
340
   align-items: center;
339
   align-items: center;
341
   justify-content: center;
340
   justify-content: center;
343
 
342
 
344
 .project-info-content {
343
 .project-info-content {
345
   position: relative;
344
   position: relative;
346
-  width: min(90vw, 1200px);
347
-  max-height: 90vh;
348
-  background: linear-gradient(135deg, #001a33 0%, #003366 100%);
349
-  border: 2px solid #0099ff;
345
+  background-image: url('@/assets/bj2.png');
346
+  background-size: 100% 100%;
347
+  background-position: center;
348
+  background-repeat: no-repeat;
349
+  width: 70%;
350
+  height: 72vh;
350
   border-radius: 8px;
351
   border-radius: 8px;
351
   overflow: hidden;
352
   overflow: hidden;
352
-  box-shadow: 0 0 30px rgba(0, 153, 255, 0.3);
353
-  backdrop-filter: blur(10px);
354
 }
353
 }
355
 
354
 
356
 .project-info-header {
355
 .project-info-header {
373
   text-shadow: 0 0 8px rgba(0, 153, 255, 0.6);
372
   text-shadow: 0 0 8px rgba(0, 153, 255, 0.6);
374
   border-radius: 4px;
373
   border-radius: 4px;
375
   display: inline-block;
374
   display: inline-block;
375
+  margin-top: -20px;
376
 }
376
 }
377
 
377
 
378
 .project-info-close {
378
 .project-info-close {
401
 }
401
 }
402
 
402
 
403
 .project-info-body {
403
 .project-info-body {
404
-  padding: 20px;
404
+  padding:0 38px;
405
   overflow-y: auto;
405
   overflow-y: auto;
406
   max-height: calc(90vh - 120px);
406
   max-height: calc(90vh - 120px);
407
 }
407
 }
442
 .table-container {
442
 .table-container {
443
   width: 100%;
443
   width: 100%;
444
   overflow-x: auto;
444
   overflow-x: auto;
445
-  background: rgba(0, 10, 30, 0.5);
446
   border: 1px solid rgba(0, 153, 255, 0.3);
445
   border: 1px solid rgba(0, 153, 255, 0.3);
447
   border-radius: 6px;
446
   border-radius: 6px;
448
-  box-shadow: 0 0 20px rgba(0, 153, 255, 0.1);
447
+  height: 50vh;
449
 }
448
 }
450
 
449
 
451
 /* 数据表格样式 */
450
 /* 数据表格样式 */
559
   justify-content: space-between;
558
   justify-content: space-between;
560
   align-items: center;
559
   align-items: center;
561
   margin-top: 20px;
560
   margin-top: 20px;
562
-  padding: 15px 0;
563
-  border-top: 1px solid rgba(0, 153, 255, 0.3);
561
+  padding: 5px 0;
564
 }
562
 }
565
 
563
 
566
 .pagination-info {
564
 .pagination-info {