Include grades
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 1m1s

This commit is contained in:
2026-05-13 09:45:50 +01:00
parent 842943e7e8
commit 3b14c3453c
3 changed files with 146 additions and 88 deletions

View File

@@ -7,103 +7,110 @@ import { useHomeDataStore } from "@/stores/homeData";
import { useAuthStore } from "@/stores/auth";
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: "/",
component: DefaultLayout,
children: [
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: "",
name: "landing",
component: Landing,
path: "/",
component: DefaultLayout,
children: [
{
path: "",
name: "landing",
component: Landing,
},
{
path: "stp",
name: "home",
component: () => import("@/views/home/Home.vue"),
},
{
path: "admin/login",
name: "admin-login",
component: () => import("@/views/admin/Login.vue"),
},
{
path: "admin",
name: "admin",
component: () => import("@/views/admin/Admin.vue"),
meta: { requiresAdmin: true },
},
{
path: "shrines",
name: "shrine links",
component: () => import("@/views/home/shrines/Shrines.vue"),
},
{
path: "shrines/gto",
name: "gto shrine",
component: () => import("@/views/home/shrines/GTO.vue"),
},
{
path: "shrines/skipskipbenben",
name: "skipskipbenben shrine",
component: () =>
import("@/views/home/shrines/Skipskipbenben.vue"),
},
{
path: "shrines/evangelion",
name: "evangelion shrine",
component: () =>
import("@/views/home/shrines/Evangelion.vue"),
},
{
path: "shrines/demoman",
name: "demoman shrine",
component: () => import("@/views/home/shrines/Demoman.vue"),
},
{
path: ":pathMatch(.*)*",
name: "404",
component: () => import("@/views/404/404.vue"),
},
],
},
{
path: "stp",
name: "home",
component: () => import("@/views/home/Home.vue"),
path: "/stp2",
name: "home2",
component: () => import("@/views/home2/Home2.vue"),
},
{
path: "admin/login",
name: "admin-login",
component: () => import("@/views/admin/Login.vue"),
path: "/cv",
component: CVLayout,
children: [
{
path: "",
name: "cv",
component: () => import("@/views/CV/CV.vue"),
},
{
path: "jobs",
name: "job-applications",
component: () => import("@/views/CV/JobApplications.vue"),
meta: { requiresAdmin: true },
},
],
},
{
path: "admin",
name: "admin",
component: () => import("@/views/admin/Admin.vue"),
meta: { requiresAdmin: true },
},
{
path: "shrines",
name: "shrine links",
component: () => import("@/views/home/shrines/Shrines.vue"),
},
{
path: "shrines/gto",
name: "gto shrine",
component: () => import("@/views/home/shrines/GTO.vue"),
},
{
path: "shrines/skipskipbenben",
name: "skipskipbenben shrine",
component: () => import("@/views/home/shrines/Skipskipbenben.vue"),
},
{
path: "shrines/evangelion",
name: "evangelion shrine",
component: () => import("@/views/home/shrines/Evangelion.vue"),
},
{
path: "shrines/demoman",
name: "demoman shrine",
component: () => import("@/views/home/shrines/Demoman.vue"),
},
{
path: ":pathMatch(.*)*",
name: "404",
component: () => import("@/views/404/404.vue"),
},
],
},
{
path: "/cv",
component: CVLayout,
children: [
{
path: "",
name: "cv",
component: () => import("@/views/CV/CV.vue"),
},
{
path: "jobs",
name: "job-applications",
component: () => import("@/views/CV/JobApplications.vue"),
meta: { requiresAdmin: true },
},
],
},
],
],
});
router.beforeEach(async (to) => {
if (!to.meta.requiresAdmin) return;
const homeData = useHomeDataStore();
if (!homeData.loaded) {
await new Promise((resolve) => {
const stop = watch(
() => homeData.loaded,
(val) => {
if (val) {
stop();
resolve();
}
},
);
});
}
if (!useAuthStore().user.admin)
return { path: "/admin/login", query: { redirect: to.fullPath } };
if (!to.meta.requiresAdmin) return;
const homeData = useHomeDataStore();
if (!homeData.loaded) {
await new Promise((resolve) => {
const stop = watch(
() => homeData.loaded,
(val) => {
if (val) {
stop();
resolve();
}
},
);
});
}
if (!useAuthStore().user.admin)
return { path: "/admin/login", query: { redirect: to.fullPath } };
});
export default router;

View File

@@ -204,6 +204,35 @@ import Project from "./Project.vue";
</p>
</Project>
</section>
<section>
<h2>University Academy of Engineering Southbank</h2>
<div
class="flex-row flex place-content-between m-auto place-items-center"
>
<strong>A Levels</strong>
<small>Sep 2019 Jun 2021</small>
</div>
<div class="grades-grid">
<span>Mathematics</span><span>A*</span>
<span>Further Mathematics</span><span>A*</span>
<span>Physics</span><span>A*</span>
</div>
<div
class="flex-row flex place-content-between m-auto place-items-center mt-2"
>
<strong>GCSEs</strong>
<small>2019</small>
</div>
<div class="grades-grid">
<span>English Literature</span><span>9</span>
<span>Mathematics</span><span>9</span>
<span>Physics</span><span>9</span>
<span>English Language</span><span>8</span>
<span>Biology</span><span>8</span>
<span>Chemistry</span><span>8</span>
<span>Computer Science</span><span>7</span>
</div>
</section>
<div class="w-full flex flex-col sm:flex-row gap-5">
<section class="flex-1">
<h2>Soft Skills</h2>

View File

@@ -131,6 +131,28 @@
margin-bottom: 0.2em;
}
.cv-template .grades-grid {
display: grid;
grid-template-columns: repeat(2, auto 1fr);
column-gap: 0.5em;
row-gap: 0.1em;
font-size: var(--cv-text-size);
color: var(--primary);
margin: 0.15em 0;
}
.cv-template .grades-grid > span:nth-child(4n + 2),
.cv-template .grades-grid > span:nth-child(4n) {
font-weight: 600;
padding-right: 1.5em;
}
@media (max-width: 640px) {
.cv-template .grades-grid {
grid-template-columns: auto 1fr;
}
}
.cv-template table {
color: var(--secondary);
border-collapse: collapse;