From 3666cd61a9be82e412a0506dfcaa12e5e4dae864 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Wed, 4 Sep 2024 17:38:52 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B9=80=E0=B8=9E=E0=B8=B4=E0=B9=88=E0=B8=A1?= =?UTF-8?q?=20function=20fetchStructureTree?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/04_registryPerson/views/list.vue | 49 ++++------------- src/stores/structureTree.ts | 55 ++++++++++++++++++++ 2 files changed, 65 insertions(+), 39 deletions(-) create mode 100644 src/stores/structureTree.ts diff --git a/src/modules/04_registryPerson/views/list.vue b/src/modules/04_registryPerson/views/list.vue index e5f5b9d83..efeb09e1e 100644 --- a/src/modules/04_registryPerson/views/list.vue +++ b/src/modules/04_registryPerson/views/list.vue @@ -20,9 +20,11 @@ import DialogHeader from "@/components/DialogHeader.vue"; import { useRegistryNewDataStore } from "@/modules/04_registryPerson/store"; import { useCounterMixin } from "@/stores/mixin"; import { useRoute } from "vue-router"; +import { useStructureTree } from "@/stores/structureTree"; const $q = useQuasar(); const store = useRegistryNewDataStore(); +const { fetchStructureTree } = useStructureTree(); const { showLoader, hideLoader, messageError } = useCounterMixin(); const route = useRoute(); @@ -331,36 +333,13 @@ function clearSelect(t: string) { fetchDataPerson(); } -async function fetchTree(id: string) { - showLoader(); - http - .get(config.API.orgByIdSystem(id, route.meta.Key as string)) - .then((res) => { - const data = res.data.result; - node.value = data; - store.formFilter.node = nodeData.node; - store.formFilter.nodeId = nodeData.nodeId; - }) - .catch((err) => { - messageError($q, err); - }) - .finally(() => { - hideLoader(); - }); -} - -function fetchActive() { - showLoader(); - http - .get(config.API.activeOrganization) - .then((res) => { - const data = res.data.result; - fetchTree(data.activeId); - }) - .catch((err) => { - messageError($q, err); - hideLoader(); - }); +async function fetchTree() { + const data = await fetchStructureTree(route.meta.Key as string); + if (data) { + node.value = data; + store.formFilter.node = nodeData.node; + store.formFilter.nodeId = nodeData.nodeId; + } } function sendNode() { @@ -371,15 +350,6 @@ function sendNode() { fetchDataPerson(); } -watch( - () => selectNode.value, - () => { - if (selectNode.value) { - fetchActive(); - } - } -); - function updateSelectedTreeMain(data: any) { if (nodeData.node === data.orgLevel && nodeData.nodeId === data.orgTreeId) { store.formFilter.node = null; @@ -397,6 +367,7 @@ function updateSelectedTreeMain(data: any) { onMounted(async () => { selectType(); + fetchTree(); }); diff --git a/src/stores/structureTree.ts b/src/stores/structureTree.ts new file mode 100644 index 000000000..b5e2cf513 --- /dev/null +++ b/src/stores/structureTree.ts @@ -0,0 +1,55 @@ +import { defineStore } from "pinia"; +import { ref } from "vue"; +import { useQuasar } from "quasar"; + +import http from "@/plugins/http"; +import config from "@/app.config"; +import { useCounterMixin } from "@/stores/mixin"; + +const $q = useQuasar(); +const { showLoader, hideLoader, messageError } = useCounterMixin(); + +export const useStructureTree = defineStore("structureTree", () => { + const activeId = ref(""); + const dataStore = ref<{ [key: string]: any[] }>({}); + + async function fetchStructureTree(sysKey: string) { + if (dataStore.value[sysKey]) { + return dataStore.value[sysKey] || []; + } else { + activeId.value === "" && (await fetchActive()); + const data = await fetchData(sysKey); + return data || []; + } + } + + async function fetchActive() { + try { + const res = await http.get(config.API.activeOrganization); + const data = res.data.result; + activeId.value = data.activeId; + } catch (err) { + messageError($q, err); + } + } + + async function fetchData(sysKey: string) { + // 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) { + messageError($q, err); + } finally { + hideLoader(); + } + } + + return { + fetchStructureTree, + }; +});