lex-xin 3 年 前
コミット
17be736ed0

ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index-legacy.1aaa11a3.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index-legacy.3149e203.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index-legacy.32c8e369.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index-legacy.68a5dfd2.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index-legacy.afa5e0fa.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index-legacy.e5d9dafb.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index.4233087d.js


+ 1 - 1
dist/assets/index.0da1cc3f.js → dist/assets/index.453af757.js

@@ -1 +1 @@
-import{d as i,a as t,t as s}from"./vendor.8df6bc42.js";const e="_wscnHttp404Container_1v1ex_1",c="_wscnHttp404_1v1ex_1",u="_pic404_1v1ex_13",n="_pic404__parent_1v1ex_19",o="_pic404__child_1v1ex_22",a="_left_1v1ex_25",d="_cloudLeft_1v1ex_1",r="_mid_1v1ex_36",h="_cloudMid_1v1ex_1",p="_right_1v1ex_47",v="_cloudRight_1v1ex_1",b="_bullshit_1v1ex_124",x="_bullshit__oops_1v1ex_132",m="_slideUp_1v1ex_1",g="_bullshit__headline_1v1ex_143",f="_bullshit__info_1v1ex_155",H="_bullshit__returnHome_1v1ex_166";var _={wscnHttp404Container:e,wscnHttp404:c,pic404:u,pic404__parent:n,pic404__child:o,left:a,cloudLeft:d,mid:r,cloudMid:h,right:p,cloudRight:v,bullshit:b,bullshit__oops:x,slideUp:m,bullshit__headline:g,bullshit__info:f,bullshit__returnHome:H},F="./assets/404.538aa4d7.png",l="./assets/404_cloud.98e7ac66.png",w=i({name:"Page404",data(){return{message:"\u5F88\u62B1\u6B49\uFF0C\u4F60\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728"}},render(){return t("div",{class:_.wscnHttp404Container},[t("div",{class:_.wscnHttp404},[t("div",{class:_.pic404},[t("img",{class:_.pic404__parent,src:F,alt:"404"},null),t("img",{class:[_.pic404__child,_.left],src:l,alt:"404"},null),t("img",{class:[_.pic404__child,_.mid],src:l,alt:"404"},null),t("img",{class:[_.pic404__child,_.right],src:l,alt:"404"},null)]),t("div",{class:_.bullshit},[t("div",{class:_.bullshit__oops},[s("OOPS!")]),t("div",{class:_.bullshit__headline},[this.message]),t("div",{class:_.bullshit__info},[s("\u8BF7\u68C0\u67E5\u60A8\u8F93\u5165\u7684\u7F51\u5740\u662F\u5426\u6B63\u786E\uFF0C\u6216\u8005\u70B9\u51FB\u94FE\u63A5\u7EE7\u7EED\u6D4F\u89C8")]),t("a",{href:"",class:_.bullshit__returnHome},[s("\u8FD4\u56DE\u9996\u9875")])])])])}});export{w as default};
+import{d as i,a as s,M as t}from"./vendor.07edc0c2.js";const e="_wscnHttp404Container_1v1ex_1",c="_wscnHttp404_1v1ex_1",u="_pic404_1v1ex_13",n="_pic404__parent_1v1ex_19",o="_pic404__child_1v1ex_22",a="_left_1v1ex_25",d="_cloudLeft_1v1ex_1",r="_mid_1v1ex_36",h="_cloudMid_1v1ex_1",p="_right_1v1ex_47",v="_cloudRight_1v1ex_1",b="_bullshit_1v1ex_124",x="_bullshit__oops_1v1ex_132",m="_slideUp_1v1ex_1",g="_bullshit__headline_1v1ex_143",f="_bullshit__info_1v1ex_155",H="_bullshit__returnHome_1v1ex_166";var _={wscnHttp404Container:e,wscnHttp404:c,pic404:u,pic404__parent:n,pic404__child:o,left:a,cloudLeft:d,mid:r,cloudMid:h,right:p,cloudRight:v,bullshit:b,bullshit__oops:x,slideUp:m,bullshit__headline:g,bullshit__info:f,bullshit__returnHome:H},F="./assets/404.538aa4d7.png",l="./assets/404_cloud.98e7ac66.png",w=i({name:"Page404",data(){return{message:"\u5F88\u62B1\u6B49\uFF0C\u4F60\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728"}},render(){return s("div",{class:_.wscnHttp404Container},[s("div",{class:_.wscnHttp404},[s("div",{class:_.pic404},[s("img",{class:_.pic404__parent,src:F,alt:"404"},null),s("img",{class:[_.pic404__child,_.left],src:l,alt:"404"},null),s("img",{class:[_.pic404__child,_.mid],src:l,alt:"404"},null),s("img",{class:[_.pic404__child,_.right],src:l,alt:"404"},null)]),s("div",{class:_.bullshit},[s("div",{class:_.bullshit__oops},[t("OOPS!")]),s("div",{class:_.bullshit__headline},[this.message]),s("div",{class:_.bullshit__info},[t("\u8BF7\u68C0\u67E5\u60A8\u8F93\u5165\u7684\u7F51\u5740\u662F\u5426\u6B63\u786E\uFF0C\u6216\u8005\u70B9\u51FB\u94FE\u63A5\u7EE7\u7EED\u6D4F\u89C8")]),s("a",{href:"",class:_.bullshit__returnHome},[t("\u8FD4\u56DE\u9996\u9875")])])])])}});export{w as default};

ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index.6b64fd53.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index.d910d0c2.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/index.e3c9bea1.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/polyfills-legacy.6987ba24.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/vendor-legacy.4bcd38f7.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/vendor-legacy.834fd8a8.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/vendor.07edc0c2.js


ファイルの差分が大きいため隠しています
+ 0 - 0
dist/assets/vendor.8df6bc42.js


+ 4 - 4
dist/index.html

@@ -6,8 +6,8 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>管乐迷</title>
     
-    <script type="module" crossorigin src="./assets/index.e3c9bea1.js"></script>
-    <link rel="modulepreload" href="./assets/vendor.8df6bc42.js">
+    <script type="module" crossorigin src="./assets/index.4233087d.js"></script>
+    <link rel="modulepreload" href="./assets/vendor.07edc0c2.js">
     <link rel="stylesheet" href="./assets/index.cd9189f2.css">
     <script type="module">!function(){try{new Function("m","return import(m)")}catch(o){console.warn("vite: loading legacy build because dynamic import is unsupported, syntax error above should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}}();</script>
   </head>
@@ -130,7 +130,7 @@
       }
     </script>
     <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
-    <script nomodule id="vite-legacy-polyfill" src="./assets/polyfills-legacy.7f3fc881.js"></script>
-    <script nomodule id="vite-legacy-entry" data-src="./assets/index-legacy.68a5dfd2.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+    <script nomodule id="vite-legacy-polyfill" src="./assets/polyfills-legacy.6987ba24.js"></script>
+    <script nomodule id="vite-legacy-entry" data-src="./assets/index-legacy.3149e203.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
   </body>
 </html>

+ 19 - 17
src/components/live-broadcast/runtime.ts

@@ -6,6 +6,7 @@ import request from '/src/helpers/request'
 import { state } from '/src/state'
 import event, { LIVE_EVENT_MESSAGE } from './event'
 import dayjs from 'dayjs'
+import { removeToken } from '/src/utils/auth';
 // import { SeatsCtrl } from './message-type'
 
 type imConnectStatus = 'connecting' | 'connected' | 'disconnect'
@@ -165,9 +166,10 @@ const Events = RongIMLib.Events
  RongIMLib.addEventListener(Events.DISCONNECT, () => {
   console.log('disconnect')
    runtime.imConnectStatus = 'disconnect'
-   if (runtime.joinedRoom && runtime.videoStatus === 'liveing') {
-    closeLive(true)
-   }
+   event.emit(LIVE_EVENT_MESSAGE["RC:ForcedOffline"])
+  //  if (runtime.joinedRoom && runtime.videoStatus === 'liveing') {
+  //   closeLive(true, 'IM')
+  //  }
  })
 
  export const connectIM = async (imToken: string) => {
@@ -485,15 +487,19 @@ export const startLive = async (resetTime = true) => {
 /**
  * 关闭直播
  */
-export const closeLive = async (remove = false) => {
+export const closeLive = async (remove = false, source: 'IM' | 'Logout' = 'Logout') => {
   // removeMedia(runtime.mediaStreams, runtime.mediaStreamTrack)
-  await request.get('/api-web/imLiveBroadcastRoom/opsLiveVideo', {
-    params: {
-      type: '2',
-      roomUid: runtime.roomUid,
-      userId: state.user?.speakerId,
+  try {
+    if(source === 'Logout') {
+      await request.get('/api-web/imLiveBroadcastRoom/opsLiveVideo', {
+        params: {
+          type: '2',
+          roomUid: runtime.roomUid,
+          userId: state.user?.speakerId,
+        }
+      })
     }
-  })
+  } catch {}
   sessionStorage.removeItem(START_LIVE_TIME)
   sessionStorage.removeItem(START_LIVE_STATUS)
   // 关闭房间仅移除推流即可
@@ -627,12 +633,8 @@ export const toggleDevice = async (trackType: TrackType) => {
   }
 }
 
-export const leaveIMRoom = async () => {
-  await closeLive(true)
-  leaveIMRoomAndClear()
-}
-
-export const leaveIMRoomAndClear = async () => {
+export const leaveIMRoom = async (source: 'IM' | 'Logout' = 'Logout') => {
+  await closeLive(true, source)
   if (runtime.joinedRoom) {
     // @ts-ignore
     await runtime.rtcClient?.leaveRoom(runtime.joinedRoom)
@@ -640,4 +642,4 @@ export const leaveIMRoomAndClear = async () => {
     RongIMLib.disconnect()
     runtime.imConnectStatus = 'disconnect'
   }
-}
+}

+ 3 - 1
src/components/live-message/model/message-model.tsx

@@ -40,7 +40,9 @@ export default defineComponent({
       // 强制退出登录
       try {
         await RuntimeUtilCast.leaveIMRoom()
-        await request.post('/api-auth/exit', { data: {} });
+        try {
+          await request.post('/api-auth/exit', { data: {} });
+        } catch {}
         RuntimeUtilCast.closeDevice('camera')
         RuntimeUtilCast.closeDevice('microphone')
         runtimeCast.syncLikeTimer && clearTimeout(runtimeCast.syncLikeTimer)

+ 1 - 1
src/helpers/request.ts

@@ -79,7 +79,7 @@ request.interceptors.response.use(async (res, options) => {
         ElMessage.error(`登录过期,请重新登录!`)
       }
       try {
-        await RuntimeUtils.leaveIMRoomAndClear()
+        await RuntimeUtils.leaveIMRoom('IM')
         RuntimeUtils.closeDevice('camera')
         RuntimeUtils.closeDevice('microphone')
         state.user = null

+ 3 - 1
src/pages/home/header/index.tsx

@@ -14,7 +14,9 @@ export default defineComponent({
     async loginOut() {
       try {
         await RuntimeUtils.leaveIMRoom()
-        await request.post('/api-auth/exit', { data: {} });
+        try {
+          await request.post('/api-auth/exit', { data: {} });
+        } catch {}
         RuntimeUtils.closeDevice('camera')
         RuntimeUtils.closeDevice('microphone')
         state.user = null

+ 74 - 71
src/permission.ts

@@ -1,71 +1,74 @@
-// import Vue from 'vue'
-import router from "./router";
-import request from '/src/helpers/request'
-import { ElMessage } from "element-plus";
-import { state } from "./state";
-// import NProgress from "nprogress"; // progress bar
-// import "nprogress/nprogress.css"; // progress bar style
-import { getToken, removeToken } from "./utils/auth";
-import qs from 'query-string'
-// import getPageTitle from '@/utils/get-page-title'
-
-// NProgress.configure({ showSpinner: false }); // NProgress Configuration
-
-const whiteList = ["/login"]; // no redirect whitelist
-
-router.beforeEach(async (to, from, next) => {
-  // from.query = to.query
-  // start progress bar
-  // NProgress.start();
-  const hasToken = getToken();
-  if (hasToken) {
-    if (to.path === "/login") {
-      // 如果有token直接跳转到首页
-      next({ path: "/" });
-
-      // NProgress.done();
-    } else {
-      const hasGetUserInfo = state.user?.speakerId;
-      // 有名字 说明有用户信息 跳走
-      if (hasGetUserInfo) {
-        next();
-      } else {
-        try {
-          // 异步获取用户信息
-          const roomUid = sessionStorage.getItem('roomUid')
-          const roomDetail = await request.get('/api-web/imLiveBroadcastRoom/speakerJoinRoom', {
-            params: {
-              roomUid: roomUid
-            }
-          })
-          state.user = roomDetail.data
-          next({ ...to, replace: true });
-        } catch (error: any) {
-          // remove token and go to login page to re-login
-          // await store.dispatch("user/resetToken");
-          if (error.msg) {
-            ElMessage.error(error.msg);
-          }
-          removeToken();
-          next(`/login?${qs.stringify(to.query)}`);
-          // NProgress.done();
-        }
-      }
-    }
-  } else {
-    /* has no token*/
-    if (whiteList.indexOf(to.path) !== -1) {
-      // in the free login whitelist, go directly
-      next();
-    } else {
-      // other pages that do not have permission to access are redirected to the login page.
-      next(`/login?${qs.stringify(to.query)}`);
-      // NProgress.done();
-    }
-  }
-});
-
-router.afterEach(() => {
-  // finish progress bar
-  // NProgress.done();
-});
+// import Vue from 'vue'
+import router from "./router";
+import request from '/src/helpers/request'
+import { ElMessage } from "element-plus";
+import { state } from "./state";
+// import NProgress from "nprogress"; // progress bar
+// import "nprogress/nprogress.css"; // progress bar style
+import { getToken, removeToken } from "./utils/auth";
+import qs from 'query-string'
+import runtime, * as RuntimeUtils from '/src/components/live-broadcast/runtime'
+// import getPageTitle from '@/utils/get-page-title'
+
+// NProgress.configure({ showSpinner: false }); // NProgress Configuration
+
+const whiteList = ["/login"]; // no redirect whitelist
+
+router.beforeEach(async (to, from, next) => {
+  // from.query = to.query
+  // start progress bar
+  // NProgress.start();
+  const hasToken = getToken();
+  if (hasToken) {
+    if (to.path === "/login") {
+      // 如果有token直接跳转到首页
+      next({ path: "/" });
+
+      // NProgress.done();
+    } else {
+      const hasGetUserInfo = state.user?.speakerId;
+      // 有名字 说明有用户信息 跳走
+      if (hasGetUserInfo) {
+        next();
+      } else {
+        try {
+          // 异步获取用户信息
+          const roomUid = sessionStorage.getItem('roomUid')
+          const roomDetail = await request.get('/api-web/imLiveBroadcastRoom/speakerJoinRoom', {
+            params: {
+              roomUid: roomUid
+            }
+          })
+          state.user = roomDetail.data
+          // 同步移动端观看人数
+          await RuntimeUtils.sendMessage({ count: state.user?.lookNum || 0 }, 'MemberCount')
+          next({ ...to, replace: true });
+        } catch (error: any) {
+          // remove token and go to login page to re-login
+          // await store.dispatch("user/resetToken");
+          if (error.msg) {
+            ElMessage.error(error.msg);
+          }
+          removeToken();
+          next(`/login?${qs.stringify(to.query)}`);
+          // NProgress.done();
+        }
+      }
+    }
+  } else {
+    /* has no token*/
+    if (whiteList.indexOf(to.path) !== -1) {
+      // in the free login whitelist, go directly
+      next();
+    } else {
+      // other pages that do not have permission to access are redirected to the login page.
+      next(`/login?${qs.stringify(to.query)}`);
+      // NProgress.done();
+    }
+  }
+});
+
+router.afterEach(() => {
+  // finish progress bar
+  // NProgress.done();
+});

+ 2 - 2
vite.config.ts

@@ -6,8 +6,8 @@ import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
 const vueJsx = require('@vitejs/plugin-vue-jsx')
 const legacy = require('@vitejs/plugin-legacy')
 
-const proxyUrl = "https://test.dayaedu.com/"; // test 环境
-// const proxyUrl = "http://dev.dayaedu.com/"; // test 环境
+// const proxyUrl = "https://test.dayaedu.com/"; // test 环境
+const proxyUrl = "https://online.dayaedu.com/"; // test 环境
 // https://vitejs.dev/config/
 export default defineConfig({
   base: "./",

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません