打卡范围、项目级页面修改
This commit is contained in:
		| @ -10,7 +10,7 @@ VITE_APP_ENV = 'development' | |||||||
| # 李陈杰 209 | # 李陈杰 209 | ||||||
| # VITE_APP_BASE_API = 'http://192.168.110.209:8899' | # VITE_APP_BASE_API = 'http://192.168.110.209:8899' | ||||||
| # 曾涛 | # 曾涛 | ||||||
| VITE_APP_BASE_API = 'http://192.168.110.209:8899' | VITE_APP_BASE_API = 'http://192.168.110.180:8899' | ||||||
| # 罗成 | # 罗成 | ||||||
| # VITE_APP_BASE_API = 'http://192.168.110.188:8899' | # VITE_APP_BASE_API = 'http://192.168.110.188:8899' | ||||||
| # 朱银 | # 朱银 | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| <template> | <template> | ||||||
|   <div class="ol-map" id="olMap"></div> |   <div class="ol-map" id="olMap"></div> | ||||||
|   <div class="left_title_button"> |   <div class="left_title_button"> | ||||||
|     <div class="title">{{ projectName }}</div> |     <div class="title">{{ currentProject.name }}</div> | ||||||
|     <div class="btn" @click="updateZhiJiaZhuanDian('zhuangdian')"> |     <div class="btn" @click="updateZhiJiaZhuanDian('zhuangdian')"> | ||||||
|       <SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> |       <SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|       <span>桩点-更新高程</span> |       <span>桩点-更新高程</span> | ||||||
| @ -29,6 +29,11 @@ | |||||||
| import { workScheduleDel } from '@/api/progress/plan'; | import { workScheduleDel } from '@/api/progress/plan'; | ||||||
| import { renderFacilitiesToCesium } from '@/views/gisHome/js/renderFacilities'; | import { renderFacilitiesToCesium } from '@/views/gisHome/js/renderFacilities'; | ||||||
| import { CenterHeight } from '@/views/gis2D/js/center'; | import { CenterHeight } from '@/views/gis2D/js/center'; | ||||||
|  | import { useUserStoreHook } from '@/store/modules/user'; | ||||||
|  | const userStore = useUserStoreHook(); | ||||||
|  | const currentProject = computed(() => userStore.selectedProject); | ||||||
|  | console.log('projectName', currentProject); | ||||||
|  |  | ||||||
| import md5 from 'js-md5'; | import md5 from 'js-md5'; | ||||||
| const arr = ref(); | const arr = ref(); | ||||||
| const initFacilities = async () => { | const initFacilities = async () => { | ||||||
| @ -129,8 +134,10 @@ onMounted(async () => { | |||||||
|     username: 'admin', |     username: 'admin', | ||||||
|     password: md5('admin_admin123'), |     password: md5('admin_admin123'), | ||||||
|     host: 'http://192.168.110.2:8895/' |     host: 'http://192.168.110.2:8895/' | ||||||
|  |   }).then((res) => { | ||||||
|  |     createEarth(); | ||||||
|  |     console.log(res); | ||||||
|   }); |   }); | ||||||
|   createEarth(); |  | ||||||
|   await handletilList(); |   await handletilList(); | ||||||
|   await initFacilities(); |   await initFacilities(); | ||||||
|   console.log(YJ); |   console.log(YJ); | ||||||
|  | |||||||
							
								
								
									
										628
									
								
								src/views/gis2D/index2.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										628
									
								
								src/views/gis2D/index2.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,628 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="earth gis2D" id="earth"> | ||||||
