Merge branch 'new-race-mode' into test
This commit is contained in:
@@ -20,25 +20,47 @@ onLoad(async (options) => {
|
|||||||
const result = await getBattleAPI(battleId.value);
|
const result = await getBattleAPI(battleId.value);
|
||||||
data.value = result;
|
data.value = result;
|
||||||
if (result.mode > 3) {
|
if (result.mode > 3) {
|
||||||
players.value = result.resultList.map((item, index) => {
|
const plist = result.teams[0] ? result.teams[0].players : [];
|
||||||
const plist = result.teams[0] ? result.teams[0].players : [];
|
// 以 id 为 key 建立 teams 玩家快速查找表
|
||||||
const p = plist.find((p) => p.id === item.userId);
|
const teamPlayerMap = {};
|
||||||
|
plist.forEach((p) => { teamPlayerMap[p.id] = p; });
|
||||||
|
|
||||||
|
// 处理有成绩的玩家(resultList 顺序即排名顺序)
|
||||||
|
const rankedPlayers = (result.resultList || []).map((item, index) => {
|
||||||
|
const playerId = item.userId || item.id;
|
||||||
|
const p = teamPlayerMap[playerId] || item;
|
||||||
const arrows = new Array(12);
|
const arrows = new Array(12);
|
||||||
result.rounds.forEach((r, index) => {
|
result.rounds.forEach((r, rIndex) => {
|
||||||
if (r.shoots[item.userId]) {
|
if (r.shoots[playerId]) {
|
||||||
r.shoots[item.userId].forEach((s, index2) => {
|
r.shoots[playerId].forEach((s, sIndex) => {
|
||||||
arrows[index2 + index * 6] = s;
|
arrows[sIndex + rIndex * 6] = s;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
...item,
|
...item,
|
||||||
|
id: playerId,
|
||||||
rank: index + 1,
|
rank: index + 1,
|
||||||
name: p.name,
|
name: (p && p.name) || item.name,
|
||||||
avatar: p.avatar || "",
|
avatar: (p && p.avatar) || item.avatar || "",
|
||||||
arrows,
|
arrows,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 追加未出现在 resultList 中的玩家(未射箭),rank=0 隐藏角标
|
||||||
|
const rankedIds = new Set(rankedPlayers.map((p) => p.id));
|
||||||
|
const unrankedPlayers = plist
|
||||||
|
.filter((p) => !rankedIds.has(p.id))
|
||||||
|
.map((p) => ({
|
||||||
|
id: p.id,
|
||||||
|
name: p.name,
|
||||||
|
avatar: p.avatar || "",
|
||||||
|
arrows: [],
|
||||||
|
totalScore: 0,
|
||||||
|
rank: 0,
|
||||||
|
}));
|
||||||
|
|
||||||
|
players.value = [...rankedPlayers, ...unrankedPlayers];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -59,13 +81,14 @@ const checkBowData = (selected) => {
|
|||||||
<Container title="详情">
|
<Container title="详情">
|
||||||
<view class="container">
|
<view class="container">
|
||||||
<BattleHeader
|
<BattleHeader
|
||||||
|
v-if="data.mode <= 3"
|
||||||
:winner="data.winTeam"
|
:winner="data.winTeam"
|
||||||
:blueTeam="data.teams[1] ? data.teams[1].players : []"
|
:blueTeam="data.teams[1] ? data.teams[1].players : []"
|
||||||
:redTeam="data.teams[2] ? data.teams[2].players : []"
|
:redTeam="data.teams[2] ? data.teams[2].players : []"
|
||||||
:players="players"
|
:players="players"
|
||||||
/>
|
/>
|
||||||
<view
|
<view
|
||||||
v-if="data.mode >= 3"
|
v-if="data.mode > 3"
|
||||||
class="score-header"
|
class="score-header"
|
||||||
:style="{ border: 'none', padding: '5px 15px' }"
|
:style="{ border: 'none', padding: '5px 15px' }"
|
||||||
>
|
>
|
||||||
@@ -76,14 +99,14 @@ const checkBowData = (selected) => {
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<PlayerScore2
|
<PlayerScore2
|
||||||
v-if="data.mode >= 3"
|
v-if="data.mode > 3"
|
||||||
v-for="(player, index) in players"
|
v-for="(player, index) in players"
|
||||||
:key="index"
|
:key="index"
|
||||||
:name="player.name"
|
:name="player.name"
|
||||||
:avatar="player.avatar"
|
:avatar="player.avatar"
|
||||||
:arrows="player.arrows"
|
:arrows="player.arrows"
|
||||||
:totalScore="player.totalScore"
|
:totalScore="player.totalScore"
|
||||||
:rank="index + 1"
|
:rank="player.rank"
|
||||||
/>
|
/>
|
||||||
<view
|
<view
|
||||||
v-if="data.mode <= 3"
|
v-if="data.mode <= 3"
|
||||||
|
|||||||
@@ -55,7 +55,14 @@ const onPractiseLoading = async (page) => {
|
|||||||
};
|
};
|
||||||
const getName = (battle) => {
|
const getName = (battle) => {
|
||||||
if (battle.mode <= 3) return `${battle.mode}V${battle.mode}`;
|
if (battle.mode <= 3) return `${battle.mode}V${battle.mode}`;
|
||||||
return battle.mode + "人大乱斗";
|
// 排位赛大乱斗:mode 数字与实际人数不一致,使用固定映射
|
||||||
|
if (battle.way === 2) {
|
||||||
|
if (battle.mode === 4) return "5人大乱斗";
|
||||||
|
if (battle.mode === 5) return "10人大乱斗";
|
||||||
|
}
|
||||||
|
// 好友约战大乱斗:从 teams[0].players 取实际参与人数动态展示
|
||||||
|
const count = battle.teams?.[0]?.players?.length;
|
||||||
|
return count ? `${count}人大乱斗` : "大乱斗";
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user