room.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import {
  2. GET_ROOM_LIST,
  3. GET_ROOM_MINI_CODE,
  4. DEL_ROOM,
  5. SET_ROOM,
  6. GET_ROOM,
  7. GET_ROOM_LEADER_MINI_CODE,
  8. ROOM_ACTION_CHECKER
  9. } from './constant'
  10. import axios from './instance'
  11. import type { PageResult, Scene } from './'
  12. import type { SScene } from './scene'
  13. import type { Dayjs } from 'dayjs'
  14. import { head } from 'lodash-es'
  15. export type SRoom = {
  16. roomId: number
  17. roomTitle: string
  18. roomInfo: string
  19. roomHostName: string
  20. roomStatus: number
  21. hostStatus: number
  22. roomCoverUrl: string
  23. roomViewCount: number
  24. createTime: string
  25. useTimeList?: [Dayjs, Dayjs],
  26. visitPassword?: string,
  27. maxMan?: number,
  28. isRoamMode?: boolean,
  29. freeRoamLock?: number
  30. takeLookLock?: number
  31. userObjList?: AuthUser[]
  32. location?: string
  33. image?: string[]
  34. head?: string
  35. gps?: string
  36. video?: string[]
  37. }
  38. export interface RoomScene {
  39. num: string
  40. title: string
  41. cover: string
  42. }
  43. export type AuthUser = {
  44. userName: string
  45. useTimeList?: [Dayjs, Dayjs]
  46. }
  47. export interface Room {
  48. id: number
  49. title: string
  50. desc: string
  51. time: string
  52. viewCount: number
  53. cover: string
  54. leaderName: string
  55. roomStatus?: number
  56. hostStatus?: number
  57. useTimeList?: [Dayjs, Dayjs],
  58. visitPassword?: string,
  59. maxMan?: number,
  60. isRoamMode?: boolean,
  61. freeRoamLock?: number
  62. takeLookLock?: number
  63. userObjList?: AuthUser[],
  64. scenesAvatar?: string
  65. scenesAlbum?: string[]
  66. scenesVideo?: string
  67. gps?: string
  68. }
  69. export type Rooms = Room[]
  70. const serverToLocal = (sroom: SRoom): Room => ({
  71. id: sroom.roomId,
  72. title: sroom.roomTitle,
  73. desc: sroom.roomInfo,
  74. time: sroom.createTime,
  75. viewCount: sroom.roomViewCount,
  76. cover: sroom.roomCoverUrl,
  77. leaderName: sroom.roomHostName,
  78. useTimeList: sroom.useTimeList,
  79. maxMan: sroom.maxMan,
  80. roomStatus: sroom.roomStatus,
  81. hostStatus: sroom.hostStatus,
  82. visitPassword: sroom.visitPassword,
  83. userObjList: sroom.userObjList,
  84. scenesAlbum: sroom.image,
  85. scenesAvatar: sroom.head,
  86. scenesVideo: sroom.video?.length ? sroom.video[0] : '',
  87. })
  88. const localToServer = (room: Room): SRoom => ({
  89. roomId: room.id,
  90. roomTitle: room.title,
  91. roomInfo: room.desc,
  92. roomHostName: room.leaderName,
  93. roomCoverUrl: room.cover,
  94. roomViewCount: room.viewCount,
  95. createTime: room.time,
  96. roomStatus: room.roomStatus || 0,
  97. hostStatus: room.roomStatus || 0,
  98. useTimeList: room.useTimeList,
  99. maxMan: room.maxMan,
  100. visitPassword: room.visitPassword,
  101. takeLookLock: room.takeLookLock || 0,
  102. freeRoamLock: room.freeRoamLock || 0,
  103. userObjList: room.userObjList,
  104. image: room.scenesAlbum,
  105. head: room.scenesAvatar,
  106. video: [room.scenesVideo || ''],
  107. })
  108. export const fetchRomms = async (status: number = 1): Promise<Rooms> => {
  109. const res = await axios.post<PageResult<SRoom>>(GET_ROOM_LIST, {
  110. pageNum: 1,
  111. pageSize: 1000,
  112. roomStatus: status,
  113. })
  114. const rooms = res.list.map(serverToLocal)
  115. return rooms
  116. }
  117. export const deleteRoom = async (room: Room) => {
  118. await axios.post(DEL_ROOM, { roomId: room.id })
  119. }
  120. export const insertRoom = async (
  121. room: Omit<Room, 'id'>,
  122. numList: Scene['num'][],
  123. ) => {
  124. const param = {
  125. ...localToServer({ ...room, id: -1 }),
  126. roomId: null,
  127. createTime: null,
  128. numList
  129. }
  130. console.log('param', param)
  131. const sroom = await axios.post<SRoom>(SET_ROOM, param)
  132. return serverToLocal(sroom)
  133. }
  134. export const updateRoom = async (room: Room, numList: Scene['num'][]) => {
  135. await axios.post(SET_ROOM, {
  136. ...localToServer(room),
  137. numList
  138. })
  139. }
  140. export const fetchRoomMiniCode = async (room: Room) => {
  141. return axios.get<string>(GET_ROOM_MINI_CODE, { params: { roomId: room.id } })
  142. }
  143. export const fetchLeaderRoomMiniCode = async (room: Room) => {
  144. return axios.get<string>(GET_ROOM_LEADER_MINI_CODE, {
  145. params: { roomId: room.id }
  146. })
  147. }
  148. interface RoomDetailType extends SRoom {
  149. sceneData: SScene[],
  150. }
  151. export const fetchRoomDetail = async (roomId: Room['id']) => {
  152. const res = await axios.get<RoomDetailType>(GET_ROOM, {
  153. params: { roomId }
  154. })
  155. return res
  156. }
  157. export const checkRoomEditOrDel = async (room: Room) => {
  158. return axios.get<string>(ROOM_ACTION_CHECKER, {
  159. params: { roomId: room.id }
  160. })
  161. }