hrms-mgt/src/modules/04_registryPerson/store.ts
2024-08-14 16:09:05 +07:00

93 lines
2.6 KiB
TypeScript

import { defineStore } from "pinia";
import { ref, reactive } from "vue";
import type { DataOption } from "@/modules/04_registryPerson/interface/index/Main";
import type {
DataType,
DataLevel,
} from "@/modules/04_registryPerson/interface/response/Main";
import type { FormFilter } from "@/modules/04_registryPerson/interface/request/Main";
export const useRegistryNewDataStore = defineStore("registryNew", () => {
const searchTypeOption = ref<DataOption[]>([
{ id: "fullName", name: "ชื่อ-นามสกุล" },
{ id: "citizenId", name: "เลขประจำตัวประชาชน" },
{ id: "position", name: "ตำแหน่งในสายงาน" },
{ id: "posNo", name: "ตำแหน่งเลขที่" },
]);
const employeeClassOps = ref<DataOption[]>([
{ id: "officer", name: "ข้าราชการ กทม.สามัญ" },
{ id: "perm", name: "ลูกจ้างประจำ" },
// { id: "temp", name: "ลูกจ้างชั่วคราว" },
]);
const posTypeOps = ref<DataOption[]>([]);
const posTypeMain = ref<DataType[]>([]);
const posLevelOps = ref<DataOption[]>([]);
const yearOps = ref<DataOption[]>([]);
const mode = ref<string>("table");
function fetchType(data: DataType[]) {
posTypeMain.value = data;
const list: DataOption[] = data.map((e: DataType) => ({
id: e.id,
name: e.posTypeName,
}));
posTypeOps.value = list;
}
function fetchLevel(data: DataLevel[]) {
const list: DataOption[] = data.map((e: DataLevel) => ({
id: e.id,
name: e.posLevelName,
}));
const seen = new Set();
posLevelOps.value = list.filter((item: DataOption) => {
if (seen.has(item.name)) {
return false;
} else {
seen.add(item.name);
return true;
}
});
}
const formFilter = reactive<FormFilter>({
page: 1,
pageSize: 12,
keyword: "",
type: "officer",
posType: "",
posLevel: "",
retireYear: "",
rangeYear: { min: 0, max: 60 },
isShowRetire: false,
isProbation: false,
});
const labelOption = reactive({
type: "ข้าราชการ กทม.สามัญ",
posType: "ทั้งหมด",
posLevel: "ทั้งหมด",
retireYear: "",
node: "เลือกหน่วยงาน",
});
const nodeData = reactive<any>({
nodeId: null,
node: null,
});
return {
fetchType,
fetchLevel,
posTypeMain,
searchTypeOption,
employeeClassOps,
posTypeOps,
posLevelOps,
yearOps,
mode,
formFilter,
labelOption,
nodeData
};
});