Refactoring code module 08_registryEmployee

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2024-09-19 17:09:26 +07:00
parent bd33093d3e
commit 7091eaaeb9
31 changed files with 169 additions and 24405 deletions

View file

@ -1,74 +0,0 @@
<script setup lang="ts">
import AddEmployee from "@/modules/08_registryEmployee/components/AddEmployee/Main.vue";
</script>
<template>
<div class="col-12 row">
<div class="row col-12" style="padding-top: 80px">
<div id="information" name="1" class="row col-12 information q-mt-sm">
<AddEmployee />
</div>
</div>
</div>
</template>
<style>
.image-size-default {
height: 150px;
max-width: 15vw;
}
.image-size-full {
height: 160px;
max-width: 15vw;
}
.border-green {
border: 5px solid #52c688;
}
.area-div {
background-color: transparent;
}
.text-header {
font-size: 1.2em;
}
.containerimage {
position: relative;
}
.containerimage:hover .overlay {
opacity: 1;
}
.overlay {
background-color: #e4f2ffd2 !important;
opacity: 0;
padding: 2px !important;
}
.information:target {
padding-top: 84px;
}
.border-custom {
border: 0.5px solid #c3c3c3;
}
.bg-active-image {
background-color: #52c688;
}
.text-name {
font-size: 1.3em;
overflow: hidden;
}
.text-sub {
font-size: 1.2em;
overflow: hidden;
color: var(--q-primary);
}
</style>

View file

