1
This commit is contained in:
@@ -144,6 +144,12 @@ const loadPlayersData = () => {
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
|
||||
// 从本地存储加载当前局数
|
||||
const savedRound = uni.getStorageSync('currentRound')
|
||||
if (savedRound) {
|
||||
roundCount.value = parseInt(savedRound)
|
||||
}
|
||||
}
|
||||
|
||||
// 保存历史状态
|
||||
@@ -157,6 +163,9 @@ const saveHistoryState = () => {
|
||||
|
||||
// 返回上一页
|
||||
const goBack = () => {
|
||||
// 保存当前局数到本地存储
|
||||
uni.setStorageSync('currentRound', roundCount.value)
|
||||
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '当前分数未保存,确定要返回吗?',
|
||||
@@ -324,6 +333,9 @@ const clearInput = () => {
|
||||
|
||||
// 确认输入
|
||||
const confirmInput = () => {
|
||||
// 保存当前局数到本地存储
|
||||
uni.setStorageSync('currentRound', roundCount.value)
|
||||
|
||||
if (selectedPlayerIndex.value !== -1) {
|
||||
// 播放音效
|
||||
if (soundEnabled.value) {
|
||||
|
||||
@@ -84,12 +84,6 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!--
|
||||
<view>
|
||||
<button @click="postscore">提交分数</button>
|
||||
<input v-model="score.value.playerId" type="number" placeholder="输入分数" :src="score.value.playerId">
|
||||
</view> -->
|
||||
|
||||
<!-- 底部操作按钮 -->
|
||||
<view class="bottom-buttons">
|
||||
<button class="start-btn" type="primary" @click="startScoring">开局计分</button>
|
||||
@@ -101,15 +95,41 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, computed, onMounted, onUnmounted, toRaw } from 'vue'
|
||||
import { GET,POST } from '../../../utils/request'
|
||||
import { GET,POST,PUT } from '../../../utils/request'
|
||||
import { BASE_URL } from '../../../utils/CommonValues.js';
|
||||
const roomuser=ref({
|
||||
roomId: '',
|
||||
userId: '',
|
||||
score:'',
|
||||
playerType:'0',
|
||||
nickName:'',
|
||||
avatar:''
|
||||
})
|
||||
const res=ref(null)
|
||||
// const score=ref(
|
||||
// playerId: currentUser.id
|
||||
// )
|
||||
const scoreuser=ref({
|
||||
openId: '',
|
||||
nickName: '',
|
||||
avatar: 'scoring\static\avatar14.png'
|
||||
})
|
||||
const room=ref({
|
||||
createUser:'1',
|
||||
odds:1,
|
||||
room_status:0,
|
||||
bossId:'1',
|
||||
roomName:'',
|
||||
})
|
||||
const detailscore=ref({
|
||||
roomId: '',
|
||||
userId: '',
|
||||
score:'',
|
||||
gameTime:'',
|
||||
detailType:'0',
|
||||
|
||||
})
|
||||
|
||||
const getuserinfo =()=>{
|
||||
GET('/score/info/list',null,).then(res=>{
|
||||
// 错误1:GET参数后多了多余逗号 → 已删除
|
||||
GET('/score/info/list',null).then(res=>{
|
||||
console.log('获取用户信息成功:', res.data)
|
||||
|
||||
// 检查API返回数据结构
|
||||
@@ -139,11 +159,12 @@ const getuserinfo =()=>{
|
||||
}
|
||||
|
||||
const newPlayer = {
|
||||
id: `player_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
|
||||
id: user.userId, // 使用后端返回的userId作为玩家id
|
||||
name: user.nickName, // 使用API返回的nickName作为玩家名称
|
||||
avatar: avatarUrl, // 使用处理后的头像URL
|
||||
score: 0,
|
||||
roundScores: []
|
||||
roundScores: [],
|
||||
roomId: roomId.value // 当前房间ID
|
||||
};
|
||||
players.value.push(newPlayer);
|
||||
}
|
||||
@@ -172,25 +193,190 @@ const getuserinfo =()=>{
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
// const postscore = () => {
|
||||
// POST('/a/post',score.value).then(r=>{
|
||||
// console.log('提交分数成功:', r.data,)
|
||||
// console.log(score.value)
|
||||
// res.value=r.data
|
||||
// }).catch(err=>{
|
||||
// console.error('提交分数失败:', err);
|
||||
// })
|
||||
// }
|
||||
const UserId=ref('')
|
||||
const postuserinfo = () => {
|
||||
POST('/score/info', scoreuser.value).then(r => {
|
||||
console.log('用户信息上传成功:', r);
|
||||
UserId.value = r.data.data.userId;
|
||||
console.log('用户ID:', UserId.value);
|
||||
room.value.createUser = UserId.value;
|
||||
room.value.bossId = UserId.value;
|
||||
postroom();
|
||||
|
||||
// 如果有临时玩家ID,更新到players数组中
|
||||
if (tempPlayerId.value) {
|
||||
const playerIndex = players.value.findIndex(p => p.id === tempPlayerId.value)
|
||||
if (playerIndex !== -1) {
|
||||
// 更新玩家的id为真实的用户ID
|
||||
players.value[playerIndex].id = UserId.value
|
||||
// 清空临时ID
|
||||
tempPlayerId.value = ''
|
||||
}
|
||||
}
|
||||
|
||||
uni.showToast({
|
||||
title: '用户信息上传成功',
|
||||
icon: 'success'
|
||||
});
|
||||
}).catch(err => {
|
||||
console.error('用户信息上传失败:', err);
|
||||
uni.showToast({
|
||||
title: '用户信息上传失败',
|
||||
icon: 'none'
|
||||
});
|
||||
// 清空临时ID,避免影响后续操作
|
||||
tempPlayerId.value = ''
|
||||
});
|
||||
}
|
||||
// 全局房间ID变量,从本地存储恢复
|
||||
const roomId=ref(uni.getStorageSync('roomId') || '')
|
||||
const postroom = () => {
|
||||
POST('/score/room', room.value).then(r => {
|
||||
console.log('房间信息上传成功:', r);
|
||||
// 检查API响应结构
|
||||
console.log('API响应数据:', r.data);
|
||||
const receivedRoomId = r.data.data.roomId || '';
|
||||
console.log('房间ID:', receivedRoomId);
|
||||
roomId.value = receivedRoomId;
|
||||
// 保存roomId到本地存储
|
||||
uni.setStorageSync('roomId', receivedRoomId);
|
||||
|
||||
// 更新所有玩家的roomId
|
||||
players.value.forEach(player => {
|
||||
player.roomId = receivedRoomId
|
||||
})
|
||||
|
||||
postroomuser();
|
||||
|
||||
// 为每个玩家调用postroomdetail(即postdetailscore)函数,提交玩家与房间的关联信息
|
||||
players.value.forEach(player => {
|
||||
// 创建玩家与房间关联的详细数据
|
||||
const playerRoomDetail = {
|
||||
roomId: receivedRoomId,
|
||||
userId: player.id,
|
||||
userName: player.name,
|
||||
userAvatar: player.avatar,
|
||||
score: player.score
|
||||
};
|
||||
|
||||
// 调用postdetailscore函数提交数据
|
||||
postdetailscore(playerRoomDetail);
|
||||
console.log('玩家与房间关联信息上传成功:', playerRoomDetail);
|
||||
console.log('房间ID:', roomId.value);
|
||||
});
|
||||
|
||||
uni.showToast({
|
||||
title: '房间信息上传成功',
|
||||
icon: 'success'
|
||||
});
|
||||
}).catch(err => {
|
||||
console.error('房间信息上传失败:', err);
|
||||
uni.showToast({
|
||||
title: '房间信息上传失败',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
};
|
||||
const postroomuser = () => {
|
||||
roomuser.value.roomId = roomId.value;
|
||||
roomuser.value.userId = UserId.value;
|
||||
roomuser.value.nickName = scoreuser.value.nickName;
|
||||
POST('/score/player', roomuser.value).then(r => {
|
||||
console.log('房间用户信息上传成功:', r);
|
||||
const roomUserId = r.data.data.roomUserId;
|
||||
console.log('获取到的roomUserId:', roomUserId);
|
||||
uni.setStorageSync('roomUserId', roomUserId);
|
||||
roomuser.value.roomUserId = roomUserId;
|
||||
// 同时更新putscore对象的roomUserId属性,确保数据一致性
|
||||
putscore.value.roomUserId = Number(roomUserId);
|
||||
console.log('更新后的putscore对象:', putscore.value);
|
||||
uni.showToast({
|
||||
title: '房间用户信息上传成功',
|
||||
icon: 'success'
|
||||
});
|
||||
}).catch(err => {
|
||||
console.error('房间用户信息上传失败:', err);
|
||||
uni.showToast({
|
||||
title: '房间用户信息上传失败',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
}
|
||||
const postdetailscore = (scoreData) => {
|
||||
const dataToSubmit = scoreData || detailscore.value;
|
||||
console.log('提交数据:', dataToSubmit);
|
||||
console.log('房间ID:', roomId.value);
|
||||
if (!dataToSubmit.roomId) {
|
||||
dataToSubmit.roomId = roomId.value;
|
||||
}
|
||||
|
||||
POST('/score/roomdetail', dataToSubmit).then(r => {
|
||||
console.log('房间用户详细信息上传成功:', r);
|
||||
if (!scoreData || dataToSubmit.userId === UserId.value || dataToSubmit.userId === 'self') {
|
||||
uni.showToast({
|
||||
title: '房间用户详细信息上传成功',
|
||||
icon: 'success'
|
||||
});
|
||||
}
|
||||
}).catch(err => {
|
||||
console.error('房间用户详细信息上传失败:', err);
|
||||
if (!scoreData || dataToSubmit.userId === UserId.value || dataToSubmit.userId === 'self') {
|
||||
uni.showToast({
|
||||
title: '房间用户详细信息上传失败',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
const putscore=ref({
|
||||
roomUserId:0,
|
||||
allscore:0
|
||||
})
|
||||
const putroomuser = () => {
|
||||
console.log('开始执行putroomuser函数');
|
||||
const roomUserId = uni.getStorageSync('roomUserId');
|
||||
console.log('从本地存储获取的roomUserId:', roomUserId);
|
||||
|
||||
// 从players数组中获取当前用户的总分
|
||||
console.log('当前UserId.value:', UserId.value);
|
||||
console.log('players数组内容:', players.value);
|
||||
|
||||
const currentPlayer = players.value.find(p => p.id === UserId.value);
|
||||
if (currentPlayer) {
|
||||
putscore.value.allscore = currentPlayer.score;
|
||||
console.log('获取到的当前用户总分:', currentPlayer.score);
|
||||
} else {
|
||||
console.error('未找到当前用户的总分数据');
|
||||
}
|
||||
|
||||
// 设置roomUserId,并转换为数字类型
|
||||
putscore.value.roomUserId = Number(roomUserId);
|
||||
console.log('准备发送的putscore数据:', putscore.value);
|
||||
|
||||
PUT('/score/player', putscore.value).then(r => {
|
||||
console.log('房间用户信息上传成功响应:', r);
|
||||
console.log('响应数据:', r.data);
|
||||
uni.showToast({
|
||||
title: '房间用户信息上传成功',
|
||||
icon: 'success'
|
||||
});
|
||||
}).catch(err => {
|
||||
console.error('房间用户信息上传失败:', err);
|
||||
console.error('错误详情:', err.errMsg || err);
|
||||
uni.showToast({
|
||||
title: '房间用户信息上传失败',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
}
|
||||
// 状态管理
|
||||
const voiceBroadcast = ref(false)
|
||||
const tableMode = ref(false)
|
||||
const roomId = ref('')
|
||||
// 当前用户信息 - 从本地存储获取
|
||||
const storedUserInfo = uni.getStorageSync('userInfo');
|
||||
const currentUser = ref({
|
||||
id: 'self',
|
||||
name: storedUserInfo?.name||'玩家50920' ,
|
||||
id:self,
|
||||
name: storedUserInfo?.name||'acd' ,
|
||||
avatar: storedUserInfo?.avatar ||'/static/logo.png' })
|
||||
|
||||
// 局数信息
|
||||
@@ -199,11 +385,12 @@ const rounds = ref([]) // 存储每局信息,每个元素是局数编号
|
||||
// 玩家列表(初始包含自己)
|
||||
const players = ref([
|
||||
{
|
||||
id: 'self',
|
||||
name: currentUser.value.name ||'玩家50920',
|
||||
id:self,
|
||||
name: currentUser.value.name ||'acd',
|
||||
avatar: currentUser.value.avatar||'/static/logo.png',
|
||||
score: 0,
|
||||
roundScores: [] // 存储每局的分数
|
||||
roundScores: [], // 存储每局的分数
|
||||
roomId: '' // 当前房间ID
|
||||
}
|
||||
])
|
||||
|
||||
@@ -232,6 +419,9 @@ const displayPlayers = computed(() => {
|
||||
}
|
||||
})
|
||||
|
||||
// 保存当前正在添加的玩家临时ID
|
||||
const tempPlayerId = ref('')
|
||||
|
||||
// 添加玩家
|
||||
const addPlayer = () => {
|
||||
console.log('添加玩家')
|
||||
@@ -262,7 +452,11 @@ const addPlayer = () => {
|
||||
score: 0,
|
||||
roundScores: [] // 存储每局的分数
|
||||
}
|
||||
|
||||
scoreuser.value.openId=newPlayer.id
|
||||
scoreuser.value.nickName=newPlayer.name
|
||||
// 保存临时ID,用于后续更新真实ID
|
||||
tempPlayerId.value = newPlayer.id
|
||||
postuserinfo()
|
||||
// 添加到玩家列表
|
||||
players.value.push(newPlayer)
|
||||
|
||||
@@ -377,11 +571,10 @@ const editScore = (playerIndex) => {
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 开局计分
|
||||
const startScoring = () => {
|
||||
console.log('开局计分')
|
||||
|
||||
room.value.roomStatus=1
|
||||
// 检查是否有足够的玩家(至少需要2个玩家才能开始计分)
|
||||
if (displayPlayers.value.length < 2) {
|
||||
uni.showToast({
|
||||
@@ -435,20 +628,28 @@ const settleRoom = () => {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const number = ref('')
|
||||
// 生命周期
|
||||
onMounted(() => {
|
||||
console.log('单人模式页面加载完成')
|
||||
// 可以在这里初始化数据或加载用户信息
|
||||
getuserinfo();
|
||||
|
||||
// 生成随机房间号(4位数字)
|
||||
roomId.value = Math.floor(1000 + Math.random() * 9000).toString()
|
||||
// 生成四位数字
|
||||
number.value = Math.floor(1000 + Math.random() * 9000).toString()
|
||||
|
||||
// 动态设置导航栏标题
|
||||
const pageTitle = `单人 - ${number.value}号房间`;
|
||||
uni.setNavigationBarTitle({
|
||||
title: `单人 - ${roomId.value}号房间`
|
||||
title: pageTitle
|
||||
})
|
||||
room.value.roomName = pageTitle
|
||||
|
||||
// 更新当前用户的roomId
|
||||
const selfPlayer = players.value.find(p => p.id === 'self')
|
||||
if (selfPlayer) {
|
||||
selfPlayer.roomId = roomId.value
|
||||
}
|
||||
|
||||
// 监听页面返回事件,用于接收从计分页面传回的更新后的分数
|
||||
const updateListener = () => {
|
||||
@@ -468,8 +669,6 @@ onMounted(() => {
|
||||
// 查找对应的玩家
|
||||
const playerIndex = players.value.findIndex(p => p.id === updatedPlayer.id)
|
||||
if (playerIndex !== -1) {
|
||||
// 更新普通玩家当前局的分数
|
||||
// 确保roundScores数组有足够的空间
|
||||
if (players.value[playerIndex].roundScores.length <= roundIndex) {
|
||||
players.value[playerIndex].roundScores.length = roundIndex + 1
|
||||
}
|
||||
@@ -477,13 +676,22 @@ onMounted(() => {
|
||||
players.value[playerIndex].roundScores[roundIndex] = updatedPlayer.score
|
||||
// 计算总分:所有局分数的总和
|
||||
players.value[playerIndex].score = players.value[playerIndex].roundScores.reduce((sum, score) => sum + (score || 0), 0)
|
||||
|
||||
// 为每个玩家设置单局分数和局次,并提交到后端
|
||||
// 创建临时的detailscore对象,避免多个玩家数据互相覆盖
|
||||
const tempDetailScore = {
|
||||
roomId: players.value[playerIndex].roomId, // 当前玩家的roomId
|
||||
userId: players.value[playerIndex].id, // 当前玩家ID
|
||||
score: updatedPlayer.score, // 当前局的分数
|
||||
gameTime: currentRound, // 当前局次
|
||||
detailType: '0'
|
||||
}
|
||||
postdetailscore(tempDetailScore)
|
||||
putroomuser()
|
||||
} else if (updatedPlayer.id === 'table') {
|
||||
// 更新台板玩家当前局的分数
|
||||
// 确保roundScores数组有足够的空间
|
||||
if (tablePlayer.roundScores.length <= roundIndex) {
|
||||
tablePlayer.roundScores.length = roundIndex + 1
|
||||
}
|
||||
// 保存当前局的分数
|
||||
tablePlayer.roundScores[roundIndex] = updatedPlayer.score
|
||||
// 计算总分:所有局分数的总和
|
||||
tablePlayer.score = tablePlayer.roundScores.reduce((sum, score) => sum + (score || 0), 0)
|
||||
@@ -533,15 +741,14 @@ onMounted(() => {
|
||||
console.error('从本地存储获取用户信息失败:', error);
|
||||
}
|
||||
})
|
||||
})
|
||||
}); // 补充onMounted的闭合括号+花括号 → 原代码此处也缺失
|
||||
|
||||
onUnmounted(() => {
|
||||
// 移除事件监听器
|
||||
uni.$off('updatePlayers');
|
||||
uni.$off('userDataUpdated');
|
||||
})
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
});
|
||||
</script><style lang="less" scoped>
|
||||
.singleplay {
|
||||
width: 750rpx;
|
||||
margin: 0;
|
||||
|
||||
Reference in New Issue
Block a user