import { defineStore } from "pinia"; import { ref, reactive } from "vue"; import { useCounterMixin } from "@/stores/mixin"; /** importType*/ import type { DateFilter } from "@/modules/09_leave/interface/request/leave"; import type { QTableProps } from "quasar"; import type { DataRows, ListLeave, } from "@/modules/09_leave/interface/response/leave"; import type { FremData } from "@/modules/09_leave/interface/request/leave"; import http from "@/plugins/http"; import config from "@/app.config"; const mixin = useCounterMixin(); const { date2Thai } = mixin; export const useLeavelistDataStore = defineStore("leave", () => { const dataToobar = ref([]); /** ข้อมูล Main*/ const tabMenu = ref("1"); /** ข้อมูล Tab 1*/ const tabView = ref("list"); /** filter*/ const filter = reactive({ year: new Date().getFullYear(), //*ปีในการยื่นขอใบลา(ใช้เป็น คศ.) type: "00000000-0000-0000-0000-000000000000", //*Id ประเภทการลา status: "ALL", //*สถานะการของลา keyword: "", //keyword ค้นหา }); /**ข้อมูลใน Table*/ const mainData = ref([]); const rows = ref([]); const columns = ref([]); const visibleColumns = ref([]); const leaveType = ref([]); /** * ฟังก์ชั่น fetchListLeave * @param data รับข้อมูลจาก Page */ async function fetchListLeave(data: ListLeave[]) { let datalist = data.map((e: ListLeave) => ({ id: e.id, leaveTypeName: e.leaveTypeName ?? "-", profileType: e.profileType ?? "-", leaveTypeId: e.leaveTypeId ?? "-", citizenId: e.citizenId ?? "-", leaveSubTypeName: e.leaveSubTypeName, leaveRange: e.leaveRange ?? "-", leaveRangeEnd: e.leaveRangeEnd ?? "-", fullName: e.fullName !== undefined && e.fullName !== null && e.fullName !== "" ? e.fullName : "-", agency: e.agency !== undefined && e.agency !== null && e.agency !== "" ? e.agency : "-", org: e.org !== undefined && e.org !== null && e.org !== "" ? e.org : "-", position: e.position ?? "-", level: e.level ?? "-", hajjDayStatus: e.hajjDayStatus, dateSendLeave: e.dateSendLeave && date2Thai(e.dateSendLeave), dateLeave: e.leaveStartDate && e.leaveEndDate ? e.leaveStartDate === e.leaveEndDate ? date2Thai(e.leaveEndDate) : `${date2Thai(e.leaveStartDate)}${ e.leaveRange !== "ALL" ? ` (${converstType(e.leaveRange)})` : "" } - ${date2Thai(e.leaveEndDate)}${ e.leaveRangeEnd !== "ALL" ? ` (${converstType(e.leaveRangeEnd)})` : "" }` : "-", status: e.status && convertSatatus(e.status), statusText: e.status, })); mainData.value = datalist; rows.value = mainData.value; } function converstType(val: string) { switch (val) { case "ALL": return ""; case "MORNING": return "ครึ่งวันเช้า"; case "AFTERNOON": return "ครึ่งวันบ่าย"; } } /** * ฟังก์ชั่น fetchListLeave * @param data รับข้อมูลจาก Page */ async function fetchListLeaveReject(data: any[]) { let datalist = data.map((e: FremData) => ({ id: e.id, profileType: e.profileType ?? "-", leaveTypeName: e.leaveTypeName, leaveSubTypeName: e.leaveSubTypeName, leaveTypeId: e.leaveTypeId, fullName: e.fullName, dateSendLeave: e.dateSendLeave && date2Thai(e.dateSendLeave), status: convertSatatus2(e.status), statusText: e.status, })); mainData.value = datalist; rows.value = mainData.value; } /** * ฟังก์ชั่นแปลงสถานะ tab1 * @param val ค่าสถานะ */ function convertSatatus(val: string) { switch (val) { case "NEW": return "ใหม่"; case "PENDING": return "กำลังดำเนินการ"; case "APPROVE": return "อนุญาต"; case "REJECT": return "ไม่อนุญาต"; case "DELETING": return "กำลังดำเนินการยกเลิก"; case "DELETE": return "ยกเลิกสำเร็จ"; } } /** * ฟังก์ชั่นแปลงสถานะ tab2 * @param val ค่าสถานะ */ function convertSatatus2(val: string) { switch (val) { case "NEW": return "ใหม่"; case "APPROVE": return "อนุญาต"; case "REJECT": return "ไม่อนุญาต"; } } /** * ฟังชั่นแปลงค่าการลา * @param val ค่าของการลา */ function convertLeaveDaytype(val: string) { switch (val) { case "ALL_DAY": return "ลาทั้งวัน"; case "HAFT_MORNING": return "ลาครึ่งวันเช้า"; case "HAFT_AFTERNOON": return "ลาครึ่งวันบ่าย"; } } /** function ข้อมูลประเภทการลา*/ async function leaveTypeList() { if (leaveType.value.length == 0) { await http.get(config.API.leaveType()).then((res) => { leaveType.value = res.data.result; leaveTypeOption(res.data.result); return res.data.result; }); } else { return leaveType.value; } } function colorType(val: string) { const dataType = leaveType.value.find((item: any) => item.id === val); switch (dataType.code) { case "LV-001": return "#FFD1D1"; // Light Red case "LV-002": return "#C8E6C9"; // Light Green case "LV-003": return "#BBDEFB"; // Light Blue case "LV-004": return "#E1BEE7"; // Light Purple case "LV-005": return "#DCEDC8"; // Light Lime case "LV-006": return "#FFE0B2"; // Light Orange case "LV-007": return "#FFECB3"; // Light Amber case "LV-008": return "#CFD8DC"; // Light Blue Grey case "LV-009": return "#FFCCBC"; // Light Deep Orange case "LV-010": return "#FFF9C4"; // Light Amber Lighten case "LV-011": return "#B2DFDB"; // Light Teal } } function leaveTypeOption(val: any) { dataToobar.value = leaveType.value.map((e: any) => ({ id: e.id, name: e.name, code: e.code, })); } return { dataToobar, tabMenu, filter, tabView, rows, fetchListLeave, columns, visibleColumns, fetchListLeaveReject, convertSatatus, convertLeaveDaytype, leaveType, colorType, converstType, leaveTypeOption, leaveTypeList, }; });