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 @@
-
-
-
-
+
+
人都到齐了吗?
天赋异禀的弓箭手们,比赛即将开始!
-
+
+
+
+
+
+
+
+
+
+
+
- 进入大乱斗
- 创建者点击下一步,所有人即可进入游戏。
+
+ 进入对战
+ 进入大乱斗
+ 创建者点击下一步,所有人即可进入游戏。
+
@@ -71,12 +135,14 @@ const teams = [{ name: "选手1", avatar: "../static/avatar.png" }];
-
+
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