From b355f4e00973a20b33eb30b99f8f61233bc32f76 Mon Sep 17 00:00:00 2001 From: kron Date: Mon, 9 Feb 2026 15:10:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=B8=A2=E4=BA=BA=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis.js | 7 +++++++ src/components/PlayerSeats.vue | 4 +++- src/pages/battle-room.vue | 27 ++++++++++++++++++++++++--- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/apis.js b/src/apis.js index e463b14..b5f48b8 100644 --- a/src/apis.js +++ b/src/apis.js @@ -558,3 +558,10 @@ export const getBattleAPI = async (battleId) => { id: battleId, }); }; + +export const kickPlayerAPI = (number, userId) => { + return request("POST", "/user/room/kicking", { + number, + userId, + }); +}; diff --git a/src/components/PlayerSeats.vue b/src/components/PlayerSeats.vue index 44f86be..cb4c14f 100644 --- a/src/components/PlayerSeats.vue +++ b/src/components/PlayerSeats.vue @@ -80,6 +80,7 @@ const seats = new Array(props.total).fill(1); height: 100%; position: absolute; z-index: -1; + top: 0; } .avatar { display: flex; @@ -110,7 +111,8 @@ const seats = new Array(props.total).fill(1); .founder { position: absolute; background-color: #fed847; - top: 6px; + top: 0; + left: 0; color: #000; font-size: 10px; padding: 2px 5px; diff --git a/src/pages/battle-room.vue b/src/pages/battle-room.vue index 038a7a2..e520248 100644 --- a/src/pages/battle-room.vue +++ b/src/pages/battle-room.vue @@ -14,6 +14,7 @@ import { startRoomAPI, chooseTeamAPI, getReadyAPI, + kickPlayerAPI, } from "@/apis"; import { MESSAGETYPES, MESSAGETYPESV2 } from "@/constants"; @@ -43,6 +44,8 @@ async function refreshRoomData() { if (result.started) return; room.value = result; battleType.value = result.battleType; + owner.value = {}; + opponent.value = {}; const members = result.members || []; if (members.length === result.count) { allReady.value = members.every((m) => !!m.userInfo.state); @@ -132,7 +135,17 @@ async function onReceiveMessage(message) { if (msg.constructor === MESSAGETYPES.UserEnterRoom) { refreshRoomData(); } else if (msg.constructor === MESSAGETYPES.UserExitRoom) { - refreshRoomData(); + if (msg.userId === user.value.id) { + uni.showToast({ + title: "你被踢出房间", + icon: "none", + }); + setTimeout(() => { + uni.navigateBack(); + }, 1000); + } else { + refreshRoomData(); + } } else if (msg.constructor === MESSAGETYPES.TeamUpdate) { refreshRoomData(); } else if (msg.constructor === MESSAGETYPES.SomeoneIsReady) { @@ -176,7 +189,9 @@ const exitRoom = async () => { uni.navigateBack(); }; -const removePlayer = async (player) => {}; +const removePlayer = async (player) => { + await kickPlayerAPI(roomNumber.value, player.id); +}; onShareAppMessage(() => { return { @@ -262,6 +277,7 @@ onBeforeUnmount(() => { }} {{ opponent.name }}