Commit 73cd9771 by Nakarin Luankla

UPDATE รอบการประเมิน

parent 0e9ba3b9
......@@ -95,7 +95,7 @@
id="checkbox-{{item.data.evaluationRoundId}}" [(ngModel)]="item.check" (ngModelChange)="dataListCheck()">
</td>
<td >
<i class="ti ti-user cursor-pointer i-gray fs-l px-1" data-hs-overlay="#evaluation-cycle-person-modal" (click)="openModal('evaluation-cycle-person-modal',item.data.evaluationRoundId)"></i>
<!-- <i class="ti ti-user cursor-pointer i-gray fs-l px-1" data-hs-overlay="#evaluation-cycle-person-modal" (click)="openModal('evaluation-cycle-person-modal',item.data.evaluationRoundId)"></i> -->
<label for="checkbox-{{item.data.evaluationRoundId}}">&nbsp;{{item.data.evaluationRoundId}}</label>
</td>
<td>{{item.data.tdesc}}</td>
......
......@@ -136,7 +136,7 @@
<div id="form-pm-emp" class="hs-overlay hidden ti-modal" >
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto mt-7">
<div class="max-h-full overflow-hidden ti-modal-content !width-80" >
<div class="max-h-full overflow-hidden ti-modal-content !width-80 !box-modal" >
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
แก้ไขรายการสมรรถนะ
......@@ -239,7 +239,24 @@
</ng-container>
</tr>
</thead>
<tbody>
<tbody *ngIf="loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
aria-label="loading">
<span class="sr-only">Loading...</span>
</div>
</td>
</tr>
</tbody>
<tbody *ngIf="!loading&&!empassessmentListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="empassessmentListFilter().length > 0">
<tr *ngFor="let item of empassessmentListFilter() | slice:((currentPageRound-1) * 10) : (((currentPageRound-1) * 10) + 10);let i = index">
<td class="text-center">
<input type="checkbox" class="ti-form-checkbox cursor-pointer"
......@@ -294,7 +311,7 @@
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((currentPageRound-1) * 10)+1}} to {{empassessmentListFilter().length<10
?empassessmentListFilter().length: (currentPageRound==page.length ? ((currentPageRound * 10) - ((currentPageRound *
?empassessmentListFilter().length: (currentPageRound==pageRound.length ? ((currentPageRound * 10) - ((currentPageRound *
10) - empassessmentListFilter().length) ) :(currentPageRound * 10) ) }} of {{empassessmentListFilter().length}}
items</span>
</ul>
......@@ -317,7 +334,7 @@
<div id="form-assessment" class="hs-overlay hidden ti-modal" >
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto mt-7">
<div class="max-h-full overflow-hidden ti-modal-content !width-80" >
<div class="max-h-full overflow-hidden ti-modal-content !width-80 !box-modal" >
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
รายการสมรรถนะ
......@@ -339,7 +356,7 @@
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
placeholder="Search by No. or Name" style="height: 40px;">
placeholder="Search by No. or Name" style="height: 40px;" [(ngModel)]="searchIndicator" (ngModelChange)="searchIndicatorsChange()">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......@@ -384,16 +401,10 @@
</tr>
</thead>
<tbody>
<tr *ngFor="let item of[
['CC-01', 'จิตสำนึกด้านความปลอดภัยและคุณภาพ (Safety & Quality)','1'],
['CC-01', 'จิตสำนึกด้านความปลอดภัยและคุณภาพ (Safety & Quality)','2'],
['CC-01', 'จิตสำนึกด้านความปลอดภัยและคุณภาพ (Safety & Quality)','3'],
['CC-01', 'จิตสำนึกด้านความปลอดภัยและคุณภาพ (Safety & Quality)','4'],
['CC-01', 'จิตสำนึกด้านความปลอดภัยและคุณภาพ (Safety & Quality)','5'],
['CC-01', 'จิตสำนึกด้านความปลอดภัยและคุณภาพ (Safety & Quality)','6']];let i = index">
<td class="flex justify-center" style="font-size: 12px;">{{item[0]}}</td>
<td style="font-size: 12px; width: 60%;">{{item[1]}}</td>
<td style="font-size: 12px; width: 20%;">{{item[2]}}</td>
<tr *ngFor="let item of filterIndicators() | slice:((currentPageIndicator-1) * 10) : (((currentPageIndicator-1) * 10) + 10);let i = index">
<td>{{item.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId}}</td>
<td >{{item.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.tdesc}}</td>
<td class="!text-center">{{item.groupAssessment1.competencyIndicatorsCourses1Mini.lineNo}}</td>
<td class="flex justify-center">
<div class="px-1">
<button type="button"
......@@ -409,41 +420,41 @@
</div>
</div>
</div>
<nav class="pagination-style-3 overflow-auto my-5" *ngIf="pageRound.length">
<nav class="pagination-style-3 overflow-auto my-5" *ngIf="pageIndicator.length">
<ul class="ti-pagination">
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="currentPageRound = (currentPageRound-1 || 1)">
(click)="currentPageIndicator = (currentPageIndicator-1 || 1)">
<i class="ri-arrow-left-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
<li *ngFor="let item of pageRound;let f = first;let l = last">
<ng-container *ngIf="item==3&&currentPageRound!=1&&currentPageRound!=2&&currentPageRound!=3">
<li *ngFor="let item of pageIndicator;let f = first;let l = last">
<ng-container *ngIf="item==3&&currentPageIndicator!=1&&currentPageIndicator!=2&&currentPageIndicator!=3">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
<ng-container *ngIf="(f||l)||(item==currentPageRound-1||item==currentPageRound||item==currentPageRound+1)">
<a class="page-link" href="javascript:void(0);" [class.active]="item==currentPageRound"
(click)="currentPageRound=item">{{item}}
<ng-container *ngIf="(f||l)||(item==currentPageIndicator-1||item==currentPageIndicator||item==currentPageIndicator+1)">
<a class="page-link" href="javascript:void(0);" [class.active]="item==currentPageIndicator"
(click)="currentPageIndicator=item">{{item}}
</a>
</ng-container>
<ng-container
*ngIf="item==pageRound.length-2&&currentPageRound!=pageRound.length&&currentPageRound!=pageRound.length-1&&currentPageRound!=pageRound.length-2">
*ngIf="item==pageIndicator.length-2&&currentPageIndicator!=pageIndicator.length&&currentPageIndicator!=pageIndicator.length-1&&currentPageIndicator!=pageIndicator.length-2">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
</li>
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="currentPageRound = (currentPageRound > pageRound.length-1 ? currentPageRound: currentPageRound+1 )">
(click)="currentPageIndicator = (currentPageIndicator > pageIndicator.length-1 ? currentPageIndicator: currentPageIndicator+1 )">
<i class="ri-arrow-right-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((currentPageRound-1) * 10)+1}} to {{empassessmentListFilter().length<10
?empassessmentListFilter().length: (currentPageRound==page.length ? ((currentPageRound * 10) - ((currentPageRound *
10) - empassessmentListFilter().length) ) :(currentPageRound * 10) ) }} of {{empassessmentListFilter().length}}
<span>Show {{((currentPageIndicator-1) * 10)+1}} to {{empassessmentListFilter().length<10
?empassessmentListFilter().length: (currentPageIndicator==pageIndicator.length ? ((currentPageIndicator * 10) - ((currentPageIndicator *
10) - empassessmentListFilter().length) ) :(currentPageIndicator * 10) ) }} of {{empassessmentListFilter().length}}
items</span>
</ul>
</nav>
......@@ -454,9 +465,7 @@
(click)="closeModalClass('form-assessment')">
ย้อนกลับ
</button>
<a class="ti-btn ti-btn-success" href="javascript:void(0);" >
บันทึกข้อมูล
</a>
</div>
</div>
</div>
......@@ -467,7 +476,7 @@
<div id="modal-alert" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] flex items-center">
<div class="max-h-full overflow-hidden ti-modal-content w-full">
<div class="max-h-full overflow-hidden ti-modal-content w-full !box-modal">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
แจ้งเตือน
......
......@@ -25,25 +25,32 @@ export class EditEvaluationFormComponent {
assessmentList: AppraisalModel[] = []
evaluationRound:EvaluationCycleModel = new MyEvaluationCycleModel()
evaluationRound: EvaluationCycleModel = new MyEvaluationCycleModel()
isChecked: boolean = false;
isChecked: boolean = false;
apsassessy = ""
empassessmentList: AppraisalModel[] = []
searchEmp = ""
empassessmentRoundList: AppraisalRoundModel[] = []
empassessmentRoundListCheckbox: {checkbox: boolean, item: AppraisalRoundModel}[] = []
empassessmentRoundListCheckbox: { checkbox: boolean, item: AppraisalRoundModel }[] = []
currentPageRound = 1
pageRound = Array.from({ length: 1 }, (_, i) => i + 1);
searchRound = ""
selectEmp:AppraisalModel = new MyAppraisalModel()
selectEmp: AppraisalModel = new MyAppraisalModel()
numDataListChecked = 0
msg = ""
typeForm = ""
selectData: AppraisalRoundModel = new MyAppraisalRoundModel()
loading = false
indicatorsList:AppraisalRoundModel[] = []
searchIndicator = ""
currentPageIndicator = 1
pageIndicator = Array.from({ length: 1 }, (_, i) => i + 1);
constructor(private toastr: ToastrService,
private cdr: ChangeDetectorRef,
private evaluationAssessmentService: EvaluationAssessmentService,
......@@ -106,36 +113,35 @@ export class EditEvaluationFormComponent {
this.page = Array.from({ length: Math.ceil(filteredData.length / 10) }, (_, i) => i + 1);
}
openModalClass(id: string,type?:string) {
this.typeForm = type??""
if(id == 'modal-alert'){
if(type == 'deleteForm'){
openModalClass(id: string, type?: string) {
this.typeForm = type ?? ""
if (id == 'modal-alert') {
if (type == 'deleteForm') {
this.msg = 'ยืนยันการลบรายการ'
}else if(type == 'addForm'){
} else if (type == 'addForm') {
this.msg = 'ยืนยันการบันทึกรายการ'
}
}
if(id){
if (id) {
document.getElementById(id)?.classList.add('open');
document.getElementById(id)?.classList.remove('hidden');
setTimeout(() => {
document.getElementById(id)?.setAttribute('aria-overlay', 'false')
}, 10);
}
this.isChecked = false;
this.numDataListChecked = 0;
}
closeModalClass(id: string) {
const modal = document.getElementById(id);
console.log("🚀 ~ EditEvaluationFormComponent ~ closeModalClass ~ modal:", modal)
if (id) {
modal?.classList.add("hidden"); // ซ่อน Modal
}
}
saveAssessmentList() {
......@@ -155,41 +161,67 @@ export class EditEvaluationFormComponent {
}
}
openAddRoundModel(evaluationRoundId:string,apsassessy:string,item:AppraisalModel,model:string) {
openAddRoundModel(evaluationRoundId: string, apsassessy: string, item: AppraisalModel, model: string) {
this.selectEmp = item
this.openModalClass(model);
this.evaluationRoundId = evaluationRoundId
this.apsassessy = apsassessy
this.getApsassessy()
this.getApsassessyMini();
}
getApsassessy(){
this.evaluationAssessmentService.getApsassessy(this.evaluationRoundId,this.apsassessy).subscribe({
console.log("🚀 ~ EditEvaluationFormComponent ~ openAddRoundModel ~ this.selectEmp:", this.selectEmp)
this.openModalClass(model);
this.evaluationRoundId = evaluationRoundId
this.apsassessy = apsassessy
this.getApsassessy()
this.getApsassessyMini();
this.getIndicators();
}
getIndicators() {
this.evaluationAssessmentService.getIndicators(this.selectEmp.apsassessy.pl.plId).subscribe({
next: response => {
this.indicatorsList = response
this.cdr.detectChanges();
},
error: err => {
console.error('Error fetching evaluation cycles:', err);
}
})
}
filterIndicators() {
return this.indicatorsList.filter(x =>
x.groupAssessment1?.competencyIndicatorsCourses1Mini?.competencyIndicatorsCourses0?.competencyTopic?.tdesc?.toLowerCase()?.includes(this.searchIndicator?.toLowerCase() ?? "") ||
x.groupAssessment1?.competencyIndicatorsCourses1Mini?.competencyIndicatorsCourses0?.competencyTopic?.edesc?.toLowerCase()?.includes(this.searchIndicator?.toLowerCase() ?? "") ||
x.groupAssessment1?.competencyIndicatorsCourses1Mini?.competencyIndicatorsCourses0?.competencyTopic?.competencyTopicId?.toLowerCase()?.includes(this.searchIndicator?.toLowerCase() ?? ""))
}
searchIndicatorsChange() {
this.currentPageIndicator = 1;
const filteredData = this.filterIndicators();
this.pageIndicator = Array.from({ length: Math.ceil(filteredData.length / 10) }, (_, i) => i + 1);
}
getApsassessy() {
this.loading = true
this.evaluationAssessmentService.getApsassessy(this.evaluationRoundId, this.apsassessy).subscribe({
next: response => {
this.empassessmentList = response
this.cdr.detectChanges();
this.loading = false
},
error: err => {
this.loading = false
console.error('Error fetching evaluation cycles:', err);
}
})
}
})
}
getApsassessyMini(){
this.evaluationAssessmentService.getApsassessyMini(this.evaluationRoundId,this.apsassessy).subscribe({
getApsassessyMini() {
this.evaluationAssessmentService.getApsassessyMini(this.evaluationRoundId, this.apsassessy).subscribe({
next: response => {
this.empassessmentRoundList = response
this.empassessmentRoundListCheckbox = this.empassessmentRoundList.map(item => ({checkbox: false, item}))
this.empassessmentRoundListCheckbox = this.empassessmentRoundList.map(item => ({ checkbox: false, item }))
this.cdr.detectChanges();
},
error: err => {
console.error('Error fetching evaluation cycles:', err);
}
})
}
})
}
empassessmentListFilter() {
return this.empassessmentRoundListCheckbox.filter(x =>
x.item.groupAssessment1?.competencyIndicatorsCourses1Mini?.competencyIndicatorsCourses0?.competencyTopic?.tdesc?.toLowerCase()?.includes(this.searchRound?.toLowerCase() ?? "")||
x.item.groupAssessment1?.competencyIndicatorsCourses1Mini?.competencyIndicatorsCourses0?.competencyTopic?.tdesc?.toLowerCase()?.includes(this.searchRound?.toLowerCase() ?? "") ||
x.item.groupAssessment1?.competencyIndicatorsCourses1Mini?.competencyIndicatorsCourses0?.competencyTopic?.edesc?.toLowerCase()?.includes(this.searchRound?.toLowerCase() ?? "") ||
x.item.groupAssessment1?.competencyIndicatorsCourses1Mini?.competencyIndicatorsCourses0?.competencyTopic?.competencyTopicId?.toLowerCase()?.includes(this.searchRound?.toLowerCase() ?? ""))
}
......@@ -204,32 +236,32 @@ export class EditEvaluationFormComponent {
this.checkempassessmentRoundListCheckbox();
}
checkempassessmentRoundListCheckbox(){
checkempassessmentRoundListCheckbox() {
this.numDataListChecked = this.empassessmentRoundListCheckbox.filter(x => x.checkbox).length
this.isChecked = this.numDataListChecked ? true : false
}
deleteFormOne(item:AppraisalRoundModel){
deleteFormOne(item: AppraisalRoundModel) {
this.selectData = item
}
deleteAssessment() {
let body = this.empassessmentRoundListCheckbox.filter(x => x.checkbox).map(x => x.item)
if(this.typeForm=='deleteFormOne'){
if (this.typeForm == 'deleteFormOne') {
body = [this.selectData]
}
if( body.length == 0){
if (body.length == 0) {
this.showAlert('กรุณาเลือกรายการ', 'error')
return
}
this.evaluationAssessmentService.deletemMini(body,this.selectEmp.apsassessy.employeeId,this.selectEmp.masfromEvaluationRound.evaluationRoundId).subscribe({
this.evaluationAssessmentService.deletemMini(body, this.selectEmp.apsassessy.employeeId, this.selectEmp.masfromEvaluationRound.evaluationRoundId).subscribe({
next: response => {
if (response.success) {
this.showAlert(response.message, 'success')
this.getApsassessyMini();
} else {
this.showAlert(response.message, 'error')
}
}
}
})
}
......
......@@ -110,6 +110,7 @@ export interface EmployeeModel {
ssoFlag: string
thFullName: string
engFullName: string
pl: PLModel
}
export class MyEmployeeModel implements EmployeeModel {
......@@ -198,6 +199,7 @@ export class MyEmployeeModel implements EmployeeModel {
ssoFlag: string
thFullName: string
engFullName: string
pl: PLModel
constructor(data?: Partial<EmployeeModel>) {
this.employeeId = data?.employeeId || ""
this.prefix = new MyPrefixModel(data?.prefix || {})
......@@ -284,6 +286,8 @@ export class MyEmployeeModel implements EmployeeModel {
this.ssoFlag = data?.ssoFlag || ""
this.thFullName = data?.thFullName || ""
this.engFullName = data?.engFullName || ""
this.pl = new MyPLModel(data?.workarea || {})
}
}
......@@ -27,6 +27,9 @@ export class EvaluationAssessmentService {
getApsassessyMini(evaluationRoundId: string,apsassessy:string): Observable<AppraisalRoundModel[]> {
return this.http.get<AppraisalRoundModel[]>(this.urlApi + "/mini/" + evaluationRoundId+"/"+apsassessy)
}
getIndicators(plId: string): Observable<AppraisalRoundModel[]> {
return this.http.get<AppraisalRoundModel[]>(this.urlApi + "/indicators/list/" + plId)
}
post(body: EvaluationCycleModel): Observable<AlertModel> {
return this.http.post<AlertModel>(this.urlApi, body)
}
......
......@@ -375,4 +375,10 @@ ngx-dropzone {
}
.\!width-70{
width: 70% !important;
}
.\!box-modal{
box-shadow: 0px 0px 0px 9999px rgba(0,0,0,0.25)!important;
-webkit-box-shadow: 0px 0px 0px 9999px rgba(0,0,0,0.25)!important;
-moz-box-shadow: 0px 0px 0px 9999px rgba(0,0,0,0.25)!important;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment