From a03af4e58c9543be81b5ba54daa4824a8b99a8a4 Mon Sep 17 00:00:00 2001 From: kron Date: Tue, 1 Jul 2025 00:25:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis.js | 33 ++++++++++++++++++ src/components/ScrollList.vue | 2 +- src/constants.js | 12 +++++++ src/pages/be-vip.vue | 21 ++++++++---- src/pages/friend-battle.vue | 3 +- src/pages/melee-match.vue | 25 +++++++++++++- src/pages/order-detail.vue | 52 +++++++++++++++++++++------- src/pages/orders.vue | 64 ++++++++++++++++++++++++----------- src/pages/practise-one.vue | 1 - src/pages/team-match.vue | 36 ++++++++++++++++++-- 10 files changed, 202 insertions(+), 47 deletions(-) diff --git a/src/apis.js b/src/apis.js index 8513a15..d2e7f7a 100644 --- a/src/apis.js +++ b/src/apis.js @@ -240,3 +240,36 @@ export const getBattleListAPI = async (page, battleType) => { export const getRankListAPI = () => { return request("GET", "/index/ranklist"); }; + +export const createOrderAPI = (vipId) => { + return request("POST", "/user/order/create", { + vipId, + quanity: 1, + mockTest: true, + tradeType: "mini", + payType: "wxpay", + }); +}; + +export const payOrderAPI = (id) => { + return request("POST", "/user/order/pay", { + id, + mockTest: true, + tradeType: "mini", + payType: "wxpay", + }); +}; + +export const getOrderListAPI = async (page) => { + const reuslt = await request("GET", `/user/order/list?page${page}`); + return reuslt.items || []; +}; + +export const cancelOrderListAPI = async (id) => { + return request("POST", "/user/order/cancelOrder", { id }); +}; + +export const isGamingAPI = async () => { + const result = await request("GET", "/user/isGaming"); + return result.gaming || false; +}; diff --git a/src/components/ScrollList.vue b/src/components/ScrollList.vue index d60d035..5f042f0 100644 --- a/src/components/ScrollList.vue +++ b/src/components/ScrollList.vue @@ -3,7 +3,7 @@ import { ref, watch } from "vue"; const props = defineProps({ show: { type: Boolean, - default: false, + default: true, }, onLoading: { type: Function, diff --git a/src/constants.js b/src/constants.js index 36d7199..c7f4498 100644 --- a/src/constants.js +++ b/src/constants.js @@ -51,3 +51,15 @@ export const meleeAvatarColors = [ "#9BA969", "#DCCE6D", ]; + +export const orderStatusNames = { + 1: "待付款", + 2: "已付款", + 3: "已发货", + 4: "已完成", + 5: "已关闭", + 6: "申请退款", + 7: "退款中", + 8: "已退款", + 9: "拒绝退款", +}; diff --git a/src/pages/be-vip.vue b/src/pages/be-vip.vue index 2ab3b8e..101423f 100644 --- a/src/pages/be-vip.vue +++ b/src/pages/be-vip.vue @@ -5,6 +5,7 @@ import Avatar from "@/components/Avatar.vue"; import SButton from "@/components/SButton.vue"; import SModal from "@/components/SModal.vue"; import Signin from "@/components/Signin.vue"; +import { createOrderAPI } from "@/apis"; import useStore from "@/store"; import { storeToRefs } from "pinia"; const store = useStore(); @@ -13,14 +14,19 @@ const { user, config } = storeToRefs(store); const selectedVIP = ref(0); const showModal = ref(false); -const chooseVip = (index) => { - selectedVIP.value = index; -}; - -const onPay = () => { +const onPay = async () => { if (!user.value.id) { showModal.value = true; - } else { + } else if (config.value.vipMenus[selectedVIP.value]) { + if (config.value.vipMenus[selectedVIP.value].id) { + const result = await createOrderAPI( + config.value.vipMenus[selectedVIP.value].id + ); + uni.showToast({ + title: "创建成功", + icon: "none", + }); + } } }; @@ -70,7 +76,7 @@ const onPay = () => { ? '#FF7D57' : 'linear-gradient(180deg, #fbfbfb 0%, #f5f5f5 100%)', }" - @click="chooseVip(index)" + @click="() => (selectedVIP = index)" > {{ item.name }} @@ -141,6 +147,7 @@ const onPay = () => { .content > view:nth-child(2) > text { display: block; margin-top: 10px; + color: #000; } .vip-items { width: 100%; diff --git a/src/pages/friend-battle.vue b/src/pages/friend-battle.vue index f6d9e7f..9b7d715 100644 --- a/src/pages/friend-battle.vue +++ b/src/pages/friend-battle.vue @@ -6,7 +6,7 @@ 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, joinRoomAPI } from "@/apis"; +import { getRoomAPI, joinRoomAPI, isGamingAPI } from "@/apis"; import useStore from "@/store"; import { storeToRefs } from "pinia"; const store = useStore(); @@ -18,6 +18,7 @@ const warnning = ref(""); const roomNumber = ref(""); const enterRoom = debounce(async () => { + // const isGaming = await isGamingAPI(); if (!roomNumber.value) { warnning.value = "请输入房间号"; showModal.value = true; diff --git a/src/pages/melee-match.vue b/src/pages/melee-match.vue index 03602eb..2ae4a8b 100644 --- a/src/pages/melee-match.vue +++ b/src/pages/melee-match.vue @@ -12,6 +12,7 @@ import SButton from "@/components/SButton.vue"; import Avatar from "@/components/Avatar.vue"; import ScreenHint from "@/components/ScreenHint.vue"; import Matching from "@/components/Matching.vue"; +import SModal from "@/components/SModal.vue"; import { matchGameAPI, readyGameAPI } from "@/apis"; import { MESSAGETYPES, getMessageTypeName } from "@/constants"; import useStore from "@/store"; @@ -34,6 +35,7 @@ const players = ref([]); const playersScores = ref({}); const halfTimeTip = ref(false); const onComplete = ref(null); +const showModal = ref(false); onLoad(async (options) => { gameType.value = options.gameType; @@ -109,6 +111,16 @@ async function onReceiveMessage(messages = []) { } }); } +const onBack = () => { + if (battleId.value) { + showModal.value = true; + } else { + uni.navigateBack(); + } +}; +const exitRoom = async () => { + uni.navigateBack(); +}; onMounted(() => { uni.$on("socket-inbox", onReceiveMessage); }); @@ -121,7 +133,11 @@ onUnmounted(() => {