diff --git a/package.json b/package.json index 6e2ddd2c2..088a0ead7 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "axios": "^1.6.7", "bma-org-chart": "^0.0.8", "esri-loader": "^3.7.0", + "exceljs": "^4.4.0", "html-to-image": "^1.11.13", "keycloak-js": "^20.0.2", "moment": "^2.29.4", diff --git a/src/api/02_organizational/api.organization.ts b/src/api/02_organizational/api.organization.ts index bcb7e54d9..b30ec3ec1 100644 --- a/src/api/02_organizational/api.organization.ts +++ b/src/api/02_organizational/api.organization.ts @@ -192,6 +192,8 @@ export default { `${orgProfile}/keycloak/permissionProfile/${rootId}`, profileidPosition: (type: string) => `${orgProfile}${type}/profileid/position`, + uploadProfile: (type: string, id: string) => + `${organization}/upload/${type}-profileSalaryTemp/${id}`, workflowCommanderOperate: `${workflow}/commander/operate`, workflowCommanderSign: `${workflow}/commander/sign`, diff --git a/src/api/05_placement/api.placement.ts b/src/api/05_placement/api.placement.ts index a810db909..b6459a850 100644 --- a/src/api/05_placement/api.placement.ts +++ b/src/api/05_placement/api.placement.ts @@ -27,6 +27,7 @@ export default { placementDefermentInfo: (id: string) => `${placement}/pass/deferment/${id}`, placementDisclaimInfo: (id: string) => `${placement}/pass/disclaim/${id}`, placementUpdatePass: `${placement}/pass/update-status`, + placementUpdateDraftStatus: `${placement}/update/draft-status`, //personal placementPersonalId: (personalId: string) => diff --git a/src/api/09_leave/api.leave.ts b/src/api/09_leave/api.leave.ts index 865db4ea6..d0229b204 100644 --- a/src/api/09_leave/api.leave.ts +++ b/src/api/09_leave/api.leave.ts @@ -61,4 +61,6 @@ export default { leaveReportAPI: (type: string) => `${leave}/report/download/time-records/${type}`, + + leaveTask: `${leave}/admin/leave-task/process`, }; diff --git a/src/api/recruiting/api.period-exam.ts b/src/api/recruiting/api.period-exam.ts index 0df5e58ed..bf777e193 100644 --- a/src/api/recruiting/api.period-exam.ts +++ b/src/api/recruiting/api.period-exam.ts @@ -96,4 +96,8 @@ export default { applicationFormPDF: (candidateId: string) => `${env.API_URI}/placement/candidate/pdf/${candidateId}`, + + downloadCandidateExam: (id: string) => + `${periodExam}download/candidate-exam/${id}`, + downloadPassExam: (id: string) => `${periodExam}download/pass-exam/${id}`, }; diff --git a/src/api/registry/api.registry.ts b/src/api/registry/api.registry.ts index 0cbfc086e..f3378e539 100644 --- a/src/api/registry/api.registry.ts +++ b/src/api/registry/api.registry.ts @@ -272,4 +272,10 @@ export default { profileAssistanceReturn: `${env.API_URI}/placement/repatriation`, profileAssistanceUpdateDelete: (type: string) => `${registryNew}${type}/assistance/update-delete/`, + + profileAbsentLate: (type: string) => `${registryNew}${type}/absent-late`, + profileAbsentLateUpdateDelete: (type: string) => `${registryNew}${type}/absent-late/update-delete`, + profileAbsentLateHistory: (id: string, type: string) => + `${registryNew}${type}/absent-late/history/${id}`, + }; diff --git a/src/components/CardProfile.vue b/src/components/CardProfile.vue index d6b9fe4cf..72fe7aad0 100644 --- a/src/components/CardProfile.vue +++ b/src/components/CardProfile.vue @@ -43,9 +43,9 @@ async function fetchDataProfile(data: DataProfile) { profile.avatar = data?.avatar ? data.avatar : ""; } profile.id = data.profileId; - profile.fullName = `${data.prefix ?? ""}${data.firstName ?? ""} ${ - data.lastName ?? "" - } `; + profile.fullName = `${data.rank ? data.rank : data.prefix ?? ""}${ + data.firstName ?? "" + } ${data.lastName ?? ""} `; if (data["posTypeNameOld"] !== undefined) { profile.position = diff --git a/src/components/Dialogs/AddPersonal.vue b/src/components/Dialogs/AddPersonal.vue index 6003ace6f..89b5f803a 100644 --- a/src/components/Dialogs/AddPersonal.vue +++ b/src/components/Dialogs/AddPersonal.vue @@ -305,7 +305,7 @@ watch( outlined option-label="name" option-value="id" - @update:model-value="rows = []" + @update:model-value="(rows = []), (selected = [])" /> @@ -332,6 +332,7 @@ watch( outlined dense label="คำค้น" + @keydown.enter.prevent="searchInput()" > diff --git a/src/modules/03_recruiting/views/02_qualify/DisablePeriod.vue b/src/modules/03_recruiting/views/02_qualify/DisablePeriod.vue index 15ecf3039..d23684dea 100644 --- a/src/modules/03_recruiting/views/02_qualify/DisablePeriod.vue +++ b/src/modules/03_recruiting/views/02_qualify/DisablePeriod.vue @@ -112,7 +112,7 @@ const columns = ref([ headerStyle: "font-size: 14px", style: "font-size: 14px", format(val, row) { - return `${row.year + 543}`; + return `${row.year ? row.year + 543 : "-"}`; }, sort: (a: number, b: number) => b - a, }, diff --git a/src/modules/03_recruiting/views/02_qualify/PeriodAdd.vue b/src/modules/03_recruiting/views/02_qualify/PeriodAdd.vue index 6b54c2ac7..2631acf53 100644 --- a/src/modules/03_recruiting/views/02_qualify/PeriodAdd.vue +++ b/src/modules/03_recruiting/views/02_qualify/PeriodAdd.vue @@ -212,17 +212,17 @@ const columnsPosition = ref([ a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), }, - { - name: "type", - align: "left", - label: "ประเภทแบบฟอร์ม", - sortable: true, - field: "type", - headerStyle: "font-size: 14px", - style: "font-size: 14px", - sort: (a: string, b: string) => - a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), - }, + // { + // name: "type", + // align: "left", + // label: "ประเภทแบบฟอร์ม", + // sortable: true, + // field: "type", + // headerStyle: "font-size: 14px", + // style: "font-size: 14px", + // sort: (a: string, b: string) => + // a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), + // }, ]); const shouldShowPaymentFields = computed(() => { @@ -400,7 +400,7 @@ async function checkSave() { // เช็ค validation form ตำแหน่ง const isPositionFormValid = await myFormPosition.value?.validate(); - if (!isPositionFormValid) return; + if (!isPositionFormValid && announcementExam.value) return; // เช็คการเพิ่มตำแหน่ง if (announcementExam.value && rowsPosition.value.length === 0) { @@ -889,7 +889,7 @@ function fetchPosition(level: number) { * @param val ค่าประเภทตำแหน่ง 0 = ประเภททั่วไป ,1 = ประเภทวิชาการ * @param index ตำแหน่งของข้อมูล */ -function onUpdateHighDegree(val: string, index: string) { +function onUpdateHighDegree(val: string, index: number) { rowsPosition.value[index].position = null; rowsPosition.value[index].level = val === "0" ? optionPosLevel1.value[0] : optionPosLevel2.value[0]; @@ -1476,7 +1476,7 @@ onMounted(async () => { - + diff --git a/src/modules/03_recruiting/views/02_qualify/manageDetail.vue b/src/modules/03_recruiting/views/02_qualify/manageDetail.vue index 46f60a5cd..badb61bf4 100644 --- a/src/modules/03_recruiting/views/02_qualify/manageDetail.vue +++ b/src/modules/03_recruiting/views/02_qualify/manageDetail.vue @@ -260,7 +260,6 @@ async function fetchData(loading: boolean = true) { total.value = data.total; maxPage.value = await Math.ceil(data.total / pageSize.value); maxPage.value = maxPage.value < 1 ? 1 : maxPage.value; - rows.value = []; data.data.map((r: any) => { rows.value.push({ @@ -402,6 +401,7 @@ onMounted(async () => { await fetchDataCom(); }); + + diff --git a/src/modules/04_registryPerson/components/detail/Achievement/03_Insignia.vue b/src/modules/04_registryPerson/components/detail/Achievement/03_Insignia.vue index 5da6c11e0..e08b1a073 100644 --- a/src/modules/04_registryPerson/components/detail/Achievement/03_Insignia.vue +++ b/src/modules/04_registryPerson/components/detail/Achievement/03_Insignia.vue @@ -92,7 +92,7 @@ const baseColumns = ref([ field: "year", headerStyle: "font-size: 14px", style: "font-size: 14px", - format: (v) => v + 543, + format: (v) => (v ? v + 543 : "-"), sort: (a: string, b: string) => a .toString() @@ -920,9 +920,11 @@ onMounted(async () => { :locale="'th'" :enableTimePicker="false" > - +