Commit a57fbb61 by Nattana Chaiyamat

แบบประเมินสมรรถนะ

parent 30016591
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
<ng-container *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index"> <ng-container *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index">
<button type="button" class="flex justify-center !items-center border bg-white p-2 text-center" <button type="button" class="flex justify-center !items-center border bg-white p-2 text-center"
style="border-radius:20px;width: 100px" style="border-radius:20px;width: 100px"
(click)="getAppraisalCompentencyForm(i);currentTap=appraisalCompentency.comType" (click)="getAppraisalCompentencyForm(i);currentPart=appraisalCompentency.comType"
[ngClass]="{'!bg-primary text-white':currentTap==appraisalCompentency.comType}"> [ngClass]="{'!bg-primary text-white':currentPart==appraisalCompentency.comType}">
{{appraisalCompentency.comType}} {{appraisalCompentency.comType}}
&nbsp; &nbsp;
<span class="flex align-center justify-center rounded-circle text-white" [class.bg-danger]="formRemain(i)" <span class="flex align-center justify-center rounded-circle text-white" [class.bg-danger]="formRemain(i)"
...@@ -22,16 +22,17 @@ ...@@ -22,16 +22,17 @@
<div class="flex justify-around !items-center border bg-white p-2 text-right" <div class="flex justify-around !items-center border bg-white p-2 text-right"
style="border-radius:20px;width: 100px;margin-left: auto;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));"> style="border-radius:20px;width: 100px;margin-left: auto;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));">
<i class="bg-white cursor-pointer border ti ti-chevron-down" <i class="bg-white cursor-pointer border ti ti-chevron-down"
style="padding: 1px;border-radius:5px;font-size:27px" (click)="allBiOpen(true)"></i> style="padding: 1px;border-radius:10px;font-size:27px" (click)="allBiOpen(true)"></i>
<i class="bg-white cursor-pointer border ti ti-chevron-up" style="padding: 1px;border-radius:5px;font-size:27px" <i class="bg-white cursor-pointer border ti ti-chevron-up"
(click)="allBiOpen(false)"></i> style="padding: 1px;border-radius:10px;font-size:27px" (click)="allBiOpen(false)"></i>
</div> </div>
</div> </div>
<div class="flex flex-col gap-2"> <div #scrollContainer class="flex flex-col gap-2 relative" style="height:40vh;overflow-y: auto;">
<ng-container *ngFor="let item2 of appraisalCompentencyFilter();let i = index;let f= first"> <ng-container *ngFor="let item2 of appraisalCompentencyFilter();let i = index;let f= first">
<button type="button" class="p-4 w-full bg-secondary text-white text-left" (click)="scrollToTable($event)" <button type="button" [attr.id]="'menu-' + i" class="p-4 w-full bg-secondary text-white text-left"
style="border-radius:20px" style="border-radius:20px"
(click)="biOpen.set(item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId, !biOpen.get(item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId))"> (click)="scrollToMenu(i);
allBiOpen(!biOpen.get(item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId),item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId)">
<span class="absolute -translate-y-1/5 rounded-circle text-white" [class.bg-danger]="inFormRemain(item2)" <span class="absolute -translate-y-1/5 rounded-circle text-white" [class.bg-danger]="inFormRemain(item2)"
[class.bg-success]="!inFormRemain(item2)"> [class.bg-success]="!inFormRemain(item2)">
<ng-container *ngIf="inFormRemain(item2)"> <ng-container *ngIf="inFormRemain(item2)">
...@@ -106,9 +107,10 @@ ...@@ -106,9 +107,10 @@
<td class="py-2 text-center" style="vertical-align: top">{{bi.assessmentId}}</td> <td class="py-2 text-center" style="vertical-align: top">{{bi.assessmentId}}</td>
<td class="py-2 text-center" style="vertical-align: top"> <td class="py-2 text-center" style="vertical-align: top">
<div class="flex flex-row justify-center gap-2 mb-2"> <div class="flex flex-row justify-center gap-2 mb-2">
<ng-container *ngFor="let item of [1,2,3,4,5];let f = first"> <ng-container *ngFor="let item of [5,4,3,2,1];let f = first">
<button type="button" class="p-4 border !border-soft-secondary text-soft-secondary bg-white" <button type="button"
style="border-radius:5px" class="h-12 w-12 p-0 shadow border !border-soft-secondary text-soft-secondary bg-white"
style="border-radius:10px"
(mouseenter)="biScore.set(bi.behavioralIndicators+bi.assessmentId,item)" (mouseenter)="biScore.set(bi.behavioralIndicators+bi.assessmentId,item)"
(mouseleave)="biScore.clear()" (mouseleave)="biScore.clear()"
(click)="bi.competencyBehavioral.scoreTopicExpectation=item;calnumberCheck()" [ngClass]="{'!border-secondary !text-secondary':bi.competencyBehavioral.scoreTopicExpectation>=item||(biScore.get(bi.behavioralIndicators+bi.assessmentId) ?? 0)>=item, (click)="bi.competencyBehavioral.scoreTopicExpectation=item;calnumberCheck()" [ngClass]="{'!border-secondary !text-secondary':bi.competencyBehavioral.scoreTopicExpectation>=item||(biScore.get(bi.behavioralIndicators+bi.assessmentId) ?? 0)>=item,
...@@ -117,9 +119,12 @@ ...@@ -117,9 +119,12 @@
</button> </button>
</ng-container> </ng-container>
</div> </div>
<div style="height: 20px;"> <div class="flex justify-center" style="height: 20px;white-space: nowrap; overflow: visible">
<span *ngIf="biScore.get(bi.behavioralIndicators+bi.assessmentId)" class="text-secondary"> <span *ngIf="biScore.get(bi.behavioralIndicators+bi.assessmentId)" class="text-secondary">
{{scoreDescriptions[(biScore.get(bi.behavioralIndicators+bi.assessmentId) ?? 0) - 1] }} {{scoreDescriptions[(biScore.get(bi.behavioralIndicators+bi.assessmentId) ?? 0)] }}
</span>
<span *ngIf="!biScore.get(bi.behavioralIndicators+bi.assessmentId)" class="text-secondary">
{{scoreDescriptions[bi.competencyBehavioral.scoreTopicExpectation] }}
</span> </span>
</div> </div>
</td> </td>
...@@ -129,45 +134,131 @@ ...@@ -129,45 +134,131 @@
</table> </table>
</ng-container> </ng-container>
</ng-container> </ng-container>
<button [attr.id]="'menu-' + appraisalCompentencyFilter().length" type="button"
class="p-4 w-full bg-secondary text-white text-left" style="border-radius:20px"
(click)="scrollToMenu(appraisalCompentencyFilter().length);allBiOpen(!biOpen.get('สรุป'),'สรุป')">
<span style="padding-left:50px">
สรุป
</span>
&nbsp;
<span>
คะแนนประเมิน
</span>
</button>
<ng-container *ngIf="biOpen.get('สรุป')">
<div class="pb-1rem px-2rem">
<div class="py-2 grid grid-cols-11">
<div class="col-span-8">ระดับความสามารถ (Target Degree)</div>
<div class="col-span-3 grid grid-cols-5">
<div class="col-span-1 text-center" *ngFor="let item of [5,4,3,2,1]">{{item}}</div>
</div>
</div>
<div class="py-2 grid grid-cols-11">
<div class="col-span-8">รวมจำนวนเครื่องหมายแต่ละช่อง (1)</div>
<div class="col-span-3 grid grid-cols-5">
<div class="col-span-1 text-center">
{{appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck5}}
</div>
<div class="col-span-1 text-center">
{{appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck4}}
</div>
<div class="col-span-1 text-center">
{{appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck3}}
</div>
<div class="col-span-1 text-center">
{{appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck2}}
</div> </div>
<div class="w-1/2 flex flex-col gap-2" *ngIf="appraisalCompentencyList.length"> <div class="col-span-1 text-center">
<div class="w-full font-size-18px font-weight-700 mt-2rem"> {{appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck1}}
ค่าถ่วงน้ำหนักของความสามารถในแต่ละระดับ
</div> </div>
<div class="w-full flex flex-col gap-2 mt-2">
<div class="w-full flex flex-row gap-2">
<div class="flex-1 text-center font-size-18px font-weight-700" *ngFor="let item of [5,4,3,2,1]">
{{item}}</div>
</div> </div>
<div class="w-full flex flex-row gap-2">
<div *ngFor="let item of [5,4,3,2,1]" class="flex-1 border border-secondary text-center align-center"
style="border-radius:5px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;">
{{calWeightScore(item)}}
</div> </div>
<div class="py-2 grid grid-cols-11">
<div class="col-span-8">ตัวคูณคะแนนในแต่ละช่อง (2)</div>
<div class="col-span-3 grid grid-cols-5">
<div class="col-span-1 text-center">{{setting.data.settingScore5}}</div>
<div class="col-span-1 text-center">{{setting.data.settingScore4}}</div>
<div class="col-span-1 text-center">{{setting.data.settingScore3}}</div>
<div class="col-span-1 text-center">{{setting.data.settingScore2}}</div>
<div class="col-span-1 text-center">{{setting.data.settingScore1}}</div>
</div> </div>
</div> </div>
<div class="w-full mt-2 flex justify-center"> <div class="py-2 grid grid-cols-11">
<div class="w-3/4 flex flex-row gap-2"> <div class="col-span-8">ถ่วงน้ำหนักผลรวม 1X2</div>
<div class="flex-1 font-size-18px font-weight-700 text-right align-center"> <div class="col-span-3 grid grid-cols-5">
คะแนนเฉลี่ย <div class="col-span-1 text-center" *ngFor="let item of [5,4,3,2,1]">{{calWeightScore(item)}}</div>
</div> </div>
<div class="flex-1 flex justify-center"> </div>
<div class="w-3/4 border border-secondary text-center align-center" <div class="py-2 grid grid-cols-11">
style="border-radius:5px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;"> <div class="col-span-8">คะแนนรวมหลังถ่วงน้ำหนัก</div>
<div class="col-span-3 grid grid-cols-5">
<div class="col-span-5 text-center">
{{showNumber(appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].weightedTotal)}}
</div>
</div>
</div>
<div class="py-2 grid grid-cols-11">
<div class="col-span-8">คะแนนเฉลี่ยคิดเป็น</div>
<div class="col-span-3 grid grid-cols-5">
<div class="col-span-5 text-center">
{{showNumber(appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore)}} {{showNumber(appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore)}}
</div> </div>
</div> </div>
<div class="flex-1 font-size-18px font-weight-700 text-right align-center">
ผล Gap
</div> </div>
<div class="flex-1 flex justify-center">
<div class="w-3/4 border border-secondary text-center align-center"
style="border-radius:5px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;">
{{calGap(appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore)}}
</div> </div>
<div class="pb-2rem px-2rem">
<div class="overflow-auto rounded-top-0.65rem">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover2">
<thead class="height-50px">
<tr class="font-size-12px">
<ng-container
*ngFor="let item of ['เกณฑ์การให้คะแนนการประเมิน','ผลประเมิน (A)','สรุปผล Gap'];let f = first ;let l = last">
<th scope="col" [attr.rowspan]="f?'1':'2'" [attr.colspan]="f?'2':'1'"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700 ">{{ item }}</span>
</th>
</ng-container>
</tr>
<tr class="font-size-12px">
<ng-container *ngFor="let item of ['เกณฑ์การให้คะแนน','เงื่อนไข']">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
{{item}}
</th>
</ng-container>
</tr>
</thead>
<tbody *ngIf="checkSheet.length">
<tr *ngFor="let item of checkSheet;let i = index" (mouseenter)="hoveredCode2 = 'true'"
(mouseleave)="hoveredCode2 = null" [ngClass]="{ 'table-hover2': 'true' === hoveredCode2 }">
<td class="align-start" rowspan="2">
<div *ngFor="let item2 of item.score">
<span>{{item2}} </span><br>
</div>
</td>
<td class="align-start" rowspan="2">
<div *ngFor="let item2 of item.condition">
<span>{{item2}} </span><br>
</div> </div>
</td>
<td class="align-start text-center">
{{calAverage(appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore)}}
</td>
<td class="align-start text-center">
{{calGap(appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore)}}
</td>
</tr>
<tr (mouseenter)="hoveredCode2 = 'true'" (mouseleave)="hoveredCode2 = null"
[ngClass]="{ 'table-hover2': 'true' === hoveredCode2 }">
<td class="align-start !white-space-normal" colspan="4">
หมายเหตุ<br>
ผลการประเมินอาจมีการเปลี่ยนแปลงเงื่อนไขข้อ 1-3 เนื่องจากมีคะแนนต่ำกว่าเกณฑ์ในบางข้อ
</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>
</ng-container>
</div> </div>
</div> </div>
</ng-template> </ng-template>
...@@ -176,7 +267,7 @@ ...@@ -176,7 +267,7 @@
<div class="ltr:border-r rtl:border-l border-gray-200 dark:border-white/10" style="width: 5rem"> <div class="ltr:border-r rtl:border-l border-gray-200 dark:border-white/10" style="width: 5rem">
<nav class="flex flex-col space-y-2 whitespace-nowrap" aria-label="Tabs" [attr.data-hs-tabs-vertical]="true"> <nav class="flex flex-col space-y-2 whitespace-nowrap" aria-label="Tabs" [attr.data-hs-tabs-vertical]="true">
<button *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index" <button *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index"
(click)="getAppraisalCompentencyForm(i)" [class.active]="currentTap==appraisalCompentency.comType" (click)="getAppraisalCompentencyForm(i)" [class.active]="currentPart==appraisalCompentency.comType"
type="button" type="button"
class="hs-tab-active:bg-primary ltr:hs-tab-active:border-r-transparent rtl:hs-tab-active:border-l-transparent hs-tab-active:text-white dark:hs-tab-active:bg-transparent ltr:dark:hs-tab-active:border-r-gray-800 rtl:dark:hs-tab-active:border-l-gray-800 dark:hs-tab-active:text-primary -mr-px py-2 px-3 inline-flex items-center gap-2 text-sm font-medium text-center border text-gray-500 ltr:rounded-l-lg rtl:rounded-r-lg hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300 !p-2" class="hs-tab-active:bg-primary ltr:hs-tab-active:border-r-transparent rtl:hs-tab-active:border-l-transparent hs-tab-active:text-white dark:hs-tab-active:bg-transparent ltr:dark:hs-tab-active:border-r-gray-800 rtl:dark:hs-tab-active:border-l-gray-800 dark:hs-tab-active:text-primary -mr-px py-2 px-3 inline-flex items-center gap-2 text-sm font-medium text-center border text-gray-500 ltr:rounded-l-lg rtl:rounded-r-lg hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300 !p-2"
[id]="'hs-tab-js-vertical-item-'+i" [attr.data-hs-tab]="'#hs-tab-js-vertical-'+i" [id]="'hs-tab-js-vertical-item-'+i" [attr.data-hs-tab]="'#hs-tab-js-vertical-'+i"
...@@ -197,7 +288,7 @@ ...@@ -197,7 +288,7 @@
<div class="flex-1 w-full"> <div class="flex-1 w-full">
<div *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index" [id]="'hs-tab-js-vertical-'+i" <div *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index" [id]="'hs-tab-js-vertical-'+i"
role="tabpanel" [class.hidden]="currentTap!=appraisalCompentency.comType" role="tabpanel" [class.hidden]="currentPart!=appraisalCompentency.comType"
[attr.aria-labelledby]="'hs-tab-js-vertical-item-'+i"> [attr.aria-labelledby]="'hs-tab-js-vertical-item-'+i">
<div class="hs-accordion-group w-full" *ngIf="appraisalCompentency"> <div class="hs-accordion-group w-full" *ngIf="appraisalCompentency">
<ng-container> <ng-container>
...@@ -238,7 +329,7 @@ ...@@ -238,7 +329,7 @@
<div <div
class="hs-accordion overflow-hidden bg-white border -mt-px first:rounded-t-sm last:rounded-b-sm dark:bg-bgdark dark:border-white/10" class="hs-accordion overflow-hidden bg-white border -mt-px first:rounded-t-sm last:rounded-b-sm dark:bg-bgdark dark:border-white/10"
[id]="'hs-primary-heading-'+i"> [id]="'hs-primary-heading-'+i">
<button (click)="scrollToTable($event)" <button
class="hs-accordion-toggle hs-accordion-active:text-white hs-accordion-active:bg-secondary group py-4 px-5 inline-flex items-center justify-between gap-x-3 w-full font-semibold text-start text-gray-800 transition hover:text-gray-500 dark:hs-accordion-active:text-white dark:text-gray-200 dark:hover:text-white/80" class="hs-accordion-toggle hs-accordion-active:text-white hs-accordion-active:bg-secondary group py-4 px-5 inline-flex items-center justify-between gap-x-3 w-full font-semibold text-start text-gray-800 transition hover:text-gray-500 dark:hs-accordion-active:text-white dark:text-gray-200 dark:hover:text-white/80"
[attr.aria-controls]="'hs-primary-collapse-'+i" type="button"> [attr.aria-controls]="'hs-primary-collapse-'+i" type="button">
<span class="d-flex align-items-center justify-content-center rounded-circle text-white" <span class="d-flex align-items-center justify-content-center rounded-circle text-white"
......
import { ViewportScroller } from '@angular/common'; import { ViewportScroller } from '@angular/common';
import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
import { Competency, MasfromEvaluationAssessment2List } from 'src/app/shared/model/competency.model'; import { Competency, MasfromEvaluationAssessment2List } from 'src/app/shared/model/competency.model';
import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.model'; import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.model';
import { SettingAssessmentModel, MySettingAssessmentModel } from 'src/app/shared/model/setting-assessment.model'; import { SettingAssessmentModel, MySettingAssessmentModel } from 'src/app/shared/model/setting-assessment.model';
...@@ -13,7 +13,7 @@ import Swal from 'sweetalert2'; ...@@ -13,7 +13,7 @@ import Swal from 'sweetalert2';
styleUrls: ['./pms-competency.component.scss'] styleUrls: ['./pms-competency.component.scss']
}) })
export class PmsCompetencyComponent { export class PmsCompetencyComponent {
@Input() currentTap = "" currentPart = ""
@Input() evaluateeId = "" @Input() evaluateeId = ""
@Input() evaluaterId = "" @Input() evaluaterId = ""
@Input() appraisalCompentencyList: Competency[] = [] @Input() appraisalCompentencyList: Competency[] = []
...@@ -21,6 +21,9 @@ export class PmsCompetencyComponent { ...@@ -21,6 +21,9 @@ export class PmsCompetencyComponent {
@Output() sendReturnPath: EventEmitter<any> = new EventEmitter<any>(); @Output() sendReturnPath: EventEmitter<any> = new EventEmitter<any>();
@Output() compentencyFormRemain: EventEmitter<any> = new EventEmitter<any>(); @Output() compentencyFormRemain: EventEmitter<any> = new EventEmitter<any>();
@Output() compentencyForm: EventEmitter<any> = new EventEmitter<any>(); @Output() compentencyForm: EventEmitter<any> = new EventEmitter<any>();
@Output() compentencyScore: EventEmitter<any> = new EventEmitter<any>();
@Output() compentencyWeightScore: EventEmitter<any> = new EventEmitter<any>();
@Output() compentencyGap: EventEmitter<any> = new EventEmitter<any>();
@Input() canEdit = false @Input() canEdit = false
@Input() currentStep = "" @Input() currentStep = ""
@Input() dateIso = "" @Input() dateIso = ""
...@@ -38,6 +41,7 @@ export class PmsCompetencyComponent { ...@@ -38,6 +41,7 @@ export class PmsCompetencyComponent {
}] }]
scoreDescriptions = [ scoreDescriptions = [
'',
'ไม่มีความรู้พื้นฐานเลย ขาดทักษะในงาน', 'ไม่มีความรู้พื้นฐานเลย ขาดทักษะในงาน',
'มีความรู้ในงานบ้างแต่ยังไม่สามารถ ประยุกต์ใช้ในงานได้', 'มีความรู้ในงานบ้างแต่ยังไม่สามารถ ประยุกต์ใช้ในงานได้',
'นำความรู้มาประยุกต์ใช้ในงานได้ ปฏิบัติงานเองได้ด้วยตัวเองแก้ไขปัญหาหน้างานได้', 'นำความรู้มาประยุกต์ใช้ในงานได้ ปฏิบัติงานเองได้ด้วยตัวเองแก้ไขปัญหาหน้างานได้',
...@@ -47,6 +51,8 @@ export class PmsCompetencyComponent { ...@@ -47,6 +51,8 @@ export class PmsCompetencyComponent {
evaluatee: { loading: boolean, data: EmployeeModel } = { loading: false, data: new MyEmployeeModel() } evaluatee: { loading: boolean, data: EmployeeModel } = { loading: false, data: new MyEmployeeModel() }
biOpen: Map<string, boolean> = new Map<string, boolean>() biOpen: Map<string, boolean> = new Map<string, boolean>()
biScore: Map<string, number> = new Map<string, number>() biScore: Map<string, number> = new Map<string, number>()
@ViewChild('scrollContainer') scrollContainer!: ElementRef;
constructor(private appraisalService: AppraisalService, constructor(private appraisalService: AppraisalService,
private employeeService: EmployeeService, private employeeService: EmployeeService,
private cdr: ChangeDetectorRef, private cdr: ChangeDetectorRef,
...@@ -56,7 +62,7 @@ export class PmsCompetencyComponent { ...@@ -56,7 +62,7 @@ export class PmsCompetencyComponent {
} }
ngOnInit(): void { ngOnInit(): void {
if (this.appraisalCompentencyList.length) { if (this.appraisalCompentencyList.length) {
this.currentTap = this.currentTap == '' ? this.appraisalCompentencyList[0].comType : this.currentTap this.currentPart = this.currentPart == '' ? this.appraisalCompentencyList[0].comType : this.currentPart
} }
this.getAppraisalCompentencyForm(0) this.getAppraisalCompentencyForm(0)
this.getSettingList() this.getSettingList()
...@@ -93,10 +99,14 @@ export class PmsCompetencyComponent { ...@@ -93,10 +99,14 @@ export class PmsCompetencyComponent {
getAppraisalCompentencyForm(index: number) { getAppraisalCompentencyForm(index: number) {
if (this.appraisalCompentencyList.length) { if (this.appraisalCompentencyList.length) {
this.appraisalCompentencyIndex = index this.appraisalCompentencyIndex = index
this.currentTap = this.appraisalCompentencyList[this.appraisalCompentencyIndex].comType this.currentPart = this.appraisalCompentencyList[this.appraisalCompentencyIndex].comType
this.biOpen.clear() this.biOpen.clear()
this.appraisalCompentencyFilter().forEach(x => { this.appraisalCompentencyFilter().forEach((x, i) => {
this.biOpen.set(x.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId, false) this.biOpen.set(x.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId, false)
const isLast = i === this.appraisalCompentencyFilter().length - 1;
if (isLast) {
this.biOpen.set("สรุป", false)
}
}) })
this.cdr.detectChanges() this.cdr.detectChanges()
switch (this.currentStep) { switch (this.currentStep) {
...@@ -268,22 +278,39 @@ export class PmsCompetencyComponent { ...@@ -268,22 +278,39 @@ export class PmsCompetencyComponent {
this.inFormRemain(data) this.inFormRemain(data)
).filter(data => data != 0).length ).filter(data => data != 0).length
).filter(data => data != 0).length ).filter(data => data != 0).length
const score = [1, 2, 3, 4, 5]
this.compentencyScore.emit(score.map(x => this.calWeightScore(x)))
this.compentencyWeightScore.emit(this.showNumber(this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore))
this.compentencyGap.emit(this.calGap(this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore))
this.compentencyForm.emit(this.appraisalCompentencyList) this.compentencyForm.emit(this.appraisalCompentencyList)
this.compentencyFormRemain.emit(remain) this.compentencyFormRemain.emit(remain)
} }
scrollToTable(event: MouseEvent) { allBiOpen(status: boolean, part?: string) {
const target = event.target as HTMLElement;
const position = target.getBoundingClientRect();
window.scrollTo({
top: position.top + window.scrollY - 100,
behavior: 'smooth'
});
}
allBiOpen(status: boolean) {
this.biOpen.forEach((_, key) => { this.biOpen.forEach((_, key) => {
if (part) {
if (part == key) {
this.biOpen.set(key, status) this.biOpen.set(key, status)
} else {
if (status) {
this.biOpen.set(key, false)
}
}
} else {
this.biOpen.set(key, status)
}
}) })
} }
scrollToMenu(index: number) {
setTimeout(() => {
const container = this.scrollContainer?.nativeElement as HTMLElement;
const target = container.querySelector('#menu-' + index) as HTMLElement;
if (container && target) {
container.scrollTop = target.offsetTop;
}
}, 0);
}
} }
<app-page-header *ngIf="evaluationForm=='sup'" [pathTitle]="['การประเมินผล', 'ประเมินโดยหัวหน้า']"></app-page-header>
<ng-container *ngTemplateOutlet="evaluation"></ng-container> <ng-container *ngTemplateOutlet="evaluation"></ng-container>
<ng-template #evaluation> <ng-template #evaluation>
<div *ngIf="evaluationForm=='sup'" class="pt-1.5rem w-full min-height-50px justify-between items-center"> <div *ngIf="evaluationForm=='sup'" class="pt-1.5rem w-full min-height-50px justify-between items-center">
...@@ -22,6 +21,7 @@ ...@@ -22,6 +21,7 @@
ประเมินผลประจำปี {{currentDate.getFullYear()}} ประเมินผลประจำปี {{currentDate.getFullYear()}}
</div> </div>
</div> </div>
<div class="flex flex-col gap-2" style="height:81vh;overflow-y: auto;">
<div class="w-full" *ngIf="compentency.data"> <div class="w-full" *ngIf="compentency.data">
<div class="box m-0" style="border-radius:20px"> <div class="box m-0" style="border-radius:20px">
<div class="box-body py-2"> <div class="box-body py-2">
...@@ -31,13 +31,22 @@ ...@@ -31,13 +31,22 @@
<img src="./assets/img/users/defaultperson.jpg" <img src="./assets/img/users/defaultperson.jpg"
class="w-24 h-24 rounded-full ring-4 ring-white/10 mx-auto" id="profile-img" alt="profile-img" /> class="w-24 h-24 rounded-full ring-4 ring-white/10 mx-auto" id="profile-img" alt="profile-img" />
</div> </div>
<div *ngIf="compentency.data.pms.gradeScore" class="w-1/2 flex" style="align-self: center;"> <div *ngIf="compentency.data.pms.gradeScore" class="w-1/2 flex flex-col justify-center"
style="align-self: center;">
<div class="flex-1 flex flex-row gap-1 justify-center">
<div *ngFor="let item of [1,2,3,4,5]">
<i class="ti" style="font-size:20px"
[ngClass]="item <= gradeStar(compentency.data.pms.gradeScore) ? 'ti-star-filled text-warning' : 'ti-star text-gray-300'"></i>
</div>
</div>
<div class="flex-1 text-center">
{{compentency.data.pms.gradeScore? "GRADE : " + compentency.data.pms.gradeScore : ''}} {{compentency.data.pms.gradeScore? "GRADE : " + compentency.data.pms.gradeScore : ''}}
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="w-full"> <div class="w-full">
<div class="box m-0" style="border-radius:20px"> <div class="box m-0" style="border-radius:20px">
<div class="box-header"> <div class="box-header">
...@@ -102,6 +111,78 @@ ...@@ -102,6 +111,78 @@
</div> </div>
</div> </div>
</div> </div>
<div class="w-full" *ngIf="currentTap=='แบบประเมินสมรรถนะ'">
<div class="box m-0" style="border-radius:20px">
<div class="box-header">
<div class="flex justify-between">
<h5 class="box-title">ค่าถ่วงน้ำหนักของความสามารถในแต่ละระดับ</h5>
</div>
</div>
<div class="box-body py-2">
<div class="w-full flex flex-col gap-2" *ngIf="compentency.data">
<div class="w-full flex flex-col gap-2 mt-2">
<div class="w-full flex flex-row gap-2">
<div class="flex-1 text-center font-size-18px font-weight-700" *ngFor="let item of [5,4,3,2,1]">
{{item}}</div>
</div>
<div class="w-full flex flex-row gap-2">
<div *ngFor="let item of [5,4,3,2,1]"
class="flex-1 border border-secondary text-center align-center"
style="border-radius:10px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;">
{{compentencyScore[item-1]}}
</div>
</div>
</div>
<div class="w-full mt-2 flex justify-center">
<div class="flex flex-row gap-2" style="width:80%">
<div class="flex-1 font-size-18px font-weight-700 text-right align-center">
คะแนนเฉลี่ย
</div>
<div class="flex-1 flex justify-center">
<div class="w-3/4 border border-secondary text-center align-center"
style="border-radius:10px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;">
{{compentencyWeightScore}}
</div>
</div>
<div class="flex-1 font-size-18px font-weight-700 text-right align-center">
ผล Gap
</div>
<div class="flex-1 flex justify-center">
<div class="w-3/4 border border-secondary text-center align-center"
style="border-radius:10px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;">
{{compentencyGap}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="w-full" *ngIf="currentTap=='ประเมินผลการปฏิบัติงาน'||currentTap=='สรุปคะแนนและข้อเสนอแนะ'">
<div class="box m-0" style="border-radius:20px">
<div class="box-header">
<div class="flex justify-between">
<h5 class="box-title">สรุปผลประเมิน</h5>
</div>
</div>
<div class="box-body py-2">
<div class='flex flex-col' *ngFor="let item of kpiScorePart; let i=index">
<div class='flex flex-row'>
<div style="width: 25%;">
{{item.text}}
</div>
<div style="width: 10%;">
:
</div>
<div style="width: 65%;">
{{item.score}}
</div>
</div>
</div>
</div>
</div>
</div>
<div class="w-full" *ngIf="compentency.data"> <div class="w-full" *ngIf="compentency.data">
<div class="box m-0" style="border-radius:20px"> <div class="box m-0" style="border-radius:20px">
<div class="box-header"> <div class="box-header">
...@@ -117,7 +198,8 @@ ...@@ -117,7 +198,8 @@
<div class="h-full flex items-center justify-center pb-4" style="width: 32px;"> <div class="h-full flex items-center justify-center pb-4" style="width: 32px;">
<div class="h-full w-[3px] bg-gray-100 pointer-events-none"></div> <div class="h-full w-[3px] bg-gray-100 pointer-events-none"></div>
</div> </div>
<div class="absolute rounded-full text-center align-center" style="justify-items:center;top:-5px"> <div class="absolute rounded-full text-center align-center"
style="justify-items:center;top:-5px">
<span class="d-flex align-items-center justify-content-center rounded-circle text-white" <span class="d-flex align-items-center justify-content-center rounded-circle text-white"
[class]="assessmentStatusClass(compentency.data.currentStep,i,returnField(compentency.data,apsEmp+'.status'))"> [class]="assessmentStatusClass(compentency.data.currentStep,i,returnField(compentency.data,apsEmp+'.status'))">
<i <i
...@@ -133,14 +215,8 @@ ...@@ -133,14 +215,8 @@
<ng-container *ngIf="i==0"> <ng-container *ngIf="i==0">
ผู้รับการประเมิน ผู้รับการประเมิน
</ng-container> </ng-container>
<ng-container *ngIf="i==1&&returnField(compentency.data,'apsapprove'+(i+1)+'.thFullName')"> <ng-container *ngIf="i>0">
ผู้ประเมิน ผู้อนุมัติลำดับที่ {{i}}
</ng-container>
<ng-container *ngIf="i==1&&!returnField(compentency.data,'apsapprove'+(i+1)+'.thFullName')">
ผู้อนุมัติลำดับที่ 1
</ng-container>
<ng-container *ngIf="i>1&&!returnField(compentency.data,'apsapprove'+(i+1)+'.thFullName')">
ผู้อนุมัติลำดับที่ {{i-1}}
</ng-container> </ng-container>
</span> </span>
<br> <br>
...@@ -211,6 +287,7 @@ ...@@ -211,6 +287,7 @@
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="flex flex-col w-3/4 gap-2"> <div class="flex flex-col w-3/4 gap-2">
<div class="w-full mb-2 flex"> <div class="w-full mb-2 flex">
<div class="w-3/4 flex flex-row gap-2"> <div class="w-3/4 flex flex-row gap-2">
...@@ -225,7 +302,7 @@ ...@@ -225,7 +302,7 @@
</ng-container> </ng-container>
</div> </div>
<div class="w-1/4"> <div class="w-1/4">
<div class="font-size-18px font-weight-700 text-primary"> <div class="font-size-18px font-weight-700 text-primary text-right">
สถานะผู้ประเมิน&nbsp;:&nbsp;{{currentStepText()}} สถานะผู้ประเมิน&nbsp;:&nbsp;{{currentStepText()}}
</div> </div>
</div> </div>
...@@ -270,8 +347,8 @@ ...@@ -270,8 +347,8 @@
[ngClass]="{'!bg-primary text-white':currentTap=='สรุปคะแนนและข้อเสนอแนะ'}"> [ngClass]="{'!bg-primary text-white':currentTap=='สรุปคะแนนและข้อเสนอแนะ'}">
สรุปคะแนนและข้อเสนอแนะ สรุปคะแนนและข้อเสนอแนะ
</button> </button>
<button *ngIf="evaluationForm=='sup'" type="button" class="flex-1 border bg-white p-2 text-center" <button type="button" class="flex-1 border bg-white p-2 text-center" style="border-radius:20px"
style="border-radius:20px" (click)="currentTap='แผนพัฒนาบุคคลากร'" (click)="currentTap='แผนพัฒนาบุคคลากร'"
[ngClass]="{'!bg-primary text-white':currentTap=='แผนพัฒนาบุคคลากร'}"> [ngClass]="{'!bg-primary text-white':currentTap=='แผนพัฒนาบุคคลากร'}">
แผนพัฒนาบุคคลากร แผนพัฒนาบุคคลากร
</button> </button>
...@@ -282,9 +359,10 @@ ...@@ -282,9 +359,10 @@
<app-pms-information></app-pms-information> <app-pms-information></app-pms-information>
</ng-container> </ng-container>
<ng-container *ngIf="currentTap=='แบบประเมินสมรรถนะ'&&compentency.data&&evaluaterId&&evaluateeId"> <ng-container *ngIf="currentTap=='แบบประเมินสมรรถนะ'&&compentency.data&&evaluaterId&&evaluateeId">
<app-pms-competency [currentTap]="currentTap" [appraisalCompentencyList]="compentency.data.competency" <app-pms-competency [appraisalCompentencyList]="compentency.data.competency" [evaluaterId]="evaluaterId"
[evaluaterId]="evaluaterId" [evaluateeId]="evaluateeId" [canEdit]="canEdit" [evaluateeId]="evaluateeId" [canEdit]="canEdit" [currentStep]="compentency.data.currentStep"
[currentStep]="compentency.data.currentStep" [dateIso]="dateIso" [dateIso]="dateIso" (compentencyScore)="compentencyScore=$event"
(compentencyWeightScore)="compentencyWeightScore=$event" (compentencyGap)="compentencyGap=$event"
(compentencyFormRemain)="compentencyFormRemain=$event" (compentencyFormRemain)="compentencyFormRemain=$event"
(compentencyForm)="compentency.data.competency=$event"></app-pms-competency> (compentencyForm)="compentency.data.competency=$event"></app-pms-competency>
</ng-container> </ng-container>
...@@ -293,19 +371,21 @@ ...@@ -293,19 +371,21 @@
<app-pms-kpi [appraisalPms]="compentency.data.pms" [currentTap]="currentTap" <app-pms-kpi [appraisalPms]="compentency.data.pms" [currentTap]="currentTap"
[evaluaterId]="evaluaterId" [evaluateeId]="evaluateeId" [canEdit]="canEdit" [evaluaterId]="evaluaterId" [evaluateeId]="evaluateeId" [canEdit]="canEdit"
[currentStep]="compentency.data.currentStep" [dateIso]="dateIso" [currentStep]="compentency.data.currentStep" [dateIso]="dateIso"
(kpiFormRemain)="kpiFormRemain=$event" (kpiForm)="compentency.data.pms=$event"></app-pms-kpi> (kpiFormRemain)="kpiFormRemain=$event" (scorePart)="kpiScorePart=$event"
(kpiForm)="compentency.data.pms=$event"></app-pms-kpi>
</ng-container> </ng-container>
</ng-container> </ng-container>
<ng-container *ngIf="currentTap=='สรุปคะแนนและข้อเสนอแนะ'&&compentency.data&&evaluateeId&&evaluaterId"> <ng-container *ngIf="currentTap=='สรุปคะแนนและข้อเสนอแนะ'&&compentency.data&&evaluateeId&&evaluaterId">
<app-pms-kpi [appraisalPms]="compentency.data.pms" [currentTap]="currentTap" [evaluaterId]="evaluaterId" <app-pms-kpi [appraisalPms]="compentency.data.pms" [currentTap]="currentTap" [evaluaterId]="evaluaterId"
[evaluateeId]="evaluateeId" [canEdit]="canEdit" [currentStep]="compentency.data.currentStep" [evaluateeId]="evaluateeId" [canEdit]="canEdit" [currentStep]="compentency.data.currentStep"
[dateIso]="dateIso" (kpiFormRemain)="kpiFormRemain=$event" [dateIso]="dateIso" (kpiFormRemain)="kpiFormRemain=$event" (scorePart)="kpiScorePart=$event"
(kpiForm)="compentency.data.pms=$event"></app-pms-kpi> (kpiForm)="compentency.data.pms=$event"></app-pms-kpi>
</ng-container> </ng-container>
<ng-container *ngIf="currentTap=='แผนพัฒนาบุคคลากร'&&compentency.data&&evaluateeId&&evaluaterId"> <ng-container *ngIf="currentTap=='แผนพัฒนาบุคคลากร'&&compentency.data&&evaluateeId&&evaluaterId">
<app-pms-idp [appraisalIdp]="compentency.data.idp" [evaluaterId]="evaluaterId" <app-pms-idp [appraisalIdp]="compentency.data.idp" [evaluaterId]="evaluaterId"
[evaluateeId]="evaluateeId" [canEdit]="canEdit" [currentStep]="compentency.data.currentStep" [evaluateeId]="evaluateeId" [canEdit]="evaluationForm=='sup'?canEdit:false"
[dateIso]="dateIso" (idpForm)="compentency.data.idp=$event"></app-pms-idp> [currentStep]="compentency.data.currentStep" [dateIso]="dateIso"
(idpForm)="compentency.data.idp=$event"></app-pms-idp>
</ng-container> </ng-container>
</div> </div>
<div *ngIf="compentency.data&&canSave" class="box-footer text-end space-x-3 rtl:space-x-reverse"> <div *ngIf="compentency.data&&canSave" class="box-footer text-end space-x-3 rtl:space-x-reverse">
......
...@@ -50,28 +50,46 @@ export class PmsFormEmployeeComponent { ...@@ -50,28 +50,46 @@ export class PmsFormEmployeeComponent {
currentDate = new Date() currentDate = new Date()
comment = "" comment = ""
compentencyScore: String[] = []
compentencyWeightScore = ""
compentencyGap = ""
kpiScorePart: { text: string, score: string }[] = []
currentStepText = () => { currentStepText = () => {
if (this.compentency.data) { if (this.compentency.data) {
if (this.compentency.data.apsassessy.employeeId == this.evaluaterId) { if (this.compentency.data.apsassessy.employeeId == this.evaluaterId) {
return "ผู้รับการประเมิน" return "ผู้รับการประเมิน"
} else if (this.compentency.data.apsapprove1.employeeId == this.evaluaterId) { } else if (this.compentency.data.apsapprove1.employeeId == this.evaluaterId) {
if (this.compentency.data.apsapprove2.employeeId) {
return "ผู้ประเมิน"
}
return "ผู้อนุมัติลำดับที่ 1" return "ผู้อนุมัติลำดับที่ 1"
} else if (this.compentency.data.apsapprove2.employeeId == this.evaluaterId) { } else if (this.compentency.data.apsapprove2.employeeId == this.evaluaterId) {
return "ผู้อนุมัติลำดับที่ 1"
} else if (this.compentency.data.apsapprove3.employeeId == this.evaluaterId) {
return "ผู้อนุมัติลำดับที่ 2" return "ผู้อนุมัติลำดับที่ 2"
} else if (this.compentency.data.apsapprove4.employeeId == this.evaluaterId) { } else if (this.compentency.data.apsapprove3.employeeId == this.evaluaterId) {
return "ผู้อนุมัติลำดับที่ 3" return "ผู้อนุมัติลำดับที่ 3"
} else if (this.compentency.data.apsapprove5.employeeId == this.evaluaterId) { } else if (this.compentency.data.apsapprove4.employeeId == this.evaluaterId) {
return "ผู้อนุมัติลำดับที่ 4" return "ผู้อนุมัติลำดับที่ 4"
} else if (this.compentency.data.apsapprove5.employeeId == this.evaluaterId) {
return "ผู้อนุมัติลำดับที่ 5"
} }
} }
return "" return ""
} }
gradeStar = (grade: string) => {
if (grade == 'A') {
return 5
} else if (grade == 'B') {
return 4
} else if (grade == 'C') {
return 3
} else if (grade == 'D') {
return 2
} else if (grade == 'E') {
return 1
}
return 0
}
statusCompetencyText = (status: string) => { statusCompetencyText = (status: string) => {
if (status === "no access") { if (status === "no access") {
return "ยังไม่ถึงขั้นตอนดำเนินการ" return "ยังไม่ถึงขั้นตอนดำเนินการ"
...@@ -487,4 +505,30 @@ export class PmsFormEmployeeComponent { ...@@ -487,4 +505,30 @@ export class PmsFormEmployeeComponent {
} }
} }
showNumber(text: number | string) {
const num = Number(text);
return isNaN(num) ? 0 : +(+num.toFixed(2));
}
calWeightScore(numberCheck: number) {
switch (numberCheck) {
case (1): {
return 1
}
case (2): {
return 2
}
case (3): {
return 3
}
case (4): {
return 4
}
case (5): {
return 5
}
default: { return }
}
}
} }
<ng-container *ngTemplateOutlet="idpEvaluation"></ng-container> <ng-container *ngTemplateOutlet="idpEvaluation"></ng-container>
<ng-template #idpEvaluation> <ng-template #idpEvaluation>
<ng-container *ngIf="appraisalIdp"> <ng-container *ngIf="appraisalIdp">
<div style="height: 46vh;overflow-y: auto;">
<div class="pb-2rem px-2rem"> <div class="pb-2rem px-2rem">
<div class="font-size-18px font-weight-700 text-primary"> <div class="font-size-18px font-weight-700 text-primary">
แผนพัฒนาบุคคลากรรายบุคคล แผนพัฒนาบุคคลากรรายบุคคล
...@@ -94,8 +95,8 @@ ...@@ -94,8 +95,8 @@
<div class="col-span-6 grid grid-cols-6 gap-2"> <div class="col-span-6 grid grid-cols-6 gap-2">
<div class="grid col-span-1 grid-cols-6 gap-2"> <div class="grid col-span-1 grid-cols-6 gap-2">
<div class="col-span-1"> <div class="col-span-1">
<input type="checkbox" class="ti-form-checkbox" id="idpStatus-0" (click)="resetFormIdp()" <input type="checkbox" class="ti-form-checkbox" id="idpStatus-0"
style="cursor: pointer;" (click)="resetFormIdp()" style="cursor: pointer;"
[class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'||!canEdit ||appraisalIdp.checkStep!='1'" [class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'||!canEdit ||appraisalIdp.checkStep!='1'"
name="idpStatus" (change)="appraisalIdp.masfromEvaluationIdp.idpStatus='0'" name="idpStatus" (change)="appraisalIdp.masfromEvaluationIdp.idpStatus='0'"
[checked]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'"> [checked]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'">
...@@ -109,7 +110,8 @@ ...@@ -109,7 +110,8 @@
</div> </div>
<div class="grid col-span-1 grid-cols-6 gap-2"> <div class="grid col-span-1 grid-cols-6 gap-2">
<div class="col-span-1"> <div class="col-span-1">
<input type="checkbox" class="ti-form-checkbox" id="idpStatus-1" style="cursor: pointer;" <input type="checkbox" class="ti-form-checkbox" id="idpStatus-1"
style="cursor: pointer;"
[class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='1'||!canEdit ||appraisalIdp.checkStep!='1'" [class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='1'||!canEdit ||appraisalIdp.checkStep!='1'"
name="idpStatus" (change)="appraisalIdp.masfromEvaluationIdp.idpStatus='1'" name="idpStatus" (change)="appraisalIdp.masfromEvaluationIdp.idpStatus='1'"
[checked]="appraisalIdp.masfromEvaluationIdp.idpStatus=='1'"> [checked]="appraisalIdp.masfromEvaluationIdp.idpStatus=='1'">
...@@ -131,7 +133,8 @@ ...@@ -131,7 +133,8 @@
<tr class="font-size-12px"> <tr class="font-size-12px">
<th scope="col" rowspan="3" <th scope="col" rowspan="3"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center"> class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700 ">{{'สมรรถนะที่พัฒนา\n(Competency)'}}</span> <span
class="font-size-12px font-weight-700 ">{{'สมรรถนะที่พัฒนา\n(Competency)'}}</span>
<div class="absolute top-1/2 transform -translate-y-1/2 right-0"> <div class="absolute top-1/2 transform -translate-y-1/2 right-0">
<i class="ti ti-dots-vertical fs-l"></i> <i class="ti ti-dots-vertical fs-l"></i>
</div> </div>
...@@ -225,7 +228,8 @@ ...@@ -225,7 +228,8 @@
<td class="align-start !white-space-normal" <td class="align-start !white-space-normal"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.behavioralIndicators||!data.behavioralIndicators.length"> [class.bg-table-gray]="!data.idpDevelopmentPlan||!data.behavioralIndicators||!data.behavioralIndicators.length">
<ng-container *ngIf="data.idpDevelopmentPlan"> <ng-container *ngIf="data.idpDevelopmentPlan">
<div class="mb-3" *ngFor="let bis of data.behavioralIndicators;let i2 = index"> <div class="mb-3"
*ngFor="let bis of data.behavioralIndicators;let i2 = index">
{{i2+1}}. {{bis.behavioralIndicators }} {{i2+1}}. {{bis.behavioralIndicators }}
</div> </div>
</ng-container> </ng-container>
...@@ -239,7 +243,8 @@ ...@@ -239,7 +243,8 @@
</td> </td>
<td class="align-start text-center" <td class="align-start text-center"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.idpDevelopmentPlan.coachMentor"> [class.bg-table-gray]="!data.idpDevelopmentPlan||!data.idpDevelopmentPlan.coachMentor">
<ng-container *ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.coachMentor"> <ng-container
*ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.coachMentor">
<i class="ti ti-check fs-xxl !fw-b"></i> <i class="ti ti-check fs-xxl !fw-b"></i>
</ng-container> </ng-container>
</td> </td>
...@@ -276,7 +281,8 @@ ...@@ -276,7 +281,8 @@
</div> </div>
<button <button
*ngIf="last&&canEdit&&appraisalIdp.masfromEvaluationIdp.idpStatus=='1'" *ngIf="last&&canEdit&&appraisalIdp.masfromEvaluationIdp.idpStatus=='1'"
type="button" class="ti-btn ti-btn-soft-secondary h-45px m-0 shadow-md" type="button"
class="ti-btn ti-btn-soft-secondary h-45px m-0 shadow-md"
(click)="openCompetencycourseDialog(i) "> (click)="openCompetencycourseDialog(i) ">
<i class="ri-add-line"></i> <i class="ri-add-line"></i>
Add Add
...@@ -285,7 +291,8 @@ ...@@ -285,7 +291,8 @@
</ng-container> </ng-container>
<ng-container <ng-container
*ngIf="canEdit&&!data.competencyCourse?.length&&appraisalIdp.masfromEvaluationIdp.idpStatus=='1'&&data.idpDevelopmentPlan.training"> *ngIf="canEdit&&!data.competencyCourse?.length&&appraisalIdp.masfromEvaluationIdp.idpStatus=='1'&&data.idpDevelopmentPlan.training">
<button type="button" class="ti-btn ti-btn-soft-secondary h-45px m-0 shadow-md" <button type="button"
class="ti-btn ti-btn-soft-secondary h-45px m-0 shadow-md"
(click)="openCompetencycourseDialog(i) "> (click)="openCompetencycourseDialog(i) ">
<i class="ri-add-line"></i> <i class="ri-add-line"></i>
Add Add
...@@ -312,6 +319,7 @@ ...@@ -312,6 +319,7 @@
</table> </table>
</div> </div>
</div> </div>
</div>
</ng-container> </ng-container>
</ng-template> </ng-template>
......
import { ChangeDetectorRef, Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core'; import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, SimpleChanges, ViewChild } from '@angular/core';
import { CompetencyGradeModel, MyCompetencyGradeModel } from 'src/app/shared/model/competency-grades.model'; import { CompetencyGradeModel, MyCompetencyGradeModel } from 'src/app/shared/model/competency-grades.model';
import { AppraisalService } from 'src/app/shared/services/appraisal.service'; import { AppraisalService } from 'src/app/shared/services/appraisal.service';
import { EmployeeService } from 'src/app/shared/services/employee.service'; import { EmployeeService } from 'src/app/shared/services/employee.service';
import { PmsGroupGradeService } from 'src/app/shared/services/pms-group-grade.service'; import { PmsGroupGradeService } from 'src/app/shared/services/pms-group-grade.service';
import { SettingAssessmentService } from 'src/app/shared/services/setting-assessment.service'; import { SettingAssessmentService } from 'src/app/shared/services/setting-assessment.service';
import { Pms } from 'src/app/shared/model/competency.model'; import { Part5Detail, Pms, PmsTopic } from 'src/app/shared/model/competency.model';
export interface Part8Model { export interface Part8Model {
id: number id: number
...@@ -27,14 +27,6 @@ export interface LevelStarModel { ...@@ -27,14 +27,6 @@ export interface LevelStarModel {
styleUrls: ['./pms-kpi.component.scss'] styleUrls: ['./pms-kpi.component.scss']
}) })
export class PmsKpiComponent { export class PmsKpiComponent {
part1show = true
part2show = true
part3show = true
part4show = true
part5show = true
part6show = true
part7show = true
part8show = true
data8List: Part8Model[] = [{ data8List: Part8Model[] = [{
id: 1, id: 1,
evaluationFactor: "Part 1 : ประเมินผลการปฏิบัติงานตามนโยบายบริษัท (Corporate KPI)", evaluationFactor: "Part 1 : ประเมินผลการปฏิบัติงานตามนโยบายบริษัท (Corporate KPI)",
...@@ -85,18 +77,23 @@ export class PmsKpiComponent { ...@@ -85,18 +77,23 @@ export class PmsKpiComponent {
scoreObtained: 0, scoreObtained: 0,
netScore: 0, netScore: 0,
}] }]
part9show = true partShow: string[] = []
part10show = true partOpen: Map<string, boolean> = new Map<string, boolean>()
partScore: Map<string, number> = new Map<string, number>()
@Input() evaluateeId = "" @Input() evaluateeId = ""
@Input() evaluaterId = "" @Input() evaluaterId = ""
@Input() appraisalPms?: Pms @Input() appraisalPms?: Pms
@Input() canEdit = false @Input() canEdit = false
@Input() currentStep = "" @Input() currentStep = ""
@Input() currentTap = "" @Input() currentTap = ""
@Input() currentPart = ""
@Input() dateIso = "" @Input() dateIso = ""
@Output() kpiFormRemain: EventEmitter<any> = new EventEmitter<any>(); @Output() kpiFormRemain: EventEmitter<any> = new EventEmitter<any>();
@Output() kpiForm: EventEmitter<any> = new EventEmitter<any>(); @Output() kpiForm: EventEmitter<any> = new EventEmitter<any>();
@Output() scorePart: EventEmitter<any> = new EventEmitter<any>();
groupGrade: { loading: boolean, dataList: CompetencyGradeModel[] } = { loading: false, dataList: [] } groupGrade: { loading: boolean, dataList: CompetencyGradeModel[] } = { loading: false, dataList: [] }
@ViewChild('scrollContainer') scrollContainer!: ElementRef;
constructor(private appraisalService: AppraisalService, constructor(private appraisalService: AppraisalService,
private pmsGroupGradeService: PmsGroupGradeService, private pmsGroupGradeService: PmsGroupGradeService,
private employeeService: EmployeeService, private employeeService: EmployeeService,
...@@ -104,12 +101,30 @@ export class PmsKpiComponent { ...@@ -104,12 +101,30 @@ export class PmsKpiComponent {
private settingAssessmentService: SettingAssessmentService private settingAssessmentService: SettingAssessmentService
) { ) {
} }
getTargetDetailValue(item: any): string {
const targetDetail = ['', 'targetEdetail', 'targetDdetail', 'targetCdetail', 'targetBdetail', 'targetAdetail']
const index = this.partScore.get(item.groupAssessment1.pmsTopic.pmsTopicId) ?? item.scoreTopicExpectation;
const key = targetDetail[index ?? 0] as keyof PmsTopic;
return item.groupAssessment1.pmsTopic[key];
}
getTargetDetailValuePart5(item: any): string {
const targetDetail = ['', 'targetEDetail', 'targetDDetail', 'targetCDetail', 'targetBDetail', 'targetADetail']
const index = this.partScore.get(item.tdesc) ?? item.pmsWorkingTimScore;
const key = targetDetail[index ?? 0] as keyof Part5Detail;
return item[key];
}
// ngOnChanges(changes: SimpleChanges): void { // ngOnChanges(changes: SimpleChanges): void {
// if (changes['evaluateeId']?.currentValue || changes['evaluaterId']?.currentValue) { // if (changes['evaluateeId']?.currentValue || changes['evaluaterId']?.currentValue) {
// this.toggleAllParts(this.evaluateeId == this.evaluaterId) // this.toggleAllParts(this.evaluateeId == this.evaluaterId)
// } // }
// } // }
ngOnInit(): void { ngOnInit(): void {
this.partOpen.clear()
this.partShow = this.currentTap == 'ประเมินผลการปฏิบัติงาน' ? ['PART 1', 'PART 2', 'PART 3', 'PART 4', 'PART 5', 'PART 6', 'PART 7'] : ['PART 8', 'PART 9', 'PART 10']
this.partShow.forEach(x => {
this.partOpen.set(x, false)
})
this.getPmsGroupGradeList() this.getPmsGroupGradeList()
this.getAppraisalPmsForm() this.getAppraisalPmsForm()
this.allFormRemain() this.allFormRemain()
...@@ -412,26 +427,24 @@ export class PmsKpiComponent { ...@@ -412,26 +427,24 @@ export class PmsKpiComponent {
toggleAllParts(check: boolean) { toggleAllParts(check: boolean, part?: string) {
this.part1show = check this.partOpen.forEach((_, key) => {
this.part2show = check if (part) {
this.part3show = check if (part == key) {
this.part4show = check this.partOpen.set(key, check)
this.part5show = check } else {
this.part6show = check if (check) {
this.part7show = check this.currentPart = part
this.part8show = check this.partOpen.set(key, false)
this.part9show = check } else {
this.part10show = check this.currentPart = ''
} }
}
scrollToTable(event: MouseEvent) { } else {
const target = event.target as HTMLElement; this.partOpen.set(key, check)
const position = target.getBoundingClientRect(); this.currentPart = ''
window.scrollTo({ }
top: position.top + window.scrollY - 100, })
behavior: 'smooth'
});
} }
part1Remain() { part1Remain() {
...@@ -500,4 +513,37 @@ export class PmsKpiComponent { ...@@ -500,4 +513,37 @@ export class PmsKpiComponent {
this.kpiFormRemain.emit(remain) this.kpiFormRemain.emit(remain)
} }
remainList() {
return [
this.part1Remain(),
this.part2Remain(),
this.part3Remain(),
-1,
this.part5Remain(),
this.part6Remain(),
this.part7Remain()
];
}
sendScorePart() {
if (this.appraisalPms) {
const score = this.data8List.map((x, i) => ({ text: "PART " + (i + 1), score: this.numberFixed2(x.netScore) })).concat([{ text: "สุทธิ", score: this.calNetScore() + '' }, { text: "Grade", score: this.appraisalPms.gradeScore }])
this.scorePart.emit(score)
}
}
scrollToMenu(id: string) {
setTimeout(() => {
const container = this.scrollContainer?.nativeElement as HTMLElement;
const target = document.getElementById(id);
if (container && target) {
const containerTop = container.getBoundingClientRect().top;
const targetTop = target.getBoundingClientRect().top;
const scrollOffset = targetTop - containerTop;
container.scrollTop += scrollOffset;
}
}, 0);
}
} }
<ng-container *ngIf="!onEdit"> <ng-container *ngIf="!onEdit">
<app-page-header [pathTitle]="pathTitle"></app-page-header> <!-- <app-page-header [pathTitle]="pathTitle"></app-page-header> -->
<ng-container *ngTemplateOutlet="selfEvaluation"></ng-container> <ng-container *ngTemplateOutlet="selfEvaluation"></ng-container>
</ng-container> </ng-container>
<ng-template #selfEvaluation> <ng-template #selfEvaluation>
......
<ng-container *ngIf="pageEvalution==''"> <ng-container *ngIf="pageEvalution==''">
<app-page-header [pathTitle]="pathTitle"></app-page-header>
<div class="bg-card-white"> <div class="bg-card-white">
</div> </div>
<div class="block-main-content"> <div class="block-main-content">
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
<!-- End::main-sidebar-header --> <!-- End::main-sidebar-header -->
<!-- ::main-sidebar --> <!-- ::main-sidebar -->
<ngx-simplebar [options]="options" style="background-color: #154C9C;"> <ngx-simplebar [options]="options" style="background-color: #174dd3;">
<div class="main-sidebar" id="sidebar-scroll"> <div class="main-sidebar" id="sidebar-scroll">
<!-- Start::nav --> <!-- Start::nav -->
<nav class="main-menu-container nav nav-pills flex-column sub-open active open"> <nav class="main-menu-container nav nav-pills flex-column sub-open active open">
......
...@@ -3457,7 +3457,7 @@ export interface GroupAssessment1 { ...@@ -3457,7 +3457,7 @@ export interface GroupAssessment1 {
companyId: string companyId: string
personalLevelModel: PersonalLevelModel personalLevelModel: PersonalLevelModel
pmsGroupAssessment0: PmsGroupAssessment0 pmsGroupAssessment0: PmsGroupAssessment0
pmsTopic: PmsTopic2 pmsTopic: PmsTopic
} }
export interface PersonalLevelModel { export interface PersonalLevelModel {
...@@ -3508,24 +3508,6 @@ export interface PmsType { ...@@ -3508,24 +3508,6 @@ export interface PmsType {
weight: number weight: number
} }
export interface PmsTopic2 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType2
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType2 { export interface PmsType2 {
companyId: string companyId: string
...@@ -3549,7 +3531,7 @@ export interface GroupAssessment12 { ...@@ -3549,7 +3531,7 @@ export interface GroupAssessment12 {
companyId: string companyId: string
personalLevelModel: PersonalLevelModel2 personalLevelModel: PersonalLevelModel2
pmsGroupAssessment0: PmsGroupAssessment02 pmsGroupAssessment0: PmsGroupAssessment02
pmsTopic: PmsTopic4 pmsTopic: PmsTopic
} }
export interface PersonalLevelModel2 { export interface PersonalLevelModel2 {
...@@ -3562,7 +3544,7 @@ export interface PersonalLevelModel2 { ...@@ -3562,7 +3544,7 @@ export interface PersonalLevelModel2 {
export interface PmsGroupAssessment02 { export interface PmsGroupAssessment02 {
companyId: string companyId: string
personalLevel: PersonalLevel7 personalLevel: PersonalLevel7
pmsTopic: PmsTopic3 pmsTopic: PmsTopic
} }
export interface PersonalLevel7 { export interface PersonalLevel7 {
...@@ -3572,24 +3554,6 @@ export interface PersonalLevel7 { ...@@ -3572,24 +3554,6 @@ export interface PersonalLevel7 {
tdesc: string tdesc: string
} }
export interface PmsTopic3 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType3
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType3 { export interface PmsType3 {
companyId: string companyId: string
...@@ -3600,24 +3564,7 @@ export interface PmsType3 { ...@@ -3600,24 +3564,7 @@ export interface PmsType3 {
weight: number weight: number
} }
export interface PmsTopic4 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType4
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType4 { export interface PmsType4 {
companyId: string companyId: string
...@@ -3641,7 +3588,7 @@ export interface GroupAssessment13 { ...@@ -3641,7 +3588,7 @@ export interface GroupAssessment13 {
companyId: string companyId: string
personalLevelModel: PersonalLevelModel3 personalLevelModel: PersonalLevelModel3
pmsGroupAssessment0: PmsGroupAssessment03 pmsGroupAssessment0: PmsGroupAssessment03
pmsTopic: PmsTopic6 pmsTopic: PmsTopic
} }
export interface PersonalLevelModel3 { export interface PersonalLevelModel3 {
...@@ -3654,7 +3601,7 @@ export interface PersonalLevelModel3 { ...@@ -3654,7 +3601,7 @@ export interface PersonalLevelModel3 {
export interface PmsGroupAssessment03 { export interface PmsGroupAssessment03 {
companyId: string companyId: string
personalLevel: PersonalLevel8 personalLevel: PersonalLevel8
pmsTopic: PmsTopic5 pmsTopic: PmsTopic
} }
export interface PersonalLevel8 { export interface PersonalLevel8 {
...@@ -3664,24 +3611,6 @@ export interface PersonalLevel8 { ...@@ -3664,24 +3611,6 @@ export interface PersonalLevel8 {
tdesc: string tdesc: string
} }
export interface PmsTopic5 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType5
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType5 { export interface PmsType5 {
companyId: string companyId: string
...@@ -3692,24 +3621,6 @@ export interface PmsType5 { ...@@ -3692,24 +3621,6 @@ export interface PmsType5 {
weight: number weight: number
} }
export interface PmsTopic6 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType6
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType6 { export interface PmsType6 {
companyId: string companyId: string
...@@ -3804,7 +3715,7 @@ export interface GroupAssessment14 { ...@@ -3804,7 +3715,7 @@ export interface GroupAssessment14 {
companyId: string companyId: string
personalLevelModel: PersonalLevelModel4 personalLevelModel: PersonalLevelModel4
pmsGroupAssessment0: PmsGroupAssessment04 pmsGroupAssessment0: PmsGroupAssessment04
pmsTopic: PmsTopic8 pmsTopic: PmsTopic
} }
export interface PersonalLevelModel4 { export interface PersonalLevelModel4 {
...@@ -3817,7 +3728,7 @@ export interface PersonalLevelModel4 { ...@@ -3817,7 +3728,7 @@ export interface PersonalLevelModel4 {
export interface PmsGroupAssessment04 { export interface PmsGroupAssessment04 {
companyId: string companyId: string
personalLevel: PersonalLevel9 personalLevel: PersonalLevel9
pmsTopic: PmsTopic7 pmsTopic: PmsTopic
} }
export interface PersonalLevel9 { export interface PersonalLevel9 {
...@@ -3827,25 +3738,6 @@ export interface PersonalLevel9 { ...@@ -3827,25 +3738,6 @@ export interface PersonalLevel9 {
tdesc: string tdesc: string
} }
export interface PmsTopic7 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType7
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType7 { export interface PmsType7 {
companyId: string companyId: string
edesc: string edesc: string
...@@ -3855,24 +3747,6 @@ export interface PmsType7 { ...@@ -3855,24 +3747,6 @@ export interface PmsType7 {
weight: number weight: number
} }
export interface PmsTopic8 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType8
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType8 { export interface PmsType8 {
companyId: string companyId: string
...@@ -3896,7 +3770,7 @@ export interface GroupAssessment15 { ...@@ -3896,7 +3770,7 @@ export interface GroupAssessment15 {
companyId: string companyId: string
personalLevelModel: PersonalLevelModel5 personalLevelModel: PersonalLevelModel5
pmsGroupAssessment0: PmsGroupAssessment05 pmsGroupAssessment0: PmsGroupAssessment05
pmsTopic: PmsTopic10 pmsTopic: PmsTopic
} }
export interface PersonalLevelModel5 { export interface PersonalLevelModel5 {
...@@ -3909,7 +3783,7 @@ export interface PersonalLevelModel5 { ...@@ -3909,7 +3783,7 @@ export interface PersonalLevelModel5 {
export interface PmsGroupAssessment05 { export interface PmsGroupAssessment05 {
companyId: string companyId: string
personalLevel: PersonalLevel10 personalLevel: PersonalLevel10
pmsTopic: PmsTopic9 pmsTopic: PmsTopic
} }
export interface PersonalLevel10 { export interface PersonalLevel10 {
...@@ -3919,24 +3793,7 @@ export interface PersonalLevel10 { ...@@ -3919,24 +3793,7 @@ export interface PersonalLevel10 {
tdesc: string tdesc: string
} }
export interface PmsTopic9 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType9
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType9 { export interface PmsType9 {
companyId: string companyId: string
...@@ -3947,24 +3804,7 @@ export interface PmsType9 { ...@@ -3947,24 +3804,7 @@ export interface PmsType9 {
weight: number weight: number
} }
export interface PmsTopic10 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType10
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType10 { export interface PmsType10 {
companyId: string companyId: string
......
...@@ -7069,8 +7069,8 @@ select option:focus { ...@@ -7069,8 +7069,8 @@ select option:focus {
/* End Tailwind Styles */ /* End Tailwind Styles */
/* Start Variables Styles */ /* Start Variables Styles */
:root { :root {
--color-primary: 21 76 156; --color-primary: 23 77 211;
--color-primary-rgb: 21, 76, 156; --color-primary-rgb: 23 77 211;
--color-secondary: 96 165 250; --color-secondary: 96 165 250;
--color-success: 29 190 90; --color-success: 29 190 90;
--color-info: 159 73 241; --color-info: 159 73 241;
......
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