diff --git a/src/modules/01_metadataNew/components/position-employee/01ListPosition.vue b/src/modules/01_metadataNew/components/position-employee/01ListPosition.vue index d7fcc9ff9..813b2d1e4 100644 --- a/src/modules/01_metadataNew/components/position-employee/01ListPosition.vue +++ b/src/modules/01_metadataNew/components/position-employee/01ListPosition.vue @@ -4,19 +4,30 @@ import { useQuasar } from "quasar"; import http from "@/plugins/http"; import config from "@/app.config"; +/** importType*/ +import type { QTableProps } from "quasar"; +import type { + ObjectPosRef, + FormQuery, +} from "@/modules/01_metadataNew/interface/index/positionEmployee"; import type { DataOption, - FormPositionSelect, RowDetailPositions, } from "@/modules/01_metadataNew/interface/request/position/index"; -import type { QTableProps } from "quasar"; +import type { + ResGroup, + ResLevel, + ResPossition, +} from "@/modules/01_metadataNew/interface/response/positionEmployee/Main"; -import DialogAddPosition from "@/modules/01_metadataNew/components/position-employee/DialogAddPosition.vue"; +/**importComponets*/ +import DialogHeader from "@/components/DialogHeader.vue"; +/**importStore*/ import { useCounterMixin } from "@/stores/mixin"; +/**use*/ const $q = useQuasar(); - const mixin = useCounterMixin(); const { dialogConfirm, @@ -27,9 +38,7 @@ const { dialogRemove, } = mixin; -const rows = ref([]); -const rowsPositionSelect = ref([]); - +const rows = ref([]); const columns = ref([ { name: "no", @@ -41,11 +50,11 @@ const columns = ref([ style: "font-size: 14px", }, { - name: "positionName", + name: "posDictName", align: "left", label: "ชื่อตำแหน่ง", sortable: true, - field: "positionName", + field: "posDictName", headerStyle: "font-size: 14px", style: "font-size: 14px", }, @@ -70,100 +79,42 @@ const columns = ref([ ]); const visibleColumns = ref([ "no", - "positionName", + "posDictName", "posTypeName", "posLevelName", ]); -const editPosition = ref(false); -const modalAddPosition = ref(false); - -const isSpecial = ref(false); -const formPositionSelect = reactive({ - positionId: "", - posTypeId: "", - positionName: "", - positionField: "", - positionType: "", - positionLevel: "", - positionExecutive: "", - positionExecutiveField: "", - positionArea: "", - isSpecial: false, +const formQuery = reactive({ + type: "positionName", + keyword: "", }); -/** input ค้นหา */ -const searchRef = ref(null); -const search = ref(""); -const type = ref("positionName"); -const isReadonly = ref(false); // อ่านได้อย่างเดียว const optionFilter = ref([ { id: "positionName", name: "ชื่อตำแหน่ง" }, { id: "positionType", name: "กลุ่มงาน" }, { id: "positionLevel", name: "ระดับชั้นงาน" }, ]); -/** - * คัดลอกข้อมูล - * @param data ข้อมูลตำแหน่ง - */ -function copyDetiail(data: RowDetailPositions) { - formPositionSelect.positionId = data.id; - formPositionSelect.posTypeId = data.posTypeId; - formPositionSelect.positionName = data.positionName; - formPositionSelect.positionType = data.posTypeId; - formPositionSelect.positionLevel = data.posLevelId; - modalAddPosition.value = true; -} -/** - * แก้ไขข้อมูล - * @param data ข้อมูลตำแหน่ง - */ -function editDetiail(data: RowDetailPositions) { - formPositionSelect.positionId = data.id; - formPositionSelect.posTypeId = data.posTypeId; - formPositionSelect.positionName = data.positionName; - formPositionSelect.positionType = data.posTypeId; - formPositionSelect.positionLevel = data.posLevelId; - modalAddPosition.value = true; - editPosition.value = true; -} +const modalDialog = ref(false); +const isStatusEdit = ref(false); +const posId = ref(""); +const formDataPos = reactive({ + posName: "", + posTypeName: "", + posLevelName: "", +}); +const posNameRef = ref(null); +const posTypeNameRef = ref(null); +const posLevelNameRef = ref(null); +const objectRef: ObjectPosRef = { + posName: posNameRef, + posTypeName: posTypeNameRef, + posLevelName: posLevelNameRef, +}; -/** - * ส่งค่า css ออกไปตามเงื่อนไข - * @param val true/false - */ -function inputEdit(val: boolean) { - return { - "full-width cursor-pointer inputgreen ": val, - "full-width cursor-pointer inputgreen": !val, - }; -} - -async function searchInput() { - // showLoader(); - // await http - // .get( - // config.API.orgPosPosition + `?keyword=${search.value}&type=${type.value}` - // ) - // .then((res) => { - // rowsPositionSelect.value = res.data.result; - // }) - // .catch((err) => { - // messageError($q, err); - // }) - // .finally(() => { - // hideLoader(); - // }); -} - -function addPosition(data: RowDetailPositions) { - const isIdExist = rows.value.some((item: any) => item.id === data.id); - - if (!isIdExist) { - rows.value = [data, ...rows.value]; - } -} +const posTypeMain = ref([]); +const posTypeOp = ref([]); +const posLevelOp = ref([]); function deletePos(id: string) { dialogRemove($q, () => { @@ -172,28 +123,43 @@ function deletePos(id: string) { .delete(config.API.orgEmployeePosById(id)) .then(() => { success($q, "ลบข้อมูลสำเร็จ"); + fetchData(); }) .catch((err) => { messageError($q, err); }) .finally(() => { - searchInput(); hideLoader(); }); }); } -function popupAdd() { - modalAddPosition.value = true; +async function onClickOpenDialog(typeEdit: boolean = false, data: any = []) { + modalDialog.value = true; + isStatusEdit.value = typeEdit; + await fetchType(); + updatePosTypeName(data.posTypeId); + if (data) { + posId.value = data.id; + setTimeout(() => { + formDataPos.posName = data.posDictName; + formDataPos.posTypeName = data.posTypeId; + formDataPos.posLevelName = data.posLevelId; + }, 200); + } } -async function fetchData() { - search.value = ""; +async function fetchData(statusFetch: boolean = false) { showLoader(); await http - .get(config.API.orgEmployeePos + `?keyword=&type=ALL`) + .get( + config.API.orgEmployeePos + + `?keyword=${formQuery.keyword}&type=${ + statusFetch ? "" : formQuery.type + }` + ) .then((res) => { - rowsPositionSelect.value = res.data.result; + rows.value = res.data.result; }) .catch((err) => { messageError($q, err); @@ -203,8 +169,85 @@ async function fetchData() { }); } +async function fetchType() { + showLoader(); + await http + .get(config.API.orgEmployeeType) + .then((res) => { + const data = res.data.result; + posTypeMain.value = data; + posTypeOp.value = data.map((e: ResGroup) => ({ + id: e.id, + name: e.posTypeName, + })); + }) + .catch((err) => { + messageError($q, err); + }) + .finally(() => { + hideLoader(); + }); +} + +async function onClickSubmit() { + const hasError = []; + for (const key in objectRef) { + if (Object.prototype.hasOwnProperty.call(objectRef, key)) { + const property = objectRef[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 = { + posDictName: formDataPos.posName, + posTypeId: formDataPos.posTypeName, + posLevelId: formDataPos.posLevelName, + }; + showLoader(); + try { + const url = !isStatusEdit.value + ? config.API.orgEmployeePos + : config.API.orgEmployeePosById(posId.value); + await http[!isStatusEdit.value ? "post" : "put"](url, body); + success($q, "บันทีกข้อมูลสำเร็จ"); + fetchData(); + } catch (err) { + messageError($q, err); + } finally { + hideLoader(); + closeDialog(); + } +} + +function updatePosTypeName(id: string) { + const posLevel = posTypeMain.value.find((e: ResGroup) => e.id === id); + posLevelOp.value = + posLevel?.posLevels.map((e: ResLevel) => ({ + id: e.id, + name: e.posLevelName.toString(), + })) ?? []; + formDataPos.posLevelName = ""; +} + +function closeDialog() { + modalDialog.value = false; + formDataPos.posName = ""; + formDataPos.posTypeName = ""; + formDataPos.posLevelName = ""; +} + onMounted(() => { - fetchData(); + fetchData(true); }); - + + + +
+ + + + +
+
+ +
+ +
+ +
+ +
+ +
+
+
+ + + + + +
+
diff --git a/src/modules/01_metadataNew/components/position-employee/02ListType.vue b/src/modules/01_metadataNew/components/position-employee/02ListType.vue index 28dc0d06c..b022f8b22 100644 --- a/src/modules/01_metadataNew/components/position-employee/02ListType.vue +++ b/src/modules/01_metadataNew/components/position-employee/02ListType.vue @@ -168,7 +168,7 @@ function onClickOpenDialogEdit(data: ResGroup) { dialog.value = true; editId.value = data.id; formDataGroup.posTypeName = data.posTypeName; - // formDataGroup.posTypeShortName = data.posTypeShortName; + formDataGroup.posTypeShortName = data.posTypeShortName; formDataGroup.posTypeRank = data.posTypeRank; } diff --git a/src/modules/01_metadataNew/components/position-employee/03ListLevel.vue b/src/modules/01_metadataNew/components/position-employee/03ListLevel.vue index d4b36f2fa..bd8160a45 100644 --- a/src/modules/01_metadataNew/components/position-employee/03ListLevel.vue +++ b/src/modules/01_metadataNew/components/position-employee/03ListLevel.vue @@ -91,16 +91,15 @@ const levelId = ref(""); const formDataLevel = reactive({ posLevelName: null, posTypeName: "", - commander: "", + posLevelAuthority: "", }); /** formRef*/ const posLevelNameRef = ref(null); const commanderRef = ref(null); -const posTypeRankRef = ref(null); const objectLevelRef: ObjectLevelRef = { posLevelName: posLevelNameRef, - commander: commanderRef, + posLevelAuthority: commanderRef, }; function fetchPosGroup() { @@ -143,11 +142,12 @@ const modalDialog = ref(false); function onClickOpenDialog(statusEdit: boolean = false, data: any = []) { isStatusEdit.value = statusEdit; modalDialog.value = true; + if (statusEdit) { levelId.value = data.id; formDataLevel.posLevelName = data.posLevelName; formDataLevel.posTypeName = data.posTypeName; - formDataLevel.commander = data.commander; + formDataLevel.posLevelAuthority = data.posLevelAuthority; } } @@ -155,7 +155,7 @@ function onClickCloseDialog() { modalDialog.value = false; formDataLevel.posLevelName = null; formDataLevel.posTypeName = ""; - formDataLevel.commander = ""; + formDataLevel.posLevelAuthority = ""; } function onClickSubmit() { @@ -181,7 +181,7 @@ async function submit() { posLevelName: Number(formDataLevel.posLevelName), posTypeId: posTypeId.value, posLevelRank: Number(formDataLevel.posLevelName), - posLevelAuthority: formDataLevel.commander, + posLevelAuthority: formDataLevel.posLevelAuthority, }; showLoader(); try { @@ -213,6 +213,11 @@ function onClickDelete(id: string) { }); } +function convertPosLevelAuthority(val: string) { + const result = storeOption.posLevelAuthorityOption.find((e) => e.id === val); + return result?.label; +} + onMounted(() => { posTypeId.value && fetchData(posTypeId.value); fetchPosGroup(); @@ -293,6 +298,9 @@ onMounted(() => {
{{ props.rowIndex + 1 }}
+
+ {{ col.value ? convertPosLevelAuthority(col.value) : "-" }} +
{{ col.value }}
@@ -360,11 +368,11 @@ onMounted(() => {