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 @@ + + + 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 @@ + + + + + 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(() => {