From 337c6dbf7b9ee1b40b367c4489edc58841030b0b Mon Sep 17 00:00:00 2001 From: NiceY2T <113652589+niceyst@users.noreply.github.com> Date: Sun, 12 Oct 2025 15:15:34 +0700 Subject: [PATCH] feat(compete):add DialogCandidates (#1473) --- .../components/DialogCandidates.vue | 91 +++++++++++++++++++ .../03_recruiting/views/01_compete/Detail.vue | 50 +++++++--- 2 files changed, 127 insertions(+), 14 deletions(-) create mode 100644 src/modules/03_recruiting/components/DialogCandidates.vue diff --git a/src/modules/03_recruiting/components/DialogCandidates.vue b/src/modules/03_recruiting/components/DialogCandidates.vue new file mode 100644 index 000000000..92ad4348f --- /dev/null +++ b/src/modules/03_recruiting/components/DialogCandidates.vue @@ -0,0 +1,91 @@ + + + + + + + + + + + + + {{ year + 543 }} + + + {{ parseInt(value + 543) }} + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/03_recruiting/views/01_compete/Detail.vue b/src/modules/03_recruiting/views/01_compete/Detail.vue index 4557d28d8..f4658a60b 100644 --- a/src/modules/03_recruiting/views/01_compete/Detail.vue +++ b/src/modules/03_recruiting/views/01_compete/Detail.vue @@ -6,14 +6,16 @@ import { useRouter, useRoute } from "vue-router"; import http from "@/plugins/http"; import config from "@/app.config"; +import genReportXLSX from "@/plugins/genreportxlsx"; import { useCounterMixin } from "@/stores/mixin"; import { useQuasar } from "quasar"; import type { RecruitDetailResponse } from "@/modules/03_recruiting/interface/response/Period"; -import Table from "@/modules/03_recruiting/components/Table.vue"; -import genReportXLSX from "@/plugins/genreportxlsx"; import type { Pagination } from "@/modules/03_recruiting/interface/index/Main"; +import Table from "@/modules/03_recruiting/components/Table.vue"; +import DialogCandidates from "@/modules/03_recruiting/components/DialogCandidates.vue"; + const $q = useQuasar(); const router = useRouter(); const route = useRoute(); @@ -60,7 +62,6 @@ const visibleColumns = ref([ "examResult", "applyDate", ]); - const columns = ref([ { name: "examID", @@ -295,6 +296,7 @@ const columns = ref([ }), }, ]); +const modalCandidates = ref(false); // dialog บรรจุผู้ผ่านการสอบแข่งขัน function clickDetail(examID: string) { router.push(`/compete/import/${importId.value}/${examID}`); @@ -401,7 +403,19 @@ async function fetchData() { }); } -async function candidateToPlacement() { +function onSearch() { + rows.value = onSearchDataTable( + filter.value, + rowsData.value, + columns.value ? columns.value : [] + ); +} + +/** + * ฟังก์ชันยืนยันการบันทึกส่งบรรจุผู้ผ่านการสอบแข่งขัน + * @param date วันที่บัญชีใช้ได้ตั้งแต่ + */ +function onSubmitCandidates(date: Date) { $q.dialog({ title: "ยืนยันการนำผู้ผ่านสอบแข่งขันเข้าสู่ระบบบรรจุ", message: "ต้องการนำผู้ผ่านสอบแข่งขันเข้าสู่ระบบบรรจุใช่หรือไม่?", @@ -414,28 +428,28 @@ async function candidateToPlacement() { .onOk(async () => { showLoader(); await http - .get(config.API.periodRecruitToPlacement(importId.value)) - .then((res) => { + .post(config.API.periodRecruitToPlacement(importId.value), { + accountStartDate: date, + }) + .then(() => { success($q, "นำผู้ผ่านสอบแข่งขันเข้าสู่ระบบบรรจุ"); + modalCandidates.value = false; + router.go(-1); }) .catch((e) => { messageError($q, e); }) .finally(async () => { hideLoader(); - router.go(-1); }); }) .onCancel(() => {}) .onDismiss(() => {}); } -function onSearch() { - rows.value = onSearchDataTable( - filter.value, - rowsData.value, - columns.value ? columns.value : [] - ); +/** ฟังก์ชันเปิดโมดัลสำหรับผู้ส่งผ่านการสอบแข่งขัน */ +function openModalCandidates() { + modalCandidates.value = true; } onMounted(async () => { @@ -443,6 +457,7 @@ onMounted(async () => { await fetchData(); }); + { flat color="indigo" v-if="rows.length > 0" - @click="candidateToPlacement" + @click="openModalCandidates" > บรรจุผู้ผ่านการสอบแข่งขัน @@ -491,6 +506,7 @@ onMounted(async () => { + { + +