โอนคนสรรหาไปบรรจุ

This commit is contained in:
Kittapath 2023-07-26 18:49:20 +07:00
parent d08b3625f3
commit 78163d36c0
11 changed files with 249 additions and 83 deletions

View file

@ -468,6 +468,7 @@ const saveData = async () => {
messageError($q, e);
})
.finally(async () => {
modal.value = false;
await fetchData();
});
};
@ -493,6 +494,7 @@ const editData = async () => {
messageError($q, e);
})
.finally(async () => {
modal.value = false;
await fetchData();
});
};

View file

@ -497,6 +497,7 @@ const saveData = async () => {
messageError($q, e);
})
.finally(async () => {
modal.value = false;
await fetchData();
});
};

View file

@ -58,6 +58,17 @@
</q-list>
</q-menu>
</q-btn>
<q-btn
size="md"
icon="mdi-content-save-move-outline"
round
flat
color="indigo"
v-if="statusPayment && setSeat == true"
@click="candidateToPlacement"
>
<q-tooltip>บรรจานการคดเลอก</q-tooltip>
</q-btn>
<q-space />
<div class="items-center" style="display: flex">
<!-- นหาขอความใน table -->
@ -137,7 +148,7 @@
</template>
<script setup lang="ts">
import { ref, useAttrs } from "vue";
import { useRoute } from "vue-router";
import { useRoute, useRouter } from "vue-router";
import { useDataStore } from "@/stores/data";
import { useCounterMixin } from "@/stores/mixin";
import http from "@/plugins/http";
@ -145,6 +156,7 @@ import config from "@/app.config";
import { useQuasar } from "quasar";
const route = useRoute();
const router = useRouter();
const dataStore = useDataStore();
const { loaderPage } = dataStore;
const mixin = useCounterMixin();
@ -277,6 +289,34 @@ const uploadFile = async () => {
}
};
const candidateToPlacement = async () => {
$q.dialog({
title: "ยืนยันการนำผู้ผ่านคัดเลือกเข้าสู่ระบบบรรจุ",
message: "ต้องการนำผู้ผ่านคัดเลือกเข้าสู่ระบบบรรจุใช่หรือไม่?",
cancel: {
flat: true,
color: "negative",
},
persistent: true,
})
.onOk(async () => {
await http
.get(config.API.periodExamToPlacement(examId.value))
.then((res) => {
success($q, "นำผู้ผ่านคัดเลือกเข้าสู่ระบบบรรจุ");
})
.catch((e) => {
messageError($q, e);
})
.finally(async () => {
loaderPage(false);
router.go(-1);
});
})
.onCancel(() => {})
.onDismiss(() => {});
};
const uploadDataSeat = async () => {
loaderPage(true);
const formData = new FormData();

View file

@ -13,6 +13,17 @@
/>
รายชอผสมครสอบแขงข {{ 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>
@ -464,6 +475,35 @@ const fetchData = async () => {
loaderPage(false);
});
};
const candidateToPlacement = async () => {
$q.dialog({
title: "ยืนยันการนำผู้ผ่านสอบแข่งขันเข้าสู่ระบบบรรจุ",
message: "ต้องการนำผู้ผ่านสอบแข่งขันเข้าสู่ระบบบรรจุใช่หรือไม่?",
cancel: {
flat: true,
color: "negative",
},
persistent: true,
})
.onOk(async () => {
loaderPage(true);
await http
.get(config.API.periodRecruitToPlacement(importId.value))
.then((res) => {
success($q, "นำผู้ผ่านสอบแข่งขันเข้าสู่ระบบบรรจุ");
})
.catch((e) => {
messageError($q, e);
})
.finally(async () => {
loaderPage(false);
router.go(-1);
});
})
.onCancel(() => {})
.onDismiss(() => {});
};
</script>
<style></style>

View file

@ -13,6 +13,17 @@
/>
รายชอผสมครสอบรอบ {{ 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>
@ -129,7 +140,7 @@ const pass = ref<number>(0);
const notpass = ref<number>(0);
const importId = ref<string>(route.params.id as string); // Period Import Id
const mixin = useCounterMixin();
const { messageError } = mixin;
const { messageError, success } = mixin;
const filter = ref<string>(""); //search data table
const visibleColumns = ref<String[]>([
"examID",
@ -419,6 +430,35 @@ const fetchData = async () => {
loaderPage(false);
});
};
const candidateToPlacement = async () => {
$q.dialog({
title: "ยืนยันการนำผู้ผ่านคัดเลือกคนพิการเข้าสู่ระบบบรรจุ",
message: "ต้องการนำผู้ผ่านคัดเลือกคนพิการเข้าสู่ระบบบรรจุใช่หรือไม่?",
cancel: {
flat: true,
color: "negative",
},
persistent: true,
})
.onOk(async () => {
loaderPage(true);
await http
.get(config.API.periodDisableToPlacement(importId.value))
.then((res) => {
success($q, "นำผู้ผ่านคัดเลือกคนพิการเข้าสู่ระบบบรรจุ");
})
.catch((e) => {
messageError($q, e);
})
.finally(async () => {
loaderPage(false);
router.go(-1);
});
})
.onCancel(() => {})
.onDismiss(() => {});
};
</script>
<style></style>

View file

@ -455,7 +455,7 @@ const columns = ref<QTableProps["columns"]>([
{
name: "registerDate",
align: "left",
label: "วันและเวลาที่สมัคร",
label: "วันและเวลาที่สมัคร",
sortable: true,
field: "registerDate",
headerStyle: "font-size: 14px; min-width: 200px",
@ -514,7 +514,7 @@ const fetchData = async () => {
avatar: r.profileImg != null ? r.profileImg.detail : "",
citizenId: r.citizenId,
number: r.number,
registerDate: r.registerDate,
registerDate: date2Thai(r.registerDate),
examIdenNumber: r.examIdenNumber,
seatNumber: r.seatNumber,
resultC: r.resultC,

View file

@ -6,15 +6,15 @@ import cardTop from "@/modules/05_placement/components/PersonalList/StatCard.vue
import keycloak from "@/plugins/keycloak";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin"
import { useQuasar } from "quasar"
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
import { usePlacementDataStore } from "@/modules/05_placement/store";
const DataStore = usePlacementDataStore();
const $q = useQuasar
const mixin = useCounterMixin()
const { messageError, showLoader, hideLoader } = mixin
const $q = useQuasar;
const mixin = useCounterMixin();
const { messageError, showLoader, hideLoader } = mixin;
let roleAdmin = ref<boolean>(false);
const router = useRouter();
const route = useRoute();
@ -53,7 +53,7 @@ const getStat = async () => {
})
.catch((e) => {
messageError($q, e);
})
});
};
onMounted(async () => {
@ -65,14 +65,15 @@ onMounted(async () => {
roleAdmin.value = await keycloak.tokenParsed.role.includes("placement1");
}
await getStat()
await getStat();
examData.value = await DataStore.DataMainOrig.find((x: any) => x.id == examId);
title.value = examData.value.examRound;
round.value = examData.value.examOrder;
year.value = examData.value.fiscalYear;
examData.value = await DataStore.DataMainOrig.find(
(x: any) => x.id == examId
);
title.value = examData.value == null ? null : examData.value.examRound;
round.value = examData.value == null ? null : examData.value.examOrder;
year.value = examData.value == null ? null : examData.value.fiscalYear;
});
const fetchPlacementData = async () => {
@ -93,18 +94,48 @@ const fetchPlacementData = async () => {
<template>
<div class="col-xs-12 col-sm-12 col-md-8 col-lg-8 row">
<div class="toptitle">
<q-btn icon="mdi-arrow-left" unelevated round dense flat color="primary" class="q-mr-sm" @click="router.go(-1)" />
<q-btn
icon="mdi-arrow-left"
unelevated
round
dense
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
/>
รายชอผสอบในรอบ {{ title }} ครงท {{ round }} {{ year }}
</div>
<q-card bordered class="q-py-sm row col-12">
<div class="col-12 row bg-white">
<div class="fit q-px-md q-py-sm">
<div class="row col-12 q-col-gutter-md fit">
<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" />
<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>
</div>
</div>
@ -112,7 +143,11 @@ const fetchPlacementData = async () => {
</div>
<q-card flat bordered class="col-12 q-mt-sm q-pt-sm">
<div>
<AddTablePosition :statCard="getStat" class="q-pa-none" @get-stat="getStat" />
<AddTablePosition
:statCard="getStat"
class="q-pa-none"
@get-stat="getStat"
/>
</div>
</q-card>
</template>

View file

@ -232,7 +232,10 @@ const getTable = async () => {
organizationShortName: data.organizationShortName,
positionNumber: data.positionNumber,
positionPath: data.positionPath,
reportingDate: dateText(new Date(data.reportingDate)),
reportingDate:
data.reportingDate == null
? null
: dateText(new Date(data.reportingDate)),
examNumber: data.examNumber,
bmaOfficer: convertBmaOfficer(data.bmaOfficer),
statusId: data.statusId,