import { defineStore } from "pinia"; import { ref } from "vue"; import type { QTableProps } from "quasar"; import type { OptionData, TypeLeave, } from "@/modules/05_leave/interface/index/main"; import type { ListLeave, ListLeaveTable, } from "@/modules/05_leave/interface/response/leave"; import { useCounterMixin } from "@/stores/mixin"; const mixin = useCounterMixin(); const { date2Thai } = mixin; export const useLeaveStore = defineStore("Leave", () => { const tabValue = ref("calendar"); const typeLeave = ref(""); const LeaveType = ref("0"); const LeaveStatus = ref("0"); const fiscalYearyear = ref(new Date().getFullYear()); const rows = ref([]); /** * function เรียกข้อมูลรายการลา Table * @param data ข้อมูลรายการลา Table */ async function fetchListLeave(data: ListLeave[]) { let datalist: ListLeaveTable[] = data.map((e: ListLeave) => ({ id: e.id, leaveTypeName: e.leaveTypeName, leaveTypeId: e.leaveTypeId, fullname: e.fullname, dateSendLeave: e.dateSendLeave && date2Thai(e.dateSendLeave), status: e.status, isDelete: e.isDelete, })); rows.value = datalist; } /** ประเภทการลา */ const typeOptions = ref([]); const typeOptionsMain = ref([]); /** * function เรียกข้อมูลประเภทการลา * @param data ประเภทการลา */ async function fetchLeaveType(data: TypeLeave[]) { typeOptionsMain.value = [ { id: "00000000-0000-0000-0000-000000000000", name: "ทั้งหมด" }, ]; const optionType = data.map((e: TypeLeave) => ({ id: e.id, name: e.name, })); typeOptionsMain.value.push(...optionType); typeOptions.value = typeOptionsMain.value; } /** สถานะของการลา */ const statusOptionsMain = ref([ { id: "ALL", name: "ทั้งหมด" }, { id: "NEW ", name: "ใหม่" }, { id: "PENDING ", name: "กำลังดำเนินการ" }, { id: "APPROVE ", name: "อนุมัติ " }, { id: "REJECT ", name: "ไม่อนุมัติ" }, { id: "DELETE ", name: "ยกเลิก" }, ]); const statusOptions = ref(statusOptionsMain.value); /** * function ต้นหาข้อมูลของ Option * @param val ค่าที่ต้องการฟิลเตอร์ * @param update อัพเดทค่า * @param refData ดาต้าที่ต้องการฟิลเตอร์ */ function filterOption(val: any, update: Function, refData: string) { switch (refData) { case "LeaveTypeOption": update(() => { typeOptions.value = typeOptionsMain.value.filter( (v: any) => v.name.indexOf(val) > -1 ); }); break; case "LeaveStatusOption": update(() => { statusOptions.value = statusOptionsMain.value.filter( (v: any) => v.name.indexOf(val) > -1 ); }); break; default: break; } } /** รายการประเภทการลาของ ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน*/ const optionsSpecific = ref([ { id: "s0", name: "ลาไปศึกษาต่อ" }, { id: "s1", name: "ลาฝึกอบรม" }, { id: "s2", name: "ลาปฎิบัติการวิจัย" }, { id: "s3", name: "ลาดูงาน" }, ]); /** รายการประเภทการลาของ ลาอุปสมบทหรือลาประกอบพิธีฮัจย์ฯ*/ const optionsOrdination = ref([ { id: "0", name: "ลาอุปสมบท" }, { id: "1", name: "ลาประกอบพิธีฮัจย์ฯ" }, ]); /** รายการข้อมูลประเภทใบลา */ const options = ref([ { id: "1", name: "ลาป่วย" }, { id: "2", name: "ลากิจส่วนตัว" }, { id: "3", name: "ลาคลอดบุตร" }, { id: "4", name: "ลาไปช่วยเหลือภริยาที่คลอดบุตร" }, { id: "5", name: "ลาพักผ่อน" }, { id: "6", name: "ลาอุปสมบทหรือลาประกอบพิธีฮัจย์ฯ" }, { id: "7", name: "ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล" }, { id: "8", name: "ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน" }, { id: "9", name: "ลาไปปฎิบัติงานในองค์การระหว่างประเทศ" }, { id: "10", name: "ลาติดตามคู่สมรส" }, { id: "11", name: "ลาไปฟื้นฟูสมรรถภาพด้านอาชีพ" }, ]); /** data table filter & column ของรายการลา */ const visibleColumns = ref([ "no", "leaveTypeName", "dateSendLeave", "status", ]); const columns = ref([ { name: "no", align: "left", label: "ลำดับ", sortable: true, field: "no", headerStyle: "font-size: 14px", style: "font-size: 14px; width:5%;", }, { name: "leaveTypeName", align: "left", label: "ประเภทการลา", sortable: true, field: "leaveTypeName", headerStyle: "font-size: 14px", style: "font-size: 14px; width:15%;", }, { name: "dateSendLeave", align: "left", label: "วันที่ยื่นใบลา", sortable: true, field: "dateSendLeave", headerStyle: "font-size: 14px", style: "font-size: 14px; width:15%;", }, { name: "status", align: "left", label: "สถานะ", sortable: true, field: "status", headerStyle: "font-size: 14px", style: "font-size: 14px; width:10%;", }, ]); /** *ฟังก์ชั่นแปลงประเภทแบบฟอร์มลา * @param item ประเภทแบบฟอร์ม * @param subitem ประเภทแบบฟอร์มย่อย */ function typeConvert(item: string, subitem: any) { // console.log('first',item) if (item !== "6" && item !== "8") { typeLeave.value = convertSubtitle(item); } else if (item === "6") { typeLeave.value = convertSubtitleInfo(subitem); } else if (item === "8") { typeLeave.value = convertSubtitleInfo2(subitem); } } /** *ฟังก์ชั่นแปลงประเภทแบบฟอร์มลา ลาอุปสมบท/ลาประกอบพิธีฮัจย์ * @param val ค่า string * @returns ส่งค่าที่แปลงแล้ว */ function convertSubtitle(val: string) { return options.value.find((x) => x.id == val)?.name; } /** *ฟังก์ชั่นแปลงประเภทแบบฟอร์มลา ลาอุปสมบท/ลาประกอบพิธีฮัจย์ ย่อย * @param val ค่า string * @returns ส่งค่าที่แปลงแล้ว */ function convertSubtitleInfo(val: string) { return optionsOrdination.value.find((x) => x.id == val)?.name; } /** *ฟังก์ชั่นแปลง ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน * @param val ค่า string * @returns ส่งค่าที่แปลงแล้ว */ function convertSubtitleInfo2(val: string) { return optionsSpecific.value.find((x) => x.id == val)?.name; } return { tabValue, typeOptions, optionsSpecific, statusOptions, visibleColumns, columns, rows, LeaveType, LeaveStatus, fiscalYearyear, options, optionsOrdination, typeConvert, typeLeave, fetchListLeave, fetchLeaveType, filterOption, }; });