From 3667807a7b7418efc090ee3fa6a6b734bc3080bf Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Wed, 13 Sep 2023 20:36:29 +0800
Subject: [PATCH] Merge branch 'develop' of http://s16s652780.51mypc.cn:49896/r/yskj/iot_drone_web into develop

---
 src/pages/page-web/projects/wayline.vue |  128 +++++++++++++++++++++++++++++-------------
 1 files changed, 89 insertions(+), 39 deletions(-)

diff --git a/src/pages/page-web/projects/wayline.vue b/src/pages/page-web/projects/wayline.vue
index 4a6dda9..da77c29 100644
--- a/src/pages/page-web/projects/wayline.vue
+++ b/src/pages/page-web/projects/wayline.vue
@@ -1,9 +1,10 @@
 <template>
   <div class="project-wayline-wrapper height-100">
+    <a-spin :spinning="loading" :delay="300" tip="downloading" size="large">
     <div style="height: 50px; line-height: 50px; border-bottom: 1px solid #4f4f4f; font-weight: 450;">
       <a-row>
         <a-col :span="1"></a-col>
-        <a-col :span="15">Flight Route Library</a-col>
+        <a-col :span="15">航线库</a-col>
         <a-col :span="8" v-if="importVisible" class="flex-row flex-justify-end flex-align-center">
           <a-upload
             name="file"
@@ -19,9 +20,8 @@
         </a-col>
       </a-row>
     </div>
-    <div class="height-100">
-    <a-spin :spinning="loading" :delay="300" tip="downloading" size="large">
-      <div class="scrollbar uranus-scrollbar" v-if="waylinesData.data.length !== 0" @scroll="onScroll">
+    <div :style="{ height : height + 'px'}" class="scrollbar">
+      <div id="data" class="height-100 uranus-scrollbar" v-if="waylinesData.data.length !== 0" @scroll="onScroll">
         <div v-for="wayline in waylinesData.data" :key="wayline.id">
           <div class="wayline-panel" style="padding-top: 5px;" @click="selectRoute(wayline)">
             <div class="title">
@@ -75,8 +75,8 @@
               </div>
           </template>
       </a-modal>
-    </a-spin>
     </div>
+    </a-spin>
   </div>
 </template>
 
@@ -96,11 +96,18 @@
 import { load } from '@amap/amap-jsapi-loader'
 import { getRoot } from '/@/root'
 
+import * as Cesium from 'cesium'
+let kmlDataSource = null
+
+const { appContext } = getCurrentInstance()
+const global = appContext.config.globalProperties
+
 const loading = ref(false)
 const store = useMyStore()
+const projectId = store.state.common.projectId
 const pagination :IPage = {
   page: 1,
-  total: 0,
+  total: -1,
   page_size: 10
 }
 
@@ -114,31 +121,22 @@
 const deleteWaylineId = ref<string>('')
 const canRefresh = ref(true)
 const importVisible = ref<boolean>(root.$router.currentRoute.value.name === ERouterName.WAYLINE)
+const height = ref()
 
 onMounted(() => {
+  const parent = document.getElementsByClassName('scrollbar').item(0)?.parentNode as HTMLDivElement
+  height.value = document.body.clientHeight - parent.firstElementChild!.clientHeight
   getWaylines()
-  setTimeout(() => {
-    const element = document.getElementsByClassName('scrollbar').item(0) as HTMLDivElement
-    const parent = element?.parentNode as HTMLDivElement
-    console.info(element, parent)
-    // console.info(element.scrollHeight, parent.clientHeight)
-  }, 1000)
-})
 
-onUpdated(() => {
-  const element = document.getElementsByClassName('scrollbar').item(0) as HTMLDivElement
-  const parent = element?.parentNode as HTMLDivElement
-  setTimeout(() => {
-    console.info(element, parent)
-    if (element?.scrollHeight < parent?.clientHeight && pagination.total > waylinesData.data.length) {
-      if (canRefresh.value) {
-        pagination.page++
-        getWaylines()
-      }
-    } else if (element && element.className.indexOf('height-100') === -1) {
-      element.className = element.className + ' height-100'
+  const key = setInterval(() => {
+    const data = document.getElementById('data')?.lastElementChild as HTMLDivElement
+    if (pagination.total === 0 || Math.ceil(pagination.total / pagination.page_size) <= pagination.page || height.value <= data?.clientHeight + data?.offsetTop) {
+      clearInterval(key)
+      return
     }
-  }, 300)
+    pagination.page++
+    getWaylines()
+  }, 1000)
 })
 
 function getWaylines () {
@@ -146,18 +144,16 @@
     return
   }
   canRefresh.value = false
-  getWaylineFiles(workspaceId, {
-    page: pagination.page,
-    page_size: pagination.page_size,
-    order_by: 'update_time desc'
+  getWaylineFiles({
+    workspaceId: projectId,
   }).then(res => {
-    if (res.code !== 0) {
+    if (res.code !== 5000) {
       return
     }
-    waylinesData.data = []
-    res.data.list.forEach((wayline: WaylineFile) => waylinesData.data.push(wayline))
-    pagination.total = res.data.pagination.total
-    pagination.page = res.data.pagination.page
+
+    const data = res.data
+
+    waylinesData.data = [...waylinesData.data, ...data]
   }).finally(() => {
     canRefresh.value = true
   })
@@ -175,7 +171,9 @@
     }
     deleteWaylineId.value = ''
     deleteTip.value = false
-    pagination.total--
+    pagination.total = 0
+    pagination.page = 1
+    waylinesData.data = []
     getWaylines()
   })
 }
@@ -194,13 +192,62 @@
 }
 
 function selectRoute (wayline: WaylineFile) {
+  initKmlFile('/src/assets/kmz/test.kmz')
   store.commit('SET_SELECT_WAYLINE_INFO', wayline)
+}
+
+/**
+ * 加载kml文件
+ * @param file
+ */
+function initKmlFile (file:string) {
+  const options = {
+    camera: global.$viewer.scene.camera,
+    canvas: global.$viewer.scene.canvas,
+    screenOverlayContainer: global.$viewer.container,
+  }
+  global.$viewer.dataSources.add(
+    Cesium.KmlDataSource.load(
+      file,
+      options
+    )).then(res => {
+    kmlDataSource = res
+    kmlDataSource.show = true
+
+    console.log('Entits数组', kmlDataSource.entities.values)
+
+    const kmlEntityArr = kmlDataSource.entities.values[0]._children
+    const cartesianArr = []
+    for (let i = 0; i < kmlEntityArr.length; i++) {
+      const entity = kmlEntityArr[i]
+      entity.point = new Cesium.PointGraphics({
+        pixelSize: 12,
+        color: Cesium.Color.RED,
+        outlineColor: Cesium.Color.WHITE,
+      })
+      entity.billboard = null
+
+      cartesianArr.push(entity.position._value)
+    }
+
+    const lineEntity = global.$viewer.entities.add({
+      name: 'entityLine',
+      polyline: {
+        positions: cartesianArr,
+        width: 10,
+        material: new Cesium.PolylineArrowMaterialProperty(Cesium.Color.CYAN),
+      },
+    })
+
+    global.$viewer.flyTo(lineEntity, {
+      offset: new Cesium.HeadingPitchRange(0, -90, 1000)
+    })
+  })
 }
 
 function onScroll (e: any) {
   const element = e.srcElement
-  console.info(element)
-  if (element.scrollTop + element.clientHeight === element.scrollHeight && Math.ceil(pagination.total / pagination.page_size) > pagination.page && canRefresh.value) {
+  if (element.scrollTop + element.clientHeight >= element.scrollHeight - 5 && Math.ceil(pagination.total / pagination.page_size) > pagination.page && canRefresh.value) {
     pagination.page++
     getWaylines()
   }
@@ -229,10 +276,13 @@
   fileList.value.forEach(async (file: FileItem) => {
     const fileData = new FormData()
     fileData.append('file', file, file.name)
-    await importKmzFile(workspaceId, fileData).then((res) => {
+    await importKmzFile(projectId, fileData).then((res) => {
       if (res.code === 0) {
         message.success(`${file.name} file uploaded successfully`)
         canRefresh.value = true
+        pagination.total = 0
+        pagination.page = 1
+        waylinesData.data = []
         getWaylines()
       }
     }).finally(() => {

--
Gitblit v1.9.3