Compare commits
17 Commits
fetch-test
...
c3b86cb68b
Author | SHA1 | Date | |
---|---|---|---|
c3b86cb68b | |||
44ce39bf3f | |||
068e24ba60 | |||
995cca83ae | |||
87bdf08b65 | |||
c9f82674de | |||
ed78ffc158 | |||
83ce4b4fcc | |||
3036190701 | |||
e6a89c1561 | |||
553b37654e | |||
56bf47b91a | |||
745532c1b8 | |||
7e0687d3ca | |||
8a3185d694 | |||
340fbd3812 | |||
4c42f15dc6 |
Before Width: | Height: | Size: 1.5 MiB |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg>
|
|
Before Width: | Height: | Size: 276 B |
@ -1,9 +0,0 @@
|
|||||||
<template>
|
|
||||||
<v-navigation-drawer>
|
|
||||||
<v-list-item title="Brain Blast" subtitle="The cultural quizzzz"></v-list-item>
|
|
||||||
<v-divider></v-divider>
|
|
||||||
<v-list-item link title="List Item 1"></v-list-item>
|
|
||||||
<v-list-item link title="List Item 2"></v-list-item>
|
|
||||||
<v-list-item link title="List Item 3"></v-list-item>
|
|
||||||
</v-navigation-drawer>
|
|
||||||
</template>
|
|
@ -1 +0,0 @@
|
|||||||
test
|
|
@ -1,40 +0,0 @@
|
|||||||
/**
|
|
||||||
* plugins/vuetify.js
|
|
||||||
*
|
|
||||||
* Framework documentation: https://vuetifyjs.com`
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Styles
|
|
||||||
import '@mdi/font/css/materialdesignicons.css'
|
|
||||||
import 'vuetify/styles'
|
|
||||||
|
|
||||||
// Composables
|
|
||||||
import { createVuetify } from 'vuetify'
|
|
||||||
|
|
||||||
// https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides
|
|
||||||
export default createVuetify({
|
|
||||||
theme: {
|
|
||||||
themes: {
|
|
||||||
light: {
|
|
||||||
background: '#212121',
|
|
||||||
primary: '#cc0000',
|
|
||||||
controls: '#cc0000',
|
|
||||||
soundboard: '#9A2779',
|
|
||||||
secondary: '#b0bec5',
|
|
||||||
feedback: '#2E7D32',
|
|
||||||
accent: '#8c9eff',
|
|
||||||
error: '#b71c1c',
|
|
||||||
},
|
|
||||||
dark: {
|
|
||||||
background: '#121212',
|
|
||||||
primary: '#2979FF',
|
|
||||||
controls: '#AB47B',
|
|
||||||
secondary: '#90a4ae',
|
|
||||||
feedback: '#2E7D32',
|
|
||||||
accent: '#8c9eff',
|
|
||||||
error: '#b71c1c',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
defaultTheme: 'dark',
|
|
||||||
}
|
|
||||||
})
|
|
@ -1,11 +0,0 @@
|
|||||||
<template>
|
|
||||||
<v-img width="1645" src="../assets/BrainBlast-For-HomeView-Alpha.png"></v-img>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'VotreComposant', // Assurez-vous de donner un nom à votre composant
|
|
||||||
// Votre logique JavaScript ici, par exemple des méthodes, des données, etc.
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
8
package-lock.json → ui/package-lock.json
generated
@ -22,7 +22,7 @@
|
|||||||
"eslint-plugin-vue": "^9.17.0",
|
"eslint-plugin-vue": "^9.17.0",
|
||||||
"prettier": "^3.0.3",
|
"prettier": "^3.0.3",
|
||||||
"unplugin-fonts": "^1.1.1",
|
"unplugin-fonts": "^1.1.1",
|
||||||
"vite": "^5.1.4",
|
"vite": "^5.1.6",
|
||||||
"vite-plugin-vuetify": "^2.0.1"
|
"vite-plugin-vuetify": "^2.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -2814,9 +2814,9 @@
|
|||||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "5.1.4",
|
"version": "5.1.6",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz",
|
||||||
"integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==",
|
"integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.19.3",
|
"esbuild": "^0.19.3",
|
@ -25,7 +25,7 @@
|
|||||||
"eslint-plugin-vue": "^9.17.0",
|
"eslint-plugin-vue": "^9.17.0",
|
||||||
"prettier": "^3.0.3",
|
"prettier": "^3.0.3",
|
||||||
"unplugin-fonts": "^1.1.1",
|
"unplugin-fonts": "^1.1.1",
|
||||||
"vite": "^5.1.4",
|
"vite": "^5.1.6",
|
||||||
"vite-plugin-vuetify": "^2.0.1"
|
"vite-plugin-vuetify": "^2.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
@ -1,11 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-app>
|
<v-app>
|
||||||
<BrainBlastBar />
|
<BrainBlastBar />
|
||||||
<GameStatus />
|
<GameStatus v-if="$route.name === 'Game Control (Présentateur)'"></GameStatus>
|
||||||
<v-main>
|
<v-main>
|
||||||
<RouterView />
|
<RouterView />
|
||||||
</v-main>
|
</v-main>
|
||||||
<v-footer class="footer" :elevation=12 border><v-row justify="center">© 2024 - ASCO section Fablab</v-row></v-footer>
|
<!-- <v-footer class="footer" :elevation=12 border><v-row justify="center">© 2024 - ASCO section Fablab</v-row></v-footer> -->
|
||||||
</v-app>
|
</v-app>
|
||||||
</template>
|
</template>
|
||||||
|
|
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.7 MiB |
BIN
ui/src/assets/BrainBlast-For-HomeView-Alpha.png
Normal file
After Width: | Height: | Size: 11 MiB |
Before Width: | Height: | Size: 768 KiB After Width: | Height: | Size: 768 KiB |
BIN
ui/src/assets/design.png
Normal file
After Width: | Height: | Size: 3.4 MiB |
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-app-bar :elevation="5">
|
<v-app-bar :elevation="5" height="50">
|
||||||
<RouterMenu />
|
<RouterMenu />
|
||||||
<v-app-bar-title>Brain Blast</v-app-bar-title>
|
<v-app-bar-title>Brain Blast</v-app-bar-title>
|
||||||
|
|
||||||
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
function toggleTheme() {
|
function toggleTheme() {
|
||||||
darkTheme.value = !darkTheme.value
|
darkTheme.value = !darkTheme.value
|
||||||
theme.global.name.value = theme.global.current.value.dark ? 'light' : 'dark'
|
theme.global.name.value = theme.global.current.value.dark ? 'CustomThemeLight' : 'CustomThemeDark'
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
@ -1,29 +1,29 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card tile outlined class="card">
|
<v-card tile outlined class="card">
|
||||||
<v-card-title class="card__title primary">
|
<v-card-title class="card__title primary">
|
||||||
<v-icon left class="white--text pr-5 pl-2" size="50">mdi-camera-control</v-icon>
|
<v-icon left class="white--text pr-5 pl-2" size="40">mdi-camera-control</v-icon>
|
||||||
Contrôles
|
Contrôles
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
<v-container class="text-center">
|
<v-container class="text-center">
|
||||||
<v-row justify="center">
|
<v-row justify="center">
|
||||||
<v-col cols="12" sm="6" md="5" class="mt-4">
|
<v-col cols="12" sm="6" md="5" class="mt-4">
|
||||||
<mqtt-button width="240" height="130" class="btn xs12 sm6 md3" topic="/display/control" message="previous">
|
<mqtt-button width="220" height="110" class="btn xs12 sm6 md3" topic="/display/control" message="previous">
|
||||||
<v-icon left size="100">mdi-skip-previous</v-icon>
|
<v-icon left size="80">mdi-skip-previous</v-icon>
|
||||||
</mqtt-button>
|
</mqtt-button>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="5" class="mt-4">
|
<v-col cols="12" sm="6" md="5" class="mt-4">
|
||||||
<mqtt-button width="240" height="130" class="btn card xs12 sm6 md3" topic="/display/control" message="next">
|
<mqtt-button width="240" height="110" class="btn card xs12 sm6 md3" topic="/display/control" message="next">
|
||||||
<v-icon left size="100">mdi-skip-next</v-icon>
|
<v-icon left size="80">mdi-skip-next</v-icon>
|
||||||
</mqtt-button>
|
</mqtt-button>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="5" class="mb-4">
|
<v-col cols="12" sm="6" md="5" class="mb-4">
|
||||||
<mqtt-button width="240" height="130" class="btn card xs12 sm6 md3" topic="/display/control" message="pause">
|
<mqtt-button width="240" height="110" class="btn card xs12 sm6 md3" topic="/display/control" message="pause">
|
||||||
<v-icon left size="100">mdi-pause</v-icon>
|
<v-icon left size="80">mdi-pause</v-icon>
|
||||||
</mqtt-button>
|
</mqtt-button>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="5" class="mb-4">
|
<v-col cols="12" sm="6" md="5" class="mb-4">
|
||||||
<mqtt-button width="240" height="130" class="btn card xs12 sm6 md3 " topic="/display/control" message="play">
|
<mqtt-button width="240" height="110" class="btn card xs12 sm6 md3 " topic="/display/control" message="play">
|
||||||
<v-icon left size="100">mdi-play</v-icon>
|
<v-icon left size="80">mdi-play</v-icon>
|
||||||
</mqtt-button>
|
</mqtt-button>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
@ -1,14 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card tile outlined class="card">
|
<v-card tile outlined class="card">
|
||||||
<v-card-title class="card__title feedback">
|
<v-card-title class="card__title feedback">
|
||||||
<v-icon left class="white--text pr-5 pl-2" size="50">mdi-play-network-outline</v-icon>
|
<v-icon left class="white--text pr-5 pl-2" size="40">mdi-play-network-outline</v-icon>
|
||||||
Solution
|
Solution
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
<v-container class="text-center">
|
<v-container class="text-center">
|
||||||
<v-row justify="center">
|
<v-row justify="center">
|
||||||
<v-container class="text-center">
|
<v-container class="text-center">
|
||||||
<!-- Utilisation de styles CSS personnalisés pour centrer l'image -->
|
<!-- Utilisation de styles CSS personnalisés pour centrer l'image -->
|
||||||
<v-img width="450" src="https://c4.wallpaperflare.com/wallpaper/908/893/291/funny-middle-finger-black-background-wallpaper-preview.jpg" style="margin: 0 auto;"></v-img>
|
<v-img width="400" src="https://c4.wallpaperflare.com/wallpaper/908/893/291/funny-middle-finger-black-background-wallpaper-preview.jpg" style="margin: 0 auto;"></v-img>
|
||||||
</v-container>
|
</v-container>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-container>
|
</v-container>
|
@ -1,36 +1,36 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-card tile outlined class="card" color="">
|
<v-card tile outlined class="card">
|
||||||
<v-card-title class="card__title primary">
|
<v-card-title class="card__title primary">
|
||||||
<v-icon left class="white--text pr-5 pl-2" size="50">mdi-music-box-multiple</v-icon>
|
<v-icon left class="white--text pr-5 pl-2" size="40">mdi-music-box-multiple</v-icon>
|
||||||
Soundboard
|
Soundboard
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
<v-container class="text-center">
|
<v-container class="text-center">
|
||||||
<v-row justify="center">
|
<v-row justify="center">
|
||||||
<v-col cols="12" sm="6" md="4" class="mt-4">
|
<v-col cols="12" sm="6" md="4" class="mt-4">
|
||||||
<mqtt-button class="btn" width="200" height="130" topic="/sound/playsound" message="good-response" rounded>
|
<mqtt-button class="btn" width="200" height="110" topic="/sound/playsound" message="good-response" rounded>
|
||||||
<v-icon size="100">mdi-check-circle-outline</v-icon>
|
<v-icon size="70">mdi-check-circle-outline</v-icon>
|
||||||
</mqtt-button>
|
</mqtt-button>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" class="mt-4">
|
<v-col cols="12" sm="6" md="4" class="mt-4">
|
||||||
<mqtt-button class="btn" width="200" height="130" topic="/sound/playsound" message="bad-response" rounded>
|
<mqtt-button class="btn" width="200" height="110" topic="/sound/playsound" message="bad-response" rounded>
|
||||||
<v-icon size="100">mdi-close-circle-outline</v-icon>
|
<v-icon size="70">mdi-close-circle-outline</v-icon>
|
||||||
</mqtt-button>
|
</mqtt-button>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="4" class="mt-4">
|
<v-col cols="12" sm="6" md="4" class="mt-4">
|
||||||
<mqtt-button class="btn" width="200" height="130" topic="/sound/playsound" message="timer" rounded>
|
<mqtt-button class="btn" width="200" height="110" topic="/sound/playsound" message="timer" rounded>
|
||||||
<v-icon size="100">mdi-timer-outline</v-icon>
|
<v-icon size="70">mdi-timer-outline</v-icon>
|
||||||
</mqtt-button>
|
</mqtt-button>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row justify="center">
|
<v-row justify="center">
|
||||||
<v-col cols="12" sm="6" md="4" class="mb-4">
|
<v-col cols="12" sm="6" md="4" class="mb-4">
|
||||||
<mqtt-button class="btn" width="220" height="130" topic="/sound/playsound" message="applause" rounded>
|
<mqtt-button class="btn" width="220" height="110" topic="/sound/playsound" message="applause" rounded>
|
||||||
<v-icon size="100">mdi-human-handsup</v-icon>
|
<v-icon size="70">mdi-human-handsup</v-icon>
|
||||||
</mqtt-button>
|
</mqtt-button>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" sm="6" md="s" class="mb-4">
|
<v-col cols="12" sm="6" md="4" class="mb-4">
|
||||||
<mqtt-button class="btn" width="220" height="130" topic="/sound/playsound" message="bell" rounded>
|
<mqtt-button class="btn" width="220" height="110" topic="/sound/playsound" message="bell" rounded>
|
||||||
<v-icon size="100">mdi-bell-outline</v-icon>
|
<v-icon size="70">mdi-bell-outline</v-icon>
|
||||||
</mqtt-button>
|
</mqtt-button>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
171
ui/src/components/GameStatus.vue
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
<template>
|
||||||
|
<v-navigation-drawer width="250">
|
||||||
|
<div class="label-pos">
|
||||||
|
<v-label class="labelTitle-style">Buzzer connectés</v-label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<v-row no-gutters justify="space-around" class="button-pos">
|
||||||
|
<v-icon color="BuzzerRed">mdi-radiobox-marked</v-icon>
|
||||||
|
<v-icon color="BuzzerBlue">mdi-radiobox-marked</v-icon>
|
||||||
|
<v-icon color="BuzzerOrange">mdi-radiobox-marked</v-icon>
|
||||||
|
<v-icon color="BuzzerGreen">mdi-radiobox-marked</v-icon>
|
||||||
|
</v-row>
|
||||||
|
|
||||||
|
<v-divider :thickness="2" class="border-opacity-100" color="primary"/>
|
||||||
|
<div class="label-pos">
|
||||||
|
<v-label class="labelTitle-style pb-7">Scores</v-label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<v-row no-gutters justify="space-around" class="scorebox-1-pos">
|
||||||
|
<v-row>
|
||||||
|
<v-col class="align-start scorediv-style-red pl-1">
|
||||||
|
<v-col>
|
||||||
|
<div class="pr-1">
|
||||||
|
<div>
|
||||||
|
<v-label class="labelRoundScore-style">Manche</v-label>
|
||||||
|
</div>
|
||||||
|
<v-label class="labelRoundScore-style">{{ RedRoundScore }}</v-label>
|
||||||
|
</div>
|
||||||
|
<v-divider class="pr-1" color="background"/>
|
||||||
|
</v-col>
|
||||||
|
<div class="pr-1">
|
||||||
|
<div>
|
||||||
|
<v-label class="labelTotalScore-style">Total</v-label>
|
||||||
|
</div>
|
||||||
|
<v-label class="labelTotalScore-style">{{ RedTotalScore }}</v-label>
|
||||||
|
</div>
|
||||||
|
</v-col>
|
||||||
|
|
||||||
|
|
||||||
|
<v-col class="align-start scorediv-style-blue pl-1">
|
||||||
|
<v-col>
|
||||||
|
<div class="pr-1">
|
||||||
|
<div>
|
||||||
|
<v-label class="labelRoundScore-style">Manche</v-label>
|
||||||
|
</div>
|
||||||
|
<v-label class="labelRoundScore-style">{{ BlueRoundScore }}</v-label>
|
||||||
|
</div>
|
||||||
|
<v-divider class="pr-1" color="background"/>
|
||||||
|
</v-col>
|
||||||
|
|
||||||
|
<div class="pr-1">
|
||||||
|
<div>
|
||||||
|
<v-label class="labelTotalScore-style">Total</v-label>
|
||||||
|
</div>
|
||||||
|
<v-label class="labelTotalScore-style">{{ BlueTotalScore }}</v-label>
|
||||||
|
</div>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</v-row>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<v-row no-gutters justify="space-around" class="scorebox-2-pos mb-0">
|
||||||
|
<v-row>
|
||||||
|
<v-col class="scorediv-style-orange pl-1">
|
||||||
|
<v-col>
|
||||||
|
<div class="pr-1">
|
||||||
|
<div>
|
||||||
|
<v-label class="labelRoundScore-style">Manche</v-label>
|
||||||
|
</div>
|
||||||
|
<v-label class="labelRoundScore-style">{{ OrangeRoundScore }}</v-label>
|
||||||
|
</div>
|
||||||
|
<v-divider class="pr-1" color="background"/>
|
||||||
|
</v-col>
|
||||||
|
|
||||||
|
<div class="pr-1">
|
||||||
|
<div>
|
||||||
|
<v-label class="labelTotalScore-style">Total</v-label>
|
||||||
|
</div>
|
||||||
|
<v-label class="labelTotalScore-style">{{ OrangeTotalScore }}</v-label>
|
||||||
|
</div>
|
||||||
|
</v-col>
|
||||||
|
|
||||||
|
<v-col class="align-start scorediv-style-green pl-1">
|
||||||
|
<v-col>
|
||||||
|
<div class="pr-1">
|
||||||
|
<div>
|
||||||
|
<v-label class="labelRoundScore-style">Manche</v-label>
|
||||||
|
</div>
|
||||||
|
<v-label class="labelRoundScore-style">{{ GreenRoundScore }}</v-label>
|
||||||
|
</div>
|
||||||
|
<v-divider class="pr-1" color="background"/>
|
||||||
|
</v-col>
|
||||||
|
|
||||||
|
<div class="pr-1">
|
||||||
|
<div>
|
||||||
|
<v-label class="labelTotalScore-style">Total</v-label>
|
||||||
|
</div>
|
||||||
|
<v-label class="labelTotalScore-style">{{ GreenTotalScore }}</v-label>
|
||||||
|
</div>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</v-row>
|
||||||
|
</div>
|
||||||
|
</v-navigation-drawer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref} from 'vue'; // Import des fonctions de Vue 3
|
||||||
|
import variables from '@/variables.js';
|
||||||
|
|
||||||
|
// Déclaration des variables locales pour les scores
|
||||||
|
const RedTotalScore = ref(variables.RedTotalScore);
|
||||||
|
const BlueTotalScore = ref(variables.BlueTotalScore);
|
||||||
|
const OrangeTotalScore = ref(variables.OrangeTotalScore);
|
||||||
|
const GreenTotalScore = ref(variables.GreenTotalScore);
|
||||||
|
const RedRoundScore = ref(variables.RedRoundScore);
|
||||||
|
const BlueRoundScore = ref(variables.BlueRoundScore);
|
||||||
|
const OrangeRoundScore = ref(variables.OrangeRoundScore);
|
||||||
|
const GreenRoundScore = ref(variables.GreenRoundScore);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.label-pos{
|
||||||
|
padding-top: 15px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.labelTitle-style{
|
||||||
|
font-size: 20px !important;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #e91e1e !important;
|
||||||
|
opacity: 90% !important;
|
||||||
|
}
|
||||||
|
.labelRoundScore-style{
|
||||||
|
opacity: 100% !important;
|
||||||
|
font-size: 25px !important;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
.labelTotalScore-style{
|
||||||
|
opacity: 100% !important;
|
||||||
|
font-size: 15px !important;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
.button-pos{
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
}
|
||||||
|
.scorebox-1-pos{
|
||||||
|
padding-bottom: 15px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.scorebox-2-pos{
|
||||||
|
padding-top: 9px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.scorediv-style-red{
|
||||||
|
background-color: #d42828 !important;
|
||||||
|
}
|
||||||
|
.scorediv-style-orange{
|
||||||
|
background-color: #d48f28 !important;
|
||||||
|
}
|
||||||
|
.scorediv-style-blue{
|
||||||
|
background-color: #2867d4 !important;
|
||||||
|
}
|
||||||
|
.scorediv-style-green{
|
||||||
|
background-color: #28d42e !important;
|
||||||
|
}
|
||||||
|
</style>
|
8
ui/src/config.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// Fichier vide, regarde config.js.example pour personaliser ce fichier.
|
||||||
|
// Note de dev : Normalement ce fichier ne devrait plus avoir de
|
||||||
|
// modifications
|
||||||
|
|
||||||
|
// config.js
|
||||||
|
export default {
|
||||||
|
mqttBrokerUrl: 'ws://localhost:9001'
|
||||||
|
};
|
@ -31,6 +31,11 @@ const router = createRouter({
|
|||||||
path: '/mqtt-debugger',
|
path: '/mqtt-debugger',
|
||||||
name: 'Debugger MQTT',
|
name: 'Debugger MQTT',
|
||||||
component: () => import('@/views/MQTTDebugView.vue')
|
component: () => import('@/views/MQTTDebugView.vue')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/settings',
|
||||||
|
name: 'Paramètres',
|
||||||
|
component: () => import('@/views/SettingsView.vue')
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
54
ui/src/plugins/vuetify.js
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/**
|
||||||
|
* plugins/vuetify.js
|
||||||
|
*
|
||||||
|
* Framework documentation: https://vuetifyjs.com`
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Styles
|
||||||
|
import '@mdi/font/css/materialdesignicons.css'
|
||||||
|
import 'vuetify/styles'
|
||||||
|
|
||||||
|
// Composables
|
||||||
|
import { createVuetify } from 'vuetify'
|
||||||
|
|
||||||
|
const CustomThemeDark = {
|
||||||
|
dark: true,
|
||||||
|
colors: {
|
||||||
|
background: '#121212',
|
||||||
|
primary: '#e91e1e',
|
||||||
|
secondary: '#F44336',
|
||||||
|
accent: '#FFC107',
|
||||||
|
error: '#e91e1e',
|
||||||
|
warning: '#FFC107',
|
||||||
|
info: '#607D8B',
|
||||||
|
success: '#e91e1e',
|
||||||
|
BuzzerBlue: '#2867d4',
|
||||||
|
BuzzerOrange: '#d48f28',
|
||||||
|
BuzzerRed: '#d42828',
|
||||||
|
BuzzerGreen: '#28d42e',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const CustomThemeLight = {
|
||||||
|
dark: false,
|
||||||
|
colors: {
|
||||||
|
background: '#ffffff',
|
||||||
|
primary: '#e91e1e',
|
||||||
|
secondary: '#F44336',
|
||||||
|
accent: '#FFC107',
|
||||||
|
error: '#e91e1e',
|
||||||
|
warning: '#FFC107',
|
||||||
|
info: '#607D8B',
|
||||||
|
success: '#4CAF50'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides
|
||||||
|
export default createVuetify({
|
||||||
|
theme: {
|
||||||
|
defaultTheme: 'CustomThemeDark',
|
||||||
|
themes: {
|
||||||
|
CustomThemeDark,
|
||||||
|
CustomThemeLight,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
32
ui/src/variables.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
export default {
|
||||||
|
// Gestion des score et des Buzzers
|
||||||
|
|
||||||
|
// Scores totaux
|
||||||
|
RedTotalScore: 11,
|
||||||
|
BlueTotalScore: 22,
|
||||||
|
GreenTotalScore: 33,
|
||||||
|
OrangeTotalScore: 44,
|
||||||
|
|
||||||
|
// Score de la manche courante
|
||||||
|
RedRoundScore: 1,
|
||||||
|
BlueRoundScore: 2,
|
||||||
|
OrangeRoundScore: 3,
|
||||||
|
GreenRoundScore: 4,
|
||||||
|
|
||||||
|
//Etat des buzzer
|
||||||
|
BuzzerRed: false,
|
||||||
|
BuzzerBlue: false,
|
||||||
|
BuzzerOrange: false,
|
||||||
|
BuzzerGreen: false,
|
||||||
|
|
||||||
|
// Ajoutez d'autres variables globales ici
|
||||||
|
};
|
||||||
|
|
||||||
|
// Variables localStorage
|
||||||
|
export const localStorageVars = {
|
||||||
|
// Exemple de variable localStorage
|
||||||
|
RedScorelocal: localStorage.getItem('RedScore') || '',
|
||||||
|
BlueScorelocal: localStorage.getItem('BlueScore') || '',
|
||||||
|
OrangeScorelocal: localStorage.getItem('OrangeScore') || '',
|
||||||
|
GreenScorelocal: localStorage.getItem('GreenScore') || '',
|
||||||
|
};
|
@ -29,14 +29,14 @@ import CardSoundboard from '@/components/CardSoundboard.vue';
|
|||||||
<style>
|
<style>
|
||||||
@media (min-width: 1024px) {
|
@media (min-width: 1024px) {
|
||||||
.card__title.primary {
|
.card__title.primary {
|
||||||
background-color: #2979FF; /* Changez la couleur en fonction de votre thème */
|
background-color: #e91e1e; /* Changez la couleur en fonction de votre thème */
|
||||||
}
|
}
|
||||||
.card__title.feedback {
|
.card__title.feedback {
|
||||||
background-color: #2E7D32; /* Changez la couleur en fonction de votre thème */
|
background-color: #2E7D32; /* Changez la couleur en fonction de votre thème */
|
||||||
}
|
}
|
||||||
.btn{
|
.btn{
|
||||||
border-radius:30px!important;
|
border-radius:30px!important;
|
||||||
background-color: #2979FF; /* Changez la couleur en fonction de votre thème */
|
background-color: #e91e1e; /* Changez la couleur en fonction de votre thème */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
15
ui/src/views/GameDisplay.vue
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<template>
|
||||||
|
<v-container>
|
||||||
|
<v-btn @click="update"></v-btn>
|
||||||
|
</v-container>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref} from 'vue'; // Import des fonctions de Vue 3
|
||||||
|
import variables from '@/variables.js';
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
variables.RedScore = '10'
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
3
ui/src/views/HomeView.vue
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<template>
|
||||||
|
<v-img src="../assets/BrainBlast-For-HomeView-Alpha.png" class="fill-height"></v-img>
|
||||||
|
</template>
|
71
ui/src/views/SettingsView.vue
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
<h1 class="title mb-4 ml-5 mt-5">Paramètres</h1>
|
||||||
|
<v-divider :thickness="2" class="border-opacity-100" color="primary"/>
|
||||||
|
<h2 class="title ml-10 mb-5 mt-5">Son</h2>
|
||||||
|
<div style="display: flex; align-items: center;">
|
||||||
|
<v-switch label="Activer le son intégré" v-model="EmbeddedSound" class="ml-15" color="primary"/>
|
||||||
|
<div style="width: 250px; margin-left: 16px;">
|
||||||
|
<v-slider class="ml-15" :disabled="EmbeddedSound === false" v-model="EmbeddedSoundVolume" color="primary"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<v-switch label="Activer le son MQTT" v-model="MQTTSound" class="ml-15" color="primary"/>
|
||||||
|
<v-divider />
|
||||||
|
<h2 class="title ml-10 mb-5 mt-5">Affichage</h2>
|
||||||
|
<v-switch label="Activer l'affichage des sattelites" v-model="SattelitesDisplay" class="ml-15" color="primary"/>
|
||||||
|
<v-divider />
|
||||||
|
<h2 class="title ml-10 mb-5 mt-5">MQTT</h2>
|
||||||
|
<div style="display: flex; align-items: center;">
|
||||||
|
<v-icon v-model="MQTTBrokerState" class="ml-15 mb-5" color="error" icon="record">mdi-record</v-icon>
|
||||||
|
<v-label class="ml-2 mb-10 mt-5">Etat du serveur MQTT</v-label>
|
||||||
|
</div>
|
||||||
|
<v-divider />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, watch } from 'vue';
|
||||||
|
|
||||||
|
const EmbeddedSound = ref(false); // Définition d'une référence pour la case à cocher. Initialement décochée.
|
||||||
|
const EmbeddedSoundVolume = ref(50); // Définition d'une référence pour la case à cocher. Initialement décochée.
|
||||||
|
const MQTTSound = ref(false); // Définition d'une référence pour la case à cocher. Initialement décochée.
|
||||||
|
const MQTTBrokerState = ref(false); // Définition d'une référence pour la case à cocher. Initialement décochée.
|
||||||
|
const SattelitesDisplay = ref(false);
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
if (localStorage.getItem('EmbeddedSound')) {
|
||||||
|
EmbeddedSound.value = localStorage.getItem('EmbeddedSound') === 'true'; // Si l'état de la case à cocher est stocké, le mettre dans la référence
|
||||||
|
}
|
||||||
|
if (localStorage.getItem('MQTTSound')) {
|
||||||
|
MQTTSound.value = localStorage.getItem('MQTTSound') === 'true'; // Si l'état de la case à cocher est stocké, le mettre dans la référence
|
||||||
|
}
|
||||||
|
if (localStorage.getItem('EmbeddedSoundVolume')) {
|
||||||
|
EmbeddedSoundVolume.value = localStorage.getItem('EmbeddedSoundVolume'); // Si l'état de la case à cocher est stocké, le mettre dans la référence
|
||||||
|
}
|
||||||
|
if (localStorage.getItem('SattelitesDisplay')) {
|
||||||
|
SattelitesDisplay.value = localStorage.getItem('SattelitesDisplay') === 'true'; // Added a default value for this switch
|
||||||
|
}
|
||||||
|
});
|
||||||
|
watch(EmbeddedSound, (EmbeddedSoundNewValue) => {
|
||||||
|
if (EmbeddedSoundNewValue !== null) {
|
||||||
|
localStorage.setItem('EmbeddedSound', EmbeddedSoundNewValue); // Mettre à jour l'état de la case à cocher dans le LocalStorage chaque fois qu'il change.
|
||||||
|
}
|
||||||
|
});
|
||||||
|
watch(EmbeddedSoundVolume, (EmbeddedSoundVolumeNewValue) => {
|
||||||
|
if (EmbeddedSoundVolumeNewValue !== null) {
|
||||||
|
localStorage.setItem('EmbeddedSoundVolume', EmbeddedSoundVolumeNewValue); // Mettre à jour l'état de la case à cocher dans le LocalStorage chaque fois qu'il change.
|
||||||
|
}
|
||||||
|
});
|
||||||
|
watch(MQTTSound, (MQTTSoundNewValue) => {
|
||||||
|
|
||||||
|
if (MQTTSoundNewValue !== null) {
|
||||||
|
localStorage.setItem('MQTTSound', MQTTSoundNewValue); // Mettre à jour l'état de la case à cocher dans le LocalStorage chaque fois qu'il change.
|
||||||
|
}
|
||||||
|
});
|
||||||
|
watch(SattelitesDisplay, (SattelitesDisplaynewValue) => {
|
||||||
|
if (SattelitesDisplaynewValue !== null) {
|
||||||
|
localStorage.setItem('SattelitesDisplay', SattelitesDisplaynewValue); // Added a default value for this switch
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|