|
|
@@ -7,143 +7,161 @@
|
|
|
<!-- <div class="back">
|
|
|
<img src="@assets/back.png" @click="back" alt="" />
|
|
|
</div> -->
|
|
|
-
|
|
|
- <div class="content">
|
|
|
- <div class="content-top">
|
|
|
- <div class="text1">{{ getLabelName(info.status, statusOptions) }}</div>
|
|
|
- <div class="text2">
|
|
|
- <span>房间号 {{ info.id }}</span>
|
|
|
- <img src="@assets/png-copy.png" @click="copy(info.id)" alt="" />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="content-box">
|
|
|
- <div class="tabs">
|
|
|
- <div class="tab">{{ info.zone }}</div>
|
|
|
- <div class="tab">{{ gameMode.name }}</div>
|
|
|
- <div class="tab">{{ getLabelName(info.requireTicket, requireTicketOptions) }}</div>
|
|
|
- <div class="tab">{{ gameMap.name }}</div>
|
|
|
+ <van-pull-refresh
|
|
|
+ class="home"
|
|
|
+ success-text="加载成功"
|
|
|
+ success-duration="500"
|
|
|
+ v-model="isLoading"
|
|
|
+ :head-height="80"
|
|
|
+ @refresh="onRefresh"
|
|
|
+ pageType="light"
|
|
|
+ >
|
|
|
+ <div class="content">
|
|
|
+ <div class="content-top">
|
|
|
+ <div class="text1">{{ getLabelName(info.status, statusOptions) }}</div>
|
|
|
+ <div class="text2">
|
|
|
+ <span>房间号 {{ info.id }}</span>
|
|
|
+ <img src="@assets/png-copy.png" @click="copy(info.id)" alt="" />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+ <div class="content-box">
|
|
|
+ <div class="tabs">
|
|
|
+ <div class="tab">{{ info.zone }}</div>
|
|
|
+ <div class="tab">{{ gameMode.name }}</div>
|
|
|
+ <div class="tab">{{ getLabelName(info.requireTicket, requireTicketOptions) }}</div>
|
|
|
+ <div class="tab">{{ gameMap.name }}</div>
|
|
|
+ </div>
|
|
|
|
|
|
- <div class="player-content">
|
|
|
- <div class="players">
|
|
|
- <div class="player-item">
|
|
|
- <div class="title">主队</div>
|
|
|
- <div class="list1" v-if="info.maxPlayerNum === 2">
|
|
|
- <van-image
|
|
|
- width="58"
|
|
|
- height="58"
|
|
|
- radius="4"
|
|
|
- :src="host.avatar || require('@assets/img_default_photo.png')"
|
|
|
- fit="cover"
|
|
|
- />
|
|
|
- <div class="name">{{ host.nickname }}</div>
|
|
|
- </div>
|
|
|
- <div class="list" v-else>
|
|
|
- <div class="person" v-for="(item, index) in hosts" :key="index">
|
|
|
- <van-image
|
|
|
- width="24"
|
|
|
- height="24"
|
|
|
- radius="4"
|
|
|
- :src="item.avatar || require('@assets/img_default_photo.png')"
|
|
|
- fit="cover"
|
|
|
- />
|
|
|
- <div class="name">{{ item.nickname }}</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="player-item">
|
|
|
- <div class="title">客队</div>
|
|
|
- <template v-if="info.maxPlayerNum === 2">
|
|
|
- <div class="list1 not" v-for="(item, index) in guests" :key="index">
|
|
|
+ <div class="player-content">
|
|
|
+ <div class="players">
|
|
|
+ <div class="player-item">
|
|
|
+ <div class="title">主队</div>
|
|
|
+ <div class="list1" v-if="info.maxPlayerNum === 2">
|
|
|
<van-image
|
|
|
width="58"
|
|
|
height="58"
|
|
|
radius="4"
|
|
|
- :src="item.avatar || require('@assets/img_default_photo.png')"
|
|
|
+ :src="host.avatar || require('@assets/img_default_photo.png')"
|
|
|
fit="cover"
|
|
|
/>
|
|
|
- <div class="name">{{ item.nickname }}</div>
|
|
|
+ <div class="name">{{ host.nickname }}</div>
|
|
|
</div>
|
|
|
- </template>
|
|
|
- <div class="list" v-else>
|
|
|
- <div class="person" v-for="(item, index) in guests" :key="index">
|
|
|
- <van-image
|
|
|
- width="24"
|
|
|
- height="24"
|
|
|
- radius="4"
|
|
|
- :src="item.avatar || require('@assets/img_default_photo.png')"
|
|
|
- fit="cover"
|
|
|
- />
|
|
|
- <div class="name">{{ item.nickname }}</div>
|
|
|
+ <div class="list" v-else>
|
|
|
+ <div class="person" v-for="(item, index) in hosts" :key="index">
|
|
|
+ <van-image
|
|
|
+ width="24"
|
|
|
+ height="24"
|
|
|
+ radius="4"
|
|
|
+ :src="item.avatar || require('@assets/img_default_photo.png')"
|
|
|
+ fit="cover"
|
|
|
+ />
|
|
|
+ <div class="name">{{ item.nickname }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="player-item">
|
|
|
+ <div class="title">客队</div>
|
|
|
+ <template v-if="info.maxPlayerNum === 2">
|
|
|
+ <div class="list1 not" v-for="(item, index) in guests" :key="index">
|
|
|
+ <van-image
|
|
|
+ width="58"
|
|
|
+ height="58"
|
|
|
+ radius="4"
|
|
|
+ :src="item.avatar || require('@assets/img_default_photo.png')"
|
|
|
+ fit="cover"
|
|
|
+ />
|
|
|
+ <div class="name">{{ item.nickname }}</div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <div class="list" v-else>
|
|
|
+ <div class="person" v-for="(item, index) in guests" :key="index">
|
|
|
+ <van-image
|
|
|
+ width="24"
|
|
|
+ height="24"
|
|
|
+ radius="4"
|
|
|
+ :src="item.avatar || require('@assets/img_default_photo.png')"
|
|
|
+ fit="cover"
|
|
|
+ />
|
|
|
+ <div class="name">{{ item.nickname }}</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
|
- <div class="bg-icon" :class="{ bgOne: info.maxPlayerNum === 2 }">
|
|
|
- <img src="@assets/png-1v1-bg.png" v-if="info.maxPlayerNum === 2" class="img1" alt="" />
|
|
|
- <img
|
|
|
- src="@assets/png-2v2~5v5-bg.png"
|
|
|
- :style="{ height: teamHeight + 'px' }"
|
|
|
- v-else
|
|
|
- class="img3"
|
|
|
- alt=""
|
|
|
- />
|
|
|
- <img src="@assets/png-vs.png" alt="" class="img2" />
|
|
|
+ <div class="bg-icon" :class="{ bgOne: info.maxPlayerNum === 2 }">
|
|
|
+ <img src="@assets/png-1v1-bg.png" v-if="info.maxPlayerNum === 2" class="img1" alt="" />
|
|
|
+ <img
|
|
|
+ src="@assets/png-2v2~5v5-bg.png"
|
|
|
+ :style="{ height: teamHeight + 'px' }"
|
|
|
+ v-else
|
|
|
+ class="img3"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ <img src="@assets/png-vs.png" alt="" class="img2" />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div class="help">
|
|
|
- <div class="help-btn" v-if="isJoin && !isHost && info.status == 'GAMING'" @click="quit">
|
|
|
- <img src="@assets/png-tuichu.png" alt="" />
|
|
|
- <span>退出</span>
|
|
|
- </div>
|
|
|
- <div class="help-btn" v-if="isHost && info.status == 'GAMING'" @click="$refs.failed.init()">
|
|
|
- <img src="@assets/png-liuju.png" alt="" />
|
|
|
- <span>流局</span>
|
|
|
- </div>
|
|
|
- <div class="help-btn" @click="$refs.description.init()">
|
|
|
- <img src="@assets/png-shuoming.png" alt="" />
|
|
|
- <span>说明</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
|
|
|
- <div class="bottom" v-if="isJoin">
|
|
|
- <div class="join-btn" v-if="isFull && (info.status == 'WAITING' || info.status == 'GAMING')">
|
|
|
- <van-button type="primary" v-if="info.status == 'WAITING'" block @click="start">开始比赛</van-button>
|
|
|
- <van-button type="primary" v-else-if="info.status == 'GAMING'" block @click="goGame"
|
|
|
- >进入比赛</van-button
|
|
|
- >
|
|
|
- </div>
|
|
|
- <div class="btns">
|
|
|
- <div class="btn" v-if="!isHost && info.status == 'WAITING'" @click="quit">
|
|
|
- <img src="@assets/png-quxiaobaoming.png" alt="" />
|
|
|
- <span>取消报名</span>
|
|
|
+ <div class="help">
|
|
|
+ <div class="help-btn" v-if="isJoin && !isHost && info.status == 'GAMING'" @click="quit">
|
|
|
+ <img src="@assets/png-tuichu.png" alt="" />
|
|
|
+ <span>退出</span>
|
|
|
</div>
|
|
|
- <div class="btn" @click="changeUrl" v-if="isHost">
|
|
|
- <img src="@assets/png-xiugaidizhi.png" alt="" />
|
|
|
- <span>修改地址</span>
|
|
|
+ <div class="help-btn" v-if="isHost && info.status == 'GAMING'" @click="$refs.failed.init()">
|
|
|
+ <img src="@assets/png-liuju.png" alt="" />
|
|
|
+ <span>流局</span>
|
|
|
</div>
|
|
|
- <div class="btn" v-if="info.status == 'FINISH'" @click="$router.push('/roomResult?roomId=' + roomId)">
|
|
|
- <img src="@assets/png-xiugaidizhi.png" alt="" />
|
|
|
- <span>查看战绩</span>
|
|
|
+ <div class="help-btn" @click="$refs.description.init()">
|
|
|
+ <img src="@assets/png-shuoming.png" alt="" />
|
|
|
+ <span>说明</span>
|
|
|
</div>
|
|
|
- <div class="btn" @click="$router.push('/reportAdd?roomId=' + roomId)">
|
|
|
- <img src="@assets/png-yicangshenbao.png" alt="" />
|
|
|
- <span>异常申报</span>
|
|
|
- </div>
|
|
|
- <div class="btn" v-if="isHost && info.status == 'WAITING'">
|
|
|
- <img src="@assets/png-quxiaosaishi.png" alt="" />
|
|
|
- <span>取消赛事</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="bottom" v-if="isJoin">
|
|
|
+ <div
|
|
|
+ class="join-btn"
|
|
|
+ v-if="isFull && ((info.status == 'WAITING' && isHost) || info.status == 'GAMING')"
|
|
|
+ >
|
|
|
+ <van-button type="primary" v-if="info.status == 'WAITING' && isHost" block @click="start"
|
|
|
+ >开始比赛</van-button
|
|
|
+ >
|
|
|
+ <van-button type="primary" v-else-if="info.status == 'GAMING'" block @click="goGame"
|
|
|
+ >进入比赛</van-button
|
|
|
+ >
|
|
|
</div>
|
|
|
- <div class="btn" v-if="info.status == 'GAMING'" @click="$refs.result.init()">
|
|
|
- <img src="@assets/png-jieshubisai.png" alt="" />
|
|
|
- <span>结束比赛</span>
|
|
|
+ <div class="btns">
|
|
|
+ <div class="btn" v-if="!isHost && info.status == 'WAITING'" @click="quit">
|
|
|
+ <img src="@assets/png-quxiaobaoming.png" alt="" />
|
|
|
+ <span>取消报名</span>
|
|
|
+ </div>
|
|
|
+ <div class="btn" @click="changeUrl" v-if="isHost">
|
|
|
+ <img src="@assets/png-xiugaidizhi.png" alt="" />
|
|
|
+ <span>修改地址</span>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ class="btn"
|
|
|
+ v-if="info.status == 'FINISH'"
|
|
|
+ @click="$router.push('/roomResult?roomId=' + roomId)"
|
|
|
+ >
|
|
|
+ <img src="@assets/png-xiugaidizhi.png" alt="" />
|
|
|
+ <span>查看战绩</span>
|
|
|
+ </div>
|
|
|
+ <div class="btn" @click="$router.push('/reportAdd?roomId=' + roomId)">
|
|
|
+ <img src="@assets/png-yicangshenbao.png" alt="" />
|
|
|
+ <span>异常申报</span>
|
|
|
+ </div>
|
|
|
+ <div class="btn" v-if="isHost && info.status == 'WAITING'">
|
|
|
+ <img src="@assets/png-quxiaosaishi.png" alt="" />
|
|
|
+ <span>取消赛事</span>
|
|
|
+ </div>
|
|
|
+ <div class="btn" v-if="info.status == 'GAMING'" @click="$refs.result.init()">
|
|
|
+ <img src="@assets/png-jieshubisai.png" alt="" />
|
|
|
+ <span>结束比赛</span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </van-pull-refresh>
|
|
|
<change-url ref="url" :roomId="roomId"></change-url>
|
|
|
<join-room ref="join" :roomInfo="info" @update="getInfo"></join-room>
|
|
|
<description ref="description"></description>
|
|
|
@@ -167,7 +185,8 @@ export default {
|
|
|
data() {
|
|
|
return {
|
|
|
info: {},
|
|
|
- roomId: 0
|
|
|
+ roomId: 0,
|
|
|
+ timer: null
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
|
@@ -235,6 +254,10 @@ export default {
|
|
|
if (this.$route.query.id) {
|
|
|
this.roomId = this.$route.query.id;
|
|
|
}
|
|
|
+ this.$toast.loading({
|
|
|
+ message: '加载中...',
|
|
|
+ forbidClick: true
|
|
|
+ });
|
|
|
this.getInfo();
|
|
|
},
|
|
|
methods: {
|
|
|
@@ -251,11 +274,7 @@ export default {
|
|
|
);
|
|
|
},
|
|
|
getInfo() {
|
|
|
- this.$toast.loading({
|
|
|
- message: '加载中...',
|
|
|
- forbidClick: true
|
|
|
- });
|
|
|
- this.$http
|
|
|
+ return this.$http
|
|
|
.get('/room/detail/' + this.roomId)
|
|
|
.then(res => {
|
|
|
this.$toast.clear();
|
|
|
@@ -274,6 +293,8 @@ export default {
|
|
|
.then(() => {
|
|
|
this.$router.go(-1);
|
|
|
});
|
|
|
+ } else {
|
|
|
+ this.loop();
|
|
|
}
|
|
|
})
|
|
|
.catch(e => {
|
|
|
@@ -282,6 +303,20 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
+ loop() {
|
|
|
+ if (this.timer) {
|
|
|
+ clearTimeout(this.timer);
|
|
|
+ this.timer = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.timer = setTimeout(() => {
|
|
|
+ if (this.info.status === 'WAITING' || this.info.status === 'GAMING') {
|
|
|
+ this.getInfo().then(() => {
|
|
|
+ this.loop();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }, 2000);
|
|
|
+ },
|
|
|
changeUrl() {
|
|
|
this.$refs.url.init(this.info.url);
|
|
|
},
|
|
|
@@ -349,6 +384,17 @@ export default {
|
|
|
goGame() {
|
|
|
window.location.href = this.info.url;
|
|
|
// this.$refs.joinGame.init()
|
|
|
+ },
|
|
|
+ onRefresh() {
|
|
|
+ this.getInfo().then(() => {
|
|
|
+ this.isLoading = false;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ unmounted() {
|
|
|
+ if (this.timer) {
|
|
|
+ clearTimeout(this.timer);
|
|
|
+ this.timer = null;
|
|
|
}
|
|
|
},
|
|
|
beforeRouteLeave(to, from, next) {
|