Refactoring code module 05_leave

This commit is contained in:
STW_TTTY\stwtt 2024-09-03 17:36:59 +07:00
parent 763ec2fd95
commit 4253226ac3
23 changed files with 383 additions and 532 deletions

View file

@ -1,43 +1,41 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, watch } from "vue"; import { ref, onMounted, watch } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { tokenParsed } from "@/plugins/auth"; import { tokenParsed } from "@/plugins/auth";
/**import calendar*/ import { useCounterMixin } from "@/stores/mixin";
import FullCalendar from "@fullcalendar/vue3"; import FullCalendar from "@fullcalendar/vue3";
import dayGridPlugin from "@fullcalendar/daygrid"; import dayGridPlugin from "@fullcalendar/daygrid";
// import type { CalendarOptions } from "@fullcalendar/core"
import timeGridPlugin from "@fullcalendar/timegrid"; import timeGridPlugin from "@fullcalendar/timegrid";
import interactionPlugin from "@fullcalendar/interaction"; import interactionPlugin from "@fullcalendar/interaction";
import allLocales from "@fullcalendar/core/locales-all"; import allLocales from "@fullcalendar/core/locales-all";
import listPlugin from "@fullcalendar/list"; import listPlugin from "@fullcalendar/list";
/** import type*/
import type { DataDateMonthObject } from "@/modules/05_leave/interface/request/Calendar.ts"; import type { DataDateMonthObject } from "@/modules/05_leave/interface/request/Calendar.ts";
import type { import type {
DataCalendar, DataCalendar,
LeaveType, LeaveType,
} from "@/modules/05_leave/interface/response/leave"; } from "@/modules/05_leave/interface/response/leave";
/** import componest*/
import DialogDetail from "@/modules/05_leave/components/DialogDetail.vue"; import DialogDetail from "@/modules/05_leave/components/DialogDetail.vue";
/** import stort*/ const $q = useQuasar();
import { useCounterMixin } from "@/stores/mixin";
// import { aR } from "@fullcalendar/core/internal-common"
/**ตัวแปรที่ใช้ */
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { showLoader, hideLoader, messageError, monthYear2Thai } = mixin; const { showLoader, hideLoader, messageError, monthYear2Thai } = mixin;
const $q = useQuasar();
const emit = defineEmits(["update:dateYear"]); const emit = defineEmits(["update:dateYear"]);
const fullName = ref<string>("");
const mainData = ref<DataCalendar[]>([]); const mainData = ref<DataCalendar[]>([]);
const keycloakId = ref<string>(""); const keycloakId = ref<string>("");
const modal = ref<boolean>(false); const modal = ref<boolean>(false);
const leaveId = ref<string>(""); const leaveId = ref<string>("");
/** filter calendar left */
const filterLists = ref<any>([]);
const filterVal = ref<any>([keycloakId.value]);
/** /**
* Option ของปฏ * Option ของปฏ
*/ */
@ -129,7 +127,7 @@ async function fetchDataCalendar() {
/** /**
* fetch นหยดในปฏ * fetch นหยดในปฏ
*/ */
const fetchData = async () => { async function fetchData() {
showLoader(); showLoader();
await http await http
.get( .get(
@ -175,7 +173,7 @@ const fetchData = async () => {
.finally(async () => { .finally(async () => {
hideLoader(); hideLoader();
}); });
}; }
/**function แปลงkeycloakId */ /**function แปลงkeycloakId */
function convertKeycloakId(id: any) { function convertKeycloakId(id: any) {
@ -228,10 +226,6 @@ async function onClickClose() {
modal.value = false; modal.value = false;
} }
/** filter calendar left */
const filterLists = ref<any>([]);
const filterVal = ref<any>([keycloakId.value]);
/**** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่Calendar */ /**** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่Calendar */
watch( watch(
() => filterVal.value, () => filterVal.value,

View file

@ -1,8 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, watch } from "vue"; import { ref, reactive, watch } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
/** import type*/ /** import type*/
import type { import type {
@ -13,8 +16,6 @@ import type {
} from "@/modules/05_leave/interface/response/leave"; } from "@/modules/05_leave/interface/response/leave";
import DialogHeader from "@/components/DialogHeader.vue"; import DialogHeader from "@/components/DialogHeader.vue";
/** import componest*/
import FormLeave from "@/modules/05_leave/components/formDetail/01_SickForm.vue"; import FormLeave from "@/modules/05_leave/components/formDetail/01_SickForm.vue";
import FormChildbirth from "@/modules/05_leave/components/formDetail/04_HelpWifeBirthForm.vue"; import FormChildbirth from "@/modules/05_leave/components/formDetail/04_HelpWifeBirthForm.vue";
import FormHoliday from "@/modules/05_leave/components/formDetail/05_VacationForm.vue"; import FormHoliday from "@/modules/05_leave/components/formDetail/05_VacationForm.vue";
@ -28,16 +29,9 @@ import FormSpouse from "@/modules/05_leave/components/formDetail/12_FollowSpouse
import FormVocationalRehabilitation from "@/modules/05_leave/components/formDetail/13_RehabilitationForm.vue"; import FormVocationalRehabilitation from "@/modules/05_leave/components/formDetail/13_RehabilitationForm.vue";
import FormCancel from "@/modules/05_leave/components/formDetail/formCancel.vue"; import FormCancel from "@/modules/05_leave/components/formDetail/formCancel.vue";
/** import stort*/ const $q = useQuasar();
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
/**ตัวแปร */
const dataStore = useLeaveStore(); const dataStore = useLeaveStore();
const { convertStatud } = dataStore; const { convertStatud } = dataStore;
const titleMain = ref<string>("รายละเอียดการลาของ");
const titleMainCancle = ref<string>("รายละเอียดการยกเลิกการลาของ");
const titleName = ref<string>("");
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const {
showLoader, showLoader,
@ -48,7 +42,11 @@ const {
dialogConfirm, dialogConfirm,
calculateDurationYmd, calculateDurationYmd,
} = mixin; } = mixin;
const $q = useQuasar();
const checkForm = ref<string>("");
const titleMain = ref<string>("รายละเอียดการลาของ");
const titleMainCancle = ref<string>("รายละเอียดการยกเลิกการลาของ");
const titleName = ref<string>("");
/**Prop */ /**Prop */
const props = defineProps({ const props = defineProps({
@ -79,7 +77,6 @@ const props = defineProps({
}); });
/**checkForm Form การลา*/ /**checkForm Form การลา*/
const checkForm = ref<string>("");
/** Form รายละเอียดข้อมูล*/ /** Form รายละเอียดข้อมูล*/
const formData = reactive<FremDetail>({ const formData = reactive<FremDetail>({
@ -214,7 +211,6 @@ async function fetchDataDetail(id: string) {
data.leaveLastStart && date2Thai(data.leaveLastStart); data.leaveLastStart && date2Thai(data.leaveLastStart);
formData.leaveLastEnd = formData.leaveLastEnd =
data.leaveLastStart && date2Thai(data.leaveLastEnd); data.leaveLastStart && date2Thai(data.leaveLastEnd);
// formData.leaveTotal = calculateDurationYmd(data.leaveStartDate, data.leaveEndDate)
formData.leaveTotal = data.leaveTotal; formData.leaveTotal = data.leaveTotal;
formData.leavebirthDate = formData.leavebirthDate =
data.leaveBirthDate && date2Thai(data.leaveBirthDate); data.leaveBirthDate && date2Thai(data.leaveBirthDate);
@ -272,7 +268,6 @@ async function fetchDataDetail(id: string) {
formData.dear = data.dear ?? "-"; formData.dear = data.dear ?? "-";
checkLeaveType( checkLeaveType(
formData.leaveTypeId, formData.leaveTypeId,
formData.leaveTypeName,
formData.ordainDayLocationName, formData.ordainDayLocationName,
formData.studyDayTrainingSubject formData.studyDayTrainingSubject
); );
@ -293,15 +288,12 @@ async function fetchDataDetail(id: string) {
*/ */
function checkLeaveType( function checkLeaveType(
leaveTypeId: string, leaveTypeId: string,
leaveTypeName: string,
ordainDayLocationName: string, ordainDayLocationName: string,
studyDayTrainingSubject: string studyDayTrainingSubject: string
) { ) {
if (props.leaveType) { if (props.leaveType) {
const filtertype = props.leaveType.find((e: any) => e.id === leaveTypeId); const filtertype = props.leaveType.find((e: any) => e.id === leaveTypeId);
const type = filtertype.code; const type = filtertype.code;
console.log(type);
if (type === "LV-001" || type === "LV-002" || type === "LV-003") { if (type === "LV-001" || type === "LV-002" || type === "LV-003") {
checkForm.value = "FormLeave"; checkForm.value = "FormLeave";
} else if (type === "LV-004") { } else if (type === "LV-004") {
@ -352,8 +344,6 @@ async function fetchDataCancelDetail(id: string) {
formDataCancle.leaveResonDelete = data.leaveReasonDelete ?? "-"; formDataCancle.leaveResonDelete = data.leaveReasonDelete ?? "-";
formDataCancle.leaveDetail = data.leaveDetail ?? "-"; formDataCancle.leaveDetail = data.leaveDetail ?? "-";
formDataCancle.leaveDocDelete = data.leaveDocDelete ?? null; formDataCancle.leaveDocDelete = data.leaveDocDelete ?? null;
console.log(res);
}) })
.catch((err) => { .catch((err) => {
messageError($q, err); messageError($q, err);
@ -385,7 +375,6 @@ async function onClickSave() {
"ต้องการยินยันการบันทึกข้อมูลนี้หรือไม่ ?" "ต้องการยินยันการบันทึกข้อมูลนี้หรือไม่ ?"
); );
} else { } else {
console.log(hasError);
} }
} }
@ -573,7 +562,6 @@ watch(
<q-card-section class="q-p-md row q-gutter-y-md"> <q-card-section class="q-p-md row q-gutter-y-md">
<div flat class="col-12"> <div flat class="col-12">
<div class="col-12 q-col-gutter-sm row items-center"></div> <div class="col-12 q-col-gutter-sm row items-center"></div>
<!-- FormCancel -->
<FormCancel :data="formDataCancle" /> <FormCancel :data="formDataCancle" />
</div> </div>
</q-card-section> </q-card-section>

View file

@ -1,22 +1,19 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, watch, computed, onMounted } from "vue"; import { ref, reactive, watch, computed, onMounted } from "vue";
import type { import { useQuasar } from "quasar";
FormData,
FormRef,
} from "@/modules/05_leave/interface/request/SickForm";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useQuasar } from "quasar"; import { useCounterMixin } from "@/stores/mixin";
import { useRouter } from "vue-router"; import { useLeaveStore } from "@/modules/05_leave/store";
import type { FormRef } from "@/modules/05_leave/interface/request/SickForm";
/** Use */ /** Use */
const dataStore = useLeaveStore();
const $q = useQuasar(); const $q = useQuasar();
const dataStore = useLeaveStore();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const router = useRouter(); const { date2Thai, dateToISO, messageError } = mixin;
const { date2Thai, dateToISO, messageError, dialogRemove } = mixin;
const edit = ref<boolean>(true); const edit = ref<boolean>(true);
/** รับ props มาจากหน้าหลัก */ /** รับ props มาจากหน้าหลัก */

View file

@ -1,22 +1,22 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onMounted, computed, watch } from "vue"; import { ref, reactive, onMounted, computed, watch } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import type { FormRef } from "@/modules/05_leave/interface/request/BirthForm";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useRouter } from "vue-router"; import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import type { FormRef } from "@/modules/05_leave/interface/request/BirthForm";
/** Use */ /** Use */
const $q = useQuasar();
const dataStore = useLeaveStore(); const dataStore = useLeaveStore();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const router = useRouter(); const { date2Thai, dateToISO, messageError } = mixin;
const $q = useQuasar();
const { date2Thai, dateToISO, dialogRemove, success, messageError, fails } =
mixin;
const edit = ref<boolean>(true); const edit = ref<boolean>(true);
const leaveId = ref<any>(""); const leaveId = ref<string>("");
/** รับ props มาจากหน้าหลัก */ /** รับ props มาจากหน้าหลัก */
const props = defineProps({ const props = defineProps({

View file

@ -1,32 +1,23 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onMounted, computed, watch } from "vue"; import { ref, reactive, onMounted, computed, watch } from "vue";
import type {
FormData,
FormRef,
} from "@/modules/05_leave/interface/request/HelpWifeForm";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import http from "@/plugins/http";
import config from "@/app.config";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import type { FormRef } from "@/modules/05_leave/interface/request/HelpWifeForm";
/** Use */ /** Use */
const $q = useQuasar();
const dataStore = useLeaveStore(); const dataStore = useLeaveStore();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const router = useRouter(); const { date2Thai, calculateDurationYmd, dateToISO, messageError } = mixin;
const $q = useQuasar();
const {
date2Thai,
calculateDurationYmd,
dateToISO,
dialogRemove,
fails,
success,
messageError,
} = mixin;
const edit = ref<boolean>(true); const edit = ref<boolean>(true);
const leaveId = ref<any>(""); const leaveId = ref<string>("");
/** รับ props มาจากหน้าหลัก */ /** รับ props มาจากหน้าหลัก */
const props = defineProps({ const props = defineProps({
@ -75,6 +66,13 @@ const leaveAddressRef = ref<object | null>(null);
const leaveDetailRef = ref<object | null>(null); const leaveDetailRef = ref<object | null>(null);
const leaveDocumentRef = ref<object | null>(null); const leaveDocumentRef = ref<object | null>(null);
const leaveDocumentList = ref<any>();
const statusCheck = ref<any>("");
const isLeave = ref<boolean>(true);
const dateEndInputStyle = computed(() => {
return !isLeave.value ? "input-alert" : "";
});
/** maping ref เข้าตัวแปรเพื่อเตรียมตรวจสอบ */ /** maping ref เข้าตัวแปรเพื่อเตรียมตรวจสอบ */
const FormRef: FormRef = { const FormRef: FormRef = {
leaveWrote: leaveWroteRef, leaveWrote: leaveWroteRef,
@ -90,7 +88,6 @@ const FormRef: FormRef = {
}; };
/** ส่วนของการประกาศและเลือกไฟล์เอกสารประกอบ */ /** ส่วนของการประกาศและเลือกไฟล์เอกสารประกอบ */
const nameFile = ref<string>("");
const fileDocDataUpload = ref<File[]>([]); const fileDocDataUpload = ref<File[]>([]);
const fileUploadDoc = async (files: any) => { const fileUploadDoc = async (files: any) => {
files.forEach((file: any) => { files.forEach((file: any) => {
@ -156,7 +153,6 @@ function updateLeaveTotal() {
* check าลาไดไหม จาก api * check าลาไดไหม จาก api
* @param formData * @param formData
*/ */
const isLeave = ref<boolean>(true);
async function fetchCheck() { async function fetchCheck() {
await http await http
.post(config.API.leaveCheck(), { .post(config.API.leaveCheck(), {
@ -175,17 +171,10 @@ async function fetchCheck() {
}); });
} }
/** แจ้งเมื่อวันลาไม่ถูกต้อง */
const dateEndInputStyle = computed(() => {
return !isLeave.value ? "input-alert" : "";
});
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */ /** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>();
const statusCheck = ref<any>("");
watch(props.data, () => { watch(props.data, () => {
if (props.data) { if (props.data) {
// console.log("data==>", props.data)
formDataHelpWife.leaveWrote = props.data.leaveWrote; formDataHelpWife.leaveWrote = props.data.leaveWrote;
formDataHelpWife.wifeDayName = props.data.wifeDayName; formDataHelpWife.wifeDayName = props.data.wifeDayName;
formDataHelpWife.wifeDayDateBorn = props.data.wifeDayDateBorn; formDataHelpWife.wifeDayDateBorn = props.data.wifeDayDateBorn;
@ -204,7 +193,6 @@ watch(props.data, () => {
/**Hook */ /**Hook */
onMounted(() => { onMounted(() => {
if (props.data) { if (props.data) {
// console.log("data==>", props.data)
formDataHelpWife.leaveWrote = props.data.leaveWrote; formDataHelpWife.leaveWrote = props.data.leaveWrote;
formDataHelpWife.wifeDayName = props.data.wifeDayName; formDataHelpWife.wifeDayName = props.data.wifeDayName;
formDataHelpWife.wifeDayDateBorn = props.data.wifeDayDateBorn; formDataHelpWife.wifeDayDateBorn = props.data.wifeDayDateBorn;

View file

@ -1,25 +1,23 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onMounted, computed, watch } from "vue"; import { ref, reactive, onMounted, computed, watch } from "vue";
import type {
FormData,
FormRef,
} from "@/modules/05_leave/interface/request/VacationForm";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import http from "@/plugins/http";
import config from "@/app.config";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import type { FormRef } from "@/modules/05_leave/interface/request/VacationForm";
/** Use */ /** Use */
const $q = useQuasar(); const $q = useQuasar();
const dataStore = useLeaveStore(); const dataStore = useLeaveStore();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const router = useRouter(); const { date2Thai, dateToISO, messageError } = mixin;
const { date2Thai, dateToISO, dialogRemove, success, messageError, fails } =
mixin;
const edit = ref<boolean>(true); const edit = ref<boolean>(true);
const leaveId = ref<any>(""); const leaveId = ref<string>("");
/** รับ props มาจากหน้าหลัก */ /** รับ props มาจากหน้าหลัก */
const props = defineProps({ const props = defineProps({
@ -86,7 +84,6 @@ const FormRef: FormRef = {
}; };
/** ส่วนของการประกาศและเลือกไฟล์เอกสารประกอบ */ /** ส่วนของการประกาศและเลือกไฟล์เอกสารประกอบ */
const nameFile = ref<string>("");
const fileDocDataUpload = ref<File[]>([]); const fileDocDataUpload = ref<File[]>([]);
const fileUploadDoc = async (files: any) => { const fileUploadDoc = async (files: any) => {
files.forEach((file: any) => { files.forEach((file: any) => {
@ -94,6 +91,29 @@ const fileUploadDoc = async (files: any) => {
}); });
}; };
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>();
const statusCheck = ref<string>("");
/** ฟังก์ชั่นแปลงค่า ครึ่งวัน/ทั้งวัน */
const isReadOnly = computed(() => {
const conditionleaveRange =
formDataVacation.leaveRange === "MORNING" ||
formDataVacation.leaveRange === "AFTERNOON";
if (conditionleaveRange) {
formDataVacation.leaveEndDate = formDataVacation.leaveStartDate; // Set formDataVacation.leaveEndDate to null
formDataVacation.leaveTotal = 0.5;
} else {
formDataVacation.leaveTotal = null;
}
return conditionleaveRange;
});
/** แจ้งเมื่อวันลาไม่ถูกต้อง */
const dateEndInputStyle = computed(() => {
return !isLeave.value ? "input-alert" : "";
});
/** ฟังก์ชั่นตรวจสอบความถูกต้องของข้อมูลในฟอร์ม */ /** ฟังก์ชั่นตรวจสอบความถูกต้องของข้อมูลในฟอร์ม */
function onValidate() { function onValidate() {
const hasError = []; const hasError = [];
@ -167,34 +187,10 @@ function resetDate() {
formDataVacation.leaveStartDate = null; formDataVacation.leaveStartDate = null;
formDataVacation.leaveEndDate = null; formDataVacation.leaveEndDate = null;
} }
console.log("testnull");
} }
/** ฟังก์ชั่นแปลงค่า ครึ่งวัน/ทั้งวัน */
const isReadOnly = computed(() => {
const conditionleaveRange =
formDataVacation.leaveRange === "MORNING" ||
formDataVacation.leaveRange === "AFTERNOON";
if (conditionleaveRange) {
formDataVacation.leaveEndDate = formDataVacation.leaveStartDate; // Set formDataVacation.leaveEndDate to null
formDataVacation.leaveTotal = 0.5;
} else {
formDataVacation.leaveTotal = null;
}
return conditionleaveRange;
});
/** แจ้งเมื่อวันลาไม่ถูกต้อง */
const dateEndInputStyle = computed(() => {
return !isLeave.value ? "input-alert" : "";
});
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>();
const statusCheck = ref<any>("");
watch(props.data, () => { watch(props.data, () => {
if (props.data) { if (props.data) {
// console.log("data==>", props.data)
formDataVacation.leaveWrote = props.data.leaveWrote; formDataVacation.leaveWrote = props.data.leaveWrote;
formDataVacation.restDayOldTotal = props.data.restDayOldTotal; formDataVacation.restDayOldTotal = props.data.restDayOldTotal;
formDataVacation.restDayCurrentTotal = props.data.restDayCurrentTotal; formDataVacation.restDayCurrentTotal = props.data.restDayCurrentTotal;
@ -214,7 +210,6 @@ watch(props.data, () => {
/**Hook */ /**Hook */
onMounted(() => { onMounted(() => {
if (props.data) { if (props.data) {
// console.log("data==>", props.data)
formDataVacation.leaveWrote = props.data.leaveWrote; formDataVacation.leaveWrote = props.data.leaveWrote;
formDataVacation.restDayOldTotal = props.data.restDayOldTotal; formDataVacation.restDayOldTotal = props.data.restDayOldTotal;
formDataVacation.restDayCurrentTotal = props.data.restDayCurrentTotal; formDataVacation.restDayCurrentTotal = props.data.restDayCurrentTotal;
@ -228,7 +223,6 @@ onMounted(() => {
statusCheck.value = props.data.status; statusCheck.value = props.data.status;
formDataVacation.leaveRange = props.data.leaveRange; formDataVacation.leaveRange = props.data.leaveRange;
leaveId.value = props.data.id; leaveId.value = props.data.id;
// formDataVacation.leaveDocument = props.data.leaveDocument;
} }
}); });
</script> </script>

View file

@ -1,30 +1,21 @@
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref, onMounted, computed, watch } from "vue"; import { reactive, ref, onMounted, computed, watch } from "vue";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import type { OrdinationForm } from "@/modules/05_leave/interface/request/AddAbsence";
import { useLeaveStore } from "@/modules/05_leave/store";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useRouter } from "vue-router"; import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import type { OrdinationForm } from "@/modules/05_leave/interface/request/AddAbsence";
/** Use */ /** Use */
const dataStore = useLeaveStore();
const $q = useQuasar(); const $q = useQuasar();
const router = useRouter(); const dataStore = useLeaveStore();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const { date2Thai, calculateDurationYmd, dateToISO, messageError } = mixin;
date2Thai,
dialogRemove,
calculateDurationYmd,
fails,
dateToISO,
success,
messageError,
} = mixin;
const edit = ref<boolean>(true); const edit = ref<boolean>(true);
const files = ref<any>(null); const leaveId = ref<string>("");
const leaveId = ref<any>("");
/** รับ props มาจากหน้าหลัก */ /** รับ props มาจากหน้าหลัก */
const props = defineProps({ const props = defineProps({
@ -99,7 +90,6 @@ const formRef: OrdinationForm = {
}; };
/** ส่วนของการประกาศและเลือกไฟล์เอกสารประกอบ */ /** ส่วนของการประกาศและเลือกไฟล์เอกสารประกอบ */
const nameFile = ref<string>("");
const fileDocDataUpload = ref<File[]>([]); const fileDocDataUpload = ref<File[]>([]);
const fileUploadDoc = async (files: any) => { const fileUploadDoc = async (files: any) => {
files.forEach((file: any) => { files.forEach((file: any) => {
@ -210,7 +200,8 @@ const dateEndInputStyle = computed(() => {
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */ /** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>(); const leaveDocumentList = ref<any>();
const statusCheck = ref<any>(""); const statusCheck = ref<string>("");
watch(props.data, () => { watch(props.data, () => {
if (props.data) { if (props.data) {
formDataOrdination.leaveWrote = props.data.leaveWrote; formDataOrdination.leaveWrote = props.data.leaveWrote;
@ -257,7 +248,6 @@ onMounted(() => {
leaveDocumentList.value = props.data.leaveDocument; leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status; statusCheck.value = props.data.status;
leaveId.value = props.data.id; leaveId.value = props.data.id;
// formDataOrdination.leaveDocument = props.data.leaveDocument;
} }
}); });
</script> </script>
@ -504,7 +494,7 @@ onMounted(() => {
<q-radio <q-radio
v-model="formDataOrdination.ordainDayStatus" v-model="formDataOrdination.ordainDayStatus"
:disable="!edit || statusCheck === 'NEW'" :disable="!edit || statusCheck === 'NEW'"
:val="true" :val="'true'"
label="เคยบวช" label="เคยบวช"
checked-icon="task_alt " checked-icon="task_alt "
hide-bottom-space hide-bottom-space
@ -512,7 +502,7 @@ onMounted(() => {
<q-radio <q-radio
v-model="formDataOrdination.ordainDayStatus" v-model="formDataOrdination.ordainDayStatus"
:disable="!edit || statusCheck === 'NEW'" :disable="!edit || statusCheck === 'NEW'"
:val="false" :val="'false'"
label="ไม่เคยบวช" label="ไม่เคยบวช"
checked-icon="task_alt" checked-icon="task_alt"
hide-bottom-space hide-bottom-space

View file

@ -2,28 +2,20 @@
import { reactive, ref, onMounted, computed, watch } from "vue"; import { reactive, ref, onMounted, computed, watch } from "vue";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import type { HajiForm } from "@/modules/05_leave/interface/request/AddAbsence";
import { useLeaveStore } from "@/modules/05_leave/store";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useRouter } from "vue-router"; import { useLeaveStore } from "@/modules/05_leave/store";
import type { HajiForm } from "@/modules/05_leave/interface/request/AddAbsence";
/** Use */ /** Use */
const router = useRouter();
const dataStore = useLeaveStore(); const dataStore = useLeaveStore();
const $q = useQuasar(); const $q = useQuasar();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const { date2Thai, calculateDurationYmd, messageError, dateToISO } = mixin;
date2Thai,
dialogRemove,
calculateDurationYmd,
fails,
messageError,
success,
dateToISO,
} = mixin;
const edit = ref<boolean>(true); const edit = ref<boolean>(true);
const files = ref<any>(null);
const leaveId = ref<any>(""); const leaveId = ref<any>("");
/** ตัวแปร ref สำหรับแสดง validate */ /** ตัวแปร ref สำหรับแสดง validate */
@ -127,7 +119,6 @@ function onValidate() {
*/ */
const isLeave = ref<boolean>(true); const isLeave = ref<boolean>(true);
async function fetchCheck() { async function fetchCheck() {
console.log("check");
await http await http
.post(config.API.leaveCheck(), { .post(config.API.leaveCheck(), {
type: dataStore.typeId ?? null, type: dataStore.typeId ?? null,
@ -394,14 +385,14 @@ onMounted(() => {
<q-radio <q-radio
v-model="formDataHaji.hajjDayStatus" v-model="formDataHaji.hajjDayStatus"
:disable="statusCheck === 'NEW'" :disable="statusCheck === 'NEW'"
:val="true" :val="'true'"
checked-icon="task_alt" checked-icon="task_alt"
label="เคย" label="เคย"
/> />
<q-radio <q-radio
v-model="formDataHaji.hajjDayStatus" v-model="formDataHaji.hajjDayStatus"
:disable="statusCheck === 'NEW'" :disable="statusCheck === 'NEW'"
:val="false" :val="'false'"
checked-icon="task_alt" checked-icon="task_alt"
label="ไม่เคยไปประกอบพิธีฮัจญ์" label="ไม่เคยไปประกอบพิธีฮัจญ์"
/> />

View file

@ -1,30 +1,21 @@
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref, onMounted, computed, watch } from "vue"; import { reactive, ref, onMounted, computed, watch } from "vue";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import type { MilitaryForm } from "@/modules/05_leave/interface/request/AddAbsence";
import { useLeaveStore } from "@/modules/05_leave/store";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useRouter } from "vue-router"; import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import type { MilitaryForm } from "@/modules/05_leave/interface/request/AddAbsence";
/** Use */ /** Use */
const router = useRouter();
const dataStore = useLeaveStore(); const dataStore = useLeaveStore();
const $q = useQuasar(); const $q = useQuasar();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const { date2Thai, calculateDurationYmd, dateToISO, messageError } = mixin;
date2Thai,
dialogRemove,
calculateDurationYmd,
dateToISO,
success,
messageError,
fails,
} = mixin;
const edit = ref<boolean>(true); const edit = ref<boolean>(true);
const files = ref<any>(null); const leaveId = ref<string>("");
const leaveId = ref<any>("");
/** ตัวแปร ref สำหรับแสดง validate */ /** ตัวแปร ref สำหรับแสดง validate */
const leaveStartDateRef = ref<object | null>(null); const leaveStartDateRef = ref<object | null>(null);
@ -73,8 +64,7 @@ const formDataMilitary = reactive<any>({
leaveDetail: "", leaveDetail: "",
}); });
/** ส่วนของการประกาศและเลือกไฟล์เอกสารประกอบ */ const isLeave = ref<boolean>(true);
const nameFile = ref<string>("");
const fileDocDataUpload = ref<File[]>([]); const fileDocDataUpload = ref<File[]>([]);
const fileUploadDoc = async (files: any) => { const fileUploadDoc = async (files: any) => {
files.forEach((file: any) => { files.forEach((file: any) => {
@ -82,6 +72,15 @@ const fileUploadDoc = async (files: any) => {
}); });
}; };
/** แจ้งเมื่อวันลาไม่ถูกต้อง */
const dateEndInputStyle = computed(() => {
return !isLeave.value ? "input-alert" : "";
});
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>();
const statusCheck = ref<any>("");
/** maping ref เข้าตัวแปรเพื่อเตรียมตรวจสอบ */ /** maping ref เข้าตัวแปรเพื่อเตรียมตรวจสอบ */
const formRef: MilitaryForm = { const formRef: MilitaryForm = {
leaveStartDate: leaveStartDateRef, leaveStartDate: leaveStartDateRef,
@ -143,7 +142,7 @@ function onValidate() {
* check าลาไดไหม จาก api * check าลาไดไหม จาก api
* @param formData * @param formData
*/ */
const isLeave = ref<boolean>(true);
async function fetchCheck() { async function fetchCheck() {
await http await http
.post(config.API.leaveCheck(), { .post(config.API.leaveCheck(), {
@ -170,17 +169,8 @@ function updateLeaveTotal() {
formDataMilitary.leaveEndDate formDataMilitary.leaveEndDate
); );
formDataMilitary.leaveTotal = newLeaveTotal; formDataMilitary.leaveTotal = newLeaveTotal;
console.log("test");
} }
/** แจ้งเมื่อวันลาไม่ถูกต้อง */
const dateEndInputStyle = computed(() => {
return !isLeave.value ? "input-alert" : "";
});
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>();
const statusCheck = ref<any>("");
watch(props.data, () => { watch(props.data, () => {
if (props.data) { if (props.data) {
formDataMilitary.leaveWrote = props.data.leaveWrote; formDataMilitary.leaveWrote = props.data.leaveWrote;
@ -214,7 +204,6 @@ onMounted(() => {
formDataMilitary.leaveDetail = props.data.leaveDetail; formDataMilitary.leaveDetail = props.data.leaveDetail;
leaveDocumentList.value = props.data.leaveDocument; leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status; statusCheck.value = props.data.status;
// formDataMilitary.leaveDocument = props.data.leaveDocument;
leaveId.value = props.data.id; leaveId.value = props.data.id;
} }
}); });

View file

@ -1,33 +1,28 @@
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref, computed, onMounted, watch } from "vue"; import { reactive, ref, computed, onMounted, watch } from "vue";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import type { studyDaySubjectForm } from "@/modules/05_leave/interface/request/AddAbsence";
import { useLeaveStore } from "@/modules/05_leave/store";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useRouter } from "vue-router"; import { useLeaveStore } from "@/modules/05_leave/store";
import { useCounterMixin } from "@/stores/mixin";
import type { studyDaySubjectForm } from "@/modules/05_leave/interface/request/AddAbsence";
/** Use */ /** Use */
const dataStore = useLeaveStore();
const $q = useQuasar(); const $q = useQuasar();
const router = useRouter(); const dataStore = useLeaveStore();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const {
date2Thai, date2Thai,
dialogRemove,
calculateDurationYmd, calculateDurationYmd,
fails,
dateToISO, dateToISO,
success,
messageError, messageError,
arabicNumberToText, arabicNumberToText,
} = mixin; } = mixin;
const edit = ref<boolean>(true);
const files = ref<any>(null);
const leaveId = ref<any>("");
/** ตัวแปร ref สำหรับแสดง validate */ const edit = ref<boolean>(true);
const leaveId = ref<string>("");
const leaveStartDateRef = ref<object | null>(null); const leaveStartDateRef = ref<object | null>(null);
const leaveEndDateRef = ref<object | null>(null); const leaveEndDateRef = ref<object | null>(null);
const leavebirthDateRef = ref<object | null>(null); const leavebirthDateRef = ref<object | null>(null);
@ -102,14 +97,19 @@ const formRef: studyDaySubjectForm = {
leaveWrote: leaveWroteRef, leaveWrote: leaveWroteRef,
}; };
/** ส่วนของการประกาศและเลือกไฟล์เอกสารประกอบ */
const nameFile = ref<string>("");
const fileDocDataUpload = ref<File[]>([]); const fileDocDataUpload = ref<File[]>([]);
const fileUploadDoc = async (files: any) => { const leaveDocumentList = ref<any>();
const statusCheck = ref<string>("");
const isLeave = ref<boolean>(true);
const dateEndInputStyle = computed(() => {
return !isLeave.value ? "input-alert" : "";
});
async function fileUploadDoc(files: any) {
files.forEach((file: any) => { files.forEach((file: any) => {
fileDocDataUpload.value.push(file); fileDocDataUpload.value.push(file);
}); });
}; }
/** ฟังก์ชั่นตรวจสอบความถูกต้องก่อน บันทึก */ /** ฟังก์ชั่นตรวจสอบความถูกต้องก่อน บันทึก */
function onValidate() { function onValidate() {
@ -161,16 +161,6 @@ function onValidate() {
} }
} }
/** แจ้งเมื่อวันลาไม่ถูกต้อง */
const dateEndInputStyle = computed(() => {
return !isLeave.value ? "input-alert" : "";
});
/**
* check าลาไดไหม จาก api
* @param formData
*/
const isLeave = ref<boolean>(true);
async function fetchCheck() { async function fetchCheck() {
await http await http
.post(config.API.leaveCheck(), { .post(config.API.leaveCheck(), {
@ -200,8 +190,6 @@ function updateLeaveTotal() {
} }
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */ /** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>();
const statusCheck = ref<any>("");
watch(props.data, async () => { watch(props.data, async () => {
if (props.data) { if (props.data) {
formDataStudy.leaveWrote = props.data.leaveWrote; formDataStudy.leaveWrote = props.data.leaveWrote;
@ -219,7 +207,6 @@ watch(props.data, async () => {
formDataStudy.studyDayUniversityName = props.data.studyDayUniversityName; formDataStudy.studyDayUniversityName = props.data.studyDayUniversityName;
formDataStudy.studyDayDegreeLevel = props.data.studyDayDegreeLevel; formDataStudy.studyDayDegreeLevel = props.data.studyDayDegreeLevel;
formDataStudy.studyDaySubject = props.data.studyDaySubject; formDataStudy.studyDaySubject = props.data.studyDaySubject;
// formDataStudy.leaveDocument = props.data.leaveDocument;
formDataStudy.leaveDetail = props.data.leaveDetail; formDataStudy.leaveDetail = props.data.leaveDetail;
formDataStudy.leaveDocument = []; formDataStudy.leaveDocument = [];
leaveDocumentList.value = props.data.leaveDocument; leaveDocumentList.value = props.data.leaveDocument;
@ -250,7 +237,6 @@ onMounted(async () => {
formDataStudy.studyDayUniversityName = props.data.studyDayUniversityName; formDataStudy.studyDayUniversityName = props.data.studyDayUniversityName;
formDataStudy.studyDayDegreeLevel = props.data.studyDayDegreeLevel; formDataStudy.studyDayDegreeLevel = props.data.studyDayDegreeLevel;
formDataStudy.studyDaySubject = props.data.studyDaySubject; formDataStudy.studyDaySubject = props.data.studyDaySubject;
// formDataStudy.leaveDocument = props.data.leaveDocument;
formDataStudy.leaveDetail = props.data.leaveDetail; formDataStudy.leaveDetail = props.data.leaveDetail;
leaveDocumentList.value = props.data.leaveDocument; leaveDocumentList.value = props.data.leaveDocument;
const leaveTotal = await calculateDurationYmd( const leaveTotal = await calculateDurationYmd(

View file

@ -1,30 +1,27 @@
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref, computed, onMounted, watch } from "vue"; import { reactive, ref, computed, onMounted, watch } from "vue";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import type { TrainForm } from "@/modules/05_leave/interface/request/AddAbsence";
import { useQuasar } from "quasar";
import { useLeaveStore } from "@/modules/05_leave/store";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useRouter } from "vue-router"; import { useQuasar } from "quasar";
import { useLeaveStore } from "@/modules/05_leave/store";
import type { TrainForm } from "@/modules/05_leave/interface/request/AddAbsence";
/** Use */ /** Use */
const dataStore = useLeaveStore();
const $q = useQuasar(); const $q = useQuasar();
const router = useRouter(); const dataStore = useLeaveStore();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const {
date2Thai, date2Thai,
dialogRemove,
arabicNumberToText, arabicNumberToText,
calculateDurationYmd, calculateDurationYmd,
fails,
dateToISO, dateToISO,
success,
messageError, messageError,
} = mixin; } = mixin;
const edit = ref<boolean>(true); const edit = ref<boolean>(true);
const files = ref<any>(null);
const leaveId = ref<any>(""); const leaveId = ref<any>("");
/** รับ props มาจากหน้าหลัก */ /** รับ props มาจากหน้าหลัก */
@ -97,14 +94,12 @@ const formRef: TrainForm = {
leaveWrote: leaveWroteRef, leaveWrote: leaveWroteRef,
}; };
/** ส่วนของการประกาศและเลือกไฟล์เอกสารประกอบ */ const isLeave = ref<boolean>(true);
const nameFile = ref<string>(""); const leaveDocumentList = ref<any>();
const fileDocDataUpload = ref<File[]>([]); const statusCheck = ref<string>("");
const fileUploadDoc = async (files: any) => { const dateEndInputStyle = computed(() => {
files.forEach((file: any) => { return !isLeave.value ? "input-alert" : "";
fileDocDataUpload.value.push(file); });
});
};
/** ฟังก์ชั่นตรวจสอบความถูกต้องก่อน บันทึก */ /** ฟังก์ชั่นตรวจสอบความถูกต้องก่อน บันทึก */
function onValidate() { function onValidate() {
@ -126,7 +121,6 @@ function onValidate() {
formData.append("leaveDocument", file); formData.append("leaveDocument", file);
}); });
} }
// formData.append("leaveDocument", formDataTrain.leaveDocument);
formData.append("type", formDataTrain.type); // formData.append("type", formDataTrain.type); //
formData.append( formData.append(
"leaveStartDate", "leaveStartDate",
@ -137,11 +131,6 @@ function onValidate() {
dateToISO(new Date(formDataTrain.leaveEndDate)) dateToISO(new Date(formDataTrain.leaveEndDate))
); // ); //
formData.append("studyDayCountry", formDataTrain.studyDayCountry); formData.append("studyDayCountry", formDataTrain.studyDayCountry);
// formData.append(
// "leavegovernmentDate",
// dateToISO(formDataTrain.leavegovernmentDate)
// );
// formData.append("leavebirthDate", dateToISO(new Date(formDataTrain.leavebirthDate)));
formData.append("studyDayTrainingName", formDataTrain.studyDayTrainingName); formData.append("studyDayTrainingName", formDataTrain.studyDayTrainingName);
formData.append( formData.append(
"studyDayTrainingSubject", "studyDayTrainingSubject",
@ -159,12 +148,6 @@ function onValidate() {
} }
} }
/**
* check าลาไดไหม จาก api
* @param formData
*/
const isLeave = ref<boolean>(true);
async function fetchCheck() { async function fetchCheck() {
await http await http
.post(config.API.leaveCheck(), { .post(config.API.leaveCheck(), {
@ -193,23 +176,6 @@ function updateLeaveTotal() {
formDataTrain.leaveTotal = newLeaveTotal; formDataTrain.leaveTotal = newLeaveTotal;
} }
/**
* แปลงตวเลขเงนเดอน
*/
const formattedSalary = computed(() => {
return formDataTrain.leaveSalary !== null
? formDataTrain.leaveSalary.toLocaleString("th-TH")
: "";
});
/** แจ้งเมื่อวันลาไม่ถูกต้อง */
const dateEndInputStyle = computed(() => {
return !isLeave.value ? "input-alert" : "";
});
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>();
const statusCheck = ref<any>("");
watch(props.data, async () => { watch(props.data, async () => {
if (props.data) { if (props.data) {
formDataTrain.leaveWrote = props.data.leaveWrote; formDataTrain.leaveWrote = props.data.leaveWrote;

View file

@ -1,32 +1,25 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, watch, onMounted, computed } from "vue"; import { ref, reactive, watch, onMounted, computed } from "vue";
import type { FormRef } from "@/modules/05_leave/interface/request/WorkInternationalForm"; import { useRouter } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useLeaveStore } from "@/modules/05_leave/store";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useRouter } from "vue-router";
import genReport from "@/plugins/genreport"; import genReport from "@/plugins/genreport";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import type { FormRef } from "@/modules/05_leave/interface/request/WorkInternationalForm";
/** Use */ /** Use */
const dataStore = useLeaveStore();
const $q = useQuasar(); const $q = useQuasar();
const dataStore = useLeaveStore();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const { date2Thai, dateToISO, messageError, showLoader, hideLoader } = mixin;
date2Thai,
dialogRemove,
fails,
dateToISO,
success,
messageError,
showLoader,
hideLoader,
} = mixin;
const edit = ref<boolean>(true); const edit = ref<boolean>(true);
const router = useRouter();
const isSave = ref<boolean>(false); const isSave = ref<boolean>(false);
const leaveId = ref<any>(""); const leaveId = ref<string>("");
/** รับ props มาจากหน้าหลัก */ /** รับ props มาจากหน้าหลัก */
const props = defineProps({ const props = defineProps({
@ -105,8 +98,6 @@ async function onValidate() {
formDataWorkInternational.leaveDocument.forEach((file: File) => { formDataWorkInternational.leaveDocument.forEach((file: File) => {
formData.append("leaveDocument", file); formData.append("leaveDocument", file);
}); });
// formData.append("leaveDocument", formDataWorkInternational.leaveDocument)
} }
if (formDataWorkInternational.leaveDraftDocument) { if (formDataWorkInternational.leaveDraftDocument) {
@ -178,7 +169,8 @@ const dateEndInputStyle = computed(() => {
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */ /** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>(); const leaveDocumentList = ref<any>();
const leaveDraftDocument = ref<string>(); const leaveDraftDocument = ref<string>();
const statusCheck = ref<any>(""); const statusCheck = ref<string>("");
watch(props, () => { watch(props, () => {
if (props.data) { if (props.data) {
formDataWorkInternational.leaveWrote = props.data.leaveWrote; formDataWorkInternational.leaveWrote = props.data.leaveWrote;
@ -206,6 +198,7 @@ watch(
} }
} }
); );
/**Hook */ /**Hook */
onMounted(() => { onMounted(() => {
if (props.data) { if (props.data) {
@ -215,7 +208,6 @@ onMounted(() => {
); );
formDataWorkInternational.leaveEndDate = new Date(props.data.leaveEndDate); formDataWorkInternational.leaveEndDate = new Date(props.data.leaveEndDate);
formDataWorkInternational.leaveDetail = props.data.leaveDetail; formDataWorkInternational.leaveDetail = props.data.leaveDetail;
// formDataWorkInternational.leaveDocument = props.data.leaveDocument;
leaveDraftDocument.value = props.data.leaveDraftDocument; leaveDraftDocument.value = props.data.leaveDraftDocument;
leaveDocumentList.value = props.data.leaveDocument; leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status; statusCheck.value = props.data.status;
@ -353,19 +345,6 @@ onMounted(() => {
</q-input> </q-input>
</template> </template>
</datepicker> </datepicker>
<!-- <q-input
class="col-md-3 col-sm-12"
dense
outlined
ref="leaveTotalRef"
for="leaveTotalRef"
type="number"
v-model="formDataWorkInternational.leaveTotal"
label="จำนวนวันที่ลา"
readonly
:rules="[val => !!val || `${'กรุณากรอกจำนวนวัน'}`]"
/> -->
<q-input <q-input
hide-bottom-space hide-bottom-space
type="textarea" type="textarea"
@ -466,9 +445,6 @@ onMounted(() => {
<div class="row"> <div class="row">
<div class="col-sm-3 q-my-sm"> <div class="col-sm-3 q-my-sm">
<div class="column q-mx-xs"> <div class="column q-mx-xs">
<!-- <div class="q-pl-sm text-weight-bold text-dark text-center">
ดาวนโหลด
</div> -->
<q-btn <q-btn
color="primary" color="primary"
icon="download" icon="download"
@ -481,9 +457,6 @@ onMounted(() => {
</div> </div>
<div class="col-sm-5 q-my-sm"> <div class="col-sm-5 q-my-sm">
<div class="column q-mx-xs"> <div class="column q-mx-xs">
<!-- <div class="q-pl-sm text-weight-bold text-dark text-center">
ปโหลด
</div> -->
<q-file <q-file
v-model="formDataWorkInternational.leaveDraftDocument" v-model="formDataWorkInternational.leaveDraftDocument"
use-chips use-chips
@ -514,11 +487,6 @@ onMounted(() => {
/> />
</div> </div>
</div> </div>
<!-- <div class="col-md-1 self-end q-mb-sm">
<q-btn v-if="formDataWorkInternational.leaveDraftDocument != null" use-chips flat round color="primary" icon="mdi-arrow-up-bold" @click="fileUploadDoc"
><q-tooltip>ปโหลด</q-tooltip></q-btn
>
</div> -->
</div> </div>
</q-card> </q-card>
</div> </div>

View file

@ -1,33 +1,23 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, computed, onMounted, watch } from "vue"; import { ref, reactive, computed, onMounted, watch } from "vue";
import type {
FormData,
FormRef,
} from "@/modules/05_leave/interface/request/FollowSpouseForm";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import type { FormRef } from "@/modules/05_leave/interface/request/FollowSpouseForm";
/** Use */ /** Use */
const dataStore = useLeaveStore(); const dataStore = useLeaveStore();
const $q = useQuasar(); const $q = useQuasar();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const router = useRouter();
const { const { date2Thai, calculateDurationYmd, dateToISO, messageError } = mixin;
dialogRemove,
date2Thai,
arabicNumberToText,
calculateDurationYmd,
dateToISO,
fails,
success,
messageError,
} = mixin;
const edit = ref<boolean>(true); const edit = ref<boolean>(true);
const leaveId = ref<any>(""); const leaveId = ref<string>("");
/** รับ props มาจากหน้าหลัก */ /** รับ props มาจากหน้าหลัก */
const props = defineProps({ const props = defineProps({
@ -138,7 +128,6 @@ function onValidate() {
formData.append("leaveDocument", file); formData.append("leaveDocument", file);
}); });
} }
// formData.append("leaveDocument", formDataFollowSpouse.leaveDocument);
formData.append("type", formDataFollowSpouse.type); // formData.append("type", formDataFollowSpouse.type); //
formData.append( formData.append(
"leaveStartDate", "leaveStartDate",

View file

@ -1,35 +1,22 @@
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref, onMounted, computed, watch } from "vue"; import { reactive, ref, onMounted, computed, watch } from "vue";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
import type { RehabilitationForm } from "@/modules/05_leave/interface/request/AddAbsence"; import type { RehabilitationForm } from "@/modules/05_leave/interface/request/AddAbsence";
import { useLeaveStore } from "@/modules/05_leave/store"; import { useLeaveStore } from "@/modules/05_leave/store";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import { useRouter } from "vue-router";
import genReport from "@/plugins/genreport"; import genReport from "@/plugins/genreport";
/** Use */
const dataStore = useLeaveStore();
const $q = useQuasar(); const $q = useQuasar();
const dataStore = useLeaveStore();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const { date2Thai, dateToISO, messageError, showLoader, hideLoader } = mixin;
date2Thai,
dialogRemove,
fails,
dateToISO,
success,
messageError,
showLoader,
hideLoader,
} = mixin;
const router = useRouter();
const edit = ref<boolean>(true); const edit = ref<boolean>(true);
const isSave = ref<boolean>(false); const isSave = ref<boolean>(false);
const files = ref<any>(null);
const leaveId = ref<any>(""); const leaveId = ref<any>("");
/** ตัวแปร ref สำหรับแสดง validate */
const leaveStartDateRef = ref<object | null>(null); const leaveStartDateRef = ref<object | null>(null);
const leaveEndDateRef = ref<object | null>(null); const leaveEndDateRef = ref<object | null>(null);
const leaveWroteRef = ref<object | null>(null); const leaveWroteRef = ref<object | null>(null);
@ -118,8 +105,6 @@ function onValidate() {
} }
/** ส่วนของการประกาศและเลือกไฟล์เอกสารประกอบ */ /** ส่วนของการประกาศและเลือกไฟล์เอกสารประกอบ */
const nameFile = ref<string>("");
const nameFileDraft = ref<string>("");
const fileDocDataUpload = ref<File[]>([]); const fileDocDataUpload = ref<File[]>([]);
const fileUploadDoc = async (files: any) => { const fileUploadDoc = async (files: any) => {
files.forEach((file: any) => { files.forEach((file: any) => {
@ -174,7 +159,7 @@ const dateEndInputStyle = computed(() => {
/** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */ /** ตรวจสอบว่ามีการส่งข้อมูลเข้ามาที่ฟอร์มไหม เมื่อมีการส่งจะ map ข้อมูลเข้า v-model ของฟอร์ม */
const leaveDocumentList = ref<any>(); const leaveDocumentList = ref<any>();
const leaveDraftDocument = ref<string>(); const leaveDraftDocument = ref<string>();
const statusCheck = ref<any>(""); const statusCheck = ref<string>("");
watch(props.data, () => { watch(props.data, () => {
if (props.data) { if (props.data) {
formDataRehabilitation.leaveWrote = props.data.leaveWrote; formDataRehabilitation.leaveWrote = props.data.leaveWrote;
@ -196,7 +181,6 @@ onMounted(() => {
formDataRehabilitation.leaveStartDate = new Date(props.data.leaveStartDate); formDataRehabilitation.leaveStartDate = new Date(props.data.leaveStartDate);
formDataRehabilitation.leaveEndDate = new Date(props.data.leaveEndDate); formDataRehabilitation.leaveEndDate = new Date(props.data.leaveEndDate);
formDataRehabilitation.leaveDetail = props.data.leaveDetail; formDataRehabilitation.leaveDetail = props.data.leaveDetail;
// formDataRehabilitation.leaveDocument = props.data.leaveDocument;
leaveDraftDocument.value = props.data.leaveDraftDocument; leaveDraftDocument.value = props.data.leaveDraftDocument;
leaveDocumentList.value = props.data.leaveDocument; leaveDocumentList.value = props.data.leaveDocument;
statusCheck.value = props.data.status; statusCheck.value = props.data.status;

View file

@ -1,11 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { reactive, onMounted } from "vue"; import { onMounted } from "vue";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
import type { FormData } from "@/modules/05_leave/interface/request/AddAbsence";
import { useLeaveStore } from "@/modules/05_leave/store"; import { useLeaveStore } from "@/modules/05_leave/store";
/**ตัวแปรที่ใช้ */
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const dataStore = useLeaveStore(); const dataStore = useLeaveStore();
const { date2Thai } = mixin; const { date2Thai } = mixin;
@ -18,20 +16,6 @@ const props = defineProps({
}, },
}); });
/** ข้อมูล v-model ของฟอร์ม */
const formData = reactive<FormData>({
dateStart: new Date(),
subject: "เรื่อง",
who: "เรียนผู้ใด",
requestName: "ชื่อผู้ยื่น",
position: "ตำแหน่ง",
level: "ระดับ",
ocRequest: "สังกัด",
leaveabsentDaySummon: "2",
leaveUse: "1",
leaveRemaining: "1",
});
/**Hook */ /**Hook */
onMounted(() => { onMounted(() => {
dataStore.typeLeave = ""; dataStore.typeLeave = "";

View file

@ -1,39 +1,28 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
/** import type*/ import http from "@/plugins/http";
import type { LeaveType } from "@/modules/05_leave/interface/response/leave"; import config from "@/app.config";
/** import componest*/
import DialogDetail from "@/modules/05_leave/components/DialogDetail.vue";
import Table from "@/modules/05_leave/components/Table.vue";
/** import stort*/
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store"; import { useLeaveStore } from "@/modules/05_leave/store";
import type { LeaveType } from "@/modules/05_leave/interface/response/leave";
import DialogDetail from "@/modules/05_leave/components/DialogDetail.vue";
import Table from "@/modules/05_leave/components/Table.vue";
/**ตัวแปรที่ใช้ */ /**ตัวแปรที่ใช้ */
const mixin = useCounterMixin();
const {
showLoader,
hideLoader,
messageError,
date2Thai,
monthYear2Thai,
dialogRemove,
success,
} = mixin;
const LeaveData = useLeaveStore();
const router = useRouter();
const route = useRoute();
const $q = useQuasar(); const $q = useQuasar();
const leaveType = ref<LeaveType[]>(); const mixin = useCounterMixin();
const router = useRouter();
const LeaveData = useLeaveStore();
const { showLoader, hideLoader, messageError, dialogRemove, success } = mixin;
const modal = ref<boolean>(false); const modal = ref<boolean>(false);
const leaveId = ref<string>(""); const leaveId = ref<string>("");
const leaveType = ref<LeaveType[]>();
const leaveStatus = ref<string>(""); const leaveStatus = ref<string>("");
/** filter */ /** filter */
@ -91,30 +80,30 @@ async function fectOptionType() {
* @param id การลา * @param id การลา
* @param status การลา * @param status การลา
*/ */
const onClickView = async (id: string, status: string) => { async function onClickView(id: string, status: string) {
modal.value = true; modal.value = true;
leaveId.value = id; leaveId.value = id;
leaveStatus.value = status; leaveStatus.value = status;
}; }
/** /**
* function ไปหน edit * function ไปหน edit
* @param id * @param id
*/ */
const onClickEdit = async (id: string) => { async function onClickEdit(id: string) {
router.push(`/leave/edit/${id}`); router.push(`/leave/edit/${id}`);
}; }
// //
const clickDelete = (id: string) => { function clickDelete(id: string) {
dialogRemove($q, () => onClickDelete(id)); dialogRemove($q, () => onClickDelete(id));
}; }
/** /**
* function ลบรายการ * function ลบรายการ
* @param id * @param id
*/ */
const onClickDelete = async (id: string) => { async function onClickDelete(id: string) {
await http await http
.delete(config.API.leaveUserId(id)) .delete(config.API.leaveUserId(id))
.then(async (res) => { .then(async (res) => {
@ -124,7 +113,7 @@ const onClickDelete = async (id: string) => {
.catch((err) => { .catch((err) => {
messageError($q, err); messageError($q, err);
}); });
}; }
/** function closePopup*/ /** function closePopup*/
async function onClickClose() { async function onClickClose() {

View file

@ -4,13 +4,11 @@ import { useQuasar } from "quasar";
import { useLeaveStore } from "@/modules/05_leave/store"; import { useLeaveStore } from "@/modules/05_leave/store";
/** import stort*/ const $q = useQuasar();
const attrs = ref<any>(useAttrs());
const leaveStore = useLeaveStore(); const leaveStore = useLeaveStore();
const { filterOption } = leaveStore; const { filterOption } = leaveStore;
const attrs = ref<any>(useAttrs());
const $q = useQuasar();
/** รับ props มาจากหน้าหลัก */ /** รับ props มาจากหน้าหลัก */
const props = defineProps({ const props = defineProps({
count: Number, count: Number,
@ -60,16 +58,15 @@ const pagination = ref({
rowsPerPage: Number(props.pageSize), rowsPerPage: Number(props.pageSize),
}); });
/** filter */
const year = ref<number>(new Date().getFullYear());
const filter = ref<string>("");
/** updateVisible*/ /** updateVisible*/
function updateVisible(value: []) { function updateVisible(value: []) {
emit("update:inputvisible", value); emit("update:inputvisible", value);
} }
/** filter */
const year = ref<number>(new Date().getFullYear());
const filter = ref<string>("");
/** function updateFilter*/ /** function updateFilter*/
function filterTable() { function filterTable() {
emit( emit(

View file

@ -45,10 +45,93 @@ interface LeaveItem {
remain: number; remain: number;
} }
interface MainList{
id: string;
leaveTypeName: string;
leaveLimit: number;
leaveExtend: number;
leavePercent: number;
leaveCountSend: number;
leaveCountApprove: number;
leaveCountReject: number;
leaveCountDelete: number;
}
interface LeaveDocument {
fileName: string;
pathName: string;
id: string;
}
interface FormData {
id: string;
leaveTypeName: string;
leaveTypeId: string;
fullname: string;
dateSendLeave: Date | null;
status: string;
leaveStartDate: Date | null;
leaveEndDate: Date | null;
leaveCount: number;
leaveWrote: string;
leaveAddress: string;
leaveNumber: string;
leaveDetail: string;
leaveDocument: LeaveDocument[];
leaveDraftDocument: string;
leaveLastStart: Date | null;
leaveLastEnd: Date | null;
leaveTotal: number;
leavebirthDate: Date | null;
leavegovernmentDate: Date | null;
leaveSalary: number;
leaveSalaryText: string;
leaveTypeDay: string;
wifeDayName: string;
wifeDayDateBorn: Date | null;
restDayOldTotal: number;
restDayCurrentTotal: number;
ordainDayStatus: string;
ordainDayLocationName: string;
ordainDayLocationAddress: string;
ordainDayLocationNumber: string;
ordainDayOrdination: Date | null;
ordainDayBuddhistLentName: string;
ordainDayBuddhistLentAddress: string;
hajjDayStatus: string;
absentDaySummon: string;
absentDayLocation: string;
absentDayRegistorDate: Date | null;
absentDayGetIn: string;
absentDayAt: string;
studyDaySubject: string;
studyDayDegreeLevel: string;
studyDayUniversityName: string;
studyDayTrainingSubject: string;
studyDayTrainingName: string;
studyDayCountry: string;
studyDayScholarship: string;
coupleDayName: string;
coupleDayPosition: string;
coupleDayLevel: string;
coupleDayLevelCountry: string;
coupleDayCountryHistory: string;
coupleDayTotalHistory: string;
coupleDayStartDateHistory: Date | null;
coupleDayEndDateHistory: Date | null;
coupleDaySumTotalHistory: string;
approveStep: string;
dear: string;
leaveLast: string;
leaveRange: string;
}
export type { export type {
OptionData, OptionData,
FormLeavetMainData, FormLeavetMainData,
formListLeaveData, formListLeaveData,
TypeLeave, TypeLeave,
LeaveItem, LeaveItem,
MainList,
FormData
}; };

View file

@ -2,13 +2,9 @@
* Router leave * Router leave
*/ */
const leave = () => import("@/modules/05_leave/views/Main.vue"); const leave = () => import("@/modules/05_leave/views/Main.vue");
const addAbsence = () => import("@/modules/05_leave/views/AddPage.vue"); const addAbsence = () => import("@/modules/05_leave/views/AddPage.vue");
const editAbsence = () => import("@/modules/05_leave/views/EditPage.vue"); const editAbsence = () => import("@/modules/05_leave/views/EditPage.vue");
/* const Checkout = () => import("@/modules/04_checkin/views/Checkout.vue");
*/
export default [ export default [
{ {
path: "/leave", path: "/leave",

View file

@ -2,6 +2,10 @@ import { defineStore } from "pinia";
import { ref } from "vue"; import { ref } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import type { QTableProps } from "quasar"; import type { QTableProps } from "quasar";
import type { import type {
OptionData, OptionData,
@ -11,10 +15,7 @@ import type {
ListLeave, ListLeave,
ListLeaveTable, ListLeaveTable,
} from "@/modules/05_leave/interface/response/leave"; } from "@/modules/05_leave/interface/response/leave";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { date2Thai, messageError } = mixin; const { date2Thai, messageError } = mixin;
const $q = useQuasar(); const $q = useQuasar();

View file

@ -1,11 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useRouter, useRoute } from "vue-router"; import { useRouter } from "vue-router";
import { useLeaveStore } from "@/modules/05_leave/store"; import type { QForm } from "quasar";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import type { QForm } from "quasar"; import { useLeaveStore } from "@/modules/05_leave/store";
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import FormPart2 from "@/modules/05_leave/components/FormLeave/Form.vue"; import FormPart2 from "@/modules/05_leave/components/FormLeave/Form.vue";
@ -22,19 +23,17 @@ import WorkInternationalForm from "@/modules/05_leave/components/FormLeave/11_Wo
import FollowSpouseForm from "@/modules/05_leave/components/FormLeave/12_FollowSpouseForm.vue"; import FollowSpouseForm from "@/modules/05_leave/components/FormLeave/12_FollowSpouseForm.vue";
import RehabilitationForm from "@/modules/05_leave/components/FormLeave/13_RehabilitationForm.vue"; import RehabilitationForm from "@/modules/05_leave/components/FormLeave/13_RehabilitationForm.vue";
const dataStore = useLeaveStore();
const { fetchLeaveType } = dataStore;
const mixin = useCounterMixin();
const { dialogConfirm, success, messageError, showLoader, hideLoader } = mixin;
const router = useRouter();
const route = useRoute();
const myform = ref<QForm | null>(null);
const $q = useQuasar(); const $q = useQuasar();
const router = useRouter();
const myform = ref<QForm | null>(null);
const dataStore = useLeaveStore();
const mixin = useCounterMixin();
const { fetchLeaveType } = dataStore;
const { dialogConfirm, success, messageError, showLoader, hideLoader } = mixin;
const model = ref<string>(""); const model = ref<string>("");
const modelSpecific = ref<string>(""); const modelSpecific = ref<string>("");
const option = ref<any[]>(dataStore.options);
/** /**
* งคาประเภทการลาจาก Api * งคาประเภทการลาจาก Api
*/ */
@ -50,13 +49,6 @@ async function fectOptionType() {
}); });
} }
function inputEdit(val: boolean) {
return {
"full-width cursor-pointer ": val,
"full-width cursor-pointer inputgreen": !val,
};
}
function onSubmit(postData: FormData, isLeave: boolean = true) { function onSubmit(postData: FormData, isLeave: boolean = true) {
if (isLeave) { if (isLeave) {
dialogConfirm($q, async () => { dialogConfirm($q, async () => {
@ -79,7 +71,6 @@ function onSubmit(postData: FormData, isLeave: boolean = true) {
} }
} }
const option = ref<any[]>(dataStore.options);
/** /**
* function นหาขอมลใน option * function นหาขอมลใน option
* @param val คำคนหา * @param val คำคนหา

View file

@ -1,7 +1,15 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, reactive, computed } from "vue"; import { ref, onMounted, reactive, computed } from "vue";
import { useQuasar } from "quasar";
import { useRoute, useRouter } from "vue-router";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import type { FormData } from "@/modules/05_leave/interface/index/main";
//import form
import FormPart2 from "@/modules/05_leave/components/FormLeave/Form.vue"; import FormPart2 from "@/modules/05_leave/components/FormLeave/Form.vue";
import SickForm from "@/modules/05_leave/components/FormLeave/01_SickForm.vue"; import SickForm from "@/modules/05_leave/components/FormLeave/01_SickForm.vue";
import FormBirth from "@/modules/05_leave/components/FormLeave/03_Birth.vue"; import FormBirth from "@/modules/05_leave/components/FormLeave/03_Birth.vue";
@ -16,23 +24,11 @@ import WorkInternationalForm from "@/modules/05_leave/components/FormLeave/11_Wo
import FollowSpouseForm from "@/modules/05_leave/components/FormLeave/12_FollowSpouseForm.vue"; import FollowSpouseForm from "@/modules/05_leave/components/FormLeave/12_FollowSpouseForm.vue";
import RehabilitationForm from "@/modules/05_leave/components/FormLeave/13_RehabilitationForm.vue"; import RehabilitationForm from "@/modules/05_leave/components/FormLeave/13_RehabilitationForm.vue";
import { useCounterMixin } from "@/stores/mixin"; const $q = useQuasar();
import { useQuasar } from "quasar";
import { useRoute, useRouter } from "vue-router";
import http from "@/plugins/http";
import config from "@/app.config";
import { useLeaveStore } from "@/modules/05_leave/store";
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
/**
* วแปรทใช
*/
const personalId = ref<string>(route.params.id as string); const personalId = ref<string>(route.params.id as string);
const leaveId = ref<string>("");
const dataStore = useLeaveStore(); const dataStore = useLeaveStore();
const $q = useQuasar();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const {
messageError, messageError,
@ -41,21 +37,19 @@ const {
dialogConfirm, dialogConfirm,
success, success,
date2Thai, date2Thai,
dateToISO,
dialogRemove, dialogRemove,
} = mixin; } = mixin;
const titleName = ref<string>(""); const titleName = ref<string>("");
/** Form รายละเอียดข้อมูล*/ const formData = reactive<FormData>({
const formData = reactive<any>({
id: "", //Id id: "", //Id
leaveTypeName: "", // Name leaveTypeName: "", // Name
leaveTypeId: "", //Id leaveTypeId: "", //Id
fullname: "", // fullname: "", //
dateSendLeave: null, // dateSendLeave: null, //
status: "", // status: "", //
leaveDateStart: null, // leaveStartDate: null, //
leaveDateEnd: null, // leaveEndDate: null, //
leaveCount: 0, // leaveCount: 0, //
leaveWrote: "", // leaveWrote: "", //
leaveAddress: "", // leaveAddress: "", //
@ -110,6 +104,29 @@ const formData = reactive<any>({
leaveRange: "", leaveRange: "",
}); });
const model = computed(() => {
return (
dataStore.options.find((x) => x.id == formData.leaveTypeId)?.code ?? ""
);
});
const modelSpecific = computed(() => {
const code = dataStore.options.find(
(x) => x.id == formData.leaveTypeId
)?.code;
if (code == "LV-006" && formData.ordainDayLocationName != "") {
return "b1";
} else if (code == "LV-006" && formData.ordainDayLocationName == "") {
return "b2";
} else if (code == "LV-008" && formData.studyDayTrainingSubject == "") {
return "s1";
} else if (code == "LV-008" && formData.studyDayTrainingSubject != "") {
return "s2";
} else {
return "";
}
});
/** /**
* function เรยกขอมลการลา * function เรยกขอมลการลา
* @param id การลา * @param id การลา
@ -120,9 +137,7 @@ async function fetchDataDetail(id: string) {
.get(config.API.leaveUserId(id), {}) .get(config.API.leaveUserId(id), {})
.then(async (res) => { .then(async (res) => {
const data = await res.data.result; const data = await res.data.result;
dataStore.typeId = data.leaveTypeId; dataStore.typeId = data.leaveTypeId;
titleName.value = data.fullName ?? "-"; titleName.value = data.fullName ?? "-";
formData.id = data.id ?? "-"; formData.id = data.id ?? "-";
formData.leaveTypeName = data.leaveTypeName ?? "-"; formData.leaveTypeName = data.leaveTypeName ?? "-";
@ -193,9 +208,6 @@ async function fetchDataDetail(id: string) {
formData.dear = data.dear ?? "-"; formData.dear = data.dear ?? "-";
formData.leaveLast = data.leaveLast ?? "-"; formData.leaveLast = data.leaveLast ?? "-";
formData.leaveRange = data.leaveRange; formData.leaveRange = data.leaveRange;
// checkLeaveType(formData.leaveTypeId, formData.leaveTypeName)
dataStore.fetchProfileOld(data); dataStore.fetchProfileOld(data);
}) })
.catch((err) => { .catch((err) => {
@ -206,30 +218,6 @@ async function fetchDataDetail(id: string) {
}); });
} }
/**modal */
const model = computed(() => {
return (
dataStore.options.find((x) => x.id == formData.leaveTypeId)?.code ?? ""
);
});
const modelSpecific = computed(() => {
const code = dataStore.options.find(
(x) => x.id == formData.leaveTypeId
)?.code;
if (code == "LV-006" && formData.ordainDayLocationName != "") {
return "b1";
} else if (code == "LV-006" && formData.ordainDayLocationName == "") {
return "b2";
} else if (code == "LV-008" && formData.studyDayTrainingSubject == "") {
return "s1";
} else if (code == "LV-008" && formData.studyDayTrainingSubject != "") {
return "s2";
} else {
return "";
}
});
/** /**
* function นทกขอม * function นทกขอม
* @param formData อมลใน formdata * @param formData อมลใน formdata
@ -259,9 +247,8 @@ function onSubmit(formData: FormData, isLeave: boolean = true) {
/** /**
* funciotn นใบลา * funciotn นใบลา
* @param id id ของใบลา
*/ */
function onConfirm(id: string) { function onConfirm() {
dialogConfirm( dialogConfirm(
$q, $q,
async () => { async () => {
@ -277,7 +264,6 @@ function onConfirm(id: string) {
}) })
.finally(() => { .finally(() => {
hideLoader(); hideLoader();
// fetchDataDetail(personalId.value);
}); });
}, },
"ยืนยันการยื่นใบลา", "ยืนยันการยื่นใบลา",
@ -286,15 +272,15 @@ function onConfirm(id: string) {
} }
// //
const clickDelete = (id: string, docId: string) => { function clickDelete(id: string, docId: string) {
dialogRemove($q, () => onClickDelete(id, docId)); dialogRemove($q, () => onClickDelete(id, docId));
}; }
/** /**
* function ลบรายการ * function ลบรายการ
* @param id * @param id
*/ */
const onClickDelete = async (id: string, docId: string) => { async function onClickDelete(id: string, docId: string) {
await http await http
.delete(config.API.leaveDocumentId(id, docId)) .delete(config.API.leaveDocumentId(id, docId))
.then(async (res) => { .then(async (res) => {
@ -307,7 +293,7 @@ const onClickDelete = async (id: string, docId: string) => {
fetchDataDetail(personalId.value); fetchDataDetail(personalId.value);
hideLoader(); hideLoader();
}); });
}; }
/** /**
* เรยกใชงาน fetchData เพอดงขอม * เรยกใชงาน fetchData เพอดงขอม
@ -407,7 +393,7 @@ onMounted(() => {
<FormPart2 <FormPart2
:model="model" :model="model"
:data="formData" :data="formData"
:leaveTypeId="formData.leaveTypeId" :leave-type-id="formData.leaveTypeId"
/> />
</div> </div>
</div> </div>

View file

@ -1,29 +1,47 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, computed } from "vue"; import { ref, onMounted, computed } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useRoute, useRouter } from "vue-router"; import { useRouter } from "vue-router";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
import type { LeaveItem } from "@/modules/05_leave/interface/index/main"; import { useCounterMixin } from "@/stores/mixin";
import { useLeaveStore } from "@/modules/05_leave/store";
import type {
LeaveItem,
MainList,
} from "@/modules/05_leave/interface/index/main";
import type { QTableProps } from "quasar"; import type { QTableProps } from "quasar";
import CalendarView from "@/modules/05_leave/components/Calendar.vue"; import CalendarView from "@/modules/05_leave/components/Calendar.vue";
import ListView from "@/modules/05_leave/components/ListView.vue"; import ListView from "@/modules/05_leave/components/ListView.vue";
import { useCounterMixin } from "@/stores/mixin"; const $q = useQuasar();
import { useLeaveStore } from "@/modules/05_leave/store"; const router = useRouter();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const leaveStore = useLeaveStore(); const leaveStore = useLeaveStore();
const { showLoader, hideLoader, messageError } = mixin; const { messageError } = mixin;
const router = useRouter();
const route = useRoute();
const $q = useQuasar();
const row = ref<MainList[]>([]);
const filterLeaveType = ref(["ลาป่วย", "ลากิจส่วนตัว", "ลาพักผ่อน"]); const filterLeaveType = ref(["ลาป่วย", "ลากิจส่วนตัว", "ลาพักผ่อน"]);
const itemPie = ref<LeaveItem[]>([]); const itemPie = ref<LeaveItem[]>([]);
const pagination = ref({ rowsPerPage: 15 });
const modalStatsTable = ref<boolean>(false);
/**
* find อมลจาก api
*/
const filteredItems = computed(() => {
return itemPie.value.filter((item) => item.text === "ลาพักผ่อน");
});
const filteredSick = computed(() => {
return itemPie.value.filter((item) => item.text === "ลาป่วย");
});
const filteredBusi = computed(() => {
return itemPie.value.filter((item) => item.text === "ลากิจส่วนตัว");
});
const columns = ref<QTableProps["columns"]>([ const columns = ref<QTableProps["columns"]>([
{ {
name: "no", name: "no",
@ -99,13 +117,9 @@ const columns = ref<QTableProps["columns"]>([
style: "font-size: 14px; width:15%;", style: "font-size: 14px; width:15%;",
}, },
]); ]);
const row = ref<any>([]);
const pagination = ref({ rowsPerPage: 15 });
/** function เรียกข้อมูลตารางสถิติการลา*/ /** function เรียกข้อมูลตารางสถิติการลา*/
async function fetchStatsTable() { async function fetchStatsTable() {
// modalStatsTable.value = true;
await http await http
.get(config.API.leaveStats()) .get(config.API.leaveStats())
.then((res) => { .then((res) => {
@ -129,7 +143,7 @@ async function fetchStatsTable() {
}); });
stat.forEach((item) => itemPie.value.push(...item)); stat.forEach((item) => itemPie.value.push(...item));
row.value = data.map((e: any) => ({ row.value = data.map((e: MainList) => ({
leaveTypeName: e.leaveTypeName, leaveTypeName: e.leaveTypeName,
leaveLimit: leaveLimit:
e.leaveTypeName === "ลาพักผ่อน" e.leaveTypeName === "ลาพักผ่อน"
@ -155,7 +169,6 @@ async function fetchStatsTable() {
}); });
} }
const modalStatsTable = ref<boolean>(false);
function onClickOpenStat() { function onClickOpenStat() {
modalStatsTable.value = true; modalStatsTable.value = true;
} }
@ -166,19 +179,6 @@ async function addAbsence() {
router.push(`/leave/add`); router.push(`/leave/add`);
} }
/**
* find อมลจาก api
*/
const filteredItems = computed(() => {
return itemPie.value.filter((item) => item.text === "ลาพักผ่อน");
});
const filteredSick = computed(() => {
return itemPie.value.filter((item) => item.text === "ลาป่วย");
});
const filteredBusi = computed(() => {
return itemPie.value.filter((item) => item.text === "ลากิจส่วนตัว");
});
onMounted(async () => { onMounted(async () => {
await fetchStatsTable(); await fetchStatsTable();
}); });