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 1/6] =?UTF-8?q?=E0=B9=80=E0=B8=9E=E0=B8=B4=E0=B9=88?= =?UTF-8?q?=E0=B8=A1=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, + }; +}); From 96a1722435bb8a0b2cf62ac1944f6bdc9d9ba3e2 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Thu, 5 Sep 2024 10:07:52 +0700 Subject: [PATCH 2/6] fixing registy --- .../components/TableView.vue | 20 +++++++++++++------ .../interface/request/Main.ts | 1 + .../interface/response/Main.ts | 1 + src/modules/04_registryPerson/store.ts | 1 + src/modules/04_registryPerson/views/list.vue | 10 +++++----- 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/modules/04_registryPerson/components/TableView.vue b/src/modules/04_registryPerson/components/TableView.vue index e5b14f53f..d672f6bf6 100644 --- a/src/modules/04_registryPerson/components/TableView.vue +++ b/src/modules/04_registryPerson/components/TableView.vue @@ -352,9 +352,13 @@ watch( class="text-weight-medium" > {{ - `${props.row.prefix ? props.row.prefix : ""}${ - props.row.firstName - } ${props.row.lastName}` + `${ + props.row.rank + ? props.row.rank + : props.row.prefix + ? props.row.prefix + : "" + }${props.row.firstName} ${props.row.lastName}` }}
รายละเอียด {{ - `${props.row.prefix ? props.row.prefix : ""}${ - props.row.firstName - } ${props.row.lastName}` + `${ + props.row.rank + ? props.row.rank + : props.row.prefix + ? props.row.prefix + : "" + }${props.row.firstName} ${props.row.lastName}` }}
diff --git a/src/modules/04_registryPerson/interface/request/Main.ts b/src/modules/04_registryPerson/interface/request/Main.ts index ecda33aae..0d25eb0b2 100644 --- a/src/modules/04_registryPerson/interface/request/Main.ts +++ b/src/modules/04_registryPerson/interface/request/Main.ts @@ -3,6 +3,7 @@ interface FormFilter { pageSize: number; keyword: string; type: string; + searchType?: string; posType: string; posLevel: string; retireYear: string | null; diff --git a/src/modules/04_registryPerson/interface/response/Main.ts b/src/modules/04_registryPerson/interface/response/Main.ts index 5735b5363..2a290a06a 100644 --- a/src/modules/04_registryPerson/interface/response/Main.ts +++ b/src/modules/04_registryPerson/interface/response/Main.ts @@ -22,6 +22,7 @@ interface DataPerson { posTypeId: string; position: string; prefix: string; + rank?: string; } export type { DataType, DataLevel, DataPerson }; diff --git a/src/modules/04_registryPerson/store.ts b/src/modules/04_registryPerson/store.ts index 867a7e72d..3b4a67fd0 100644 --- a/src/modules/04_registryPerson/store.ts +++ b/src/modules/04_registryPerson/store.ts @@ -64,6 +64,7 @@ export const useRegistryNewDataStore = defineStore("registryNew", () => { isAll: true, nodeId: null, node: null, + searchType: "fullName", }); const labelOption = reactive({ diff --git a/src/modules/04_registryPerson/views/list.vue b/src/modules/04_registryPerson/views/list.vue index efeb09e1e..4e3f11c5f 100644 --- a/src/modules/04_registryPerson/views/list.vue +++ b/src/modules/04_registryPerson/views/list.vue @@ -34,7 +34,7 @@ const isShowFilter = ref(true); const isShowBtnFilter = ref(false); const empType = ref("officer"); // officer / employee / perm -const searchType = ref("fullName"); +// const searchType = ref("fullName"); const node = ref([]); const expanded = ref([]); const maxPage = ref(1); @@ -117,7 +117,7 @@ function fetchDataPerson() { if (store.formFilter.keyword) { queryParams = Object.assign({}, queryParams, { - searchField: searchType.value, + searchField: store.formFilter.searchType, searchKeyword: store.formFilter.keyword, }); } @@ -264,9 +264,9 @@ async function selectType() { empType.value === "officer" ? "เลือกหน่วยงาน/ส่วนราชการ" : "เลือกหน่วยงาน"; + store.formFilter.searchType = "fullName"; } else { // แต่ถ้าประเภทเดิมระบบจะใช้ filter เดิมที่เคยค้นหาไว้ - if ( store.formFilter.keyword != "" || store.labelOption.posType != "ทั้งหมด" || @@ -391,7 +391,7 @@ onMounted(async () => { { inset vertical class="lineFil" - v-if="empType !== 'officer'" + v-if="empType !== 'officer' && store.formFilter.nodeId" /> Date: Thu, 5 Sep 2024 10:54:04 +0700 Subject: [PATCH 3/6] =?UTF-8?q?=E0=B9=82=E0=B8=84=E0=B8=A3=E0=B8=87?= =?UTF-8?q?=E0=B8=AA=E0=B8=A3=E0=B9=89=E0=B8=B2=E0=B8=87=E0=B8=97=E0=B8=B0?= =?UTF-8?q?=E0=B9=80=E0=B8=9A=E0=B8=B5=E0=B8=A2=E0=B8=99=E0=B8=9B=E0=B8=A3?= =?UTF-8?q?=E0=B8=B0=E0=B8=A7=E0=B8=B1=E0=B8=95=E0=B8=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface/main.ts | 33 +++++++++- src/modules/04_registryPerson/views/list.vue | 9 ++- .../components/DialogSelectPos.vue | 62 ++++++------------- .../08_registryEmployee/views/Main.vue | 10 +-- src/stores/structureTree.ts | 32 ++++++++-- 5 files changed, 92 insertions(+), 54 deletions(-) diff --git a/src/interface/main.ts b/src/interface/main.ts index f34950b8f..edc4228f4 100644 --- a/src/interface/main.ts +++ b/src/interface/main.ts @@ -23,4 +23,35 @@ interface RoleData { parentNode: string; } -export type { DataOption, FormProfile, RoleData }; +interface DataStructureTree { + labelName: string; + orgCode: string; + orgLevel: number; + orgName: string; + orgRevisionId: string; + orgRootName: string; + orgTreeCode: string; + orgTreeFax: string; + orgTreeId: string; + orgTreeName: string; + orgTreeOrder: number; + orgTreePhoneEx: string; + orgTreePhoneIn: string; + orgTreeRank: string; + orgTreeRankSub: string; + orgTreeShortName: string; + responsibility: string; + totalPosition: number; + totalPositionCurrentUse: number; + totalPositionCurrentVacant: number; + totalPositionNextUse: number; + totalPositionNextVacant: number; + totalRootPosition: number; + totalRootPositionCurrentUse: number; + totalRootPositionCurrentVacant: number; + totalRootPositionNextUse: number; + totalRootPositionNextVacant: number; + children: DataStructureTree[]; +} + +export type { DataOption, FormProfile, RoleData, DataStructureTree }; diff --git a/src/modules/04_registryPerson/views/list.vue b/src/modules/04_registryPerson/views/list.vue index efeb09e1e..a63a89338 100644 --- a/src/modules/04_registryPerson/views/list.vue +++ b/src/modules/04_registryPerson/views/list.vue @@ -333,9 +333,11 @@ function clearSelect(t: string) { fetchDataPerson(); } +const isLoad = ref(false); async function fetchTree() { const data = await fetchStructureTree(route.meta.Key as string); if (data) { + isLoad.value = true; node.value = data; store.formFilter.node = nodeData.node; store.formFilter.nodeId = nodeData.nodeId; @@ -365,6 +367,11 @@ function updateSelectedTreeMain(data: any) { } } +/** callback function เมื่อมีการเปิด popup*/ +watch(selectNode, () => { + isLoad.value && hideLoader(); +}); + onMounted(async () => { selectType(); fetchTree(); @@ -453,7 +460,7 @@ onMounted(async () => { label-color="white" dropdown-icon="mdi-chevron-down" class="q-px-sm" - @click="() => (selectNode = true)" + @click="() => ((selectNode = true), showLoader())" >