-
- เพิ่มตำเเหน่ง
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ icon="mdi-plus"
+ @click="popupAdd()"
+ >เพิ่มตำเเหน่ง
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
{
>
-
+
{
ลบข้อมูล
-
+
{{ props.rowIndex + 1 }}
@@ -415,11 +412,11 @@ onMounted(() => {
-
diff --git a/src/modules/01_metadata/components/position/02ListType.vue b/src/modules/01_metadata/components/position/02_Type.vue
similarity index 55%
rename from src/modules/01_metadata/components/position/02ListType.vue
rename to src/modules/01_metadata/components/position/02_Type.vue
index dd68b3bb..6dfdaeb9 100644
--- a/src/modules/01_metadata/components/position/02ListType.vue
+++ b/src/modules/01_metadata/components/position/02_Type.vue
@@ -1,25 +1,25 @@
@@ -277,20 +255,6 @@ async function onSubmit() {
>
แก้ไขข้อมูล
-
{{ col.value }}
@@ -301,15 +265,12 @@ async function onSubmit() {
-
+
-
+
diff --git a/src/modules/01_metadata/components/position/03ListLevel.vue b/src/modules/01_metadata/components/position/03ListLevel.vue
deleted file mode 100644
index 23d06d3b..00000000
--- a/src/modules/01_metadata/components/position/03ListLevel.vue
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
- รายการระดับของประเภทตำแหน่ง{{ posName }}
-
-
-
-
-
-
-
-
diff --git a/src/modules/01_metadata/components/position/04ListExecutive.vue b/src/modules/01_metadata/components/position/03_Executive.vue
similarity index 69%
rename from src/modules/01_metadata/components/position/04ListExecutive.vue
rename to src/modules/01_metadata/components/position/03_Executive.vue
index 28ed5764..50f444ff 100644
--- a/src/modules/01_metadata/components/position/04ListExecutive.vue
+++ b/src/modules/01_metadata/components/position/03_Executive.vue
@@ -1,50 +1,22 @@
@@ -232,7 +206,7 @@ onMounted(() => {
-import { ref, onMounted } from "vue";
-import type { QInput, QTableProps } from "quasar";
-import { useCounterMixin } from "@/stores/mixin";
-import { useRoute } from "vue-router";
-import { usePositionDataStore } from "@/modules/01_metadata/stores/positionListStore";
-import { useMainOptionDataStore } from "@/modules/01_metadata/stores/main";
-import { usePositionTypeDataStore } from "@/modules/01_metadata/stores/positionTypeStore";
-import dialogHeader from "@/components/DialogHeader.vue";
-import { useQuasar } from "quasar";
-import http from "@/plugins/http";
-import config from "@/app.config";
-const store = usePositionDataStore();
-const storeOption = useMainOptionDataStore();
-const storeName = usePositionTypeDataStore();
-
-const mixin = useCounterMixin();
-
-const posName = defineModel("posName", {
- required: true,
-});
-
-const {
- dialogRemove,
- dialogConfirm,
- showLoader,
- hideLoader,
- messageError,
- success,
-} = mixin;
-const $q = useQuasar();
-
-const columns = [
- {
- name: "no",
- align: "left",
- label: "ลำดับ",
- sortable: false,
- field: "no",
- headerStyle: "font-size: 14px; width:0px",
- style: "font-size: 14px",
- },
- {
- name: "posLevelName",
- align: "left",
- label: "ชื่อระดับตำแหน่ง",
- sortable: true,
- field: "posLevelName",
- headerStyle: "font-size: 14px",
- style: "font-size: 14px",
- sort: (a: string, b: string) =>
- a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
- },
- {
- name: "posTypeName",
- align: "left",
- label: "ประเภทตำแหน่ง",
- sortable: true,
- field: "posTypeName",
- headerStyle: "font-size: 14px",
- style: "font-size: 14px",
- sort: (a: string, b: string) =>
- a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
- },
- {
- name: "posLevelRank",
- align: "left",
- label: "ระดับของระดับตำแหน่ง",
- sortable: true,
- field: "posLevelRank",
- headerStyle: "font-size: 14px",
- style: "font-size: 14px",
- sort: (a: string, b: string) =>
- a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
- },
- {
- name: "posLevelAuthority",
- align: "left",
- label: "ผู้มีอำนาจสั่งบรรจุ",
- sortable: true,
- field: "posLevelAuthority",
- headerStyle: "font-size: 14px",
- style: "font-size: 14px",
- sort: (a: string, b: string) =>
- a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
- },
-
- {
- name: "createdAt",
- align: "center",
- label: "วันที่สร้าง",
- sortable: true,
- field: "createdAt",
- headerStyle: "font-size: 14px",
- style: "font-size: 14px",
- sort: (a: string, b: string) =>
- a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
- },
-
- {
- name: "lastUpdatedAt",
- align: "center",
- label: "วันที่แก้ไข",
- sortable: true,
- field: "lastUpdatedAt",
- headerStyle: "font-size: 14px",
- style: "font-size: 14px",
- sort: (a: string, b: string) =>
- a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
- },
-
- {
- name: "lastUpdateFullName",
- align: "left",
- label: "ผู้ดำเนินการ",
- sortable: true,
- field: "lastUpdateFullName",
- headerStyle: "font-size: 14px",
- style: "font-size: 14px",
- sort: (a: string, b: string) =>
- a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
- },
-] as const satisfies QTableProps["columns"];
-const route = useRoute();
-const id = ref(route.params.id.toString());
-const filterKeyword = ref("");
-const dialog = ref(false);
-const dialogStatus = ref("");
-const editId = ref("");
-const posLevelName = ref("");
-const posLevelRank = ref();
-const posLevelAuthority = ref("");
-const posLevelNameRef = ref(null);
-const posLevelRankRef = ref(null);
-const posTypeIdRef = ref(null);
-const posLevelAuthorityRef = ref(null);
-const visibleColumns = ref([
- "no",
- "posTypeName",
- "posLevelName",
- "posLevelRank",
- "posLevelAuthority",
-]);
-
-async function fetchData() {
- showLoader();
- await http
- .get(config.API.orgPosTypeId(id.value))
- .then(async (res) => {
- posName.value = res.data.result.posTypeName;
- store.save(res.data.result.posLevels);
- })
- .catch((err) => {
- messageError($q, err);
- })
- .finally(() => {
- hideLoader();
- });
-}
-
-async function addData() {
- await http
- .post(config.API.orgPosLevel, {
- posLevelName: posLevelName.value,
- posLevelRank: posLevelRank.value,
- posLevelAuthority:
- posLevelAuthority.value == "" ? "" : posLevelAuthority.value,
- posTypeId: id.value,
- })
- .then(() => {
- fetchData();
- success($q, "บันทึกข้อมูลสำเร็จ");
- })
- .catch((err) => {
- messageError($q, err);
- })
- .finally(() => {
- hideLoader();
- });
-}
-
-async function editData(editId: string) {
- await http
- .put(config.API.orgPosLevelId(editId), {
- posLevelName: posLevelName.value,
- posLevelRank: posLevelRank.value,
- posLevelAuthority:
- posLevelAuthority.value == "" ? "" : posLevelAuthority.value,
- posTypeId: id.value,
- })
- .then(() => {
- fetchData();
- success($q, "บันทึกข้อมูลสำเร็จ");
- })
- .catch((err) => {
- messageError($q, err);
- })
- .finally(() => {
- hideLoader();
- });
-}
-
-async function deleteData(id: string) {
- await http
- .delete(config.API.orgPosLevelId(id))
- .then(() => {
- fetchData();
- success($q, "ลบข้อมูลสำเร็จ");
- })
- .catch((err) => {
- messageError($q, err);
- })
- .finally(() => {
- hideLoader();
- });
-}
-
-function closeDialog() {
- dialog.value = false;
-}
-
-function validateForm() {
- posLevelNameRef.value?.validate();
- posLevelRankRef.value?.validate();
- posTypeIdRef.value?.validate();
- posLevelAuthorityRef.value?.validate();
- onSubmit();
-}
-
-async function onSubmit() {
- if (
- posLevelName.value.length > 0 &&
- posLevelAuthority.value.length > 0 &&
- posLevelRank.value !== undefined &&
- posLevelRank.value > 0
- ) {
- dialogConfirm(
- $q,
- async () => {
- dialogStatus.value === "create" ? addData() : editData(editId.value);
- closeDialog();
- },
- "ยืนยันการบันทึกข้อมูล",
- "ต้องการยืนยันการบันทึกข้อมูลนี้หรือไม่ ?"
- );
- }
-}
-
-onMounted(async () => {
- fetchData();
-});
-
-
-
-
-
- {
- dialogStatus = 'create';
- dialog = true;
- posLevelName = '';
- posLevelRank = undefined;
- posLevelAuthority = '';
- }
- "
- >
- เพิ่มข้อมูล
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/modules/01_metadata/components/position/DialogAddExecutive.vue b/src/modules/01_metadata/components/position/DialogAddExecutive.vue
deleted file mode 100644
index 6b9d4a52..00000000
--- a/src/modules/01_metadata/components/position/DialogAddExecutive.vue
+++ /dev/null
@@ -1,214 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/modules/01_metadata/components/position/DialogFormExecutive.vue b/src/modules/01_metadata/components/position/DialogFormExecutive.vue
new file mode 100644
index 00000000..7fdc9b52
--- /dev/null
+++ b/src/modules/01_metadata/components/position/DialogFormExecutive.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/01_metadata/components/position/DialogAddPosition.vue b/src/modules/01_metadata/components/position/DialogFormPosition.vue
similarity index 51%
rename from src/modules/01_metadata/components/position/DialogAddPosition.vue
rename to src/modules/01_metadata/components/position/DialogFormPosition.vue
index c31ff092..de8b5d4e 100644
--- a/src/modules/01_metadata/components/position/DialogAddPosition.vue
+++ b/src/modules/01_metadata/components/position/DialogFormPosition.vue
@@ -1,8 +1,10 @@
-
+
@@ -301,7 +295,7 @@ function close() {
label="สายงาน"
lazy-rules
hide-bottom-space
- :rules="[(val) => !!val || `${'กรุณากรอกสายงาน'}`]"
+ :rules="[(val:string) => !!val || `${'กรุณากรอกสายงาน'}`]"
/>
@@ -320,7 +314,7 @@ function close() {
option-value="id"
lazy-rules
hide-bottom-space
- :rules="[(val) => !!val || `${'กรุณาเลือกประเภทตำแหน่ง'}`]"
+ :rules="[(val:string) => !!val || `${'กรุณาเลือกประเภทตำแหน่ง'}`]"
/>
@@ -339,7 +333,7 @@ function close() {
option-value="id"
lazy-rules
hide-bottom-space
- :rules="[(val) => !!val || `${'กรุณาเลือกระดับตำแหน่ง'}`]"
+ :rules="[(val:string) => !!val || `${'กรุณาเลือกระดับตำแหน่ง'}`]"
/>
diff --git a/src/modules/01_metadata/components/position/TypeDetail.vue b/src/modules/01_metadata/components/position/TypeDetail.vue
new file mode 100644
index 00000000..9297ad2c
--- /dev/null
+++ b/src/modules/01_metadata/components/position/TypeDetail.vue
@@ -0,0 +1,485 @@
+
+
+
+
+
+ รายการระดับของประเภทตำแหน่ง{{ posName }}
+
+
+
+
+
+ {
+ dialogStatus = 'create';
+ dialog = true;
+ posLevelName = '';
+ posLevelRank = undefined;
+ posLevelAuthority = '';
+ }
+ "
+ >
+ เพิ่มข้อมูล
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ บันทึกข้อมูล
+
+
+
+
+
+
+
+
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/position/Main.ts b/src/modules/01_metadata/interface/response/position/Main.ts
new file mode 100644
index 00000000..7af19bb0
--- /dev/null
+++ b/src/modules/01_metadata/interface/response/position/Main.ts
@@ -0,0 +1,15 @@
+interface ResPosType {
+ id: string;
+ posTypeName: string;
+ posTypeRank: number;
+ posLevels: PosLevels[];
+}
+
+interface PosLevels {
+ id: string;
+ posLevelAuthority: string;
+ posLevelName: string;
+ posLevelRank: number;
+}
+
+export type { ResPosType };
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 36a44a6a..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/03ListLevel.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/stores/positionTypeStore.ts b/src/modules/01_metadata/stores/positionTypeStore.ts
index 255aa3a3..a9210f5e 100644
--- a/src/modules/01_metadata/stores/positionTypeStore.ts
+++ b/src/modules/01_metadata/stores/positionTypeStore.ts
@@ -1,17 +1,23 @@
import { defineStore } from "pinia";
import { ref } from "vue";
+
+import { useCounterMixin } from "@/stores/mixin";
+
import type {
DataResponse,
DataRow,
} from "../interface/response/position/ListType";
-import { useCounterMixin } from "@/stores/mixin";
const { date2Thai } = useCounterMixin();
export const usePositionTypeDataStore = defineStore("PositionTypeData", () => {
const row = ref
([]);
- function save(data: DataResponse[]) {
+ /**
+ * บันทึกข้อมูลลงใน row.value
+ * @param data ข้อมูลรายการจาก API
+ */
+ async function save(data: DataResponse[]) {
const list = data.map((e) => ({
...e,
posTypes: undefined,
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 055108a1..50a81fe7 100644
--- a/src/modules/01_metadata/views/02_position.vue
+++ b/src/modules/01_metadata/views/02_position.vue
@@ -1,15 +1,21 @@