From 0c8e21d1226802e02d0267a6d7029a57090b5c63 Mon Sep 17 00:00:00 2001 From: "STW_TTTY\\stwtt" Date: Thu, 28 Mar 2024 17:04:24 +0700 Subject: [PATCH 01/16] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=20=E0=B8=A3?= =?UTF-8?q?=E0=B8=B2=E0=B8=A2=E0=B8=A5=E0=B8=B0=E0=B9=80=E0=B8=AD=E0=B8=B5?= =?UTF-8?q?=E0=B8=A2=E0=B8=94=E0=B9=80=E0=B8=A3=E0=B8=B7=E0=B9=88=E0=B8=AD?= =?UTF-8?q?=E0=B8=87=E0=B8=A5=E0=B8=B2=E0=B8=AD=E0=B8=AD=E0=B8=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/03_retire/views/addRetire.vue | 869 +++++++++++++--------- 1 file changed, 514 insertions(+), 355 deletions(-) diff --git a/src/modules/03_retire/views/addRetire.vue b/src/modules/03_retire/views/addRetire.vue index 8090194..e38ae32 100644 --- a/src/modules/03_retire/views/addRetire.vue +++ b/src/modules/03_retire/views/addRetire.vue @@ -1,425 +1,584 @@ From f1243f02ccaf7595a3bc53965da16403bfede5d8 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Thu, 28 Mar 2024 17:16:01 +0700 Subject: [PATCH 02/16] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B8=84?= =?UTF-8?q?=E0=B8=B3=E0=B8=9C=E0=B8=B4=E0=B8=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/MainLayout.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/MainLayout.vue b/src/views/MainLayout.vue index 5de1a24..5035a60 100644 --- a/src/views/MainLayout.vue +++ b/src/views/MainLayout.vue @@ -90,7 +90,7 @@ const fetchlistNotification = async (index: number, type: string) => { const doLogout = () => { $q.dialog({ title: "ยืนยันการออกจากระบบ", - message: `ต้องการออกจากระบบใช้หรือไม่?`, + message: `ต้องการออกจากระบบใช่หรือไม่?`, cancel: "ยกเลิก", ok: "ยืนยัน", persistent: true, From cf66659b9a0ae32acbfa2e12cf4667c99861da91 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Thu, 4 Apr 2024 14:14:25 +0700 Subject: [PATCH 03/16] =?UTF-8?q?=E0=B9=80=E0=B8=9E=E0=B8=B4=E0=B9=88?= =?UTF-8?q?=E0=B8=A1=E0=B9=80=E0=B8=A1=E0=B8=99=E0=B8=B9=20KPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/01_dashboard/views/Dashboard.vue | 8 +++++ src/modules/08_KPI/router.ts | 36 ++++++++++++++++++++ src/modules/08_KPI/store.ts | 5 +++ src/modules/08_KPI/views/form.vue | 28 +++++++++++++++ src/modules/08_KPI/views/main.vue | 28 +++++++++++++++ src/router/index.ts | 2 ++ 6 files changed, 107 insertions(+) create mode 100644 src/modules/08_KPI/router.ts create mode 100644 src/modules/08_KPI/store.ts create mode 100644 src/modules/08_KPI/views/form.vue create mode 100644 src/modules/08_KPI/views/main.vue diff --git a/src/modules/01_dashboard/views/Dashboard.vue b/src/modules/01_dashboard/views/Dashboard.vue index 39e0fd0..9a15af9 100644 --- a/src/modules/01_dashboard/views/Dashboard.vue +++ b/src/modules/01_dashboard/views/Dashboard.vue @@ -81,6 +81,14 @@ const items = ref([ path: "/appeal-complain", active: false, }, + { + icon: "mdi-account-box-outline", + title: "KPI", + sub: "ประเมินผลการปฏิบัติหน้าที่ราชการ", + color: "red-2", + path: "/KPI", + active: false, + }, ]); onMounted(async () => { await fetchlistInbox(1); diff --git a/src/modules/08_KPI/router.ts b/src/modules/08_KPI/router.ts new file mode 100644 index 0000000..d180e69 --- /dev/null +++ b/src/modules/08_KPI/router.ts @@ -0,0 +1,36 @@ +/** + * Router ขอโอน + */ + +const KPIPage = () => import("@/modules/08_KPI/views/main.vue"); +const FormPage = () => import("@/modules/08_KPI/views/form.vue"); + +export default [ + { + path: "/KPI", + name: "KPIMain", + component: KPIPage, + meta: { + Auth: true, + Key: [8], + }, + }, + { + path: "/KPI/add", + name: "KPIAdd", + component: FormPage, + meta: { + Auth: true, + Key: [8.1], + }, + }, + { + path: "/KPI/:id", + name: "KPIEdit", + component: FormPage, + meta: { + Auth: true, + Key: [8.2], + }, + }, +]; diff --git a/src/modules/08_KPI/store.ts b/src/modules/08_KPI/store.ts new file mode 100644 index 0000000..6a39078 --- /dev/null +++ b/src/modules/08_KPI/store.ts @@ -0,0 +1,5 @@ +import { defineStore } from "pinia"; + +export const useKpiDataStore = defineStore("KPIDate", () => { + return {}; +}); diff --git a/src/modules/08_KPI/views/form.vue b/src/modules/08_KPI/views/form.vue new file mode 100644 index 0000000..6346a0b --- /dev/null +++ b/src/modules/08_KPI/views/form.vue @@ -0,0 +1,28 @@ + + + diff --git a/src/modules/08_KPI/views/main.vue b/src/modules/08_KPI/views/main.vue new file mode 100644 index 0000000..2f36072 --- /dev/null +++ b/src/modules/08_KPI/views/main.vue @@ -0,0 +1,28 @@ + + + diff --git a/src/router/index.ts b/src/router/index.ts index d0f7fcb..15b040a 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -11,6 +11,7 @@ import ModuleLeave from "@/modules/05_leave/router"; import ModuEvaluate from "@/modules/06_evaluate/router"; import ModuAppealComplain from "@/modules/07_appealComplain/router"; import ModuleSupport from "@/modules/00_support/router"; +import ModuleKPI from "@/modules/08_KPI/router"; // TODO: ใช้หรือไม่? import keycloak from "@/plugins/keycloak"; @@ -47,6 +48,7 @@ const router = createRouter({ ...ModuEvaluate, ...ModuAppealComplain, ...ModuleSupport, + ...ModuleKPI, ], }, ], From 59aa022bab8a1b7e5ad4e71f5c4acbc8e084c748 Mon Sep 17 00:00:00 2001 From: "STW_TTTY\\stwtt" Date: Tue, 9 Apr 2024 15:22:23 +0700 Subject: [PATCH 04/16] UI KPI --- .../08_KPI/components/Tab/01_Assessment.vue | 85 ++++++ .../components/Tab/02_CommanderAbove.vue | 3 + .../Tab/03_CommanderAboveOneStep.vue | 3 + src/modules/08_KPI/components/Tab/04_File.vue | 3 + .../components/Tab/Dialog/01_Dialog.vue | 281 +++++++++++++++++ .../components/Tab/Dialog/03_Dialog.vue | 122 ++++++++ .../components/Tab/Dialog/04_Dialog.vue | 282 ++++++++++++++++++ .../components/Tab/Topic/01_Template.vue | 204 +++++++++++++ .../components/Tab/Topic/02_Template.vue | 187 ++++++++++++ src/modules/08_KPI/interface/index/Main.ts | 8 + src/modules/08_KPI/interface/request/index.ts | 22 ++ src/modules/08_KPI/store.ts | 4 +- src/modules/08_KPI/views/TabMain.vue | 78 +++++ src/modules/08_KPI/views/form.vue | 132 +++++++- src/modules/08_KPI/views/main.vue | 221 +++++++++++++- 15 files changed, 1629 insertions(+), 6 deletions(-) create mode 100644 src/modules/08_KPI/components/Tab/01_Assessment.vue create mode 100644 src/modules/08_KPI/components/Tab/02_CommanderAbove.vue create mode 100644 src/modules/08_KPI/components/Tab/03_CommanderAboveOneStep.vue create mode 100644 src/modules/08_KPI/components/Tab/04_File.vue create mode 100644 src/modules/08_KPI/components/Tab/Dialog/01_Dialog.vue create mode 100644 src/modules/08_KPI/components/Tab/Dialog/03_Dialog.vue create mode 100644 src/modules/08_KPI/components/Tab/Dialog/04_Dialog.vue create mode 100644 src/modules/08_KPI/components/Tab/Topic/01_Template.vue create mode 100644 src/modules/08_KPI/components/Tab/Topic/02_Template.vue create mode 100644 src/modules/08_KPI/interface/index/Main.ts create mode 100644 src/modules/08_KPI/interface/request/index.ts create mode 100644 src/modules/08_KPI/views/TabMain.vue diff --git a/src/modules/08_KPI/components/Tab/01_Assessment.vue b/src/modules/08_KPI/components/Tab/01_Assessment.vue new file mode 100644 index 0000000..1f45562 --- /dev/null +++ b/src/modules/08_KPI/components/Tab/01_Assessment.vue @@ -0,0 +1,85 @@ + + + diff --git a/src/modules/08_KPI/components/Tab/02_CommanderAbove.vue b/src/modules/08_KPI/components/Tab/02_CommanderAbove.vue new file mode 100644 index 0000000..e894c43 --- /dev/null +++ b/src/modules/08_KPI/components/Tab/02_CommanderAbove.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/modules/08_KPI/components/Tab/03_CommanderAboveOneStep.vue b/src/modules/08_KPI/components/Tab/03_CommanderAboveOneStep.vue new file mode 100644 index 0000000..cb489dc --- /dev/null +++ b/src/modules/08_KPI/components/Tab/03_CommanderAboveOneStep.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/modules/08_KPI/components/Tab/04_File.vue b/src/modules/08_KPI/components/Tab/04_File.vue new file mode 100644 index 0000000..c8199f4 --- /dev/null +++ b/src/modules/08_KPI/components/Tab/04_File.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/modules/08_KPI/components/Tab/Dialog/01_Dialog.vue b/src/modules/08_KPI/components/Tab/Dialog/01_Dialog.vue new file mode 100644 index 0000000..628e956 --- /dev/null +++ b/src/modules/08_KPI/components/Tab/Dialog/01_Dialog.vue @@ -0,0 +1,281 @@ + + + + diff --git a/src/modules/08_KPI/components/Tab/Dialog/03_Dialog.vue b/src/modules/08_KPI/components/Tab/Dialog/03_Dialog.vue new file mode 100644 index 0000000..3efe102 --- /dev/null +++ b/src/modules/08_KPI/components/Tab/Dialog/03_Dialog.vue @@ -0,0 +1,122 @@ + + + + diff --git a/src/modules/08_KPI/components/Tab/Dialog/04_Dialog.vue b/src/modules/08_KPI/components/Tab/Dialog/04_Dialog.vue new file mode 100644 index 0000000..6a31ada --- /dev/null +++ b/src/modules/08_KPI/components/Tab/Dialog/04_Dialog.vue @@ -0,0 +1,282 @@ + + + + diff --git a/src/modules/08_KPI/components/Tab/Topic/01_Template.vue b/src/modules/08_KPI/components/Tab/Topic/01_Template.vue new file mode 100644 index 0000000..ef5c41d --- /dev/null +++ b/src/modules/08_KPI/components/Tab/Topic/01_Template.vue @@ -0,0 +1,204 @@ + + + diff --git a/src/modules/08_KPI/components/Tab/Topic/02_Template.vue b/src/modules/08_KPI/components/Tab/Topic/02_Template.vue new file mode 100644 index 0000000..cda94dc --- /dev/null +++ b/src/modules/08_KPI/components/Tab/Topic/02_Template.vue @@ -0,0 +1,187 @@ + + + diff --git a/src/modules/08_KPI/interface/index/Main.ts b/src/modules/08_KPI/interface/index/Main.ts new file mode 100644 index 0000000..80143f3 --- /dev/null +++ b/src/modules/08_KPI/interface/index/Main.ts @@ -0,0 +1,8 @@ +interface DataOptions { + id:string + name:string +} + +export type { + DataOptions +} \ No newline at end of file diff --git a/src/modules/08_KPI/interface/request/index.ts b/src/modules/08_KPI/interface/request/index.ts new file mode 100644 index 0000000..b869e94 --- /dev/null +++ b/src/modules/08_KPI/interface/request/index.ts @@ -0,0 +1,22 @@ +interface FormProfile { + fullName: string; + prefix: string; + firstName: string; + lastName: string; + position: string; + type: string; + level: string; + status: string; + score: string; + + avartar:string +} + +interface FormDataAssigned{ + indicator:string + target:string + unit:string + weigth:string + definition:string +} +export type { FormProfile ,FormDataAssigned}; diff --git a/src/modules/08_KPI/store.ts b/src/modules/08_KPI/store.ts index 6a39078..7e9a157 100644 --- a/src/modules/08_KPI/store.ts +++ b/src/modules/08_KPI/store.ts @@ -1,5 +1,7 @@ import { defineStore } from "pinia"; +import { ref } from "vue"; export const useKpiDataStore = defineStore("KPIDate", () => { - return {}; + const tabMain = ref("1"); + return {tabMain}; }); diff --git a/src/modules/08_KPI/views/TabMain.vue b/src/modules/08_KPI/views/TabMain.vue new file mode 100644 index 0000000..fec1e92 --- /dev/null +++ b/src/modules/08_KPI/views/TabMain.vue @@ -0,0 +1,78 @@ + + + \ No newline at end of file diff --git a/src/modules/08_KPI/views/form.vue b/src/modules/08_KPI/views/form.vue index 6346a0b..1a56d0e 100644 --- a/src/modules/08_KPI/views/form.vue +++ b/src/modules/08_KPI/views/form.vue @@ -1,7 +1,56 @@ -
+
- ดาวน์โหลดไฟล์เอกสาร - + ดาวน์โหลดไฟล์
diff --git a/src/modules/09_scholarship/views/main.vue b/src/modules/09_scholarship/views/main.vue index 9ddc4cc..659b4f9 100644 --- a/src/modules/09_scholarship/views/main.vue +++ b/src/modules/09_scholarship/views/main.vue @@ -16,7 +16,7 @@ const router = useRouter(); const $q = useQuasar(); const filterKeyword = ref(""); -const profilId = ref('') +const profilId = ref(""); const currentPage = ref(1); const maxPage = ref(1); const page = ref(1); @@ -26,21 +26,22 @@ const rows = ref(); const year = ref(0); const type = ref("DOMESTICE"); const scholarshipTypeOp = ref([ - { - id: "DOMESTICE", - name: "การศึกษาในประเทศ", - }, + { id: "DOMESTICE", name: "การศึกษาในประเทศ" }, { id: "NOABROAD", - name: "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรที่ไม่มีการไปต่างประเทศ)", + name: "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยงานภายนอก (หลักสูตรที่ไม่มีการไปต่างประเทศ)", }, { id: "ABROAD", - name: "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรที่มีการไปต่างประเทศ)", + name: "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยงานภายนอก (หลักสูตรที่มีการไปต่างประเทศ)", }, { id: "EXECUTIVE", - name: "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรประเภทนักบริหาร)", + name: " ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยงานภายนอก (หลักสูตรประเภทนักบริหาร)", + }, + { + id: "RESEARCH", + name: "ศึกษา ฝึกอบรม ประชุม ดูงาน และปฏิบัติการวิจัย ณ ต่างประเทศ", }, ]); @@ -79,16 +80,14 @@ const visibleColumns = ref(["scholarshipYear", "scholarshipType"]); /** ดึงข้อมูล */ function getData() { http - .get(config.API.developmentScholarship+`/user/${profilId.value}`) - .then((res)=>{ - rows.value = res.data.result - }).catch((e)=>{ - messageError($q,e) - }).finally(()=>{ - - }) - - + .get(config.API.developmentScholarship + `/user/${profilId.value}`) + .then((res) => { + rows.value = res.data.result; + }) + .catch((e) => { + messageError($q, e); + }) + .finally(() => {}); } function onEdit(id: string) { @@ -117,8 +116,8 @@ function getProfileId() { http .get(config.API.profilePosition()) .then((res) => { - profilId.value = res.data.result.profileId - getData() + profilId.value = res.data.result.profileId; + getData(); }) .catch((e) => { messageError($q, e); @@ -129,17 +128,17 @@ function getProfileId() { } function convertType(val: string) { - switch (val) { - case "DOMESTICE": - return "การศึกษาในประเทศ"; - case "NOABROAD": - return "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรที่ไม่มีการไปต่างประเทศ)"; - case "ABROAD": - return "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรที่มีการไปต่างประเทศ)"; - case "EXECUTIVE": - return "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรประเภทนักบริหาร)"; - } + switch (val) { + case "DOMESTICE": + return "การศึกษาในประเทศ"; + case "NOABROAD": + return "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรที่ไม่มีการไปต่างประเทศ)"; + case "ABROAD": + return "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรที่มีการไปต่างประเทศ)"; + case "EXECUTIVE": + return "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรประเภทนักบริหาร)"; } +} onMounted(async () => { getProfileId(); @@ -299,7 +298,7 @@ onMounted(async () => { {{ col.value ? col.value + 543 : "-" }}
- {{ col.value ? convertType(col.value): "-" }} + {{ col.value ? convertType(col.value) : "-" }}
{{ col.value ? col.value : "-" }} From fce62f46ac0b0257e38df233fd2c93612fb6164f Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Thu, 18 Apr 2024 11:44:06 +0700 Subject: [PATCH 11/16] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B8=8A?= =?UTF-8?q?=E0=B8=B7=E0=B9=88=E0=B8=AD=E0=B9=84=E0=B8=9F=E0=B8=A5=E0=B9=8C?= =?UTF-8?q?=E0=B8=97=E0=B8=B8=E0=B8=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/09_scholarship/views/detail.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/modules/09_scholarship/views/detail.vue b/src/modules/09_scholarship/views/detail.vue index dc5c812..c6c08c8 100644 --- a/src/modules/09_scholarship/views/detail.vue +++ b/src/modules/09_scholarship/views/detail.vue @@ -292,8 +292,8 @@ async function clickUpload(file: any) { await http .post( config.API.developmentSalaryFile( - "พัฒนาบุคคล", - "ฟอร์มรายงานตัวกลับ", + "ระบบพัฒนาบุคคล", + "ฟอร์มรายงานตัวกลับเข้ารับราชการ", id.value ), { @@ -350,8 +350,8 @@ function getFile() { http .get( config.API.developmentSalaryFile( - "พัฒนาบุคคล", - "ฟอร์มรายงานตัวกลับ", + "ระบบพัฒนาบุคคล", + "ฟอร์มรายงานตัวกลับเข้ารับราชการ", id.value ) ) From 1993d72e049682ed855dc991de91d7ef2c52b7dc Mon Sep 17 00:00:00 2001 From: "STW_TTTY\\stwtt" Date: Thu, 18 Apr 2024 17:27:03 +0700 Subject: [PATCH 12/16] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=20=E0=B8=A3?= =?UTF-8?q?=E0=B8=B2=E0=B8=A2=E0=B8=81=E0=B8=B2=E0=B8=A3=E0=B8=97=E0=B8=B8?= =?UTF-8?q?=E0=B8=99=E0=B8=81=E0=B8=B2=E0=B8=A3=E0=B8=A8=E0=B8=B6=E0=B8=81?= =?UTF-8?q?=E0=B8=A9=E0=B8=B2/=E0=B8=9D=E0=B8=B6=E0=B8=81=E0=B8=AD?= =?UTF-8?q?=E0=B8=9A=E0=B8=A3=E0=B8=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../09_scholarship/interface/request/index.ts | 132 + src/modules/09_scholarship/views/detail.vue | 2939 ++++++++++++----- 2 files changed, 2170 insertions(+), 901 deletions(-) diff --git a/src/modules/09_scholarship/interface/request/index.ts b/src/modules/09_scholarship/interface/request/index.ts index e69de29..8b76853 100644 --- a/src/modules/09_scholarship/interface/request/index.ts +++ b/src/modules/09_scholarship/interface/request/index.ts @@ -0,0 +1,132 @@ +interface FormsSholarship { + profileId: string; + rank: string; //ยศ + prefix: string; //คำนำหน้าชื่อ + firstName: string; //ชื่อ + lastName: string; //นามสกุล + citizenId: string; //เลขประจำตัวประชาชน + position: string; //ตำแหน่ง + posExecutive: string; //ชื่อตำแหน่งทางการบริหาร + posLevelId: string | null; //ไอดีระดับตำแหน่ง + posTypeId: string | null; //ไอดีประเภทตำแหน่ง + org: string; + rootId: string | null; + root: string; + orgRootShortName: string; + orgRevisionId: string | null; + guarantorRank: string; //ยศ(ผู้ค้ำ) + guarantorPrefix: string; //คำนำหน้าชื่อ(ผู้ค้ำ) + guarantorFirstName: string; //ชื่อ(ผู้ค้ำ) + guarantorLastName: string; //นามสกุล(ผู้ค้ำ) + guarantorCitizenId: string; //เลขประจำตัวประชาชน(ผู้ค้ำ) + guarantorPosition: string; //ตำแหน่ง(ผู้ค้ำ) + guarantorPosExecutive: string; //ชื่อตำแหน่งทางการบริหาร(ผู้ค้ำ) + guarantorOrg: string; + guarantorRootId: string | null; + guarantorRoot: string; + guarantorOrgRootShortName: string; + guarantorOrgRevisionId: string | null; + posLevelguarantorId: string | null; //ไอดีระดับตำแหน่ง(ผู้ค้ำ) + posTypeguarantorId: string | null; //ไอดีประเภทตำแหน่ง(ผู้ค้ำ) + scholarshipYear: number | null; //ปีงบประมาณที่ได้รับทุน + budgetSource: string; //แหล่งงบประมาณ + budgetApprove: number | string | null; //งบประมาณที่ได้รับอนุมัติตลอดหลักสูตร + bookNo: string; //เลขที่หนังสืออนุมัติ + bookNoDate: Date | null; //ลงวันที่(หนังสือ) + bookApproveDate: Date | null; //หนังสืออนุมัติเมื่อวันที่ + useOfficialTime: boolean; //ใช้เวลาราชการ + changeDetail: string; //เปลี่ยนแปลงรายละเอียด + scholarshipType: string; //เลือกประเภททุน + fundType: string; //ประเภททุน + contractNo: string; //เลขที่สัญญา + contractDate: Date | null; //ลงวันที่(เลขที่สัญญา) + reportBackNo: string; //เลขที่หนังสือรายงานตัวกลับ + reportBackNoDate: Date | null; //ลงวันที่(เลขที่หนังสือรายงานตัวกลับ) + reportBackDate: Date | null; //รายงานตัวกลับวันที่ + degreeLevel: string; //ระดับปริญญา + course: string; //หลักสูตรการศึกษา/หลักสูตรการฝึกอบรม + field: string; //สาขาวิชา/สาขา + faculty: string; //คณะ + educationalInstitution: string; //สถาบันการศึกษา/สถาบันการศึกษา_หน่วยงานผู้จัดการฝึกอบรม/สถานที่ไปศึกษาดูงานในประเทศ + startDate: Date | null; //วันเริ่มต้นการศึกษา/วันเริ่มต้นการฝึกอบรม/วันเริ่มต้นการศึกษาดูงานในประเทศ + endDate: Date | null; //วันสิ้นสุดการศึกษา/วันสิ้นสุดการฝึกอบรม/วันสิ้นสุดการศึกษาดูงานในประเทศ + studyPlace: string; //สถานที่ไปศึกษาดูงาน + studyTopic: string; //หัวข้อการไปศึกษาดูงาน/หัวข้อการไปศึกษาดูงานในประเทศ + studyStartDate: Date | null; //วันเริ่มต้นการศึกษาดูงาน + studyEndDate: Date | null; //วันสิ้นสุดการศึกษาดูงาน + studyCountry: string; //ประเทศที่เดินทางไปศึกษาดูงาน + studyAbroadTopic: string; //หัวข้อการไปศึกษาดูงานต่างประเทศ + studyAbroadStartDate: Date | null; //วันเริ่มต้นการศึกษาดูงานต่างประเทศ + studyAbroadEndDate: Date | null; //วันสิ้นสุดการศึกษาดูงานต่างประเทศ + totalPeriod: string; //รวมระยะเวลาในการศึกษา/รวมระยะเวลาในการฝึกอบรม + planType: string; // INPLAN ในแผนฯ, OUTPLAN นอกแผนฯ + isNoUseBudget: boolean; // + } + + interface DataSholarship { + rank: string; //ยศ + prefix: string; //คำนำหน้าชื่อ + firstName: string; //ชื่อ + lastName: string; //นามสกุล + citizenId: string; //เลขประจำตัวประชาชน + position: string; //ตำแหน่ง + posExecutive: string; //ชื่อตำแหน่งทางการบริหาร + posLevelId: string; //ไอดีระดับตำแหน่ง + posTypeId: string; //ไอดีประเภทตำแหน่ง + posTypeName: string; //ไอดีระดับตำแหน่ง + posLevelName: string; //ไอดีประเภทตำแหน่ง + org: string; + guarantorRank: string; //ยศ(ผู้ค้ำ) + guarantorPrefix: string; //คำนำหน้าชื่อ(ผู้ค้ำ) + guarantorFirstName: string; //ชื่อ(ผู้ค้ำ) + guarantorLastName: string; //นามสกุล(ผู้ค้ำ) + guarantorCitizenId: string; //เลขประจำตัวประชาชน(ผู้ค้ำ) + guarantorPosition: string; //ตำแหน่ง(ผู้ค้ำ) + guarantorPosExecutive: string; //ชื่อตำแหน่งทางการบริหาร(ผู้ค้ำ) + guarantorOrg: string; + guarantorRootId: string | null; + guarantorRoot: string; + guarantorOrgRootShortName: string; + guarantorOrgRevisionId: string | null; + posLevelguarantorId: string; //ไอดีระดับตำแหน่ง(ผู้ค้ำ) + posTypeguarantorId: string; //ไอดีประเภทตำแหน่ง(ผู้ค้ำ) + posTypeguarantorName: string; //ไอดีระดับตำแหน่ง(ผู้ค้ำ) + posLevelguarantorName: string; //ไอดีประเภทตำแหน่ง(ผู้ค้ำ) + scholarshipYear: number | null; //ปีงบประมาณที่ได้รับทุน + budgetSource: string; //แหล่งงบประมาณ + budgetApprove: number | null; //งบประมาณที่ได้รับอนุมัติตลอดหลักสูตร + bookNo: string; //เลขที่หนังสืออนุมัติ + bookNoDate: Date | null; //ลงวันที่(หนังสือ) + bookApproveDate: Date | null; //หนังสืออนุมัติเมื่อวันที่ + useOfficialTime: boolean; //ใช้เวลาราชการ + changeDetail: string; //เปลี่ยนแปลงรายละเอียด + scholarshipType: string; //เลือกประเภททุน + fundType: string; //ประเภททุน + contractNo: string; //เลขที่สัญญา + contractDate: Date | null; //ลงวันที่(เลขที่สัญญา) + reportBackNo: string; //เลขที่หนังสือรายงานตัวกลับ + reportBackNoDate: Date | null; //ลงวันที่(เลขที่หนังสือรายงานตัวกลับ) + reportBackDate: Date | null; //รายงานตัวกลับวันที่ + degreeLevel: string; //ระดับปริญญา + course: string; //หลักสูตรการศึกษา/หลักสูตรการฝึกอบรม + field: string; //สาขาวิชา/สาขา + faculty: string; //คณะ + educationalInstitution: string; //สถาบันการศึกษา/สถาบันการศึกษา_หน่วยงานผู้จัดการฝึกอบรม/สถานที่ไปศึกษาดูงานในประเทศ + startDate: Date | null; //วันเริ่มต้นการศึกษา/วันเริ่มต้นการฝึกอบรม/วันเริ่มต้นการศึกษาดูงานในประเทศ + endDate: Date | null; //วันสิ้นสุดการศึกษา/วันสิ้นสุดการฝึกอบรม/วันสิ้นสุดการศึกษาดูงานในประเทศ + studyPlace: string; //สถานที่ไปศึกษาดูงาน + studyTopic: string; //หัวข้อการไปศึกษาดูงาน/หัวข้อการไปศึกษาดูงานในประเทศ + studyStartDate: Date | null; //วันเริ่มต้นการศึกษาดูงาน + studyEndDate: Date | null; //วันสิ้นสุดการศึกษาดูงาน + studyCountry: string; //ประเทศที่เดินทางไปศึกษาดูงาน + studyAbroadTopic: string; //หัวข้อการไปศึกษาดูงานต่างประเทศ + studyAbroadStartDate: Date | null; //วันเริ่มต้นการศึกษาดูงานต่างประเทศ + studyAbroadEndDate: Date | null; //วันสิ้นสุดการศึกษาดูงานต่างประเทศ + totalPeriod: string; //รวมระยะเวลาในการศึกษา/รวมระยะเวลาในการฝึกอบรม + status: string; + planType: string; // INPLAN ในแผนฯ, OUTPLAN นอกแผนฯ + isNoUseBudget: boolean; // ไม่ใช้งบประมาณ + } + + export type { FormsSholarship,DataSholarship }; + \ No newline at end of file diff --git a/src/modules/09_scholarship/views/detail.vue b/src/modules/09_scholarship/views/detail.vue index c6c08c8..aec400d 100644 --- a/src/modules/09_scholarship/views/detail.vue +++ b/src/modules/09_scholarship/views/detail.vue @@ -9,10 +9,17 @@ import http from "@/plugins/http"; import config from "@/app.config"; import type { DataOptions } from "@/modules/09_scholarship/interface/index/Main"; +import type { + FormsSholarship, + DataSholarship, +} from "@/modules/09_scholarship/interface/request/index"; import DialogReturn from "@/modules/09_scholarship/components/Dialog/DialogReturn.vue"; import genReport from "@/plugins/genreport"; +const isGuarantor = ref(false); +const isGov = ref(false); +const isStatus = ref(""); const fileList = ref(); const route = useRoute(); const $q = useQuasar(); @@ -40,25 +47,44 @@ const budgetSourceOp = ref([ { id: "OTHER", name: "เงินอื่น ๆ" }, ]); -const dataPerson = reactive({ - id: "", - citizenId: "", - name: "", - position: "", - type: "", - level: "", - positionSide: "", - org: "-", - planType: "", - scholarshipYear: null, - budgetSource: "", - budgetApprove: null, - isNoUseBudget: false, - bookNo: "", - bookNoDate: null, - bookApproveDate: null, - useOfficialTime: false, - changeDetail: "", +const formBody = reactive({ + profileId: "", + rank: "", //ยศ + prefix: "", //คำนำหน้าชื่อ + firstName: "", //ชื่อ + lastName: "", //นามสกุล + citizenId: "", //เลขประจำตัวประชาชน + position: "", //ตำแหน่ง + posExecutive: "", //ชื่อตำแหน่งทางการบริหาร + posLevelId: null, //ไอดีระดับตำแหน่ง + posTypeId: null, //ไอดีประเภทตำแหน่ง + org: "", + rootId: null, + root: "", + orgRootShortName: "", + orgRevisionId: null, + guarantorRank: "", //ยศ(ผู้ค้ำ) + guarantorPrefix: "", //คำนำหน้าชื่อ(ผู้ค้ำ) + guarantorFirstName: "", //ชื่อ(ผู้ค้ำ) + guarantorLastName: "", //นามสกุล(ผู้ค้ำ) + guarantorCitizenId: "", //เลขประจำตัวประชาชน(ผู้ค้ำ) + guarantorPosition: "", //ตำแหน่ง(ผู้ค้ำ) + guarantorPosExecutive: "", //ชื่อตำแหน่งทางการบริหาร(ผู้ค้ำ) + guarantorOrg: "", + guarantorRootId: null, + guarantorRoot: "", + guarantorOrgRootShortName: "", + guarantorOrgRevisionId: null, + posLevelguarantorId: null, //ไอดีระดับตำแหน่ง(ผู้ค้ำ) + posTypeguarantorId: null, //ไอดีประเภทตำแหน่ง(ผู้ค้ำ) + scholarshipYear: null, //ปีงบประมาณที่ได้รับทุน + budgetSource: "", //แหล่งงบประมาณ + budgetApprove: null, //งบประมาณที่ได้รับอนุมัติตลอดหลักสูตร + bookNo: "", //เลขที่หนังสืออนุมัติ + bookNoDate: null, //ลงวันที่(หนังสือ) + bookApproveDate: null, //หนังสืออนุมัติเมื่อวันที่ + useOfficialTime: false, //ใช้เวลาราชการ + changeDetail: "", //เปลี่ยนแปลงรายละเอียด scholarshipType: "", //เลือกประเภททุน fundType: "", //ประเภททุน contractNo: "", //เลขที่สัญญา @@ -66,7 +92,6 @@ const dataPerson = reactive({ reportBackNo: "", //เลขที่หนังสือรายงานตัวกลับ reportBackNoDate: null, //ลงวันที่(เลขที่หนังสือรายงานตัวกลับ) reportBackDate: null, //รายงานตัวกลับวันที่ - degreeLevel: "", //ระดับปริญญา course: "", //หลักสูตรการศึกษา/หลักสูตรการฝึกอบรม field: "", //สาขาวิชา/สาขา @@ -83,6 +108,19 @@ const dataPerson = reactive({ studyAbroadStartDate: null, //วันเริ่มต้นการศึกษาดูงานต่างประเทศ studyAbroadEndDate: null, //วันสิ้นสุดการศึกษาดูงานต่างประเทศ totalPeriod: "", //รวมระยะเวลาในการศึกษา/รวมระยะเวลาในการฝึกอบรม + planType: "", + isNoUseBudget: false, +}); + +const dataPerson = reactive({ + id: "", + citizenId: "", + name: "", + position: "", + type: "", + level: "", + positionSide: "", + org: "-", }); const dataGuarantor = reactive({ @@ -127,75 +165,6 @@ const fundTypeOp = ref([ { id: "FUND5", name: "ทุนส่วนตัว" }, ]); -function getDetail() { - showLoader(); - http - .get(config.API.developmentScholarship + `/${id.value}`) - .then((res) => { - const data = res.data.result; - dataPerson.citizenId = data.citizenId; - dataPerson.name = `${data.prefix}${data.firstName} ${data.lastName}`; - dataPerson.position = data.position; - dataPerson.type = data.posTypeName; - dataPerson.level = data.posLevelName; - dataPerson.positionSide = data.posExecutive; - dataPerson.org = data.org; // รอ API - dataPerson.planType = data.planType; - - dataPerson.scholarshipYear = data.scholarshipYear; - dataPerson.budgetSource = data.budgetSource; - dataPerson.budgetApprove = data.budgetApprove; - dataPerson.isNoUseBudget = data.isNoUseBudget; - dataPerson.bookNo = data.bookNo; - dataPerson.bookNoDate = data.bookNoDate; - dataPerson.bookApproveDate = data.bookApproveDate; - dataPerson.useOfficialTime = data.useOfficialTime; - dataPerson.changeDetail = data.changeDetail; - - dataPerson.scholarshipType = data.scholarshipType; - dataPerson.fundType = data.fundType; - - dataPerson.contractNo = data.contractNo; - dataPerson.contractDate = data.contractDate; - dataPerson.reportBackNo = data.reportBackNo; - dataPerson.reportBackNoDate = data.reportBackNoDate; - dataPerson.reportBackDate = data.reportBackDate; - - dataGuarantor.citizenId = data.guarantorCitizenId; - dataGuarantor.name = `${data.guarantorPrefix} ${data.guarantorFirstName} ${data.guarantorLastName}`; - dataGuarantor.prefix = data.guarantorPrefix; - dataGuarantor.firstName = data.guarantorFirstName; - dataGuarantor.lastName = data.guarantorLastName; - dataGuarantor.position = data.position; - dataGuarantor.type = data.posTypeguarantorName; - dataGuarantor.level = data.posLevelguarantorName; - dataGuarantor.positionSide = data.guarantorPosExecutive; - - dataPerson.degreeLevel = data.degreeLevel; - dataPerson.course = data.course; - dataPerson.field = data.field; - dataPerson.faculty = data.faculty; - dataPerson.educationalInstitution = data.educationalInstitution; - dataPerson.startDate = data.startDate; - dataPerson.endDate = data.endDate; - dataPerson.studyPlace = data.studyPlace; - dataPerson.studyTopic = data.studyTopic; - dataPerson.studyStartDate = data.studyStartDate; - dataPerson.studyEndDate = data.studyEndDate; - dataPerson.studyCountry = data.studyCountry; - dataPerson.studyAbroadTopic = data.studyAbroadTopic; - dataPerson.studyAbroadStartDate = data.studyAbroadStartDate; - dataPerson.studyAbroadEndDate = data.studyAbroadEndDate; - dataPerson.totalPeriod = data.totalPeriod; - }) - .catch((e) => { - messageError($q, e); - }) - .finally(() => { - hideLoader(); - }); -} - function updateTotalPeriod( startDate: any, endDate: any, @@ -204,37 +173,37 @@ function updateTotalPeriod( if (!toDo && startDate && endDate) { const start = new Date(startDate); const end = new Date(endDate); - dataPerson.totalPeriod = calculateDurationYmd(start, end); + formBody.totalPeriod = calculateDurationYmd(start, end); } } function changeStartDate(type: string) { switch (type) { case "startDate": - if (dataPerson?.startDate !== null && dataPerson?.endDate !== null) { - const startDate = new Date(dataPerson.startDate); - const endDate = new Date(dataPerson?.endDate); + if (formBody?.startDate !== null && formBody?.endDate !== null) { + const startDate = new Date(formBody.startDate); + const endDate = new Date(formBody?.endDate); if (startDate > endDate) { - dataPerson.endDate = null; + formBody.endDate = null; } } break; case "studyStartDate": if ( - dataPerson?.studyStartDate !== null && - dataPerson?.studyEndDate !== null + formBody?.studyStartDate !== null && + formBody?.studyEndDate !== null ) { - const startDate = new Date(dataPerson.studyStartDate); - const endDate = new Date(dataPerson?.studyEndDate); + const startDate = new Date(formBody.studyStartDate); + const endDate = new Date(formBody?.studyEndDate); if (startDate > endDate) { - dataPerson.studyEndDate = null; - if (dataPerson.scholarshipType === "NOABROAD") { - dataPerson.totalPeriod = ""; + formBody.studyEndDate = null; + if (formBody.scholarshipType === "NOABROAD") { + formBody.totalPeriod = ""; } } else { - if (dataPerson.scholarshipType === "NOABROAD") { - dataPerson.totalPeriod = calculateDurationYmd(startDate, endDate); + if (formBody.scholarshipType === "NOABROAD") { + formBody.totalPeriod = calculateDurationYmd(startDate, endDate); } } } @@ -242,15 +211,15 @@ function changeStartDate(type: string) { case "studyAbroadStartDate": if ( - dataPerson?.studyAbroadStartDate !== null && - dataPerson?.studyAbroadEndDate !== null + formBody?.studyAbroadStartDate !== null && + formBody?.studyAbroadEndDate !== null ) { - const startDate = new Date(dataPerson.studyAbroadStartDate); - const endDate = new Date(dataPerson?.studyAbroadEndDate); + const startDate = new Date(formBody.studyAbroadStartDate); + const endDate = new Date(formBody?.studyAbroadEndDate); if (startDate > endDate) { - dataPerson.studyAbroadEndDate = null; + formBody.studyAbroadEndDate = null; } else { - dataPerson.totalPeriod = calculateDurationYmd(startDate, endDate); + formBody.totalPeriod = calculateDurationYmd(startDate, endDate); } } break; @@ -334,7 +303,7 @@ async function uploadFileDoc(uploadUrl: string, file: any) { }) .then((res) => { success($q, "อัปโหลดไฟล์สำเร็จ"); - getDetail(); + fetchDataDetail(id.value); getFile(); }) .catch((e) => { @@ -385,8 +354,111 @@ function downloadFile(file: any) { hideLoader(); }); } + +function fetchDataDetail(id: string) { + showLoader(); + http + .get(config.API.developmentScholarship + `/${id}`) + .then((res) => { + const data: DataSholarship = res.data.result; + console.log(data); + formBody.rank = data.rank; + formBody.prefix = data.prefix; + formBody.firstName = data.firstName; + formBody.lastName = data.lastName; + formBody.citizenId = data.citizenId; + formBody.position = data.position; + formBody.posExecutive = data.posExecutive; + formBody.posLevelId = data.posLevelId; + formBody.posTypeId = data.posTypeId; + formBody.guarantorRank = data.guarantorRank; + formBody.guarantorPrefix = data.guarantorPrefix; + formBody.guarantorFirstName = data.guarantorFirstName; + formBody.guarantorLastName = data.guarantorLastName; + formBody.guarantorCitizenId = data.guarantorCitizenId; + formBody.guarantorPosition = data.guarantorPosition; + formBody.guarantorPosExecutive = data.guarantorPosExecutive; + formBody.guarantorOrg = data.guarantorOrg; + formBody.guarantorRootId = data.guarantorRootId; + formBody.guarantorRoot = data.guarantorRoot; + formBody.guarantorOrgRootShortName = data.guarantorOrgRootShortName; + formBody.guarantorOrgRevisionId = data.guarantorOrgRevisionId; + formBody.posLevelguarantorId = data.posLevelguarantorId; + formBody.posTypeguarantorId = data.posTypeguarantorId; + formBody.scholarshipYear = data.scholarshipYear; + formBody.budgetSource = data.budgetSource; + formBody.budgetApprove = data.budgetApprove; + formBody.bookNo = data.bookNo; + formBody.bookNoDate = data.bookNoDate; + formBody.bookApproveDate = data.bookApproveDate; + formBody.useOfficialTime = data.useOfficialTime + ? data.useOfficialTime + : false; + formBody.changeDetail = data.changeDetail; + formBody.scholarshipType = data.scholarshipType; + formBody.fundType = data.fundType; + formBody.contractNo = data.contractNo; + formBody.contractDate = data.contractDate; + formBody.reportBackNo = data.reportBackNo; + formBody.reportBackNoDate = data.reportBackNoDate; + formBody.reportBackDate = data.reportBackDate; + + formBody.degreeLevel = data.degreeLevel; + formBody.course = data.course; + formBody.field = data.field; + formBody.faculty = data.faculty; + formBody.educationalInstitution = data.educationalInstitution; + formBody.startDate = data.startDate; + formBody.endDate = data.endDate; + formBody.studyPlace = data.studyPlace; + formBody.studyTopic = data.studyTopic; + formBody.studyStartDate = data.studyStartDate; + formBody.studyEndDate = data.studyEndDate; + formBody.studyCountry = data.studyCountry; + formBody.studyAbroadTopic = data.studyAbroadTopic; + formBody.studyAbroadStartDate = data.studyAbroadStartDate; + formBody.studyAbroadEndDate = data.studyAbroadEndDate; + formBody.totalPeriod = data.totalPeriod; + formBody.planType = data.planType ? data.planType : ""; + formBody.isNoUseBudget = data.isNoUseBudget ? data.isNoUseBudget : false; + + dataPerson.citizenId = data.citizenId ? data.citizenId : "-"; + dataPerson.name = `${data.prefix}${data.firstName} ${data.lastName}`; + dataPerson.position = data.position ? data.position : "-"; + dataPerson.type = data.posTypeName ? data.posTypeName : "-"; + dataPerson.level = data.posLevelName ? data.posLevelName : "-"; + dataPerson.positionSide = data.posExecutive ? data.posExecutive : "-"; + dataPerson.org = data.org ? data.org : "-"; + + dataGuarantor.citizenId = data.guarantorCitizenId + ? data.guarantorCitizenId + : "-"; + dataGuarantor.name = `${data.guarantorPrefix}${data.guarantorFirstName} ${data.guarantorLastName}`; + dataGuarantor.position = data.position ? data.position : "-"; + dataGuarantor.type = data.posTypeguarantorName + ? data.posTypeguarantorName + : "-"; + dataGuarantor.level = data.posLevelguarantorName + ? data.posLevelguarantorName + : "-"; + dataGuarantor.positionSide = data.guarantorPosExecutive + ? data.guarantorPosExecutive + : "-"; + dataGuarantor.org = data.guarantorOrg ? data.guarantorOrg : "-"; + isStatus.value = data.status; + isGov.value = data.citizenId ? true : false; + isGuarantor.value = data.guarantorCitizenId ? true : false; + }) + .catch((err) => { + messageError($q, err); + }) + .finally(() => { + hideLoader(); + }); +} + onMounted(async () => { - await getDetail(); + await fetchDataDetail(id.value); await getFile(); }); @@ -406,171 +478,210 @@ onMounted(async () => { /> รายละเอียดทุนการศึกษา/ฝึกอบรม
-
- - -
-
- - - - - - - - แก้ไขข้อมูลรายงานตัวกลับเข้ารับราชการ - - - - - - - - ดาวน์โหลดฟอร์มต้นแบบ - - - - - - -
- -
- - - - -
-
- - ดาวน์โหลดไฟล์ -
+ + +
+
+ + + + + + + + แก้ไขข้อมูลรายงานตัวกลับเข้ารับราชการ + + + + + + + + ดาวน์โหลดฟอร์มต้นแบบ + + + + + +
- - -
- ข้อมูลราชการ -
- - -
-
-
-
เลขประจำตัวประชาชน
-
- {{ dataPerson.citizenId ? dataPerson.citizenId : "-" }} -
-
ชื่อ-นามสกุล
-
- {{ dataPerson.name ? dataPerson.name : "-" }} -
-
ตำแหน่ง
-
- {{ dataPerson.position ? dataPerson.position : "-" }} -
-
ประเภท
-
- {{ dataPerson.type ? dataPerson.type : "-" }} -
-
+ +
+ + + + +
+
+ + ดาวน์โหลดไฟล์ +
+
+ + + +
+ ข้อมูลราชการ +
+
+
+
+
+
เลขประจำตัวประชาชน
+
+ {{ dataPerson.citizenId }}
-
-
-
ระดับตำแหน่ง
-
- {{ dataPerson.level ? dataPerson.citizenId : "-" }} -
-
ตำแหน่งทางการบริหาร
-
- {{ dataPerson.positionSide ? dataPerson.name : "-" }} -
-
หน่วยงานที่สังกัด
-
- {{ dataPerson.org ? dataPerson.org : "-" }} -
-
+
ชื่อ-นามสกุล
+
+ {{ dataPerson.name }} +
+
ตำแหน่ง
+
+ {{ dataPerson.position }} +
+
ประเภทตำแหน่ง
+
+ {{ dataPerson.type }}
- - -
-
- -
+
+
+
ระดับตำแหน่ง
+
+ {{ dataPerson.level }} +
+
ตำแหน่งทางการบริหาร
+
+ {{ dataPerson.positionSide }} +
+
หน่วยงานที่สังกัด
+
+ {{ dataPerson.org }} +
+
+
+
+
+ + เลือกข้าราชการ + +
+ + +
+
+ +
+
+ +
+ +
+ + +
+ +