hrms-mgt/src/stores/structureTree.ts
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 faf9c4c7f3 fix Vue warn
2025-06-05 15:11:23 +07:00

126 lines
3.8 KiB
TypeScript

import { defineStore } from "pinia";
import { ref } from "vue";
import http from "@/plugins/http";
import config from "@/app.config";
import { useCounterMixin } from "@/stores/mixin";
import type {
DataStructureTree,
DataStrategy,
DataActing,
} from "@/interface/main";
const { showLoader, hideLoader } = useCounterMixin();
export const useStructureTree = defineStore("structureTree", () => {
const activeId = ref<string>("");
const dataStore = ref<{ [key: string]: DataStructureTree[] }>({});
const dataStrategy = ref<DataStrategy[]>([]);
const dataActing = ref<DataActing[]>([]);
/**
* fetch ข้อมูลโครงสร้างตามคีย์ของระบบ
* @param sysKey คีย์ของระบบ
* @param isLoad สถานะที่ใช้ในการแสดงตัวโหลด true = แสดง, false = ไม่แสดง
* @returns ข้อมูลโครงสร้าง
*/
async function fetchStructureTree(sysKey: string, isLoad: boolean = false) {
if (dataStore.value[sysKey]) {
return dataStore.value[sysKey] || [];
} else {
activeId.value === "" && (await fetchActive());
const data = await fetchData(sysKey, isLoad);
return data || [];
}
}
/**
* fetch ข้อมูลโครงสร้างองค์กรปัจจุบัน
*
* เช็ต activeId.value เป็นค่า data.activeId ที่ได้จากข้อมูลที่ดึงมา
*/
async function fetchActive() {
try {
const res = await http.get(config.API.activeOrganization);
const data = res.data.result;
activeId.value = data.activeId;
} catch (err) {
console.log(err);
}
}
/**
* fetch ข้อมูลโครงสร้างจาก API
* @param sysKey คีย์ของระบบ
* @param isLoad สถานะที่ใช้ในการแสดงตัวโหลด true = แสดง, false = ไม่แสดง
* @returns ข้อมูลโครงสร้าง
*
* เมื่อ isLoad เป็น true จะทำการแสดงตัวโหลด showLoader
* และเก็บค่าใน dataStore.value ตามคีย์ของระบบที่รับมา
*/
async function fetchData(sysKey: string, isLoad: boolean) {
isLoad && showLoader();
try {
const res = await http.get(
config.API.orgByIdSystem(activeId.value, sysKey)
);
const data = res.data.result;
dataStore.value[sysKey] = data;
return data;
} catch (err) {
console.log(err);
return [];
} finally {
isLoad && hideLoader();
}
}
/** function fetchTree ยุทธศาสตร์ / แผน*/
async function fetchTreeStrategy() {
if (dataStrategy.value.length > 0) {
return dataStrategy.value;
} else {
try {
showLoader();
const res = await http.get(config.API.devStrategy + `/edit/indicator`);
const data = res.data.result;
dataStrategy.value = data;
return data;
} catch (err) {
console.log(err);
} finally {
hideLoader();
}
}
}
/**
* function fetchTree รักษาการในตำแหน่ง
*/
async function fetchTreeActing(id: string) {
if (dataActing.value.length > 0) {
return dataActing.value;
} else {
try {
showLoader();
const res = await http.get(config.API.orgAct + `/${id}`);
const data = res.data.result;
dataActing.value = data;
return data;
} catch (err) {
console.log(err);
} finally {
hideLoader();
}
}
}
return {
activeId,
fetchStructureTree,
fetchTreeStrategy,
fetchTreeActing,
dataActing,
};
});