hrms-mgt/src/modules/06_retirement/components/resign/ResignByid.vue

401 lines
12 KiB
Vue
Raw Normal View History

<template>
<div class="toptitle text-dark 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)"
/>
รายละเอยดการลาออกของ
{{ dataDetail.firstName + " " + dataDetail.lastName }}
</div>
<q-card bordered class="row col-12 text-dark">
<div class="bg-grey-1 q-pa-sm col-12 row items-center text-primary">
<div class="q-pl-sm text-weight-bold text-subtitle2">
{{ dataDetail.firstName + " " + dataDetail.lastName }}
</div>
<q-space />
<q-btn
outline
color="blue"
dense
icon-right="mdi-open-in-new"
class="q-px-sm"
label="ดูข้อมูลทะเบียนประวัติ"
@click="redirectToRegistry(dataDetail.profileId)"
/>
</div>
<div class="col-12"><q-separator /></div>
<div class="row col-12 q-pa-md">
<div class="col-12 row bg-white q-col-gutter-md">
<div class="col-xs-3 col-sm-2 col-md-1 row">
<q-img src="@/assets/avatar_user.jpg" />
</div>
<div class="col-xs-6 col-sm-3 row items-center">
<div class="col-12 q-pl-md">
<div class="col-12 text-top">ตำแหนงในสายงาน</div>
<div class="col-12 text-detail">{{ dataDetail.positionLine }}</div>
</div>
</div>
<div class="col-xs-6 col-sm-2 row items-center">
<div class="col-12">
<div class="col-12 text-top">ระด</div>
<div class="col-12 text-detail">{{ dataDetail.positionLevel }}</div>
</div>
</div>
<div class="col-xs-6 col-sm-3 row items-center">
<div class="col-12">
<div class="col-12 text-top">งก</div>
<div class="col-12 text-detail">
{{ dataDetail.organizationOrganization }}
</div>
</div>
</div>
<div class="col-xs-6 col-sm-3 row items-center">
<div class="col-12">
<div class="col-12 text-top">สถานะ</div>
<div class="col-12 text-detail">
<q-icon
size="20px"
v-if="dataDetail.status == 'PENDING'"
name="mdi-timer-sand"
color="deep-orange"
/>
<q-icon
size="20px"
v-else-if="dataDetail.status == 'APPROVE'"
name="mdi-check"
color="teal"
/>
<q-icon size="20px" v-else name="mdi-close" color="red" />
{{ statusName(dataDetail.status) }}
</div>
</div>
</div>
</div>
</div>
</q-card>
<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>
<q-space />
<div class="q-gutter-x-sm" v-if="dataDetail.status === 'PENDING'">
<q-btn
outline
color="primary"
dense
icon-right="check"
class="q-px-sm"
label="อนุมัติ"
@click="popUp('pass')"
/>
<q-btn
outline
color="red"
dense
icon-right="close"
class="q-px-sm"
label="ยับยั้ง"
@click="popUp('passNot')"
/>
</div>
</div>
<div class="col-12"><q-separator /></div>
<div class="row col-12 q-pa-md">
<div class="col-12 row bg-white q-col-gutter-md">
<div class="col-xs-6 col-sm-3 row items-center">
<div class="col-12">
<div class="col-12 text-top">สถานทนขอลาออกจากราชการ</div>
<div class="col-12 text-detail">{{ dataDetail.location }}</div>
</div>
</div>
<div class="col-xs-6 col-sm-3 row items-center">
<div class="col-12">
<div class="col-12 text-top">นทนขอลาออกจากราชการ</div>
<div class="col-12 text-detail">
{{ date2Thai(dataDetail.sendDate) }}
</div>
</div>
</div>
<div class="col-xs-6 col-sm-3 row items-center">
<div class="col-12">
<div class="col-12 text-top">เหตผลทลาออกจากราชการ</div>
<div class="col-12 text-detail">{{ dataDetail.reason }}</div>
</div>
</div>
<div class="col-xs-6 col-sm-3 row items-center">
<div class="col-12">
<div class="col-12 text-top">นทขอลาออกจากราชการ</div>
<div class="col-12 text-detail">
{{ date2Thai(dataDetail.activeDate) }}
</div>
</div>
</div>
</div>
</div>
</q-card>
<!-- <q-dialog v-model="modalPass" persistent>
<q-card style="width: 800px">
<q-form ref="myForm">
<DialogHeader
:title="`${modalPass ? 'อนุมัติ' : 'ยับยั้ง'}`"
:close="clickClose"
/>
<q-separator />
<q-card-section class="q-p-sm">
<div class="col-xs-12 col-sm-12 col-md-12">
<q-input
hide-bottom-space
dense
lazy-rules
outlined
:rules="[(val) => !!val || 'กรุณากรอกเหตุผล']"
v-model="userNote"
:label="`${'กรอกเหตุผล'}`"
type="textarea"
/>
</div>
</q-card-section>
<q-separator />
<DialogFooter
:editvisible="true"
:save="modalPass ? savePass : savePassNot"
/>
</q-form>
</q-card>
</q-dialog>
<q-dialog v-model="modalPassNot" persistent>
<q-card style="width: 800px">
<q-form ref="myForm">
<DialogHeader
:title="`${modalPass ? 'อนุมัติ' : 'ยับยั้ง'}`"
:close="clickClose"
/>
<q-separator />
<q-card-section class="q-p-sm">
<div class="col-xs-12 col-sm-12 col-md-12">
<q-input
hide-bottom-space
dense
outlined
lazy-rules
:rules="[(val) => !!val || 'กรุณากรอกเหตุผล']"
v-model="userNote"
:label="`${'กรอกเหตุผล'}`"
type="textarea"
/>
</div>
</q-card-section>
<q-separator />
<DialogFooter
:editvisible="true"
:save="modalPass ? savePass : savePassNot"
/>
</q-form>
</q-card>
</q-dialog> -->
</template>
<script setup lang="ts">
import { useRouter, useRoute } from "vue-router";
import { useQuasar, QForm } from "quasar";
import { ref, onMounted } from "vue";
// import DialogFooter from "@/modules/05_placement/components/PersonalList/DialogFooter.vue";
// import DialogHeader from "@/modules/05_placement/components/PersonalList/DialogHeader.vue";
import { useCounterMixin } from "@/stores/mixin";
import http from "@/plugins/http";
import config from "@/app.config";
const router = useRouter();
const route = useRoute();
const mixin = useCounterMixin();
const { messageError, date2Thai, showLoader, hideLoader, success } = mixin;
const $q = useQuasar();
const id = ref<string>(route.params.id.toString());
const dataDetail = ref<any>([]);
// const modalPass = ref<boolean>(false);
// const modalPassNot = ref<boolean>(false);
onMounted(() => {
fetchData(id.value);
});
const fetchData = async (id: string) => {
showLoader();
await http
.get(config.API.resingByid(id))
.then((res: any) => {
dataDetail.value = res.data.result;
// console.log(dataDetail.value);
})
.catch((e) => {
console.log(e);
messageError($q, e);
})
.finally(() => {
hideLoader();
});
};
const popUp = (action: "pass" | "passNot") => {
if (action === "pass") {
$q.dialog({
title: "ยืนยันการอนุมัติการลาออก",
message: "ต้องการยืนยันอนุมัติการลาออกนี้ใช่หรือไม่?",
cancel: {
flat: true,
color: "negative",
},
persistent: true,
}).onOk(async () => {
confirmpopUp();
});
} else if (action === "passNot") {
$q.dialog({
title: "ยืนยันการยับยั้งการลาออก",
message: "ต้องการยืนยันการยับยั้งการลาออกนี้ใช่หรือไม่?",
cancel: {
flat: true,
color: "negative",
},
persistent: true,
}).onOk(async () => {
rejectpopUp();
});
}
};
const confirmpopUp = async () => {
await http
.get(config.API.resignConfirm(id.value))
.then(() => {
console.log("ยืนยัน");
success($q, "บันทึกสำเร็จ");
})
.catch((e) => {
console.log(e);
messageError($q, e);
})
.finally(() => {
fetchData(id.value);
});
};
const rejectpopUp = async () => {
console.log("ยกเลิก");
await http
.get(config.API.resignReject(id.value))
.then(() => {
success($q, "บันทึกสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
fetchData(id.value);
});
};
const redirectToRegistry = (id: string) => {
router.push(`/registry/${id}`);
};
const statusName = (val: string) => {
switch (val) {
case "PENDING":
return "รอดำเนินการ";
case "APPROVE":
return "อนุมัติ";
case "REJECT":
return "ยับยั้ง";
}
};
// const clickClose = () => {
// userNote.value = "";
// modalPass.value = false;
// modalPassNot.value = false;
// };
// const savePass = () => {
// $q.dialog({
// title: "ยืนยันการขอลาออก",
// message: "ต้องการยืนยันการขอลาออกข้อมูลนี้ใช่หรือไม่ ?",
// cancel: {
// flat: true,
// const: "negative",
// },
// persistent: true,
// })
// .onOk(() => {
// modalPass.value = false;
// console.log("----MSG---- :", userNote.value);
// console.log("passSave (close)");
// userNote.value = "";
// })
// .onCancel(() => {})
// .onDismiss(() => {});
// };
// const savePassNot = () => {
// $q.dialog({
// title: "ยืนยันการขอลาออก",
// message: "ต้องการยืนยันการขอลาออกข้อมูลนี้ใช่หรือไม่ ?",
// cancel: {
// flat: true,
// const: "negative",
// },
// persistent: true,
// })
// .onOk(() => {
// modalPass.value = false;
// console.log("----MSG---- :", userNote.value);
// console.log("passSaveNot (close)");
// userNote.value = "";
// })
// .onCancel(() => {})
// .onDismiss(() => {});
// };
</script>
<style lang="scss" scope>
.q-img {
border-radius: 5px;
height: 70px;
}
.text-top {
color: gray;
font-weight: 400;
padding-bottom: 3px;
}
.text-detail {
font-weight: 500;
}
.custom-header-table {
max-height: 64vh;
.q-table tr:nth-child(odd) td {
background: white;
}
.q-table tr:nth-child(even) td {
background: #f8f8f8;
}
.q-table thead tr {
background: #ecebeb;
}
.q-table thead tr th {
position: sticky;
z-index: 1;
}
/* this will be the loading indicator */
.q-table thead tr:last-child th {
/* height of all previous header rows */
top: 48px;
}
.q-table thead tr:first-child th {
top: 0;
}
}
</style>