room.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import { defineStore } from 'pinia'
  2. import { TemplateId } from './constant'
  3. import { useUserStore } from './user'
  4. import { mainURL, liveStreamURL } from '@/env'
  5. import {
  6. fetchRomms,
  7. fetchRoomMiniCode,
  8. fetchLeaderRoomMiniCode,
  9. insertRoom,
  10. updateRoom,
  11. deleteRoom,
  12. fetchRoomScenes,
  13. fetchRoomDetail,
  14. serverToLocal
  15. } from '@/api'
  16. import { Room as SRoom, Scenes } from '@/api'
  17. import { Dayjs } from 'dayjs'
  18. export type { RoomScene } from '@/api'
  19. export type Rooms = Room[]
  20. export type Room = SRoom & {
  21. miniCode?: string
  22. leaderMiniCode?: string
  23. scenes: Scenes,
  24. location?: string
  25. }
  26. export interface ShareLinkType {
  27. num: string
  28. name?: string
  29. roomId: number
  30. role?: string
  31. lang?: string
  32. avatar?: string
  33. userId?: string
  34. isTour?: string
  35. vlog?: string
  36. }
  37. export const createRoom = (room: Partial<Room>): Room => {
  38. const user = useUserStore().current
  39. return {
  40. id: TemplateId,
  41. leaderName: user.nickname.substring(0, 15),
  42. title: '',
  43. time: new Date().toDateString(),
  44. viewCount: 0,
  45. desc: '',
  46. cover: '',
  47. scenes: [],
  48. useTimeList: ['' as unknown as Dayjs, '' as unknown as Dayjs],
  49. maxMan: 10,
  50. ...room,
  51. }
  52. }
  53. export const useRoomStore = defineStore('room', {
  54. state: () => ({
  55. list: [] as Rooms,
  56. endlist: [] as Rooms,
  57. roomStatus: 0,
  58. shareLink: ''
  59. }),
  60. getters: {
  61. getNums:
  62. () =>
  63. <T extends Pick<Room, 'scenes'>>(room: T) =>
  64. room.scenes.map(scene => scene.num),
  65. getShareUrl: () => (param: ShareLinkType) => {
  66. const search = new URLSearchParams()
  67. search.set('m', `${param.num}`)
  68. search.set('role', `${param.role || 'leader'}`)
  69. param.name && search.set('name', `${param.name}`)
  70. search.set('roomId', `${param.roomId}`)
  71. param.avatar && search.set('avatar', param.avatar)
  72. param.lang && search.set('lang', param.lang)
  73. param.userId && search.set('vruserId', `${param.userId}`)
  74. param.isTour && search.set('isTour', `${param.isTour}`)
  75. if (Number(import.meta.env.VITE_SHOW_CONSOLE) == 1) {
  76. search.set('vlog', import.meta.env.VITE_SHOW_CONSOLE)
  77. }
  78. return liveStreamURL + '?' + search.toString()
  79. },
  80. filter: state => (keyowrd: string) => {
  81. return state.list.filter(room => room.title.includes(keyowrd))
  82. }
  83. },
  84. actions: {
  85. setRoomStatus(status: number) {
  86. this.roomStatus = status
  87. this.fetchList(status);
  88. },
  89. async fetchList(status?: number) {
  90. const srooms = await fetchRomms(status)
  91. this.list = srooms.map(room => ({ ...room, scenes: [] }))
  92. },
  93. // async fetchEndList() {
  94. // const srooms = await fetchRomms(2)
  95. // this.endlist = srooms.map(room => ({ ...room, scenes: [] }))
  96. // },
  97. async delete(room: Room) {
  98. await deleteRoom(room)
  99. const index = this.list.indexOf(room)
  100. if (~index) {
  101. this.list.splice(index, 1)
  102. }
  103. },
  104. async update(room: Room) {
  105. await updateRoom(room, this.getNums(room))
  106. await this.fetchList(this.roomStatus);
  107. },
  108. async insert(room: Omit<Room, 'id'>) {
  109. await insertRoom(room, this.getNums(room))
  110. // const sroom =
  111. // this.list.push({ ...room, ...sroom })
  112. console.log(this.roomStatus)
  113. this.fetchList(this.roomStatus);
  114. },
  115. async setRoomScenes(room: Room) {
  116. const roomInfo = await fetchRoomDetail(room.id)
  117. // debugger
  118. // const scenes = await fetchRoomScenes(room.id)
  119. room.scenes = roomInfo.sceneData.map(serverToLocal)
  120. return roomInfo
  121. },
  122. async setRoomMiniCode(room: Room) {
  123. const code = room.miniCode || (await fetchRoomMiniCode(room))
  124. room.miniCode = code
  125. },
  126. async setLeaderRoomMiniCode(room: Room) {
  127. const code = room.leaderMiniCode || (await fetchLeaderRoomMiniCode(room))
  128. room.leaderMiniCode = code
  129. },
  130. setShareLink(param: ShareLinkType) {
  131. const search = new URLSearchParams()
  132. search.set('m', `${param.num}`)
  133. search.set('role', `${param.role || 'leader'}`)
  134. param.name && search.set('name', `${param.name}`)
  135. search.set('roomId', `${param.roomId}`)
  136. param.lang && search.set('set', param.lang)
  137. this.shareLink = liveStreamURL + search.toString()
  138. }
  139. }
  140. })