fix: rewrite backend hooks, fix invitation flow, align frontend API, fix component naming

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
congsh
2026-04-17 16:30:05 +08:00
parent b1a9995767
commit 0acc1e12e1
6 changed files with 144 additions and 170 deletions
+4 -25
View File
@@ -1,8 +1,6 @@
// src/api/invitations.ts
import pb from './pocketbase'
import type { Invitation, InviteStatus } from '@/types'
import { joinTeamSession } from './sessions'
import { updateUserStatus } from './users'
import type { Invitation } from '@/types'
// 发送邀请
export async function sendInvitation(data: {
@@ -71,35 +69,16 @@ export async function respondInvitation(
response: 'accepted' | 'rejected',
rejectReason?: string
) {
const user = pb.authStore.model
if (!user) throw new Error('未登录')
const invitation = await pb.collection('invitations').getOne(invitationId)
if (invitation.to !== user.id) {
throw new Error('无权操作此邀请')
}
const updateData: Partial<Invitation> = {
status: response as InviteStatus,
respondedAt: new Date().toISOString()
const updateData: Record<string, unknown> = {
status: response
}
if (response === 'rejected' && rejectReason) {
updateData.rejectReason = rejectReason
}
// 更新邀请状态
// 后端 hook 会自动处理:加入 team members + 更新用户状态
await pb.collection('invitations').update(invitationId, updateData)
// 如果接受,加入临时小组
if (response === 'accepted') {
await joinTeamSession(invitation.teamSession)
// 更新用户状态
await updateUserStatus('in_team')
}
return updateData
}
// 订阅邀请变更
-11
View File
@@ -51,17 +51,6 @@ export async function updateTeamStatus(sessionId: string, status: TeamStatus): P
// 结束游戏(解散临时小组)
export async function endGame(sessionId: string) {
const session = await pb.collection('teamSessions').getOne(sessionId)
// 将所有成员状态恢复为 idle
const members = session.members as string[]
const updatePromises = members.map(userId =>
pb.collection('users').update(userId, { status: 'idle' })
)
await Promise.all(updatePromises)
// 解散临时小组
return updateTeamStatus(sessionId, 'dissolved')
}
@@ -21,12 +21,18 @@ const idleMembers = computed(() =>
)
async function inviteMember(userId: string, username: string) {
const { getActiveTeamSession } = await import('@/api/sessions')
const session = await getActiveTeamSession()
if (!session) {
ElMessage.warning('请先创建临时小组')
return
}
try {
// 这里需要先创建临时小组,或者检查是否有活跃的临时小组
// 简化版本:发送邀请
await sendInvitation({
to: userId,
teamSession: '' // 实际使用时需要先创建临时小组
teamSession: session.id
})
ElMessage.success(`已邀请 ${username}`)
} catch (error: any) {
+2 -2
View File
@@ -57,7 +57,7 @@ async function refreshMembers() {
<!-- 主内容区 -->
<main class="main-content">
<idle-membersList status="idle" />
<IdleMembersList status="idle" />
</main>
<!-- 右侧边栏 -->
@@ -70,7 +70,7 @@ async function refreshMembers() {
</div>
</template>
<idle-membersList />
<IdleMembersList />
</el-card>
</aside>
</div>
+1 -1
View File
@@ -110,7 +110,7 @@ function selectGroup(groupId: string) {
<h3>空闲成员</h3>
</template>
<idle-membersList />
<IdleMembersList />
</el-card>
</aside>
</div>