From 7a12562ba2ad0a7926687f19a5e1eabb9a6de8b0 Mon Sep 17 00:00:00 2001 From: smallbenji Date: Sun, 24 Nov 2024 20:33:28 +0100 Subject: [PATCH] Adding pie chart to stats --- pointMaster/Controllers/StatsApiController.cs | 27 +++++++++++++++++ pointMaster/js/src/components/Stats.vue | 30 ++++++++++++++++++- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/pointMaster/Controllers/StatsApiController.cs b/pointMaster/Controllers/StatsApiController.cs index 41c3d32..98fa4fa 100644 --- a/pointMaster/Controllers/StatsApiController.cs +++ b/pointMaster/Controllers/StatsApiController.cs @@ -99,6 +99,25 @@ namespace pointMaster.Controllers return Ok(JsonConvert.SerializeObject(vm)); } + [Route("pointratio")] + public async Task GetPointRatio() + { + var vm = new PointRatioModel(); + + vm.Names = new List(); + vm.Data = new List(); + + var data = await dataContext.Patruljer.Include(x => x.Points).ToListAsync(); + + foreach (var patrulje in data) + { + vm.Names.Add(patrulje.Name); + vm.Data.Add(patrulje.Points.Sum(x => x.Points + x.Turnout)); + } + + return Ok(JsonConvert.SerializeObject(vm)); + } + public class PointChartModel { [JsonProperty("name")] @@ -117,5 +136,13 @@ namespace pointMaster.Controllers public string Title { get; set; } = null!; public string Value { get; set; } = null!; } + + public class PointRatioModel + { + [JsonProperty("names")] + public List Names { get; set; } = null!; + [JsonProperty("data")] + public List Data { get; set; } = null!; + } } } \ No newline at end of file diff --git a/pointMaster/js/src/components/Stats.vue b/pointMaster/js/src/components/Stats.vue index bf89cea..f4526a9 100644 --- a/pointMaster/js/src/components/Stats.vue +++ b/pointMaster/js/src/components/Stats.vue @@ -16,6 +16,8 @@

Point over tid

+

Point ratio

+
@@ -41,7 +43,7 @@ export default defineComponent({ chart: { type: "line", toolbar: { - show: false, + show: true, }, }, xaxis: { @@ -63,9 +65,35 @@ export default defineComponent({ } as ApexOptions); }; + const initializePieChart = async () => { + const options: ApexOptions = { + chart: { + type: "pie", + toolbar: { + show: true, + }, + }, + series: [], + }; + + const chart = new ApexCharts( + document.querySelector("#pie"), + options + ); + chart.render(); + + const data = (await axios.get("/api/pointratio")).data; + + chart.updateOptions({ + series: data.data, + labels: data.names, + } as ApexOptions); + }; + onMounted(async () => { await GetStats(); await initializeChart(); + await initializePieChart(); }); return {