diff --git a/vuetify-project/audit.html b/vuetify-project/audit_games.html similarity index 84% rename from vuetify-project/audit.html rename to vuetify-project/audit_games.html index 8ca1b2bb3d412d4be8ca421807062c00d07e5bbe..5af21c85b7fe17312a594d47ad46a6a7214a8909 100644 --- a/vuetify-project/audit.html +++ b/vuetify-project/audit_games.html @@ -15,7 +15,7 @@ <body> <div id="app"></div> - <script type="module" src="src/components/audit.js"></script> + <script type="module" src="src/audit_games.js"></script> </body> </html> diff --git a/vuetify-project/game_detail.html b/vuetify-project/lauched_games.html similarity index 82% rename from vuetify-project/game_detail.html rename to vuetify-project/lauched_games.html index 5ffbd8fd687e8c8d48d4ecf84694e1f8f1755748..3455183f2d4362fb7d0f90e39498ab7032fa0084 100644 --- a/vuetify-project/game_detail.html +++ b/vuetify-project/lauched_games.html @@ -15,7 +15,7 @@ <body> <div id="app"></div> - <script type="module" src="src/components/game_detail.js"></script> + <script type="module" src="src/lauched_games.js"></script> </body> </html> diff --git a/vuetify-project/package-lock.json b/vuetify-project/package-lock.json index acdf6aa641012759503797b190b3a06d050177fe..cbca27f9a02e1dc4e4bf42ee322a6a33ccb38638 100644 --- a/vuetify-project/package-lock.json +++ b/vuetify-project/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@mdi/font": "7.0.96", "axios": "^1.6.8", + "dayjs": "^1.11.10", "roboto-fontface": "*", "vue": "^3.3.0", "vuetify": "^3.5.9" @@ -882,6 +883,11 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", diff --git a/vuetify-project/package.json b/vuetify-project/package.json index 082147c6cfc37556ed0d4c21cf481c57123d38ed..f5af6160a51d8d34e97a352a4ba7f125303a1bfa 100644 --- a/vuetify-project/package.json +++ b/vuetify-project/package.json @@ -9,6 +9,7 @@ "dependencies": { "@mdi/font": "7.0.96", "axios": "^1.6.8", + "dayjs": "^1.11.10", "roboto-fontface": "*", "vue": "^3.3.0", "vuetify": "^3.5.9" diff --git a/vuetify-project/src/components/audit.js b/vuetify-project/src/audit_games.js similarity index 88% rename from vuetify-project/src/components/audit.js rename to vuetify-project/src/audit_games.js index 8b9cd9952620b886e0bfe9a26defb11b8906ee2b..4e35c38c132fdef0e84880525ff124d0e211f7e4 100644 --- a/vuetify-project/src/components/audit.js +++ b/vuetify-project/src/audit_games.js @@ -8,7 +8,7 @@ import { registerPlugins } from '@/plugins' // Components -import App from './audit.vue' +import App from './audit_games.vue' // Composables import { createApp } from 'vue' diff --git a/vuetify-project/src/audit_games.vue b/vuetify-project/src/audit_games.vue new file mode 100644 index 0000000000000000000000000000000000000000..a3ca2739fd9c7a1fcf4562fc064d8f0b769acda1 --- /dev/null +++ b/vuetify-project/src/audit_games.vue @@ -0,0 +1,132 @@ +<template> + <v-app> + <!-- {{ filteredMatches }} --> + <v-container> + <v-data-table :headers="headers" :items="filteredMatches" item-key="id" :search="search.value" :items-per-page="10"> + <template v-slot:top> + <v-toolbar flat> + <v-toolbar-title>比赛</v-toolbar-title> + <v-divider class="mx-4" inset vertical></v-divider> + <v-spacer></v-spacer> + <v-text-field v-model="search" append-icon="mdi-magnify" label="æœç´¢" single-line hide-details></v-text-field> + </v-toolbar> + </template> + <template v-slot:item.date="{ item }"> + {{ item.date }} + </template> + <template v-slot:item.team="{ item }"> + {{ item.homeTeam }} VS {{ item.awayTeam }} + </template> + <template v-slot:item.score="{ item }"> + {{ item.homeScore }} - {{ item.awayScore }} + </template> + <template v-slot:item.actions="{ item }"> + <v-icon small @click="approveMatch(item)" style="padding-right: 20px;">mdi-check</v-icon> + <v-icon small @click="rejectMatch(item)" style="padding-left: 20px;">mdi-close</v-icon> + </template> + </v-data-table> + </v-container> + + </v-app> +</template> + +<script setup> +import { ref } from 'vue'; +import { reactive } from 'vue'; +import { computed } from 'vue'; +import axios from 'axios'; + +const matches = ref(new Array()); +refresh(); +function refresh(){ + axios.get('/api/lauchedGames',) + .then(function(response){ + const data = response.data; + for(var i = 0; i < data.Games.length; i++){ + var match = { + id:data.Games[i].id, + date:data.Games[i].game_date, + homeTeam:data.Games[i].player1_real_name, + awayTeam:data.Games[i].player2_real_name, + homeScore:data.Games[i].score1, + awayScore:data.Games[i].score2, + verify:true, + } + matches.value[i] = match; + } + }) + .catch(function (error) { + console.log(error); + }) +} + +function refresh1(){ + axios.get('/api/lauchedGames',) + .then(function(response){ + const data = response.data; + const matches = ref(new Array()); + for(var i = 0; i < data.Games.length; i++){ + var match = { + id:data.Games[i].id, + date:data.Games[i].game_date, + homeTeam:data.Games[i].player1_real_name, + awayTeam:data.Games[i].player2_real_name, + homeScore:data.Games[i].score1, + awayScore:data.Games[i].score2, + verify:true, + } + matches.value[i] = match; + } + }) + .catch(function (error) { + console.log(error); + }) +} + +const search = ref(''); +const headers = reactive([ + { title: '日期', key: 'date', sortable: false }, + { title: '比赛', key: 'team', sortable: false }, + { title: '比分', key: 'score', sortable: false }, + { title: 'å®¡æ ¸', key: 'actions', sortable: false } +]); +// const matches = ref(new Array()); + +const filteredMatches = computed(() => { + // return matches.value + return matches.value.filter(match => + match.homeTeam.includes(search.value) || + match.awayTeam.includes(search.value) || + match.homeScore === parseInt(search.value) || + match.awayScore === parseInt(search.value) + ); +}) + +function approveMatch(match) { + match.verify = true; + axios.post('/api/confirmGame',{ + game_id:match.id, + confirm:match.verify + }) + .then(function(){ + refresh1(); + }) + .catch(function (error) { + console.log(error); + }) +} + +function rejectMatch(match){ + match.verify = false; + axios.post('/api/confirmGame',{ + game_id:match.id, + confirm:match.verify + }) + .then(function(){ + refresh1(); + }) + .catch(function (error) { + console.log(error); + }) +} +</script> \ No newline at end of file diff --git a/vuetify-project/src/components/audit.vue b/vuetify-project/src/components/audit.vue deleted file mode 100644 index 1774518dbaca6da5ff321431f0a17c000486298f..0000000000000000000000000000000000000000 --- a/vuetify-project/src/components/audit.vue +++ /dev/null @@ -1,66 +0,0 @@ -<template> - <v-app> - <!-- {{ filteredMatches }} --> - <v-container> - <v-data-table :headers="headers" :items="filteredMatches" item-key="id" :search="search.value" :items-per-page="10"> - <template v-slot:top> - <v-toolbar flat> - <v-toolbar-title>比赛</v-toolbar-title> - <v-divider class="mx-4" inset vertical></v-divider> - <v-spacer></v-spacer> - <v-text-field v-model="search" append-icon="mdi-magnify" label="æœç´¢" single-line hide-details></v-text-field> - </v-toolbar> - </template> - <template v-slot:item.team="{ item }"> - {{ item.homeTeam }} VS {{ item.awayTeam }} - </template> - <template v-slot:item.score="{ item }"> - {{ item.homeScore }} - {{ item.awayScore }} - </template> - <template v-slot:item.actions="{ item }"> - <v-icon small @click="approveMatch(item)" style="padding-right: 20px;">mdi-check</v-icon> - <v-icon small @click="rejectMatch(item)" style="padding-left: 20px;">mdi-close</v-icon> - </template> - </v-data-table> - </v-container> - - </v-app> -</template> - -<script setup> -import { ref } from 'vue'; -import { reactive } from 'vue'; -import { computed } from 'vue'; - -const search = ref(''); -const headers = reactive([ - { title: '比赛', key: 'team' }, - { title: '比分', key: 'score' }, - { title: 'å®¡æ ¸', key: 'actions', sortable: false } -]); -const matches = ref([ - { id: 1, homeTeam: 'å¼ ä¸‰', awayTeam: 'é›¶', homeScore: 2, awayScore: 1, status: 'pending' }, - { id: 2, homeTeam: 'æŽå››', awayTeam: '一', homeScore: 0, awayScore: 3, status: 'pending' }, - { id: 3, homeTeam: '王五', awayTeam: '二', homeScore: 2, awayScore: 2, status: 'pending' }, -]); - -const filteredMatches = computed(() => { - // return matches.value - return matches.value.filter(match => - match.homeTeam.includes(search.value) || - match.awayTeam.includes(search.value) || - match.homeScore === parseInt(search.value) || - match.awayScore === parseInt(search.value) - ); -}) - -function approveMatch(match) { - // Perform approval logic - match.status = 'approved'; -} -function rejectMatch(match) { - // Perform rejection logic - match.status = 'rejected'; -} - -</script> \ No newline at end of file diff --git a/vuetify-project/src/components/gamemanage.vue b/vuetify-project/src/components/gamemanage.vue index 9d9a4bb903cab534c409aecbf04b7db98005db28..8e322d4ad8efe0b09f8e82530b0419126b56b43f 100644 --- a/vuetify-project/src/components/gamemanage.vue +++ b/vuetify-project/src/components/gamemanage.vue @@ -10,46 +10,45 @@ <v-form v-model="isValid"> <v-row no-gutters> <v-col align-self="center"> - <v-autocomplete variant="underlined" v-model="player1" label="å§“å" :rules="[rules.player1]" - :items="['California', 'Colorado', 'Florida', 'Georgia', 'Texas', 'Wyoming']"></v-autocomplete> + <v-autocomplete variant="underlined" v-model="player1" label="å§“å" + :rules="[rules.player_not_none, rules.player1]" :items="arr"></v-autocomplete> </v-col> <v-col cols="2" align-self="center"> <div class="text-h6" style="text-align: center;">VS</div> </v-col> <v-col align-self="center"> - <v-autocomplete variant="underlined" v-model="player2" label="å§“å" :rules="[rules.player2]" - :items="['California', 'Colorado', 'Florida', 'Georgia', 'Texas', 'Wyoming']"></v-autocomplete> + <v-autocomplete variant="underlined" v-model="player2" label="å§“å" + :rules="[rules.player_not_none, rules.player2]" :items="arr"></v-autocomplete> </v-col> </v-row> <v-row no-gutters> <v-col align-self="center"> - <v-select variant="underlined" v-model="score1" label="得分" :rules="[rules.score1]" + <v-select variant="underlined" v-model="score1" label="得分" :rules="[rules.score_not_none, rules.score1]" :items="['0', '1', '2', '3', '4', '5']"></v-select> </v-col> <v-col cols="2" align-self="center"> <div class="text-h6" style="text-align: center;">:</div> </v-col> <v-col align-self="center"> - <v-select variant="underlined" v-model="score2" label="得分" :rules="[rules.score2]" + <v-select variant="underlined" v-model="score2" label="得分" :rules="[rules.score_not_none, rules.score2]" :items="['0', '1', '2', '3', '4', '5']"></v-select> </v-col> </v-row> <v-dialog> <template v-slot:activator="{ props: activatorProps }"> - <v-btn block v-bind="activatorProps" class="text-none mb-4" color="indigo" size="large" - variant="outlined"> + <v-btn block v-bind="activatorProps" class="text-none mb-4" color="indigo" size="large" variant="outlined"> <template v-slot:default> - {{ selectedDate.getFullYear() }}-{{ selectedDate.getMonth() + 1 }}-{{ selectedDate.getDate() }} - + 选择比赛日期:{{ selectedDate.toLocaleDateString() }} </template> </v-btn> </template> <template v-slot:default="{ isActive }"> <v-card> - <v-locale-provider locale="zhHans"> - <v-date-picker v-model="selectedDate" header="日期" title="选择比赛日期" color="indigo" width="100%"></v-date-picker> - </v-locale-provider> + <v-locale-provider locale="zhHans"> + <v-date-picker v-model="selectedDate" header="日期" title="选择比赛日期" color="indigo" + width="100%"></v-date-picker> + </v-locale-provider> <v-card-actions> <v-spacer></v-spacer> <v-btn variant="flat" text="确定" color="indigo" @click="isActive.value = false"></v-btn> @@ -66,11 +65,24 @@ </v-card> + <v-dialog v-model="dialog" width="auto"> + <v-card width="300px"> + <v-card-title> + {{ cardtitle }} + </v-card-title> + <v-card-text> + {{ cardtext }} + </v-card-text> + <template v-slot:actions> + <v-btn class="ms-auto" variant="flat" color="indigo" text="确认" @click="dialog = false"></v-btn> + </template> + </v-card> + </v-dialog> <div> - <v-card class="mx-auto my-2" href="../../game_detail.html" width="95%" rel="noopener" target="_blank" title="å·²æäº¤æ¯”èµ›" + <v-card class="mx-auto my-2" href="/lauched_games.html" width="95%" rel="noopener" target="_blank" title="å·²æäº¤æ¯”èµ›" append-icon="mdi-chevron-right"></v-card> - <v-card class="mx-auto my-2" href="../../audit.html" width="95%" rel="noopener" target="_blank" title="å¾…å®¡æ ¸æ¯”èµ›" + <v-card class="mx-auto my-2" href="/audit_games.html" width="95%" rel="noopener" target="_blank" title="å¾…å®¡æ ¸æ¯”èµ›" append-icon="mdi-chevron-right"></v-card> </div> @@ -88,37 +100,66 @@ const score1 = ref(null); const score2 = ref(null); const loading = ref(false); const selectedDate = ref(new Date()); +const arr = ref(new Array()); +const id = ref(null); +var s1; +var s2; +var p1_id; +var p2_id; + + const rules = reactive({ email: v => !!(v || '').match(/@/) || 'Please enter a valid email', length: len => v => (v || '').length >= len || `Invalid character length, required ${len}`, - player1: v => !!v || 'å§“åä¸èƒ½ä¸ºç©º', - player2: v => !!v || 'å§“åä¸èƒ½ä¸ºç©º', - // password: v => !!(v || '').match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$/) || - // 'Password must contain an upper case letter, a numeric character, and a special character', + + player_not_none: v => !!v || 'å§“åä¸èƒ½ä¸ºç©º', + player1: v => v != player2.value || 'å§“åä¸èƒ½ç›¸åŒ', + player2: v => v != player1.value || 'å§“åä¸èƒ½ç›¸åŒ', + required: v => !!v || 'This field is required', - score1: v => !!v || '得分ä¸èƒ½ä¸ºç©º', - score2: v => !!v || '得分ä¸èƒ½ä¸ºç©º', + score_not_none: v => !!v || '得分ä¸èƒ½ä¸ºç©º', + score1: v => v != score2.value || '得分ä¸èƒ½ç›¸åŒ', + score2: v => v != score1.value || '得分ä¸èƒ½ç›¸åŒ', }); -function submit() { - loading.value = true; - axios.get('/api/players', { - usrname: usrname.value, - psword: password.value +axios.get('/api/players') + .then(function (response) { + const data = response.data; + for (var i = 0; i < data.Players.length; i++) { + arr.value[i] = data.Players[i].player_id.toString() + '-' + data.Players[i].player_real_name; + } + }) + .catch(function (error) { + console.log(error); }) - .then(function (response) { - }) - .catch(function (error) { - console.log(error); - }); - axios.post('/api/register', { - usrname: usrname.value, - psword: password.value +function submit() { + loading.value = true; + p1_id = parseInt(player1.value); + p2_id = parseInt(player2.value); + s1 = parseInt(score1.value); + s2 = parseInt(score2.value); + if (s1 < s2) { + id.value = p1_id; + } + else { + id.value = p2_id; + } + axios.post('/api/launchGame', { + player1_id: p1_id, + score1: s1, + player2_id: p2_id, + score2: s2, + confirmer_id: id.value, + game_date: selectedDate.value.toLocaleDateString(), }) .then(function (response) { - + const data = response.data; + console.log(data) + if (data.status == 'SUCCESS') { + info('æäº¤æˆåŠŸï¼', ""); + } }) .catch(function (error) { console.log(error); @@ -127,6 +168,15 @@ function submit() { } +const cardtitle = ref(null); +const cardtext = ref(null); +const dialog = ref(false); +function info(title, text) { + cardtitle.value = title; + cardtext.value = text; + dialog.value = true; +} + </script> <style> diff --git a/vuetify-project/src/components/login_comp.vue b/vuetify-project/src/components/login_comp.vue index 2f070315bf6c3aa0de0c13232d6fd7272a349fd8..669e9e56247c644f8edb88d00a5b953c5bd108c5 100644 --- a/vuetify-project/src/components/login_comp.vue +++ b/vuetify-project/src/components/login_comp.vue @@ -12,16 +12,33 @@ </v-btn> </v-card-actions> - <v-dialog v-model="realname1"> - <v-card> - <v-card-text>如è¦åŠ å…¥ä¿±ä¹éƒ¨ï¼Œè¯·è¾“入真实姓å: - <v-text-field v-model="realname" variant="filled" :rules="[rules.realname]" color="indigo" - label="å§“å"></v-text-field> - <v-btn :disabled="!isValid" :loading="loading" block class="text-none mb-4" color="indigo" size="x-large" - variant="flat" @click="submit"> - æäº¤ - </v-btn> + <v-form v-model="isValid"> + <v-dialog v-model="realname1"> + <v-card> + <v-card-text>如è¦åŠ å…¥ä¿±ä¹éƒ¨ï¼Œè¯·è¾“入真实姓å: + <v-text-field v-model="realname" variant="filled" :rules="[rules.realname]" color="indigo" + label="å§“å"></v-text-field> + <v-btn :disabled="!isValid" :loading="loading" block class="text-none mb-4" color="indigo" size="x-large" + variant="flat" @click="submit"> + æäº¤ + </v-btn> + </v-card-text> + </v-card> + </v-dialog> + </v-form> + + + <v-dialog v-model="dialog" width="auto"> + <v-card width="300px"> + <v-card-title> + {{ cardtitle }} + </v-card-title> + <v-card-text> + {{ cardtext }} </v-card-text> + <template v-slot:actions> + <v-btn class="ms-auto" variant="flat" color="indigo" text="确认" @click="dialog = false"></v-btn> + </template> </v-card> </v-dialog> @@ -88,7 +105,7 @@ function submit() { name: realname.value, }) .then(function () { - alert('æäº¤å®Œæˆï¼Œè¯·è”系管ç†å‘˜å®¡æ ¸'); + info('æäº¤æˆåŠŸï¼', "请è”系管ç†å‘˜å®¡æ ¸ï¼"); }) .catch(function (error) { console.log(error); @@ -96,4 +113,13 @@ function submit() { loading.value = false; } +const cardtitle = ref(null); +const cardtext = ref(null); +const dialog = ref(false); +function info(title, text) { + cardtitle.value = title; + cardtext.value = text; + dialog.value = true; +} + </script> \ No newline at end of file diff --git a/vuetify-project/src/components/register_comp.vue b/vuetify-project/src/components/register_comp.vue index 00f017523aca3f925cacdd73f36104d43a97a166..03b60a3046213dfd7a925a3747119608e7016cb3 100644 --- a/vuetify-project/src/components/register_comp.vue +++ b/vuetify-project/src/components/register_comp.vue @@ -12,6 +12,19 @@ 注册 </v-btn> </v-card-actions> + <v-dialog v-model="dialog" width="auto"> + <v-card width="300px"> + <v-card-title> + {{ cardtitle }} + </v-card-title> + <v-card-text> + {{ cardtext }} + </v-card-text> + <template v-slot:actions> + <v-btn class="ms-auto" variant="flat" color="indigo" text="确认" @click="dialog = false"></v-btn> + </template> + </v-card> + </v-dialog> </template> <script setup> import { ref } from 'vue'; @@ -45,11 +58,11 @@ function register(){ .then(function (response) { const data = response.data; if(data.status == 'SUCCESS'){ - alert('注册æˆåŠŸï¼'); + info('注册æˆåŠŸï¼', ""); } else if(data.status == 'FAILED') { - alert('用户åå·²å˜åœ¨ï¼'); + info('用户åå·²å˜åœ¨ï¼', ""); } }) .catch(function (error) { @@ -58,4 +71,13 @@ function register(){ loading.value =false; } +const cardtitle = ref(null); +const cardtext = ref(null); +const dialog = ref(false); +function info(title,text) { + cardtitle.value = title; + cardtext.value = text; + dialog.value=true; +} + </script> \ No newline at end of file diff --git a/vuetify-project/src/components/game_detail.js b/vuetify-project/src/lauched_games.js similarity index 87% rename from vuetify-project/src/components/game_detail.js rename to vuetify-project/src/lauched_games.js index e155e5aa4d93d9cf2477d8b69e546db628852a8e..35e418aa4b6b28905db40beeca6bd32a75f2ca1f 100644 --- a/vuetify-project/src/components/game_detail.js +++ b/vuetify-project/src/lauched_games.js @@ -8,7 +8,7 @@ import { registerPlugins } from '@/plugins' // Components -import App from './game_detail.vue' +import App from './lauched_games.vue' // Composables import { createApp } from 'vue' diff --git a/vuetify-project/src/components/game_detail.vue b/vuetify-project/src/lauched_games.vue similarity index 54% rename from vuetify-project/src/components/game_detail.vue rename to vuetify-project/src/lauched_games.vue index 72bf95d029bbe2cc68e37a769f243db5b30d0828..44149d93c98bc5c095c81d45a8e9062a5597a481 100644 --- a/vuetify-project/src/components/game_detail.vue +++ b/vuetify-project/src/lauched_games.vue @@ -11,6 +11,9 @@ hide-details></v-text-field> </v-toolbar> </template> + <template v-slot:item.date="{ item }"> + {{ item.date }} + </template> <template v-slot:item.name="{ item }"> {{ item.username }} VS {{ item.opponentname }} </template> @@ -18,9 +21,9 @@ {{ item.userScore }} - {{ item.opponentScore }} </template> <template v-slot:item.verified="{ item }"> - <v-icon v-if="item.verified === 1" color="blue">mdi-help-circle</v-icon> - <v-icon v-else-if="item.verified === 2" color="red">mdi-check-circle</v-icon> - <v-icon v-else-if="item.verified === 3" color="green">mdi-close-circle</v-icon> + <v-icon v-if="item.verified === 'WAITING'" color="blue">mdi-help-circle</v-icon> + <v-icon v-else-if="item.verified === 'PASSED'" color="green">mdi-check-circle</v-icon> + <v-icon v-else-if="item.verified === 'REJECT'" color="red">mdi-close-circle</v-icon> <!-- <v-icon :color="item.verified != 1 ? (item.verified == 2 ? 'green' : 'red') : 'red'">{{ item.verified ? 'mdi-check-circle' : 'mdi-close-circle' }}</v-icon> --> @@ -33,19 +36,20 @@ import { ref } from 'vue'; import { reactive } from 'vue'; import { computed } from 'vue'; +import axios from 'axios'; const search = ref(''); const headers = reactive([ - { title: '比赛', key: 'name', sortable: true }, - { title: '比分', key: 'score', sortable: true }, + { title: '日期', key: 'date', sortable: false }, + { title: '比赛', key: 'name', sortable: false }, + { title: '比分', key: 'score', sortable: false }, { title: 'å®¡æ ¸çŠ¶æ€', key: 'verified' }, ]); -const matches = ref([ - { id: 1, username: 'å¼ ä¸‰', opponentname: 'é›¶', userScore: 3, opponentScore: 2, verified: 1 }, - { id: 2, username: 'æŽå››', opponentname: '一', userScore: 1, opponentScore: 1, verified: 2 }, - { id: 3, username: '王五', opponentname: '二', userScore: 2, opponentScore: 4, verified: 3 }, -]); +const matches = ref(new Array()); +// matches = [ +// { id: 1, username: 'å¼ ä¸‰', opponentname: 'é›¶', userScore: 3, opponentScore: 2, verified: "PASSED" }, +// ]; const filteredMatches = computed(() => { // return matches.value @@ -57,4 +61,24 @@ const filteredMatches = computed(() => { ); }) +axios.get('/api/myLauchedGames',) + .then(function(response){ + const data = response.data; + for(var i = 0; i < data.Games.length; i++){ + // matches.value[i].id = i+1; + var match = { + id:data.Games[i].id, + date:data.Games[i].game_date, + username:data.Games[i].player1_real_name, + opponentname:data.Games[i].player2_real_name, + userScore:data.Games[i].score1, + opponentScore:data.Games[i].score2, + verified:data.Games[i].status, + } + matches.value[i] = match; + } + }) + .catch(function (error) { + console.log(error); + }) </script> \ No newline at end of file diff --git a/vuetify-project/vite.config.mjs b/vuetify-project/vite.config.mjs index c928d5181804ac983cee98f865f59ba84f4fcfa9..bdb636adc04654165fa571408b2b3d8da4860f57 100644 --- a/vuetify-project/vite.config.mjs +++ b/vuetify-project/vite.config.mjs @@ -55,6 +55,8 @@ export default defineConfig({ home: resolve(__dirname, 'home.html'), space: resolve(__dirname, 'space.html'), main: resolve(__dirname, 'main.html'), + lauched_games: resolve(__dirname, 'lauched_games.html'), + audit_games: resolve(__dirname, 'audit_games.html'), } }, },