diff --git a/src/modules/01_metadata/components/personal/01ListPrefix.vue b/src/modules/01_metadata/components/personal/01_Prefix.vue similarity index 100% rename from src/modules/01_metadata/components/personal/01ListPrefix.vue rename to src/modules/01_metadata/components/personal/01_Prefix.vue diff --git a/src/modules/01_metadata/components/personal/02ListRank.vue b/src/modules/01_metadata/components/personal/02_Rank.vue similarity index 100% rename from src/modules/01_metadata/components/personal/02ListRank.vue rename to src/modules/01_metadata/components/personal/02_Rank.vue diff --git a/src/modules/01_metadata/components/personal/03ListGender.vue b/src/modules/01_metadata/components/personal/03_Gender.vue similarity index 100% rename from src/modules/01_metadata/components/personal/03ListGender.vue rename to src/modules/01_metadata/components/personal/03_Gender.vue diff --git a/src/modules/01_metadata/components/personal/04ListRelationship.vue b/src/modules/01_metadata/components/personal/04_Relationship.vue similarity index 100% rename from src/modules/01_metadata/components/personal/04ListRelationship.vue rename to src/modules/01_metadata/components/personal/04_Relationship.vue diff --git a/src/modules/01_metadata/components/personal/05ListBloodGroup.vue b/src/modules/01_metadata/components/personal/05_BloodGroup.vue similarity index 100% rename from src/modules/01_metadata/components/personal/05ListBloodGroup.vue rename to src/modules/01_metadata/components/personal/05_BloodGroup.vue diff --git a/src/modules/01_metadata/components/personal/06ListReligion.vue b/src/modules/01_metadata/components/personal/06_Religion.vue similarity index 100% rename from src/modules/01_metadata/components/personal/06ListReligion.vue rename to src/modules/01_metadata/components/personal/06_Religion.vue diff --git a/src/modules/01_metadata/components/personal/07ListProvince.vue b/src/modules/01_metadata/components/personal/07_Province.vue similarity index 100% rename from src/modules/01_metadata/components/personal/07ListProvince.vue rename to src/modules/01_metadata/components/personal/07_Province.vue diff --git a/src/modules/01_metadata/components/personal/08ListEducationLevel.vue b/src/modules/01_metadata/components/personal/08_EducationLevel.vue similarity index 100% rename from src/modules/01_metadata/components/personal/08ListEducationLevel.vue rename to src/modules/01_metadata/components/personal/08_EducationLevel.vue diff --git a/src/modules/01_metadata/components/position-employee/01ListPosition.vue b/src/modules/01_metadata/components/position-employee/01_PositionMain.vue similarity index 69% rename from src/modules/01_metadata/components/position-employee/01ListPosition.vue rename to src/modules/01_metadata/components/position-employee/01_PositionMain.vue index e1e12e2e..2b69a24b 100644 --- a/src/modules/01_metadata/components/position-employee/01ListPosition.vue +++ b/src/modules/01_metadata/components/position-employee/01_PositionMain.vue @@ -1,31 +1,22 @@ diff --git a/src/modules/01_metadata/components/position-employee/02ListType.vue b/src/modules/01_metadata/components/position-employee/02_GroupMain.vue similarity index 70% rename from src/modules/01_metadata/components/position-employee/02ListType.vue rename to src/modules/01_metadata/components/position-employee/02_GroupMain.vue index 5236af84..4ddd53f2 100644 --- a/src/modules/01_metadata/components/position-employee/02ListType.vue +++ b/src/modules/01_metadata/components/position-employee/02_GroupMain.vue @@ -1,28 +1,22 @@ @@ -268,17 +250,6 @@ onMounted(() => { > แก้ไขข้อมูล - {{ col.value ? col.value : "-" }} @@ -289,7 +260,7 @@ onMounted(() => { -
+ @@ -329,7 +300,7 @@ onMounted(() => { label="อักษรย่อกลุ่มงาน" lazy-rules hide-bottom-space - :rules="[(val) => !!val || `${'กรุณากรอกอักษรย่อกลุ่มงาน'}`]" + :rules="[(val:string) => !!val || `${'กรุณากรอกอักษรย่อกลุ่มงาน'}`]" class="inputgreen" /> @@ -345,7 +316,7 @@ onMounted(() => { borderless min="1" bg-color="white" - :rules="[(val) => val != undefined || 'กรุณากรอกระดับกลุ่มงาน']" + :rules="[(val:string) => val != undefined || 'กรุณากรอกระดับกลุ่มงาน']" hide-bottom-space mask="############" class="inputgreen" @@ -354,19 +325,11 @@ onMounted(() => { - + บันทึกข้อมูล - +
diff --git a/src/modules/01_metadata/components/position-employee/03ListLevel.vue b/src/modules/01_metadata/components/position-employee/GroupDetail.vue similarity index 64% rename from src/modules/01_metadata/components/position-employee/03ListLevel.vue rename to src/modules/01_metadata/components/position-employee/GroupDetail.vue index ad100056..1718182f 100644 --- a/src/modules/01_metadata/components/position-employee/03ListLevel.vue +++ b/src/modules/01_metadata/components/position-employee/GroupDetail.vue @@ -11,7 +11,7 @@ import type { ResGroup, ResLevel, } from "@/modules/01_metadata/interface/response/positionEmployee/Main"; -import type { ObjectLevelRef } from "@/modules/01_metadata/interface/index/positionEmployee"; +import type { DataGroup } from "@/modules/01_metadata/interface/index/positionEmployee"; import type { FormDataLevel } from "@/modules/01_metadata/interface/request/positionEmployee"; /** importComponts*/ @@ -23,21 +23,15 @@ import { useCounterMixin } from "@/stores/mixin"; /**use*/ const $q = useQuasar(); +const storeOption = useMainOptionDataStore(); const route = useRoute(); const router = useRouter(); -const posName = ref(""); -const posTypeId = ref(route.params.id.toString()); - -const { - dialogRemove, - dialogConfirm, - showLoader, - hideLoader, - messageError, - success, -} = useCounterMixin(); -const storeOption = useMainOptionDataStore(); +const { dialogConfirm, showLoader, hideLoader, messageError, success } = + useCounterMixin(); +// Table +const rows = ref([]); // รายการกลุ่มงาน +const filter = ref(""); // คำค้นหา const columns = ref([ { name: "no", @@ -60,7 +54,7 @@ const columns = ref([ { name: "posTypeName", align: "left", - label: "กลุ่มงาน", + label: "ระดับชั้นงาน", sortable: true, field: "posTypeName", headerStyle: "font-size: 14px", @@ -77,42 +71,38 @@ const columns = ref([ style: "font-size: 14px", }, ]); -const rows = ref([]); - const visibleColumns = ref([ "no", "posLevelName", "posTypeName", "posLevelAuthority", ]); -const filter = ref(""); -const levelId = ref(""); -const titleName = ref(""); +const posTypeId = ref(route.params.id.toString()); // id กลุ่มงาน +const titleName = ref(""); // ชื่อกลุ่มงาน +const levelId = ref(""); // id ระดับชั้นงานที่จะแก้ไข +const isStatusEdit = ref(false); // สถานะแก่ไขข้อมูล +const modalDialog = ref(false); // popup +// ฟอร์มระดับชั้นงาน const formDataLevel = reactive({ posLevelName: null, posTypeName: "", posLevelAuthority: "", }); -/** formRef*/ -const posLevelNameRef = ref(null); -const commanderRef = ref(null); -const objectLevelRef: ObjectLevelRef = { - posLevelName: posLevelNameRef, - posLevelAuthority: commanderRef, -}; - -const id = ref(route.params.id.toString()); - -function fetchData() { +/** + * ฟังก์ชันดึงข้อมูลรายการระดับชั้นงาน API + * + * เก็บข้อมูลรรายการระดับชั้นงานไว้ใน rows.value + */ +async function fetchData() { showLoader(); - http - .get(config.API.orgEmployeeTypeById(id.value)) - .then((res) => { + await http + .get(config.API.orgEmployeeTypeById(posTypeId.value)) + .then(async (res) => { titleName.value = res.data.result.posTypeName ?? null; formDataLevel.posTypeName = res.data.result.posTypeName; - rows.value = res.data.result.posLevels.map((x: any) => ({ + rows.value = await res.data.result.posLevels.map((x: ResLevel) => ({ ...x, posTypeName: res.data.result.posTypeName, })); @@ -125,9 +115,17 @@ function fetchData() { }); } -const isStatusEdit = ref(false); -const modalDialog = ref(false); -function onClickOpenDialog(statusEdit: boolean = false, data: any = []) { +/** + * ฟังก์ชันเปิด popup แก้ไขข้อมูลระดับชั้นงาน + * @param data ข้อมูลระดับชั้นงานที่จะแก้ไข + * + * กำหนด isStatusEdit เป็น true และกำหนดให้ ฟอร์มข้อมูลระดับชั้นงาน เป็น ข้อมูลที่จะแก่ไข + * + */ +function onClickOpenDialog( + statusEdit: boolean = false, + data: DataGroup = {} as DataGroup +) { isStatusEdit.value = statusEdit; modalDialog.value = true; @@ -141,6 +139,11 @@ function onClickOpenDialog(statusEdit: boolean = false, data: any = []) { } } +/** + * ฟังก์ชันปืด popup แก้ไขหรื่อเพิ่มข้อมูลระดับชั้นงาน + * + * และกำหนดให้ ฟอร์มข้อมูลระดับชั้นงาน เป็นค่าว่าง + */ function onClickCloseDialog() { modalDialog.value = false; formDataLevel.posLevelName = null; @@ -148,66 +151,57 @@ function onClickCloseDialog() { formDataLevel.posLevelAuthority = ""; } -function onClickSubmit() { - const hasError = []; - for (const key in objectLevelRef) { - if (Object.prototype.hasOwnProperty.call(objectLevelRef, key)) { - const property = objectLevelRef[key]; - if (property.value && typeof property.value.validate === "function") { - const isValid = property.value.validate(); - hasError.push(isValid); - } - } - } - if (hasError.every((result) => result === true)) { - dialogConfirm($q, () => { - submit(); - }); - } -} - -async function submit() { - const body = { - posLevelName: Number(formDataLevel.posLevelName), - posTypeId: posTypeId.value, - posLevelRank: Number(formDataLevel.posLevelName), - posLevelAuthority: formDataLevel.posLevelAuthority, - }; - showLoader(); - try { +/** + * ยืนยันการบันทึกข้อมูลรายการระดับชั้นงาน + * + * ุ ถ้า dialogStatus เป็น 'false' จะทำการเพิ่มข้อมูลรายการระดับชั้นงาน ถ้าไม่จะทำการแก้ไขข้อมูล + * เมื่อบันทึกข้อมูลเสร็จจะเรียก function fetchData() เพื่อดึงข้อมูลรายการระดับชั้นงานใหม่ + * + */ +function onSubmit() { + dialogConfirm($q, async () => { + showLoader(); + const body = { + posLevelName: Number(formDataLevel.posLevelName), + posTypeId: posTypeId.value, + posLevelRank: Number(formDataLevel.posLevelName), + posLevelAuthority: formDataLevel.posLevelAuthority, + }; + // กำหนด Phat APi const url = !isStatusEdit.value ? config.API.orgEmployeelevel : config.API.orgEmployeelevelById(levelId.value); - await http[!isStatusEdit.value ? "post" : "put"](url, body); - success($q, "บันทีกข้อมูลสำเร็จ"); - fetchData(); - onClickCloseDialog(); - } catch (err) { - messageError($q, err); - } finally { - hideLoader(); - } -} -function onClickDelete(id: string) { - dialogRemove($q, () => { - http - .delete(config.API.orgEmployeelevelById(id)) - .then(() => { - success($q, "ลบข้อมูลสำเร็จ"); - fetchData(); + await http[!isStatusEdit.value ? "post" : "put"](url, body) + .then(async () => { + await fetchData(); + success($q, "บันทีกข้อมูลสำเร็จ"); + onClickCloseDialog(); }) .catch((err) => { messageError($q, err); + }) + .finally(() => { + hideLoader(); }); }); } +/** + * ฟังก์ชันแปลงตำแหน่งผู้มีอำนาจ + * @param val ค่าของผู้มีอำนาจ + * @returns ตำแหน่งผู้มีอำนาจ + */ function convertPosLevelAuthority(val: string) { const result = storeOption.posLevelAuthorityOption.find((e) => e.id === val); return result?.label; } +/** + * hook ทำงานเมื่อ Components ถูกเรียกใช้งาน + * + * ถ่ามี posTypeId จะดึงข้อมูลรายการระดับชั้นงาน + */ onMounted(() => { posTypeId.value && fetchData(); }); @@ -295,16 +289,6 @@ onMounted(() => { > แก้ไขข้อมูล -
@@ -325,7 +309,7 @@ onMounted(() => { -
+ { /> - +
{ borderless bg-color="white" hide-bottom-space - mask="#######################################" - :rules="[(val) => !!val || 'กรุณากรอกระดับชั้นงาน']" + mask="#" + reverse-fill-mask + :rules="[(val:string) => !!val || 'กรุณากรอกระดับชั้นงาน']" + class="inputgreen" />
@@ -366,7 +352,8 @@ onMounted(() => { borderless bg-color="white" hide-bottom-space - :rules="[(val) => !!val || 'กรุณาเลือกผู้มีอำนาจสั่งบรรจุ']" + :rules="[(val:string) => !!val || 'กรุณาเลือกผู้มีอำนาจสั่งบรรจุ']" + class="inputgreen" />
@@ -374,7 +361,7 @@ onMounted(() => { { /> - + - + บันทึกข้อมูล - + diff --git a/src/modules/01_metadata/components/position/01ListPosition.vue b/src/modules/01_metadata/components/position/01_Position.vue similarity index 100% rename from src/modules/01_metadata/components/position/01ListPosition.vue rename to src/modules/01_metadata/components/position/01_Position.vue diff --git a/src/modules/01_metadata/components/position/02ListType.vue b/src/modules/01_metadata/components/position/02_Type.vue similarity index 100% rename from src/modules/01_metadata/components/position/02ListType.vue rename to src/modules/01_metadata/components/position/02_Type.vue diff --git a/src/modules/01_metadata/components/position/03ListExecutive.vue b/src/modules/01_metadata/components/position/03_Executive.vue similarity index 100% rename from src/modules/01_metadata/components/position/03ListExecutive.vue rename to src/modules/01_metadata/components/position/03_Executive.vue diff --git a/src/modules/01_metadata/components/position/DialogFormExecutive.vue b/src/modules/01_metadata/components/position/DialogFormExecutive.vue index 4b938ea0..7fdc9b52 100644 --- a/src/modules/01_metadata/components/position/DialogFormExecutive.vue +++ b/src/modules/01_metadata/components/position/DialogFormExecutive.vue @@ -35,7 +35,7 @@ const formExecutive = reactive({ /** * ยืนยันการบันทึกข้อมูลรายการตำแหน่งทางการบริหาร * - * ุ ถ้า isEdit เป็น false จะทำการเพิ่มข้อมูลรายการตำแหน่งทางการบริหาร ถ่้าไม่จะทำการแก้ไขข้อมูล + * ุ ถ้า isEdit เป็น false จะทำการเพิ่มข้อมูลรายการตำแหน่งทางการบริหาร ถ้าไม่จะทำการแก้ไขข้อมูล * เมื่อบันทึกข้อมูลเสร็จจะเรียก function props.getData() เพื่อดึงข้อมูลรายการตำแหน่งทางการบริหาร * */ diff --git a/src/modules/01_metadata/components/position/ListLevel.vue b/src/modules/01_metadata/components/position/TypeDetail.vue similarity index 100% rename from src/modules/01_metadata/components/position/ListLevel.vue rename to src/modules/01_metadata/components/position/TypeDetail.vue diff --git a/src/modules/01_metadata/interface/index/positionEmployee.ts b/src/modules/01_metadata/interface/index/positionEmployee.ts index b23a01a7..1a9dacfa 100644 --- a/src/modules/01_metadata/interface/index/positionEmployee.ts +++ b/src/modules/01_metadata/interface/index/positionEmployee.ts @@ -25,4 +25,18 @@ interface FormQuery { keyword: string; } -export type { ObjectGroupRef, ObjectLevelRef, ObjectPosRef, FormQuery }; +interface DataGroup { + id: string; + posLevelAuthority: string; + posLevelName: number; + posLevelRank: number; + posTypeName: string; +} + +export type { + ObjectGroupRef, + ObjectLevelRef, + ObjectPosRef, + FormQuery, + DataGroup, +}; diff --git a/src/modules/01_metadata/interface/response/positionEmployee/Main.ts b/src/modules/01_metadata/interface/response/positionEmployee/Main.ts index 64ed9d67..a763ff98 100644 --- a/src/modules/01_metadata/interface/response/positionEmployee/Main.ts +++ b/src/modules/01_metadata/interface/response/positionEmployee/Main.ts @@ -21,6 +21,7 @@ interface ResPossition { posLevelName: number; posTypeId: string; posTypeName: string; + posTypeShortName: string; } export type { ResGroup, ResLevel, ResPossition }; diff --git a/src/modules/01_metadata/router.ts b/src/modules/01_metadata/router.ts index c177ad07..e2b5655b 100644 --- a/src/modules/01_metadata/router.ts +++ b/src/modules/01_metadata/router.ts @@ -16,7 +16,7 @@ const personalSubDistrict = () => const positionPage = () => import("@/modules/01_metadata/views/02_position.vue"); //ข้อมูลตำแหน่งข้าราชการ ฯ const positionLevelPage = () => - import("@/modules/01_metadata/components/position/ListLevel.vue"); //รายการระดับของประเภทตำแหน่งทั่วไป + import("@/modules/01_metadata/components/position/TypeDetail.vue"); //รายการระดับของประเภทตำแหน่งทั่วไป /** * ข้อมูลตำแหน่งลูกจ้างประจำ @@ -24,7 +24,7 @@ const positionLevelPage = () => const positionEmployeePage = () => import("@/modules/01_metadata/views/03_positionEmployee.vue"); //ข้อมูลตำแหน่งลูกจ้างประจำ const positionEmployeeLevelPage = () => - import("@/modules/01_metadata/components/position-employee/03ListLevel.vue"); //รายการระดับชั้นงานบริการพื้นฐาน + import("@/modules/01_metadata/components/position-employee/GroupDetail.vue"); //รายการระดับชั้นงานบริการพื้นฐาน /** * ข้อมูลปฏิทินวันหยุด diff --git a/src/modules/01_metadata/views/01_personal.vue b/src/modules/01_metadata/views/01_personal.vue index c9d3f727..198ad7f1 100644 --- a/src/modules/01_metadata/views/01_personal.vue +++ b/src/modules/01_metadata/views/01_personal.vue @@ -5,14 +5,14 @@ import { usePersonalDataStore } from "@/modules/01_metadata/stores/personalStore import type { MainTabs } from "@/modules/01_metadata/interface/index/Main"; -import ListPrefix from "@/modules/01_metadata/components/personal/01ListPrefix.vue"; // คำนำหน้าชื่อ -import ListRank from "@/modules/01_metadata/components/personal/02ListRank.vue"; //ยศ -import ListGender from "@/modules/01_metadata/components/personal/03ListGender.vue"; // เพศ -import ListRelationship from "@/modules/01_metadata/components/personal/04ListRelationship.vue"; //สถานภาพ -import ListBloodGroup from "@/modules/01_metadata/components/personal/05ListBloodGroup.vue"; // กลุ่มเลือด -import ListReligion from "@/modules/01_metadata/components/personal/06ListReligion.vue"; // ศาสนา -import ListProvince from "@/modules/01_metadata/components/personal/07ListProvince.vue"; // จังหวัด -import ListEducation from "@/modules/01_metadata/components/personal/08ListEducationLevel.vue"; // ระดับการศึกษา +import ListPrefix from "@/modules/01_metadata/components/personal/01_Prefix.vue"; // คำนำหน้าชื่อ +import ListRank from "@/modules/01_metadata/components/personal/02_Rank.vue"; //ยศ +import ListGender from "@/modules/01_metadata/components/personal/03_Gender.vue"; // เพศ +import ListRelationship from "@/modules/01_metadata/components/personal/04_Relationship.vue"; //สถานภาพ +import ListBloodGroup from "@/modules/01_metadata/components/personal/05_BloodGroup.vue"; // กลุ่มเลือด +import ListReligion from "@/modules/01_metadata/components/personal/06_Religion.vue"; // ศาสนา +import ListProvince from "@/modules/01_metadata/components/personal/07_Province.vue"; // จังหวัด +import ListEducation from "@/modules/01_metadata/components/personal/08_EducationLevel.vue"; // ระดับการศึกษา const store = usePersonalDataStore(); diff --git a/src/modules/01_metadata/views/02_position.vue b/src/modules/01_metadata/views/02_position.vue index 2c4aa96e..50a81fe7 100644 --- a/src/modules/01_metadata/views/02_position.vue +++ b/src/modules/01_metadata/views/02_position.vue @@ -5,9 +5,9 @@ import { usePositionDataStore } from "../stores/positionListStore"; import type { MainTabs } from "@/modules/01_metadata/interface/index/Main"; -import ListPosition from "@/modules/01_metadata/components/position/01ListPosition.vue"; //ตำแหน่ง -import ListType from "@/modules/01_metadata/components/position/02ListType.vue"; // รายการประเภทตำแหน่ง -import ListExecutive from "@/modules/01_metadata/components/position/03ListExecutive.vue"; // ตำแหน่งทางการบริหาร +import ListPosition from "@/modules/01_metadata/components/position/01_Position.vue"; //ตำแหน่ง +import ListType from "@/modules/01_metadata/components/position/02_Type.vue"; // รายการประเภทตำแหน่ง +import ListExecutive from "@/modules/01_metadata/components/position/03_Executive.vue"; // ตำแหน่งทางการบริหาร const store = usePositionDataStore(); diff --git a/src/modules/01_metadata/views/03_positionEmployee.vue b/src/modules/01_metadata/views/03_positionEmployee.vue index 827697eb..a74555db 100644 --- a/src/modules/01_metadata/views/03_positionEmployee.vue +++ b/src/modules/01_metadata/views/03_positionEmployee.vue @@ -1,13 +1,20 @@ -div