forked from integrated_whb/integrated_whb_vue
				
			实时追踪
							parent
							
								
									3ad5910d14
								
							
						
					
					
						commit
						b7727b0f5e
					
				
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.5 KiB | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 2.5 KiB | 
|  | @ -74,18 +74,25 @@ const props = defineProps({ | ||||||
|     required: true, |     required: true, | ||||||
|     default: false, |     default: false, | ||||||
|   }, |   }, | ||||||
|  |   isRealTimeTracking: { | ||||||
|  |     type: Boolean, | ||||||
|  |     required: true, | ||||||
|  |     default: false, | ||||||
|  |   }, | ||||||
| }); | }); | ||||||
| const emits = defineEmits([ | const emits = defineEmits([ | ||||||
|   "update:leftCurrentComponent", |   "update:leftCurrentComponent", | ||||||
|   "update:rightCurrentComponent", |   "update:rightCurrentComponent", | ||||||
|   "update:rightOption", |   "update:rightOption", | ||||||
|   "update:isHistoricalTrajectory", |   "update:isHistoricalTrajectory", | ||||||
|  |   "update:isRealTimeTracking", | ||||||
| ]); | ]); | ||||||
| const { | const { | ||||||
|   leftCurrentComponent, |   leftCurrentComponent, | ||||||
|   rightCurrentComponent, |   rightCurrentComponent, | ||||||
|   rightOption, |   rightOption, | ||||||
|   isHistoricalTrajectory, |   isHistoricalTrajectory, | ||||||
|  |   isRealTimeTracking, | ||||||
| } = useVModels(props, emits); | } = useVModels(props, emits); | ||||||
| 
 | 
 | ||||||
