diff --git a/src/components/DialogHeader.vue b/src/components/DialogHeader.vue index 6c2ade785..77d936c93 100644 --- a/src/components/DialogHeader.vue +++ b/src/components/DialogHeader.vue @@ -1,27 +1,29 @@ diff --git a/src/interface/main.ts b/src/interface/main.ts new file mode 100644 index 000000000..cb2e79ee5 --- /dev/null +++ b/src/interface/main.ts @@ -0,0 +1,6 @@ +interface DataOption { + id: string; + label: string; +} + +export type { DataOption }; diff --git a/src/interface/request/main/main.ts b/src/interface/request/main/main.ts index 993046ed6..d2c993c4b 100644 --- a/src/interface/request/main/main.ts +++ b/src/interface/request/main/main.ts @@ -66,16 +66,21 @@ const menuList = readonly([ }, { key: 3.2, - label: "ข้อมูลตำแหน่ง", + label: "ข้อมูลตำแหน่งข้าราชการฯ", path: "masterPosition", }, { key: 3.3, + label: "ข้อมูลตำแหน่งลูกจ้างประจำ", + path: "masterPositionEmployee", + }, + { + key: 3.4, label: "ข้อมูลปฏิทินวันหยุด", path: "masterCalendarWork", }, { - key: 3.4, + key: 3.5, label: "ข้อมูลเครื่องราชอิสริยาภรณ์", path: "masterInsignia", }, @@ -623,13 +628,13 @@ const menuList = readonly([ children: [ { key: 12.1, - label: "ผังบัญชีเงินเดือนข้าราชการ", + label: "ผังบัญชีเงินเดือนข้าราชการฯ", path: "salaryChart", role: "salary", }, { key: 12.2, - label: "ผังบัญชีค่าจ้างลูกจ้าง", + label: "ผังบัญชีค่าจ้างลูกจ้างประจำ", path: "salaryEmployeeChart", role: "salary", }, @@ -641,7 +646,7 @@ const menuList = readonly([ }, { key: 12.4, - label: "เลื่อนเงินเดือนข้าราชการ", + label: "เลื่อนเงินเดือนข้าราชการฯ", path: "salaryLists", role: "salary", }, diff --git a/src/modules/01_metadataNew/components/position-employee/01ListPosition.vue b/src/modules/01_metadataNew/components/position-employee/01ListPosition.vue new file mode 100644 index 000000000..2f2f0af64 --- /dev/null +++ b/src/modules/01_metadataNew/components/position-employee/01ListPosition.vue @@ -0,0 +1,393 @@ + + diff --git a/src/modules/01_metadataNew/components/position-employee/02ListType.vue b/src/modules/01_metadataNew/components/position-employee/02ListType.vue new file mode 100644 index 000000000..3de9086b8 --- /dev/null +++ b/src/modules/01_metadataNew/components/position-employee/02ListType.vue @@ -0,0 +1,450 @@ + + + + + diff --git a/src/modules/01_metadataNew/components/position-employee/03ListLevel.vue b/src/modules/01_metadataNew/components/position-employee/03ListLevel.vue new file mode 100644 index 000000000..cd2b046b8 --- /dev/null +++ b/src/modules/01_metadataNew/components/position-employee/03ListLevel.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/modules/01_metadataNew/components/position-employee/05ListLevelDetail.vue b/src/modules/01_metadataNew/components/position-employee/05ListLevelDetail.vue new file mode 100644 index 000000000..5fb09ee4d --- /dev/null +++ b/src/modules/01_metadataNew/components/position-employee/05ListLevelDetail.vue @@ -0,0 +1,513 @@ + + + + + diff --git a/src/modules/01_metadataNew/components/position-employee/DialogAddPosition.vue b/src/modules/01_metadataNew/components/position-employee/DialogAddPosition.vue new file mode 100644 index 000000000..2da4369b0 --- /dev/null +++ b/src/modules/01_metadataNew/components/position-employee/DialogAddPosition.vue @@ -0,0 +1,286 @@ + + + diff --git a/src/modules/01_metadataNew/components/position/01ListPosition.vue b/src/modules/01_metadataNew/components/position/01ListPosition.vue index ce4df1e56..b82951a82 100644 --- a/src/modules/01_metadataNew/components/position/01ListPosition.vue +++ b/src/modules/01_metadataNew/components/position/01ListPosition.vue @@ -19,7 +19,7 @@ const levelOpsMain = ref([]); const dataLevel = ref(); const levelOps = ref([]); -const isSpecial = ref(false) +const isSpecial = ref(false); const formPositionSelect = reactive({ positionId: "", posTypeId: "", @@ -181,7 +181,7 @@ function copyDetiail(data: RowDetailPositions) { * @param data ข้อมูลตำแหน่ง */ function editDetiail(data: RowDetailPositions) { - console.log(data) + console.log(data); formPositionSelect.positionId = data.id; formPositionSelect.posTypeId = data.posTypeId; formPositionSelect.positionName = data.positionName; @@ -386,7 +386,7 @@ onMounted(() => { }}
- {{ col.value ? col.value:'-' }} + {{ col.value ? col.value : "-" }}
diff --git a/src/modules/01_metadataNew/components/position/05ListLevelDetail.vue b/src/modules/01_metadataNew/components/position/05ListLevelDetail.vue index 8e06eb140..b4f7a0f34 100644 --- a/src/modules/01_metadataNew/components/position/05ListLevelDetail.vue +++ b/src/modules/01_metadataNew/components/position/05ListLevelDetail.vue @@ -4,12 +4,14 @@ import type { QInput, QTableProps } from "quasar"; import { useCounterMixin } from "@/stores/mixin"; import { useRouter, useRoute } from "vue-router"; import { usePositionDataStore } from "@/modules/01_metadataNew/stores/positionListStore"; +import { useMainOptionDataStore } from "@/modules/01_metadataNew/stores/main"; import { usePositionTypeDataStore } from "@/modules/01_metadataNew/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 router = useRouter(); const mixin = useCounterMixin(); @@ -153,30 +155,48 @@ async function fetchData() { } async function addData() { - await http.post(config.API.orgPosLevel, { - posLevelName: posLevelName.value, - posLevelRank: posLevelRank.value, - posLevelAuthority: - posLevelAuthority.value == "" ? "" : posLevelAuthority.value, - posTypeId: id.value, - }); - fetchData(); + await http + .post(config.API.orgPosLevel, { + posLevelName: posLevelName.value, + posLevelRank: posLevelRank.value, + posLevelAuthority: + posLevelAuthority.value == "" ? "" : posLevelAuthority.value, + posTypeId: id.value, + }) + .then(() => { + fetchData(); + }) + .catch((err) => { + messageError($q, err); + }); } 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, - }); - fetchData(); + await http + .put(config.API.orgPosLevelId(editId), { + posLevelName: posLevelName.value, + posLevelRank: posLevelRank.value, + posLevelAuthority: + posLevelAuthority.value == "" ? "" : posLevelAuthority.value, + posTypeId: id.value, + }) + .then(() => { + fetchData(); + }) + .catch((err) => { + messageError($q, err); + }); } async function deleteData(id: string) { - await http.delete(config.API.orgPosLevelId(id)); - fetchData(); + await http + .delete(config.API.orgPosLevelId(id)) + .then(() => { + fetchData(); + }) + .catch((err) => { + messageError($q, err); + }); } onMounted(async () => { @@ -345,7 +365,7 @@ async function fetchName() { - +
- - - - - + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
diff --git a/src/modules/01_metadataNew/interface/request/position/index.ts b/src/modules/01_metadataNew/interface/request/position/index.ts index 70a272cb9..098952d87 100644 --- a/src/modules/01_metadataNew/interface/request/position/index.ts +++ b/src/modules/01_metadataNew/interface/request/position/index.ts @@ -13,11 +13,18 @@ interface FormPositionSelectDialog { positionField: string; positionType: string; positionLevel: string; - positionExecutive: string|null; + positionExecutive: string | null; positionExecutiveField: string; positionArea: string; } +interface FormPositionEmployeeSelectDialog { + positionId: string; + positionName: string; + positionType: string; + positionLevel: string; +} + interface FormPositionSelectRef { positionName: object | null; positionField: object | null; @@ -28,6 +35,12 @@ interface FormPositionSelectRef { positionArea: object | null; [key: string]: any; } +interface FormPositionEmployeeSelectRef { + positionName: object | null; + positionType: object | null; + positionLevel: object | null; + [key: string]: any; +} interface FormExecutiveRef { posExecutiveName: object | null; posExecutivePriority: object | null; @@ -86,17 +99,24 @@ interface RowDetailPositions { } interface RowListForm { - id:string - posExecutiveName: string - posExecutivePriority: number|null + id: string; + posExecutiveName: string; + posExecutivePriority: number | null; } export type { - Pagination, DataOption, FormPositionSelect, FormPositionSelectRef, OptionType, OptionLevel, + Pagination, + DataOption, + FormPositionSelect, + FormPositionSelectRef, + OptionType, + OptionLevel, OptionExecutive, ListMenu, RowDetailPositions, RowListForm, FormPositionSelectDialog, - FormExecutiveRef + FormExecutiveRef, + FormPositionEmployeeSelectDialog, + FormPositionEmployeeSelectRef, }; diff --git a/src/modules/01_metadataNew/router.ts b/src/modules/01_metadataNew/router.ts index 50cb5bbc4..a3a31310f 100644 --- a/src/modules/01_metadataNew/router.ts +++ b/src/modules/01_metadataNew/router.ts @@ -10,6 +10,12 @@ const positionPage = () => import("@/modules/01_metadataNew/views/position.vue"); const positionLevelPage = () => import("@/modules/01_metadataNew/components/position/03ListLevel.vue"); +const positionEmployeePage = () => + import("@/modules/01_metadataNew/views/positionEmployee.vue"); +const positionEmployeeLevelPage = () => + import( + "@/modules/01_metadataNew/components/position-employee/03ListLevel.vue" + ); export default [ { @@ -68,7 +74,27 @@ export default [ component: positionLevelPage, meta: { Auth: true, - Key: [7], + Key: [9], + Role: "metadata", + }, + }, + { + path: "/master-data/position-employee", + name: "masterPositionEmployee", + component: positionEmployeePage, + meta: { + Auth: true, + Key: [8], + Role: "metadata", + }, + }, + { + path: "/master-data/position-employee/level/:id", + name: "masterPositionEmployeeLevel", + component: positionEmployeeLevelPage, + meta: { + Auth: true, + Key: [9], Role: "metadata", }, }, diff --git a/src/modules/01_metadataNew/stores/main.ts b/src/modules/01_metadataNew/stores/main.ts new file mode 100644 index 000000000..b0d36f090 --- /dev/null +++ b/src/modules/01_metadataNew/stores/main.ts @@ -0,0 +1,30 @@ +import { defineStore } from "pinia"; +import { ref } from "vue"; +import type { DataOption } from "@/interface/main"; + +export const useMainOptionDataStore = defineStore("MainOptionData", () => { + const posLevelAuthorityOption = ref([ + { + id: "HEAD", + label: "หัวหน้าหน่วยงาน", + }, + { + id: "DEPUTY", + label: "ปลัด", + }, + { + id: "GOVERNOR", + label: "ผู้ว่าฯ", + }, + ]); + + function posLevelAuthorityConvert(val: string) { + return posLevelAuthorityOption.value.find((x: DataOption) => x.id === val) + ?.label; + } + + return { + posLevelAuthorityOption, + posLevelAuthorityConvert, + }; +}); diff --git a/src/modules/01_metadataNew/stores/positionEmployeeStore.ts b/src/modules/01_metadataNew/stores/positionEmployeeStore.ts new file mode 100644 index 000000000..297426e1b --- /dev/null +++ b/src/modules/01_metadataNew/stores/positionEmployeeStore.ts @@ -0,0 +1,39 @@ +import { defineStore } from "pinia"; +import { ref } from "vue"; +import type { + DataResponse, + DataRow, +} from "../interface/response/position/ListType"; +import { useCounterMixin } from "@/stores/mixin"; +import { useMainOptionDataStore } from "@/modules/01_metadataNew/stores/main"; +const storeOption = useMainOptionDataStore(); + +const { date2Thai } = useCounterMixin(); + +export const usePositionEmployeeDataStore = defineStore( + "positionEmployeeStore", + () => { + const pathLocation = ref("list_position"); + const row = 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) : "", + posLevelAuthority: e.posLevelAuthority + ? storeOption.posLevelAuthorityConvert(e.posLevelAuthority) + : "-", + })) satisfies DataRow[]; + row.value = list.filter((e) => e.posTypeId === id); + } + return { + save, + row, + pathLocation, + }; + } +); diff --git a/src/modules/01_metadataNew/stores/positionListStore.ts b/src/modules/01_metadataNew/stores/positionListStore.ts index 17afb8238..c61f8ac74 100644 --- a/src/modules/01_metadataNew/stores/positionListStore.ts +++ b/src/modules/01_metadataNew/stores/positionListStore.ts @@ -4,7 +4,9 @@ import type { DataResponse, DataRow, } from "../interface/response/position/ListType"; +import { useMainOptionDataStore } from "@/modules/01_metadataNew/stores/main"; import { useCounterMixin } from "@/stores/mixin"; +const storeOption = useMainOptionDataStore(); const { date2Thai } = useCounterMixin(); @@ -20,9 +22,13 @@ export const usePositionDataStore = defineStore("PositionData", () => { posTypeRank: e.posTypes?.posTypeRank, createdAt: e.createdAt ? date2Thai(e.createdAt) : "", lastUpdatedAt: e.lastUpdatedAt ? date2Thai(e.lastUpdatedAt) : "", + posLevelAuthority: e.posLevelAuthority + ? storeOption.posLevelAuthorityConvert(e.posLevelAuthority) + : "-", })) satisfies DataRow[]; row.value = list.filter((e) => e.posTypeId === id); } + return { save, row, diff --git a/src/modules/01_metadataNew/views/position.vue b/src/modules/01_metadataNew/views/position.vue index 0c2ce6698..0bc59bb19 100644 --- a/src/modules/01_metadataNew/views/position.vue +++ b/src/modules/01_metadataNew/views/position.vue @@ -20,7 +20,9 @@ onMounted(() => {