460 lines
22 KiB
Vue
460 lines
22 KiB
Vue
<script setup lang="ts">
|
|
import { ref, onMounted, reactive, computed } from "vue";
|
|
|
|
//import form
|
|
import FormPart2 from "@/modules/05_leave/components/FormLeave/Form.vue";
|
|
import SickForm from "@/modules/05_leave/components/FormLeave/01_SickForm.vue";
|
|
import FormBirth from "@/modules/05_leave/components/FormLeave/03_Birth.vue";
|
|
import HelpWifeBirthForm from "@/modules/05_leave/components/FormLeave/04_HelpWifeBirthForm.vue";
|
|
import VacationForm from "@/modules/05_leave/components/FormLeave/05_VacationForm.vue";
|
|
import OrdinationForm from "@/modules/05_leave/components/FormLeave/06_OrdinationForm.vue";
|
|
import HajjForm from "@/modules/05_leave/components/FormLeave/07_HajjForm.vue";
|
|
import MilitaryForm from "@/modules/05_leave/components/FormLeave/08_MilitaryForm.vue";
|
|
import StudyForm from "@/modules/05_leave/components/FormLeave/09_StudyForm.vue";
|
|
import TrainForm from "@/modules/05_leave/components/FormLeave/10_TrainForm.vue";
|
|
import WorkInternationalForm from "@/modules/05_leave/components/FormLeave/11_WorkInternationalForm.vue";
|
|
import FollowSpouseForm from "@/modules/05_leave/components/FormLeave/12_FollowSpouseForm.vue";
|
|
import RehabilitationForm from "@/modules/05_leave/components/FormLeave/13_RehabilitationForm.vue";
|
|
|
|
import { useCounterMixin } from "@/stores/mixin";
|
|
import { useQuasar } from "quasar";
|
|
import { useRoute } from "vue-router";
|
|
import router from "@/router";
|
|
import http from "@/plugins/http";
|
|
import config from "@/app.config";
|
|
import { useLeaveStore } from "@/modules/05_leave/store";
|
|
|
|
const route = useRoute();
|
|
const personalId = ref<string>(route.params.id as string);
|
|
const leaveId = ref<string>("");
|
|
const dataStore = useLeaveStore();
|
|
const $q = useQuasar();
|
|
const mixin = useCounterMixin();
|
|
const {
|
|
messageError,
|
|
showLoader,
|
|
hideLoader,
|
|
dialogConfirm,
|
|
success,
|
|
date2Thai,
|
|
dateToISO,
|
|
} = mixin;
|
|
|
|
const titleName = ref<string>("");
|
|
/** Form รายละเอียดข้อมูล*/
|
|
const formData = reactive<any>({
|
|
id: "", //Id การยื่นขอลา
|
|
leaveTypeName: "", // Name ประเภทการลา
|
|
leaveTypeId: "", //Id ประเภทการลา
|
|
fullname: "", //คำนำหน้า ชื่อ นามสกุล คนขอลา
|
|
dateSendLeave: null, // วันที่ยืนใบลา
|
|
status: "", //สถานะการของลา
|
|
leaveDateStart: null, //วันเริ่มการลา
|
|
leaveDateEnd: null, //วันสิ้นสุดการลา
|
|
leaveCount: 0, //จำนวนวันลา
|
|
leaveWrote: "", //เขียนที่
|
|
leaveAddress: "", //สถานที่ติดต่อขณะลา
|
|
leaveNumber: "", //หมายเลขที่ติดต่อขณะลา
|
|
leaveDetail: "", //รายละเอียดการลา
|
|
leaveDocument: [], //อัปโหลดเอกสารประกอบรายละเอียด
|
|
leaveDraftDocument: "", //อัปโหลดแบบฟอร์มการลา
|
|
leaveLastStart: null, //ลาครั้งสุดท้ายในประเภทนั้น ๆ เริ่มเมื่อวันที่(ลาป่วย ลาคลอดบุตร และลากิจส่วนตัว)(Auto)
|
|
leaveLastEnd: null, //ลาครั้งสุดท้ายในประเภทนั้น ๆ สิ้นสุดเมื่อวันที่(ลาป่วย ลาคลอดบุตร และลากิจส่วนตัว)(Auto)
|
|
leaveTotal: 0, //จำนวนวันที่ลา(Auto)
|
|
leavebirthDate: null, //วันเดือนปีเกิด(Auto)
|
|
leavegovernmentDate: null, //วันที่เข้ารับราชการ(Auto)
|
|
leaveSalary: 0, //เงินเดือนปัจจุบัน(Auto)
|
|
leaveSalaryText: "", //เงินเดือนปัจจุบัน(เขียนเป็นคำอ่าน)
|
|
leaveTypeDay: "", //ประเภทการลาในวันนั้นเช่น
|
|
wifeDayName: "", //ชื่อภรรยา(ลาไปช่วยเหลือภริยาที่คลอดบุตร)
|
|
wifeDayDateBorn: null, //วันที่คลอด(ลาไปช่วยเหลือภริยาที่คลอดบุตร)
|
|
restDayOldTotal: 0, //จำนวนวันลาพักผ่อนสะสม จากปีที่ผ่านมา(ลาพักผ่อน)(Auto)
|
|
restDayCurrentTotal: 0, //จำนวนวันลาพักผ่อนประจำปีปัจจุบัน(ลาพักผ่อน)(Auto)
|
|
ordainDayStatus: "", //เคย/ไม่เคยบวช (ให้เลือก) (ลาอุปสมบท)
|
|
ordainDayLocationName: "", //สถานที่บวช ชื่อวัด(ลาอุปสมบท)
|
|
ordainDayLocationAddress: "", //สถานที่บวช ที่อยู่(ลาอุปสมบท)
|
|
ordainDayLocationNumber: "", //สถานที่บวช หมายเลขโทรศัพท์(ลาอุปสมบท)
|
|
ordainDayOrdination: null, //สถานที่บวช วันอุปสมบท(ลาอุปสมบท)
|
|
ordainDayBuddhistLentName: "", //สถานที่จำพรรษา ชื่อวัด(ลาอุปสมบท)
|
|
ordainDayBuddhistLentAddress: "", //สถานที่จำพรรษา ที่อยู่(ลาอุปสมบท)
|
|
hajjDayStatus: "", //เคย/ไม่เคยไปประกอบพิธีฮัจญ์ (ให้เลือก) (ลาประกอบพิธีฮัจญ์)
|
|
absentDaySummon: "", //ได้รับหมายเรียกของ (ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล)
|
|
absentDayLocation: "", //ที่ (ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล)
|
|
absentDayRegistorDate: null, //ลงวันที่ (ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล)
|
|
absentDayGetIn: "", //ให้เข้ารับการ (ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล)
|
|
absentDayAt: "", //ณ ที่ (ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล)
|
|
studyDaySubject: "", //กรณีลาไปศึกษาต่อ ศึกษาวิชา (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
|
|
studyDayDegreeLevel: "", //กรณีลาไปศึกษาต่อ ขั้นปริญญา (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
|
|
studyDayUniversityName: "", //กรณีลาไปศึกษาต่อ ชื่อสถานศึกษา (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
|
|
studyDayTrainingSubject: "", //กรณีลาไปฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน ด้าน/หลักสูตร (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
|
|
studyDayTrainingName: "", //กรณีลาไปฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน ณ สถานที่ (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
|
|
studyDayCountry: "", //ประเทศ (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
|
|
studyDayScholarship: "", //ด้วยทุน (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
|
|
coupleDayName: "", //ชื่อคู่สมรส (ลาติดตามคู่สมรส)
|
|
coupleDayPosition: "", //ตำแหน่งคู่สมรส (ลาติดตามคู่สมรส)
|
|
coupleDayLevel: "", //ระดับคู่สมรส (ลาติดตามคู่สมรส)
|
|
coupleDayLevelCountry: "", //ไปปฏิบัติราชการ ณ ประเทศ (ลาติดตามคู่สมรส)
|
|
coupleDayCountryHistory: "", //ประวัติ ประเทศ (ลาติดตามคู่สมรส)
|
|
coupleDayTotalHistory: "", //ประวัติ เป็นเวลา กี่ปี กี่เดือน กี่วัน (ลาติดตามคู่สมรส)
|
|
coupleDayStartDateHistory: null, //ประวัติ ตั้งแต่วันที่ (ลาติดตามคู่สมรส)
|
|
coupleDayEndDateHistory: null, //ประวัติ ถึงวันที่ (ลาติดตามคู่สมรส)
|
|
coupleDaySumTotalHistory: "", //ประวัติ ในกรณีลาติดต่อกับครั้งก่อน รวมทั้งนี้ด้วย เป็นเวลา กี่ปี กี่เดือน กี่วัน (ลาติดตามคู่สมรส)
|
|
approveStep: "",
|
|
dear: "",
|
|
leaveLast: "",
|
|
});
|
|
|
|
/**
|
|
* function เรียกข้อมูลการลา
|
|
* @param id การลา
|
|
*/
|
|
async function fetchDataDetail(id: string) {
|
|
showLoader();
|
|
await http
|
|
.get(config.API.leaveUserId(id), {})
|
|
.then(async (res) => {
|
|
const data = await res.data.result;
|
|
|
|
dataStore.typeId = data.leaveTypeId;
|
|
|
|
titleName.value = data.fullName ?? "-";
|
|
formData.id = data.id ?? "-";
|
|
formData.leaveTypeName = data.leaveTypeName ?? "-";
|
|
formData.leaveTypeId = data.leaveTypeId ?? "-";
|
|
formData.fullname = data.fullName ?? "-";
|
|
formData.dateSendLeave =
|
|
data.dateSendLeave && date2Thai(data.dateSendLeave);
|
|
formData.status = data.status ?? "-";
|
|
formData.leaveStartDate = data.leaveStartDate;
|
|
// console.log(formData.leaveDateStart)
|
|
formData.leaveEndDate = data.leaveEndDate;
|
|
// console.log(formData.leaveDateEnd)
|
|
formData.leaveCount = data.leaveTotal ?? "-";
|
|
formData.leaveWrote = data.leaveWrote ?? "-";
|
|
formData.leaveAddress = data.leaveAddress ?? "-";
|
|
formData.leaveNumber = data.leaveNumber ?? "-";
|
|
formData.leaveDetail = data.leaveDetail ?? "-";
|
|
formData.leaveDocument = data.leaveDocument;
|
|
formData.leaveDraftDocument = data.leaveDraftDocument;
|
|
formData.leaveLastStart =
|
|
data.leaveLastStart && date2Thai(data.leaveLastStart);
|
|
formData.leaveLastEnd =
|
|
data.leaveLastStart && date2Thai(data.leaveLastEnd);
|
|
formData.leaveTotal = data.leaveTotal;
|
|
formData.leavebirthDate =
|
|
data.leaveBirthDate && date2Thai(data.leaveBirthDate);
|
|
formData.leavegovernmentDate =
|
|
data.leaveGovernmentDate && date2Thai(data.leaveGovernmentDate);
|
|
formData.leaveSalary = data.leaveSalary ?? "-";
|
|
formData.leaveSalaryText = data.leaveSalaryText ?? "-";
|
|
formData.wifeDayName = data.wifeDayName ?? "-";
|
|
formData.wifeDayDateBorn =
|
|
data.wifeDayDateBorn && date2Thai(data.wifeDayDateBorn);
|
|
formData.restDayOldTotal = data.restDayOldTotal ?? "-";
|
|
formData.restDayCurrentTotal = data.restDayCurrentTotal ?? "-";
|
|
formData.ordainDayStatus = data.ordainDayStatus;
|
|
formData.ordainDayLocationName = data.ordainDayLocationName ?? "-";
|
|
formData.ordainDayLocationAddress = data.ordainDayLocationAddress ?? "-";
|
|
formData.ordainDayLocationNumber = data.ordainDayLocationNumber ?? "-";
|
|
formData.ordainDayOrdination =
|
|
data.ordainDayOrdination && date2Thai(data.ordainDayOrdination);
|
|
formData.ordainDayBuddhistLentName =
|
|
data.ordainDayBuddhistLentName ?? "-";
|
|
formData.ordainDayBuddhistLentAddress =
|
|
data.ordainDayBuddhistLentAddress ?? "-";
|
|
formData.hajjDayStatus = data.hajjDayStatus;
|
|
formData.absentDaySummon = data.absentDaySummon ?? "-";
|
|
formData.absentDayLocation = data.absentDayLocation ?? "-";
|
|
formData.absentDayRegistorDate =
|
|
data.absentDayRegistorDate && date2Thai(data.absentDayRegistorDate);
|
|
formData.absentDayGetIn = data.absentDayGetIn ?? "-";
|
|
formData.absentDayAt = data.absentDayAt ?? "-";
|
|
formData.studyDaySubject = data.studyDaySubject ?? "-";
|
|
formData.studyDayDegreeLevel = data.studyDayDegreeLevel ?? "-";
|
|
formData.studyDayUniversityName = data.studyDayUniversityName ?? "-";
|
|
formData.studyDayTrainingSubject =
|
|
data.studyDayTrainingSubject ?? "-" ?? "-";
|
|
formData.studyDayTrainingName = data.studyDayTrainingName ?? "-";
|
|
formData.studyDayCountry = data.studyDayCountry ?? "-";
|
|
formData.studyDayScholarship = data.studyDayScholarship ?? "-";
|
|
formData.coupleDayName = data.coupleDayName ?? "-";
|
|
formData.coupleDayPosition = data.coupleDayPosition ?? "-";
|
|
formData.coupleDayLevel = data.coupleDayLevel ?? "-";
|
|
formData.coupleDayLevelCountry = data.coupleDayLevelCountry ?? "-";
|
|
formData.coupleDayCountryHistory = data.coupleDayCountryHistory ?? "-";
|
|
formData.coupleDayTotalHistory = data.coupleDayTotalHistory ?? "-";
|
|
formData.coupleDayStartDateHistory = data.coupleDayStartDateHistory;
|
|
formData.coupleDayEndDateHistory = data.coupleDayEndDateHistory;
|
|
formData.coupleDaySumTotalHistory = data.coupleDaySumTotalHistory ?? "-";
|
|
formData.approveStep = data.approveStep ?? "-";
|
|
formData.dear = data.dear ?? "-";
|
|
formData.leaveLast = data.leaveLast ?? "-";
|
|
// checkLeaveType(formData.leaveTypeId, formData.leaveTypeName)
|
|
|
|
dataStore.fetchProfileOld(data);
|
|
})
|
|
.catch((err) => {
|
|
messageError($q, err);
|
|
})
|
|
.finally(() => {
|
|
hideLoader();
|
|
});
|
|
}
|
|
|
|
const model = computed(() => {
|
|
return (
|
|
dataStore.options.find((x) => x.id == formData.leaveTypeId)?.code ?? ""
|
|
);
|
|
});
|
|
|
|
const modelSpecific = computed(() => {
|
|
const code = dataStore.options.find(
|
|
(x) => x.id == formData.leaveTypeId
|
|
)?.code;
|
|
|
|
if (code == "LV-006" && formData.ordainDayLocationName != "") {
|
|
return "b1";
|
|
} else if (code == "LV-006" && formData.ordainDayLocationName == "") {
|
|
return "b2";
|
|
} else if (code == "LV-008" && formData.studyDayTrainingSubject == "") {
|
|
return "s1";
|
|
} else if (code == "LV-008" && formData.studyDayTrainingSubject != "") {
|
|
return "s2";
|
|
} else {
|
|
return "";
|
|
}
|
|
});
|
|
|
|
function onSubmit(formData: FormData, isLeave: boolean = true) {
|
|
if (isLeave) {
|
|
dialogConfirm($q, async () => {
|
|
showLoader();
|
|
await http
|
|
.put(config.API.leaveUserId(personalId.value), formData)
|
|
.then(() => {
|
|
success($q, "บันทึกสำเร็จ");
|
|
})
|
|
.catch((e: any) => {
|
|
messageError($q, e);
|
|
})
|
|
.finally(() => {
|
|
hideLoader();
|
|
fetchDataDetail(personalId.value);
|
|
});
|
|
});
|
|
} else {
|
|
messageError($q, "", "ไม่มีสิทธิ์ลา");
|
|
}
|
|
}
|
|
|
|
function onConfirm(id: string) {
|
|
dialogConfirm(
|
|
$q,
|
|
async () => {
|
|
showLoader();
|
|
await http
|
|
.put(config.API.leaveUserSendId(personalId.value), { reason: "" })
|
|
.then(() => {
|
|
router.push("/leave");
|
|
success($q, "ยื่นใบลาสำเร็จ");
|
|
})
|
|
.catch((e: any) => {
|
|
messageError($q, e);
|
|
})
|
|
.finally(() => {
|
|
hideLoader();
|
|
});
|
|
},
|
|
"ยืนยันการยื่นใบลา",
|
|
"หากยืนยันแล้วจะไม่สามารถกลับมาแก้ไขได้ ต้องการยืนยันการยื่นใบลานี้ใช่หรือไม่"
|
|
);
|
|
}
|
|
|
|
/**เมื่อเริ่มโหลดหน้า
|
|
* เรียกใช้งาน fetchData เพื่อดึงข้อมูล
|
|
*/
|
|
onMounted(() => {
|
|
fetchDataDetail(personalId.value);
|
|
});
|
|
</script>
|
|
|
|
<template>
|
|
<div class="col-12 row justify-center">
|
|
<div class="col-xs-12 col-sm-12 col-md-11">
|
|
<div class="toptitle text-white col-12 row items-center">
|
|
<q-btn
|
|
to="/leave"
|
|
icon="mdi-arrow-left"
|
|
unelevated
|
|
round
|
|
dense
|
|
flat
|
|
color="primary"
|
|
class="q-mr-sm"
|
|
/>
|
|
<div>
|
|
แก้ไขใบลา
|
|
{{ formData.leaveTypeName }}
|
|
</div>
|
|
</div>
|
|
<q-form ref="myform" class="col-12">
|
|
<q-card bordered>
|
|
<div class="col-12 row q-col-gutter-md q-pa-md">
|
|
<div class="col-xs-12 col-sm-12">
|
|
<div style="display: flex; align-items: center">
|
|
<q-icon
|
|
name="mdi-numeric-1-circle"
|
|
size="20px"
|
|
color="primary"
|
|
/>
|
|
<div class="q-pl-sm text-weight-bold text-dark">
|
|
เลือกประเภทการลา
|
|
</div>
|
|
</div>
|
|
<div class="q-py-sm q-px-lg">
|
|
<div class="row">
|
|
<q-select
|
|
readonly
|
|
dense
|
|
class="col-12 col-sm-6 col-md-4"
|
|
outlined
|
|
v-model="formData.leaveTypeName"
|
|
option-value="code"
|
|
option-label="name"
|
|
emit-value
|
|
map-options
|
|
prefix="ประเภทใบลา :"
|
|
/>
|
|
</div>
|
|
<div class="row q-mt-sm">
|
|
<div
|
|
class="col-12 col-sm-6 col-md-3"
|
|
v-if="model === 'LV-006' || model === 'LV-008'"
|
|
>
|
|
<q-select
|
|
readonly
|
|
dense
|
|
outlined
|
|
v-model="modelSpecific"
|
|
:options="
|
|
model === 'LV-006'
|
|
? dataStore.optionsOrdination
|
|
: dataStore.optionsSpecific
|
|
"
|
|
option-value="code"
|
|
option-label="name"
|
|
emit-value
|
|
map-options
|
|
prefix="ประเภทการลา :"
|
|
@update:model-value="
|
|
dataStore.typeConvert(model, modelSpecific)
|
|
"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<div style="display: flex; align-items: center">
|
|
<q-icon
|
|
name="mdi-numeric-2-circle"
|
|
size="20px"
|
|
color="primary"
|
|
/>
|
|
<div class="q-pl-sm text-weight-bold text-dark">
|
|
ข้อมูลการลา
|
|
</div>
|
|
</div>
|
|
<FormPart2
|
|
:model="model"
|
|
:data="formData"
|
|
:leaveTypeId="formData.leaveTypeId"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="col-12">
|
|
<SickForm
|
|
v-if="model === 'LV-001' || model === 'LV-002'"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
<FormBirth
|
|
v-if="model === 'LV-003'"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
<HelpWifeBirthForm
|
|
v-if="model === 'LV-004'"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
<VacationForm
|
|
v-if="model === 'LV-005'"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
<OrdinationForm
|
|
v-if="model === 'LV-006' && modelSpecific === 'b1'"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
<HajjForm
|
|
v-if="model === 'LV-006' && modelSpecific === 'b2'"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
<MilitaryForm
|
|
v-if="model === 'LV-007'"
|
|
style="width: 100%"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
<StudyForm
|
|
v-if="model === 'LV-008' && modelSpecific === 's1'"
|
|
style="width: 100%"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
<TrainForm
|
|
v-if="
|
|
model === 'LV-008' &&
|
|
modelSpecific != 's1' &&
|
|
modelSpecific != ''
|
|
"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
<WorkInternationalForm
|
|
v-if="model === 'LV-009'"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
<FollowSpouseForm
|
|
v-if="model === 'LV-010'"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
<RehabilitationForm
|
|
v-if="model === 'LV-011'"
|
|
:data="formData"
|
|
:on-submit="onSubmit"
|
|
:on-confirm="onConfirm"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</q-card>
|
|
</q-form>
|
|
</div>
|
|
</div>
|
|
</template>
|