|  | 		<header-top :isShowTab="false" :isShowLog="false"></header-top> | ||||||
|  | 		<!-- <el-button class="btn" type="primary" @click="gengxin">更新</el-button> --> | ||||||
|  | 		<div class="left_title_button"> | ||||||
|  | 			<div class="title">{{ projectName }}</div> | ||||||
|  | 			<div class="btn" @click="updateZhiJiaZhuanDian('zhuangdian')"> | ||||||
|  | 				<SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|  | 				<span>桩点-更新高程</span> | ||||||
|  | 			</div> | ||||||
|  | 			<div class="btn" @click="updateHighLevel('nibianqi')"> | ||||||
|  | 				<SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|  | 				<span>逆变器-更新高程</span> | ||||||
|  | 			</div> | ||||||
|  | 			<div class="btn" @click="updateHighLevel('xiangbian')"> | ||||||
|  | 				<SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|  | 				<span>箱变-更新高程</span> | ||||||
|  | 			</div> | ||||||
|  | 			<div class="btn" @click="updateZhiJiaZhuanDian('zhijia')"> | ||||||
|  | 				<SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|  | 				<span>支架-更新高程</span> | ||||||
|  | 			</div> | ||||||
|  | 			<div class="btn" @click="centerHeight()"> | ||||||
|  | 				<SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|  | 				<span>光伏板-更新高程</span> | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  | 		<progressLoading :progress="progress" :tips="progressTips"></progressLoading> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script lang="ts"> | ||||||
|  | // import { toRefs, reactive, defineComponent, onMounted, getCurrentInstance, ref, nextTick } from 'vue'; | ||||||
|  | // import { ElLoading, ElMessage } from 'element-plus'; | ||||||
|  | // import headerTop from '../components/header/index.vue'; | ||||||
|  | // import { NextLoading } from '/@/utils/loading'; | ||||||
|  | // import { updateProjectId } from '/@/utils/tools'; | ||||||
|  | // import { useUserInfo } from '/@/stores/userInfo'; | ||||||
|  | // import progressLoading from '/@/components/progressLoading/index.vue'; | ||||||
|  | // // 资源接口 | ||||||
|  | // import { listQianqiMoxing } from '/@/api/system/qianqiManage/qianqiMoxing'; | ||||||
|  | // import { manageAll, updateAll, gisList, gisListZhijia, ZhuangdianEdit_detail, ZhijiaEdit_detail } from '/@/api/gis2D/all'; | ||||||
|  | // import { getSysProject } from '/@/api/system/sysProject'; | ||||||
|  | // import bottomSvg from '/@/assets/svg/bottom.svg'; | ||||||
|  | // // json字符判断 | ||||||
|  | // import { typeJSON } from '/@/utils/toolsValidate'; | ||||||
|  | // import { renderGuangfubanGlb } from '../utils/treeRender.js'; | ||||||
|  | // import zjImage from '/@/assets/images/tree_icon/zhijia.png'; | ||||||
|  | // import { Session } from '/@/utils/storage'; | ||||||
|  | // import axios from 'axios'; | ||||||
|  | // // import sign from '/@/utils/sign.js'; | ||||||
|  | import zdImage from '/@/assets/images/tree_icon/zhuangdian.png'; | ||||||
|  | let nibianqi = []; | ||||||
|  | let xiangbian = []; | ||||||
|  | let guanfuban = []; | ||||||
|  | let YJ = window.YJ; | ||||||
|  | // eslint-disable-next-line no-undef | ||||||
|  | export default defineComponent({ | ||||||
|  | 	name: 'index', | ||||||
|  | 	components: { | ||||||
|  | 		headerTop, | ||||||
|  | 		progressLoading, | ||||||
|  | 	}, | ||||||
|  | 	setup() { | ||||||
|  | 		const stores = useUserInfo(); | ||||||
|  | 		const state = reactive({ | ||||||
|  | 			projectId: stores.$state.userInfos.uprojectId, | ||||||
|  | 			queryParam: { | ||||||
|  | 				pageNum: 1, | ||||||
|  | 				pageSize: 10000000000, | ||||||
|  | 				projectId: stores.$state.userInfos.uprojectId, | ||||||
|  | 			}, | ||||||
|  | 			projectName: '', | ||||||
|  | 			bottomSvg, | ||||||
|  | 			tools: null, | ||||||
|  | 			zhuangdian: { | ||||||
|  | 				// 桩点更新高层 | ||||||
|  | 				originArr: [] as any[], //源数据数组 | ||||||
|  | 				poiArr: [] as any[], //位置数据数组 | ||||||
|  | 			}, | ||||||
|  | 			zhijia: { | ||||||
|  | 				// 支架更新高层 | ||||||
|  | 				originArr: [] as any[], //源数据数组 | ||||||
|  | 				poiArr: [] as any[], //位置数据数组 | ||||||
|  | 			}, | ||||||
|  | 			gfbArr: [] as any[], | ||||||
|  | 			bbtArr: [] as any[], | ||||||
|  | 			progress: -1, //加载进度 | ||||||
|  | 			progressTips: '数据更新中,请稍后……', | ||||||
|  | 			loading: null, | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		onMounted(() => { | ||||||
|  | 			// 关闭Loading效果 | ||||||
|  | 			NextLoading.done(); | ||||||
|  | 			createEarth(); | ||||||
|  | 			// 切换项目 项目ID数据同步 | ||||||
|  | 			let channel = new BroadcastChannel('BC-switchProject'); | ||||||
|  | 			channel.addEventListener('message', function (e) { | ||||||
|  | 				if (e.data !== state.projectId) { | ||||||
|  | 					//保存更新项目id | ||||||
|  | 					updateProjectId(e.data); | ||||||
|  | 					location.reload(); //刷新页面 | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}); | ||||||
|  | 		const initData = () => { | ||||||
|  | 			getRresource(); | ||||||
|  | 			// 获取所有数据 | ||||||
|  | 			getSourceAll(); | ||||||
|  | 			// 项目名称 | ||||||
|  | 			getProList(state.projectId); | ||||||
|  | 			// 获取桩点 | ||||||
|  | 			getZhiJiaList(); | ||||||
|  | 			getXZhuangDianList(); | ||||||
|  | 		}; | ||||||
|  | 		const commonJson = (item) => { | ||||||
|  | 			if (!item.detail) { | ||||||
|  | 				//是否存在 | ||||||
|  | 				return false; | ||||||
|  | 			} | ||||||
|  | 			if (!typeJSON(item.detail)) { | ||||||
|  | 				//是否是JSON字符 | ||||||
|  | 				return false; | ||||||
|  | 			} | ||||||
|  | 			return true; | ||||||
|  | 		}; | ||||||
|  | 		// 渲染倾斜模型 | ||||||
|  | 		const renderModel = (item) => { | ||||||
|  | 			let Nposition = { | ||||||
|  | 				lng: 0, | ||||||
|  | 				lat: 0, | ||||||
|  | 				alt: 0, | ||||||
|  | 			}; | ||||||
|  | 			let position = null; | ||||||
|  | 			if (commonJson(item)) { | ||||||
|  | 				position = JSON.parse(item.detail).position || Nposition; | ||||||
|  | 			} else { | ||||||
|  | 				position = Nposition; | ||||||
|  | 			} | ||||||
|  | 			let options = { | ||||||
|  | 				id: item.sourceId, | ||||||
|  | 				host: '', | ||||||
|  | 				position, | ||||||
|  | 				show: true, | ||||||
|  | 			}; | ||||||
|  | 			// eslint-disable-next-line no-undef | ||||||
|  | 			let model = new YJ.Zmkg.Source(options); | ||||||
|  | 			model.on().then((res) => { | ||||||
|  | 				if (model.source.tileset) { | ||||||
|  | 					let bim = model.source.tileset.czmObject; | ||||||
|  | 				} | ||||||
|  | 				setTimeout(() => { | ||||||
|  | 					if (model.id != 'dixing') { | ||||||
|  | 						model.flyTo(); | ||||||
|  | 					} | ||||||
|  | 				}, 1000); | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		const getRresource = () => { | ||||||
|  | 			getQxModelList(); | ||||||
|  | 		}; | ||||||
|  | 		// 渲染光伏板 | ||||||
|  | 		const redenrGfB = () => { | ||||||
|  | 			const loading = ElLoading.service({ | ||||||
|  | 				lock: true, | ||||||
|  | 				text: '加载光伏板中....', | ||||||
|  | 				background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 			}); | ||||||
|  | 			let batchSize = 100; | ||||||
|  | 			for (let i = 0; i < guanfuban.length; i += batchSize) { | ||||||
|  | 				const batch = guanfuban.slice(i, i + batchSize); | ||||||
|  | 				renderGuangfubanGlb(batch); | ||||||
|  | 			} | ||||||
|  | 			loading.close(); | ||||||
|  | 		}; | ||||||
|  | 		// 获取所有的数据 | ||||||
|  | 		const getSourceAll = () => { | ||||||
|  | 			const loading = ElLoading.service({ | ||||||
|  | 				lock: true, | ||||||
|  | 				text: '获取数据中...', | ||||||
|  | 				background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 			}); | ||||||
|  | 			manageAll({ id: state.projectId }).then((res) => { | ||||||
|  | 				loading.close(); | ||||||
|  | 				const { data } = res; | ||||||
|  | 				let list = data.data; | ||||||
|  | 				console.log('listlistlistlist', list); | ||||||
|  | 				if (list.length > 0) { | ||||||
|  | 					list.forEach((item: any) => { | ||||||
|  | 						if (item.type == 18) { | ||||||
|  | 							nibianqi.push(item); | ||||||
|  | 						} | ||||||
|  | 						if (item.type == 23) { | ||||||
|  | 							xiangbian.push(item); | ||||||
|  | 						} | ||||||
|  | 						if (item.type == 15) { | ||||||
|  | 							guanfuban.push(item); | ||||||
|  | 						} | ||||||
|  | 					}); | ||||||
|  | 					let one = JSON.parse(guanfuban[0].detail); | ||||||
|  | 					if (one.height) { | ||||||
|  | 						redenrGfB(); | ||||||
|  | 					} else { | ||||||
|  | 						ElMessage.warning('请优先更新光伏板'); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 删除光伏板数据 | ||||||
|  | 		const removeSources = () => { | ||||||
|  | 			window['$PROJECT_MAP'].forEach((item) => { | ||||||
|  | 				// 清空地球上的实例 | ||||||
|  | 				try { | ||||||
|  | 					item[0].remove(); | ||||||
|  | 				} catch (error) {} | ||||||
|  | 			}); | ||||||
|  | 			window['$PROJECT_MAP'].clear(); | ||||||
|  | 		}; | ||||||
|  | 		// 数组分组工具方法 | ||||||
|  | 		const groupArr = (array, subGroupLength) => { | ||||||
|  | 			let index = 0; | ||||||
|  | 			let newArray = []; | ||||||
|  | 			while (index < array.length) { | ||||||
|  | 				newArray.push(array.slice(index, (index += subGroupLength))); | ||||||
|  | 			} | ||||||
|  | 			return newArray; | ||||||
|  | 		}; | ||||||
|  | 		// 根据key去重 | ||||||
|  | 		const duplicateRemoveByKey = (arr: any) => { | ||||||
|  | 			//根据key去重 | ||||||
|  | 			let arrMap = new Map(); | ||||||
|  | 			for (let item of arr) { | ||||||
|  | 				if (!arrMap.has(item.id)) { | ||||||
|  | 					arrMap.set(item.id, item); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			arr = [...arrMap.values()]; //把map中所有的值取出来放进数组 | ||||||
|  | 			return arr; | ||||||
|  | 		}; | ||||||
|  | 		// 采样高层 | ||||||
|  | 		const updateZhiJiaZhuanDian = async (type: any) => { | ||||||
|  | 			console.log(123); | ||||||
|  |  | ||||||
|  | 			let loading = null; | ||||||
|  | 			let load = false; | ||||||
|  | 			if (type == 'zhuangdian' && window.$PROJECT_MAP) { | ||||||
|  | 				removeSources(); | ||||||
|  | 				load = true; | ||||||
|  | 			} else { | ||||||
|  | 				redenrGfB(); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if (type != 'zhuangdian' && type != 'zhijia') { | ||||||
|  | 				loading = ElLoading.service({ | ||||||
|  | 					lock: true, | ||||||
|  | 					text: '正在更新中', | ||||||
|  | 					background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 				}); | ||||||
|  | 			} else { | ||||||
|  | 				state.progress = 0; | ||||||
|  | 			} | ||||||
|  | 			console.log('statestatestatestatestate', state); | ||||||
|  |  | ||||||
|  | 			if (state[type].poiArr.length && state[type].originArr.length) { | ||||||
|  | 				let poiGroupArr = groupArr(state[type].poiArr, 500); | ||||||
|  | 				let oriGroupArr = groupArr(state[type].originArr, 500); | ||||||
|  | 				if (poiGroupArr.length) { | ||||||
|  | 					for (let i in poiGroupArr) { | ||||||
|  | 						await state.tools!.sampleHeightMostDetailed(poiGroupArr[i]).then((res: any) => { | ||||||
|  | 							if (res.length === oriGroupArr[i].length) { | ||||||
|  | 								// 返填重新赋值 | ||||||
|  | 								oriGroupArr[i] = oriGroupArr[i].map((v: any, i: any) => { | ||||||
|  | 									let position = JSON.parse(v.detail); | ||||||
|  | 									if (type === 'zhijia') { | ||||||
|  | 										position.position.height = res[i].height ? res[i].height : 0; | ||||||
|  | 									} else { | ||||||
|  | 										position.position.alt = res[i].height ? res[i].height : 0; | ||||||
|  | 									} | ||||||
|  | 									v.detail = JSON.stringify(position); | ||||||
|  | 									return v; | ||||||
|  | 								}); | ||||||
|  |  | ||||||
|  | 								state[type].originArr = [...state[type].originArr, ...oriGroupArr[i]]; | ||||||
|  | 								state[type].originArr = duplicateRemoveByKey(state[type].originArr); | ||||||
|  | 								console.log(state[type].originArr); | ||||||
|  | 								state.progressTips = `总计${poiGroupArr.length}组数据,正在进行第${Number(i) + 1}组数据采样`; | ||||||
|  | 								state.progress = Number((((Number(i) + 1) / poiGroupArr.length) * 100).toFixed(2)); | ||||||
|  | 								if (type === 'zhuangdian' || type === 'zhijia') { | ||||||
|  | 									// 全部采样完才请求接口 | ||||||
|  | 									if (Number(i) - 0 == poiGroupArr.length - 1) { | ||||||
|  | 										updateAlt(type, loading); | ||||||
|  | 									} | ||||||
|  | 								} else { | ||||||
|  | 									updateAlt(type, loading); | ||||||
|  | 								} | ||||||
|  | 							} else { | ||||||
|  | 								loading?.close(); | ||||||
|  | 								ElMessage.success('更新失败'); | ||||||
|  | 							} | ||||||
|  | 						}); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		// 更新高层 | ||||||
|  | 		const updateAlt = async (type: any, loading: any = null) => { | ||||||
|  | 			if (type === 'zhuangdian') { | ||||||
|  | 				chunkUpdateAlt(type, '/zm/api/v1/system/qianqiGuangfubanIdsZhuangdian/edit_detail'); | ||||||
|  | 			} | ||||||
|  | 			if (type === 'zhijia') { | ||||||
|  | 				chunkUpdateAlt(type, '/zm/api/v1/system/qianqiGuangfubanIdsZhijia/edit_detail'); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		// 更新高程 分组请求接口(桩点 支架) | ||||||
|  | 		const chunkUpdateAlt = async (type: any, url: any) => { | ||||||
|  | 			state.progress = 0; | ||||||
|  | 			console.log(state.zhuangdian.originArr); | ||||||
|  | 			let list = state[type].originArr.map((item: any) => { | ||||||
|  | 				return JSON.parse(item.detail); | ||||||
|  | 			}); | ||||||
|  | 			let groupList = groupArr(list, 5000); | ||||||
|  | 			if (groupList.length) { | ||||||
|  | 				for (let i in groupList) { | ||||||
|  | 					state.progressTips = `总计${groupList.length}组数据,正在进行第${Number(i) + 1}组数据更新`; | ||||||
|  | 					state.progress = Number(((Number(i) / groupList.length) * 100).toFixed(2)); | ||||||
|  | 					await axios({ | ||||||
|  | 						url: url, | ||||||
|  | 						method: 'put', | ||||||
|  | 						timeout: 0, | ||||||
|  | 						headers: { | ||||||
|  | 							Authorization: 'Bearer ' + `${Session.get('token')}`, | ||||||
|  | 							'Content-Type': 'application/json', | ||||||
|  | 							...sign({ projectId: state.projectId, list: groupList[i] }), | ||||||
|  | 						}, | ||||||
|  | 						data: { projectId: state.projectId, list: groupList[i] }, | ||||||
|  | 					}) | ||||||
|  | 						.then((res: any) => { | ||||||
|  | 							if (res.data.code === 0) { | ||||||
|  | 								state.progress = 100; | ||||||
|  | 								ElMessage.success(`第${Number(i) + 1}组数据更新成功,剩余${groupList.length - 1 - Number(i)}组数据`); | ||||||
|  | 								if (type === 'zhuangdian') { | ||||||
|  | 									getZhiJiaList(); | ||||||
|  | 								} | ||||||
|  | 							} else { | ||||||
|  | 								ElMessage.error(res.data.message); | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 						.catch((err) => { | ||||||
|  | 							ElMessage.error('请求失败'); | ||||||
|  | 						}); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  | 		// 获取支架列表 | ||||||
|  | 		const getZhiJiaList = async () => { | ||||||
|  | 			state.zhijia.originArr = []; | ||||||
|  | 			state.zhijia.poiArr = []; | ||||||
|  | 			await gisListZhijia(state.queryParam).then((res: any) => { | ||||||
|  | 				console.log('list接口', res); | ||||||
|  |  | ||||||
|  | 				if (res.code === 0 && res.data.list) { | ||||||
|  | 					let arr = res.data.list.map((item, index) => { | ||||||
|  | 						item.p_id = '106'; | ||||||
|  | 						item.checked = 1; | ||||||
|  | 						item.is_show = 1; | ||||||
|  | 						item.layer_index = 0; | ||||||
|  | 						item.icon = zjImage; | ||||||
|  | 						item.tree_index = 0; | ||||||
|  | 						let detail = null; | ||||||
|  | 						if (commonJson(item)) { | ||||||
|  | 							detail = JSON.parse(item.detail); | ||||||
|  | 							state.zhijia.originArr.push(item); | ||||||
|  | 							state.zhijia.poiArr.push({ lng: detail.position.lng, lat: detail.position.lat }); | ||||||
|  | 						} | ||||||
|  | 						return item; | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 获取桩点的数据 | ||||||
|  | 		const getXZhuangDianList = async () => { | ||||||
|  | 			await gisList(state.queryParam).then((res: any) => { | ||||||
|  | 				if (res.code === 0 && res.data.list) { | ||||||
|  | 					state.zhuangdian.poiArr = []; | ||||||
|  | 					let arr = res.data.list.map((item: any, index: any) => { | ||||||
|  | 						item.p_id = '102'; | ||||||
|  | 						item.checked = 1; | ||||||
|  | 						item.is_show = 1; | ||||||
|  | 						item.layer_index = 0; | ||||||
|  | 						item.icon = zdImage; | ||||||
|  | 						item.tree_index = 0; | ||||||
|  | 						let detail = null; | ||||||
|  | 						if (commonJson(item)) { | ||||||
|  | 							detail = JSON.parse(item.detail); | ||||||
|  | 							state.zhuangdian.originArr.push(item); | ||||||
|  | 							state.zhuangdian.poiArr.push({ lng: detail.position.lng, lat: detail.position.lat }); | ||||||
|  | 						} | ||||||
|  | 						return item; | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 获取中心点高程(光伏板) | ||||||
|  | 		const centerHeight = () => { | ||||||
|  | 			const loading = ElLoading.service({ | ||||||
|  | 				lock: true, | ||||||
|  | 				text: '更新高程、中心点...', | ||||||
|  | 				background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 			}); | ||||||
|  | 			let arr = []; | ||||||
|  | 			guanfuban.forEach((item) => { | ||||||
|  | 				arr.push(JSON.parse(item.detail)); | ||||||
|  | 			}); | ||||||
|  | 			let heightAndCenter = window.YJ.Zmkg.Guangfu.CenterHeight(arr); | ||||||
|  | 			let center = heightAndCenter.center; | ||||||
|  | 			heightAndCenter.Cartographic.then((Cartographic: any) => { | ||||||
|  | 				if (Cartographic.length > 0) { | ||||||
|  | 					loading.close(); | ||||||
|  | 					assemblingPhotovoltaicPanels(center, Cartographic); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 组装高程数据 | ||||||
|  | 		const assemblingPhotovoltaicPanels = async (center: any, height: any) => { | ||||||
|  | 			guanfuban.forEach((item, index) => { | ||||||
|  | 				let i = JSON.parse(item.detail); | ||||||
|  | 				i.height = height[index].height; | ||||||
|  | 				i.center = center[index]; | ||||||
|  | 				item.detail = JSON.stringify(i); | ||||||
|  | 			}); | ||||||
|  | 			let data = [...guanfuban]; | ||||||
|  | 			let batchSize = 100000; | ||||||
|  | 			for (let i = 0; i < data.length; i += batchSize) { | ||||||
|  | 				const batch = data.slice(i, i + batchSize); | ||||||
|  | 				await updateElevation(batch); | ||||||
|  | 			} | ||||||
|  | 			getSourceAll(); | ||||||
|  | 		}; | ||||||
|  | 		// 更新高程(箱变、逆变器) | ||||||
|  | 		const updateHighLevel = (str: string) => { | ||||||
|  | 			let gxArr; | ||||||
|  | 			if (str == 'nibianqi') { | ||||||
|  | 				gxArr = nibianqi; | ||||||
|  | 			} | ||||||
|  | 			if (str == 'xiangbian') { | ||||||
|  | 				gxArr = xiangbian; | ||||||
|  | 			} | ||||||
|  | 			if (gxArr.length == 0) { | ||||||
|  | 				ElMessage({ | ||||||
|  | 					message: '数据为空,请确认数据是否上传', | ||||||
|  | 					type: 'warning', | ||||||
|  | 				}); | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 			let arr = []; | ||||||
|  | 			gxArr.forEach((item) => { | ||||||
|  | 				let p = JSON.parse(item.detail).positions[0]; | ||||||
|  | 				arr.push(p); | ||||||
|  | 			}); | ||||||
|  | 			const loading = ElLoading.service({ | ||||||
|  | 				lock: true, | ||||||
|  | 				text: '更新高程中...', | ||||||
|  | 				background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 			}); | ||||||
|  | 			state.tools.sampleHeightMostDetailed(arr).then((Cartographic) => { | ||||||
|  | 				if (Cartographic.length > 0) { | ||||||
|  | 					loading.close(); | ||||||
|  | 					assemblyData(gxArr, Cartographic); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 组装数据 | ||||||
|  | 		const assemblyData = (gxArr, arr) => { | ||||||
|  | 			gxArr.forEach((item, index) => { | ||||||
|  | 				let i = JSON.parse(item.detail); | ||||||
|  | 				i.positions[0].alt = arr[index].height; | ||||||
|  | 				item.detail = JSON.stringify(i); | ||||||
|  | 			}); | ||||||
|  | 			updateElevation(gxArr); | ||||||
|  | 		}; | ||||||
|  | 		// 更新高程(更新到后端) | ||||||
|  | 		const updateElevation = (gxArr) => { | ||||||
|  | 			const loading = ElLoading.service({ | ||||||
|  | 				lock: true, | ||||||
|  | 				text: '上传中,请勿关闭页面...', | ||||||
|  | 				background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 			}); | ||||||
|  | 			updateAll({ Modules: gxArr }).then((res) => { | ||||||
|  | 				loading.close(); | ||||||
|  | 				if (res.code == 0) { | ||||||
|  | 					ElMessage({ | ||||||
|  | 						message: '上传成功', | ||||||
|  | 						type: 'success', | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 获取地形数据 | ||||||
|  | 		const getQxModelList = () => { | ||||||
|  | 			listQianqiMoxing(state.queryParam).then((res: any) => { | ||||||
|  | 				if (res.code === 0 && res.data.list && res.data.list.length) { | ||||||
|  | 					res.data.list.forEach((item) => { | ||||||
|  | 						renderModel(item); | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 获取当前项目信息 | ||||||
|  | 		const getProList = (id: any) => { | ||||||
|  | 			getSysProject(id).then((res: any) => { | ||||||
|  | 				const data = res.data; | ||||||
|  | 				state.projectName = data.projectName; | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		const createEarth = () => { | ||||||
|  | 			// eslint-disable-next-line no-undef | ||||||
|  | 			YJ.on().then((res: any) => { | ||||||
|  | 				// eslint-disable-next-line no-undef | ||||||
|  | 				let earth = new YJ.YJEarth('earth'); | ||||||
|  | 				// // this.areaShow = true | ||||||
|  | 				// eslint-disable-next-line no-undef | ||||||
|  | 				new YJ.Layer.ArcgisWXImagery(); | ||||||
|  | 				// // new YJ.Layer.ArcgisGRAYImagery() | ||||||
|  | 				// // new YJ.Layer.ArcgisBLUEImagery() | ||||||
|  | 				// // new YJ.Terrain.Arcgis() | ||||||
|  | 				// eslint-disable-next-line no-undef | ||||||
|  | 				new YJ.Layer.GDLWImagery(); | ||||||
|  | 				// eslint-disable-next-line no-undef | ||||||
|  | 				state.tools = new YJ.Tools(); | ||||||
|  | 				// eslint-disable-next-line no-undef | ||||||
|  | 				YJ.getEarth().propertyStyle = new Cesium.Cesium3DTileStyle({ | ||||||
|  | 					// let stayle = new Cesium.Cesium3DTileStyle({ | ||||||
|  | 					/*color: { | ||||||
|  | 					evaluateColor: (feature, result) => { | ||||||
|  | 					  return bimTree.evaluateColor(feature, result) | ||||||
|  | 					} | ||||||
|  | 				  },*/ | ||||||
|  | 					show: { | ||||||
|  | 						evaluate: (feature) => { | ||||||
|  | 							return evaluateShow(feature); | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				}); | ||||||
|  | 				initData(); | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 监听模型加载显示隐藏 | ||||||
|  | 		const evaluateShow = (feature: any) => { | ||||||
|  | 			return true; | ||||||
|  | 			if (!feature) return true; | ||||||
|  | 			if (!feature.hasProperty('id')) return true; | ||||||
|  | 			var fid = feature.getProperty('id'); | ||||||
|  | 			// //获取tileset | ||||||
|  | 			var tileset = feature.tileset.xbsjTileset; | ||||||
|  | 			if (!tileset) return true; | ||||||
|  | 			// //寻找这个tileset上绑定的配置 | ||||||
|  | 			var config = window._visibleConfig.find((f) => f.tileset === tileset); | ||||||
|  | 			if (!config) return true; | ||||||
|  | 			//如果配置里包含,那么返回可见性 | ||||||
|  | 			if (config.visibleCach.hasOwnProperty(fid)) { | ||||||
|  | 				return config.visibleCach[fid]; | ||||||
|  | 			} else return false; | ||||||
|  | 			//否则返回可见 | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		return { | ||||||
|  | 			createEarth, | ||||||
|  | 			evaluateShow, | ||||||
|  | 			getRresource, | ||||||
|  | 			getQxModelList, | ||||||
|  | 			centerHeight, | ||||||
|  | 			commonJson, | ||||||
|  | 			updateHighLevel, | ||||||
|  | 			updateZhiJiaZhuanDian, | ||||||
|  | 			redenrGfB, | ||||||
|  | 			...toRefs(state), | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .earth { | ||||||
|  | 	width: 100vw; | ||||||
|  | 	height: 100vh; | ||||||
|  | 	overflow: hidden; | ||||||
|  | 	position: relative; | ||||||
|  |  | ||||||
|  | 	.left_title_button { | ||||||
|  | 		position: absolute; | ||||||
|  | 		top: 10%; | ||||||
|  | 		left: 30px; | ||||||
|  | 		width: 250px; | ||||||
|  | 		height: 100px; | ||||||
|  | 		z-index: 1999; | ||||||
|  |  | ||||||
|  | 		.title { | ||||||
|  | 			color: #fff; | ||||||
|  | 			font-weight: bold; | ||||||
|  | 			font-size: 22px; | ||||||
|  | 			margin-bottom: 20px; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		.btn { | ||||||
|  | 			width: 100%; | ||||||
|  | 			height: 50px; | ||||||
|  | 			position: relative; | ||||||
|  | 			margin-bottom: 30px; | ||||||
|  |  | ||||||
|  | 			> span { | ||||||
|  | 				width: 100%; | ||||||
|  | 				font-size: 22px; | ||||||
|  | 				font-weight: bold; | ||||||
|  | 				color: #fff; | ||||||
|  | 				position: absolute; | ||||||
|  | 				top: 50%; | ||||||
|  | 				left: 50%; | ||||||
|  | 				transform: translate(-50%, -50%); | ||||||
|  | 				letter-spacing: 3px; | ||||||
|  | 				text-align: center; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @ -781,6 +781,7 @@ const handleCheckRules = async (row?: ProjectVO) => { | |||||||
|   const _id = row?.id || ids.value[0]; |   const _id = row?.id || ids.value[0]; | ||||||
|   const res = await byProjectIdDetail(_id); |   const res = await byProjectIdDetail(_id); | ||||||
|   if (res.data) { |   if (res.data) { | ||||||
|  |     console.log(res.data); | ||||||
|     res.data.weekday = res.data.weekday.split(','); |     res.data.weekday = res.data.weekday.split(','); | ||||||
|     Object.assign(form.value, res.data); |     Object.assign(form.value, res.data); | ||||||
|   } |   } | ||||||
| @ -794,7 +795,7 @@ const ruleSubmit = async () => { | |||||||
|       let obj = { |       let obj = { | ||||||
|         weekday: form.value.weekday.join(','), |         weekday: form.value.weekday.join(','), | ||||||
|         projectId: projectId.value, |         projectId: projectId.value, | ||||||
|         id: projectId.value, |         id: form.value.id, | ||||||
|         clockInTime: form.value.clockInTime, |         clockInTime: form.value.clockInTime, | ||||||
|         clockOutTime: form.value.clockOutTime, |         clockOutTime: form.value.clockOutTime, | ||||||
|         type: form.value.type |         type: form.value.type | ||||||
|  | |||||||
| @ -11,11 +11,13 @@ const data = ref([]); | |||||||
| const deviceId = ref(''); | const deviceId = ref(''); | ||||||
| const videoDialogRef = ref(null); | const videoDialogRef = ref(null); | ||||||
| let token = 'Bearer '+ getToken() | 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); | 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 | // 连接ws | ||||||
| const connectWs = () => { | const connectWs = () => { | ||||||
|     ws.onopen = (e) => { |     ws.onopen = (e) => { | ||||||
|       console.log('this.gateWay', e); |     //   let message ={ | ||||||
|  |     //     projectId:'1897160897167638529', | ||||||
|  |     //   } | ||||||
|     //   ws.send(JSON.stringify(message)); |     //   ws.send(JSON.stringify(message)); | ||||||
|       ws.onmessage = (e) => { |       ws.onmessage = (e) => { | ||||||
|        console.log('ws', e); |        console.log('ws', e); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user