import { defineStore } from "pinia" import { ref } from "vue" import { useQuasar } from "quasar" 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 http from "@/plugins/http" import config from "@/app.config" import { useCounterMixin } from "@/stores/mixin" const mixin = useCounterMixin() const { date2Thai, messageError } = mixin const $q = useQuasar() 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, statusConvert: convertStatud(e.status), isDelete: e.isDelete, })) rows.value = datalist } //ฟังก์ชั่นแปลง Status function convertStatud(val: string) { switch (val) { case "NEW": return "ใหม่" case "PENDING": return "กำลังดำเนินการ" case "APPROVE": return "อนุมัติ" case "REJECT": return "ไม่อนุมัติ" case "DELETE": return "ยกเลิก" } } /** ประเภทการลา */ const typeOptions = ref([]) const typeId = ref("") const typeOptionsMain = ref([]) const typeOptionsAdd = ref([]) /** รายการข้อมูลประเภทใบลา */ const options = ref([]) /** * function เรียกข้อมูลประเภทการลา * @param data ประเภทการลา */ async function fetchLeaveType(data: TypeLeave[]) { typeOptionsMain.value = [{ id: "00000000-0000-0000-0000-000000000000", name: "ทั้งหมด", code: "LV-000" }] const optionType = data.map((e: TypeLeave) => ({ id: e.id, name: e.name, code: e.code, })) typeOptionsMain.value.push(...optionType) typeOptions.value = typeOptionsMain.value console.log(typeOptions.value) typeOptionsAdd.value.push(...optionType) options.value = typeOptionsAdd.value console.log(options.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: "ลาไปศึกษาต่อ", code: "s0" }, { id: "s1", name: "ลาฝึกอบรม", code: "s1" }, { id: "s2", name: "ลาปฎิบัติการวิจัย", code: "s2" }, { id: "s3", name: "ลาดูงาน", code: "s3" }, ]) /** รายการประเภทการลาของ ลาอุปสมบทหรือลาประกอบพิธีฮัจญ์*/ const optionsOrdination = ref([ { id: "0", name: "ลาอุปสมบท", code: "0" }, { id: "1", name: "ลาประกอบพิธีฮัจญ์", code: "1" }, ]) /** 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 !== "LV-006" && item !== "LV-008") { typeLeave.value = convertSubtitle(item) } else if (item === "LV-006") { typeLeave.value = convertSubtitleInfo(subitem) } else if (item === "LV-008") { typeLeave.value = convertSubtitleInfo2(subitem) } typeId.value = convertId(item) console.log(typeId.value) } /** *ฟังก์ชั่นแปลงประเภทแบบฟอร์มลา ลาอุปสมบท/ลาประกอบพิธีฮัจญ์ * @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 } /** *ฟังก์ชั่นหา id จาก api * @param val ค่า string * @returns ส่งค่าที่แปลงแล้ว */ function convertId(val: string) { return options.value.find(x => x.code == val)?.id } /** *ตัวแปร profile ที่จะส่งออก */ const dateSendLeave = ref() //วันที่ยื่นใบลา const leaveTypeName = ref("") //Name ประเภทการลา const dear = ref("") //เรียน const fullName = ref("") //คำนำหน้า ชื่อ นามสกุล ผู้ยื่นขอ const positionName = ref("") //ตำแหน่งผู้ยื่นขอ const positionLevelName = ref("") //ระดับผู้ยื่นขอ const organizationName = ref("") //สังกัดผู้ยื่นขอ const leaveLimit = ref(0) //โควต้าลา(แต่ละประเภท)หน่วยเป็นวัน(ภายในปีนั้น) const leaveTotal = ref(0) //ลาไปแล้ว(แต่ละประเภท)หน่วยเป็นวัน(ภายในปีนั้น) const leaveRemain = ref(0) //คงเหลือโควต้า(แต่ละประเภท)หน่วยเป็นวัน(ภายในปีนั้น) const restDayTotalOld = ref(0) //จำนวนวันลาพักผ่อนสะสม จากปีที่ผ่านมา const birthDate = ref() //วันเกิด const dateAppoint = ref() //วันที่เข้ารับราชการ const salary = ref(0) //เงินเดือนปัจจุบัน const salaryText = ref("") //เงินเดือนปัจจุบัน(ภาษาไทย) const leaveLast = ref() const restDayCurrentTotal = ref("") //ดึงข้อมูล profile จาก API async function fetchProfile() { console.log("profile") await http .post(config.API.leaveProfile(), { type: typeId.value }) .then((res: any) => { const data = res.data.result dateSendLeave.value = data.dateSendLeave leaveTypeName.value = data.leaveTypeName dear.value = data.dear fullName.value = data.fullName positionName.value = data.positionName positionLevelName.value = data.positionLevelName organizationName.value = data.organizationName leaveLimit.value = data.leaveLimit leaveTotal.value = data.leaveTotal leaveRemain.value = data.leaveRemain restDayTotalOld.value = data.restDayTotalOld birthDate.value = data.birthDate dateAppoint.value = data.dateAppoint salary.value = data.salary salaryText.value = data.salaryText leaveLast.value = data.leaveLast && date2Thai(data.leaveLast) restDayCurrentTotal.value = data.restDayCurrentTotal console.log(data) }) .catch((e: any) => { messageError($q, e) }) } return { tabValue, typeOptions, optionsSpecific, statusOptions, visibleColumns, columns, rows, LeaveType, LeaveStatus, fiscalYearyear, options, optionsOrdination, typeConvert, typeLeave, typeId, fetchListLeave, fetchLeaveType, filterOption, fetchProfile, //ส่งออกตัวแปร profileที่ได้จาก Api dateSendLeave, leaveTypeName, dear, fullName, positionName, positionLevelName, organizationName, leaveLimit, //โควต้าลา(แต่ละประเภท)หน่วยเป็นวัน(ภายในปีนั้น) leaveTotal, //ลาไปแล้ว(แต่ละประเภท)หน่วยเป็นวัน(ภายในปีนั้น) leaveRemain, //คงเหลือโควต้า(แต่ละประเภท)หน่วยเป็นวัน(ภายในปีนั้น) restDayTotalOld, birthDate, dateAppoint, salary, salaryText, leaveLast, restDayCurrentTotal, } })