接口返回完善

This commit is contained in:
kron
2025-07-25 10:00:18 +08:00
parent 85f1f7e33d
commit e5b1194882
3 changed files with 52 additions and 8 deletions

View File

@@ -18,6 +18,14 @@ function request(method, url, data = {}) {
if (message.indexOf("登录身份已失效") !== -1) {
uni.removeStorageSync("token");
}
if (message === "ROOM_FULL") {
resolve({ full: true });
return;
}
if (message === "ERROR_ROOM_GAME_START") {
resolve({ started: true });
return;
}
if (url.indexOf("/user/room") !== -1 && method === "GET") {
resolve({});
return;

View File

@@ -1,5 +1,5 @@
<script setup>
import { ref } from "vue";
import { ref, onMounted, onUnmounted } from "vue";
import Container from "@/components/Container.vue";
import Avatar from "@/components/Avatar.vue";
import SButton from "@/components/SButton.vue";
@@ -16,6 +16,9 @@ const { updateUser } = store;
const selectedVIP = ref(0);
const showModal = ref(false);
const lastDate = ref(user.value.expiredAt);
const refreshing = ref(false);
const timer = ref(null);
const onPay = async () => {
if (!user.value.id) {
@@ -35,12 +38,19 @@ const onPay = async () => {
paySign: params.paySign, // 签名
signType: "RSA", // 签名类型默认为RSA
async success(res) {
const result = await getHomeData();
if (result.user) updateUser(result.user);
uni.showToast({
title: "支付成功",
icon: "none",
});
timer.value = setInterval(async () => {
refreshing.value = true;
const result = await getHomeData();
if (result.user.expiredAt > lastDate.value) {
refreshing.value = false;
if (result.user) updateUser(result.user);
clearInterval(timer.value);
}
}, 1000);
},
fail(res) {
console.log("pay error", res);
@@ -56,6 +66,10 @@ const toOrderPage = () => {
url: "/pages/orders",
});
};
onUnmounted(() => {
if (timer.value) clearInterval(timer.value);
});
</script>
<template>
@@ -66,9 +80,18 @@ const toOrderPage = () => {
<Avatar :src="user.avatar" :size="35" />
<text class="truncate">{{ user.nickName }}</text>
</view>
<text v-if="user.expiredAt">
{{ formatTimestamp(user.expiredAt) }}到期
</text>
<block v-if="refreshing">
<image
src="../static/btn-loading.png"
mode="widthFix"
class="loading"
/>
</block>
<block v-else>
<text v-if="user.expiredAt">
{{ formatTimestamp(user.expiredAt) }}到期
</text>
</block>
</view>
<view
class="container"
@@ -229,4 +252,12 @@ const toOrderPage = () => {
.my-orders > view > image {
width: 15px;
}
.loading {
width: 20px;
height: 20px;
margin-left: 10px;
transition: all 0.3s ease;
background-blend-mode: darken;
animation: rotate 2s linear infinite;
}
</style>

View File

@@ -31,14 +31,19 @@ const enterRoom = debounce(async () => {
const alreadyIn = room.members.find(
(item) => item.userInfo.id === user.value.id
);
if (!alreadyIn) await joinRoomAPI(roomNumber.value);
if (!alreadyIn) {
const result = await joinRoomAPI(roomNumber.value);
if (result.full) warnning.value = "房间已满员";
showModal.value = true;
return;
}
roomNumber.value = "";
showModal.value = false;
uni.navigateTo({
url: `/pages/battle-room?roomNumber=${room.number}`,
});
} else {
warnning.value = "查无此房";
warnning.value = room.started ? "该房间对战已开始,无法加入" : "查无此房";
showModal.value = true;
}
}