123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- import { defineStore } from 'pinia'
- import { TemplateId } from './constant'
- import { useUserStore } from './user'
- import { mainURL, liveStreamURL } from '@/env'
- import {
- fetchRomms,
- fetchRoomMiniCode,
- fetchLeaderRoomMiniCode,
- insertRoom,
- updateRoom,
- deleteRoom,
- fetchRoomScenes,
- fetchRoomDetail,
- serverToLocal
- } from '@/api'
- import { Room as SRoom, Scenes } from '@/api'
- import { Dayjs } from 'dayjs'
- export type { RoomScene } from '@/api'
- export type Rooms = Room[]
- export type Room = SRoom & {
- miniCode?: string
- leaderMiniCode?: string
- scenes: Scenes,
- location?: string
- }
- export interface ShareLinkType {
- num: string
- name?: string
- roomId: number
- role?: string
- lang?: string
- avatar?: string
- userId?: string
- isTour?: string
- vlog?: string
- }
- export const createRoom = (room: Partial<Room>): Room => {
- const user = useUserStore().current
- return {
- id: TemplateId,
- leaderName: user.nickname.substring(0, 15),
- title: '',
- time: new Date().toDateString(),
- viewCount: 0,
- desc: '',
- cover: '',
- scenes: [],
- useTimeList: ['' as unknown as Dayjs, '' as unknown as Dayjs],
- maxMan: 10,
- ...room,
- }
- }
- export const useRoomStore = defineStore('room', {
- state: () => ({
- list: [] as Rooms,
- endlist: [] as Rooms,
- roomStatus: 0,
- shareLink: ''
- }),
- getters: {
- getNums:
- () =>
- <T extends Pick<Room, 'scenes'>>(room: T) =>
- room.scenes.map(scene => scene.num),
- getShareUrl: () => (param: ShareLinkType) => {
- const search = new URLSearchParams()
- search.set('m', `${param.num}`)
- search.set('role', `${param.role || 'leader'}`)
- param.name && search.set('name', `${param.name}`)
- search.set('roomId', `${param.roomId}`)
- param.avatar && search.set('avatar', param.avatar)
- param.lang && search.set('lang', param.lang)
- param.userId && search.set('vruserId', `${param.userId}`)
- param.isTour && search.set('isTour', `${param.isTour}`)
- if (Number(import.meta.env.VITE_SHOW_CONSOLE) == 1) {
- search.set('vlog', import.meta.env.VITE_SHOW_CONSOLE)
- }
- return liveStreamURL + '?' + search.toString()
- },
- filter: state => (keyowrd: string) => {
- return state.list.filter(room => room.title.includes(keyowrd))
- }
- },
- actions: {
- setRoomStatus(status: number) {
- this.roomStatus = status
- this.fetchList(status);
- },
- async fetchList(status?: number) {
- const srooms = await fetchRomms(status)
- this.list = srooms.map(room => ({ ...room, scenes: [] }))
- },
- // async fetchEndList() {
- // const srooms = await fetchRomms(2)
- // this.endlist = srooms.map(room => ({ ...room, scenes: [] }))
- // },
- async delete(room: Room) {
- await deleteRoom(room)
- const index = this.list.indexOf(room)
- if (~index) {
- this.list.splice(index, 1)
- }
- },
- async update(room: Room) {
- await updateRoom(room, this.getNums(room))
- await this.fetchList(this.roomStatus);
- },
- async insert(room: Omit<Room, 'id'>) {
- await insertRoom(room, this.getNums(room))
- // const sroom =
- // this.list.push({ ...room, ...sroom })
- console.log(this.roomStatus)
- this.fetchList(this.roomStatus);
- },
- async setRoomScenes(room: Room) {
- const roomInfo = await fetchRoomDetail(room.id)
- // debugger
- // const scenes = await fetchRoomScenes(room.id)
- room.scenes = roomInfo.sceneData.map(serverToLocal)
- return roomInfo
- },
- async setRoomMiniCode(room: Room) {
- const code = room.miniCode || (await fetchRoomMiniCode(room))
- room.miniCode = code
- },
- async setLeaderRoomMiniCode(room: Room) {
- const code = room.leaderMiniCode || (await fetchLeaderRoomMiniCode(room))
- room.leaderMiniCode = code
- },
- setShareLink(param: ShareLinkType) {
- const search = new URLSearchParams()
- search.set('m', `${param.num}`)
- search.set('role', `${param.role || 'leader'}`)
- param.name && search.set('name', `${param.name}`)
- search.set('roomId', `${param.roomId}`)
- param.lang && search.set('set', param.lang)
- this.shareLink = liveStreamURL + search.toString()
- }
- }
- })
|