| const bottomOptionsList = [ | const bottomOptionsList = [ | ||||||
|  | @ -144,6 +151,17 @@ const bottomOptionsList = [ | ||||||
|         type: "historicalTrajectory", |         type: "historicalTrajectory", | ||||||
|         check: false, |         check: false, | ||||||
|       }, |       }, | ||||||
|  |       { | ||||||
|  |         img: new URL("/src/assets/images/map/bottom/ico19.png", import.meta.url) | ||||||
|  |           .href, | ||||||
|  |         imgSelect: new URL( | ||||||
|  |           "/src/assets/images/map/bottom/ico19_on.png", | ||||||
|  |           import.meta.url | ||||||
|  |         ).href, | ||||||
|  |         title: "实时追踪", | ||||||
|  |         type: "realTimeTracking", | ||||||
|  |         check: false, | ||||||
|  |       }, | ||||||
|     ], |     ], | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|  | @ -376,8 +394,9 @@ const fnBottomOptionsListChange = (item, index) => { | ||||||
|   rightOption.value = index !== 4; |   rightOption.value = index !== 4; | ||||||
| }; | }; | ||||||
| const fnBottomChildOptionsListChange = (index, item1, index1) => { | const fnBottomChildOptionsListChange = (index, item1, index1) => { | ||||||
|  |   const singleChoiceType = ["historicalTrajectory", "realTimeTracking"]; | ||||||
|   const currentItem = data.bottomOptionsList[index].list[index1]; |   const currentItem = data.bottomOptionsList[index].list[index1]; | ||||||
|   if (item1.type === "historicalTrajectory") { |   if (singleChoiceType.includes(item1.type)) { | ||||||
|     for (let i = 0; i < data.bottomOptionsList.length; i++) { |     for (let i = 0; i < data.bottomOptionsList.length; i++) { | ||||||
|       for (let j = 0; j < data.bottomOptionsList[i].list.length; j++) { |       for (let j = 0; j < data.bottomOptionsList[i].list.length; j++) { | ||||||
|         const currentForItem = data.bottomOptionsList[i].list[j]; |         const currentForItem = data.bottomOptionsList[i].list[j]; | ||||||
|  | @ -388,20 +407,26 @@ const fnBottomChildOptionsListChange = (index, item1, index1) => { | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     currentItem.check = !currentItem.check; |     currentItem.check = !currentItem.check; | ||||||
|     isHistoricalTrajectory.value = !isHistoricalTrajectory.value; |     if (item1.type === "historicalTrajectory") { | ||||||
|  |       isHistoricalTrajectory.value = !isHistoricalTrajectory.value; | ||||||
|  |       isRealTimeTracking.value = false; | ||||||
|  |     } | ||||||
|  |     if (item1.type === "realTimeTracking") { | ||||||
|  |       isRealTimeTracking.value = !isRealTimeTracking.value; | ||||||
|  |       isHistoricalTrajectory.value = false; | ||||||
|  |     } | ||||||
|   } else { |   } else { | ||||||
|     let isSelf = false; |  | ||||||
|     for (let i = 0; i < data.bottomOptionsList.length; i++) { |     for (let i = 0; i < data.bottomOptionsList.length; i++) { | ||||||
|       for (let j = 0; j < data.bottomOptionsList[i].list.length; j++) { |       for (let j = 0; j < data.bottomOptionsList[i].list.length; j++) { | ||||||
|         const currentForItem = data.bottomOptionsList[i].list[j]; |         const currentForItem = data.bottomOptionsList[i].list[j]; | ||||||
|         if (currentForItem.type === "historicalTrajectory") { |         if (singleChoiceType.includes(currentForItem.type)) { | ||||||
|           currentForItem.check = false; |           if (currentForItem.check) { | ||||||
|           isHistoricalTrajectory.value = false; |             currentForItem.check = false; | ||||||
|           isSelf = true; |             isHistoricalTrajectory.value = false; | ||||||
|           break; |             isRealTimeTracking.value = false; | ||||||
|  |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|       if (isSelf) break; |  | ||||||
|     } |     } | ||||||
|     currentItem.check = !currentItem.check; |     currentItem.check = !currentItem.check; | ||||||
|     if (currentItem.action) currentItem.action(currentItem.check, item1.type); |     if (currentItem.action) currentItem.action(currentItem.check, item1.type); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,88 @@ | ||||||
|  | <template> | ||||||
|  |   <div class="container"> | ||||||
|  |     <el-row align="middle"> | ||||||
|  |       <el-col :span="24"> | ||||||
|  |         <el-form | ||||||
|  |           :model="data.searchForm" | ||||||
|  |           label-width="10px" | ||||||
|  |           @submit.prevent="fnGetData" | ||||||
|  |         > | ||||||
|  |           <el-row> | ||||||
|  |             <el-col :span="16"> | ||||||
|  |               <el-form-item prop="personnel"> | ||||||
|  |                 <el-select v-model="data.searchForm.personnel" filterable> | ||||||
|  |                   <el-option | ||||||
|  |                     v-for="item in data.personList" | ||||||
|  |                     :key="item.id" | ||||||
|  |                     :label="`${item.name}(${item.id})`" | ||||||
|  |                     :value="item.id" | ||||||
|  |                   /> | ||||||
|  |                 </el-select> | ||||||
|  |               </el-form-item> | ||||||
|  |             </el-col> | ||||||
|  |             <el-col :span="8"> | ||||||
|  |               <el-form-item> | ||||||
|  |                 <el-button type="primary" native-type="submit">追踪</el-button> | ||||||
|  |                 <el-button native-type="reset" @click="fnReset" | ||||||
|  |                   >更新数据</el-button | ||||||
|  |                 > | ||||||
|  |               </el-form-item> | ||||||
|  |             </el-col> | ||||||
|  |           </el-row> | ||||||
|  |         </el-form> | ||||||
|  |       </el-col> | ||||||
|  |     </el-row> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script setup> | ||||||
|  | import { onBeforeUnmount, reactive } from "vue"; | ||||||
|  | import { getRealTimeList } from "@/request/map.js"; | ||||||
|  | import { ElMessage } from "element-plus"; | ||||||
|  | import { trackUser } from "../js/trajectory.js"; | ||||||
|  | 
 | ||||||
|  | const data = reactive({ | ||||||
|  |   searchForm: { | ||||||
|  |     personnel: "", | ||||||
|  |   }, | ||||||
|  |   personList: [], | ||||||
|  | }); | ||||||
|  | const fnGetPersonList = async () => { | ||||||
|  |   const resData = await getRealTimeList(); | ||||||
|  |   const personList = resData.data.data.list; | ||||||
|  |   for (let i = 0; i < personList.length; i++) { | ||||||
|  |     personList[i] = personList[i].split(","); | ||||||
|  |     data.personList.push({ | ||||||
|  |       id: personList[i][0], | ||||||
|  |       name: personList[i][5], | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | fnGetPersonList(); | ||||||
|  | const fnGetData = () => { | ||||||
|  |   if (!data.searchForm.personnel) { | ||||||
|  |     ElMessage.warning("请选择人员"); | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |   trackUser(data.searchForm.personnel, true); | ||||||
|  | }; | ||||||
|  | const fnReset = () => { | ||||||
|  |   fnGetPersonList(); | ||||||
|  |   trackUser("", false); | ||||||
|  | }; | ||||||
|  | onBeforeUnmount(() => { | ||||||
|  |   trackUser("", false); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .container { | ||||||
|  |   position: absolute; | ||||||
|  |   left: 500px; | ||||||
|  |   bottom: 240px; | ||||||
|  |   background-color: rgba(42, 86, 158, 0.53); | ||||||
|  |   width: 30%; | ||||||
|  |   padding: 18px 10px 0; | ||||||
|  |   border-radius: 5px; | ||||||
|  | } | ||||||
|  | </style> | ||||||
|  | @ -38,6 +38,7 @@ | ||||||
|             v-model:right-current-component="rightCurrentComponent" |             v-model:right-current-component="rightCurrentComponent" | ||||||
|             v-model:right-option="right_option" |             v-model:right-option="right_option" | ||||||
|             v-model:is-historical-trajectory="isHistoricalTrajectory" |             v-model:is-historical-trajectory="isHistoricalTrajectory" | ||||||
|  |             v-model:is-real-time-tracking="isRealTimeTracking" | ||||||
|           /> |           /> | ||||||
|         </div> |         </div> | ||||||
|       </transition> |       </transition> | ||||||
|  | @ -68,6 +69,13 @@ | ||||||
|         v-if="isHistoricalTrajectory && !isPureMap" |         v-if="isHistoricalTrajectory && !isPureMap" | ||||||
|       /> |       /> | ||||||
|     </transition> |     </transition> | ||||||
|  |     <transition | ||||||
|  |       enter-active-class="animate__animated animate__fadeInDown" | ||||||
|  |       leave-active-class="animate__animated animate__fadeOutDown" | ||||||
|  |       mode="out-in" | ||||||
|  |     > | ||||||
|  |       <real-time-tracking v-if="isRealTimeTracking && !isPureMap" /> | ||||||
|  |     </transition> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  | @ -81,6 +89,7 @@ import { initMap } from "./js/map"; | ||||||
| import { useUserStore } from "@/pinia/user.js"; | import { useUserStore } from "@/pinia/user.js"; | ||||||
| import { getEnterpriseInfo } from "@/request/enterprise_management.js"; | import { getEnterpriseInfo } from "@/request/enterprise_management.js"; | ||||||
| import HistoricalTrajectoryOptions from "@/views/BI/components/historical_trajectory_options.vue"; | import HistoricalTrajectoryOptions from "@/views/BI/components/historical_trajectory_options.vue"; | ||||||
|  | import RealTimeTracking from "@/views/BI/components/real_time_tracking.vue"; | ||||||
| 
 | 
 | ||||||
| const router = useRouter(); | const router = useRouter(); | ||||||
| const right_option = ref(true); | const right_option = ref(true); | ||||||
|  | @ -88,6 +97,7 @@ const transitionKey = ref(0); | ||||||
| const leftCurrentComponent = ref(""); | const leftCurrentComponent = ref(""); | ||||||
| const rightCurrentComponent = ref(""); | const rightCurrentComponent = ref(""); | ||||||
| const isHistoricalTrajectory = ref(false); | const isHistoricalTrajectory = ref(false); | ||||||
|  | const isRealTimeTracking = ref(false); | ||||||
| const isPureMap = ref(false); | const isPureMap = ref(false); | ||||||
| const userStore = useUserStore(); | const userStore = useUserStore(); | ||||||
| const CORPINFO_ID = userStore.getUserInfo.CORPINFO_ID; | const CORPINFO_ID = userStore.getUserInfo.CORPINFO_ID; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue