consult.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <script setup lang='ts'>
  2. import type { type_dyaw_xlfw_zxhd, type_dyaw_xlfw_zxhd_log, type_archives_item } from '~/types';
  3. import user from '~/store/user';
  4. import type { TSocketRes } from '~/utils/ws';
  5. import { CHAT_STATUS, CHAT_OPERATION } from '~/types';
  6. // ==========
  7. // chat audio/video
  8. // ==========
  9. let RtcDialogRef = $ref<typeof import("~/components/rtc-dialog/index.vue")['default']>()
  10. const ws2 = createSocket(
  11. { teacher: user.user_id, student: '*' },
  12. {
  13. message(socketRes: TSocketRes<type_dyaw_xlfw_zxhd_log & { operate: CHAT_OPERATION }>) {
  14. console.info('enter message', socketRes);
  15. if (socketRes.from_client_name.endsWith('student')) {
  16. // infoList.push(socketRes.content)
  17. if (socketRes.content.dxzl_tea_user_id === user.user_id) {
  18. console.info('start publisher ')
  19. RtcDialogRef!.publisher(socketRes.content)
  20. }
  21. }
  22. }
  23. }
  24. )
  25. onMounted(() => {
  26. RtcDialogRef!.init(ws2)
  27. })
  28. function openRtcDialog(dyaw_xlfw_zxhd: type_dyaw_xlfw_zxhd, type: 'audio' | 'video') {
  29. RtcDialogRef!.open(dyaw_xlfw_zxhd, type)
  30. }
  31. const updateFnList = $ref<Function[]>([])
  32. function emitUpdateInfo(info: type_dyaw_xlfw_zxhd_log, isUpdate?: boolean) {
  33. updateFnList.forEach(fn => fn(info, isUpdate))
  34. }
  35. </script>
  36. <template>
  37. <RouterView @openRtcDialog="openRtcDialog" :update-fn-list="updateFnList"></RouterView>
  38. <rtc-dialog ref="RtcDialogRef" @update-info="emitUpdateInfo"></rtc-dialog>
  39. </template>