2023-06-06 14:32:36 +07:00
|
|
|
<script setup lang="ts">
|
2023-07-12 17:21:27 +07:00
|
|
|
import { onMounted, ref } from "vue";
|
2023-06-06 14:32:36 +07:00
|
|
|
import { defineAsyncComponent } from "@vue/runtime-core";
|
2023-07-13 14:20:28 +07:00
|
|
|
import { useRouter, useRoute } from "vue-router";
|
|
|
|
|
import cardTop from "@/modules/05_placement/components/PersonalList/StatCard.vue";
|
2023-07-07 09:55:03 +07:00
|
|
|
import keycloak from "@/plugins/keycloak";
|
2023-07-11 17:55:06 +07:00
|
|
|
import http from "@/plugins/http";
|
|
|
|
|
import config from "@/app.config";
|
2023-07-12 16:50:01 +07:00
|
|
|
import { useCounterMixin } from "@/stores/mixin"
|
|
|
|
|
import { useQuasar } from "quasar"
|
2023-07-12 21:25:24 +07:00
|
|
|
import { usePlacementDataStore } from "@/modules/05_placement/store";
|
|
|
|
|
|
|
|
|
|
const DataStore = usePlacementDataStore();
|
2023-07-07 09:55:03 +07:00
|
|
|
|
2023-07-12 16:50:01 +07:00
|
|
|
const $q = useQuasar
|
|
|
|
|
const mixin = useCounterMixin()
|
2023-07-13 14:20:28 +07:00
|
|
|
const { messageError, showLoader, hideLoader } = mixin
|
2023-07-07 09:55:03 +07:00
|
|
|
let roleAdmin = ref<boolean>(false);
|
2023-06-08 18:24:09 +07:00
|
|
|
const router = useRouter();
|
2023-07-11 17:55:06 +07:00
|
|
|
const route = useRoute();
|
|
|
|
|
const examId = route.params.examId;
|
2023-07-12 17:21:27 +07:00
|
|
|
const year = ref<string>("");
|
|
|
|
|
const round = ref<string>("");
|
|
|
|
|
const title = ref<string>("");
|
2023-07-12 21:25:24 +07:00
|
|
|
const examData = ref<any>();
|
2023-06-06 14:32:36 +07:00
|
|
|
const AddTablePosition = defineAsyncComponent(
|
2023-07-13 14:20:28 +07:00
|
|
|
() => import("@/modules/05_placement/components/PersonalList/Table.vue")
|
2023-06-06 14:32:36 +07:00
|
|
|
);
|
2023-06-30 09:15:47 +07:00
|
|
|
const stat = ref<any>({
|
2023-07-11 17:55:06 +07:00
|
|
|
total: 0,
|
|
|
|
|
unContain: 0,
|
|
|
|
|
prepareContain: 0,
|
|
|
|
|
contain: 0,
|
2023-06-30 09:15:47 +07:00
|
|
|
disclaim: 0,
|
|
|
|
|
});
|
2023-07-07 09:55:03 +07:00
|
|
|
|
2023-07-11 17:55:06 +07:00
|
|
|
const getStat = async () => {
|
|
|
|
|
const examIdString = Array.isArray(examId) ? examId[0] : examId;
|
2023-07-12 16:50:01 +07:00
|
|
|
await http
|
2023-07-13 14:20:28 +07:00
|
|
|
.get(config.API.getStatCard(examIdString))
|
|
|
|
|
.then((res) => {
|
|
|
|
|
const statCard = res.data.result;
|
|
|
|
|
// อัปเดตค่าในตัวแปร stat
|
|
|
|
|
stat.value = {
|
|
|
|
|
total: statCard.total,
|
|
|
|
|
unContain: statCard.unContain,
|
|
|
|
|
prepareContain: statCard.prepareContain,
|
|
|
|
|
contain: statCard.contain,
|
|
|
|
|
disclaim: statCard.disclaim,
|
|
|
|
|
};
|
|
|
|
|
|
2023-07-12 17:21:27 +07:00
|
|
|
console.log("🚀 ~ file: Table.vue:96 ~ getStatCard ~ data:", statCard);
|
2023-07-13 14:20:28 +07:00
|
|
|
})
|
|
|
|
|
.catch((e) => {
|
|
|
|
|
messageError($q, e);
|
|
|
|
|
})
|
2023-07-11 17:55:06 +07:00
|
|
|
};
|
|
|
|
|
|
2023-07-07 09:55:03 +07:00
|
|
|
onMounted(async () => {
|
2023-07-13 14:20:28 +07:00
|
|
|
if (DataStore.DataMainOrig.length == 0) {
|
|
|
|
|
await fetchPlacementData();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (keycloak.tokenParsed != null) {
|
|
|
|
|
roleAdmin.value = await keycloak.tokenParsed.role.includes("placement1");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await getStat()
|
|
|
|
|
|
2023-07-12 21:25:24 +07:00
|
|
|
examData.value = await DataStore.DataMainOrig.find((x: any) => x.id == examId);
|
2023-07-13 14:20:28 +07:00
|
|
|
|
2023-07-12 21:25:24 +07:00
|
|
|
title.value = examData.value.examRound;
|
|
|
|
|
round.value = examData.value.examOrder;
|
|
|
|
|
year.value = examData.value.fiscalYear;
|
|
|
|
|
|
2023-07-07 09:55:03 +07:00
|
|
|
});
|
2023-07-12 16:50:01 +07:00
|
|
|
|
2023-07-13 14:20:28 +07:00
|
|
|
const fetchPlacementData = async () => {
|
|
|
|
|
showLoader();
|
|
|
|
|
http
|
|
|
|
|
.get(config.API.MainDetail(0))
|
|
|
|
|
.then(async (res) => {
|
|
|
|
|
DataStore.DataMainOrig = res.data.result;
|
|
|
|
|
})
|
|
|
|
|
.catch((e) => {
|
|
|
|
|
console.log(e);
|
|
|
|
|
})
|
|
|
|
|
.finally(() => {
|
|
|
|
|
hideLoader();
|
|
|
|
|
});
|
|
|
|
|
};
|
2023-06-06 14:32:36 +07:00
|
|
|
</script>
|
2023-06-02 09:43:28 +07:00
|
|
|
<template>
|
2023-06-06 14:32:36 +07:00
|
|
|
<div class="col-xs-12 col-sm-12 col-md-8 col-lg-8 row">
|
2023-06-08 18:24:09 +07:00
|
|
|
<div class="toptitle">
|
2023-07-13 14:20:28 +07:00
|
|
|
<q-btn icon="mdi-arrow-left" unelevated round dense flat color="primary" class="q-mr-sm" @click="router.go(-1)" />
|
2023-06-08 18:24:09 +07:00
|
|
|
รายชื่อผู้สอบในรอบ {{ title }} ครั้งที่ {{ round }} ปี {{ year }}
|
|
|
|
|
</div>
|
2023-06-30 09:15:47 +07:00
|
|
|
<q-card bordered class="q-py-sm row col-12">
|
2023-06-06 14:32:36 +07:00
|
|
|
<div class="col-12 row bg-white">
|
2023-06-27 13:43:38 +07:00
|
|
|
<div class="fit q-px-md q-py-sm">
|
2023-06-06 14:32:36 +07:00
|
|
|
<div class="row col-12 q-col-gutter-md fit">
|
2023-07-13 14:20:28 +07:00
|
|
|
<cardTop :amount="stat.total" label="จำนวนทั้งหมด" color="#016987" />
|
|
|
|
|
<cardTop v-if="roleAdmin" :amount="stat.unContain" label="จำนวนที่ยังไม่บรรจุ" color="#02A998" />
|
|
|
|
|
<cardTop :amount="stat.prepareContain" label="จำนวนที่เตรียมบรรจุ" color="#2EA0FF" />
|
|
|
|
|
<cardTop :amount="stat.contain" label="จำนวนที่บรรจุแล้ว" color="#4154B3" />
|
|
|
|
|
<cardTop :amount="stat.disclaim" label="จำนวนที่สละสิทธิ์" color="#FF5C5F" />
|
|
|
|
|
</div>
|
2023-06-06 14:32:36 +07:00
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-06-27 13:43:38 +07:00
|
|
|
</q-card>
|
2023-06-06 14:32:36 +07:00
|
|
|
</div>
|
|
|
|
|
<q-card flat bordered class="col-12 q-mt-sm q-pt-sm">
|
|
|
|
|
<div>
|
2023-07-13 14:20:28 +07:00
|
|
|
<AddTablePosition :statCard="getStat" class="q-pa-none" @get-stat="getStat" />
|
2023-06-06 14:32:36 +07:00
|
|
|
</div>
|
|
|
|
|
</q-card>
|
2023-06-02 09:43:28 +07:00
|
|
|
</template>
|
2023-06-06 14:32:36 +07:00
|
|
|
|
|
|
|
|
<style lang="scss">
|
|
|
|
|
.cardNum {
|
|
|
|
|
border-radius: 5px;
|
|
|
|
|
padding-left: 8px;
|
|
|
|
|
}
|
|
|
|
|
</style>
|