hrms-user/src/modules/05_leave/views/EditPage.vue
2024-01-10 14:35:46 +07:00

334 lines
19 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) {
dialogConfirm($q, async () => {
showLoader()
await http
.put(config.API.leaveUserId(personalId.value), formData)
// .put(config.API.leaveUser() + "/" + formData.id, postData)
.then(() => {
success($q, "บันทึกสำเร็จ")
})
.catch((e: any) => {
messageError($q, e)
})
.finally(() => {
hideLoader()
fetchDataDetail(personalId.value)
})
})
}
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>