// src/stores/group.ts import { defineStore } from 'pinia' import { ref, computed } from 'vue' import type { Group, User } from '@/types' import { pb } from '@/api/pocketbase' import { getUserGroups, getGroup, getGroupMembers } from '@/api/groups' export const useGroupStore = defineStore('group', () => { // 状态 const groups = ref([]) const currentGroup = ref(null) const currentMembers = ref([]) const loading = ref(false) // 计算属性 const currentGroupId = computed(() => currentGroup.value?.id || '') const isGroupOwner = computed(() => { return currentGroup.value?.owner === pb.authStore.model?.id }) // 加载用户的群组列表 async function loadGroups() { try { loading.value = true groups.value = await getUserGroups() } catch (error) { console.error('加载群组列表失败:', error) } finally { loading.value = false } } // 设置当前群组 async function setCurrentGroup(groupId: string) { try { loading.value = true currentGroup.value = await getGroup(groupId) currentMembers.value = await getGroupMembers(groupId) as unknown as User[] } catch (error) { console.error('加载群组详情失败:', error) throw error } finally { loading.value = false } } // 清除当前群组 function clearCurrentGroup() { currentGroup.value = null currentMembers.value = [] } // 更新群组成员列表 function updateMembers(members: User[]) { currentMembers.value = members } // 添加群组到列表 function addGroup(group: Group) { groups.value.push(group) } // 从列表中移除群组 function removeGroup(groupId: string) { const index = groups.value.findIndex(g => g.id === groupId) if (index !== -1) { groups.value.splice(index, 1) } if (currentGroup.value?.id === groupId) { clearCurrentGroup() } } return { groups, currentGroup, currentMembers, loading, currentGroupId, isGroupOwner, loadGroups, setCurrentGroup, clearCurrentGroup, updateMembers, addGroup, removeGroup } })