diff --git a/src/api/manage/api.position.ts b/src/api/manage/api.position.ts
index 4b4536bf3..0dd3d422b 100644
--- a/src/api/manage/api.position.ts
+++ b/src/api/manage/api.position.ts
@@ -13,6 +13,8 @@ const positionStatus = `${env.API_URI}/metadata/position-status/`;
const positionLine = `${env.API_URI}/metadata/position-line/`;
const positionExecutive = `${env.API_URI}/metadata/position-executive/`;
+const orgPosType = `${env.API_URI}/org/pos/type/`;
+const orgPosLevel = `${env.API_URI}/org/pos/level/`;
export default {
position: `${position}position`,
/**
@@ -95,4 +97,9 @@ export default {
`${positionExecutive}history/${id}`,
listPositionExecutivePublished: `${positionExecutive}history/published`,
listPositionExecutivePublishedHistory: `${positionExecutive}history/published-history`,
+
+ orgPosType,
+ orgPosTypeId: (id: string) => `${orgPosType}${id}`,
+ orgPosLevel,
+ orgPosLevelId: (id: string) => `${orgPosLevel}${id}`,
};
diff --git a/src/modules/01_metadataNew/components/position/02ListType.vue b/src/modules/01_metadataNew/components/position/02ListType.vue
index 4738108dc..d1550b015 100644
--- a/src/modules/01_metadataNew/components/position/02ListType.vue
+++ b/src/modules/01_metadataNew/components/position/02ListType.vue
@@ -1,8 +1,418 @@
+
- ประเภท
-
-
+
+ {
+ dialogStatus = 'create';
+ dialog = true;
+ }
+ "
+ >
+ เพิ่มข้อมูล
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/01_metadataNew/components/position/03ListLevel.vue b/src/modules/01_metadataNew/components/position/03ListLevel.vue
index f24f04ad8..bb6f217ca 100644
--- a/src/modules/01_metadataNew/components/position/03ListLevel.vue
+++ b/src/modules/01_metadataNew/components/position/03ListLevel.vue
@@ -1,3 +1,30 @@
+
+
- ระดับตำแหน่ง
-
\ No newline at end of file
+
+
+ รายการระดับตำแหน่งของ {{ posName }}
+
+
+
+
+
+
+
+
diff --git a/src/modules/01_metadataNew/components/position/05ListLevelDetail.vue b/src/modules/01_metadataNew/components/position/05ListLevelDetail.vue
new file mode 100644
index 000000000..d6179002b
--- /dev/null
+++ b/src/modules/01_metadataNew/components/position/05ListLevelDetail.vue
@@ -0,0 +1,509 @@
+
+
+
+
+
+ {
+ dialogStatus = 'create';
+ dialog = true;
+ posLevelName = '';
+ posLevelRank = undefined;
+ posLevelAuthority = '';
+ }
+ "
+ >
+ เพิ่มข้อมูล
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/01_metadataNew/interface/response/position/ListType.ts b/src/modules/01_metadataNew/interface/response/position/ListType.ts
new file mode 100644
index 000000000..e40d8d247
--- /dev/null
+++ b/src/modules/01_metadataNew/interface/response/position/ListType.ts
@@ -0,0 +1,30 @@
+interface DataResponse {
+ createdAt: Date;
+ id: string;
+ lastUpdateFullName: String;
+ lastUpdatedAt: Date;
+ posTypes?: {
+ id: string;
+ posTypeName: string;
+ posTypeRank: number;
+ };
+ posTypeName?: string;
+ posLevelName?: string;
+ posLevelRank?: number;
+ posLevelAuthority?: string;
+}
+
+interface DataRow {
+ createdAt: string | null;
+ id: string;
+ lastUpdateFullName: String;
+ lastUpdatedAt: string | null;
+ posTypeName?: string;
+ posTypeRank?: number;
+ posTypeId?: string;
+ posLevelName?: string;
+ posLevelRank?: number;
+ posLevelAuthority?: string;
+}
+
+export type { DataResponse, DataRow };
diff --git a/src/modules/01_metadataNew/router.ts b/src/modules/01_metadataNew/router.ts
index 36df4d815..50cb5bbc4 100644
--- a/src/modules/01_metadataNew/router.ts
+++ b/src/modules/01_metadataNew/router.ts
@@ -2,12 +2,14 @@ const calendarWorkPage = () =>
import("@/modules/01_metadataNew/views/calendar.vue");
const masterInsignia = () =>
import("@/modules/01_metadataNew/views/insignia.vue");
-const dateilInsignia = () =>
+const detailInsignia = () =>
import("@/modules/01_metadataNew/components/insignia/InsigniaDetail.vue");
- const personalPage = () =>
+const personalPage = () =>
import("@/modules/01_metadataNew/views/personal.vue");
- const positionPage = () =>
+const positionPage = () =>
import("@/modules/01_metadataNew/views/position.vue");
+const positionLevelPage = () =>
+ import("@/modules/01_metadataNew/components/position/03ListLevel.vue");
export default [
{
@@ -33,7 +35,7 @@ export default [
{
path: "/master-data/insignia/detail/:id",
name: "masterInsigniadetail",
- component: dateilInsignia,
+ component: detailInsignia,
meta: {
Auth: true,
Key: [7],
@@ -60,4 +62,14 @@ export default [
Role: "metadata",
},
},
+ {
+ path: "/master-data/position/level/:id",
+ name: "masterPositionLevel",
+ component: positionLevelPage,
+ meta: {
+ Auth: true,
+ Key: [7],
+ Role: "metadata",
+ },
+ },
];
diff --git a/src/modules/01_metadataNew/stores/positionListStore.ts b/src/modules/01_metadataNew/stores/positionListStore.ts
new file mode 100644
index 000000000..30df6859f
--- /dev/null
+++ b/src/modules/01_metadataNew/stores/positionListStore.ts
@@ -0,0 +1,30 @@
+import { defineStore } from "pinia";
+import { ref } from "vue";
+import type {
+ DataResponse,
+ DataRow,
+} from "../interface/response/position/ListType";
+import { useCounterMixin } from "@/stores/mixin";
+
+const { date2Thai } = useCounterMixin();
+
+export const usePositionDataStore = defineStore("PositionData", () => {
+ const row = ref([]);
+ const name = ref([]);
+ function save(data: DataResponse[], id: string) {
+ const list = data.map((e) => ({
+ ...e,
+ posTypes: undefined,
+ posTypeId: e.posTypes?.id,
+ posTypeName: e.posTypes?.posTypeName,
+ posTypeRank: e.posTypes?.posTypeRank,
+ createdAt: e.createdAt ? date2Thai(e.createdAt) : "",
+ lastUpdatedAt: e.lastUpdatedAt ? date2Thai(e.lastUpdatedAt) : "",
+ })) satisfies DataRow[];
+ row.value = list.filter((e) => e.posTypeId === id);
+ }
+ return {
+ save,
+ row,
+ };
+});
diff --git a/src/modules/01_metadataNew/stores/positionTypeStore.ts b/src/modules/01_metadataNew/stores/positionTypeStore.ts
new file mode 100644
index 000000000..255aa3a34
--- /dev/null
+++ b/src/modules/01_metadataNew/stores/positionTypeStore.ts
@@ -0,0 +1,28 @@
+import { defineStore } from "pinia";
+import { ref } from "vue";
+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[]) {
+ const list = data.map((e) => ({
+ ...e,
+ posTypes: undefined,
+ posTypeId: e.posTypes?.id,
+ createdAt: e.createdAt ? date2Thai(e.createdAt) : "",
+ lastUpdatedAt: e.lastUpdatedAt ? date2Thai(e.lastUpdatedAt) : "",
+ })) satisfies DataRow[];
+ row.value = list;
+ }
+ return {
+ save,
+ row,
+ };
+});
diff --git a/src/modules/01_metadataNew/views/position.vue b/src/modules/01_metadataNew/views/position.vue
index e81d5fe97..5c38468f6 100644
--- a/src/modules/01_metadataNew/views/position.vue
+++ b/src/modules/01_metadataNew/views/position.vue
@@ -10,7 +10,7 @@ const tabs = ref>([]);
onMounted(() => {
const tabsPerson = [
{ label: "ตำแหน่ง", value: "list_position" },
- { label: "ประเภทและระดับตำแหน่ง", value: "list_type" },
+ { label: "รายการประเภทตำแหน่ง", value: "list_type" },
{ label: "ตำแหน่งทางการบริหาร", value: "list_executive" },
];
tabs.value = tabsPerson;
@@ -20,7 +20,7 @@ onMounted(() => {
ข้อมูลตำแหน่ง
-
+
{
-
-
-
-
+
+
+
+