import { defineStore } from "pinia" import { ref, computed } from "vue" import type { QTableProps } from "quasar" import type { FormLeavetMainData, OptionData, formListLeaveData } from "@/modules/05_leave/interface/index/main" import { useCounterMixin } from "@/stores/mixin" export const useLeaveStore = defineStore("Leave", () => { const typeLeave = ref('') const mixin = useCounterMixin() const { date2Thai } = mixin const LeaveType = ref("0") const LeaveStatus = ref("0") const fiscalYearyear = ref("0") const rows = ref([]) const DataMainOrig = ref([]) // ข้อมูลหลักดั้งเดิม async function fecthList(data: formListLeaveData[]) { let datalist: formListLeaveData[] = data.map((e: any) => ({ no: e.no, type: e.type, status: e.status, date: e.date, year: e.year, })) rows.value = datalist DataMainOrig.value = datalist } const DataMainUpdate = ref([]) // ข้อมูลเปลี่ยนแปลง const DataMain = (val: formListLeaveData[]) => (DataMainOrig.value = val) const DataUpdate = (filterType: string, filterStatus: string, filterYear: string) => { DataMainUpdate.value = [] if (filterType === "" && filterStatus === "" && filterYear === "") { DataMainUpdate.value = DataMainOrig.value } else if (filterType !== "" && filterStatus === "" && filterYear === "") { DataMainUpdate.value = DataMainOrig.value.filter((item: formListLeaveData) => item.type === filterType) } else if (filterType !== "" && filterStatus !== "" && filterYear === null) { DataMainUpdate.value = DataMainOrig.value.filter((item: formListLeaveData) => item.type === filterType && item.status === filterStatus) } else if (filterType !== "" && filterStatus === "" && filterYear !== "") { DataMainUpdate.value = DataMainOrig.value.filter((item: formListLeaveData) => item.type === filterType && item.year === filterYear) } else if (filterType === "" && filterStatus !== "" && filterYear === "") { DataMainUpdate.value = DataMainOrig.value.filter((item: formListLeaveData) => item.status === filterStatus) } else if (filterType === "" && filterStatus === "" && filterYear !== "") { DataMainUpdate.value = DataMainOrig.value.filter((item: formListLeaveData) => item.year === filterYear) } else if (filterType === "" && filterStatus !== "" && filterYear !== null) { DataMainUpdate.value = DataMainOrig.value.filter((item: formListLeaveData) => item.status === filterStatus && item.year === filterYear) } else if (filterType !== "" && filterStatus !== "" && filterYear === "") { DataMainUpdate.value = DataMainOrig.value.filter((item: formListLeaveData) => item.status === filterStatus && item.type === filterType) } else if (filterType !== "" && filterStatus !== "" && filterYear !== null) { DataMainUpdate.value = DataMainOrig.value.filter((item: formListLeaveData) => item.type === filterType && item.status === filterStatus && item.year === filterYear) } else if (filterType == "0" && filterStatus == "0" && filterYear !== null) { DataMainUpdate.value = DataMainOrig.value } } //--------------|ฟิลเตอร์|--------------------------------------// const searchFilterTable = async () => { rows.value = [] if (LeaveType.value !== undefined && LeaveType.value !== null) { await DataUpdate(LeaveType.value === "0" ? "all" : LeaveType.value!, LeaveStatus.value === "0" ? "all" : LeaveStatus.value!, fiscalYearyear.value === "0" ? "all" : fiscalYearyear.value!) let filteredData = DataMainOrig.value if (LeaveType.value !== "0") { filteredData = filteredData.filter((item: formListLeaveData) => item.type === LeaveType.value) } if (LeaveStatus.value !== "0") { filteredData = filteredData.filter((item: formListLeaveData) => item.status === LeaveStatus.value) } if (fiscalYearyear.value !== "0") { filteredData = filteredData.filter((item: formListLeaveData) => item.year === fiscalYearyear.value) } const dataArr: formListLeaveData[] = filteredData.map((e: any) => ({ no: e.no, type: convertType(e.type) || '', status: convertStatus(e.status) || '', date: date2Thai(new Date(e.date)), year: e.year !== undefined ? e.year : '' })); rows.value = dataArr } } const filterSelector = (val: any, update: Function, refData: string) => { switch (refData) { case "fiscalyearOP": update(() => { fiscalyearOP.value = fiscalyearOP.value.filter((v: any) => v.name.indexOf(val) > -1) }) break case "LeaveTypeOption": update(() => { typeOptions.value = typeOptions.value.filter((v: any) => v.name.indexOf(val) > -1) }) break case "LeaveStatusOption": update(() => { statusOptions.value = statusOptions.value.filter((v: any) => v.name.indexOf(val) > -1) }) break default: break } } const fiscalyearOP = ref([ { id: "0", name: "ทั้งหมด" }, { id: "1", name: "2566" }, { id: "2", name: "2567" }, { id: "2", name: "2568" }, ]) function convertType(val: string) { switch (val) { case "0": return "ทั้งหมด" case "1": return "ลาป่วย" case "2": return "ลากิจส่วนตัว" case "3": return "ลาคลอดบุตร" case "4": return "ลาไปช่วยเหลือภริยาที่คลอดบุตร" case "5": return "ลาอุปสมบทหรือลาประกอบพิธีฮัจย์ฯ" case "6": return "ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล" case "7": return "ลาไปศึกษา ฝึกอบรม ปฎิบัติการวิจัย หรือดูงาน" case "8": return "ลาไปปฎิบัติงานในองค์การระหว่างประเทศ" case "9": return "ลาติดตามคู่สมรส" case "10": return "ลาไปฟื้นฟูสมรรถภาพด้านอาชีพ" } } function convertStatus(val: string) { switch (val) { case "0": return "ทั้งหมด" case "1": return "อนุมัติ" case "2": return "ไม่อนุมัติ" case "3": return "อยู่ระหว่างดำเนินการ" case "4": return "ใหม่" } } function convertYear(val: string) { switch (val) { case "0": return "ทั้งหมด" case "1": return "2566" case "2": return "2567" case "3": return "2568" case "4": return "2569" } } const optionsSpecific = ref([ { id: '0', name: "ลาไปศึกษา" }, { id: '1', name: "ฝึกอบรม" }, { id: '2', name: "ปฎิบัติการวิจัย" }, { id: '3', name: "ดูงาน" }, ]); const optionsOrdination = ref([ { id: '0', name: "ลาอุปสมบท" }, { id: '1', name: "ลาประกอบพิธีฮัจย์" }, ]); const typeOptions = ref([ { id: "0", name: "ทั้งหมด" }, { 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: "ลาไปฟื้นฟูสมรรถภาพด้านอาชีพ" }, ]) const options = ref([ { id: '0', name: "ลาป่วย" }, { 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: "ลาไปฟื้นฟูสมรรถภาพด้านอาชีพ" }, ]); const statusOptions = ref([ { id: "0", name: "ทั้งหมด" }, { id: "1", name: "อนุมัติ" }, { id: "2", name: "ไม่อนุมัติ" }, { id: "3", name: "อยู่ระหว่างดำเนินการ" }, { id: "4", name: "ใหม่" }, ]) const visibleColumns = ref(["no", "type", "date", "status"]) const columns = ref([ { name: "no", align: "left", label: "ลำดับ", sortable: true, field: "no", headerStyle: "font-size: 14px", style: "font-size: 14px; width:5%;", }, { name: "type", align: "left", label: "ประเภทการลา", sortable: true, field: "type", headerStyle: "font-size: 14px", style: "font-size: 14px; width:15%;", }, { name: "date", align: "left", label: "วันที่ยื่นใบลา", sortable: true, field: "date", 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%;", }, ]) function typeConvert(item: string,subitem:any) { console.log('first',item) if (item !== '5' && item !== '7') { typeLeave.value = convertSubtitle(item); }else if(item === '5'){ typeLeave.value = convertSubtitleInfo(subitem); }else if(item === '7'){ typeLeave.value = convertSubtitleInfo2(subitem); } } function convertSubtitle(val: string) { if (val) { switch (val) { case "0": return "ลาป่วย"; case "1": return "ลากิจส่วนตัว"; case "2": return "ลาคลอดบุตร"; case "3": return "ลาไปช่วยเหลือภริยาที่คลอดบุตร"; case "4": return "ลาพักผ่อน"; case "5": return "ลาอุปสมบทหรือลาประกอบพิธีฮัจย์ฯ"; case "6": return "ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล"; case "7": return "ลาไปศึกษา"; case "8": return "ลาไปปฎิบัติงานในองค์การระหว่างประเทศ"; case "9": return "ลาติดตามคู่สมรส"; case "10": return "ลาไปฟื้นฟูสมรรถภาพด้านอาชีพ"; } } } function convertSubtitleInfo(val: string) { if (val) { switch (val) { case "0": return "ลาอุปสมบท"; case "1": return "ลาประกอบพิธีฮัจย์"; } } } function convertSubtitleInfo2(val: string) { if (val) { switch (val) { case "0": return "ลาไปศึกษา"; case "1": return "ฝึกอบรม"; case "2": return "ปฎิบัติการวิจัย"; case "3": return "ดูงาน"; } } } return { typeOptions, optionsSpecific, statusOptions, DataMain, DataMainUpdate, DataUpdate, DataMainOrig, visibleColumns, columns, rows, LeaveType, LeaveStatus, fecthList, filterSelector, searchFilterTable, fiscalyearOP, fiscalYearyear, options, optionsOrdination, typeConvert, typeLeave } })