hrms-mgt/src/modules/09_leave/stores/LeaveStore.ts

235 lines
6.8 KiB
TypeScript
Raw Normal View History

2023-10-06 13:32:54 +07:00
import { defineStore } from "pinia";
2023-12-08 16:05:56 +07:00
import { ref, reactive } from "vue";
2023-10-06 13:32:54 +07:00
import { useCounterMixin } from "@/stores/mixin";
/** importType*/
2023-12-08 16:05:56 +07:00
import type { DateFilter } from "@/modules/09_leave/interface/request/leave";
2023-10-20 16:57:32 +07:00
import type { QTableProps } from "quasar";
2023-12-08 16:05:56 +07:00
import type {
DataRows,
ListLeave,
} from "@/modules/09_leave/interface/response/leave";
2023-11-17 15:28:03 +07:00
import type { FremData } from "@/modules/09_leave/interface/request/leave";
2025-04-29 22:07:31 +07:00
import http from "@/plugins/http";
import config from "@/app.config";
2023-10-06 13:32:54 +07:00
const mixin = useCounterMixin();
2024-09-18 17:26:53 +07:00
const { date2Thai } = mixin;
2023-10-06 13:32:54 +07:00
export const useLeavelistDataStore = defineStore("leave", () => {
2025-03-27 10:47:56 +07:00
const dataToobar = ref<any[]>([]);
/** ข้อมูล Main*/
const tabMenu = ref<string>("1");
/** ข้อมูล Tab 1*/
const tabView = ref<string>("list");
2023-12-08 16:05:56 +07:00
/** filter*/
const filter = reactive<DateFilter>({
year: new Date().getFullYear(), //*ปีในการยื่นขอใบลา(ใช้เป็น คศ.)
type: "00000000-0000-0000-0000-000000000000", //*Id ประเภทการลา
2024-01-10 17:33:31 +07:00
status: "NEW", //*สถานะการของลา
2023-12-08 16:05:56 +07:00
keyword: "", //keyword ค้นหา
});
/**ข้อมูลใน Table*/
const mainData = ref<any>([]);
2025-04-04 14:37:39 +07:00
const rows = ref<DataRows[]>([]);
const columns = ref<QTableProps["columns"]>([]);
const visibleColumns = ref<string[]>([]);
2023-11-17 15:28:03 +07:00
2023-12-07 18:01:37 +07:00
const leaveType = ref<any>([]);
/**
* fetchListLeave
* @param data Page
*/
2023-12-08 16:05:56 +07:00
async function fetchListLeave(data: ListLeave[]) {
let datalist = data.map((e: ListLeave) => ({
id: e.id,
leaveTypeName: e.leaveTypeName ?? "-",
2025-03-05 15:13:40 +07:00
profileType: e.profileType ?? "-",
leaveTypeId: e.leaveTypeId ?? "-",
citizenId: e.citizenId ?? "-",
2025-04-25 16:55:17 +07:00
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 ?? "-",
2024-09-03 11:28:01 +07:00
hajjDayStatus: e.hajjDayStatus,
dateSendLeave: e.dateSendLeave && date2Thai(e.dateSendLeave),
dateLeave:
2024-01-17 16:58:49 +07:00
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)})`
: ""
}`
2024-01-17 16:58:49 +07:00
: "-",
2023-12-08 16:05:56 +07:00
status: e.status && convertSatatus(e.status),
}));
mainData.value = datalist;
2025-04-04 14:37:39 +07:00
rows.value = mainData.value;
}
2025-04-25 16:55:17 +07:00
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,
2025-03-27 10:47:56 +07:00
profileType: e.profileType ?? "-",
leaveTypeName: e.leaveTypeName,
2025-04-25 16:55:17 +07:00
leaveSubTypeName: e.leaveSubTypeName,
leaveTypeId: e.leaveTypeId,
2023-12-08 16:05:56 +07:00
fullName: e.fullName,
dateSendLeave: e.dateSendLeave && date2Thai(e.dateSendLeave),
status: convertSatatus2(e.status),
}));
2023-11-08 18:02:52 +07:00
mainData.value = datalist;
2023-11-17 15:28:03 +07:00
rows.value = mainData.value;
}
2023-10-06 13:32:54 +07:00
/**
* tab1
* @param val
*/
function convertSatatus(val: string) {
switch (val) {
2023-11-03 15:08:53 +07:00
case "NEW":
return "ใหม่";
2023-11-03 15:08:53 +07:00
case "PENDING":
return "กำลังดำเนินการ";
2023-11-03 15:08:53 +07:00
case "APPROVE":
return "อนุญาต";
2023-11-03 15:08:53 +07:00
case "REJECT":
return "ไม่อนุญาต";
2023-12-08 16:05:56 +07:00
case "DELETE":
return "ยกเลิก";
2023-10-06 13:32:54 +07:00
}
}
/**
* tab2
* @param val
*/
function convertSatatus2(val: string) {
switch (val) {
case "NEW":
return "ใหม่";
case "APPROVE":
return "อนุญาต";
case "REJECT":
return "ไม่อนุญาต";
}
}
/**
*
* @param val
*/
2023-11-08 18:02:52 +07:00
function convertLeaveDaytype(val: string) {
switch (val) {
case "ALL_DAY":
2023-11-08 18:02:52 +07:00
return "ลาทั้งวัน";
case "HAFT_MORNING":
2023-11-08 18:02:52 +07:00
return "ลาครึ่งวันเช้า";
case "HAFT_AFTERNOON":
2023-11-08 18:02:52 +07:00
return "ลาครึ่งวันบ่าย";
2023-11-06 12:12:54 +07:00
}
}
2025-04-29 22:07:31 +07:00
/** 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;
}
}
2023-12-07 18:01:37 +07:00
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
}
}
2025-03-27 10:47:56 +07:00
function leaveTypeOption(val: any) {
2025-04-29 22:07:31 +07:00
dataToobar.value = leaveType.value.map((e: any) => ({
2025-03-27 10:47:56 +07:00
id: e.id,
name: e.name,
2025-04-25 16:55:17 +07:00
code: e.code,
2025-03-27 10:47:56 +07:00
}));
}
return {
2025-03-27 10:47:56 +07:00
dataToobar,
tabMenu,
2023-12-08 16:05:56 +07:00
filter,
tabView,
rows,
fetchListLeave,
columns,
visibleColumns,
fetchListLeaveReject,
convertSatatus,
2023-11-08 18:02:52 +07:00
convertLeaveDaytype,
2023-12-07 18:01:37 +07:00
leaveType,
colorType,
2025-04-25 16:55:17 +07:00
converstType,
2025-03-27 10:47:56 +07:00
leaveTypeOption,
2025-04-29 22:07:31 +07:00
leaveTypeList,
};
});