diff --git a/shoot.http b/shoot.http new file mode 100644 index 0000000..d3a2b01 --- /dev/null +++ b/shoot.http @@ -0,0 +1,9 @@ +@serverUrl = http://120.79.241.5:8000/api/shoot + +### 模拟射箭 +POST {{serverUrl}}/index/arrow +Content-Type: application/json + +{ + "device_id": "iXAx67Ce" +} \ No newline at end of file diff --git a/src/apis.js b/src/apis.js index 271a3af..5a12c0f 100644 --- a/src/apis.js +++ b/src/apis.js @@ -109,9 +109,31 @@ export const bindDeviceAPI = (device) => { }, success: (res) => { const { code, data } = res.data; - if (code === 0) { - resolve(data); - } + if (code === 0) resolve(data); + }, + fail: (err) => { + reject(err); + uni.showToast({ + title: "获取数据失败", + icon: "none", + }); + }, + }); + }); +}; + +export const unbindDeviceAPI = (deviceId) => { + return new Promise((resolve, reject) => { + uni.request({ + url: `${BASE_URL}/user/device/unbindDevice`, + method: "POST", + header: getAuthHeader(), + data: { + deviceId, + }, + success: (res) => { + const { code, data } = res.data; + if (code === 0) resolve(data); }, fail: (err) => { reject(err); @@ -156,9 +178,7 @@ export const createPractiseAPI = (arrows) => { }, success: (res) => { const { code, data } = res.data; - if (code === 0) { - resolve(data); - } + if (code === 0) resolve(data); }, fail: (err) => { reject(err); @@ -169,4 +189,119 @@ export const createPractiseAPI = (arrows) => { }, }); }); -}; \ No newline at end of file +}; + +export const createRoomAPI = (gameType, teamSize) => { + return new Promise((resolve, reject) => { + uni.request({ + url: `${BASE_URL}/user/createroom`, + method: "POST", + header: getAuthHeader(), + data: { + gameType, + teamSize, + }, + success: (res) => { + const { code, data } = res.data; + if (code === 0) resolve(data); + }, + fail: (err) => { + reject(err); + uni.showToast({ + title: "获取数据失败", + icon: "none", + }); + }, + }); + }); +}; + +export const getRoomAPI = (number) => { + return new Promise((resolve, reject) => { + uni.request({ + url: `${BASE_URL}/user/room?number=${number}`, + method: "GET", + header: getAuthHeader(), + success: (res) => { + const { code, data } = res.data; + if (code === 0) resolve(data); + }, + fail: (err) => { + reject(err); + uni.showToast({ + title: "获取数据失败", + icon: "none", + }); + }, + }); + }); +}; + +export const destroyRoomAPI = (roomNumber) => { + return new Promise((resolve, reject) => { + uni.request({ + url: `${BASE_URL}/user/room/destroyRoom`, + method: "POST", + header: getAuthHeader(), + data: { + roomNumber, + }, + success: (res) => { + const { code, data } = res.data; + if (code === 0) resolve(data); + }, + fail: (err) => { + reject(err); + uni.showToast({ + title: "获取数据失败", + icon: "none", + }); + }, + }); + }); +}; + +export const exitRoomAPI = (number) => { + return new Promise((resolve, reject) => { + uni.request({ + url: `${BASE_URL}/user/room/exitRoom`, + method: "POST", + header: getAuthHeader(), + data: { + number, + }, + success: (res) => { + const { code, data } = res.data; + if (code === 0) resolve(data); + }, + fail: (err) => { + reject(err); + uni.showToast({ + title: "获取数据失败", + icon: "none", + }); + }, + }); + }); +}; + +export const startRoomAPI = (number) => { + return new Promise((resolve, reject) => { + uni.request({ + url: `${BASE_URL}/user/room/start?number=${number}`, + method: "GET", + header: getAuthHeader(), + success: (res) => { + const { code, data } = res.data; + if (code === 0) resolve(data); + }, + fail: (err) => { + reject(err); + uni.showToast({ + title: "获取数据失败", + icon: "none", + }); + }, + }); + }); +}; diff --git a/src/components/AppFooter.vue b/src/components/AppFooter.vue index f107ccc..88fe31c 100644 --- a/src/components/AppFooter.vue +++ b/src/components/AppFooter.vue @@ -1,4 +1,9 @@ @@ -41,15 +71,15 @@ const toBattleRoom = () => { 敬请期待 - 下一步 + 下一步 房间号: - 3245 + {{ roomNumber }} - 进入房间 + 进入房间 30分钟无人进入则房间无效 - 复制房间信息邀请朋友进入 + 复制房间信息邀请朋友进入 diff --git a/src/components/Guide.vue b/src/components/Guide.vue index 819d2e4..c0520cc 100644 --- a/src/components/Guide.vue +++ b/src/components/Guide.vue @@ -33,7 +33,7 @@ defineProps({ display: flex; align-items: center; padding: 0 15px; - width: 100vw; + width: 100%; } .container > image { width: 20%; diff --git a/src/pages/battle-room.vue b/src/pages/battle-room.vue index 4abf4c8..ef96a21 100644 --- a/src/pages/battle-room.vue +++ b/src/pages/battle-room.vue @@ -1,5 +1,7 @@ diff --git a/src/pages/friend-battle.vue b/src/pages/friend-battle.vue index f42a186..beb492a 100644 --- a/src/pages/friend-battle.vue +++ b/src/pages/friend-battle.vue @@ -6,18 +6,28 @@ import Guide from "@/components/Guide.vue"; import SButton from "@/components/SButton.vue"; import SModal from "@/components/SModal.vue"; import CreateRoom from "@/components/CreateRoom.vue"; +import { getRoomAPI } from "@/apis"; const showModal = ref(false); const warnning = ref(""); const roomNumber = ref(""); -const enterRoom = () => { +const enterRoom = async () => { if (!roomNumber.value) { warnning.value = "请输入房间号"; + showModal.value = true; } else { - warnning.value = "查无此房"; + const room = await getRoomAPI(roomNumber.value); + if (room.number) { + roomNumber.value = ""; + uni.navigateTo({ + url: `/pages/battle-room?roomNumber=${roomNumber.value}`, + }); + } else { + warnning.value = "查无此房"; + showModal.value = true; + } } - showModal.value = true; }; const createRoom = () => { warnning.value = ""; @@ -61,7 +71,7 @@ const createRoom = () => { {{ warnning }} - + diff --git a/src/pages/index.vue b/src/pages/index.vue index 4143079..67e9614 100644 --- a/src/pages/index.vue +++ b/src/pages/index.vue @@ -11,15 +11,26 @@ const store = useStore(); // 使用storeToRefs,用于UI里显示,保持响应性 const { user } = storeToRefs(store); +const isLogin = () => { + if (!user.value.id) { + uni.showToast({ + title: "还未登录", + icon: "none", + }); + } + return !!user.value.id; +}; const toLoginPage = () => { uni.navigateTo({ url: "/pages/login", }); }; const toFristTryPage = () => { - uni.navigateTo({ - url: "/pages/first-try", - }); + if (isLogin()) { + uni.navigateTo({ + url: "/pages/first-try", + }); + } }; const toRankingPage = () => { uni.navigateTo({ @@ -27,27 +38,35 @@ const toRankingPage = () => { }); }; const toFriendBattlePage = () => { - uni.navigateTo({ - url: "/pages/friend-battle", - }); + if (isLogin()) { + uni.navigateTo({ + url: "/pages/friend-battle", + }); + } }; const toPractisePage = () => { - uni.navigateTo({ - url: "/pages/practise", - }); + if (isLogin()) { + uni.navigateTo({ + url: "/pages/practise", + }); + } }; const toQquipmentPage = () => { - uni.navigateTo({ - url: "/pages/equipment-debug", - }); + if (isLogin()) { + uni.navigateTo({ + url: "/pages/equipment-debug", + }); + } }; const toAddDevicePage = () => { - uni.navigateTo({ - url: "/pages/add-device", - }); + if (isLogin()) { + uni.navigateTo({ + url: "/pages/add-device", + }); + } }; // 获取全局配置 diff --git a/src/static/1v1-bg.png b/src/static/1v1-bg.png new file mode 100644 index 0000000..f0f2c7d Binary files /dev/null and b/src/static/1v1-bg.png differ