From 58cbeb108dfe396cd43527b45db84d9fc063cda9 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Thu, 21 Aug 2025 14:10:36 +0700 Subject: [PATCH 01/11] fix: import not use & change const to let --- src/api/06_retirement/api.retirement.ts | 4 ++-- src/modules/02_organization/components/DialogMovePos.vue | 2 +- src/modules/02_organization/components/DialogSuccession.vue | 2 +- src/modules/02_organization/components/MainView.vue | 2 +- src/modules/02_organization/components/TableMain.vue | 2 +- src/modules/15_development/components/Target.vue | 6 ++---- .../16_positionEmployee/components/DialogMovePos.vue | 2 +- .../16_positionEmployee/components/DialogSuccession.vue | 2 +- src/modules/16_positionEmployee/components/TableMain.vue | 2 +- src/modules/16_positionEmployee/views/main.vue | 2 +- src/modules/20_positionTemp/components/DialogMovePos.vue | 2 +- src/modules/20_positionTemp/components/DialogSuccession.vue | 2 +- src/modules/20_positionTemp/components/TableMain.vue | 2 +- src/modules/20_positionTemp/views/main.vue | 2 +- 14 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/api/06_retirement/api.retirement.ts b/src/api/06_retirement/api.retirement.ts index 8de51249b..fd0149446 100644 --- a/src/api/06_retirement/api.retirement.ts +++ b/src/api/06_retirement/api.retirement.ts @@ -1,4 +1,3 @@ -import path from "path"; import env from "../index"; const retirement = `${env.API_URI}/retirement`; const retirementDischarge = `${retirement}/discharge`; @@ -107,5 +106,6 @@ export default { `${retirement}/resign${typeEmp}/admin-cancel/${action}/${id}`, // แก้ไขข้อมูลการลาออก - updateResign: (path: string, id: string) => `${retirement}/${path}/admin-update/resign-info/${id}`, + updateResign: (path: string, id: string) => + `${retirement}/${path}/admin-update/resign-info/${id}`, }; diff --git a/src/modules/02_organization/components/DialogMovePos.vue b/src/modules/02_organization/components/DialogMovePos.vue index f00a64f46..e19999482 100644 --- a/src/modules/02_organization/components/DialogMovePos.vue +++ b/src/modules/02_organization/components/DialogMovePos.vue @@ -45,7 +45,7 @@ const { * props */ const modal = defineModel("modal", { required: true }); -const reqMaster = defineModel("reqMaster", { required: true }); +let reqMaster = defineModel("reqMaster", { required: true }); const totalPage = defineModel("totalPage", { required: true }); const nodeTree = defineModel("nodeTree", { required: true }); const columns = defineModel("columns", {}); diff --git a/src/modules/02_organization/components/DialogSuccession.vue b/src/modules/02_organization/components/DialogSuccession.vue index 065c4e9b3..c820f1334 100644 --- a/src/modules/02_organization/components/DialogSuccession.vue +++ b/src/modules/02_organization/components/DialogSuccession.vue @@ -112,7 +112,7 @@ const columns = ref([ }, ]); const rows = ref([]); //รายการตำแหน่ง -const reqMaster = reactive({ +let reqMaster = reactive({ id: "", type: 0, isAll: false, diff --git a/src/modules/02_organization/components/MainView.vue b/src/modules/02_organization/components/MainView.vue index bbe2b8f88..8d2138358 100644 --- a/src/modules/02_organization/components/MainView.vue +++ b/src/modules/02_organization/components/MainView.vue @@ -41,7 +41,7 @@ const mainTree = ref(); const selected = ref(""); -const reqMaster = reactive({ +let reqMaster = reactive({ id: "", type: 0, isAll: false, diff --git a/src/modules/02_organization/components/TableMain.vue b/src/modules/02_organization/components/TableMain.vue index 8017eadab..18fcdbf3c 100644 --- a/src/modules/02_organization/components/TableMain.vue +++ b/src/modules/02_organization/components/TableMain.vue @@ -42,7 +42,7 @@ const { showLoader, hideLoader, messageError, success, dialogRemove } = const nodeTree = defineModel("nodeTree", { required: true }); const orgLevel = defineModel("orgLevel", { required: true }); const treeId = defineModel("treeId", { required: true }); -const reqMaster = defineModel("reqMaster", { required: true }); +let reqMaster = defineModel("reqMaster", { required: true }); const totalPage = defineModel("totalPage", { required: true }); const totalData = defineModel("totalData", { required: true }); const posMaster = defineModel("posMaster", { required: true }); diff --git a/src/modules/15_development/components/Target.vue b/src/modules/15_development/components/Target.vue index be108f377..73085fc29 100644 --- a/src/modules/15_development/components/Target.vue +++ b/src/modules/15_development/components/Target.vue @@ -722,7 +722,8 @@ onMounted(() => { {{ `- ${row.position}` }}{{ props.row.groupTarget === "OFFICER" && - (row.posType && row.posLevel) + row.posType && + row.posLevel ? ` (${ row.posType && (row.posType == "อำนวยการ" || @@ -935,9 +936,6 @@ onMounted(() => {
{{ col.value ? col.value : "-" }}
-
- {{ col.value ? col.value : "-" }} -
diff --git a/src/modules/16_positionEmployee/components/DialogMovePos.vue b/src/modules/16_positionEmployee/components/DialogMovePos.vue index 683ebb520..97fd67813 100644 --- a/src/modules/16_positionEmployee/components/DialogMovePos.vue +++ b/src/modules/16_positionEmployee/components/DialogMovePos.vue @@ -47,7 +47,7 @@ const { * props */ const modal = defineModel("modal", { required: true }); -const reqMaster = defineModel("reqMaster", { required: true }); +let reqMaster = defineModel("reqMaster", { required: true }); const totalPage = defineModel("totalPage", { required: true }); const nodeTree = defineModel("nodeTree", { required: true }); const columns = defineModel("columns", {}); diff --git a/src/modules/16_positionEmployee/components/DialogSuccession.vue b/src/modules/16_positionEmployee/components/DialogSuccession.vue index ef7f0e11a..7674c2df8 100644 --- a/src/modules/16_positionEmployee/components/DialogSuccession.vue +++ b/src/modules/16_positionEmployee/components/DialogSuccession.vue @@ -111,7 +111,7 @@ const columns = ref([ }, ]); const rows = ref([]); -const reqMaster = reactive({ +let reqMaster = reactive({ id: "", type: 0, isAll: false, diff --git a/src/modules/16_positionEmployee/components/TableMain.vue b/src/modules/16_positionEmployee/components/TableMain.vue index e01f1cdcd..7c95ae700 100644 --- a/src/modules/16_positionEmployee/components/TableMain.vue +++ b/src/modules/16_positionEmployee/components/TableMain.vue @@ -49,7 +49,7 @@ const { showLoader, hideLoader, messageError, success, dialogRemove } = const nodeTree = defineModel("nodeTree", { required: true }); const orgLevel = defineModel("orgLevel", { required: true }); const treeId = defineModel("treeId", { required: true }); -const reqMaster = defineModel("reqMaster", { required: true }); +let reqMaster = defineModel("reqMaster", { required: true }); const totalPage = defineModel("totalPage", { required: true }); const totalData = defineModel("totalData", { required: true }); const posMaster = defineModel("posMaster", { required: true }); diff --git a/src/modules/16_positionEmployee/views/main.vue b/src/modules/16_positionEmployee/views/main.vue index be93f487b..b34e8bf01 100644 --- a/src/modules/16_positionEmployee/views/main.vue +++ b/src/modules/16_positionEmployee/views/main.vue @@ -39,7 +39,7 @@ const isLoadTree = ref(false); // loadTable const mainTree = ref(); const selected = ref(""); -const reqMaster = reactive({ +let reqMaster = reactive({ id: "", type: 0, isAll: false, diff --git a/src/modules/20_positionTemp/components/DialogMovePos.vue b/src/modules/20_positionTemp/components/DialogMovePos.vue index 264cae70a..c3815f1c3 100644 --- a/src/modules/20_positionTemp/components/DialogMovePos.vue +++ b/src/modules/20_positionTemp/components/DialogMovePos.vue @@ -47,7 +47,7 @@ const { * props */ const modal = defineModel("modal", { required: true }); -const reqMaster = defineModel("reqMaster", { required: true }); +let reqMaster = defineModel("reqMaster", { required: true }); const totalPage = defineModel("totalPage", { required: true }); const nodeTree = defineModel("nodeTree", { required: true }); const columns = defineModel("columns", {}); diff --git a/src/modules/20_positionTemp/components/DialogSuccession.vue b/src/modules/20_positionTemp/components/DialogSuccession.vue index ff4247387..ae11d089c 100644 --- a/src/modules/20_positionTemp/components/DialogSuccession.vue +++ b/src/modules/20_positionTemp/components/DialogSuccession.vue @@ -111,7 +111,7 @@ const columns = ref([ }, ]); const rows = ref([]); -const reqMaster = reactive({ +let reqMaster = reactive({ id: "", type: 0, isAll: false, diff --git a/src/modules/20_positionTemp/components/TableMain.vue b/src/modules/20_positionTemp/components/TableMain.vue index c2b47f56e..8de8c9db3 100644 --- a/src/modules/20_positionTemp/components/TableMain.vue +++ b/src/modules/20_positionTemp/components/TableMain.vue @@ -49,7 +49,7 @@ const { showLoader, hideLoader, messageError, success, dialogRemove } = const nodeTree = defineModel("nodeTree", { required: true }); const orgLevel = defineModel("orgLevel", { required: true }); const treeId = defineModel("treeId", { required: true }); -const reqMaster = defineModel("reqMaster", { required: true }); +let reqMaster = defineModel("reqMaster", { required: true }); const totalPage = defineModel("totalPage", { required: true }); const totalData = defineModel("totalData", { required: true }); const posMaster = defineModel("posMaster", { required: true }); diff --git a/src/modules/20_positionTemp/views/main.vue b/src/modules/20_positionTemp/views/main.vue index 8b9cd85e4..2e57a4c1b 100644 --- a/src/modules/20_positionTemp/views/main.vue +++ b/src/modules/20_positionTemp/views/main.vue @@ -39,7 +39,7 @@ const isLoadTree = ref(false); // loadTable const mainTree = ref(); const selected = ref(""); -const reqMaster = reactive({ +let reqMaster = reactive({ id: "", type: 0, isAll: false, From 762acf46bd26cb4715c8a8c26412f07e569ac8a6 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Thu, 21 Aug 2025 15:06:47 +0700 Subject: [PATCH 02/11] =?UTF-8?q?fix:=20=E0=B8=9B=E0=B8=A3=E0=B8=B1?= =?UTF-8?q?=E0=B8=9A=E0=B9=82=E0=B8=84=E0=B8=A3=E0=B8=87=E0=B8=AA=E0=B8=A3?= =?UTF-8?q?=E0=B9=89=E0=B8=B2=E0=B8=87=20=E0=B9=82=E0=B8=94=E0=B8=A2?= =?UTF-8?q?=E0=B9=84=E0=B8=A1=E0=B9=88=E0=B9=81=E0=B8=AA=E0=B8=94=E0=B8=87?= =?UTF-8?q?=E0=B8=9B=E0=B8=B8=E0=B9=88=E0=B8=A1=E0=B8=AA=E0=B8=B7=E0=B8=9A?= =?UTF-8?q?=E0=B8=97=E0=B8=AD=E0=B8=94=E0=B8=97=E0=B8=B5=E0=B9=88=E0=B9=82?= =?UTF-8?q?=E0=B8=84=E0=B8=A3=E0=B8=87=E0=B8=9B=E0=B8=B1=E0=B8=88=E0=B8=88?= =?UTF-8?q?=E0=B8=B8=E0=B8=9A=E0=B8=B1=E0=B8=99=20=E0=B8=9B=E0=B8=B4?= =?UTF-8?q?=E0=B8=94=E0=B8=81=E0=B8=B2=E0=B8=A3=20sort=20=E0=B8=82?= =?UTF-8?q?=E0=B8=AD=E0=B8=87=E0=B8=9B=E0=B8=A3=E0=B8=B0=E0=B8=A7=E0=B8=B1?= =?UTF-8?q?=E0=B8=95=E0=B8=B4=E0=B8=95=E0=B8=B3=E0=B9=81=E0=B8=AB=E0=B8=99?= =?UTF-8?q?=E0=B9=88=E0=B8=87=20=E0=B9=81=E0=B8=A5=E0=B8=B0=E0=B9=80?= =?UTF-8?q?=E0=B8=AD=E0=B8=B2=E0=B8=8A=E0=B8=B7=E0=B9=88=E0=B8=AD=E0=B8=84?= =?UTF-8?q?=E0=B8=99=E0=B8=84=E0=B8=A3=E0=B8=AD=E0=B8=87=E0=B8=AD=E0=B8=AD?= =?UTF-8?q?=E0=B8=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/DialogHistoryPos.vue | 31 +++++++-------- .../02_organization/components/TableMain.vue | 38 +++++++++++++------ 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/modules/02_organization/components/DialogHistoryPos.vue b/src/modules/02_organization/components/DialogHistoryPos.vue index f6b5164fe..26f053d4c 100644 --- a/src/modules/02_organization/components/DialogHistoryPos.vue +++ b/src/modules/02_organization/components/DialogHistoryPos.vue @@ -47,17 +47,17 @@ const columns = ref([ headerStyle: "font-size: 14px", style: "font-size: 14px", }, - { - name: "fullname", - align: "left", - label: "ชื่อคนครอง", - sortable: true, - field: "fullname", - headerStyle: "font-size: 14px", - style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), - }, + // { + // name: "fullname", + // align: "left", + // label: "ชื่อคนครอง", + // sortable: true, + // field: "fullname", + // headerStyle: "font-size: 14px", + // style: "font-size: 14px", + // sort: (a: string, b: string) => + // a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), + // }, { name: "orgShortName", align: "left", @@ -157,19 +157,14 @@ const columns = ref([ align: "left", label: "วันที่แก้ไข", field: "lastUpdatedAt", - sortable: true, - format(val, row) { + sortable: false, + format(val) { return date2Thai(val); }, headerStyle: "font-size: 14px", style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, ]); -const pagination = ref({ - sortBy: "lastUpdatedAt", -}); /** * function เรียกข้อมูลประวัติตำแหน่ง diff --git a/src/modules/02_organization/components/TableMain.vue b/src/modules/02_organization/components/TableMain.vue index 18fcdbf3c..4d2ece332 100644 --- a/src/modules/02_organization/components/TableMain.vue +++ b/src/modules/02_organization/components/TableMain.vue @@ -72,7 +72,6 @@ const modalSelectPerson = ref(false); //เลือกคนครอ const rowId = ref(""); //id ที่ต้องการกระทำ const actionType = ref(""); //ประเภทการกระทำ const orgShortName = ref(""); //ชื่อย่อหน่วยงาน -const orgRootIdMain = ref(""); //Id สำนัก /** ListMenu Table*/ const listMenu = ref([ { @@ -125,6 +124,32 @@ const listMenu = ref([ }, ]); +/** + * Returns filtered menu items for a given row. + */ +function getMenuItems(row: any) { + if ( + row.positionIsSelected != "ว่าง" && + store.typeOrganizational === "current" + ) { + return listMenu.value.filter( + (item) => + item.type !== "DEL" && + item.type !== "CONDITION" && + item.type !== "INHERIT" + ); + } else if (store.typeOrganizational === "current") { + return listMenu.value.filter((item) => item.type !== "INHERIT"); + } else if ( + row.positionIsSelected != "ว่าง" && + store.typeOrganizational === "draft" + ) { + return listMenu.value.filter((item) => item.type !== "CONDITION"); + } else { + return listMenu.value; + } +} + const baseDocument = ref([ { name: "บัญชี 1", @@ -739,16 +764,7 @@ watch( Date: Thu, 21 Aug 2025 16:01:41 +0700 Subject: [PATCH 03/11] =?UTF-8?q?fix:=20=E0=B8=9B=E0=B8=A3=E0=B8=B1?= =?UTF-8?q?=E0=B8=9A=20api=20=E0=B8=84=E0=B9=89=E0=B8=99=E0=B8=AB=E0=B8=B2?= =?UTF-8?q?=E0=B8=84=E0=B8=99=E0=B8=84=E0=B8=A3=E0=B8=AD=E0=B8=87=E0=B9=83?= =?UTF-8?q?=E0=B8=99=E0=B9=82=E0=B8=84=E0=B8=A3=E0=B8=87=E0=B8=AA=E0=B8=A3?= =?UTF-8?q?=E0=B9=89=E0=B8=B2=E0=B8=87=E0=B8=9B=E0=B8=B1=E0=B8=88=E0=B8=88?= =?UTF-8?q?=E0=B8=B8=E0=B8=9A=E0=B8=B1=E0=B8=99=20=E0=B9=81=E0=B8=81?= =?UTF-8?q?=E0=B9=89=20tag=20=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/api/02_organizational/api.organization.ts | 1 + .../components/DialogSelectPerson.vue | 14 ++++++++++---- src/modules/04_registryPerson/views/edit/list.vue | 2 +- src/views/MainLayout.vue | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/api/02_organizational/api.organization.ts b/src/api/02_organizational/api.organization.ts index c17017e95..34030c278 100644 --- a/src/api/02_organizational/api.organization.ts +++ b/src/api/02_organizational/api.organization.ts @@ -57,6 +57,7 @@ export default { /**ครองตำแหน่ง */ orgSearchProfile: `${orgProfile}/search`, + orgSearchCurrentProfile: `${orgProfile}/search/current/person`, orgProfile: `${orgPos}/profile`, orgDeleteProfile: (id: string) => `${orgPos}/profile/delete/${id}`, orgSummary: `${orgPos}/summary`, diff --git a/src/modules/02_organization/components/DialogSelectPerson.vue b/src/modules/02_organization/components/DialogSelectPerson.vue index eeec6be61..9b12586a9 100644 --- a/src/modules/02_organization/components/DialogSelectPerson.vue +++ b/src/modules/02_organization/components/DialogSelectPerson.vue @@ -330,7 +330,12 @@ function searchData() { keyword: formData.personal, //นามสกุล ชื่อ สกุล เลขบัตร }; http - .post(config.API.orgSearchProfile, reqBody) + .post( + store.typeOrganizational === "draft" + ? config.API.orgSearchProfile + : config.API.orgSearchCurrentProfile, + reqBody + ) .then((res) => { totalPage.value = Math.ceil(res.data.result.total / pageSize.value); const list = res.data.result.data.map((e: SelectPerson) => ({ @@ -450,7 +455,7 @@ watch( diff --git a/src/modules/04_registryPerson/views/edit/list.vue b/src/modules/04_registryPerson/views/edit/list.vue index 0a813703b..38292b777 100644 --- a/src/modules/04_registryPerson/views/edit/list.vue +++ b/src/modules/04_registryPerson/views/edit/list.vue @@ -462,7 +462,7 @@ onMounted(async () => { diff --git a/src/views/MainLayout.vue b/src/views/MainLayout.vue index ca8ae7706..8180cbd86 100644 --- a/src/views/MainLayout.vue +++ b/src/views/MainLayout.vue @@ -687,7 +687,7 @@ function onViewDetailNoti(url: string) { dense icon="mdi-close" class="mybtn q-mx-xs" - @click.stop.pervent="clickDelete(n.id, index)" + @click.stop.prevent="clickDelete(n.id, index)" > From 0be2f0d037d9aee53a2350ac8e2aee3a2ec79648 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Fri, 22 Aug 2025 13:11:27 +0700 Subject: [PATCH 04/11] =?UTF-8?q?[fix]=20=E0=B9=81=E0=B8=81=E0=B9=89?= =?UTF-8?q?=E0=B9=84=E0=B8=82=E0=B8=81=E0=B8=A3=E0=B8=93=E0=B8=B5=E0=B9=81?= =?UTF-8?q?=E0=B8=81=E0=B9=89=E0=B9=84=E0=B8=82=E0=B8=95=E0=B8=B3=E0=B9=81?= =?UTF-8?q?=E0=B8=AB=E0=B8=99=E0=B9=88=E0=B8=87/=E0=B9=81=E0=B8=81?= =?UTF-8?q?=E0=B9=89=E0=B9=84=E0=B8=82=E0=B8=AD=E0=B8=B1=E0=B8=95=E0=B8=A3?= =?UTF-8?q?=E0=B8=B2=E0=B8=81=E0=B8=B3=E0=B8=A5=E0=B8=B1=E0=B8=87=E0=B9=81?= =?UTF-8?q?=E0=B8=A5=E0=B9=89=E0=B8=A7=E0=B8=A1=E0=B8=B5=E0=B8=84=E0=B8=99?= =?UTF-8?q?=E0=B8=84=E0=B8=A3=E0=B8=AD=E0=B8=87=E0=B8=AD=E0=B8=A2=E0=B8=B9?= =?UTF-8?q?=E0=B9=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/DialogFormPosition.vue | 129 ++++++++++-------- .../02_organization/components/TableMain.vue | 27 +++- .../02_organization/interface/index/Main.ts | 2 +- .../interface/response/organizational.ts | 3 + 4 files changed, 103 insertions(+), 58 deletions(-) diff --git a/src/modules/02_organization/components/DialogFormPosition.vue b/src/modules/02_organization/components/DialogFormPosition.vue index 091e22d13..bb82d762d 100644 --- a/src/modules/02_organization/components/DialogFormPosition.vue +++ b/src/modules/02_organization/components/DialogFormPosition.vue @@ -44,6 +44,10 @@ const { * props */ const reqMaster = defineModel("reqMaster", { required: true }); // qurey +const isPositionHolder = defineModel("isPositionHolder", { + default: false, +}); + const props = defineProps({ modal: Boolean, close: Function, @@ -56,6 +60,7 @@ const props = defineProps({ shortName: { type: String, required: true }, orgShortName: { type: String, required: true }, dataTree: { type: Object, default: () => [] }, + positionHolderInfo: { type: Object, default: () => ({}) }, }); const isReadonly = ref(false); // อ่านได้อย่างเดียว @@ -104,9 +109,19 @@ const formPositionSelect = reactive({ }); //Table +const selectedPos = ref([]); const rows = ref([]); //ข้อมูลรายการอัตรากำลัง const rowsPositionSelect = ref([]); //ข้อมูลรายากรตำแหน่ง const columns = ref([ + { + name: "checkbox", + align: "center", + label: "ครองในตำแหน่ง", + sortable: false, + field: "checkbox", + headerStyle: "font-size: 14px", + style: "font-size: 14px", + }, { name: "no", align: "left", @@ -232,6 +247,15 @@ async function fetchPosition(id: string) { // formData.isStaff = data.isStaff; formData.positionSign = data.positionSign; rows.value = data.positions; + const positionIsSelected = data.positions.find( + (item: any) => item.id === props.positionHolderInfo.position + ); + + if (positionIsSelected) { + selectedPos.value.push(positionIsSelected); + } else { + selectedPos.value = []; + } }) .catch((err) => { messageError($q, err); @@ -251,20 +275,29 @@ function onSubmit() { //ตราจสอบรายการตำแหน่งถ้าไม่มีแสดงข้อความแจ้งเตือน if (rows.value.length == 0) { dialogMessageNotify($q, "กรุณาเลือกตำแหน่งอย่างน้อย 1 ตำแหน่ง"); + } else if (selectedPos.value.length == 0 && isPositionHolder.value) { + dialogMessageNotify($q, "กรุณาเลือกครองในตำแหน่ง"); } else { //ถ้ามีแสดง dialog ยืนยัน dialogConfirm($q, async () => { - const positionsData = rows.value.map((e: RowDetailPositions) => ({ - posDictName: e.positionName, //ชื่อตำแหน่งในสายงาน (ชื่อตำแหน่ง) - posDictField: e.positionField, //สายงาน - posTypeId: e.posTypeId, //*ตำแหน่งประเภท - posLevelId: e.posLevelId, //*ระดับตำแหน่ง - posExecutiveId: e.posExecutiveId ? e.posExecutiveId : "", //ตำแหน่งทางการบริหาร - posDictExecutiveField: e.positionExecutiveField, //ด้านทางการบริหาร - posDictArea: e.positionArea, //ด้าน/สาขา - isSpecial: e.isSpecial, - positionIsSelected: e.positionIsSelected, - })); + const positionsData = rows.value.map( + (e: RowDetailPositions, index: number) => ({ + id: e.id, //id รายการตำแหน่ง + posDictName: e.positionName, //ชื่อตำแหน่งในสายงาน (ชื่อตำแหน่ง) + posDictField: e.positionField, //สายงาน + posTypeId: e.posTypeId, //*ตำแหน่งประเภท + posLevelId: e.posLevelId, //*ระดับตำแหน่ง + posExecutiveId: e.posExecutiveId ? e.posExecutiveId : "", //ตำแหน่งทางการบริหาร + posDictExecutiveField: e.positionExecutiveField, //ด้านทางการบริหาร + posDictArea: e.positionArea, //ด้าน/สาขา + isSpecial: e.isSpecial, + positionIsSelected: + isPositionHolder.value && selectedPos.value[0]?.id === e.id + ? true + : false, + orderNo: index, + }) + ); const body = { posMasterNoPrefix: formData.prefixNo, //*Prefix นำหน้าเลขที่ตำแหน่ง เป็น Optional (ไม่ใช่อักษรย่อของหน่วยงาน/ส่วนราชการ) @@ -280,46 +313,6 @@ function onSubmit() { orgChild2Id: getOrgIdByLevel(2), orgChild3Id: getOrgIdByLevel(3), orgChild4Id: getOrgIdByLevel(4), - // orgRootId: - // props.actionType === "ADD" - // ? props.orgLevel === 0 - // ? props.treeId - // : null - // : orgLevel.value === 0 - // ? props.treeId - // : null, //Id สำนัก - // orgChild1Id: - // props.actionType === "ADD" - // ? props.orgLevel === 1 - // ? props.treeId - // : null - // : orgLevel.value === 1 - // ? orgId.value - // : null, - // orgChild2Id: - // props.actionType === "ADD" - // ? props.orgLevel === 2 - // ? props.treeId - // : null - // : orgLevel.value === 2 - // ? orgId.value - // : null, - // orgChild3Id: - // props.actionType === "ADD" - // ? props.orgLevel === 3 - // ? props.treeId - // : null - // : orgLevel.value === 3 - // ? orgId.value - // : null, - // orgChild4Id: - // props.actionType === "ADD" - // ? props.orgLevel === 4 - // ? props.treeId - // : null - // : orgLevel.value === 4 - // ? orgId.value - // : null, positions: positionsData, }; @@ -433,7 +426,7 @@ async function addPosition(data: RowDetailPositions) { item.positionName == data.positionName && item.isSpecial == data.isSpecial ); - + data.id = null; // Reset id to ensure a new entry if (!isIdExist) { rows.value = [...rows.value, data]; } @@ -496,6 +489,7 @@ async function clearFormPositionSelect() { isPosition.value = false; // formData.isStaff = false; formData.positionSign = ""; + selectedPos.value = []; } /** @@ -542,6 +536,18 @@ watch( if (props.actionType !== "ADD" && props.rowId) { fetchPosition(props.rowId); } + + visibleColumns.value = [ + ...(isPositionHolder.value ? ["checkbox"] : []), + "no", + "positionName", + "positionField", + "posTypeName", + "posLevelName", + "posExecutiveName", + "positionExecutiveField", + "positionArea", + ]; } } ); @@ -651,13 +657,15 @@ watch( ref="table" :columns="columns" :rows="rows" - row-key="idcard" + row-key="id" flat bordered :paging="true" dense class="custom-header-table" :visible-columns="visibleColumns" + selection="single" + v-model:selected="selectedPos" >