gemercheung vor 2 Jahren
Ursprung
Commit
5925a585c4

+ 2 - 2
index.html

@@ -25,8 +25,8 @@
   <body>
     <div id="app"></div>
     <script type="module" src="/src/main.ts"></script>
-    <script src="<{VITE_APP_SDK_DIR}>/kankan-sdk-deps.js?v=4.4.2-alpha.3"></script>
-    <script src="<{VITE_APP_SDK_DIR}>/kankan-sdk.js?v=4.4.2-alpha.3"></script>
+    <script src="<{VITE_APP_SDK_DIR}>/kankan-sdk-deps.js?v=4.4.2-alpha.5"></script>
+    <script src="<{VITE_APP_SDK_DIR}>/kankan-sdk.js?v=4.4.2-alpha.5"></script>
     <script src="<{BASE_URL}><{VITE_APP_STATIC_DIR}>/static/lib/flv.min.js"></script>
     <script src="<{BASE_URL}><{VITE_APP_STATIC_DIR}>/static/lib/vconsole.js"></script>
     <script src="<{BASE_URL}><{VITE_APP_STATIC_DIR}>/static/lib/swiper/swiper-bundle.min.js"></script>

+ 0 - 1
src/App.vue

@@ -165,7 +165,6 @@
         app.MinMap.hide(true);
       }
       dataLoaded.value = true;
-
       appStore.isLoad();
     });
     app.store.on('floorcad', ({ floors }: { floors: FloorsType[] }) => {

+ 4 - 0
src/components/basic/icon/images/index.ts

@@ -17,6 +17,8 @@ import revocation_50 from './revocation_50@2x.png';
 import revocation from './revocation@2x.png';
 import scene from './scene.png';
 import show from './show@2x.png';
+import music_off from './music_off.png';
+import music_on from './music_on.png';
 
 const icons = {
   arrow,
@@ -38,5 +40,7 @@ const icons = {
   revocation,
   scene,
   show,
+  music_off,
+  music_on,
 };
 export { icons };

BIN
src/components/basic/icon/images/music_off.png


BIN
src/components/basic/icon/images/music_on.png


+ 2 - 2
src/components/chatRoom/controls/join.ts

@@ -29,8 +29,8 @@ export function handleJoin(data: any) {
   console.log('lala', user);
   const maxNumber = import.meta.env.VITE_ROOM_MEMBER || 10;
   // console.log('roomMaxNumber', maxNumber);
-  console.log('roomMaxNumber', maxNumber, rtcStore.memberList.length, Number(maxNumber));
-  if (rtcStore.memberList.length > Number(maxNumber)) {
+  console.log('roomMaxNumber', maxNumber, members.length, Number(maxNumber));
+  if (members.length > Number(maxNumber)) {
     if (rtcStore.role === 'customer') {
       rtcStore.showBaseDialog(
         {

+ 31 - 2
src/components/custom/panel.vue

@@ -6,10 +6,15 @@
     <span class="icon" @click="showScenes = !showScenes" v-if="sceneList.length > 1">
       <Icon type="scene" />
     </span>
+    <span class="icon" v-if="hasMusic" @click="handleMusic">
+      <Icon type="music_on" v-if="!isPlayMusic" />
+      <Icon type="music_off" v-else />
+    </span>
     <span class="ctrl" :class="{ show }" @click="show = !show">
       <Icon type="arrows" />
     </span>
   </div>
+  <audio id="music" loop :src="musicURL" v-if="musicURL?.length"> </audio>
   <SceneList v-if="showScenes" @close="showScenes = false" @change-scene="changeScene" />
 </template>
 
@@ -18,21 +23,33 @@
   //import { useMusicPlayer } from "@/utils/sound";
   // import { changeScene } from "@/store/room";
   import Icon from '/@/components/basic/icon/index.vue';
-  import { computed, onMounted, ref, unref } from 'vue';
+  import { computed, onMounted, ref, unref, watchEffect } from 'vue';
   import { useRoom } from '/@/hooks/useRoom';
   import { useTourPlayer } from '/@/hooks/userTourPlayer';
+  import { useSceneStore } from '/@/store/modules/scene';
 
   const { initialRoom, changeScene, sceneList } = useRoom();
+  const sceneStore = useSceneStore();
+  const hasMusic = computed(
+    () => sceneStore.metadata.music?.length || sceneStore.metadata.musicFile?.length,
+  );
+  const musicURL = computed(() => sceneStore.musicURL);
 
   const show = ref(false);
+  const isPlayMusic = ref(false);
 
+  watchEffect(() => {
+    console.log('hasMusic', hasMusic, musicURL);
+  });
   onMounted(() => {
     initialRoom();
   });
 
   const showScenes = ref(false);
   const { hasTours } = useTourPlayer();
-  const panelShow = computed(() => unref(hasTours) || unref(sceneList).length > 1);
+  const panelShow = computed(
+    () => unref(hasTours) || unref(sceneList).length > 1 || unref(hasMusic),
+  );
 
   function handlePlayTours() {
     const { player, playing } = useTourPlayer();
@@ -42,6 +59,18 @@
       player.pause();
     }
   }
+  function handleMusic() {
+    const useMusicPlayer: HTMLAudioElement | null = document.getElementById(
+      'music',
+    ) as HTMLAudioElement;
+    if (!unref(isPlayMusic)) {
+      useMusicPlayer && useMusicPlayer.play();
+      isPlayMusic.value = true;
+    } else {
+      useMusicPlayer && useMusicPlayer.pause();
+      isPlayMusic.value = false;
+    }
+  }
 </script>
 
 <style lang="scss" scoped>

+ 7 - 2
src/hooks/userSocket.ts

@@ -29,8 +29,13 @@ async function closeSocket() {
   const { leaveRoom, createNewURLEntry } = useRoom();
   const rtcStore = useRtcStore();
   const appStore = useAppStore();
-  await getApp().Connect.follow.exit();
-  await leaveRoom();
+  try {
+    await getApp().Connect.follow.exit();
+    await leaveRoom();
+  } catch (error) {
+    console.error('exit-error', error);
+  }
+
   appStore.setIsTourMode(true);
   if (rtcStore.isLeader) {
     socket && socket.emit('action', { type: 'leader-dismiss' });

+ 6 - 2
src/store/modules/scene.ts

@@ -1,6 +1,6 @@
 import { defineStore } from 'pinia';
 import { KankanMetaDataType } from '/#/sdk';
-import { getApp } from '/@/hooks/userApp';
+import { useApp, getApp } from '/@/hooks/userApp';
 
 export interface FloorsType {
   id: string;
@@ -16,6 +16,10 @@ interface SceneState {
   metadata: KankanMetaDataType;
 }
 
+export const getStaticURL = (path: string) => {
+  return import.meta.env.BASE_URL + import.meta.env.VITE_APP_STATIC_DIR + '/' + path;
+};
+
 export const useSceneStore = defineStore({
   id: 'scene',
   state: (): SceneState => ({
@@ -28,7 +32,7 @@ export const useSceneStore = defineStore({
       const musicURl = this.metadata.music;
       if (musicURl) {
         if (/^0\d$/.test(musicURl)) {
-          return (window as any).resource.getStaticURL(`static/music/${musicURl}.mp3`);
+          return getStaticURL(`static/music/${musicURl}.mp3`);
         } else {
           const app = getApp();
           return app.resource.getUserResourceURL(