123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 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
- } from '@/api'
- import { Room as SRoom, Scenes } from '@/api'
- export type { RoomScene } from '@/api'
- export type Rooms = Room[]
- export type Room = SRoom & {
- miniCode?: string
- leaderMiniCode?: string
- scenes: Scenes
- }
- export interface ShareLinkType {
- num: string
- name?: string
- roomId: number
- role?: string
- lang?: string
- avatar?: string
- userId?: 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: [],
- ...room
- }
- }
- export const useRoomStore = defineStore('room', {
- state: () => ({
- list: [] as Rooms,
- 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', `roomId_${param.roomId}`)
- param.avatar && search.set('avatar', param.avatar)
- param.lang && search.set('set', param.lang)
- param.userId && search.set('vruserId', `user_${param.userId}`)
- search.set('isTour', '0')
- return liveStreamURL + '?' + search.toString()
- },
- filter: state => (keyowrd: string) =>
- state.list.filter(room => room.title.includes(keyowrd))
- },
- actions: {
- async fetchList() {
- const srooms = await fetchRomms()
- this.list = 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()
- },
- async insert(room: Omit<Room, 'id'>) {
- await insertRoom(room, this.getNums(room))
- // const sroom =
- // this.list.push({ ...room, ...sroom })
- this.fetchList()
- },
- async setRoomScenes(room: Room) {
- const scenes = await fetchRoomScenes(room.id)
- room.scenes = scenes
- },
- 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()
- }
- }
- })
|