h合并
This commit is contained in:
		| @ -13,6 +13,8 @@ VITE_APP_BASE_API_GO = 'http://xny.yj-3d.com:7464' | ||||
|  | ||||
| # ws | ||||
| VITE_APP_BASE_WS_API = 'ws://192.168.110.149:8899/resource/websocket' | ||||
| # EARTH | ||||
| VITE_APP_BASE_EARTH_API="http://192.168.110.2:8895" | ||||
|  | ||||
| # 无人机接口地址 | ||||
| VITE_APP_BASE_DRONE_API = 'http://58.17.134.85:9512' | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 4.2 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 4.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/assets/demo/sunnyBig.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/assets/demo/sunnyBig.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 16 KiB | 
| @ -88,3 +88,12 @@ export const setSelect = (data) => { | ||||
|     data | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| // 获取模型列表 | ||||
| export const getModelList = (params) => { | ||||
|   return request({ | ||||
|     url: '/yjearth4.0/api/v1/source/list', | ||||
|     method: 'get',  | ||||
|     params | ||||
|   }); | ||||
| }; | ||||
| @ -1,40 +1,38 @@ | ||||
| <template> | ||||
|   <div class="cardItem"> | ||||
|     <el-card> | ||||
|             <div class="tianqi" | ||||
|                 style="display: flex;flex-direction: column;align-items: center;background-color: #FAFAFA;border-radius: 10px;padding-bottom: 40px;"> | ||||
|       <div | ||||
|         class="tianqi" | ||||
|         style="display: flex; flex-direction: column; align-items: center; background-color: #fafafa; border-radius: 10px; padding-bottom: 40px" | ||||
|       > | ||||
|         <div> | ||||
|                     <img src="/assets/demo/Sunny.png" style="display: block; width: 100px;height: 100px;" alt=""> | ||||
|                 </div> | ||||
|                 <div style="font-family: 'Alibaba-PuHuiTi-Bold';font-size: 24px;"> | ||||
|                     31℃ | ||||
|           <img src="/assets/demo/sunnyBig.png" style="display: block; width: 100px; height: 100px" alt="" /> | ||||
|         </div> | ||||
|         <div style="font-family: 'Alibaba-PuHuiTi-Bold'; font-size: 24px">31℃</div> | ||||
|         <div>晴朗</div> | ||||
|                 <div style="color: rgba(154, 154, 154, 1);font-size: 14px;"> | ||||
|                     紫外线强度:<span>高</span> | ||||
|                 </div> | ||||
|         <div style="color: rgba(154, 154, 154, 1); font-size: 14px">紫外线强度:<span>高</span></div> | ||||
|         <div class="tianqi2"> | ||||
|           <div class="item"> | ||||
|             <div> | ||||
|                             <img src="/assets/demo/shidu.png" alt=""> | ||||
|               <img src="/assets/demo/shidu.png" alt="" /> | ||||
|             </div> | ||||
|             <div class="text">相对湿度: <span>45%</span></div> | ||||
|           </div> | ||||
|           <div class="item"> | ||||
|             <div> | ||||
|                             <img src="/assets/demo/qiangdu.png" alt=""> | ||||
|               <img src="/assets/demo/qiangdu.png" alt="" /> | ||||
|             </div> | ||||
|             <div class="text">光照强度: <span>45%</span></div> | ||||
|           </div> | ||||
|           <div class="item"> | ||||
|             <div> | ||||
|                             <img src="/assets/demo/fengshu.png" alt=""> | ||||
|               <img src="/assets/demo/fengshu.png" alt="" /> | ||||
|             </div> | ||||
|             <div class="text">风速: <span>2.3m/s</span></div> | ||||
|           </div> | ||||
|           <div class="item"> | ||||
|             <div> | ||||
|                             <img src="/assets/demo/riluo.png" alt=""> | ||||
|               <img src="/assets/demo/riluo.png" alt="" /> | ||||
|             </div> | ||||
|             <div class="text">日落时间: <span>19.45</span></div> | ||||
|           </div> | ||||
| @ -46,14 +44,14 @@ | ||||
|             <div class="time">16:00</div> | ||||
|             <div class="temp">30°C</div> | ||||
|             <div class="img-box"> | ||||
|                             <img src="/assets/demo/sunny_s.png" alt=""> | ||||
|               <img src="/assets/demo/sunny_s.png" alt="" /> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="time-item"> | ||||
|             <div class="time">17:00</div> | ||||
|             <div class="temp">29°C</div> | ||||
|             <div class="img-box"> | ||||
|                             <img src="/assets/demo/sunny_s.png" alt=""> | ||||
|               <img src="/assets/demo/sunny_s.png" alt="" /> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="time-item"> | ||||
| @ -61,7 +59,7 @@ | ||||
|               <div class="time">18:00</div> | ||||
|               <div class="temp">25°C</div> | ||||
|               <div class="img-box"> | ||||
|                                 <img src="/assets/demo/rain.png" alt=""> | ||||
|                 <img src="/assets/demo/rain.png" alt="" /> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
| @ -69,21 +67,21 @@ | ||||
|             <div class="time">现在</div> | ||||
|             <div class="temp">25°C</div> | ||||
|             <div class="img-box"> | ||||
|                             <img src="/assets/demo/rain_show.png" alt=""> | ||||
|               <img src="/assets/demo/rain_show.png" alt="" /> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="time-item"> | ||||
|             <div class="time">20:00</div> | ||||
|             <div class="temp">25°C</div> | ||||
|             <div class="img-box"> | ||||
|                             <img src="/assets/demo/yin.png" alt=""> | ||||
|               <img src="/assets/demo/yin.png" alt="" /> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="time-item"> | ||||
|             <div class="time">21:00</div> | ||||
|             <div class="temp">20°C</div> | ||||
|             <div class="img-box"> | ||||
|                             <img src="/assets/demo/yin.png" alt=""> | ||||
|               <img src="/assets/demo/yin.png" alt="" /> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
| @ -118,7 +116,6 @@ | ||||
|       margin-top: 10px; | ||||
|     } | ||||
|   } | ||||
|  | ||||
| } | ||||
|  | ||||
| .weather-timeline { | ||||
| @ -153,13 +150,12 @@ | ||||
|   //     height: 60px; | ||||
|   // } | ||||
|  | ||||
|  | ||||
|   padding: 15px; | ||||
|     background: linear-gradient(to right, #D6E2FF, #DEEBFF); | ||||
|   background: linear-gradient(to right, #d6e2ff, #deebff); | ||||
|   border-radius: 15px; | ||||
|  | ||||
|   .time-box { | ||||
|         background: linear-gradient(to right, #447BFF, #67A3FD); | ||||
|     background: linear-gradient(to right, #447bff, #67a3fd); | ||||
|     display: flex; | ||||
|     justify-content: space-between; | ||||
|     border-radius: 10px; | ||||
| @ -173,7 +169,6 @@ | ||||
|     // z-index: 888; | ||||
|     background-color: #fff; | ||||
|     padding: 0 5px; | ||||
|  | ||||
|   } | ||||
|  | ||||
|   .show::after { | ||||
| @ -220,5 +215,4 @@ | ||||
|   // } | ||||
| } | ||||
| </style> | ||||
| <script setup> | ||||
| </script> | ||||
| <script setup></script> | ||||
|  | ||||
| @ -118,21 +118,21 @@ const indicators = ref([ | ||||
|     name: '风电项目', | ||||
|     value: '288.88', | ||||
|     unit: '个', | ||||
|     iconPath: '/src/assets/images/contract.png' | ||||
|     iconPath: '/assets/demo/contract.png' | ||||
|   }, | ||||
|   { | ||||
|     id: '3', | ||||
|     name: '光伏系统总容量', | ||||
|     value: '158.88', | ||||
|     unit: 'MW', | ||||
|     iconPath: '/src/assets/images/totalCapacity.png' | ||||
|     iconPath: '/assets/demo/totalCapacity.png' | ||||
|   }, | ||||
|   { | ||||
|     id: '4', | ||||
|     name: '风电项目总容量', | ||||
|     value: '18', | ||||
|     unit: 'MW', | ||||
|     iconPath: '/src/assets/images/todayConstruction.png' | ||||
|     iconPath: '/assets/demo/todayConstruction.png' | ||||
|   } | ||||
| ]); | ||||
|  | ||||
|  | ||||
| @ -1,17 +1,19 @@ | ||||
| <script setup> | ||||
| import { onMounted, ref, onUnmounted,defineProps} from 'vue'; | ||||
| import { onMounted, ref, onUnmounted, defineProps } from 'vue'; | ||||
| import CesiumImageLabelEntity from '../js/CesiumImageLabelEntity.js'; | ||||
| import CesiumFlyToRoamingController from '../js/CesiumFlyToRoamingController.js'; | ||||
| import { setSelect, getSelectList, getGps } from '@/api/projectScreen/index.ts' | ||||
| import { setSelect, getSelectList, getGps, getModelList } from '@/api/projectScreen/index.ts' | ||||
| import videoDialog from "./video.vue" | ||||
| import { getToken } from '@/utils/auth'; | ||||
| import axios from 'axios'; | ||||
| import md5 from 'js-md5'; | ||||
| const defaultExpandedKeys = [1, 2, 3] //默认展开第一级节点 | ||||
| const defaultCheckedKeys = ref([]) //默认选中节点  | ||||
| const data = ref([]); | ||||
| const deviceId = ref(''); | ||||
| const videoDialogRef = ref(null); | ||||
| let token = 'Bearer '+ getToken() | ||||
| let ws = new ReconnectingWebSocket( import.meta.env.VITE_APP_BASE_WS_API + '?Authorization='+token+'&clientid='+import.meta.env.VITE_APP_CLIENT_ID+'&projectId='+'1897160897167638529'); | ||||
| const token = getToken(); | ||||
| let ws = new ReconnectingWebSocket(import.meta.env.VITE_APP_BASE_WS_API + '?Authorization=' + token + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID + '&projectId=' + '1897160897167638529'); | ||||
| // 连接ws | ||||
| const connectWs = () => { | ||||
|     ws.onopen = (e) => { | ||||
| @ -25,9 +27,9 @@ const connectWs = () => { | ||||
|     }; | ||||
| } | ||||
| const props = defineProps({ | ||||
|     isHide:{ | ||||
|         type:Boolean, | ||||
|         default:true, | ||||
|     isHide: { | ||||
|         type: Boolean, | ||||
|         default: true, | ||||
|     } | ||||
| }) | ||||
| console.log('props', props); | ||||
| @ -38,9 +40,37 @@ const defaultProps = { | ||||
| } | ||||
| let entityManager = null; | ||||
| window.deviceMap = new Map(); | ||||
| window.ModelList = new Map(); | ||||
| let list = ref([]); | ||||
| // 模型list | ||||
| let modelList = ref([]); | ||||
| // 漫游实例 | ||||
| let roamingController = null; | ||||
| // 获取模型列表 | ||||
| async function getModelListData() { | ||||
|     let res = await axios.post(import.meta.env.VITE_APP_BASE_EARTH_API + '/yjearth4.0/api/v1/user/sign-in', | ||||
|         { "username": "admin", "password": "3598f66fbc93c0d5abd2dabab9de74cc" } | ||||
|     ) | ||||
|     console.log('res', res.data); | ||||
|     if (res.data.code == 0) { | ||||
|         let toekn = res.data.data.token; | ||||
|         console.log('toekn', toekn); | ||||
|         let res1 = await axios({ | ||||
|             url: import.meta.env.VITE_APP_BASE_EARTH_API + '/yjearth4.0/api/v1/source/list', | ||||
|             method: 'post', | ||||
|             data: { | ||||
|                 data: { "page": 1, "page_size": 10 }, | ||||
|             }, | ||||
|             headers: { | ||||
|                 'token': toekn | ||||
|             } | ||||
|         }) | ||||
|         if (res1.data.code == 0) { | ||||
|             modelList.value = res1.data.data.list; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
| // 获取GPS数据 | ||||
| function getGpsData() { | ||||
|     getGps('1897160897167638529').then(res => { | ||||
| @ -88,15 +118,15 @@ function renderDevice(item) { | ||||
|         imageHeight: 64, | ||||
|         name: item.label || item.id, | ||||
|         imageUrl: `/image/${item.type}.png`, | ||||
|         onClick: (entity)=>{ | ||||
|             entityClickHandler(entity,item); | ||||
|         onClick: (entity) => { | ||||
|             entityClickHandler(entity, item); | ||||
|         } | ||||
|     }); | ||||
|     window.deviceMap.set(item.id, imageEntity); | ||||
| } | ||||
| // 实体的点击事件 | ||||
| function entityClickHandler(entity,item) { | ||||
|     console.log('entity', entity,item); | ||||
| function entityClickHandler(entity, item) { | ||||
|     console.log('entity', entity, item); | ||||
|     if (item.type == 'camera') { | ||||
|         deviceId.value = 'AE9470016'; | ||||
|         videoDialogRef.value.show(); | ||||
| @ -104,13 +134,8 @@ function entityClickHandler(entity,item) { | ||||
|     } | ||||
| } | ||||
| // 初始化地球 | ||||
| function initEarth() { | ||||
|     YJ.on({ | ||||
|         ws: true, | ||||
|         host: '', //资源所在服务器地址 | ||||
|         username: '', //用户名 可以不登录(不填写用户名),不登录时无法加载服务端的数据 | ||||
|         password: '', //密码  生成方式:md5(用户名_密码) | ||||
|     }).then((res) => { | ||||
| async function initEarth() { | ||||
|  | ||||
|     let earth = new YJ.YJEarth("earth"); | ||||
|  | ||||
|     window.Earth1 = earth; | ||||
| @ -119,7 +144,6 @@ function initEarth() { | ||||
|     // Earth1.viewer | ||||
|     addArcgisLayer(Earth1.viewer, 'img_w') | ||||
|     // 添加倾斜数据 | ||||
|         // loadTiltData(Earth1.viewer) | ||||
|     // 获取中心点 | ||||
|     YJ.Global.CesiumContainer(window.Earth1, { | ||||
|         compass: false,//罗盘 | ||||
| @ -137,22 +161,19 @@ function initEarth() { | ||||
|         pitch: -89   // 20度俯角 | ||||
|     }); | ||||
|     window.roamingController = roamingController; | ||||
|     }) | ||||
| } | ||||
| // 加载倾斜数据 | ||||
| function loadTiltData(viewer) { | ||||
|     viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ | ||||
|         // url: 'http://192.168.110.2:8895/yjearth4.0/data/pak/e904acb32aaa8b872c64866ebaaaf5e2', | ||||
|         // url:"http://58.17.134.85:7363/yjearth4.0/data/pak/e904acb32aaa8b872c64866ebaaaf5e2" | ||||
|         url: import.meta.env.VITE_EARTH_URL + "/yjearth4.0/data/pak/4eb21d3fc02873092e75640e261544b3" | ||||
|     }); | ||||
| async function loadTiltData(item) { | ||||
|     let tileset = new YJ.Obj.Tileset(window.Earth1, { id: item.source_id }); | ||||
|     ModelList.set(item.source_id, tileset); | ||||
|     await tileset.on(); | ||||
|     tileset.flyTo(); | ||||
| } | ||||
| // 获取ArcGIS服务的URL | ||||
| function getArcGisUrlByType(type) { | ||||
|     switch (type) { | ||||
|         //影像 | ||||
|         case "img_w": | ||||
|             return "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"; | ||||
|             return "https://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}"; | ||||
|         //电子 | ||||
|         case "vec_w": | ||||
|             return "https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"; | ||||
| @ -170,7 +191,7 @@ function getArcGisUrlByType(type) { | ||||
| // 添加ArcGIS图层 | ||||
| function addArcgisLayer(viewer, type) { | ||||
|     let url = getArcGisUrlByType(type) | ||||
|     const layerProvider = new Cesium.ArcGisMapServerImageryProvider({ | ||||
|     const layerProvider = new Cesium.UrlTemplateImageryProvider({ | ||||
|         url: url | ||||
|     }); | ||||
|     viewer.imageryLayers.addImageryProvider(layerProvider); | ||||
| @ -228,15 +249,26 @@ function stopRoaming() { | ||||
|         console.log('请先初始化地球'); | ||||
|     } | ||||
| } | ||||
| onMounted(() => { | ||||
|  | ||||
| onMounted(async () => { | ||||
|  | ||||
|     // 连接ws | ||||
|     connectWs(); | ||||
|     // 获取选中节点 | ||||
|     getCheckedNode(); | ||||
|     // 获取GPS数据 | ||||
|     getGpsData(); | ||||
|     // 初始化地球 | ||||
|     await getModelListData(); | ||||
|     await YJ.on({ | ||||
|         username: 'admin', | ||||
|         password: md5('admin_admin123'), | ||||
|         host: 'http://192.168.110.2:8895/' | ||||
|     }).then((res) => { | ||||
|         initEarth(); | ||||
|         modelList.value.forEach(item => { | ||||
|             loadTiltData(item) | ||||
|         }) | ||||
|     }); | ||||
| }); | ||||
| onUnmounted(() => { | ||||
|     window.deviceMap.forEach((item) => { | ||||
| @ -250,12 +282,12 @@ onUnmounted(() => { | ||||
| <template> | ||||
|     <div class="earth-container-big"> | ||||
|         <div class="earth" id="earth"></div> | ||||
|         <div v-show="isHide" class="left"> | ||||
|         <!-- <div v-show="isHide" class="left"> | ||||
|             <div style="width: 100%;height: 100%;"> | ||||
|                 <el-button type="primary" @click="startRoaming">开始漫游</el-button> | ||||
|                 <el-button type="primary" @click="stopRoaming">停止漫游</el-button> | ||||
|             </div> | ||||
|         </div> | ||||
|         </div> --> | ||||
|         <div v-show="isHide" class="right"> | ||||
|             <el-tree show-checkbox :data="data" :props="defaultProps" node-key="id" :expand-on-click-node="false" | ||||
|                 :check-on-click-node="false" :check-on-click-leaf="false" :default-expanded-keys="defaultExpandedKeys" | ||||
| @ -300,6 +332,7 @@ onUnmounted(() => { | ||||
|             background-color: transparent; | ||||
|             --el-tree-node-hover-bg-color: transparent; | ||||
|             --el-tree-text-color: #fff; | ||||
|  | ||||
|             .el-text { | ||||
|                 color: azure; | ||||
|             } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user