tremble 3 năm trước cách đây
mục cha
commit
b80fb650ed

+ 2 - 2
public/index.html

@@ -29,8 +29,8 @@
 
         <script src="<%= BASE_URL %><%= VUE_APP_STATIC_DIR %>/static/lib/jweixin-1.6.0.js"></script>
         
-        <script src="<%= VUE_APP_SDK_DIR %>/kankan-sdk-deps.js?v=4.3.0-alpha.51"></script>
-        <script src="<%= VUE_APP_SDK_DIR %>/kankan-sdk.js?v=4.3.0-alpha.51"></script>
+        <script src="<%= VUE_APP_SDK_DIR %>/kankan-sdk-deps.js?v=4.31.0-alpha.51"></script>
+        <script src="<%= VUE_APP_SDK_DIR %>/kankan-sdk.js?v=4.31.0-alpha.51"></script>
 
         <!-- <script src="https://4dkk.4dage.com/v4/www/sdk/kankan-sdk-deps.js?v=4.0.0-alpha.44"></script>
         <script src="https://4dkk.4dage.com/v4/www/sdk/kankan-sdk.js?v=4.0.0-alpha.44"></script> -->

+ 34 - 19
src/app.vue

@@ -9,21 +9,26 @@
       <Information v-if="!isshoppingguide" />
       <Control />
       <teleport v-if="refMiniMap && player.showWidgets" :to="refMiniMap">
-        <span :class="{gudieDisabled:isshoppingguide}" class="button-switch" @click.stop="toggleMap">
+        <span :class="{ gudieDisabled: isshoppingguide }" class="button-switch" @click.stop="toggleMap">
           <ui-icon type="show_map_collect"></ui-icon>
         </span>
 
-        <p class="change" :class="{gudieDisabled:isshoppingguide}" @click="changeMode('dollhouse', $event, 'focus3d')">
+        <p class="change" :class="{ gudieDisabled: isshoppingguide }" @click="changeMode('dollhouse', $event, 'focus3d')">
           <ui-icon type="show_3d_normal"></ui-icon>
           3D模型
         </p>
       </teleport>
       <template v-if="refMiniMap && player.showWidgets">
-        <div :class="{ disabled: flying,gudieDisabled: isshoppingguide }" v-show="mode != 'panorama'" v-if="controls.showFloorplan && controls.showDollhouse" class="tab-layer">
+        <div
+          :class="{ disabled: flying, gudieDisabled: isshoppingguide }"
+          v-show="mode != 'panorama'"
+          v-if="controls.showFloorplan && controls.showDollhouse"
+          class="tab-layer"
+        >
           <div class="tabs" v-if="controls.showMap">
             <span :class="{ active: mode === 'floorplan' }" @click="changeMode('floorplan', $event)">
               <ui-icon :type="mode == 'floorplan' ? 'show_plane_selected' : 'show_plane_normal'"></ui-icon>
-              二維 
+              二維
             </span>
             <span :class="{ active: mode === 'dollhouse' }" @click="changeMode('dollhouse', $event)">
               <ui-icon :type="mode == 'dollhouse' ? 'show_3d_selected' : 'show_3d_normal'"></ui-icon>
@@ -97,6 +102,7 @@ const musicPlayer = useMusicPlayer();
 let app = null;
 
 let tagid = browser.getURLParam("tagid");
