Merge branch 'develop' into devTee

This commit is contained in:
setthawutttty 2024-11-15 16:53:43 +07:00
commit 98e5eaad27
13 changed files with 234 additions and 61 deletions

View file

@ -53,8 +53,9 @@ const typeSelectPerson = ref<string>("");
// disable step 3
const displayArray = <string[]>[
"REGISTRY_PROFILE",
"SYS_RETIREMENT",
"SYS_RESIGN",
"SYS_LEAVE_LIST",
"SYS_LEAVE_EMP",
];
async function fetchCheckState() {

View file

@ -56,7 +56,13 @@ async function fetchOrganizationActive() {
const data = await res.data.result;
if (data) {
await store.fetchDataActive(data);
await fetchCheckIslock(data.draftId);
// id isLock
if (data.draftId) {
await fetchCheckIslock(data.draftId);
} else {
store.isLosck = false;
}
if (data.activeName === null && data.draftName === null) {
isStatusData.value = false;
} else {

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
import { onMounted, ref, reactive, computed } from "vue";
import { onMounted, ref, reactive, computed, readonly } from "vue";
import { useQuasar } from "quasar";
import { useRouter, useRoute } from "vue-router";
@ -20,7 +20,9 @@ import DialogUpdateCouple from "@/modules/04_registryPerson/components/Dialog/06
const $q = useQuasar();
const router = useRouter();
const route = useRoute();
const typeEmp = ref<string>("");
const typeEmp = ref<string>(
route.name === "registryNewRequestEditEmpDetail" ? "employee" : ""
);
const store = useRequestEditStore();
const {
dialogConfirm,
@ -72,8 +74,6 @@ const isCheckData = computed(() => {
/** function fetch ข้อมูลคำร้องแก้ไข*/
async function fetchDataRequest() {
showLoader();
typeEmp.value =
route.name === "registryNewRequestEditEmpDetail" ? "employee" : "";
await http
.get(
config.API.requestEditByType(
@ -86,6 +86,7 @@ async function fetchDataRequest() {
formData.status = data.status;
formData.remark = data.remark;
if (data.status !== "PENDING") {
isReadOnly.value = true;
} else {
@ -239,8 +240,22 @@ function topicConvert(type: string) {
}
}
const isStaff = ref<boolean>(false);
function fetchCheckIsofficer() {
if (typeEmp.value === "employee") {
http
.get(config.API.workflowKeycloakSystem("REGISTRY_PROFILE_EMP"))
.then((res) => {
isStaff.value = res.data.result.isStaff;
})
.catch((err) => {
messageError($q, err);
});
}
}
onMounted(async () => {
await fetchDataRequest();
await Promise.all([fetchDataRequest(), fetchCheckIsofficer()]);
});
</script>
@ -261,8 +276,14 @@ onMounted(async () => {
<q-space />
<q-btn
v-if="
workflowRef?.permission.isUpdate &&
topicConvert(dataRequest.topic) !== ''
(typeEmp !== 'employee' &&
workflowRef?.permission.isUpdate &&
topicConvert(dataRequest.topic) !== '' &&
!isReadOnly) ||
(typeEmp === 'employee' &&
isStaff &&
topicConvert(dataRequest.topic) !== '' &&
!isReadOnly)
"
color="public"
:label="topicConvert(dataRequest.topic)"
@ -413,11 +434,17 @@ onMounted(async () => {
<q-select
:class="
classInput(
isReadOnly || !workflowRef?.permission.isUpdate
isReadOnly ||
(typeEmp === 'employee' && !isStaff) ||
(typeEmp !== 'employee' &&
!workflowRef?.permission.isUpdate)
)
"
:readonly="
isReadOnly || !workflowRef?.permission.isUpdate
isReadOnly ||
(typeEmp === 'employee' && !isStaff) ||
(typeEmp !== 'employee' &&
!workflowRef?.permission.isUpdate)
"
v-model="formData.status"
label="สถานะ"
@ -450,11 +477,17 @@ onMounted(async () => {
<q-input
:class="
classInput(
isReadOnly || !workflowRef?.permission.isUpdate
isReadOnly ||
(typeEmp === 'employee' && !isStaff) ||
(typeEmp !== 'employee' &&
!workflowRef?.permission.isUpdate)
)
"
:readonly="
isReadOnly || !workflowRef?.permission.isUpdate
isReadOnly ||
(typeEmp === 'employee' && !isStaff) ||
(typeEmp !== 'employee' &&
!workflowRef?.permission.isUpdate)
"
v-model="formData.remark"
label="หมายเหตุ"
@ -467,7 +500,10 @@ onMounted(async () => {
<div
class="row col-12 justify-end"
v-if="!isReadOnly && workflowRef?.permission.isUpdate"
v-if="
(!isReadOnly && workflowRef?.permission.isUpdate) ||
(typeEmp === 'employee' && isStaff && !isReadOnly)
"
>
<q-btn label="บันทึก" color="secondary" type="submit"
><q-tooltip>นท</q-tooltip></q-btn

View file

@ -351,9 +351,9 @@ onMounted(async () => {
:readonly="!edit"
:borderless="!edit"
:model-value="date !== null ? date2Thai(date) : null"
:rules="[(val:string) => !!val || `${'กรุณาเลือกตั้งแต่วัน'}`]"
:rules="[(val:string) => !!val || `${'กรุณาเลือกตั้งแต่วันที่'}`]"
hide-bottom-space
:label="`${'ตั้งแต่วัน'}`"
:label="`${'ตั้งแต่วันที่'}`"
>
<template v-slot:prepend>
<q-icon

View file

@ -70,6 +70,8 @@ const dataDetail = ref<any>({
status: "",
statustext: "",
fullname: "",
statusMain: "",
cancelReason: "",
});
const workflowRef = ref<any>(null);
@ -628,6 +630,18 @@ onMounted(async () => {
</div>
</div>
</div>
<div
class="col-xs-12 col-sm-12 row items-start"
v-if="dataDetail.statusMain === 'CANCEL'"
>
<div class="col-12">
<div class="col-12 text-top">เหตผลการขอยกเล</div>
<div class="col-12 text-detail text-red">
{{ dataDetail.cancelReason }}
</div>
</div>
</div>
</div>
</div>
</q-card>
@ -744,7 +758,11 @@ onMounted(async () => {
<q-space />
<div
v-if="!checkRoutePermisson && workflowRef?.permission.isUpdate"
v-if="
!checkRoutePermisson &&
workflowRef?.permission.isUpdate &&
dataDetail.statusMain === 'WAITTING'
"
>
<div v-if="!conditions">
<q-btn
@ -819,7 +837,9 @@ onMounted(async () => {
<div class="col-12 row">
<q-file
v-if="
!checkRoutePermisson && workflowRef?.permission.isUpdate
!checkRoutePermisson &&
workflowRef?.permission.isUpdate &&
dataDetail.statusMain === 'WAITTING'
"
class="col-12"
for="#evidenceFiles"
@ -875,8 +895,8 @@ onMounted(async () => {
<div>
<q-btn
v-if="
dataDetail.status == 'WAITTING' &&
!checkRoutePermisson
!checkRoutePermisson &&
dataDetail.statusMain === 'WAITTING'
"
dense
flat
@ -959,7 +979,8 @@ onMounted(async () => {
class="q-gutter-x-sm"
v-if="
workflowRef?.permission.isUpdate &&
dataDetail.commanderReject === null
dataDetail.commanderReject === null &&
dataDetail.statusMain === 'WAITTING'
"
>
<q-btn
@ -1031,7 +1052,8 @@ onMounted(async () => {
class="q-gutter-x-sm"
v-if="
workflowRef?.permission.isUpdate &&
dataDetail.oligarchReject === null
dataDetail.oligarchReject === null &&
dataDetail.statusMain === 'WAITTING'
"
>
<q-btn
@ -1106,7 +1128,13 @@ onMounted(async () => {
</div>
<q-space />
<div v-if="!checkRoutePermisson && workflowRef?.permission.isUpdate">
<div
v-if="
!checkRoutePermisson &&
workflowRef?.permission.isUpdate &&
dataDetail.statusMain === 'WAITTING'
"
>
<div class="q-gutter-sm" v-if="!edit">
<q-btn
outline
@ -1335,7 +1363,7 @@ onMounted(async () => {
ref="workflowRef"
v-model:is-check-data="isCheckData"
:id="id"
sys-name="SYS_RETIREMENT"
sys-name="SYS_RESIGN"
/>
</div>

View file

@ -67,6 +67,7 @@ const dataDetail = ref<any>({
status: "",
statustext: "",
fullname: "",
statusMain: "",
});
const workflowRef = ref<any>(null);
@ -380,7 +381,8 @@ onMounted(async () => {
class="q-gutter-x-sm"
v-if="
workflowRef?.permission.isUpdate &&
dataDetail.commanderReject === null
dataDetail.commanderReject === null &&
dataDetail.statusMain === 'WAITTING'
"
>
<q-btn
@ -453,7 +455,8 @@ onMounted(async () => {
class="q-gutter-x-sm"
v-if="
workflowRef?.permission.isUpdate &&
dataDetail.oligarchReject === null
dataDetail.oligarchReject === null &&
dataDetail.statusMain === 'WAITTING'
"
>
<q-btn

View file

@ -282,7 +282,7 @@ watchEffect(() => {
<DialogCreateCommand
v-model:modal="modalCommand"
:command-type-code="props.mainTabs === '1' ? 'C-PM-17' : 'C-PM-41'"
:command-type-code="props.mainTabs === '1' ? 'C-PM-23' : 'C-PM-42'"
:persons="dataMapToSend"
/>
</template>

View file

@ -70,6 +70,8 @@ const dataDetail = ref<any>({
status: "",
statustext: "",
fullname: "",
statusMain: "",
cancelReason: "",
});
const workflowRef = ref<any>(null);
@ -516,10 +518,29 @@ function removeFile(fileName: string) {
});
}
const isDirector = ref<boolean>(false);
const isStaff = ref<boolean>(false);
function fetchCheckIsofficer() {
http
.get(config.API.workflowKeycloakSystem("SYS_RESIGN_EMP"))
.then((res) => {
isStaff.value = res.data.result.isStaff;
isDirector.value = res.data.result.isDirector;
})
.catch((err) => {
messageError($q, err);
});
}
/** Hook */
onMounted(async () => {
showLoader();
await Promise.all([fetchData(id.value), fetchFile()]).finally(() => {
await Promise.all([
fetchData(id.value),
fetchFile(),
fetchCheckIsofficer(),
]).finally(() => {
hideLoader();
});
});
@ -628,6 +649,18 @@ onMounted(async () => {
</div>
</div>
</div>
<div
class="col-xs-12 col-sm-12 row items-start"
v-if="dataDetail.statusMain === 'CANCEL'"
>
<div class="col-12">
<div class="col-12 text-top">เหตผลการขอยกเล</div>
<div class="col-12 text-detail text-red">
{{ dataDetail.cancelReason }}
</div>
</div>
</div>
</div>
</div>
</q-card>
@ -742,8 +775,14 @@ onMounted(async () => {
เงอนไขตาง
</div>
<q-space />
<!-- && workflowRef?.permission.isUpdate -->
<div v-if="!checkRoutePermisson">
<div
v-if="
!checkRoutePermisson &&
isStaff &&
dataDetail.statusMain === 'WAITTING'
"
>
<div v-if="!conditions">
<q-btn
outline
@ -815,9 +854,12 @@ onMounted(async () => {
<div class="col-12"><q-separator /></div>
<div class="row col-12 q-col-gutter-y-sm q-pa-sm">
<div class="col-12 row">
<!-- && workflowRef?.permission.isUpdate -->
<q-file
v-if="!checkRoutePermisson"
v-if="
!checkRoutePermisson &&
isStaff &&
dataDetail.statusMain === 'WAITTING'
"
class="col-12"
for="#evidenceFiles"
outlined
@ -872,8 +914,9 @@ onMounted(async () => {
<div>
<q-btn
v-if="
dataDetail.status == 'WAITTING' &&
!checkRoutePermisson
!checkRoutePermisson &&
isStaff &&
dataDetail.statusMain === 'WAITTING'
"
dense
flat
@ -955,8 +998,9 @@ onMounted(async () => {
<div
class="q-gutter-x-sm"
v-if="
workflowRef?.permission.isUpdate &&
dataDetail.commanderReject === null
isDirector &&
dataDetail.commanderReject === null &&
dataDetail.statusMain === 'WAITTING'
"
>
<q-btn
@ -1027,8 +1071,9 @@ onMounted(async () => {
<div
class="q-gutter-x-sm"
v-if="
workflowRef?.permission.isUpdate &&
dataDetail.oligarchReject === null
isDirector &&
dataDetail.oligarchReject === null &&
dataDetail.statusMain === 'WAITTING'
"
>
<q-btn
@ -1102,8 +1147,13 @@ onMounted(async () => {
แกไขขอมลเพอลงบญชแนบทาย
</div>
<q-space />
<!-- && workflowRef?.permission.isUpdate -->
<div v-if="!checkRoutePermisson">
<div
v-if="
!checkRoutePermisson &&
isStaff &&
dataDetail.statusMain === 'WAITTING'
"
>
<div class="q-gutter-sm" v-if="!edit">
<q-btn
outline
@ -1331,7 +1381,7 @@ onMounted(async () => {
ref="workflowRef"
v-model:is-check-data="isCheckData"
:id="id"
sys-name="SYS_RETIREMENT"
sys-name="SYS_RESIGN"
/> -->
</div>

View file

@ -67,6 +67,7 @@ const dataDetail = ref<any>({
status: "",
statustext: "",
fullname: "",
statusMain: "",
});
const workflowRef = ref<any>(null);
@ -176,7 +177,10 @@ function onSubmit() {
reject: !actionPass.value,
};
await http
.put(config.API.resignRejectEMP(`${roleUser.value}-cancel`, id.value), body)
.put(
config.API.resignRejectEMP(`${roleUser.value}-cancel`, id.value),
body
)
.then(async () => {
await fetchData(id.value);
closeModal();
@ -255,9 +259,24 @@ function statusOrder(val: boolean) {
}
}
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);
});
}
/** Hook */
onMounted(async () => {
await fetchData(id.value);
await Promise.all([fetchData(id.value), fetchCheckIsofficer()]);
});
</script>
@ -379,8 +398,9 @@ onMounted(async () => {
<div
class="q-gutter-x-sm"
v-if="
workflowRef?.permission.isUpdate &&
dataDetail.commanderReject === null
isDirector &&
dataDetail.commanderReject === null &&
dataDetail.statusMain === 'WAITTING'
"
>
<q-btn
@ -452,8 +472,9 @@ onMounted(async () => {
<div
class="q-gutter-x-sm"
v-if="
workflowRef?.permission.isUpdate &&
dataDetail.oligarchReject === null
isDirector &&
dataDetail.oligarchReject === null &&
dataDetail.statusMain === 'WAITTING'
"
>
<q-btn
@ -528,7 +549,13 @@ onMounted(async () => {
</div>
<q-space />
<!-- && workflowRef?.permission.isUpdate -->
<div v-if="!checkRoutePermisson">
<div
v-if="
!checkRoutePermisson &&
isStaff &&
dataDetail.statusMain === 'WAITTING'
"
>
<div class="q-gutter-sm" v-if="!edit">
<q-btn
outline

View file

@ -50,7 +50,7 @@ export default [
component: Main,
meta: {
Auth: true,
Key: "SYS_RETIREMENT",
Key: "SYS_RESIGN",
Role: "STAFF",
},
},
@ -60,7 +60,7 @@ export default [
component: Listretirement,
meta: {
Auth: true,
Key: "SYS_RETIREMENT",
Key: "SYS_RESIGN",
Role: "STAFF",
},
},
@ -70,7 +70,7 @@ export default [
component: ListretirementDetail,
meta: {
Auth: true,
Key: "SYS_RETIREMENT",
Key: "SYS_RESIGN",
Role: "STAFF",
},
},
@ -80,7 +80,7 @@ export default [
component: Listretirement,
meta: {
Auth: true,
Key: "SYS_RETIREMENT",
Key: "SYS_RESIGN",
Role: "STAFF",
},
},
@ -141,7 +141,7 @@ export default [
component: resign_EMP,
meta: {
Auth: true,
Key: "SYS_RETIREMENT_EMP",
Key: "SYS_RESIGN_EMP",
Role: "STAFF",
},
},
@ -172,7 +172,7 @@ export default [
component: resignByidEMP,
meta: {
Auth: true,
Key: "SYS_RETIREMENT_EMP",
Key: "SYS_RESIGN_EMP",
Role: "STAFF",
},
},
@ -182,7 +182,7 @@ export default [
component: resignByidEMP,
meta: {
Auth: true,
Key: "SYS_RETIREMENT_EMP",
Key: "SYS_RESIGN_EMP",
Role: "STAFF",
},
},
@ -214,7 +214,7 @@ export default [
component: resignRejectEMP,
meta: {
Auth: true,
Key: "SYS_RETIREMENT_EMP",
Key: "SYS_RESIGN_EMP",
Role: "STAFF",
},
},
@ -224,7 +224,7 @@ export default [
component: resignRejectEMP,
meta: {
Auth: true,
Key: "SYS_RETIREMENT_EMP",
Key: "SYS_RESIGN_EMP",
Role: "STAFF",
},
},

View file

@ -121,13 +121,17 @@ const formData = reactive<FremData>({
approveStep: "",
dear: "",
leaveRange: "",
profileType: "",
});
const isLoadData = ref<boolean>(false);
/**
* Function fetch รายละเอยดของขอม
* @param paramsId ID จาก paramID
*/
async function fetchDetailLeave(paramsId: string) {
isLoadData.value = false;
showLoader();
await http
.get(config.API.leaveListById(paramsId))
@ -264,6 +268,9 @@ async function fetchDetailLeave(paramsId: string) {
: "-";
formData.approveStep = data.approveStep ? data.approveStep : "-";
formData.dear = data.dear ? data.dear : "-";
formData.profileType = data.profileType;
isLoadData.value = true;
/** ส่งประเภทของการลาไป Function เช็คประเภทการลา*/
await fectOptionType();
@ -802,12 +809,16 @@ onMounted(async () => {
</div>
<!-- Workflow -->
<div class="col-xs-12 col-sm-12">
<div class="col-xs-12 col-sm-12" v-if="isLoadData">
<WorkFlow
ref="workflowRef"
:id="paramsId"
v-model:is-check-data="isCheckData"
sys-name="SYS_LEAVE_LIST"
:sys-name="
formData.profileType === 'OFFICER'
? 'SYS_LEAVE_LIST'
: 'SYS_LEAVE_LIST_EMP'
"
/>
</div>
</div>

View file

@ -147,8 +147,11 @@ const formData = reactive<FremData>({
coupleDaySumTotalHistory: "", // ()
approveStep: "",
dear: "",
profileType: "",
});
const isLoadData = ref<boolean>(false);
onMounted(async () => {
if (paramsId) {
showLoader();
@ -192,6 +195,7 @@ async function fetchDetailDeleteLeave(paramsId: string) {
}
async function fetchDetailLeave(paramsId: string) {
isLoadData.value = false;
await http
.get(config.API.leaveListById(paramsId))
.then(async (res) => {
@ -275,6 +279,8 @@ async function fetchDetailLeave(paramsId: string) {
formData.coupleDaySumTotalHistory = data.coupleDaySumTotalHistory;
formData.approveStep = data.approveStep;
formData.dear = data.dear ? data.dear : "-";
formData.profileType = data.profileType;
isLoadData.value = true;
await fectOptionType();
})
.catch((err) => {
@ -708,11 +714,15 @@ async function onClickDownloadFile(id: string, fileName: string, type: string) {
</div>
<!-- Workflow -->
<div class="col-xs-12 col-sm-12">
<div class="col-xs-12 col-sm-12" v-if="isLoadData">
<WorkFlow
ref="workflowRef"
:id="paramsId"
sys-name="SYS_LEAVE_LIST"
:sys-name="
formData.profileType === 'OFFICER'
? 'SYS_LEAVE_LIST'
: 'SYS_LEAVE_LIST_EMP'
"
/>
</div>
</div>

View file

@ -90,6 +90,7 @@ interface FremData {
approveStep: string;
dear: string;
leaveRange?: string;
profileType: string;
}
export type { ListsData, FremData, QuerySting, DateFilter };