Przeglądaj źródła

feat: 完成功能

rindy 9 miesięcy temu
rodzic
commit
d41388e4b6

+ 1 - 2
src/App.vue

@@ -123,8 +123,7 @@ import { RouterLink } from 'vue-router'
 import { NIcon } from 'naive-ui'
 import { useUrlSearchParams } from '@vueuse/core'
 
-const params = useUrlSearchParams('hash')
-
+const params = useUrlSearchParams('history')
 const route = useRoute()
 const activeKey = ref(route.name)
 

+ 50 - 27
src/sdk.js

@@ -6,52 +6,75 @@ let __mount_list = []
 
 const deferred = Deferred()
 
+const unloadHandler = function() {
+   __sdk = null
+   __doc = null
+}
+
 export const sdk = deferred.promise()
 export const sdk_mounted = (cb) => {
-  __mount_list.push(cb)
   if (__sdk) {
     cb(__sdk)
+  } else {
+    __mount_list.push(cb)
   }
 }
+export const sdk_unmounted = ()=>[
+  unloadHandler()
+]
 
 export function setupSDK(iframe) {
   __sdk = iframe.contentWindow.__sdk
   __doc = iframe.contentDocument
-  __mount_list.forEach((cb) => cb(__sdk))
+
+  iframe.contentWindow.removeEventListener("unload", unloadHandler);
+  iframe.contentWindow.addEventListener("unload", unloadHandler);
+
+  let cb = null
+  while((cb = __mount_list.shift()) && cb) {
+    cb(__sdk)
+  }
   deferred.resolveValue(__sdk)
 }
 
 export function insertStyle(style) {
-    __doc.body.insertAdjacentHTML('beforeend', style)
+  __doc.body.insertAdjacentHTML('beforeend', style)
 }
 
