hrms-user/src/modules/03_retire/views/addRetire.vue

626 lines
24 KiB
Vue
Raw Normal View History

2023-07-21 16:34:06 +07:00
<script setup lang="ts">
import { ref, onMounted } from "vue";
import { useQuasar } from "quasar";
2024-09-03 11:48:07 +07:00
import type { QForm } from "quasar";
import { useRouter, useRoute } from "vue-router";
2024-09-03 11:48:07 +07:00
import http from "@/plugins/http";
import config from "@/app.config";
2024-09-03 11:48:07 +07:00
import { useCounterMixin } from "@/stores/mixin";
import Dialog from "@/modules/03_retire/views/DialogRetire.vue";
2024-10-17 17:43:45 +07:00
import Workflow from "@/components/Workflow/Main.vue";
2023-07-21 16:34:06 +07:00
2024-09-03 11:48:07 +07:00
const $q = useQuasar();
const route = useRoute();
const router = useRouter();
const routeName = router.currentRoute.value.name;
const mixin = useCounterMixin();
const {
date2Thai,
dateToISO,
success,
messageError,
showLoader,
hideLoader,
dialogConfirm,
} = mixin;
2024-10-17 17:43:45 +07:00
const id = ref<string>(
router.currentRoute.value.name !== "AddRetire"
? route.params.id.toString()
: ""
); //เก็บ id path
2024-09-03 11:48:07 +07:00
const myform = ref<QForm | null>(null); //form
const tranferOrg = ref(""); //สถานที่ยื่นขอลาออกจากราชการ
const dateCommand = ref<Date>(new Date()); //วันที่ยื่นขอลาออกจากราชการ
2024-10-18 14:51:42 +07:00
const dateLeave = ref<Date | null>(null); //วันที่ขอลาออกจากราชการ
2024-09-03 11:48:07 +07:00
const noteReason = ref(""); //เหตุผลที่ลาออกจากราชการ
const modal = ref<boolean>(false); //ตัวแปร dialog
/** ข้อมูล v-model ของฟอร์ม */
const dataDetail = ref<any>({
datetext: "",
activeDate: new Date(),
createdAt: new Date(),
firstName: "",
id: "",
isActive: true,
lastName: "",
location: "",
organizationPositionOld: "",
positionLevelOld: "",
positionNumberOld: "",
positionTypeOld: "",
prefix: "",
profileId: "",
reason: "",
salary: 0,
sendDate: new Date(),
status: "",
statustext: "",
fullname: "",
});
/**
* งกนเปลยนเป string ของ status
* @param val value ของ status true/false
*/
2024-09-03 11:48:07 +07:00
function statusOrder(val: boolean) {
switch (val) {
case true:
2024-07-09 17:19:21 +07:00
return "ยับยั้ง";
case false:
2024-07-09 17:19:21 +07:00
return "อนุญาต";
}
2024-09-03 11:48:07 +07:00
}
/**
* นทกขอมลการลาออก
*/
2024-09-03 11:48:07 +07:00
async function onSubmit() {
dialogConfirm(
$q,
() => {
showLoader();
2024-10-18 14:51:42 +07:00
const formData = new FormData();
formData.append("Location", tranferOrg.value);
formData.append("SendDate", dateToISO(dateCommand.value));
2024-10-18 14:51:42 +07:00
formData.append(
"ActiveDate",
dateLeave.value !== null ? dateToISO(dateLeave.value) : ""
);
formData.append("Reason", noteReason.value);
formData.append("file", files.value);
http
.post(config.API.listResign(), formData)
.then((res) => {
let data = res.data.result.id;
success($q, "บันทึกข้อมูลสำเร็จ");
router.push(`/retire/result/${data}`);
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
},
"ยืนยันการยื่นข้อมูลลาออก",
"ต้องการยื่นข้อมูลลาออกนี้ใช่หรือไม่"
);
2024-09-03 11:48:07 +07:00
}
const files = ref<any>();
2024-09-03 11:48:07 +07:00
const checkCancleLeave = ref<boolean>(false);
//ยกเลิกการลาออก
2024-09-03 11:48:07 +07:00
function cancelResing() {
modal.value = true;
2024-09-03 11:48:07 +07:00
}
/**
* งกนเรยกขอมลจาก Api
* @param id ไอดของขอม
*/
2024-09-03 11:48:07 +07:00
async function fectDataresign(id: string) {
showLoader();
await http
.get(config.API.resingByid(id))
.then((res) => {
let data = res.data.result;
tranferOrg.value = data.location;
dateCommand.value = data.sendDate;
dateLeave.value = data.activeDate;
const currentDate = new Date();
let dueDateMinusOne = new Date(data.activeDate);
dueDateMinusOne.setDate(dueDateMinusOne.getDate() - 1);
checkCancleLeave.value = currentDate < dueDateMinusOne;
noteReason.value = data.reason;
files.value = data.docs;
dataDetail.value = data;
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
2024-09-03 11:48:07 +07:00
}
2024-09-03 11:48:07 +07:00
/**
* เป tab ใหม
* @param data path file
*/
function downloadFile(data: string) {
window.open(data, "_blank");
}
2024-09-03 11:48:07 +07:00
/**
* เรยกฟงกนทงหมดตอนเรยกใชไฟล
*/
onMounted(() => {
if (route.params.id !== undefined) {
fectDataresign(id.value);
}
});
2023-07-21 16:34:06 +07:00
</script>
2024-10-17 17:43:45 +07:00
<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
icon="mdi-arrow-left"
unelevated
round
dense
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
/>
<div v-if="routeName == 'AddRetire'">เพิ่มเรื่องลาออก</div>
<div v-else>รายละเอียดเรื่องลาออก</div>
</div>
<q-form
ref="myform"
class="col-12"
greedy
@submit.prevent
@validation-success="onSubmit"
>
<q-card bordered>
<div class="col-12 row q-col-gutter-sm q-pa-md">
<div class="col-xs-12 col-sm-12">
<div class="col-12 row q-col-gutter-sm">
<q-input
:class="
routeName !== 'AddRetire'
? 'col-md-8 col-xs-12'
: 'col-md-8 col-xs-12 inputgreen'
"
class=""
dense
outlined
v-model="tranferOrg"
hide-bottom-space
label="สถานที่ยื่นขอลาออกจากราชการ"
:readonly="routeName != 'AddRetire'"
:rules="[(val:string) => !!val || `${'กรุณากรอกสถานที่ยื่นขอลาออกจากราชการ'}`]"
/>
2024-05-27 10:20:15 +07:00
<datepicker
:class="
routeName !== 'AddRetire'
? 'col-md-2 col-xs-12'
: 'col-md-2 col-xs-12 inputgreen'
"
menu-class-name="modalfix"
v-model="dateCommand"
:locale="'th'"
autoApply
readonly
borderless
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
<q-input
outlined
readonly
dense
hide-bottom-space
2024-05-27 10:20:15 +07:00
class="full-width"
:model-value="
dateCommand != null ? date2Thai(dateCommand) : null
"
:label="`${'วันที่ยื่นขอลาออกจากราชการ'}`"
:rules="[
(val: string) =>
!!val || `${'กรุณาเลือกวันที่ยื่นขอลาออกจากราชการ'}`,
]"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
<datepicker
:class="
routeName !== 'AddRetire'
? 'col-md-2 col-xs-12'
: 'col-md-2 col-xs-12 inputgreen'
"
menu-class-name="modalfix"
v-model="dateLeave"
:locale="'th'"
autoApply
borderless
:enableTimePicker="false"
week-start="0"
:readonly="routeName != 'AddRetire'"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
<q-input
outlined
dense
hide-bottom-space
:readonly="routeName != 'AddRetire'"
2024-05-27 10:20:15 +07:00
class="full-width"
:model-value="
dateLeave != null ? date2Thai(dateLeave) : null
"
:label="`${'วันที่ขอลาออกจากราชการ'}`"
:rules="[
(val: string) =>
!!val || `${'กรุณาเลือกวันที่ขอลาออกจากราชการ'}`,
]"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
<q-input
:class="
routeName !== 'AddRetire' ? 'col-12' : 'col-12 inputgreen'
"
dense
outlined
v-model="noteReason"
label="เหตุผลที่ลาออกจากราชการ"
type="textarea"
hide-bottom-space
:readonly="routeName != 'AddRetire'"
:rules="[
(val: string) => !!val || `${'กรุณากรอกเหตุผลที่ลาออกจากราชการ'}`,
]"
/>
<div class="col-12 row" v-if="routeName == 'AddRetire'">
<q-file
v-model="files"
class="col-xs-12 col-sm-12 inputgreen"
outlined
dense
lazy-rules
hide-bottom-space
accept=".pdf"
:rules="[(val: string) => !!val || 'กรุณาเลือกเอกสารเพิ่มเติม']"
label="เอกสารเพิ่มเติม"
>
<template v-slot:prepend>
<q-icon name="attach_file" /> </template
></q-file>
</div>
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered flat class="row col-12 text-dark q-mt-sm">
<div
class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
>
<div class="q-pl-sm text-weight-bold text-dark">
เอกสารเพมเต
</div>
</div>
<q-list class="col-12">
<q-item
v-for="file in files"
:key="file.key"
class="q-my-xs"
>
<q-item-section>
<q-item-label class="full-width ellipsis">
{{ file.fileName }}
</q-item-label>
<q-item-label caption> </q-item-label>
</q-item-section>
<q-space />
<q-btn
size="12px"
flat
round
dense
color="blue"
icon="mdi-download"
@click="downloadFile(file.pathName)"
><q-tooltip>ดาวนโหลดไฟล</q-tooltip></q-btn
>
</q-item>
</q-list>
</q-card>
</div>
2024-06-05 15:19:19 +07:00
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered class="row col-12 text-dark q-mt-sm">
2024-06-05 15:19:19 +07:00
<div
class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
>
<div class="q-pl-sm text-weight-bold text-dark">
ผลการพจารณาของการเจาหนาทของหนวยงาน
2024-06-05 15:19:19 +07:00
</div>
</div>
<q-separator />
<div class="row col-12 q-pa-md">
<div class="col-12 row bg-white q-col-gutter-md">
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">สถานะ</div>
<div class="col-12 text-detail">
{{
dataDetail.officerReject !== null
? statusOrder(dataDetail.officerReject)
: "-"
}}
</div>
</div>
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">
นสดทายทบย
</div>
<div class="col-12 text-detail">
{{
dataDetail.officerRejectDate !== null
? date2Thai(dataDetail.officerRejectDate)
: "-"
}}
</div>
</div>
<div class="col-xs-12 row items-start">
<div class="col-12 text-top">
ความคดเหนและเหตผล
</div>
<div
class="col-12 text-detail"
v-if="dataDetail.officerReject === false"
>
{{
dataDetail.officerApproveReason !== null
? dataDetail.officerApproveReason
: "-"
}}
</div>
<div
class="col-12 text-detail"
v-if="dataDetail.officerReject === true"
>
{{
dataDetail.officerRejectReason !== null
? dataDetail.officerRejectReason
: "-"
}}
</div>
</div>
</div>
</div>
</q-card>
</div>
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered class="row col-12 text-dark q-mt-sm">
<div
class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
>
<div class="q-pl-sm text-weight-bold text-dark">
ผลการพจารณาของผงคบบญชา
</div>
</div>
<q-separator />
<div class="row col-12 q-pa-md">
<div class="col-12 row bg-white q-col-gutter-md">
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">สถานะ</div>
<div class="col-12 text-detail">
{{
dataDetail.commanderReject !== null
? statusOrder(dataDetail.commanderReject)
: "-"
}}
</div>
</div>
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">
นสดทายทบย
</div>
<div class="col-12 text-detail">
{{
dataDetail.commanderRejectDate !== null
? date2Thai(dataDetail.commanderRejectDate)
: "-"
}}
</div>
</div>
<div class="col-xs-12 row items-start">
<div class="col-12 text-top">
ความคดเหนและเหตผล
</div>
<div
class="col-12 text-detail"
v-if="dataDetail.commanderReject === false"
>
{{
dataDetail.commanderApproveReason !== null
? dataDetail.commanderApproveReason
: "-"
}}
</div>
<div
class="col-12 text-detail"
v-if="dataDetail.commanderReject === true"
>
{{
dataDetail.commanderRejectReason !== null
? dataDetail.commanderRejectReason
: "-"
}}
</div>
</div>
</div>
</div>
</q-card>
</div>
2024-10-17 17:43:45 +07:00
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<q-card bordered class="row col-12 text-dark q-mt-sm">
<div
class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
>
<div class="q-pl-sm text-weight-bold text-dark">
ผลการพจารณาของผอำนาจ
</div>
</div>
<q-separator />
<div class="row col-12 q-pa-md">
<div class="col-12 row bg-white q-col-gutter-md">
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">สถานะ</div>
<div class="col-12 text-detail">
{{
dataDetail.oligarchReject !== null
? statusOrder(dataDetail.oligarchReject)
: "-"
}}
</div>
</div>
<div class="col-xs-6 row items-start">
<div class="col-12 text-top">
นสดทายทบย
</div>
<div class="col-12 text-detail">
{{
dataDetail.oligarchRejectDate !== null
? date2Thai(dataDetail.oligarchRejectDate)
: "-"
}}
</div>
</div>
<div class="col-xs-12 row items-start">
<div class="col-12 text-top">
ความคดเหนและเหตผล
</div>
<div
class="col-12 text-detail"
v-if="dataDetail.oligarchReject == false"
>
{{
dataDetail.oligarchApproveReason !== null
? dataDetail.oligarchApproveReason
: "-"
}}
</div>
<div
class="col-12 text-detail"
v-else-if="dataDetail.oligarchReject == true"
>
{{
dataDetail.oligarchRejectReason !== null
? dataDetail.oligarchRejectReason
: "-"
}}
</div>
</div>
</div>
</div>
</q-card>
</div>
2024-10-17 17:43:45 +07:00
<div class="col-12 row" v-if="routeName != 'AddRetire'">
<Workflow :id="id" sys-name="RETIREMENT_RESIFNATION" />
</div>
</div>
</div>
</div>
<q-separator v-if="routeName !== 'AddRetire'" />
<q-card-actions
align="right"
v-if="routeName !== 'AddRetire'"
class="q-px-md"
>
<q-btn
v-if="
dataDetail.status !== 'DELETE' &&
dataDetail.status !== 'CANCEL' &&
2024-07-18 18:50:02 +07:00
dataDetail.status !== 'DONECANCEL' &&
dataDetail.status !== 'DONEREJECT' &&
checkCancleLeave
"
unelevated
class="q-px-md items-center"
color="orange"
label="ยกเลิกการลาออก"
@click="cancelResing"
:disable="tranferOrg == '' && noteReason == ''"
/>
</q-card-actions>
<q-separator v-if="routeName == 'AddRetire'" />
<q-card-actions
align="right"
v-if="routeName == 'AddRetire'"
class="q-px-md"
>
<q-space />
<q-btn
unelevated
class="q-px-md items-center"
color="primary"
label="ยื่นเรื่องขอลาออก"
type="submit"
/>
</q-card-actions>
</q-card>
</q-form>
</div>
</div>
<Dialog v-model:modal="modal" :fectData="fectDataresign" />
</template>