API การลา ข้าราชการ, ลูกจ้าง
This commit is contained in:
parent
6bde04376f
commit
32dcdc9336
28 changed files with 525 additions and 868 deletions
|
|
@ -8,7 +8,6 @@ import http from "@/plugins/http";
|
|||
import config from "@/app.config";
|
||||
import genReport from "@/plugins/genreport";
|
||||
import { useCounterMixin } from "@/stores/mixin";
|
||||
import { checkPermission } from "@/utils/permissions";
|
||||
import { useRetirementDataStore } from "@/modules/06_retirement/store/Main";
|
||||
import { useRoleWorkflowDataStore } from "@/stores/roleWorkflow";
|
||||
|
||||
|
|
@ -28,7 +27,6 @@ import type {
|
|||
import DialogHeader from "@/components/DialogHeader.vue";
|
||||
import PopupPersonal from "@/components/Dialogs/PopupPersonal.vue";
|
||||
import CardProfile from "@/components/CardProfile.vue";
|
||||
import WorkFlow from "@/components/Workflow/Main.vue";
|
||||
import DialogAddCommander from "@/modules/06_retirement/components/DialogAddCommander.vue";
|
||||
|
||||
/** Use */
|
||||
|
|
@ -56,14 +54,8 @@ const modalPersonal = ref<boolean>(false);
|
|||
const personId = ref<string>("");
|
||||
const roleUser = ref<string>("");
|
||||
const dataProfile = ref<DataProfile>();
|
||||
const approveStep = ref<string>("");
|
||||
|
||||
const approveCheck = computed(() => {
|
||||
return (
|
||||
rowsApprover.value?.commanders?.every(
|
||||
(commander) => commander.approveStatus === "APPROVE"
|
||||
) ?? false
|
||||
);
|
||||
});
|
||||
const idCheck = computed(() => {
|
||||
if (
|
||||
typeAdd.value == "COMMANDER" &&
|
||||
|
|
@ -84,29 +76,6 @@ const idCheck = computed(() => {
|
|||
}
|
||||
});
|
||||
|
||||
const approvePendingCheck = computed(() => {
|
||||
const commanders = rowsApprover.value?.commanders || [];
|
||||
const index = commanders.findIndex((c) => c.profileId === keycloakId.value);
|
||||
|
||||
if (index === -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const currentCommander = commanders[index];
|
||||
|
||||
if (currentCommander.approveStatus !== "PENDING") {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (index === 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const previousApproved = commanders
|
||||
.slice(0, index)
|
||||
.every((c) => c.approveStatus === "APPROVE");
|
||||
return previousApproved;
|
||||
});
|
||||
const isOfficer = ref<boolean>(false);
|
||||
const isStaff = ref<boolean>(false);
|
||||
const profileType = ref<string>("");
|
||||
|
|
@ -171,6 +140,9 @@ const columnsCommanders = ref<QTableProps["columns"]>([
|
|||
align: "left",
|
||||
label: "วันสุดท้ายที่ยับยั้ง",
|
||||
field: "rejectDate",
|
||||
format(val, row) {
|
||||
return date2Thai(val);
|
||||
},
|
||||
sortable: true,
|
||||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
|
|
@ -208,7 +180,6 @@ const dataDetail = ref<any>({
|
|||
reasonResign: "",
|
||||
});
|
||||
|
||||
const workflowRef = ref<any>(null);
|
||||
const organizationPositionOld = ref<string>("");
|
||||
const positionTypeOld = ref<string>("");
|
||||
const positionLevelOld = ref<string>("");
|
||||
|
|
@ -225,20 +196,6 @@ const actionPass = ref<boolean>(false);
|
|||
const reasonReign = ref<string>("");
|
||||
const dateBreak = ref<Date | null>(null);
|
||||
|
||||
const isCheckData = computed(() => {
|
||||
if (
|
||||
organizationPositionOld.value !== "" &&
|
||||
positionTypeOld.value !== "" &&
|
||||
positionLevelOld.value !== "" &&
|
||||
posNo.value !== "" &&
|
||||
date.value !== null &&
|
||||
dataDetail.value.commanderReject !== null &&
|
||||
dataDetail.value.oligarchReject !== null
|
||||
) {
|
||||
return true;
|
||||
} else return false;
|
||||
});
|
||||
|
||||
/** คอลัมน์ */
|
||||
const rows = ref<TypeFile[]>([]);
|
||||
const columns = ref<QTableProps["columns"]>([
|
||||
|
|
@ -271,13 +228,10 @@ const columns = ref<QTableProps["columns"]>([
|
|||
},
|
||||
]);
|
||||
|
||||
/**เปิด-ปิด modal */
|
||||
/**ฟังก์ชันปิด popup อนุญาตการลาออก,ยับยั้งการลาออก*/
|
||||
function closeModal() {
|
||||
modal.value = false;
|
||||
}
|
||||
function openModal() {
|
||||
modal.value = true;
|
||||
}
|
||||
|
||||
const file = ref<any>(null);
|
||||
const fileList = ref<FileList[]>([]);
|
||||
|
|
@ -293,6 +247,7 @@ const rowsFileDownload = ref<rowFile[]>([
|
|||
},
|
||||
]);
|
||||
|
||||
/** ฟังก์ชันคำนวนวันที่ขอลาออกจากราชการ*/
|
||||
function diffDate() {
|
||||
if (date.value !== null && dateLeave.value !== null) {
|
||||
const time = dateLeave.value.getTime() - date.value.getTime();
|
||||
|
|
@ -306,9 +261,11 @@ function diffDate() {
|
|||
return false;
|
||||
}
|
||||
|
||||
/** นำข้อมูลมาจาก API*/
|
||||
/**
|
||||
* ฟังก์ชันดึงข้อมูลรายละเอียดการลาออก
|
||||
* @param id รายการลาออก
|
||||
*/
|
||||
async function fetchData(id: string) {
|
||||
showLoader();
|
||||
await http
|
||||
.get(config.API.resingByidEMP(id))
|
||||
.then(async (res) => {
|
||||
|
|
@ -341,7 +298,7 @@ async function fetchData(id: string) {
|
|||
isNoDebt.value = data.isNoDebt;
|
||||
isNoBurden.value = data.isNoBurden;
|
||||
isDiscipline.value = data.isDiscipline;
|
||||
|
||||
approveStep.value = data.approveStep;
|
||||
statusCheck.value = data.status;
|
||||
profileType.value = data.profileType;
|
||||
keycloakUserId.value = data.keycloakUserId;
|
||||
|
|
@ -352,32 +309,40 @@ async function fetchData(id: string) {
|
|||
})
|
||||
.catch((e) => {
|
||||
messageError($q, e);
|
||||
})
|
||||
.finally(() => {
|
||||
hideLoader();
|
||||
});
|
||||
}
|
||||
|
||||
/**Pop up */
|
||||
/**
|
||||
* ฟังก์ชันเปิด popup อนุญาต,ยับยั้ง
|
||||
* @param action อนุญาต, ยับยั้ง
|
||||
* @param type ผู้บังคับบัญชา, ผู้มีอำนาจ
|
||||
*/
|
||||
function popUp(action: "pass" | "passNot", type: string) {
|
||||
reasonReign.value = "";
|
||||
dateBreak.value = null;
|
||||
actionPass.value = action === "pass";
|
||||
roleUser.value = type;
|
||||
openModal();
|
||||
modal.value = true;
|
||||
}
|
||||
|
||||
//เงื่อนไขpop up
|
||||
/** ฟังก์ชันบันทึกผลการพิจารณา*/
|
||||
function onSubmit() {
|
||||
if (actionPass.value) {
|
||||
confirmpopUp();
|
||||
} else {
|
||||
rejectpopUp();
|
||||
if (roleUser.value === "commander" && actionPass.value) {
|
||||
confirmpopUp("/comander");
|
||||
} else if (roleUser.value === "commander" && !actionPass.value) {
|
||||
rejectpopUp("/comander");
|
||||
} else if (roleUser.value === "oligarch" && actionPass.value) {
|
||||
confirmpopUp("");
|
||||
} else if (roleUser.value === "oligarch" && !actionPass.value) {
|
||||
rejectpopUp("");
|
||||
}
|
||||
}
|
||||
|
||||
//pop up ยืนยันการอนุญาต
|
||||
async function confirmpopUp() {
|
||||
/**
|
||||
* ฟังก์ชันยืนยันการอนุญาตผลการพิจารณา
|
||||
* @param path ประเภทของผู้พิจารณา comander === 'บังคับบัญชา', '' === 'ผู้มีอำนาจ'
|
||||
*/
|
||||
async function confirmpopUp(path: string) {
|
||||
dialogConfirm(
|
||||
$q,
|
||||
async () => {
|
||||
|
|
@ -390,7 +355,8 @@ async function confirmpopUp() {
|
|||
config.API.commanderApproveRetirement(
|
||||
"-employee",
|
||||
id.value,
|
||||
"approve"
|
||||
"approve",
|
||||
path
|
||||
),
|
||||
body
|
||||
)
|
||||
|
|
@ -411,8 +377,11 @@ async function confirmpopUp() {
|
|||
);
|
||||
}
|
||||
|
||||
//pop up การยับยั้งสำเร็จ
|
||||
async function rejectpopUp() {
|
||||
/**
|
||||
ฟังก์ชันยืนยันการยับยั้งผลการพิจารณา
|
||||
* @param path ประเภทของผู้พิจารณา comander === 'บังคับบัญชา', '' === 'ผู้มีอำนาจ'
|
||||
*/
|
||||
async function rejectpopUp(path: string) {
|
||||
dialogConfirm(
|
||||
$q,
|
||||
async () => {
|
||||
|
|
@ -426,7 +395,8 @@ async function rejectpopUp() {
|
|||
config.API.commanderApproveRetirement(
|
||||
"-employee",
|
||||
id.value,
|
||||
"reject"
|
||||
"reject",
|
||||
path
|
||||
),
|
||||
body
|
||||
)
|
||||
|
|
@ -447,9 +417,7 @@ async function rejectpopUp() {
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* กดยกเลิก
|
||||
*/
|
||||
/** ฟังก์ชันยกเลิกการแก้ไขข้อมูลเพื่อลงบัญชีแนบท้าย*/
|
||||
async function clickCancel() {
|
||||
edit.value = false;
|
||||
const data = dataDetail.value;
|
||||
|
|
@ -470,17 +438,20 @@ async function clickCancel() {
|
|||
isDiscipline.value = data.isDiscipline;
|
||||
}
|
||||
myForm.value?.resetValidation();
|
||||
// await fetchData(id.value);
|
||||
}
|
||||
/**
|
||||
* กดยกเลิก
|
||||
*/
|
||||
async function clickCancelConditions() {
|
||||
await fetchData(id.value);
|
||||
conditions.value = false;
|
||||
}
|
||||
|
||||
/** Function บันทึก รายการตรวจสอบเงื่อนไขต่างๆ*/
|
||||
/** ฟังก์ขันยกเลิกการแก้ไขเงื่อนไขต่างๆ*/
|
||||
async function clickCancelConditions() {
|
||||
const data = dataDetail.value;
|
||||
if (data) {
|
||||
isNoDebt.value = data.isNoDebt;
|
||||
isNoBurden.value = data.isNoBurden;
|
||||
isDiscipline.value = data.isDiscipline;
|
||||
conditions.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
/** ฟังก์ชันบันทึกรายการตรวจสอบเงื่อนไขต่างๆ*/
|
||||
function onSubmitConditions() {
|
||||
dialogConfirm($q, async () => {
|
||||
showLoader();
|
||||
|
|
@ -504,7 +475,7 @@ function onSubmitConditions() {
|
|||
});
|
||||
}
|
||||
|
||||
/** Function บันทึก ,แก้ไขข้อมูลเพื่อลงบัญชีแนบท้าย*/
|
||||
/** ฟังก์ชันบันทึกข้อมูลเพื่อลงบัญชีแนบท้าย*/
|
||||
function onSubmitAttached() {
|
||||
dialogConfirm($q, () => {
|
||||
const formData = new FormData();
|
||||
|
|
@ -538,7 +509,7 @@ function onSubmitAttached() {
|
|||
}
|
||||
|
||||
/**
|
||||
* Function เพิ่ม Class เวลา Edit
|
||||
* ฟังก์ชัน Class เวลา Edit
|
||||
* @param val เมื่อเป็นEdit จะเปลี่ยน Class
|
||||
*/
|
||||
function getClass(val: boolean) {
|
||||
|
|
@ -548,17 +519,11 @@ function getClass(val: boolean) {
|
|||
};
|
||||
}
|
||||
|
||||
/** แปลง StatusOrder */
|
||||
function statusOrder(val: boolean) {
|
||||
switch (val) {
|
||||
case true:
|
||||
return "ยับยั้ง";
|
||||
case false:
|
||||
return "อนุญาต";
|
||||
}
|
||||
}
|
||||
|
||||
// ดาว์นโหลดไฟล์
|
||||
/**
|
||||
* ฟังก์ชันดาว์นโหลดไฟล์
|
||||
* @param type นามสกุลไฟล์
|
||||
* @param fileName ชื่อไฟล์ที่ต้องการโหลด
|
||||
*/
|
||||
async function fileDownload(type: string, fileName: string) {
|
||||
showLoader();
|
||||
await http
|
||||
|
|
@ -575,12 +540,16 @@ async function fileDownload(type: string, fileName: string) {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* ฟังก์ชันอัปเดท modal ของ popup ทะเบียนประวัติ
|
||||
* @param modal modal
|
||||
*/
|
||||
function updatemodalPersonal(modal: boolean) {
|
||||
modalPersonal.value = modal;
|
||||
}
|
||||
|
||||
/** ฟังก์ชันดึงข้อมูลไฟล์*/
|
||||
async function fetchFile() {
|
||||
showLoader();
|
||||
await http
|
||||
.get(config.API.file("พ้นจากราชการ", "หลักฐานลาออก", id.value))
|
||||
.then(async (res) => {
|
||||
|
|
@ -588,10 +557,10 @@ async function fetchFile() {
|
|||
})
|
||||
.catch((e) => {
|
||||
messageError($q, e);
|
||||
hideLoader();
|
||||
});
|
||||
}
|
||||
|
||||
/** ฟังก์ชันสร้าง Path ที่เก็บไฟล์*/
|
||||
function uploadFiles() {
|
||||
showLoader();
|
||||
http
|
||||
|
|
@ -619,6 +588,10 @@ function uploadFiles() {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* ฟังก์ชันอัปโหลดไฟล์
|
||||
* @param uploadUrl ที่อยู่ที่เก็บไฟล์
|
||||
*/
|
||||
async function uploadFileURL(uploadUrl: string) {
|
||||
const Data = new FormData();
|
||||
Data.append("file", file.value);
|
||||
|
|
@ -642,6 +615,10 @@ async function uploadFileURL(uploadUrl: string) {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* ฟังก์ชันโหลดไฟล์
|
||||
* @param fileName ชื่อไฟล์ที่ต้องการโหลด
|
||||
*/
|
||||
async function downloadFiles(fileName: string) {
|
||||
showLoader();
|
||||
await http
|
||||
|
|
@ -661,13 +638,13 @@ async function downloadFiles(fileName: string) {
|
|||
}
|
||||
|
||||
/**
|
||||
* ลบไฟล์
|
||||
* @param id id file
|
||||
* ฟังก์ชันลบไฟล์
|
||||
* @param fileName ชื่อไฟล์ที่ต้องการลบ
|
||||
*/
|
||||
function removeFile(fileName: string) {
|
||||
dialogRemove($q, () => {
|
||||
dialogRemove($q, async () => {
|
||||
showLoader();
|
||||
http
|
||||
await http
|
||||
.delete(
|
||||
config.API.fileByFile(
|
||||
"พ้นจากราชการ",
|
||||
|
|
@ -676,20 +653,25 @@ function removeFile(fileName: string) {
|
|||
fileName
|
||||
)
|
||||
)
|
||||
.then(() => {
|
||||
.then(async () => {
|
||||
setTimeout(async () => {
|
||||
await fetchFile();
|
||||
success($q, `ลบไฟล์สำเร็จ`);
|
||||
hideLoader();
|
||||
}, 1000);
|
||||
})
|
||||
.catch((e) => {
|
||||
messageError($q, e);
|
||||
})
|
||||
.finally(() => {
|
||||
hideLoader();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* ฟังก์ชันแปลงเหตุผลที่ลาออก
|
||||
* @param val เหตุผลที่ลาออก
|
||||
*/
|
||||
function convertStatus(val: string) {
|
||||
if (/^[A-Za-z]+$/.test(val)) {
|
||||
switch (val) {
|
||||
|
|
@ -707,12 +689,16 @@ function convertStatus(val: string) {
|
|||
} else return val;
|
||||
}
|
||||
|
||||
/** เปิด POP UP */
|
||||
/**
|
||||
* ฟังกฺชันเปิด pop up เพิ่มรายชื่อพิจารณา
|
||||
* @param type COMMANDER === ผู้บังคับบัญชา, APPROVER === ผู้มีอำนาจ
|
||||
*/
|
||||
function onAddPerson(type: string) {
|
||||
modalAdd.value = true;
|
||||
typeAdd.value = type;
|
||||
}
|
||||
|
||||
/** ฟังก์ชันดึงข้อมูลสิทธ์ของผู้ใช่*/
|
||||
async function checkOfficer() {
|
||||
try {
|
||||
const data = await fetchDataCheckIsoffice("SYS_RESIGN_EMP");
|
||||
|
|
@ -723,6 +709,7 @@ async function checkOfficer() {
|
|||
}
|
||||
}
|
||||
|
||||
/** ฟังก์ชันยืนยันการส่งไปพิจารณา*/
|
||||
function onSend() {
|
||||
dialogConfirm(
|
||||
$q,
|
||||
|
|
@ -730,20 +717,23 @@ function onSend() {
|
|||
showLoader();
|
||||
http
|
||||
.get(config.API.sendApproveRetirement("-employee", id.value))
|
||||
.then(async (res) => {
|
||||
.then(async () => {
|
||||
await fetchData(id.value);
|
||||
success($q, "ส่งไปพิจารณา");
|
||||
})
|
||||
.catch((e) => {
|
||||
messageError($q, e);
|
||||
})
|
||||
.finally(() => {});
|
||||
.finally(() => {
|
||||
hideLoader();
|
||||
});
|
||||
},
|
||||
"ยืนยันการส่งไปพิจารณา",
|
||||
"ต้องการส่งไปพิจารณาใช่หรือไม่"
|
||||
);
|
||||
}
|
||||
|
||||
/** ฟังก์ชันดึงข้อมูลตำแหน่งจาก Keycloak*/
|
||||
async function fetchKeycloakPosition() {
|
||||
if (keycloakId.value == "") {
|
||||
await http
|
||||
|
|
@ -762,10 +752,10 @@ async function fetchKeycloakPosition() {
|
|||
onMounted(async () => {
|
||||
showLoader();
|
||||
await Promise.all([
|
||||
await fetchData(id.value),
|
||||
await fetchKeycloakPosition(),
|
||||
fetchData(id.value),
|
||||
fetchKeycloakPosition(),
|
||||
fetchFile(),
|
||||
await checkOfficer(),
|
||||
checkOfficer(),
|
||||
]).finally(() => {
|
||||
hideLoader();
|
||||
});
|
||||
|
|
@ -797,39 +787,6 @@ onMounted(async () => {
|
|||
<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="
|
||||
(roleUser === 'officer' && dataDetail.officerReject === null) ||
|
||||
(roleUser === 'commander' &&
|
||||
dataDetail.commanderReject === null &&
|
||||
dataDetail.officerReject !== null) ||
|
||||
(roleUser === 'oligarch' &&
|
||||
dataDetail.oligarchReject === null &&
|
||||
dataDetail.commanderReject !== null &&
|
||||
dataDetail.officerReject !== null)
|
||||
"
|
||||
>
|
||||
<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">
|
||||
|
|
@ -1011,11 +968,7 @@ onMounted(async () => {
|
|||
<q-space />
|
||||
|
||||
<div
|
||||
v-if="
|
||||
!checkRoutePermisson &&
|
||||
isStaff &&
|
||||
dataDetail.statusMain === 'WAITTING'
|
||||
"
|
||||
v-if="!checkRoutePermisson && isStaff && approveStep === 'st1'"
|
||||
>
|
||||
<div v-if="!conditions">
|
||||
<q-btn
|
||||
|
|
@ -1177,51 +1130,6 @@ onMounted(async () => {
|
|||
</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>
|
||||
</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 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">
|
||||
{{
|
||||
dataDetail.officerReject
|
||||
? dataDetail.officerRejectReason
|
||||
: dataDetail.officerApproveReason
|
||||
}}
|
||||
</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">
|
||||
|
|
@ -1229,7 +1137,7 @@ onMounted(async () => {
|
|||
ผลการพิจารณาของผู้บังคับบัญชา
|
||||
</div>
|
||||
<q-btn
|
||||
v-if="statusCheck == 'WAITTING' && (isOfficer || isStaff)"
|
||||
v-if="!checkRoutePermisson && isStaff && approveStep === 'st1'"
|
||||
flat
|
||||
round
|
||||
icon="add"
|
||||
|
|
@ -1242,33 +1150,6 @@ onMounted(async () => {
|
|||
</q-btn>
|
||||
|
||||
<q-space />
|
||||
<!-- <div
|
||||
class="q-gutter-x-sm"
|
||||
v-if="
|
||||
isDirector &&
|
||||
dataDetail.commanderReject === null &&
|
||||
dataDetail.statusMain === 'WAITTING'
|
||||
"
|
||||
>
|
||||
<q-btn
|
||||
outline
|
||||
color="primary"
|
||||
dense
|
||||
icon-right="check"
|
||||
class="q-px-sm"
|
||||
label="อนุญาต"
|
||||
@click="popUp('pass', 'commander')"
|
||||
/>
|
||||
<q-btn
|
||||
outline
|
||||
color="red"
|
||||
dense
|
||||
icon-right="close"
|
||||
class="q-px-sm"
|
||||
label="ยับยั้ง"
|
||||
@click="popUp('passNot', 'commander')"
|
||||
/>
|
||||
</div> -->
|
||||
</div>
|
||||
|
||||
<div class="col-12"><q-separator /></div>
|
||||
|
|
@ -1299,25 +1180,19 @@ onMounted(async () => {
|
|||
</div>
|
||||
<div v-else-if="col.name == 'comment'">
|
||||
<div
|
||||
class="q-gutter-x-xs"
|
||||
v-if="
|
||||
props.row.approveStatus == 'PENDING' &&
|
||||
props.row.comment == ''
|
||||
props.row.comment == '' &&
|
||||
approveStep === 'st2'
|
||||
"
|
||||
>
|
||||
<q-btn
|
||||
:disable="
|
||||
statusCheck == 'NEW' ||
|
||||
!approvePendingCheck ||
|
||||
(props.row.profileId !== keycloakId &&
|
||||
checkPermission($route)?.attrIsUpdate)
|
||||
"
|
||||
:outline="
|
||||
props.row.profileId !== keycloakId ||
|
||||
statusCheck == 'NEW' ||
|
||||
!approvePendingCheck
|
||||
? false
|
||||
: true
|
||||
v-if="
|
||||
props.row.profileId === keycloakId &&
|
||||
approveStep === 'st2'
|
||||
"
|
||||
outline
|
||||
dense
|
||||
color="primary"
|
||||
icon-right="check"
|
||||
|
|
@ -1325,20 +1200,13 @@ onMounted(async () => {
|
|||
label="อนุญาต"
|
||||
@click="popUp('pass', 'commander')"
|
||||
/>
|
||||
|
||||
<q-btn
|
||||
:disable="
|
||||
statusCheck == 'NEW' ||
|
||||
!approvePendingCheck ||
|
||||
(props.row.profileId !== keycloakId &&
|
||||
checkPermission($route)?.attrIsUpdate)
|
||||
"
|
||||
:outline="
|
||||
props.row.profileId !== keycloakId ||
|
||||
statusCheck == 'NEW' ||
|
||||
!approvePendingCheck
|
||||
? false
|
||||
: true
|
||||
v-if="
|
||||
props.row.profileId === keycloakId &&
|
||||
approveStep === 'st2'
|
||||
"
|
||||
outline
|
||||
color="red"
|
||||
dense
|
||||
icon-right="close"
|
||||
|
|
@ -1347,6 +1215,7 @@ onMounted(async () => {
|
|||
@click="popUp('passNot', 'commander')"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div v-else>
|
||||
{{ props.row.comment ? props.row.comment : "-" }}
|
||||
</div>
|
||||
|
|
@ -1375,7 +1244,7 @@ onMounted(async () => {
|
|||
ผลการพิจารณาของผู้มีอำนาจ
|
||||
</div>
|
||||
<q-btn
|
||||
v-if="statusCheck == 'WAITTING' && (isOfficer || isStaff)"
|
||||
v-if="!checkRoutePermisson && isStaff && approveStep === 'st1'"
|
||||
flat
|
||||
round
|
||||
icon="add"
|
||||
|
|
@ -1387,17 +1256,16 @@ onMounted(async () => {
|
|||
<q-tooltip>เพิ่มรายชื่อผู้มีอำนาจ</q-tooltip>
|
||||
</q-btn>
|
||||
<q-space />
|
||||
|
||||
<div
|
||||
class="q-gutter-x-sm"
|
||||
v-if="
|
||||
checkPermission($route)?.attrIsUpdate &&
|
||||
dataDetail.oligarchReject === null &&
|
||||
dataDetail.statusMain === 'WAITTING' &&
|
||||
!checkRoutePermisson &&
|
||||
rowsApprover &&
|
||||
rowsApprover.approvers &&
|
||||
rowsApprover.approvers[0]?.profileId == keycloakId &&
|
||||
rowsApprover.approvers[0]?.approveStatus == 'PENDING' &&
|
||||
approveCheck
|
||||
approveStep === 'st3'
|
||||
"
|
||||
>
|
||||
<q-btn
|
||||
|
|
@ -1451,8 +1319,10 @@ onMounted(async () => {
|
|||
<div class="col-12 text-top">วันสุดท้ายที่ยับยั้ง</div>
|
||||
<div class="col-12 text-detail">
|
||||
{{
|
||||
dataDetail.oligarchRejectDate !== null
|
||||
? date2Thai(dataDetail.oligarchRejectDate)
|
||||
rowsApprover &&
|
||||
rowsApprover.approvers &&
|
||||
rowsApprover.approvers[0]?.rejectDate
|
||||
? date2Thai(rowsApprover?.approvers[0].rejectDate)
|
||||
: "-"
|
||||
}}
|
||||
</div>
|
||||
|
|
@ -1461,19 +1331,23 @@ onMounted(async () => {
|
|||
<div class="col-12 text-top">ความคิดเห็นและเหตุผล</div>
|
||||
<div class="col-12 text-detail">
|
||||
{{
|
||||
dataDetail.oligarchReject
|
||||
? dataDetail.oligarchRejectReason
|
||||
: dataDetail.oligarchApproveReason
|
||||
rowsApprover &&
|
||||
rowsApprover.approvers &&
|
||||
rowsApprover.approvers[0]?.comment
|
||||
? rowsApprover?.approvers[0].comment
|
||||
: "-"
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</q-card>
|
||||
|
||||
<!-- ส่งไปพิจารณา -->
|
||||
<q-card
|
||||
bordered
|
||||
class="row col-12 text-dark q-mt-sm q-pa-sm"
|
||||
v-if="statusCheck == 'WAITTING' && (isOfficer || isStaff)"
|
||||
v-if="!checkRoutePermisson && isStaff && approveStep === 'st1'"
|
||||
>
|
||||
<q-btn
|
||||
@click="onSend"
|
||||
|
|
@ -1487,6 +1361,7 @@ onMounted(async () => {
|
|||
><q-tooltip>คลิกเพื่อส่งไปพิจารณา</q-tooltip></q-btn
|
||||
>
|
||||
</q-card>
|
||||
|
||||
<!-- แก้ไขข้อมูลเพื่อลงบัญชีแนบท้าย -->
|
||||
<q-card bordered class="row col-12 text-dark q-mt-sm">
|
||||
<q-form
|
||||
|
|
@ -1505,8 +1380,9 @@ onMounted(async () => {
|
|||
<div
|
||||
v-if="
|
||||
!checkRoutePermisson &&
|
||||
isStaff &&
|
||||
dataDetail.statusMain === 'WAITTING'
|
||||
(dataDetail.statusMain === 'APPROVE' ||
|
||||
dataDetail.statusMain === 'REJECT') &&
|
||||
isStaff
|
||||
"
|
||||
>
|
||||
<div class="q-gutter-sm" v-if="!edit">
|
||||
|
|
@ -1612,24 +1488,7 @@ onMounted(async () => {
|
|||
/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="col-xs-6 col-sm-3 row">
|
||||
<div class="col-12">
|
||||
<q-input
|
||||
v-model="salary"
|
||||
:outlined="edit"
|
||||
dense
|
||||
:readonly="!edit"
|
||||
:borderless="!edit"
|
||||
hide-bottom-space
|
||||
:label="`${'เงินเดือน'}`"
|
||||
:rules="[(val:number) => !!val || `${'กรุณากรอกเงินเดือน'}`]"
|
||||
lazy-rules
|
||||
:class="getClass(edit)"
|
||||
mask="###,###,###,###"
|
||||
reverse-fill-mask
|
||||
/>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<div class="col-12"><q-separator /></div>
|
||||
<div class="col-xs-4 row">
|
||||
<div class="col-12">
|
||||
|
|
@ -1731,15 +1590,9 @@ onMounted(async () => {
|
|||
</div>
|
||||
</q-form>
|
||||
</q-card>
|
||||
|
||||
<!-- <WorkFlow
|
||||
ref="workflowRef"
|
||||
v-model:is-check-data="isCheckData"
|
||||
:id="id"
|
||||
sys-name="SYS_RESIGN"
|
||||
/> -->
|
||||
</div>
|
||||
|
||||
<!-- popup อนุญาตการลาออก,ยับยั้งการลาออก -->
|
||||
<q-dialog v-model="modal" persistent>
|
||||
<q-card style="width: 800px">
|
||||
<q-form greedy @submit.prevent @validation-success="onSubmit">
|
||||
|
|
@ -1825,7 +1678,7 @@ onMounted(async () => {
|
|||
<DialogAddCommander
|
||||
v-model:modal="modalAdd"
|
||||
:type="typeAdd"
|
||||
:profileType="'officer'"
|
||||
:profileType="'-employee'"
|
||||
:get-data="fetchData"
|
||||
:id-check="idCheck"
|
||||
:keycloak-user-id="keycloakUserId"
|
||||
|
|
|
|||
|
|
@ -20,9 +20,7 @@ import type {
|
|||
} from "@/modules/06_retirement/interface/response/Main";
|
||||
|
||||
import DialogAddCommander from "@/modules/06_retirement/components/DialogAddCommander.vue";
|
||||
import PopupPersonal from "@/components/Dialogs/PopupPersonal.vue";
|
||||
import CardProfile from "@/components/CardProfile.vue";
|
||||
import WorkFlow from "@/components/Workflow/Main.vue";
|
||||
|
||||
/** Use */
|
||||
const $q = useQuasar();
|
||||
|
|
@ -39,22 +37,14 @@ const {
|
|||
showLoader,
|
||||
hideLoader,
|
||||
success,
|
||||
|
||||
dialogConfirm,
|
||||
dialogRemove,
|
||||
} = mixin;
|
||||
|
||||
/** ตัวแปร */
|
||||
const roleUser = ref<string>("");
|
||||
const dataProfile = ref<DataProfile>();
|
||||
const approveStep = ref<string>("");
|
||||
|
||||
const approveCheck = computed(() => {
|
||||
return (
|
||||
rowsApprover.value?.commanders?.every(
|
||||
(commander) => commander.approveStatus === "APPROVE"
|
||||
) ?? false
|
||||
);
|
||||
});
|
||||
const idCheck = computed(() => {
|
||||
if (
|
||||
typeAdd.value == "COMMANDER" &&
|
||||
|
|
@ -75,29 +65,6 @@ const idCheck = computed(() => {
|
|||
}
|
||||
});
|
||||
|
||||
const approvePendingCheck = computed(() => {
|
||||
const commanders = rowsApprover.value?.commanders || [];
|
||||
const index = commanders.findIndex((c) => c.profileId === keycloakId.value);
|
||||
|
||||
if (index === -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const currentCommander = commanders[index];
|
||||
|
||||
if (currentCommander.approveStatus !== "PENDING") {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (index === 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const previousApproved = commanders
|
||||
.slice(0, index)
|
||||
.every((c) => c.approveStatus === "APPROVE");
|
||||
return previousApproved;
|
||||
});
|
||||
const isOfficer = ref<boolean>(false);
|
||||
const profileType = ref<string>("");
|
||||
const keycloakUserId = ref<string>("");
|
||||
|
|
@ -155,15 +122,6 @@ const columnsCommanders = ref<QTableProps["columns"]>([
|
|||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
},
|
||||
{
|
||||
name: "rejectDate",
|
||||
align: "left",
|
||||
label: "วันสุดท้ายที่ยับยั้ง",
|
||||
field: "rejectDate",
|
||||
sortable: true,
|
||||
headerStyle: "font-size: 14px",
|
||||
style: "font-size: 14px",
|
||||
},
|
||||
]);
|
||||
|
||||
const id = ref<string>(route.params.id.toString());
|
||||
|
|
@ -193,7 +151,6 @@ const dataDetail = ref<any>({
|
|||
statusMain: "",
|
||||
});
|
||||
|
||||
const workflowRef = ref<any>(null);
|
||||
const organizationPositionOld = ref<string>("");
|
||||
const positionTypeOld = ref<string>("");
|
||||
const positionLevelOld = ref<string>("");
|
||||
|
|
@ -210,32 +167,16 @@ const actionPass = ref<boolean>(false);
|
|||
const reasonReign = ref<string>("");
|
||||
const dateBreak = ref<Date | null>(null);
|
||||
|
||||
const isCheckData = computed(() => {
|
||||
if (
|
||||
organizationPositionOld.value !== "" &&
|
||||
positionTypeOld.value !== "" &&
|
||||
positionLevelOld.value !== "" &&
|
||||
posNo.value !== "" &&
|
||||
date.value !== null &&
|
||||
dataDetail.value.commanderReject !== null &&
|
||||
dataDetail.value.oligarchReject !== null
|
||||
) {
|
||||
return true;
|
||||
} else return false;
|
||||
});
|
||||
|
||||
/**เปิด-ปิด modal */
|
||||
function closeModal() {
|
||||
modal.value = false;
|
||||
}
|
||||
function openModal() {
|
||||
modal.value = true;
|
||||
}
|
||||
|
||||
const isNoDebt = ref<boolean>(false);
|
||||
const isNoBurden = ref<boolean>(false);
|
||||
const isDiscipline = ref<boolean>(false);
|
||||
|
||||
/** ฟังก์ชันคำนวนวันที่ขอลาออกจากราชการ*/
|
||||
function diffDate() {
|
||||
if (date.value !== null && dateLeave.value !== null) {
|
||||
const time = dateLeave.value.getTime() - date.value.getTime();
|
||||
|
|
@ -249,9 +190,11 @@ function diffDate() {
|
|||
return false;
|
||||
}
|
||||
|
||||
/** นำข้อมูลมาจาก API*/
|
||||
/**
|
||||
* ฟังก์ชันดึงข้อมูลรายละเอียดการยกเลิกลาออก
|
||||
* @param id รายการยกเลิกลาออก
|
||||
*/
|
||||
async function fetchData(id: string) {
|
||||
showLoader();
|
||||
await http
|
||||
.get(config.API.listResignEMP() + `/cancel/${id}`)
|
||||
.then(async (res) => {
|
||||
|
|
@ -268,43 +211,55 @@ async function fetchData(id: string) {
|
|||
dateLeave.value = data.activeDate ? new Date(data.activeDate) : null;
|
||||
reason.value = data.reason ?? "";
|
||||
location.value = data.location ?? "";
|
||||
approveStep.value = data.approveStep ?? "";
|
||||
status.value = data.status ?? "";
|
||||
remarkHorizontal.value = data.remarkHorizontal ?? "-";
|
||||
isNoDebt.value = data.isNoDebt;
|
||||
statusCheck.value = data.status;
|
||||
isNoBurden.value = data.isNoBurden;
|
||||
isDiscipline.value = data.isDiscipline;
|
||||
profileType.value = data.profileType;
|
||||
keycloakUserId.value = data.keycloakUserId;
|
||||
|
||||
rowsApprover.value = {
|
||||
commanders: data.commanders,
|
||||
approvers: data.approvers,
|
||||
};
|
||||
})
|
||||
.catch((e) => {
|
||||
messageError($q, e);
|
||||
})
|
||||
.finally(() => {
|
||||
hideLoader();
|
||||
});
|
||||
}
|
||||
|
||||
/**Pop up */
|
||||
/**
|
||||
* ฟังก์ชันเปิด popup อนุญาต,ไม่อนุญาต
|
||||
* @param action อนุญาต, ไม่อนุญาต
|
||||
* @param type ผู้บังคับบัญชา, ผู้มีอำนาจ
|
||||
*/
|
||||
function popUp(action: "pass" | "passNot", type: string) {
|
||||
reasonReign.value = "";
|
||||
dateBreak.value = null;
|
||||
actionPass.value = action === "pass";
|
||||
roleUser.value = type;
|
||||
openModal();
|
||||
modal.value = true;
|
||||
}
|
||||
|
||||
//เงื่อนไขpop up
|
||||
/** ฟังก์ชันยืนยันการอนุญาตผลการพิจารณา*/
|
||||
function onSubmit() {
|
||||
dialogConfirm($q, async () => {
|
||||
showLoader();
|
||||
const body = {
|
||||
reason: reasonReign.value,
|
||||
reject: !actionPass.value,
|
||||
Date: new Date(),
|
||||
};
|
||||
const action = actionPass.value ? "approve" : "reject";
|
||||
|
||||
const endpoint =
|
||||
roleUser.value === "commander"
|
||||
? config.API.comanderCancelResign("-employee", action, id.value)
|
||||
: config.API.approverCancelResign("-employee", action, id.value);
|
||||
await http
|
||||
.put(
|
||||
config.API.resignRejectEMP(`${roleUser.value}-cancel`, id.value),
|
||||
body
|
||||
)
|
||||
.put(endpoint, body)
|
||||
.then(async () => {
|
||||
await fetchData(id.value);
|
||||
closeModal();
|
||||
|
|
@ -319,7 +274,7 @@ function onSubmit() {
|
|||
});
|
||||
}
|
||||
|
||||
/** กดยกเลิก*/
|
||||
/** ฟังก์ชันยกเลิกการแก้ไขข้อมูลเพื่อลงบัญชีแนบท้าย*/
|
||||
async function clickCancel() {
|
||||
edit.value = false;
|
||||
const data = dataDetail.value;
|
||||
|
|
@ -342,7 +297,7 @@ async function clickCancel() {
|
|||
myForm.value?.resetValidation();
|
||||
}
|
||||
|
||||
/** Function บันทึก ,แก้ไขข้อมูลเพื่อลงบัญชีแนบท้าย*/
|
||||
/** ฟังก์ชันบันทึกข้อมูลเพื่อลงบัญชีแนบท้าย*/
|
||||
function onSubmitAttached() {
|
||||
dialogConfirm($q, () => {
|
||||
const formData = new FormData();
|
||||
|
|
@ -377,7 +332,7 @@ function onSubmitAttached() {
|
|||
}
|
||||
|
||||
/**
|
||||
* Function เพิ่ม Class เวลา Edit
|
||||
* ฟังก์ชัน Class เวลา Edit
|
||||
* @param val เมื่อเป็นEdit จะเปลี่ยน Class
|
||||
*/
|
||||
function getClass(val: boolean) {
|
||||
|
|
@ -387,37 +342,18 @@ function getClass(val: boolean) {
|
|||
};
|
||||
}
|
||||
|
||||
/** แปลง StatusOrder */
|
||||
function statusOrder(val: boolean) {
|
||||
switch (val) {
|
||||
case true:
|
||||
return "ยับยั้ง";
|
||||
case false:
|
||||
return "อนุญาต";
|
||||
}
|
||||
}
|
||||
|
||||
const isDirector = ref<boolean>(false);
|
||||
const isStaff = ref<boolean>(false);
|
||||
|
||||
function fetchCheckIsofficer() {
|
||||
http
|
||||
.get(config.API.workflowKeycloakSystem("RETIREMENT_CANCEL_EMP"))
|
||||
.then((res) => {
|
||||
isStaff.value = res.data.result.isStaff;
|
||||
isDirector.value = res.data.result.isDirector;
|
||||
})
|
||||
.catch((err) => {
|
||||
messageError($q, err);
|
||||
});
|
||||
}
|
||||
|
||||
/** เปิด POP UP */
|
||||
/**
|
||||
* ฟังกฺชันเปิด pop up เพิ่มรายชื่อพิจารณา
|
||||
* @param type COMMANDER === ผู้บังคับบัญชา, APPROVER === ผู้มีอำนาจ
|
||||
*/
|
||||
function onAddPerson(type: string) {
|
||||
modalAdd.value = true;
|
||||
typeAdd.value = type;
|
||||
}
|
||||
|
||||
/** ฟังก์ชันดึงข้อมูลสิทธ์ของผู้ใช่*/
|
||||
async function checkOfficer() {
|
||||
try {
|
||||
const data = await fetchDataCheckIsoffice("SYS_RESIGN_EMP");
|
||||
|
|
@ -428,27 +364,31 @@ async function checkOfficer() {
|
|||
}
|
||||
}
|
||||
|
||||
/** ฟังก์ชันยืนยันการส่งไปพิจารณา*/
|
||||
function onSend() {
|
||||
dialogConfirm(
|
||||
$q,
|
||||
() => {
|
||||
async () => {
|
||||
showLoader();
|
||||
http
|
||||
.get(config.API.sendApproveRetirement("-employee", id.value))
|
||||
.then(async (res) => {
|
||||
await http
|
||||
.get(config.API.officerCancelResign("-employee", id.value))
|
||||
.then(async () => {
|
||||
await fetchData(id.value);
|
||||
success($q, "ส่งไปพิจารณา");
|
||||
})
|
||||
.catch((e) => {
|
||||
messageError($q, e);
|
||||
})
|
||||
.finally(() => {});
|
||||
.finally(() => {
|
||||
hideLoader();
|
||||
});
|
||||
},
|
||||
"ยืนยันการส่งไปพิจารณา",
|
||||
"ต้องการส่งไปพิจารณาใช่หรือไม่"
|
||||
);
|
||||
}
|
||||
|
||||
/** ฟังก์ชันดึงข้อมูลตำแหน่งจาก Keycloak*/
|
||||
async function fetchKeycloakPosition() {
|
||||
if (keycloakId.value == "") {
|
||||
await http
|
||||
|
|
@ -465,11 +405,14 @@ async function fetchKeycloakPosition() {
|
|||
|
||||
/** Hook */
|
||||
onMounted(async () => {
|
||||
showLoader();
|
||||
await Promise.all([
|
||||
await fetchKeycloakPosition(),
|
||||
fetchData(id.value),
|
||||
fetchKeycloakPosition(),
|
||||
checkOfficer(),
|
||||
]);
|
||||
]).finally(() => {
|
||||
hideLoader();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
|
@ -487,7 +430,9 @@ onMounted(async () => {
|
|||
@click="router.push('/retirement/resign-employee')"
|
||||
/>
|
||||
รายละเอียดการยกเลิกลาออก
|
||||
{{ dataDetail.prefix.dataDetail.firstName + " " + dataDetail.lastName }}
|
||||
{{
|
||||
dataDetail.prefix + dataDetail.firstName + " " + dataDetail.lastName
|
||||
}}
|
||||
</div>
|
||||
|
||||
<CardProfile :type="'employee'" :data="dataProfile as DataProfile" />
|
||||
|
|
@ -496,39 +441,6 @@ onMounted(async () => {
|
|||
<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="
|
||||
(roleUser === 'officer' && dataDetail.officerReject === null) ||
|
||||
(roleUser === 'commander' &&
|
||||
dataDetail.commanderReject === null &&
|
||||
dataDetail.officerReject !== null) ||
|
||||
(roleUser === 'oligarch' &&
|
||||
dataDetail.oligarchReject === null &&
|
||||
dataDetail.commanderReject !== null &&
|
||||
dataDetail.officerReject !== null)
|
||||
"
|
||||
>
|
||||
<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">
|
||||
|
|
@ -587,7 +499,7 @@ onMounted(async () => {
|
|||
ผลการพิจารณาของผู้บังคับบัญชา
|
||||
</div>
|
||||
<q-btn
|
||||
v-if="statusCheck == 'WAITTING' && (isOfficer || isStaff)"
|
||||
v-if="!checkRoutePermisson && isStaff && approveStep === 'st1'"
|
||||
flat
|
||||
round
|
||||
icon="add"
|
||||
|
|
@ -599,33 +511,6 @@ onMounted(async () => {
|
|||
<q-tooltip>เพิ่มรายชื่อผู้บังคับบัญชา</q-tooltip>
|
||||
</q-btn>
|
||||
<q-space />
|
||||
<!-- <div
|
||||
class="q-gutter-x-sm"
|
||||
v-if="
|
||||
isDirector &&
|
||||
dataDetail.commanderReject === null &&
|
||||
dataDetail.statusMain === 'WAITTING'
|
||||
"
|
||||
>
|
||||
<q-btn
|
||||
outline
|
||||
color="primary"
|
||||
dense
|
||||
icon-right="check"
|
||||
class="q-px-sm"
|
||||
label="อนุญาต"
|
||||
@click="popUp('pass', 'commander')"
|
||||
/>
|
||||
<q-btn
|
||||
outline
|
||||
color="red"
|
||||
dense
|
||||
icon-right="close"
|
||||
class="q-px-sm"
|
||||
label="ยับยั้ง"
|
||||
@click="popUp('passNot', 'commander')"
|
||||
/>
|
||||
</div> -->
|
||||
</div>
|
||||
|
||||
<div class="col-12"><q-separator /></div>
|
||||
|
|
@ -656,25 +541,19 @@ onMounted(async () => {
|
|||
</div>
|
||||
<div v-else-if="col.name == 'comment'">
|
||||
<div
|
||||
class="q-gutter-x-xs"
|
||||
v-if="
|
||||
props.row.approveStatus == 'PENDING' &&
|
||||
props.row.comment == ''
|
||||
props.row.comment == '' &&
|
||||
approveStep === 'st2'
|
||||
"
|
||||
>
|
||||
<q-btn
|
||||
:disable="
|
||||
statusCheck == 'NEW' ||
|
||||
!approvePendingCheck ||
|
||||
(props.row.profileId !== keycloakId &&
|
||||
checkPermission($route)?.attrIsUpdate)
|
||||
"
|
||||
:outline="
|
||||
props.row.profileId !== keycloakId ||
|
||||
statusCheck == 'NEW' ||
|
||||
!approvePendingCheck
|
||||
? false
|
||||
: true
|
||||
v-if="
|
||||
props.row.profileId === keycloakId &&
|
||||
approveStep === 'st2'
|
||||
"
|
||||
outline
|
||||
dense
|
||||
color="primary"
|
||||
icon-right="check"
|
||||
|
|
@ -683,24 +562,16 @@ onMounted(async () => {
|
|||
@click="popUp('pass', 'commander')"
|
||||
/>
|
||||
<q-btn
|
||||
:disable="
|
||||
statusCheck == 'NEW' ||
|
||||
!approvePendingCheck ||
|
||||
(props.row.profileId !== keycloakId &&
|
||||
checkPermission($route)?.attrIsUpdate)
|
||||
"
|
||||
:outline="
|
||||
props.row.profileId !== keycloakId ||
|
||||
statusCheck == 'NEW' ||
|
||||
!approvePendingCheck
|
||||
? false
|
||||
: true
|
||||
v-if="
|
||||
props.row.profileId === keycloakId &&
|
||||
approveStep === 'st2'
|
||||
"
|
||||
outline
|
||||
color="red"
|
||||
dense
|
||||
icon-right="close"
|
||||
class="q-px-sm"
|
||||
label="ยับยั้ง"
|
||||
label="ไม่อนุญาต"
|
||||
@click="popUp('passNot', 'commander')"
|
||||
/>
|
||||
</div>
|
||||
|
|
@ -711,7 +582,7 @@ onMounted(async () => {
|
|||
<div v-else-if="col.name == 'approveStatus'">
|
||||
{{
|
||||
props.row.approveStatus
|
||||
? convertStatusText(props.row.approveStatus)
|
||||
? convertStatusText(props.row.approveStatus, "ไม่อนุญาต")
|
||||
: "-"
|
||||
}}
|
||||
</div>
|
||||
|
|
@ -732,7 +603,8 @@ onMounted(async () => {
|
|||
ผลการพิจารณาของผู้มีอำนาจ
|
||||
</div>
|
||||
<q-btn
|
||||
v-if="statusCheck == 'WAITTING' && (isOfficer || isStaff)"
|
||||
q-btn
|
||||
v-if="!checkRoutePermisson && isStaff && approveStep === 'st1'"
|
||||
flat
|
||||
round
|
||||
icon="add"
|
||||
|
|
@ -748,14 +620,12 @@ onMounted(async () => {
|
|||
<div
|
||||
class="q-gutter-x-sm"
|
||||
v-if="
|
||||
checkPermission($route)?.attrIsUpdate &&
|
||||
dataDetail.oligarchReject === null &&
|
||||
dataDetail.statusMain === 'WAITTING' &&
|
||||
!checkRoutePermisson &&
|
||||
rowsApprover &&
|
||||
rowsApprover.approvers &&
|
||||
rowsApprover.approvers[0]?.profileId == keycloakId &&
|
||||
rowsApprover.approvers[0]?.approveStatus == 'PENDING' &&
|
||||
approveCheck
|
||||
approveStep === 'st3'
|
||||
"
|
||||
>
|
||||
<q-btn
|
||||
|
|
@ -773,7 +643,7 @@ onMounted(async () => {
|
|||
dense
|
||||
icon-right="close"
|
||||
class="q-px-sm"
|
||||
label="ยับยั้ง"
|
||||
label="ไม่อนุญาต"
|
||||
@click="popUp('passNot', 'oligarch')"
|
||||
/>
|
||||
</div>
|
||||
|
|
@ -800,28 +670,24 @@ onMounted(async () => {
|
|||
rowsApprover &&
|
||||
rowsApprover.approvers &&
|
||||
rowsApprover.approvers[0]?.approveStatus
|
||||
? convertStatusText(rowsApprover?.approvers[0].approveStatus)
|
||||
? convertStatusText(
|
||||
rowsApprover?.approvers[0].approveStatus,
|
||||
"ไม่อนุญาต"
|
||||
)
|
||||
: "-"
|
||||
}}
|
||||
</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">
|
||||
{{
|
||||
dataDetail.oligarchReject
|
||||
? dataDetail.oligarchApproveReason
|
||||
: dataDetail.oligarchApproveReason
|
||||
rowsApprover &&
|
||||
rowsApprover.approvers &&
|
||||
rowsApprover.approvers[0]?.comment
|
||||
? rowsApprover?.approvers[0].comment
|
||||
: "-"
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -831,7 +697,7 @@ onMounted(async () => {
|
|||
<q-card
|
||||
bordered
|
||||
class="row col-12 text-dark q-mt-sm q-pa-sm"
|
||||
v-if="statusCheck == 'WAITTING' && (isOfficer || isStaff)"
|
||||
v-if="!checkRoutePermisson && isStaff && approveStep === 'st1'"
|
||||
>
|
||||
<q-btn
|
||||
@click="onSend"
|
||||
|
|
@ -863,8 +729,9 @@ onMounted(async () => {
|
|||
<div
|
||||
v-if="
|
||||
!checkRoutePermisson &&
|
||||
isStaff &&
|
||||
dataDetail.statusMain === 'WAITTING'
|
||||
(dataDetail.statusMain === 'APPROVE' ||
|
||||
dataDetail.statusMain === 'REJECT') &&
|
||||
isStaff
|
||||
"
|
||||
>
|
||||
<div class="q-gutter-sm" v-if="!edit">
|
||||
|
|
@ -1103,7 +970,7 @@ onMounted(async () => {
|
|||
<q-form greedy @submit.prevent @validation-success="onSubmit">
|
||||
<DialogHeader
|
||||
:tittle="`${
|
||||
actionPass ? 'อนุญาตยกเลิกการลาออก' : 'ยับยั้งยกเลิกการลาออก'
|
||||
actionPass ? 'อนุญาตยกเลิกการลาออก' : 'ไม่อนุญาตยกเลิกการลาออก'
|
||||
}`"
|
||||
:close="closeModal"
|
||||
/>
|
||||
|
|
@ -1137,7 +1004,7 @@ onMounted(async () => {
|
|||
<DialogAddCommander
|
||||
v-model:modal="modalAdd"
|
||||
:type="typeAdd"
|
||||
:profileType="'officer'"
|
||||
:profileType="'-employee'"
|
||||
:get-data="fetchData"
|
||||
:id-check="idCheck"
|
||||
:keycloak-user-id="keycloakUserId"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,11 @@ import { useRouter } from "vue-router";
|
|||
import { useCounterMixin } from "@/stores/mixin";
|
||||
import { useDataStore } from "@/modules/06_retirement/store/resignMain";
|
||||
import { useRetirementDataStore } from "@/modules/06_retirement/store/Main";
|
||||
import { checkPermission } from "@/utils/permissions";
|
||||
import {
|
||||
checkPermission,
|
||||
checkPermissionList,
|
||||
checkPermissionCreate,
|
||||
} from "@/utils/permissions";
|
||||
import http from "@/plugins/http";
|
||||
import config from "@/app.config";
|
||||
|
||||
|
|
@ -23,13 +27,8 @@ const stroeResign = useDataStore();
|
|||
const { statusText } = stroe;
|
||||
const router = useRouter();
|
||||
const mixin = useCounterMixin();
|
||||
const {
|
||||
messageError,
|
||||
date2Thai,
|
||||
showLoader,
|
||||
hideLoader,
|
||||
onSearchDataTable
|
||||
} = mixin;
|
||||
const { messageError, date2Thai, showLoader, hideLoader, onSearchDataTable } =
|
||||
mixin;
|
||||
|
||||
/** Table */
|
||||
const rows = ref<ResponseItems[]>([]);
|
||||
|
|
@ -291,7 +290,11 @@ onMounted(async () => {
|
|||
</q-select>
|
||||
|
||||
<q-btn
|
||||
v-if="checkPermission($route)?.attrIsUpdate"
|
||||
v-if="
|
||||
checkPermission($route)?.attrIsUpdate &&
|
||||
checkPermissionList(['COMMAND']) &&
|
||||
checkPermissionCreate('COMMAND')
|
||||
"
|
||||
@click="openModalOrder"
|
||||
flat
|
||||
round
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue