bzkf3 2 年之前
父節點
當前提交
bfe9f3504d

+ 4 - 2
public/config.js

@@ -8,6 +8,7 @@ const local = {
 // 测试服环境
 const development = {
   web_pc: 'https://dyawdev.bozedu.top/',
+  web_mobile: 'https://dyawdevm.bozedu.top/',
 
   api: 'https://openapi.dev.bozedu.net/',
   oss: 'https://openapi.dev.bozedu.net/',
@@ -17,6 +18,7 @@ const development = {
 // // 正式服环境
 const production = {
   web_pc: 'https://dyaw.bozedu.net/',
+  web_mobile: 'https://dyawm.bozedu.net/',
 
   api: 'https://openapi.bozedu.net/',
   oss: 'https://openapi.bozedu.net/',
@@ -24,9 +26,9 @@ const production = {
 }
 
 function isWhich() {
-  if (window.location.href.startsWith(development.web_pc)) {
+  if (window.location.href.startsWith(development.web_pc) || window.location.href.startsWith(development.web_mobile)) {
     return development
-  } else if (window.location.href.startsWith(production.web_pc)) {
+  } else if (window.location.href.startsWith(production.web_pc) || window.location.href.startsWith(production.web_mobile)) {
     return production
   } else {
     return local

+ 13 - 5
src/components/rtc-dialog/index.vue

@@ -103,9 +103,11 @@ defineExpose({
         isOpen = false
         break;
       case CHAT_OPERATION.ACCEPT:
-        await rtcInstance.client!.publish(rtcInstance.localAudioTrack!);
-        if (mode === 'video')
-          await rtcInstance.client!.publish(rtcInstance.localVideoTrack!);
+        if (RTC_USE) {
+          await rtcInstance.client!.publish(rtcInstance.localAudioTrack!);
+          if (mode === 'video')
+            await rtcInstance.client!.publish(rtcInstance.localVideoTrack!);
+        }
         currentChatStatus = CHAT_STATUS.CHATING
         offsetTime = 0
         offsetTimer = setInterval(() => {
@@ -115,13 +117,15 @@ defineExpose({
       case CHAT_OPERATION.DENY:
         emits('update-info', content.fullSendData!, true)
         isOpen = false
-        await rtcInstance.client?.leave();
+        if (RTC_USE)
+          await rtcInstance.client?.leave();
         break;
       case CHAT_OPERATION.END:
         emits('update-info', content.fullSendData!, true)
         offsetTimer && clearInterval(offsetTimer)
         isOpen = false
-        await rtcInstance.client!.leave();
+        if (RTC_USE)
+          await rtcInstance.client!.leave();
         handleSwitchUse(false)
 
         break;
@@ -169,6 +173,10 @@ function handleInfoEdit(data: Partial<type_dyaw_xlfw_zxhd_log>, tip?: string) {
   const _reqDate = Object.assign({
     dxzl_last_msg_content: tip ? encodeURIComponent(`【${mode === 'audio' ? '语音通话' : '视频通话'}】 ${tip}`) : undefined,
   }, data)
+  console.info('[in handleInfoEdit] data ', {
+    dxzl_id: dxzl_id,
+    dyaw_xlfw_zxhd_log: _reqDate
+  })
   return request({
     url: '/dyaw/xlfw_zxhd_log/edit',
     data: {

+ 69 - 18
src/pages/student/consult.vue

@@ -7,7 +7,7 @@ import { formatTimestamp } from '~/utils/time'
 import { CHAT_STATUS, CHAT_OPERATION } from '~/types';
 
 const router = useRouter()
-let teacher
+let teacher: { user_id: string; dxp_user_realname: string; dxp_user_phone: string; dxp_wx_qrcode: string; dxp_jj: string; dxp_user_avatar: string; }
 const SessionConsultTeacher = sessionStorage.getItem('consult_teacher')
 if (SessionConsultTeacher !== null) {
   teacher = JSON.parse(SessionConsultTeacher)
@@ -29,7 +29,7 @@ let teacherInfo = $ref<{
 request({
   url: '/dyaw/xlfw_pbgl/detail',
   data: {
-    user_id: teacher.user_id
+    user_id: teacher!.user_id
   }
 }).then(res => {
   if (res.code === '1') {
@@ -42,7 +42,7 @@ const dyaw_xlfw_zxhd: type_dyaw_xlfw_zxhd = (await request({
   data: {
     dyaw_xlfw_zxhd: {
       dxz_stu_user_id: user.user_id,
-      dxz_tea_user_id: teacher.user_id
+      dxz_tea_user_id: teacher!.user_id
     }
   }
 })).data.one_info
@@ -117,6 +117,18 @@ async function handleClickSend(val?: string) {
         ...reqDate,
         dxzl_id: `${res.data.insert_id}`
       }
+      if (!ws||ws.readyState !== 1) {
+        ws = createSocket(
+          { teacher: teacher!.user_id, student: user.user_id },
+          {
+            message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log>) {
+              if (socketRes.from_client_name.endsWith('teacher')) {
+                infoList.push(socketRes.content)
+              }
+            }
+          }
+        )
+      }
       infoList.push(fullSendData)
       socketSend(ws, fullSendData)
       isSending = false
@@ -135,8 +147,8 @@ request({
     infoList = res.data.page_data.reverse()
   }
 })
-const ws = createSocket(
-  { teacher: teacher.user_id, student: user.user_id },
+let ws = createSocket(
+  { teacher: teacher!.user_id, student: user.user_id },
   {
     message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log>) {
       if (socketRes.from_client_name.endsWith('teacher')) {
@@ -178,31 +190,70 @@ watch(
 // ==========
 
 let RtcDialogRef = $ref<typeof import("~/components/rtc-dialog/index.vue")['default']>()
-
-const ws2 = createSocket(
-  { teacher: teacher.user_id, student: '*' },
-  {
-    message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log & { operate: CHAT_OPERATION }>) {
-      console.info('enter message', socketRes);
-      if (socketRes.from_client_name.endsWith('teacher')) {
-        if (socketRes.content.dxzl_stu_user_id === user.user_id) {
-          console.info('start publisher ')
-          RtcDialogRef!.publisher(socketRes.content)
+let ws2: WebSocket
+onMounted(() => {
+  ws2 = createSocket(
+    { teacher: teacher.user_id, student: '*' },
+    {
+      message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log & { operate: CHAT_OPERATION }>) {
+        console.info('enter message', socketRes);
+        if (socketRes.from_client_name.endsWith('teacher')) {
+          if (socketRes.content.dxzl_stu_user_id === user.user_id) {
+            console.info('start publisher ')
+            RtcDialogRef!.publisher(socketRes.content)
+          }
         }
       }
     }
-  }
-)
-onMounted(() => {
+  )
   RtcDialogRef!.init(ws2)
 })
 
+onBeforeUnmount(() => {
+  ws?.close()
+  ws2?.close()
+})
+
 
 async function handleAudioChatStart() {
+  console.log('handleAudioChatStart ws2 : ', ws2)
+  if (!ws2||ws2.readyState !== 1) {
+    ws2 = createSocket(
+      { teacher: teacher.user_id, student: '*' },
+      {
+        message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log & { operate: CHAT_OPERATION }>) {
+          console.info('enter message', socketRes);
+          if (socketRes.from_client_name.endsWith('teacher')) {
+            if (socketRes.content.dxzl_stu_user_id === user.user_id) {
+              console.info('start publisher ')
+              RtcDialogRef!.publisher(socketRes.content)
+            }
+          }
+        }
+      }
+    )
+  }
   RtcDialogRef!.open(dyaw_xlfw_zxhd, 'audio')
 }
 
 async function handleVideoChatStart() {
+  console.log('handleVideoChatStart ws2 : ', ws2)
+  if (!ws2||ws2.readyState !== 1) {
+    ws2 = createSocket(
+      { teacher: teacher.user_id, student: '*' },
+      {
+        message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log & { operate: CHAT_OPERATION }>) {
+          console.info('enter message', socketRes);
+          if (socketRes.from_client_name.endsWith('teacher')) {
+            if (socketRes.content.dxzl_stu_user_id === user.user_id) {
+              console.info('start publisher ')
+              RtcDialogRef!.publisher(socketRes.content)
+            }
+          }
+        }
+      }
+    )
+  }
   RtcDialogRef!.open(dyaw_xlfw_zxhd, 'video')
 }
 

+ 35 - 13
src/pages/teacher/consult.vue

@@ -10,26 +10,48 @@ import { CHAT_STATUS, CHAT_OPERATION } from '~/types';
 
 let RtcDialogRef = $ref<typeof import("~/components/rtc-dialog/index.vue")['default']>()
 
-const ws2 = createSocket(
-  { teacher: user.user_id, student: '*' },
-  {
-    message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log & { operate: CHAT_OPERATION }>) {
-      console.info('enter message', socketRes);
-      if (socketRes.from_client_name.endsWith('student')) {
-        // infoList.push(socketRes.content)
-        if (socketRes.content.dxzl_tea_user_id === user.user_id) {
-          console.info('start publisher ')
-          RtcDialogRef!.publisher(socketRes.content)
+let ws2: WebSocket
+onMounted(() => {
+  ws2 = createSocket(
+    { teacher: user.user_id, student: '*' },
+    {
+      message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log & { operate: CHAT_OPERATION }>) {
+        console.info('enter message', socketRes);
+        if (socketRes.from_client_name.endsWith('student')) {
+          // infoList.push(socketRes.content)
+          if (socketRes.content.dxzl_tea_user_id === user.user_id) {
+            console.info('start publisher ')
+            RtcDialogRef!.publisher(socketRes.content)
+          }
         }
       }
     }
-  }
-)
-onMounted(() => {
+  )
   RtcDialogRef!.init(ws2)
 })
 
+onBeforeUnmount(() => {
+  ws2?.close()
+})
+
 function openRtcDialog(dyaw_xlfw_zxhd: type_dyaw_xlfw_zxhd, type: 'audio' | 'video') {
+  if(!ws2||ws2.readyState !== 1){
+    ws2 = createSocket(
+      { teacher: user.user_id, student: '*' },
+      {
+        message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log & { operate: CHAT_OPERATION }>) {
+          console.info('enter message', socketRes);
+          if (socketRes.from_client_name.endsWith('student')) {
+            // infoList.push(socketRes.content)
+            if (socketRes.content.dxzl_tea_user_id === user.user_id) {
+              console.info('start publisher ')
+              RtcDialogRef!.publisher(socketRes.content)
+            }
+          }
+        }
+      }
+    )
+  }
   RtcDialogRef!.open(dyaw_xlfw_zxhd, type)
 }
 

+ 28 - 0
src/pages/teacher/consult/chat-list.vue

@@ -73,6 +73,33 @@ async function handleClickSend(val?: string) {
         ...reqDate,
         dxzl_id: `${res.data.insert_id}`
       }
+      if (!ws||ws.readyState !== 1) {
+        ws = createSocket(
+          { teacher: user.user_id, student: dyaw_xlfw_zxhd.dxz_stu_user_id },
+          {
+            message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log & { $?: boolean, dxz_stu_user_id?: string, dyaw_xlfw_zxhd: type_dyaw_xlfw_zxhd }>) {
+              if (socketRes.from_client_name.endsWith('student')) {
+                if (socketRes.content.$) {
+                  if (socketRes.content?.dxz_stu_user_id === dyaw_xlfw_zxhd?.dxz_stu_user_id) {
+                    dyaw_xlfw_zxhd = socketRes.content.dyaw_xlfw_zxhd
+                  }
+                  return;
+                }
+                infoList.push(socketRes.content)
+                request({
+                  url: '/dyaw/xlfw_zxhd_log/index',
+                  data: {
+                    dxzl_stu_user_id: dyaw_xlfw_zxhd.dxz_stu_user_id,
+                    dxzl_tea_user_id: dyaw_xlfw_zxhd!.dxz_tea_user_id,
+                    limit: 0
+                  }
+                })
+
+              }
+            }
+          }
+        )
+      }
       infoList.push(fullSendData)
       socketSend(ws!, fullSendData)
       isSending = false
@@ -331,6 +358,7 @@ props.updateFnList.push(emitUpdateInfo)
 
 onBeforeUnmount(() => {
   props.updateFnList.splice(0)
+  ws?.close()
 })
 
 

+ 1 - 1
src/utils/ws.ts

@@ -24,7 +24,7 @@ export function createSocket(
         const data: TSocketRes<string> = JSON.parse(e.data)
         if (CLIENT_NAME === data.from_client_name) return
         if (!['ping'].includes(data.type)) {
-          console.groupCollapsed(`Socket : ${data.type}`)
+          console.groupCollapsed(`Socket : ${data.type}-${data.from_client_name}`)
           console.log(data);
           console.groupEnd();
         }