206 lines
5.4 KiB
Vue
206 lines
5.4 KiB
Vue
<script lang="ts" setup>
|
|
import type { BasicQuestion } from "@/types/basic";
|
|
|
|
useHead({
|
|
title: "Pytanie 1/20",
|
|
});
|
|
|
|
const { data, error, status, refresh } = await useFetch<BasicQuestion[]>(
|
|
"/api/basic"
|
|
);
|
|
|
|
const runtimeConfig = useRuntimeConfig();
|
|
const cdnUrl = runtimeConfig.public.cdn_url;
|
|
|
|
const count = ref(0);
|
|
|
|
const tak_nie_model = ref();
|
|
|
|
async function next() {
|
|
if (count.value + 1 < data.value?.length!) {
|
|
questionaries.value.push({
|
|
nr_pytania: question.value?.nr_pytania,
|
|
chosen_answer: tak_nie_model.value ?? "",
|
|
correct_answer: question.value?.poprawna_odp?.toLowerCase(),
|
|
chosen_is_correct:
|
|
tak_nie_model.value == question.value?.poprawna_odp?.toLowerCase(),
|
|
liczba_pkt: question.value?.liczba_pkt,
|
|
});
|
|
tak_nie_model.value = "";
|
|
count.value++;
|
|
useHead({
|
|
title: `Pytanie ${count.value + 1}/${data.value?.length}`,
|
|
});
|
|
} else {
|
|
// await navigateTo("/advanced");
|
|
}
|
|
}
|
|
|
|
const question = computed(() => data.value?.at(count.value));
|
|
const media = computed(() => {
|
|
const mediaSplit = question.value?.media?.split(".");
|
|
return {
|
|
fileType: mediaSplit?.pop()?.toLowerCase(),
|
|
fileName: mediaSplit?.join("."),
|
|
};
|
|
});
|
|
|
|
const questionaries: Ref<Array<any>> = ref([]);
|
|
|
|
const progres = ref();
|
|
|
|
onMounted(() => {
|
|
const progresInterval = setInterval(() => {
|
|
progres.value.value = +progres.value.value + 1;
|
|
if (progres.value.value >= 100) {
|
|
clearInterval(progresInterval);
|
|
}
|
|
}, 100);
|
|
});
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<div v-if="status === 'success'">
|
|
<div class="grid grid-cols-4">
|
|
<div class="col-span-3 flex flex-col gap-4 p-4">
|
|
<div class="flex flex-row gap-5">
|
|
<div>
|
|
Wartość punktowa
|
|
<div class="info-little-box">
|
|
{{ question?.liczba_pkt }}
|
|
</div>
|
|
</div>
|
|
<div>
|
|
Aktualna kategoria (implement)
|
|
<div class="info-little-box">B</div>
|
|
</div>
|
|
<div>
|
|
Czas do końca egzaminu (implement)
|
|
<div class="info-little-box">25:00</div>
|
|
</div>
|
|
</div>
|
|
<div
|
|
class="select-none z-[-1] w-full flex items-center justify-center *:object-contain *:object-contain *:*:object-contain"
|
|
>
|
|
<div class="w-[650px] *:w-full">
|
|
<img
|
|
:src="cdnUrl + [media.fileName, media.fileType].join('.')"
|
|
alt=""
|
|
v-if="media.fileType == 'jpg'"
|
|
/>
|
|
<video
|
|
v-else-if="media.fileType == 'wmv'"
|
|
:key="media.fileName"
|
|
autoplay
|
|
>
|
|
<source
|
|
:src="cdnUrl + [media.fileName, 'mp4'].join('.')"
|
|
type="video/mp4"
|
|
/>
|
|
</video>
|
|
<span v-else>Brak mediów</span>
|
|
</div>
|
|
</div>
|
|
<div>{{ question?.pytanie }}</div>
|
|
<div>
|
|
<div class="flex flex-row justify-around">
|
|
<input
|
|
type="radio"
|
|
name="tak_nie"
|
|
id="odp_tak"
|
|
v-model="tak_nie_model"
|
|
value="tak"
|
|
class="hidden"
|
|
/>
|
|
<label for="odp_tak">
|
|
<div
|
|
:class="`btn-answer ${
|
|
tak_nie_model == 'tak' ? ' !bg-fuchsia-500' : ''
|
|
}`"
|
|
>
|
|
TAK
|
|
</div>
|
|
</label>
|
|
<input
|
|
type="radio"
|
|
name="tak_nie"
|
|
id="odp_nie"
|
|
v-model="tak_nie_model"
|
|
value="nie"
|
|
class="hidden"
|
|
/>
|
|
<label for="odp_nie">
|
|
<div
|
|
:class="`btn-answer ${
|
|
tak_nie_model == 'nie' ? ' !bg-fuchsia-500' : ''
|
|
}`"
|
|
>
|
|
NIE
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex flex-col items-center">
|
|
<div>
|
|
<button class="btn-major">Zakończ egzamin</button>
|
|
</div>
|
|
<div class="flex flex-row">
|
|
<div>
|
|
Pytania podstawowe
|
|
<div class="progressive">
|
|
{{ count + 1 }} / {{ data?.length }}
|
|
</div>
|
|
</div>
|
|
<div>
|
|
Pytania specjalistyczne
|
|
<div class="progressive">
|
|
{{ count + 1 }} / {{ data?.length }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div>TimeLeft (implement)</div>
|
|
<div>
|
|
<button @click="next()" class="btn-major">Następne pytanie</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<br />
|
|
{{ questionaries }}
|
|
</div>
|
|
<div v-else-if="status === 'error'">Error: {{ error }}</div>
|
|
<div v-else>Loading...</div>
|
|
<progress max="100" ref="progres">Aha...</progress>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.btn {
|
|
@apply box-border text-white font-bold p-3 rounded-md w-fit cursor-pointer border-[4px];
|
|
}
|
|
|
|
.btn-answer {
|
|
@apply btn bg-blue-500 text-xl;
|
|
}
|
|
|
|
.btn-answer:hover {
|
|
@apply bg-blue-300;
|
|
}
|
|
|
|
.btn-answer:active {
|
|
@apply bg-blue-400;
|
|
}
|
|
|
|
.btn-major {
|
|
@apply btn bg-orange-400 text-base;
|
|
}
|
|
|
|
.info-little-box {
|
|
@apply inline-block px-[15px] py-[8px] bg-blue-500 text-white font-bold;
|
|
}
|
|
/*
|
|
.progressive {
|
|
} */
|
|
</style>
|