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"; import { useAuthStore } from "@/stores/auth";
const router = createRouter({ const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), history: createWebHistory(import.meta.env.BASE_URL),
routes: [ routes: [
{
path: "/",
component: DefaultLayout,
children: [
{ {
path: "", path: "/",
name: "landing", component: DefaultLayout,
component: Landing, 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", path: "/stp2",
name: "home", name: "home2",
component: () => import("@/views/home/Home.vue"), component: () => import("@/views/home2/Home2.vue"),
}, },
{ {
path: "admin/login", path: "/cv",
name: "admin-login", component: CVLayout,
component: () => import("@/views/admin/Login.vue"), 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) => { router.beforeEach(async (to) => {
if (!to.meta.requiresAdmin) return; if (!to.meta.requiresAdmin) return;
const homeData = useHomeDataStore(); const homeData = useHomeDataStore();
if (!homeData.loaded) { if (!homeData.loaded) {
await new Promise((resolve) => { await new Promise((resolve) => {
const stop = watch( const stop = watch(
() => homeData.loaded, () => homeData.loaded,
(val) => { (val) => {
if (val) { if (val) {
stop(); stop();
resolve(); resolve();
} }
}, },
); );
}); });
} }
if (!useAuthStore().user.admin) if (!useAuthStore().user.admin)
return { path: "/admin/login", query: { redirect: to.fullPath } }; return { path: "/admin/login", query: { redirect: to.fullPath } };
}); });
export default router; export default router;

View File

@@ -204,6 +204,35 @@ import Project from "./Project.vue";
</p> </p>
</Project> </Project>
</section> </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"> <div class="w-full flex flex-col sm:flex-row gap-5">
<section class="flex-1"> <section class="flex-1">
<h2>Soft Skills</h2> <h2>Soft Skills</h2>

View File

@@ -131,6 +131,28 @@
margin-bottom: 0.2em; 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 { .cv-template table {
color: var(--secondary); color: var(--secondary);
border-collapse: collapse; border-collapse: collapse;