233 lines
5.0 KiB
Vue
233 lines
5.0 KiB
Vue
<template>
|
|
<div class="outer-bought">
|
|
<h3>Loddstatistikk</h3>
|
|
<div class="bought-container">
|
|
<div
|
|
v-for="color in colors"
|
|
:class="
|
|
color.name +
|
|
'-container ' +
|
|
color.name +
|
|
'-raffle inner-bought-container ballot-element'
|
|
"
|
|
:key="color.name"
|
|
>
|
|
<div class="number-container">
|
|
<span class="color-total bought-number-span">
|
|
{{ color.total }}
|
|
</span>
|
|
<span>kjøpte</span>
|
|
</div>
|
|
<div class="inner-text-container">
|
|
<div>{{ color.win }} vinn</div>
|
|
<div>{{ color.totalPercentage }}% vinn</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="inner-bought-container total-raffles">
|
|
<div class="total-container">
|
|
Totalt
|
|
<div>
|
|
<span class="total">{{ total }}</span> kjøpte
|
|
</div>
|
|
<div>{{ totalWin }} vinn</div>
|
|
<div>{{ stolen }} stjålet</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import { colorStatistics } from "@/api";
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
colors: [],
|
|
red: 0,
|
|
blue: 0,
|
|
yellow: 0,
|
|
green: 0,
|
|
total: 0,
|
|
totalWin: 0,
|
|
stolen: 0,
|
|
wins: 0,
|
|
redPercentage: 0,
|
|
yellowPercentage: 0,
|
|
greenPercentage: 0,
|
|
bluePercentage: 0
|
|
};
|
|
},
|
|
async mounted() {
|
|
let response = await colorStatistics();
|
|
this.red = response.red;
|
|
this.blue = response.blue;
|
|
this.green = response.green;
|
|
this.yellow = response.yellow;
|
|
this.total = response.total;
|
|
this.totalWin =
|
|
this.red.win + this.yellow.win + this.blue.win + this.green.win;
|
|
this.stolen = response.stolen;
|
|
|
|
this.redPercentage = this.round(
|
|
this.red.win == 0 ? 0 : (this.red.win / this.totalWin) * 100
|
|
);
|
|
this.greenPercentage = this.round(
|
|
this.green.win == 0 ? 0 : (this.green.win / this.totalWin) * 100
|
|
);
|
|
this.bluePercentage = this.round(
|
|
this.blue.win == 0 ? 0 : (this.blue.win / this.totalWin) * 100
|
|
);
|
|
this.yellowPercentage = this.round(
|
|
this.yellow.win == 0 ? 0 : (this.yellow.win / this.totalWin) * 100
|
|
);
|
|
|
|
this.colors.push({
|
|
name: "red",
|
|
total: this.red.total,
|
|
win: this.red.win,
|
|
totalPercentage: this.getPercentage(this.red.win, this.totalWin),
|
|
percentage: this.getPercentage(this.red.win, this.red.total)
|
|
});
|
|
this.colors.push({
|
|
name: "blue",
|
|
total: this.blue.total,
|
|
win: this.blue.win,
|
|
totalPercentage: this.getPercentage(this.blue.win, this.totalWin),
|
|
percentage: this.getPercentage(this.blue.win, this.blue.total)
|
|
});
|
|
this.colors.push({
|
|
name: "yellow",
|
|
total: this.yellow.total,
|
|
win: this.yellow.win,
|
|
totalPercentage: this.getPercentage(this.yellow.win, this.totalWin),
|
|
percentage: this.getPercentage(this.yellow.win, this.yellow.total)
|
|
});
|
|
this.colors.push({
|
|
name: "green",
|
|
total: this.green.total,
|
|
win: this.green.win,
|
|
totalPercentage: this.getPercentage(this.green.win, this.totalWin),
|
|
percentage: this.getPercentage(this.green.win, this.green.total)
|
|
});
|
|
|
|
this.colors = this.colors.sort((a, b) => (a.win > b.win ? -1 : 1));
|
|
},
|
|
methods: {
|
|
getPercentage: function(win, total) {
|
|
return this.round(win == 0 ? 0 : (win / total) * 100);
|
|
},
|
|
round: function(number) {
|
|
return Math.round(number * 100) / 100;
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
@import "../styles/global.scss";
|
|
@import "../styles/variables.scss";
|
|
@import "../styles/media-queries.scss";
|
|
|
|
.inner-bought-container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
|
|
.raffle-element {
|
|
width: 140px;
|
|
height: 150px;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
.number-container {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
|
|
& span:last-child {
|
|
padding-bottom: 5px;
|
|
padding-left: 5px;
|
|
}
|
|
}
|
|
|
|
.inner-text-container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: center;
|
|
|
|
// TODO fix styling for displaying in columns
|
|
@include mobile {
|
|
& div {
|
|
padding: 0 5px;
|
|
}
|
|
}
|
|
}
|
|
|
|
.total-raffles {
|
|
width: 150px;
|
|
height: 150px;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
.total-container {
|
|
align-items: flex-start;
|
|
}
|
|
|
|
@include mobile {
|
|
.total-container {
|
|
> div:nth-of-type(2) {
|
|
margin-top: auto;
|
|
padding-bottom: 4px;
|
|
padding-left: 5px;
|
|
}
|
|
}
|
|
}
|
|
|
|
.bought-number-span {
|
|
display: inline-flex;
|
|
}
|
|
|
|
.outer-bought {
|
|
@include mobile {
|
|
padding: 0 20px;
|
|
}
|
|
}
|
|
|
|
.bought-container {
|
|
display: flex;
|
|
flex-direction: row;
|
|
flex-wrap: wrap;
|
|
width: 100%;
|
|
padding-bottom: 3rem;
|
|
max-width: 1400px;
|
|
margin: auto;
|
|
justify-content: space-between;
|
|
font-family: Arial;
|
|
|
|
@include mobile {
|
|
padding-bottom: 0px;
|
|
}
|
|
}
|
|
|
|
.color-total,
|
|
.total {
|
|
font-size: 2rem;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.small {
|
|
font-weight: bold;
|
|
font-size: 1.25rem;
|
|
display: inline-block;
|
|
}
|
|
|
|
@include mobile {
|
|
.bought-container {
|
|
flex-wrap: wrap;
|
|
}
|
|
}
|
|
</style>
|