Refactoring code module 03_recruiting

This commit is contained in:
STW_TTTY\stwtt 2024-09-17 15:56:06 +07:00
parent b223c2433e
commit 87e2e3b080
36 changed files with 6139 additions and 6335 deletions

View file

@ -1,139 +1,23 @@
<!-- page:detail page สรรหา -->
<template>
<div class="toptitle text-dark col-12 row items-center">
<q-btn
icon="mdi-arrow-left"
unelevated
round
dense
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
/>
รายชอผสมครสอบแขงข {{ name }} ครงท {{ round }}/{{ year }}
<q-space />
<q-btn
size="md"
icon="mdi-content-save-move-outline"
round
flat
color="indigo"
v-if="rows.length > 0"
@click="candidateToPlacement"
>
<q-tooltip>บรรจานการสอบแขงข</q-tooltip>
</q-btn>
<q-btn class="bg-teal-1" icon="mdi-download" round color="primary" flat>
<q-tooltip>ดาวนโหลดไฟล</q-tooltip>
<q-menu>
<q-list style="min-width: 100px">
<q-item clickable v-close-popup @click="downloadExam()">
<q-item-section class="text-blue"
>งออกขอมลผทธสอบ</q-item-section
>
</q-item>
<q-item clickable v-close-popup @click="downloadPassExam()">
<q-item-section class="text-primary"
>งออกขอมลผสอบผานภาค .</q-item-section
>
</q-item>
<q-item clickable v-close-popup @click="downloadPassResultExam()">
<q-item-section class="text-amber-9"
>งออกขอมลผสอบแขงขนได</q-item-section
>
</q-item>
</q-list>
</q-menu>
</q-btn>
</div>
<q-card flat bordered class="col-12 row q-mt-sm q-pt-sm q-pa-md">
<div class="col-12">
<Table
:count="count"
:pass="pass"
:notpass="notpass"
:rows="rows"
:columns="columns"
:filter="filter"
:visible-columns="visibleColumns"
v-model:inputfilter="filter"
v-model:inputvisible="visibleColumns"
:nornmalData="false"
:conclude="true"
>
<template #columns="props">
<q-tr :props="props" class="cursor-pointer">
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
@click="clickDetail(props.row.examID)"
>
<div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }}
</div>
<div v-else-if="col.name == 'fullname'">
<div class="row col-12 items-center">
<img
:src="props.row.avatar"
class="q-mr-sm col-4"
style="width: 28px; height: 28px; border-radius: 50%"
/>
<div class="col-4">
<div class="text-weight-medium">
{{ props.row.fullname }}
</div>
<div class="text-weight-light">
{{ props.row.citizenId }}
</div>
</div>
</div>
</div>
<div v-else-if="col.name == 'c1'">
<q-checkbox disable v-model="props.row.c1" />
</div>
<div v-else-if="col.name == 'c2'">
<q-checkbox disable v-model="props.row.c2" />
</div>
<div v-else-if="col.name == 'c3'">
<q-checkbox disable v-model="props.row.c3" />
</div>
<div v-else-if="col.name == 'c4'">
<q-checkbox disable v-model="props.row.c4" />
</div>
<div v-else-if="col.name == 'c5'">
<q-checkbox disable v-model="props.row.c5" />
</div>
<div v-else>
{{ col.value }}
</div>
</q-td>
</q-tr>
</template>
</Table>
</div>
</q-card>
</template>
<script setup lang="ts">
import type { QTableProps } from "quasar";
import { ref, onMounted } from "vue";
import { useRouter, useRoute } from "vue-router";
import type { RecruitDetailResponse } from "@/modules/03_recruiting/interface/response/Period";
import Table from "@/modules/03_recruiting/components/Table.vue";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
const $q = useQuasar();
import type { RecruitDetailResponse } from "@/modules/03_recruiting/interface/response/Period";
import Table from "@/modules/03_recruiting/components/Table.vue";
const $q = useQuasar();
const router = useRouter();
const route = useRoute();
const mixin = useCounterMixin();
const { messageError, success, showLoader, hideLoader } = mixin;
const year = ref<string>("");
const round = ref<string>("");
const name = ref<string>("");
@ -364,16 +248,11 @@ const columns = ref<QTableProps["columns"]>([
},
]);
onMounted(async () => {
hideLoader();
await fetchData();
});
const clickDetail = (examID: string) => {
function clickDetail(examID: string) {
router.push(`/compete/import/${importId.value}/${examID}`);
};
}
const downloadExam = async () => {
async function downloadExam() {
showLoader();
await http
.get(config.API.exportExam(importId.value), {
@ -392,9 +271,10 @@ const downloadExam = async () => {
.finally(() => {
hideLoader();
});
};
}
const downloadPassExam = async () => {
/** ดาวห์โลหด รายชื่อผู้สอบผ่าน */
async function downloadPassExam() {
showLoader();
await http
.get(config.API.exportPassExam(importId.value), {
@ -413,9 +293,10 @@ const downloadPassExam = async () => {
.finally(() => {
hideLoader();
});
};
}
const downloadPassResultExam = async () => {
/** ดาวห์โลหด สอบแข่งขันได้ */
async function downloadPassResultExam() {
showLoader();
await http
.get(config.API.exportPassResultExam(importId.value), {
@ -434,9 +315,10 @@ const downloadPassResultExam = async () => {
.finally(() => {
hideLoader();
});
};
}
const fetchData = async () => {
/** ดึงข้อมูล */
async function fetchData() {
showLoader();
await http
.post(config.API.getExamResultById(importId.value), {
@ -449,8 +331,6 @@ const fetchData = async () => {
count.value = header.count;
pass.value = header.pass;
notpass.value = header.notpass;
// period information
if (period != null) {
name.value = period.name;
round.value = period.order;
@ -476,9 +356,9 @@ const fetchData = async () => {
.finally(() => {
hideLoader();
});
};
}
const candidateToPlacement = async () => {
async function candidateToPlacement() {
$q.dialog({
title: "ยืนยันการนำผู้ผ่านสอบแข่งขันเข้าสู่ระบบบรรจุ",
message: "ต้องการนำผู้ผ่านสอบแข่งขันเข้าสู่ระบบบรรจุใช่หรือไม่?",
@ -505,7 +385,128 @@ const candidateToPlacement = async () => {
})
.onCancel(() => {})
.onDismiss(() => {});
};
}
onMounted(async () => {
hideLoader();
await fetchData();
});
</script>
<template>
<div class="toptitle text-dark col-12 row items-center">
<q-btn
icon="mdi-arrow-left"
unelevated
round
dense
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
/>
รายชอผสมครสอบแขงข {{ name }} ครงท {{ round }}/{{ year }}
<q-space />
<q-btn
size="md"
icon="mdi-content-save-move-outline"
round
flat
color="indigo"
v-if="rows.length > 0"
@click="candidateToPlacement"
>
<q-tooltip>บรรจานการสอบแขงข</q-tooltip>
</q-btn>
<q-btn class="bg-teal-1" icon="mdi-download" round color="primary" flat>
<q-tooltip>ดาวนโหลดไฟล</q-tooltip>
<q-menu>
<q-list style="min-width: 100px">
<q-item clickable v-close-popup @click="downloadExam()">
<q-item-section class="text-blue"
>งออกขอมลผทธสอบ</q-item-section
>
</q-item>
<q-item clickable v-close-popup @click="downloadPassExam()">
<q-item-section class="text-primary"
>งออกขอมลผสอบผานภาค .</q-item-section
>
</q-item>
<q-item clickable v-close-popup @click="downloadPassResultExam()">
<q-item-section class="text-amber-9"
>งออกขอมลผสอบแขงขนได</q-item-section
>
</q-item>
</q-list>
</q-menu>
</q-btn>
</div>
<q-card flat bordered class="col-12 row q-mt-sm q-pt-sm q-pa-md">
<div class="col-12">
<Table
:count="count"
:pass="pass"
:notpass="notpass"
:rows="rows"
:columns="columns"
:filter="filter"
:visible-columns="visibleColumns"
v-model:inputfilter="filter"
v-model:inputvisible="visibleColumns"
:nornmalData="false"
:conclude="true"
>
<template #columns="props">
<q-tr :props="props" class="cursor-pointer">
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
@click="clickDetail(props.row.examID)"
>
<div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }}
</div>
<div v-else-if="col.name == 'fullname'">
<div class="row col-12 items-center">
<img
:src="props.row.avatar"
class="q-mr-sm col-4"
style="width: 28px; height: 28px; border-radius: 50%"
/>
<div class="col-4">
<div class="text-weight-medium">
{{ props.row.fullname }}
</div>
<div class="text-weight-light">
{{ props.row.citizenId }}
</div>
</div>
</div>
</div>
<div v-else-if="col.name == 'c1'">
<q-checkbox disable v-model="props.row.c1" />
</div>
<div v-else-if="col.name == 'c2'">
<q-checkbox disable v-model="props.row.c2" />
</div>
<div v-else-if="col.name == 'c3'">
<q-checkbox disable v-model="props.row.c3" />
</div>
<div v-else-if="col.name == 'c4'">
<q-checkbox disable v-model="props.row.c4" />
</div>
<div v-else-if="col.name == 'c5'">
<q-checkbox disable v-model="props.row.c5" />
</div>
<div v-else>
{{ col.value }}
</div>
</q-td>
</q-tr>
</template>
</Table>
</div>
</q-card>
</template>
<style></style>