56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
|
|
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<string>("");
|
||
|
|
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,
|
||
|
|
};
|
||
|
|
});
|