+const role = ref(browser.getURLParam("role"));
 
 const closetagtype = () => {
   store.commit("tag/setTagClickType", {
@@ -104,6 +110,7 @@ const closetagtype = () => {
     data: {},
   });
 };
+const socket = computed(() => store.getters["rtc/socket"]);
 
 const tags = computed(() => {
   return store.getters["tag/tags"] || [];
@@ -155,19 +162,21 @@ const resize = () => {
 //   }
 // );
 
-
 watch(
   () => isshoppingguide.value,
   (val, old) => {
+    if (role.value == "leader") {
+      return
+    }
     let $minmap = document.querySelector("[xui_min_map]");
     if ($minmap) {
-      setTimeout (async () => {
-        await nextTick()
+      setTimeout(async () => {
+        await nextTick();
         if (isshoppingguide.value) {
           $minmap.classList.add("gudieDisabled");
         } else {
           $minmap.classList.remove("gudieDisabled");
-        } 
+        }
       });
     }
   },
@@ -253,8 +262,6 @@ const onClickTagInfo = (el) => {
   }
 };
 
-
-
 onMounted(async () => {
   apis.burying_point({ type: 0 });
 
@@ -319,10 +326,22 @@ onMounted(async () => {
         var tag = e.data;
         // 聚焦當前點擊的熱點
         view.focus(tag.sid).then(() => {
+          if (isshoppingguide.value) {
+            if (role.value == "leader") {
+              socket.value &&
+                socket.value.emit("action", {
+                  type: "tagclick",
+                  data: {
+                    sid: tag.sid,
+                  },
+                });
+            }
+          }
+
           if (tag.type == "coupon") {
             try {
               document.querySelector(`[data-tag-id="${tag.sid}"] .tag-icon`).style.display = "none";
-              let hotcontent = (typeof tag.hotContent =='string') ? JSON.parse(tag.hotContent) : tag.hotContent;
+              let hotcontent = typeof tag.hotContent == "string" ? JSON.parse(tag.hotContent) : tag.hotContent;
               browser.openLink(
                 "/subPackage/pages/activity/activity?pageId=" + hotcontent.couponLink,
                 `https://m.cdfmembers.com/shop/600667208/showactivity?pageId=${hotcontent.couponLink}`,
@@ -337,7 +356,7 @@ onMounted(async () => {
             });
           } else if (tag.type == "applet_link") {
             try {
-              let hotcontent = (typeof tag.hotContent =='string') ? JSON.parse(tag.hotContent) : tag.hotContent;
+              let hotcontent = typeof tag.hotContent == "string" ? JSON.parse(tag.hotContent) : tag.hotContent;
               browser.openLink(
                 "/subPackage/pages/home/home?pageType=2&pageId=" + hotcontent.liveLink,
                 `https://m.cdfmembers.com/shop/600667208/showactivity?pageId=${hotcontent.liveLink}`,
@@ -392,8 +411,6 @@ onMounted(async () => {
       store.commit("showShoppingguide", true);
     }
 
-
-
     app.resource.tags(`${process.env.VUE_APP_RESOURCE_URL}cdf/hot/${browser.getURLParam("m")}/hot.json?rnd=${Math.random()}`);
     useMusicPlayer();
   });
@@ -465,7 +482,7 @@ onMounted(async () => {
     });
   });
   app.store.on("floorcad", (floor) => store.commit("scene/loadFloorData", floor));
- 
+
   app.render();
   document.removeEventListener("visibilitychange", visibilitychangeFn);
   document.addEventListener("visibilitychange", visibilitychangeFn);
@@ -665,13 +682,11 @@ onMounted(async () => {
   }
 }
 
-
-.gudieDisabled{
+.gudieDisabled {
   pointer-events: none !important;
-  *{
+  * {
     pointer-events: none !important;
   }
-
 }
 
 @media (orientation: landscape) {

+ 26 - 15
src/components/RTC/PageRtcLive.vue

@@ -22,15 +22,11 @@
         <div v-if="isBrushes && user_info.Role == 'leader'" @click="onDrawUndo" class="brushesBack" :class="{ disabled: !canUndo }"></div>
         <div v-if="user_info.Role == 'leader'" @click="onDraw(!isBrushes)" :class="{ brushesed: isBrushes }" class="brushes"></div>
 
-        <div
-          v-if="(user_list.length < 2 && mode == '1') || (mode == '2' && user_list.length < 30)"
-          class="invitation"
-          @click="openDialog('dialogShare', shareLink)"
-        ></div>
+        <div v-if="mode == '2' && user_list.length < 5" class="invitation" @click="openDialog('dialogShare', shareLink)"></div>
         <div v-if="mode == '2' && role == 'leader'" class="members" @click="openMember"></div>
         <div v-if="!disableMic" @click="handleMuteAduio" :class="{ mic_off: audioMuted }" class="mic_on"></div>
         <div v-if="disableMic" class="mic_no"></div>
-        <div v-if="role == 'leader'" @click="handleMuteVideo" :class="videoMuted ? 'video_no' : 'video_on'"></div>
+        <div v-if="role == 'leader'" @click="handleMuteVideo" :class="[videoMuted ? 'video_no' : 'video_on', videoDeviceId ? '' : 'disabled']"></div>
         <div class="exit" @click="openDialog('dialogIndex')"></div>
       </div>
     </div>
@@ -70,7 +66,7 @@
               </div>
             </div>
 
-            <div v-show="user_info.UserId != i.UserId && i.Role != 'leader'" class="memberItem" v-for="(i, idx) in user_list" :key="i.UserId">
+            <div v-show="user_info.UserId != i.UserId && i.Role != 'leader'" class="memberItem" v-for="(i, idx) in user_list" :key="idx">
               <div class="userMsg">
                 <div class="avatar">
                   <img :src="require('@/assets/images/rtcLive/avatar_small@2x.png')" alt="" />
@@ -136,6 +132,7 @@ let getUrl = (href, queryArr) => {
 
   return href;
 };
+const videoDeviceId = computed(() => store.getters["rtc/videoDeviceId"]);
 
 const connectStatus = ref(0);
 const isBrushes = ref(false);
@@ -188,7 +185,7 @@ const userGetOut = (item, i) => {
 const setUserWords = (res) => {
   if (res.userId == user_info.value.UserId) {
     user_info.value.IsWords = res.words;
-    Dialog.toast({ content: !user_info.value.IsWords? `主持人設置了禁言` : `主持人已解除禁言`  });
+    Dialog.toast({ content: !user_info.value.IsWords ? `主持人設置了禁言` : `主持人已解除禁言` });
   }
 };
 
@@ -204,7 +201,7 @@ const setUserMuted = (res) => {
   if (res.userId) {
     if (res.userId == user_info.value.UserId) {
       user_info.value.IsMuted = res.muted;
-      Dialog.toast({ content: !user_info.value.IsMuted? `主持人設置了开麦` : `主持人设置了静音`  });
+      Dialog.toast({ content: !user_info.value.IsMuted ? `主持人設置了开麦` : `主持人设置了静音` });
       disableMic.value = res.muted;
       audioMuted.value = res.muted;
     }
@@ -231,11 +228,14 @@ const onAllMuted = (res) => {
   }
 
   user_list.value.forEach((item) => {
+    
     user_info.value.IsMuted = res.muted;
-    Dialog.toast({ content: !user_info.value.IsMuted? `主持人設置了开麦` : `主持人设置了静音`  });
-    disableMic.value = res.muted;
-    audioMuted.value = res.muted;
     item.IsMuted = res.muted;
+    if (role.value == "customer") {
+      Dialog.toast({ content: !user_info.value.IsMuted ? `主持人設置了开麦` : `主持人设置了静音` });
+      disableMic.value = res.muted;
+      audioMuted.value = res.muted;
+    }
   });
 };
 
@@ -405,7 +405,8 @@ const userCanSpeak = (item) => {
 };
 
 const onGetOuT = (data) => {
-  if (data.id == user_info.UserId) {
+  console.log(data.id, 'data.id == user_info.value.UserId,', user_info.value.UserId);
+  if (data.id == user_info.value.UserId) {
     emit("closeSocket");
     Dialog.toast({ content: `您已被移除` });
   }
@@ -431,10 +432,15 @@ const startFollow = (app) => {
     connectStatus.value = 1;
     if (role.value == "customer") {
       socket.value.emit("action", { type: "user-init" });
+      if(data.user.IsMuted){
+        disableMic.value = true
+      }
     }
 
     isJoined.value = true;
 
+    
+
     user_info.value = data.user;
     user_list.value = data.members.reduce(function (tempArr, item) {
       if (tempArr.findIndex((ele) => ele.UserId === item.UserId) === -1) {
@@ -499,7 +505,7 @@ const startFollow = (app) => {
     } else if (data.type == "danmumsg") {
       setReceiveMsg(data.data);
     } else if (data.type == "getout") {
-      onGetOuT(data);
+      onGetOuT(data.data);
     } else if (data.type == "user-init") {
       app.Connect.follow.sync();
     } else if (data.type == "user-paint") {
@@ -525,7 +531,12 @@ const startFollow = (app) => {
     } else if (data.type == "leader-dismiss") {
       emit("closeSocket");
       Dialog.toast({ content: `主持人已解散房间` });
-
+    } else if (data.type == "tagclick") {
+      if (role.value == "customer") {
+        console.log(data, "customercustomer");
+        // document.querySelector(`[data-tag-id="${data.data.sid}"]`).click();
+        // console.log(data.data.sid);
+      }
     }
   });
 

+ 9 - 6
src/components/RTC/Trtccom.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="trtccom" v-if="show">
     <Device @switchDevice="switchDevice" @canUseDevice="canUseDevice" />
-    <div class="local" :class="{ disabledlocal: role == 'customer' }" id="local" v-if="isJoined">
+    <div class="local" :class="{ disabledlocal: role == 'customer' || !videoDeviceId }" id="local" v-if="isJoined">
       <div class="micBox">
         <img v-if="muteAudioLeader" :src="require('@/assets/images/rtcLive/mic_off@2x.png')" alt="" />
         <i v-else class="speak_mic"></i>
@@ -12,10 +12,10 @@
       <div
         class="local"
         :data-role="item.userId_"
-        :class="{ disabledlocal: item.userId_.indexOf('customer') > -1 }"
-        v-for="(item, i) in invitedRemoteStreams"
-        :id="item.getId()"
-        :key="i"
+        :class="{ disabledlocal: item.userId_.indexOf('customer') > -1  || !videoDeviceId }"
+        v-for="item in invitedRemoteStreams"
+        :id="item.userId_"
+        :key="item.userId_"
       >
         <div class="micBox">
           <img v-if="muteAudioLeader" :src="require('@/assets/images/rtcLive/mic_off@2x.png')" alt="" />
@@ -57,6 +57,7 @@ const muteVideoLeader = ref(false);
 const isJoined = computed(() => store.getters["rtc/isJoined"]);
 const isPublished = computed(() => store.getters["rtc/isPublished"]);
 const userSig = computed(() => store.getters["rtc/userSig"]);
+const videoDeviceId = computed(() => store.getters["rtc/videoDeviceId"]);
 
 const initParamsStates = computed(
   () => !!(store.getters["rtc/sdkAppId"] && store.getters["rtc/secretKey"] && store.getters["rtc/roomId"] && store.getters["rtc/userId"])
@@ -344,10 +345,12 @@ async function handleStreamSubscribed(event) {
   }
 
   console.log(invitedRemoteStreams.value, "invitedRemoteStreams.value");
+
   await nextTick();
   setTimeout(() => {
+  console.log(remoteStream.userId_,'remoteStream.getId()');
     remoteStream
-      .play(remoteStream.getId())
+      .play(remoteStream.userId_)
       .then(() => {
         console.log(`RemoteStream play success`, 88888888888888888888);
       })

+ 1 - 1
src/components/Tags/goods-list.vue

@@ -89,7 +89,7 @@ const emit = defineEmits(["close"]);
 const current = ref(0);
 
 const viewDetail = (item) => {
-  apis.burying_point({ type: 3 });
+  apis.burying_point({ type: 3, productId: item.id });
   browser.openLink(
   `/pages/item/item?productId=${item.id}`, 
   `https://m.cdfmembers.com/shop/600667208/item?productId=${item.id}`,