import { ref } from "vue"; import { defineStore } from "pinia"; import { useCounterMixin } from "@/stores/mixin"; import { useQuasar } from "quasar"; import http from "@/plugins/http"; import config from "@/app.config"; import type { RequestObject } from "@/modules/04_registryNew/interface/request/Profile"; import type { DataOption, InformationOps, } from "@/modules/04_registryNew/interface/index/Main"; export const useProfileDataStore = defineStore("profile", () => { const $q = useQuasar(); const mixin = useCounterMixin(); const { showLoader, hideLoader, date2Thai, messageError, convertDate, dateToISO, } = mixin; const retireDate = ref(); const defaultProfile: RequestObject = { bloodGroup: null, relationship: null, gender: null, posTypeId: "", posLevelId: "", religion: null, citizenId: "", telephoneNumber: null, nationality: null, ethnicity: null, birthDate: null, dateRetire: null, isProbation: false, keycloak: "", phone: null, email: null, position: "", lastName: "", firstName: "", prefix: "", rank: null, }; const Ops = ref({ prefixOps: [], rankOps: [], genderOps: [], bloodOps: [], statusOps: [], religionOps: [], employeeClassOps: [ { id: "perm", name: "ลูกจ้างประจำ" }, { id: "temp", name: "ลูกจ้างชั่วคราว" }, ], employeeTypeOps: [ { id: "gov", name: "งบประมาณเงินอุดหนุนรัฐบาล" }, { id: "bkk", name: "งบประมาณกรุงเทพมหานคร" }, ], }); const OpsFilter = ref({ prefixOps: [], rankOps: [], genderOps: [], bloodOps: [], statusOps: [], religionOps: [], employeeClassOps: [ { id: "perm", name: "ลูกจ้างประจำ" }, { id: "temp", name: "ลูกจ้างชั่วคราว" }, ], employeeTypeOps: [ { id: "gov", name: "งบประมาณเงินอุดหนุนรัฐบาล" }, { id: "bkk", name: "งบประมาณกรุงเทพมหานคร" }, ], }); const prefixOp = ref([ "นาย", "นาง", "นางสาว", "เด็กชาย", "เด็กหญิง", ]); function calculateAge(birthDate: Date | null) { if (!birthDate) return null; const birthDateTimeStamp = new Date(birthDate).getTime(); const now = new Date(); const diff = now.getTime() - birthDateTimeStamp; const ageDate = new Date(diff); const years = ageDate.getUTCFullYear() - 1970; const months = ageDate.getUTCMonth(); const days = ageDate.getUTCDate() - 1; const retire = new Date(birthDate); retire.setFullYear(retire.getFullYear() + 60); retireDate.value = retire if (years > 60) { return "อายุเกิน 60 ปี"; } return `${years} ปี ${months} เดือน ${days} วัน`; } const fetchPerson = async () => { showLoader(); await http .get(config.API.profileNewMetaMain) .then((res) => { const data = res.data.result; let optionbloodGroups: DataOption[] = []; data.bloodGroups.map((r: any) => { optionbloodGroups.push({ id: r.id.toString(), name: r.name.toString(), }); }); Ops.value.bloodOps = optionbloodGroups; OpsFilter.value.bloodOps = optionbloodGroups; let optiongenders: DataOption[] = []; data.genders.map((r: any) => { optiongenders.push({ id: r.id.toString(), name: r.name.toString(), }); }); Ops.value.genderOps = optiongenders; OpsFilter.value.genderOps = optiongenders; let optionprefixs: DataOption[] = []; data.prefixs.map((r: any) => { optionprefixs.push({ id: r.id.toString(), name: r.name.toString(), }); }); Ops.value.prefixOps = optionprefixs; OpsFilter.value.prefixOps = optionprefixs; let optionrank: DataOption[] = []; data.rank.map((r: any) => { optionrank.push({ id: r.id.toString(), name: r.name.toString(), }); }); Ops.value.rankOps = optionrank; OpsFilter.value.rankOps = optionrank; let optionrelationships: DataOption[] = []; data.relationships.map((r: any) => { optionrelationships.push({ id: r.id.toString(), name: r.name.toString(), }); }); Ops.value.statusOps = optionrelationships; OpsFilter.value.statusOps = optionrelationships; let optionreligions: DataOption[] = []; data.religions.map((r: any) => { optionreligions.push({ id: r.id.toString(), name: r.name.toString(), }); }); Ops.value.religionOps = optionreligions; OpsFilter.value.religionOps = optionreligions; }) .catch((e: any) => {}) .finally(() => { hideLoader(); }); }; const filterSelector = (val: any, update: Function, refData: string) => { switch (refData) { case "prefixOps": update(() => { Ops.value.prefixOps = OpsFilter.value.prefixOps.filter( (v: DataOption) => v.name.indexOf(val) > -1 ); }); break; case "rankOps": update(() => { Ops.value.rankOps = OpsFilter.value.rankOps.filter( (v: DataOption) => v.name.indexOf(val) > -1 ); }); break; case "genderOps": update(() => { Ops.value.genderOps = OpsFilter.value.genderOps.filter( (v: DataOption) => v.name.indexOf(val) > -1 ); }); break; case "bloodOps": update(() => { Ops.value.bloodOps = OpsFilter.value.bloodOps.filter( (v: DataOption) => v.name.indexOf(val) > -1 ); }); break; case "statusOps": update(() => { Ops.value.statusOps = OpsFilter.value.statusOps.filter( (v: DataOption) => v.name.indexOf(val) > -1 ); }); break; case "religionOps": update(() => { Ops.value.religionOps = OpsFilter.value.religionOps.filter( (v: DataOption) => v.name.indexOf(val) > -1 ); }); break; case "employeeClassOps": update(() => { Ops.value.employeeClassOps = OpsFilter.value.employeeClassOps.filter( (v: DataOption) => v.name.indexOf(val) > -1 ); }); break; case "employeeTypeOps": update(() => { Ops.value.employeeTypeOps = OpsFilter.value.employeeTypeOps.filter( (v: DataOption) => v.name.indexOf(val) > -1 ); }); break; default: break; } }; return { defaultProfile, retireDate, Ops, OpsFilter, calculateAge, fetchPerson, filterSelector, }; });