|
@@ -6,7 +6,7 @@
|
|
<view class="game-detail">
|
|
<view class="game-detail">
|
|
<view class="game-title">{{ gameInfo.title }}</view>
|
|
<view class="game-title">{{ gameInfo.title }}</view>
|
|
<view class="game-meta">
|
|
<view class="game-meta">
|
|
- <text>{{ gameInfo.players }}人</text>
|
|
|
|
|
|
+ <text>{{ gameInfo.minPlayers }}人-{{ gameInfo.maxPlayers }}人</text>
|
|
<text>{{ gameInfo.duration }}分钟</text>
|
|
<text>{{ gameInfo.duration }}分钟</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
@@ -27,10 +27,17 @@
|
|
<view class="random-name" @click="generateRandomName">随机名称</view>
|
|
<view class="random-name" @click="generateRandomName">随机名称</view>
|
|
</view>
|
|
</view>
|
|
|
|
|
|
- <view class="setting-item">
|
|
|
|
|
|
+ <view class="setting-item" v-if="gameInfo">
|
|
<view class="setting-label">最大人数</view>
|
|
<view class="setting-label">最大人数</view>
|
|
<view class="setting-slider">
|
|
<view class="setting-slider">
|
|
- <nut-range v-model="maxPlayers" :min="2" :max="12" inactive-color="#E5E5E5" button-color="#3C92FB" active-color="#3C92FB"></nut-range>
|
|
|
|
|
|
+ <nut-range
|
|
|
|
+ v-model="maxPlayers"
|
|
|
|
+ :min="gameInfo.minPlayers"
|
|
|
|
+ :max="gameInfo.maxPlayers"
|
|
|
|
+ inactive-color="#E5E5E5"
|
|
|
|
+ button-color="#3C92FB"
|
|
|
|
+ active-color="#3C92FB">
|
|
|
|
+ </nut-range>
|
|
<view class="slider-value">{{ maxPlayers }}人</view>
|
|
<view class="slider-value">{{ maxPlayers }}人</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
@@ -95,7 +102,7 @@ export default {
|
|
|
|
|
|
// 房间设置
|
|
// 房间设置
|
|
const roomName = ref('')
|
|
const roomName = ref('')
|
|
- const maxPlayers = ref(6)
|
|
|
|
|
|
+ const maxPlayers = ref(0) // 初始值会在游戏加载后设置
|
|
const roomVisibility = ref('private')
|
|
const roomVisibility = ref('private')
|
|
const roomPassword = ref('')
|
|
const roomPassword = ref('')
|
|
|
|
|
|
@@ -133,14 +140,8 @@ export default {
|
|
// 设置默认房间名
|
|
// 设置默认房间名
|
|
roomName.value = `${game.title}房间`
|
|
roomName.value = `${game.title}房间`
|
|
|
|
|
|
- // 从游戏的人数范围设置最大人数
|
|
|
|
- const playersRange = game.players.split('-')
|
|
|
|
- if (playersRange.length > 1) {
|
|
|
|
- const max = parseInt(playersRange[1])
|
|
|
|
- if (!isNaN(max)) {
|
|
|
|
- maxPlayers.value = Math.min(max, 12) // 限制最大12人
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ // 设置最大人数默认值为游戏的最大人数
|
|
|
|
+ maxPlayers.value = game.maxPlayers
|
|
}
|
|
}
|
|
} catch (error) {
|
|
} catch (error) {
|
|
console.error('获取游戏信息失败:', error)
|
|
console.error('获取游戏信息失败:', error)
|
|
@@ -169,34 +170,46 @@ export default {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
- try {
|
|
|
|
- Taro.showLoading({ title: '创建房间中...' })
|
|
|
|
-
|
|
|
|
- // 构建房间数据 - 不需要包含用户信息,store内部会处理
|
|
|
|
- const roomData = {
|
|
|
|
- id: `room_${Date.now()}_${Math.floor(Math.random() * 1000)}`,
|
|
|
|
- name: roomName.value,
|
|
|
|
- gameId: gameInfo.value?.id || '',
|
|
|
|
- gameTitle: gameInfo.value?.title || '',
|
|
|
|
- maxPlayers: maxPlayers.value,
|
|
|
|
- visibility: roomVisibility.value as RoomVisibility,
|
|
|
|
- password: roomVisibility.value === 'private' ? roomPassword.value : undefined,
|
|
|
|
- hosterId: userStore.openid,
|
|
|
|
- createTime: Date.now(),
|
|
|
|
- status: RoomStatus.WAITING,
|
|
|
|
- users: [] // 空数组,store内部会添加主持人信息
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const result = await roomStore.createRoom(roomData)
|
|
|
|
-
|
|
|
|
- if (result.success && result.roomId) {
|
|
|
|
- // 导航到房间页面
|
|
|
|
- roomStore.navigateToRoomPage(result.roomId)
|
|
|
|
- } else {
|
|
|
|
- throw new Error(result.message || '创建房间失败')
|
|
|
|
|
|
+ if (!gameInfo.value) {
|
|
|
|
+ Taro.showToast({
|
|
|
|
+ title: '游戏信息不存在',
|
|
|
|
+ icon: 'none'
|
|
|
|
+ })
|
|
|
|
+ return
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ Taro.showLoading({ title: '创建房间中...' })
|
|
|
|
+
|
|
|
|
+ // 构建房间数据 - 使用滑块选择的最大人数
|
|
|
|
+ const roomData = {
|
|
|
|
+ id: `room_${Date.now()}_${Math.floor(Math.random() * 1000)}`,
|
|
|
|
+ name: roomName.value,
|
|
|
|
+ gameId: gameInfo.value.id || '',
|
|
|
|
+ gameTitle: gameInfo.value.title || '',
|
|
|
|
+ maxPlayers: maxPlayers.value, // 使用滑块选择的人数
|
|
|
|
+ visibility: roomVisibility.value as RoomVisibility,
|
|
|
|
+ password: roomVisibility.value === 'private' ? roomPassword.value : undefined,
|
|
|
|
+ hosterId: userStore.openid,
|
|
|
|
+ createTime: Date.now(),
|
|
|
|
+ status: RoomStatus.WAITING,
|
|
|
|
+ users: [] // 空数组,store内部会添加主持人信息
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const result = await roomStore.createRoom(roomData)
|
|
|
|
+
|
|
|
|
+ if (result.success && result.roomId) {
|
|
|
|
+ // 导航到房间页面
|
|
|
|
+ roomStore.navigateToRoomPage(result.roomId)
|
|
|
|
+ } else {
|
|
|
|
+ throw new Error(result.message || '创建房间失败')
|
|
|
|
+ }
|
|
} catch (error) {
|
|
} catch (error) {
|
|
- // 错误处理...
|
|
|
|
|
|
+ console.error('创建房间失败:', error)
|
|
|
|
+ Taro.showToast({
|
|
|
|
+ title: error instanceof Error ? error.message : '创建房间失败',
|
|
|
|
+ icon: 'none'
|
|
|
|
+ })
|
|
} finally {
|
|
} finally {
|
|
Taro.hideLoading()
|
|
Taro.hideLoading()
|
|
}
|
|
}
|