@ -1,915 +0,0 @@
<script setup lang="ts">
import { ref } from "vue";
import { useRoute, useRouter } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
import EducationVue from "@/modules/08_registryEmployee/components/EditEmployee/Education.vue";
import TrainVue from "@/modules/08_registryEmployee/components/EditEmployee/Train.vue";
import AssessmentVue from "@/modules/08_registryEmployee/components/EditEmployee/Assessment.vue";
// import SalaryVue from "@/modules/08_registryEmployee/components/EditEmployee/Salary.vue";
import SalaryEmployeeVue from "@/modules/08_registryEmployee/components/EditEmployee/SalaryEmployee.vue";
import DisciplineVue from "@/modules/08_registryEmployee/components/EditEmployee/Discipline.vue";
import LeaveVue from "@/modules/08_registryEmployee/components/EditEmployee/Leave.vue";
import TalentVue from "@/modules/08_registryEmployee/components/EditEmployee/Talent.vue";
import WorkVue from "@/modules/08_registryEmployee/components/EditEmployee/Work.vue";
// import RecordVue from "@/modules/08_registryEmployee/components/EditEmployee/Record.vue";
import OtherVue from "@/modules/08_registryEmployee/components/EditEmployee/Other.vue";
import DocumentVue from "@/modules/08_registryEmployee/components/EditEmployee/Document.vue";
import Certicate from "@/modules/08_registryEmployee/components/EditEmployee/Information/Certicate.vue";
import Information from "@/modules/08_registryEmployee/components/EditEmployee/Information/Information.vue";
import TempInformation from "@/modules/08_registryEmployee/components/EditEmployee/Information/Tempinformation.vue";
import Address from "@/modules/08_registryEmployee/components/EditEmployee/Information/Address.vue";
import Family from "@/modules/08_registryEmployee/components/EditEmployee/Information/Family.vue";
import Employment from "@/modules/08_registryEmployee/components/EditEmployee/Employment.vue";
import type { DataOption } from "@/modules/04_registry/interface/index/Main";
import http from "@/plugins/http";
import config from "@/app.config";
const $q = useQuasar();
const mixin = useCounterMixin();
const {
date2Thai,
dateToISO,
messageError,
dialogMessage,
success,
showLoader,
hideLoader,
} = mixin;
const route = useRoute();
const router = useRouter();
const imageUrl = ref<any>(null);
const inputImage = ref<any>(null);
const fullname = ref<string>("");
const position = ref<string>("นักจัดการงานทั่วไป");
const dialog = ref<boolean>(false);
const dialogShort = ref<boolean>(false);
const dialogLeave = ref<boolean>(false);
const dialogImage = ref<boolean>(false);
const statusEdit = ref<boolean>(false);
const activeImage = ref<any | null>(null);
const images = ref<any>([]);
const profileId = ref<string>(
route.params.id ? route.params.id.toString() : ""
);
const profileType = ref<string>("");
const leaveDate = ref<Date>(new Date());
const leaveDetail = ref<string>("");
const leaveNumberOrder = ref<string>("");
const leaveDateOrder = ref<Date>(new Date());
const reason = ref<string>("");
const reasonStatus = ref<boolean>(false);
const leaveReason = ref<string>("");
const reasonOptions = ref<DataOption[]>([
{
id: "retire",
name: "เกษียณอายุราชการ",
},
{
id: "resign",
name: "ลาออก",
},
{
id: "transfer",
name: "ให้โอน",
},
{
id: "death",
name: "ถึงแก่กรรม",
},
{
id: "layoff",
name: "ให้ออก",
},
{
id: "discharge",
name: "ปลดออก",
},
{
id: "dismiss",
name: "ไล่ออก",
},
{
id: "other",
name: "อื่นๆ",
},
]);
// get
const fetchData = async () => {
if (profileId.value !== "") {
showLoader();
await http
.get(config.API.profileAvatarId(profileId.value))
.then((res) => {
const data = res.data.result;
fullname.value = data.fullname;
imageUrl.value = data.avatar;
position.value = data.position;
profileType.value = data.profileType;
const reason = reasonOptions.value.filter(
(r: DataOption) => r.id == data.leaveReason
);
if (reason.length > 0) {
leaveReason.value = ` (พ้นจากราชการด้วยสาเหตุ: ${reason[0].name})`;
} else {
leaveReason.value = "";
}
reasonStatus.value = reason.length > 0 ? true : false;
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}
};
const fetchAvatarHistory = async () => {
if (profileId.value !== "") {
showLoader();
await http
.get(config.API.profileAvatarHistoryId(profileId.value))
.then((res) => {
let data = res.data.result;
images.value = [];
data.map((e: any) => {
images.value.push({
id: e.id,
avatar: e.avatar,
avatarId: e.avatarId,
createdDate: new Date(e.createdDate),
isActive: e.isActive,
});
});
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}
};
const uploadImage = async (e: any) => {
if (profileId.value !== "") {
let input = e.target.files;
if (input.length > 0) {
const formData = new FormData();
formData.append("FileData", input[0]);
showLoader();
await http
.post(config.API.profileAvatarId(profileId.value), formData)
.then((res) => {})
.catch((e) => {
messageError($q, e);
})
.finally(async () => {
await fetchData();
dialogImage.value = false;
});
return;
}
}
};
const fetchDataDelete = async (id: string) => {
showLoader();
await http
.delete(config.API.profileAvatarHistoryId(id))
.then((res) => {
success($q, "ลบรูปภาพสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(async () => {
await fetchData();
await clickImage();
});
};
const deletePhoto = async (id: string) => {
dialogMessage(
$q,
"ลบข้อมูล",
"ต้องการทำการลบข้อมูลนี้ใช่หรือไม่",
"delete",
undefined,
"red",
() => fetchDataDelete(id),
undefined,
false
);
};
const selectAvatarHistory = async () => {
if (activeImage.value == null) {
dialogMessage(
$q,
"ไม่สามารถเปลี่ยนรูปได้",
"กรุณาเลือกรูปที่ต้องการเปลี่ยน",
"warning",
undefined,
"orange",
undefined,
undefined,
true
);
return;
}
if (profileId.value !== "") {
showLoader();
await http
.put(config.API.profileAvatarId(profileId.value), {
avatar: activeImage.value.avatarId,
})
.then((res) => {
dialogImage.value = false;
})
.catch((e) => {
messageError($q, e);
})
.finally(async () => {
await fetchData();
});
}
};
const imageActive = (n: any) => {
activeImage.value = n;
};
const imageClass = (n: any) => {
const val = n == activeImage.value;
return {
"rounded-borders bg-grey-2 image-size-default": val,
"rounded-borders bg-grey-2 image-size-full": !val,
};
};
const getClass = (n: any) => {
const val = n == activeImage.value;
return {
"rounded-borders border-green shadow-1": val,
"rounded-borders shadow-1": !val,
};
};
const addNewImage = async () => {
inputImage.value.click();
await imageActive(null);
};
const clickImage = async () => {
await fetchAvatarHistory();
dialogImage.value = true;
};
const closeImage = () => {
dialogImage.value = false;
};
const closeLeave = () => {
dialogLeave.value = false;
};
const closeKp7 = () => {
dialog.value = false;
};
const closeKp7Short = () => {
dialogShort.value = false;
};
const downloadKP7 = () => {};
const downloadKP7Short = () => {};
const downloadFilePDF = async (res: string, fileName: string) => {
const link = document.createElement("a");
// link.href = window.URL.createObjectURL(new Blob([res]));
link.href = window.URL.createObjectURL(
new Blob([res], {
type: "application/vnd.ms-excel",
})
);
link.setAttribute("download", fileName);
document.body.appendChild(link);
link.click();
};
const clickKp7Short = async () => {
if (profileId.value !== "") {
window.open(config.API.profileKp7ShortId(profileId.value));
}
// showLoader();
// await http
// .get(config.API.profileKp7ShortId(profileId.value))
// .then((res) => {
// if (res.data) {
// pdfSrcShort.value = "g==";
// pdfCurrentPageShort.value = 1;
// pdfTotalPageShort.value = 7;
// dialogShort.value = true;
// }
// })
// .catch((e) => {messageError($q, e);})
// .finally(() => {
// hideLoader();
// });
};
const clickRetire = async () => {
if (reasonStatus.value == true) {
dialogMessage(
$q,
"โปรดยืนยัน",
"ต้องการย้ายข้อมูลจากพ้นราชการไปถือครองใช่หรือไม่",
"info",
undefined,
"primary",
Retire,
undefined,
false
);
} else {
leaveDate.value = new Date();
leaveDetail.value = "";
leaveNumberOrder.value = "";
leaveDateOrder.value = new Date();
reason.value = "";
dialogLeave.value = true;
}
};
const Retire = async () => {
if (profileId.value !== "") {
if (reasonStatus.value == true) {
showLoader();
await http
.put(config.API.profileReactive(profileId.value))
.then((res) => {
if (res.data) {
dialogLeave.value = false;
}
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
router.push("/registry");
});
} else {
showLoader();
await http
.put(config.API.profileDeactive(profileId.value), {
leaveDate: dateToISO(leaveDate.value),
leaveDetail: leaveDetail.value,
leaveNumberOrder: leaveNumberOrder.value,
leaveDateOrder: dateToISO(leaveDateOrder.value),
reason: reason.value,
})
.then((res) => {
if (res.data) {
dialogLeave.value = false;
}
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
router.push("/registry");
});
}
}
};
</script>
<template>
<div class="col-12 row">
<div class="row col-12" style="padding-top: 80px">
<div id="information" name="1" class="row col-12 information q-mt-sm">
<!-- <Informationvue
v-model:statusEdit="statusEdit"
:profileType="profileType"
/> -->
<Information
v-model:statusEdit="statusEdit"
:fetchDataProfile="fetchData"
:statusAdd="false"
/>
</div>
<div id="government" name="16" class="row col-12">
<!-- <Government v-model:statusEdit="statusEdit" :statusAdd="false" /> -->
</div>
<div id="tempInformation" name="19" class="row col-12">
<TempInformation v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="Employment" name="20" class="row col-12 q-mt-md">
<Employment v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="address" name="17" class="row col-12">
<Address v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="family" name="18" class="row col-12">
<Family v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="certicate" name="15" class="row col-12">
<Certicate
v-model:statusEdit="statusEdit"
:statusAdd="false"
profileType="employee"
/>
</div>
<div id="education" name="2" class="row col-12 q-mt-md">
<EducationVue v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="training" name="3" class="row col-12 q-mt-md">
<TrainVue v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="assessment" name="6" class="row col-12 q-mt-md">
<AssessmentVue
v-model:statusEdit="statusEdit"
:statusAdd="false"
profileType="employee"
/>
</div>
<div id="position" name="7" class="row col-12 q-mt-md">
<!-- <SalaryVue
v-model:statusEdit="statusEdit" :statusAdd="false"
v-if="profileType === 'officer'"
/> -->
<SalaryEmployeeVue v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="rule" name="8" class="row col-12 q-mt-md">
<DisciplineVue v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="leave" name="9" class="row col-12 q-mt-md">
<LeaveVue v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="talent" name="10" class="row col-12 q-mt-md">
<TalentVue v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="work" name="11" class="row col-12 q-mt-md">
<WorkVue v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="other" name="13" class="row col-12 q-mt-md">
<OtherVue v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
<div id="document" name="14" class="row col-12 q-my-md">
<DocumentVue v-model:statusEdit="statusEdit" :statusAdd="false" />
</div>
</div>
<q-page-sticky
position="top"
expand
class="bg-grey-2 text-white"
style="z-index: 99; padding: 0% 1% 0% 1%"
>
<div
class="row col-12 q-gutter-sm q-pb-sm text-dark no-wrap items-center"
>
<q-btn
flat
round
class="bg-teal-1 full-height"
color="primary"
icon="mdi-chevron-left"
dense
@click="router.go(-1)"
>
</q-btn>
<q-avatar
v-if="imageUrl == null"
size="65px"
rounded
class="containerimage"
>
<img
src="@/assets/avatar_user.jpg"
class="bg-grey-3"
style="object-fit: cover"
/>
<div
class="overlay absolute-bottom text-subtitle2 text-center cursor-pointer"
@click="clickImage()"
>
<q-icon name="mdi-camera" size="18px" color="blue">
<q-tooltip>ปเดตรปภาพ</q-tooltip>
</q-icon>
<input
type="file"
style="display: none"
ref="inputImage"
accept="image/*"
@change="uploadImage"
/>
</div>
</q-avatar>
<q-avatar v-else size="65px" rounded class="containerimage">
<img :src="imageUrl" class="bg-grey-3" style="object-fit: cover" />
<div
class="overlay absolute-bottom text-subtitle2 text-center cursor-pointer"
@click="clickImage()"
>
<q-icon name="mdi-camera" size="18px" color="blue">
<q-tooltip>ปเดตรปภาพ</q-tooltip>
</q-icon>
<input
type="file"
style="display: none"
ref="inputImage"
accept="image/*"
@change="uploadImage"
/>
</div>
</q-avatar>
<div class="row items-center text-dark q-ml-md">
<div class="column">
<div class="text-bold q-pb-xs text-name">
{{ fullname }}{{ leaveReason }}
</div>
<div>{{ position }}</div>
</div>
</div>
<q-space />
</div>
</q-page-sticky>
</div>
<q-dialog v-model="dialog" persistent>
<q-card style="width: 90vw; max-width: 80vw">
<q-card-section class="row items-center q-pb-xs col-12">
<q-space />
<q-btn
@click="downloadKP7()"
unelevated
class="btn_purple q-mr-sm"
label="ดาวน์โหลด ก.พ.7/ก.ก.1"
></q-btn>
<q-btn
icon="close"
unelevated
round
dense
@click="closeKp7"
style="color: #ff8080; background-color: #ffdede"
/>
</q-card-section>
</q-card>
</q-dialog>
<q-dialog v-model="dialogShort" persistent>
<q-card style="width: 90vw; max-width: 80vw">
<q-card-section class="row items-center q-pb-xs col-12">
<q-space />
<q-btn
@click="downloadKP7Short()"
unelevated
class="btn_purple q-mr-sm"
label="ดาวน์โหลด ประวัติแบบย่อ"
></q-btn>
<q-btn
icon="close"
unelevated
round
dense
@click="closeKp7Short"
style="color: #ff8080; background-color: #ffdede"
/>
</q-card-section>
<q-card-section class="q-p-sm">
<!-- <viewpdf
:src="pdfSrcShort"
:currentpage="pdfCurrentPageShort"
:totalpage="pdfTotalPageShort"
></viewpdf> -->
</q-card-section>
</q-card>
</q-dialog>
<!-- Dialog เลอก Image -->
<q-dialog v-model="dialogImage" persistent>
<q-card style="width: 100vw; max-width: 60vw">
<q-card-section class="q-py-sm row">
<div class="text-h6">เลอกรปภาพ</div>
<q-space />
<q-btn
icon="close"
unelevated
round
dense
@click="closeImage"
style="color: #ff8080; background-color: #ffdede"
>
<q-tooltip>ดหนาน</q-tooltip>
</q-btn>
</q-card-section>
<q-separator />
<q-card-section class="col-12 row">
<div
class="row wrap items-start col-12 q-col-gutter-sm"
style="height: 320px; overflow: auto"
>
<div class="col-3" @click="addNewImage">
<div
style="
height: 160px;
max-width: 15vw;
display: flex !important;
justify-content: center;
align-items: center;
"
class="column rounded-borders cursor-pointer bg-active-image text-white"
>
<q-icon name="add" size="60px" color="white" />
<strong>ปโหลดรปภาพ</strong>
</div>
</div>
<div
v-for="n in images"
:key="n"
class="col-3"
@click="imageActive(n)"
>
<div :class="getClass(n)">
<q-img
v-if="n.avatar != null"
:src="n.avatar"
:class="imageClass(n)"
>
<!-- <div
class="absolute-top bg-transparent cursor-pointer text-right"
style="padding: 5px"
>
<q-btn
icon="delete"
unelevated
round
dense
@click="deletePhoto"
style="color: #ff8080"
/>
</div> -->
<div
class="absolute-bottom col-12 cursor-pointer flex justify-between items-center"
style="padding: 5px"
>
{{ date2Thai(n.createdDate) }}
<q-btn
v-if="!n.isActive"
icon="delete"
unelevated
dense
@click="deletePhoto(n.id)"
class="bg-white"
style="color: #ff8080"
/>
</div>
</q-img>
</div>
</div>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right">
<!-- <q-btn
flat
round
color="red"
@click="() => {}"
icon="mdi-delete-outline"
>
<q-tooltip>ลบรปภาพ</q-tooltip>
</q-btn> -->
<q-btn
icon="check"
dense
flat
round
@click="selectAvatarHistory"
color="positive"
>
<q-tooltip>เลอกรปภาพ</q-tooltip>
</q-btn>
</q-card-actions>
</q-card>
</q-dialog>
<!-- Dialog เลอก เกษยณ -->
<q-dialog v-model="dialogLeave" persistent>
<q-card style="width: 600px">
<q-toolbar>
<q-toolbar-title class="text-subtitle2 text-bold"
>ประเภทการพนราชการ
</q-toolbar-title>
<q-btn
icon="close"
unelevated
round
dense
@click="closeLeave"
style="color: #ff8080; background-color: #ffdede"
/>
</q-toolbar>
<q-separator />
<q-card-section class="q-p-sm">
<div
class="row col-12 items-center q-col-gutter-x-xs q-col-gutter-y-xs"
>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-select
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
v-model="reason"
:rules="[(val) => !!val || `${'กรุณาเลือกประเภทการพ้นราชการ'}`]"
hide-bottom-space
:label="`${'ประเภทการพ้นราชการ'}`"
emit-value
map-options
option-label="name"
:options="reasonOptions"
option-value="id"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
menu-class-name="modalfix"
v-model="leaveDate"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
class="full-width inputgreen cursor-pointer"
outlined
dense
:model-value="date2Thai(leaveDate)"
:rules="[(val) => !!val || `${'กรุณาเลือกวันที่พ้นราชการ'}`]"
hide-bottom-space
:label="`${'วันที่พ้นราชการ'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
autogrow
v-model="leaveDetail"
:rules="[
(val) =>
!!val || `${'กรุณากรอกสาเหตุ/เหตุผลของการพ้นจากราชการ'}`,
]"
hide-bottom-space
:label="`${'สาเหตุ/เหตุผลของการพ้นจากราชการ'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<q-input
class="full-width inputgreen cursor-pointer"
outlined
dense
lazy-rules
autogrow
v-model="leaveNumberOrder"
:rules="[(val) => !!val || `${'กรุณากรอกคำสั่ง/เอกสารอ้างอิง'}`]"
hide-bottom-space
:label="`${'คำสั่ง/เอกสารอ้างอิง'}`"
/>
</div>
<div class="col-xs-6 col-sm-6 col-md-6">
<datepicker
menu-class-name="modalfix"
v-model="leaveDateOrder"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
class="full-width inputgreen cursor-pointer"
outlined
dense
:model-value="date2Thai(leaveDateOrder)"
:rules="[(val) => !!val || `${'กรุณาเลือกวันที่ออกคำสั่ง'}`]"
hide-bottom-space
:label="`${'วันที่ออกคำสั่ง'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right">
<q-btn unelevated label="บันทึก" color="public" @click="Retire"
><!-- icon="mdi-content-save-outline"
<q-tooltip>นท</q-tooltip> -->
</q-btn>
</q-card-actions>
</q-card>
</q-dialog>
</template>
<style>
.image-size-default {
height: 150px;
max-width: 15vw;
}
.image-size-full {
height: 160px;
max-width: 15vw;
}
.border-green {
border: 5px solid #52c688;
}
.area-div {
background-color: transparent;
}
.text-header {
font-size: 1.2em;
}
.containerimage {
position: relative;
}
.containerimage:hover .overlay {
opacity: 1;
}
.overlay {
background-color: #e4f2ffd2 !important;
opacity: 0;
padding: 2px !important;
}
.information:target {
padding-top: 84px;
}
.border-custom {
border: 0.5px solid #c3c3c3;
}
.bg-active-image {
background-color: #52c688;
}
.text-name {
font-size: 1.3em;
overflow: hidden;
}
.text-sub {
font-size: 1.3em;
overflow: hidden;
color: var(--q-primary);
}
</style>

View file

@ -1,8 +1,10 @@
<script setup lang="ts">
import { ref, onMounted, reactive, watch } from "vue";
import { checkPermission } from "@/utils/permissions";
import { useQuasar } from "quasar";
import { useRouter } from "vue-router";
import { checkPermission } from "@/utils/permissions";
import { useCounterMixin } from "@/stores/mixin";
import { useRegistryEmp } from "@/modules/08_registryEmployee/stores/registry-employee";
import http from "@/plugins/http";
import config from "@/app.config";
@ -15,13 +17,9 @@ import type {
import type { DataEmployee } from "@/modules/08_registryEmployee/interface/response/Employee";
/** importComponents*/
import DialogAddEmployee from "@/modules/08_registryEmployee/components/DialogAddEmployee.vue";
import DialogSelectPos from "@/modules/08_registryEmployee/components/DialogSelectPos.vue";
import DialogSendOrder from "@/modules/08_registryEmployee/components/DialogSendOrder.vue";
/** inportStore*/
import { useCounterMixin } from "@/stores/mixin";
import { useRegistryEmp } from "@/modules/08_registryEmployee/stores/registry-employee";
import DialogAddEmployee from "@/modules/08_registryEmployee/components/DialogAddEmployee.vue"; //
import DialogSelectPos from "@/modules/08_registryEmployee/components/DialogSelectPos.vue"; //
import DialogSendOrder from "@/modules/08_registryEmployee/components/DialogSendOrder.vue"; //
const $q = useQuasar();
const router = useRouter();
@ -35,10 +33,15 @@ const {
} = useCounterMixin();
const { statusText } = useRegistryEmp();
const modalAddEmployee = ref<boolean>(false); // popup
const modalPos = ref<boolean>(false); //popup
const modalSendOrder = ref<boolean>(false); //popup
const dataRow = ref<DataEmployee>(); //
/** Table*/
const rows = ref<DataEmployee[]>([]);
const maxPage = ref<number>(0);
const total = ref<number>(0);
const rows = ref<DataEmployee[]>([]); //
const maxPage = ref<number>(0); //
const total = ref<number>(0); //
const queryParams = reactive({
page: 1,
pageSize: 10,
@ -46,11 +49,11 @@ const queryParams = reactive({
searchField: "fullName",
searchKeyword: "",
});
//
const searchTypeOption = ref<DataOption[]>([
{ id: "fullName", name: "ชื่อ-นามสกุล" },
{ id: "citizenId", name: "เลขประจำตัวประชาชน" },
]);
const columns = ref<QTableProps["columns"]>([
{
name: "no",
@ -123,15 +126,7 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
// {
// name: "dateStart",
// align: "left",
// label: "",
// sortable: true,
// field: "dateStart",
// headerStyle: "font-size: 14px",
// style: "font-size: 14px",
// },
{
name: "salaryDate",
align: "left",
@ -192,7 +187,6 @@ const visibleColumns = ref<String[]>([
"draftPositionEmployee",
"govAge",
"dateEmployment",
// "dateStart",
"age",
"createdAt",
"dateRetireLaw",
@ -200,24 +194,11 @@ const visibleColumns = ref<String[]>([
]);
/**
* function updatePagination
* @param newPagination อม Pagination ใหม
* งกนดงขอมลรายชอลกจางชวคราว
*/
function updatePagination(newPagination: NewPagination) {
queryParams.page = 1;
queryParams.pageSize = newPagination.rowsPerPage;
}
watch(
() => queryParams.pageSize,
() => {
fetchList();
}
);
async function fetchList() {
showLoader();
http
await http
.get(config.API.registryNew("-temp"), { params: queryParams })
.then(async (res) => {
rows.value = await res.data.result.data;
@ -232,6 +213,10 @@ async function fetchList() {
});
}
/**
* งกนลบขอมลรายชอลกจางชวคราว
* @param id รายชอลกจางชวคราวทองการลบ
*/
function onClickDelete(id: string) {
dialogRemove($q, async () => {
showLoader();
@ -243,36 +228,65 @@ function onClickDelete(id: string) {
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
});
}
/**
* งกนดอมลรายชอลกจางชวคราว ไปย ทะเบยนประวกจางชวคราว
* @param id รายชอลกจางชวคราวทองการ
*/
function redirectToPageDetail(id: string) {
router.push(`/registry-temp/${id}`);
}
/** เพิ่มข้อมูลลูกจ้างชั่วคราว*/
const modalAddEmployee = ref<boolean>(false);
/**
* งกนเป popup เพมขอมลลกจางชวคราว
*/
function onClickAddEmployee() {
modalAddEmployee.value = true;
}
/** เกำหนดตำแหน่ง */
const modalPos = ref<boolean>(false);
const dataRow = ref<DataEmployee>();
/**
* งกนเป popup เลอกหนวยงานทบบรรจ
*/
function onClickSelectPos(data: DataEmployee) {
modalPos.value = true;
dataRow.value = data;
}
/** ส่งไปออกคำสั่ง*/
const modalSendOrder = ref<boolean>(false);
/**
* งกนเป popup งรายชอไปออกคำส
*/
function onClickSendOrder() {
modalSendOrder.value = true;
}
/**
* function updatePagination
* @param newPagination อม Pagination ใหม
*/
function updatePagination(newPagination: NewPagination) {
queryParams.page = 1;
queryParams.pageSize = newPagination.rowsPerPage;
}
/**
* ทำงานเมอมการเปลยนจำนวนขอมลตอหน
*/
watch(
() => queryParams.pageSize,
() => {
fetchList();
}
);
/**
* ทำงานเมอมการเรยกใข Components
*/
onMounted(async () => {
await fetchList();
});
@ -505,13 +519,13 @@ onMounted(async () => {
</div>
</q-card>
<DialogAddEmployee v-model:modal="modalAddEmployee" :fetchData="fetchList" />
<DialogAddEmployee v-model:modal="modalAddEmployee" :fetch-data="fetchList" />
<DialogSelectPos
v-model:modal="modalPos"
:dataRow="dataRow"
:fetchData="fetchList"
:data-row="dataRow"
:fetch-data="fetchList"
/>
<DialogSendOrder v-model:modal="modalSendOrder" :fetchData="fetchList" />
<DialogSendOrder v-model:modal="modalSendOrder" :fetch-data="fetchList" />
</template>

File diff suppressed because it is too large Load diff