|
@@ -1,25 +1,30 @@
|
|
-import { fetchRomms, fetchRoomMiniCode } from '@/api'
|
|
|
|
import { defineStore } from 'pinia'
|
|
import { defineStore } from 'pinia'
|
|
import { TemplateId } from './constant'
|
|
import { TemplateId } from './constant'
|
|
import { useUserStore } from './user'
|
|
import { useUserStore } from './user'
|
|
|
|
+import {
|
|
|
|
+ fetchRomms,
|
|
|
|
+ fetchRoomMiniCode,
|
|
|
|
+ insertRoom,
|
|
|
|
+ updateRoom,
|
|
|
|
+ deleteRoom,
|
|
|
|
+ fetchRoomScenes
|
|
|
|
+} from '@/api'
|
|
|
|
|
|
-import { Room as SRoom } from '@/api'
|
|
|
|
|
|
+import { Room as SRoom, Scenes } from '@/api'
|
|
|
|
|
|
export type { RoomScene } from '@/api'
|
|
export type { RoomScene } from '@/api'
|
|
export type Rooms = Room[]
|
|
export type Rooms = Room[]
|
|
-export type Room = SRoom & { miniCode?: string }
|
|
|
|
|
|
+export type Room = SRoom & { miniCode?: string; scenes: Scenes }
|
|
|
|
|
|
export const createRoom = (room: Partial<Room>): Room => {
|
|
export const createRoom = (room: Partial<Room>): Room => {
|
|
const user = useUserStore().current
|
|
const user = useUserStore().current
|
|
return {
|
|
return {
|
|
id: TemplateId,
|
|
id: TemplateId,
|
|
- userName: user.nickname,
|
|
|
|
leaderName: user.nickname,
|
|
leaderName: user.nickname,
|
|
title: '',
|
|
title: '',
|
|
time: new Date().toDateString(),
|
|
time: new Date().toDateString(),
|
|
viewCount: 0,
|
|
viewCount: 0,
|
|
desc: '',
|
|
desc: '',
|
|
- shareUrl: '',
|
|
|
|
cover: '',
|
|
cover: '',
|
|
scenes: [],
|
|
scenes: [],
|
|
...room
|
|
...room
|
|
@@ -31,14 +36,22 @@ export const useRoomStore = defineStore('room', {
|
|
list: [] as Rooms
|
|
list: [] as Rooms
|
|
}),
|
|
}),
|
|
getters: {
|
|
getters: {
|
|
|
|
+ getNums:
|
|
|
|
+ () =>
|
|
|
|
+ <T extends Pick<Room, 'scenes'>>(room: T) =>
|
|
|
|
+ room.scenes.map(scene => scene.num),
|
|
|
|
+ getShareUrl: () => (room: Room) =>
|
|
|
|
+ `https://test.4dkankan.com?roomId=${room.id}`,
|
|
filter: state => (keyowrd: string) =>
|
|
filter: state => (keyowrd: string) =>
|
|
state.list.filter(room => room.title.includes(keyowrd))
|
|
state.list.filter(room => room.title.includes(keyowrd))
|
|
},
|
|
},
|
|
actions: {
|
|
actions: {
|
|
- async fetch() {
|
|
|
|
- this.list = await fetchRomms()
|
|
|
|
|
|
+ async fetchList() {
|
|
|
|
+ const srooms = await fetchRomms()
|
|
|
|
+ this.list = srooms.map(room => ({ ...room, scenes: [] }))
|
|
},
|
|
},
|
|
async delete(room: Room) {
|
|
async delete(room: Room) {
|
|
|
|
+ await deleteRoom(room)
|
|
const index = this.list.indexOf(room)
|
|
const index = this.list.indexOf(room)
|
|
if (~index) {
|
|
if (~index) {
|
|
this.list.splice(index, 1)
|
|
this.list.splice(index, 1)
|
|
@@ -46,14 +59,22 @@ export const useRoomStore = defineStore('room', {
|
|
},
|
|
},
|
|
async update(room: Room) {
|
|
async update(room: Room) {
|
|
const storeRoom = this.list.find(({ id }) => id === room.id)
|
|
const storeRoom = this.list.find(({ id }) => id === room.id)
|
|
|
|
+ await updateRoom(room, this.getNums(room))
|
|
if (storeRoom) {
|
|
if (storeRoom) {
|
|
Object.assign(storeRoom, room)
|
|
Object.assign(storeRoom, room)
|
|
}
|
|
}
|
|
},
|
|
},
|
|
async insert(room: Omit<Room, 'id'>) {
|
|
async insert(room: Omit<Room, 'id'>) {
|
|
- this.list.push({ ...room, id: -1 })
|
|
|
|
|
|
+ await insertRoom(room, this.getNums(room))
|
|
|
|
+ // const sroom =
|
|
|
|
+ // this.list.push({ ...room, ...sroom })
|
|
|
|
+ this.fetchList()
|
|
},
|
|
},
|
|
- async setMiniCode(room: Room) {
|
|
|
|
|
|
+ async setRoomScenes(room: Room) {
|
|
|
|
+ const scenes = await fetchRoomScenes(room.id)
|
|
|
|
+ room.scenes = scenes
|
|
|
|
+ },
|
|
|
|
+ async setRoomMiniCode(room: Room) {
|
|
const code = room.miniCode || (await fetchRoomMiniCode(room))
|
|
const code = room.miniCode || (await fetchRoomMiniCode(room))
|
|
room.miniCode = code
|
|
room.miniCode = code
|
|
}
|
|
}
|