-export function clearScreen(clear) {
+export function clearScreen(clear,retry=0) {
   if (__doc) {
-    const button = __doc.body.querySelector('.clear-screen-btn')
-    if (button) {
-      if (clear) {
-        if (button.querySelector('i').classList.contains('icon-hide_y')) {
-          button.style.visibility = 'hidden'
-          button.click()
-        }
-      } else {
-        button.style.visibility = 'visible'
-        if (button.querySelector('i').classList.contains('icon-hide_n')) {
-          button.click()
-        }
+    let button = __doc.body.querySelector('.clear-screen-btn')
+    if (button == void 0) {
+      if(retry > 50) {
+        return
+      }
+      return setTimeout(() => {
+        clearScreen(clear,++retry)
+      }, 200);
+    }
+    if (clear) {
+      if (button.querySelector('i').classList.contains('icon-hide_y')) {
+        button.style.visibility = 'hidden'
+        button.click()
+      }
+    } else {
+      button.style.visibility = 'visible'
+      if (button.querySelector('i').classList.contains('icon-hide_n')) {
+        button.click()
       }
     }
   }
 }
 
-sdk_mounted(()=>{
-    insertStyle(
-        `<style>
-            .kankan-app__split .player[name='main'] {
-                width:100% !important;
-            }
-            .kankan-app__split .player[name='copy'] {
-                display:none !important;
-            }
-        </style>`)
-})
+// sdk_mounted(() => {
+//   insertStyle(
+//     `<style>
+//         .kankan-app__split .player[name='main'] {
+//             width:100% !important;
+//         }
+//         .kankan-app__split .player[name='copy'] {
+//             display:none !important;
+//         }
+//     </style>`
+//   )
+// })

+ 2 - 1
src/views/basicSettings/index.vue

@@ -66,7 +66,7 @@ import {
   onUnmounted
 } from 'vue'
 import { useMainStore } from '@/store'
-import { sdk } from '@/sdk'
+import { sdk, sdk_unmounted } from '@/sdk'
 // import { useMessage } from 'naive-ui'
 defineProps<{ msg: string }>()
 
@@ -146,6 +146,7 @@ onMounted(() => {
 })
 onUnmounted(() => {
   if (basicConfig.value.mode == 'mobile') {
+    sdk_unmounted()
     main.setSceneMode('pc')
   }
 })

+ 3 - 3
src/views/message/index.vue

@@ -71,7 +71,7 @@ import {
   delMessage
 } from '@/api/module/message'
 import type { MessageItem } from './type'
-import { sdk } from '@/sdk'
+import { sdk, sdk_mounted } from '@/sdk'
 
 const show = ref(true)
 defineProps<{ msg: string }>()
@@ -101,7 +101,7 @@ const refresh = async () => {
 const handleMessageClick = async (ms: MessageItem) => {
   const sid = ms.content.sid
   console.log('sid', sid)
-  sdk.then((sdk) => {
+  sdk_mounted((sdk) => {
     sdk.TagManager.openTag(sid) // 打开热点
   })
 }
@@ -144,7 +144,7 @@ const handleSelect = async (key: string, ms: MessageItem) => {
             id: Number(ms.id),
             num: main.sceneCode
           })
-          sdk.then((sdk) => {
+          sdk_mounted((sdk) => {
             sdk.TagManager.removeTag(ms.content.sid) // 打开热点
           })
           await refresh()

+ 27 - 16
src/views/topicNavigation/index.vue

@@ -124,7 +124,7 @@
 
 <script setup lang="ts">
 import { computed, ref, watch, watchEffect } from 'vue'
-import { sdk, clearScreen } from '@/sdk'
+import { sdk, clearScreen, sdk_mounted } from '@/sdk'
 import { onMounted, onUnmounted } from 'vue'
 import {
   // NRadio,
@@ -152,19 +152,14 @@ const dataList = ref<
   }[]
 >([])
 
-sdk.then((sdk) => {
-  sdk.PanoCheckManager.on('changed', (list: any) => {
-    panos.value = list
-    console.log('panos', panos.value)
-  })
-})
-
 const handleAdd = () => {
   dataList.value.push({
     title: '新增路线',
     panos: []
   })
 
+  handleSelect("1",dataList.value.length-1)
+
   main.syncNavigation(dataList.value)
 }
 watchEffect(() => {
@@ -172,18 +167,13 @@ watchEffect(() => {
     dataList.value = naviData.value
   }
 })
+
 onMounted(() => {
-  sdk.then((sdk) => {
-    sdk.Scene.whenLoaded(() => {
-      sdk.PanoCheckManager.enter()
-      // debugger
-      clearScreen(true)
-    })
-  })
+ 
 })
 
 onUnmounted(() => {
-  sdk.then((sdk) => {
+  sdk_mounted((sdk) => {
     sdk.PanoCheckManager.leave()
     clearScreen(false)
   })
@@ -223,6 +213,16 @@ const handleListEdit = (index: number) => {
   console.log('handleListEdit', index)
   currentPanoEditing.value = index
   isPanoEditing.value = true
+  
+  sdk_mounted((sdk) => {
+    sdk.Scene.whenLoaded(() => {
+      sdk.PanoCheckManager.enter(dataList.value[index].panos)
+      sdk.PanoCheckManager.echo((list: any) => {
+        panos.value = list
+      })
+      clearScreen(true)
+    })
+  })
 }
 
 const handleListDel = (index: number) => {
@@ -240,10 +240,21 @@ const handleItem = (index: number) => {
 const handleItemSubmit = () => {
   isPanoEditing.value = false
   main.syncNavigation(dataList.value)
+  sdk_mounted((sdk) => {
+    // 重置状态
+    sdk.PanoCheckManager.leave()
+  })
 }
 const handlePanoDel = (index: number) => {
   const origin = dataList.value[currentPanoEditing.value].panos
+  const panoId = origin[index]
   origin && origin.splice(index, 1)
+  sdk_mounted((sdk) => {
+    sdk.Scene.whenLoaded(() => {
+      sdk.PanoCheckManager.setPanoChecked(panoId,false)
+    })
+  })
+ 
 }
 watch(
   [panos, isPanoEditing],

+ 1 - 1
vite.config.ts

@@ -28,7 +28,6 @@ if (process.env.CYPRESS_TEST === 'true') {
 export default defineConfig(({ mode }) => {
   const viteEnv = loadEnv(mode, process.cwd())
   const { VITE_KANKAN_PROXY } = viteEnv
-  console.log(VITE_KANKAN_PROXY, 11111)
   return {
     plugins,
     test: {
@@ -53,6 +52,7 @@ export default defineConfig(({ mode }) => {
         statements: 80
       }
     },
+    publicDir:"",
     build: {
       sourcemap: mode === 'production' ? false : 'inline'
     },