useRoom.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import browser from '/@/utils/browser';
  2. import axios, { AxiosResponse } from 'axios';
  3. import { ref, computed, unref } from 'vue';
  4. import { useRtcStore } from '../store/modules/rtc';
  5. const roomParam = browser.getURLParam('roomId');
  6. interface roomDataType extends SceneItemType {
  7. sceneData: SceneItemType[];
  8. }
  9. export interface SceneItemType {
  10. id: number;
  11. roomId: number;
  12. buildObjStatus: number;
  13. createTime: string;
  14. name: string;
  15. num: string;
  16. payStatus: number;
  17. sceneName: string;
  18. snCode: string;
  19. status: number;
  20. thumb: string;
  21. title: string;
  22. viewCount: number;
  23. isLaser: boolean;
  24. type: number;
  25. phone: Nullable<string>;
  26. bind: boolean;
  27. takeLookLock: number;
  28. maxMan: number;
  29. }
  30. export const room = ref<Nullable<roomDataType>>(null);
  31. export const roomId = roomParam;
  32. export const sceneList = computed<SceneItemType[]>(() => unref(room)?.sceneData || []);
  33. export const isLeader = browser.getURLParam('role') === 'leader';
  34. interface roomParamsType {
  35. name: string;
  36. role: string;
  37. vruserId: string;
  38. isTour: number;
  39. roomId: string;
  40. avatar: string;
  41. }
  42. interface getSignType {
  43. expire: number;
  44. sdkAppId: number;
  45. sign: string;
  46. }
  47. function createNewURL(params: roomParamsType): string {
  48. let tempUrl = window.location.href;
  49. // ['mode', 'name', 'role', 'vruserId']
  50. Object.keys(params).forEach((item) => {
  51. tempUrl = browser.replaceQueryString(tempUrl, item, params[item]);
  52. console.log('tempUrl', tempUrl);
  53. });
  54. return tempUrl;
  55. }
  56. function createNewURLEntry(params: roomParamsType) {
  57. const tempUrl = createNewURL(params);
  58. history.replaceState(null, '', tempUrl);
  59. }
  60. export function useRoom() {
  61. return {
  62. room,
  63. sceneList,
  64. currentScene,
  65. changeScene,
  66. initialRoom,
  67. enterRoom,
  68. leaveRoom,
  69. createNewURLEntry,
  70. createNewURL,
  71. getSign,
  72. validPassRoom,
  73. shareRoom,
  74. };
  75. }
  76. export const currentScene = computed(() => {
  77. const num = browser.getURLParam('m');
  78. return sceneList.value.find((scene) => scene.num === num);
  79. });
  80. export const changeScene = (scene: SceneItemType) => {
  81. const rtcStore = useRtcStore();
  82. if (currentScene.value?.num !== scene.num && scene?.num.length) {
  83. console.log(scene, currentScene.value);
  84. const params = new URLSearchParams(location.search);
  85. params.set('m', scene.num);
  86. const url = new URL(location.href);
  87. url.search = `?` + params.toString();
  88. location.replace(url);
  89. rtcStore.clearMemberList();
  90. } else {
  91. // location.reload();
  92. }
  93. };
  94. const shopAxios = axios.create({
  95. // baseURL: !import.meta.env.DEV ? import.meta.env.VITE_APP_APIS_URL : '',
  96. baseURL: import.meta.env.VITE_APP_APIS_URL,
  97. });
  98. export const initialRoom = async () => {
  99. const res = await shopAxios.get('/takelook/roomInfo', { params: { roomId } });
  100. room.value = res.data.data;
  101. console.log('initialRoom', unref(room));
  102. };
  103. export const enterRoom = async () => {
  104. if (!isLeader) return;
  105. const rtcStore = useRtcStore();
  106. const userID = rtcStore.userId || browser.getURLParam('vruserId');
  107. console.log('111', room.value);
  108. await shopAxios.get('/takelook/inOrOutRoom', {
  109. params: {
  110. type: 0,
  111. role: 'leader',
  112. roomId,
  113. userId: userID,
  114. },
  115. });
  116. };
  117. export const leaveRoom = async () => {
  118. if (!isLeader) return;
  119. await shopAxios.get('/takelook/inOrOutRoom', {
  120. params: {
  121. type: 1,
  122. role: 'leader',
  123. roomId,
  124. },
  125. });
  126. };
  127. export const shareRoom = async (roomId: string, userId: string) => {
  128. if (!isLeader) return;
  129. return shopAxios.get('/takelook/shareRoom', {
  130. params: {
  131. userId,
  132. roomId,
  133. },
  134. });
  135. };
  136. if (roomId) {
  137. shopAxios.get('/takelook/roomAddView', { params: { roomId } });
  138. }
  139. export const getSign = async (userId: string): Promise<getSignType> => {
  140. const res = await shopAxios.get<AxiosResponse>('/takelook/tencentYun/getSign', {
  141. params: {
  142. userId,
  143. },
  144. });
  145. return res.data.data;
  146. };
  147. export const validPassRoom = async (roomId: string, password: string) => {
  148. const res = await shopAxios.post('/takelook/checkRoomVisitPassword', {
  149. roomId: roomId,
  150. password: password,
  151. });
  152. return res.data?.data || false;
  153. };