Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
myAppraisal
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
angular
myAppraisal
Commits
4ad5679c
Commit
4ad5679c
authored
Feb 24, 2025
by
Nattana Chaiyamat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
การจัดการตัวชี้วัดเเละหลักสูตร
parent
f9cc9cf9
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
59 additions
and
31 deletions
+59
-31
edit-group-indicators.component.html
...dit-group-indicators/edit-group-indicators.component.html
+14
-11
edit-group-indicators.component.ts
.../edit-group-indicators/edit-group-indicators.component.ts
+3
-2
indicators-and-curriculum.component.html
...s-and-curriculum/indicators-and-curriculum.component.html
+10
-8
indicators-and-curriculum.component.ts
...ors-and-curriculum/indicators-and-curriculum.component.ts
+23
-2
self-evaluation.component.ts
...e-evaluation/self-evaluation/self-evaluation.component.ts
+9
-8
IMPORT_COMPETENCY_INDICATORS.xlsx
src/assets/template/IMPORT_COMPETENCY_INDICATORS.xlsx
+0
-0
No files found.
src/app/components/competency-assessment/competency-management/indicators-and-curriculum/edit-group-indicators/edit-group-indicators.component.html
View file @
4ad5679c
...
...
@@ -11,14 +11,14 @@
</div>
</div>
<div
class=
"flex justify-end"
>
<div
class=
"px-1"
>
<div
class=
"px-1"
*
ngIf=
"!seeTab"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-success h-45px m-0 shadow-md"
data-hs-overlay=
"#edit-group-indicators-alert-modal"
>
<i
class=
"ri-save-3-line"
></i>
Save
</button>
</div>
<div
class=
"px-1"
>
<div
class=
"px-1"
*
ngIf=
"!seeTab"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md"
(
click
)="
clearDataList
()"
>
<svg
class=
"svg-indigo"
width=
"16"
height=
"16"
viewBox=
"0 0 64.00 64.00"
xmlns=
"http://www.w3.org/2000/svg"
fill=
"none"
stroke=
"#595BEA"
stroke-width=
"3.84"
...
...
@@ -63,11 +63,12 @@
</div>
<div
class=
"space-y-2"
>
<label
class=
"ti-form-label"
>
ชื่อสมรรถนะ
</label>
<textarea
type=
"text"
rows=
"2"
class=
"ti-form-input"
[(
ngModel
)]="
indicatorsCourses
.
tdesc
"
>
</textarea>
<textarea
type=
"text"
rows=
"2"
class=
"ti-form-input bg-input-readonly"
readonly
[(
ngModel
)]="
indicatorsCourses
.
tdesc
"
>
</textarea>
</div>
<div
class=
"space-y-2"
>
<label
class=
"ti-form-label"
>
นิยามสมรรถนะ
</label>
<textarea
type=
"text"
rows=
"3"
class=
"ti-form-input
"
<textarea
type=
"text"
rows=
"3"
class=
"ti-form-input
bg-input-readonly"
readonly
[(
ngModel
)]="
indicatorsCourses
.
indicatorsCourseDetailTh
"
></textarea>
</div>
</div>
...
...
@@ -80,7 +81,7 @@
<thead
class=
"height-50px"
>
<tr
class=
"font-size-12px"
>
<ng-container
*
ngFor=
"let item of ['ร
หัส
ความคาดหวัง','ตัวชี้วัดพฤติกรรม','เครื่องมือประเมิน','หลักสูตร']; let f = first; let l = last"
>
*
ngFor=
"let item of ['ร
ะดับ
ความคาดหวัง','ตัวชี้วัดพฤติกรรม','เครื่องมือประเมิน','หลักสูตร']; let f = first; let l = last"
>
<th
scope=
"col"
class=
"relative px-10px py-10px bg-soft-secondary text-primary"
[
class
.!
text-center
]="
f
||
l
"
>
<span
class=
"font-size-12px font-weight-700"
>
{{ item }}
</span>
...
...
@@ -118,7 +119,7 @@
</a>
</div>
</div>
<div
class=
"col-span-1 text-center align-center"
>
<div
class=
"col-span-1 text-center align-center"
*
ngIf=
"!seeTab"
>
<div
class=
"ciricon border cursor-pointer"
(
click
)="
dataSelect=
data;dataSelectIndex=i;behaviorIndicatorsSelectIndex=l;deleteBehaviorIndicators()"
>
<i
class=
"ri-close-line text-red-500"
></i>
...
...
@@ -126,7 +127,7 @@
</div>
</span>
</div>
<div
class=
"flex rounded-md"
>
<div
class=
"flex rounded-md"
*
ngIf=
"!seeTab"
>
<input
type=
"text"
class=
"ti-form-input rounded-none ltr:rounded-l-md rtl:rounded-r-md focus:z-10"
[(
ngModel
)]="
data
.
behaviorIndicators
[
data
.
behaviorIndicators
.
length-1
]"
>
...
...
@@ -159,6 +160,7 @@
</div>
</a>
<div
class=
"ciricon flex text-start items-center cursor-pointer"
*
ngIf=
"!seeTab"
(
click
)="
assessmentToolsSelectIndex=
[l,m];deleteAssessmentTools()"
>
<i
class=
"ri-close-line text-red-500"
></i>
</div>
...
...
@@ -174,13 +176,14 @@
</ng-container>
</ng-container>
</button>
<button
type=
"button"
class=
"flex text-start items-center cursor-default"
>
<button
type=
"button"
class=
"flex text-start items-center cursor-default"
*
ngIf=
"!seeTab"
>
<i
class=
"ti ti-circle-plus text-green-500 cursor-pointer"
(
click
)="
dataSelectIndex=
i;dataSelect=data;assessmentToolsSelectIndex=[l,data.assessmentTools.length]"
data-hs-overlay=
"#assessment-tools-modal"
></i>
</button>
</span>
<button
*
ngIf=
"!data.assessmentTools.length"
type=
"button"
<button
*
ngIf=
"!data.assessmentTools.length
&&!seeTab
"
type=
"button"
class=
"flex text-start items-center cursor-default"
>
<i
class=
"ti ti-circle-plus text-green-500 cursor-pointer"
(
click
)="
dataSelectIndex=
i;dataSelect=data;assessmentToolsSelectIndex=[0,data.assessmentTools.length]"
...
...
@@ -190,7 +193,7 @@
</td>
<td
class=
"items-center justify-center"
>
<div
class=
"flex items-center w-full space-x-2"
>
<i
class=
"ti ti ti-book cursor-pointer i-gray px-1"
style=
"font-size: 28px;"
<i
*
ngIf=
"!seeTab"
class=
"ti ti ti-book cursor-pointer i-gray px-1"
style=
"font-size: 28px;"
(
click
)="
dataSelectIndex=
i"
data-hs-overlay=
"#curriculum-modal"
></i>
<div
class=
"flex flex-col flex-grow"
*
ngIf=
"data.curriculum.length"
>
<div
class=
"grid grid-cols-1 gap-1"
>
...
...
@@ -209,7 +212,7 @@
</div>
</span>
<div
class=
"col-span-1 flex justify-end items-center "
>
<div
class=
"col-span-1 flex justify-end items-center "
*
ngIf=
"!seeTab"
>
<div
class=
"ciricon border cursor-pointer"
(
click
)="
dataSelectIndex=
i;curriculumSelectIndex=l;deleteCurriculumList()"
>
<i
class=
"ri-close-line text-red-500"
></i>
...
...
src/app/components/competency-assessment/competency-management/indicators-and-curriculum/edit-group-indicators/edit-group-indicators.component.ts
View file @
4ad5679c
...
...
@@ -33,6 +33,7 @@ export interface CurriculumModal {
})
export
class
EditGroupIndicators
implements
OnInit
{
@
Input
()
competencytopic
:
CompetencytopicModel
=
new
MyCompetencytopicModel
({})
@
Input
()
seeTab
=
false
indicatorsCourses
:
IndicatorsCoursesModel
=
new
MyIndicatorsCoursesModel
({})
@
Output
()
sendEdit
:
EventEmitter
<
boolean
>
=
new
EventEmitter
<
boolean
>
();
search
=
""
...
...
@@ -59,13 +60,13 @@ export class EditGroupIndicators implements OnInit {
curriculumSelectIndex
:
number
=
-
1
dataLoading
=
false
constructor
(
private
assessmentService
:
AssessmentService
,
private
cdr
:
ChangeDetectorRef
,
private
toastr
:
ToastrService
,
private
competencycourseService
:
CompetencycourseService
,
private
indicatorsCoursesService
:
IndicatorsCoursesService
,
)
{
)
{
}
...
...
src/app/components/competency-assessment/competency-management/indicators-and-curriculum/indicators-and-curriculum.component.html
View file @
4ad5679c
<ng-container
*
ngIf=
"!editTab"
>
<ng-container
*
ngIf=
"!editTab
&&!seeTab
"
>
<div
class=
"w-full min-height-50px mb-10px justify-between items-center"
>
<div
class=
"flex justify-end"
>
<div
class=
"px-1"
>
...
...
@@ -33,7 +33,7 @@
<table
class=
"ti-custom-table ti-custom-table-head ti-custom-table-hover table-bordered"
>
<thead>
<tr>
<ng-container
*
ngFor=
"let item of ['รหัส','ชื่อหัวข้อ','ประเ
มิน
','การจัดการ']; let f = first; let l = last"
>
<ng-container
*
ngFor=
"let item of ['รหัส','ชื่อหัวข้อ','ประเ
ภท
','การจัดการ']; let f = first; let l = last"
>
<th
scope=
"col"
class=
"relative px-10px py-10px bg-soft-secondary text-primary !text-center"
>
<span
class=
"font-size-12px font-weight-700"
>
{{ item }}
</span>
<div
class=
"absolute top-1/2 transform -translate-y-1/2 right-0"
*
ngIf=
"!l"
>
...
...
@@ -69,10 +69,12 @@
<td>
{{item.name}}
</td>
<td
class=
"text-center"
>
{{item.type}}
</td>
<td
class=
"flex justify-center"
>
<i
class=
"ti ti-eye cursor-pointer i-gray fs-l px-1"
></i>
<i
class=
"ti ti-eye cursor-pointer i-gray fs-l px-1"
(
click
)="
selectIndicatorsCourses
(
item
);
seeTab=
true;editTab=false;pathTitleChange()"
></i>
<i
class=
"ti ti-edit cursor-pointer i-gray fs-l px-1"
(
click
)="
selectIndicatorsCourses
(
item
);
editTab=
true;pathTitleChange()"
></i>
<i
class=
"ti ti-file-download cursor-pointer i-gray fs-l px-1"
></i>
(
click
)="
selectIndicatorsCourses
(
item
);
seeTab=
false;editTab=true;pathTitleChange()"
></i>
<i
*
ngIf=
"item.file"
class=
"ti ti-file-download cursor-pointer i-gray fs-l px-1"
(
click
)="
dowloadExam
(
item
.
file
)"
></i>
</td>
</tr>
</tbody>
...
...
@@ -119,9 +121,9 @@
</ng-container>
<ng-container
*
ngIf=
"editTab"
>
<app-edit-group-indicators
[
competencytopic
]="
indicatorsCourses
"
(
sendEdit
)="
editTab=
$event;pathTitleChange()"
></app-edit-group-indicators>
<ng-container
*
ngIf=
"editTab
||seeTab
"
>
<app-edit-group-indicators
[
competencytopic
]="
indicatorsCourses
"
[
seeTab
]="
seeTab
"
(
sendEdit
)="
editTab=
$event;pathTitleChange()"
(
sendEdit
)="
seeTab=
$event"
></app-edit-group-indicators>
</ng-container>
...
...
src/app/components/competency-assessment/competency-management/indicators-and-curriculum/indicators-and-curriculum.component.ts
View file @
4ad5679c
...
...
@@ -7,6 +7,7 @@ export interface DataModel {
code
:
string
,
name
:
string
,
type
:
string
file
:
string
}
@
Component
({
selector
:
'app-indicators-and-curriculum'
,
...
...
@@ -16,6 +17,7 @@ export interface DataModel {
export
class
IndicatorsAndCurriculumComponent
{
@
Output
()
sendPathTitle
:
EventEmitter
<
string
[]
>
=
new
EventEmitter
<
string
[]
>
();
editTab
=
false
seeTab
=
false
currentPage
=
1
search
=
""
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
...
...
@@ -35,6 +37,25 @@ export class IndicatorsAndCurriculumComponent {
this
.
pathTitleChange
()
}
dowloadExam
(
fileName
:
string
)
{
this
.
fileService
.
dowloadFiles
(
fileName
).
subscribe
({
next
:
response
=>
{
const
url
=
window
.
URL
.
createObjectURL
(
response
);
const
a
=
document
.
createElement
(
"a"
);
a
.
href
=
url
;
a
.
download
=
fileName
;
document
.
body
.
appendChild
(
a
);
a
.
click
();
document
.
body
.
removeChild
(
a
);
window
.
URL
.
revokeObjectURL
(
url
);
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
this
.
cdr
.
detectChanges
()
}
})
}
onFileSelected
(
event
:
any
)
{
this
.
selectedFile
=
event
.
target
.
files
.
length
>
0
?
event
.
target
.
files
[
0
]
:
null
;
this
.
selectedFileName
=
this
.
selectedFile
?.
name
||
"กรุณาเลือกไฟล์"
...
...
@@ -98,7 +119,7 @@ export class IndicatorsAndCurriculumComponent {
this
.
dataLoading
=
true
this
.
competencytopicService
.
getList
().
subscribe
({
next
:
response
=>
{
this
.
dataList
=
response
.
map
(
x
=>
({
code
:
x
.
competencyTopicId
,
name
:
x
.
tdesc
,
type
:
x
.
competencyType
.
tdesc
}))
this
.
dataList
=
response
.
map
(
x
=>
({
code
:
x
.
competencyTopicId
,
name
:
x
.
tdesc
,
type
:
x
.
competencyType
.
tdesc
,
file
:
x
.
competencyFiles
||
""
}))
this
.
indicatorsCoursesList
=
response
this
.
dataLoading
=
false
this
.
searchChange
()
...
...
@@ -125,7 +146,7 @@ export class IndicatorsAndCurriculumComponent {
dataListFilter
()
{
return
this
.
dataList
.
filter
(
x
=>
{
const
match
=
x
.
code
.
includes
(
this
.
search
)
||
x
.
name
.
includes
(
this
.
search
);
const
match
=
x
.
code
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
())
||
x
.
name
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
()
);
return
match
;
});
}
...
...
src/app/components/performance-evaluation/self-evaluation/self-evaluation.component.ts
View file @
4ad5679c
...
...
@@ -107,6 +107,7 @@ export class SelfEvaluationComponent implements OnInit {
this
.
appraisalService
.
getFormCompentencyById
(
this
.
appraisalCompentency
.
select
.
masfromEvaluationRoundModel
.
evaluationRoundId
,
this
.
employee
.
data
.
employeeId
).
subscribe
({
next
:
response
=>
{
this
.
appraisalCompentencyForm
.
data
=
new
MyAppraisalFormModel
(
response
)
this
.
appraisalCompentencyForm
.
data
=
response
this
.
calnumberCheck
()
this
.
appraisalCompentencyForm
.
loading
=
false
this
.
cdr
.
detectChanges
()
...
...
@@ -160,7 +161,7 @@ export class SelfEvaluationComponent implements OnInit {
},
}).
then
((
result
)
=>
{
if
(
result
.
isConfirmed
)
{
const
body
=
new
MyAppraisalFormModel
({
...
this
.
appraisalCompentencyForm
.
data
,
apsassessyStatus
:
'1'
})
const
body
=
{
...
this
.
appraisalCompentencyForm
.
data
,
apsassessyStatus
:
'2'
}
this
.
appraisalService
.
postCompetency
(
body
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
...
...
@@ -238,7 +239,7 @@ export class SelfEvaluationComponent implements OnInit {
},
}).
then
((
result
)
=>
{
if
(
result
.
isConfirmed
)
{
const
body
=
new
MyAppraisalFormModel
({
...
this
.
appraisalCompentencyForm
.
data
,
apsassessyStatus
:
'2'
})
const
body
=
{
...
this
.
appraisalCompentencyForm
.
data
,
apsassessyStatus
:
'2'
}
this
.
appraisalService
.
postCompetency
(
body
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
...
...
@@ -291,11 +292,11 @@ export class SelfEvaluationComponent implements OnInit {
}
calnumberCheck
()
{
this
.
appraisalCompentencyForm
.
data
.
numberCheck1
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
x
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
filter
(
y
=>
y
.
competencyBehavioral
.
scoreTopicExpectation
==
1
).
length
).
reduce
((
acc
,
num
)
=>
acc
+
num
,
0
)
this
.
appraisalCompentencyForm
.
data
.
numberCheck2
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
x
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
filter
(
y
=>
y
.
competencyBehavioral
.
scoreTopicExpectation
==
2
).
length
).
reduce
((
acc
,
num
)
=>
acc
+
num
,
0
)
this
.
appraisalCompentencyForm
.
data
.
numberCheck3
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
x
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
filter
(
y
=>
y
.
competencyBehavioral
.
scoreTopicExpectation
==
3
).
length
).
reduce
((
acc
,
num
)
=>
acc
+
num
,
0
)
this
.
appraisalCompentencyForm
.
data
.
numberCheck4
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
x
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
filter
(
y
=>
y
.
competencyBehavioral
.
scoreTopicExpectation
==
4
).
length
).
reduce
((
acc
,
num
)
=>
acc
+
num
,
0
)
this
.
appraisalCompentencyForm
.
data
.
numberCheck5
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
x
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
filter
(
y
=>
y
.
competencyBehavioral
.
scoreTopicExpectation
==
5
).
length
).
reduce
((
acc
,
num
)
=>
acc
+
num
,
0
)
this
.
appraisalCompentencyForm
.
data
.
numberCheck1
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
(
x
:
any
)
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
filter
((
y
:
any
)
=>
y
.
competencyBehavioral
.
scoreTopicExpectation
==
1
).
length
).
reduce
((
acc
:
any
,
num
:
any
)
=>
acc
+
num
,
0
)
this
.
appraisalCompentencyForm
.
data
.
numberCheck2
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
(
x
:
any
)
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
filter
((
y
:
any
)
=>
y
.
competencyBehavioral
.
scoreTopicExpectation
==
2
).
length
).
reduce
((
acc
:
any
,
num
:
any
)
=>
acc
+
num
,
0
)
this
.
appraisalCompentencyForm
.
data
.
numberCheck3
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
(
x
:
any
)
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
filter
((
y
:
any
)
=>
y
.
competencyBehavioral
.
scoreTopicExpectation
==
3
).
length
).
reduce
((
acc
:
any
,
num
:
any
)
=>
acc
+
num
,
0
)
this
.
appraisalCompentencyForm
.
data
.
numberCheck4
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
(
x
:
any
)
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
filter
((
y
:
any
)
=>
y
.
competencyBehavioral
.
scoreTopicExpectation
==
4
).
length
).
reduce
((
acc
:
any
,
num
:
any
)
=>
acc
+
num
,
0
)
this
.
appraisalCompentencyForm
.
data
.
numberCheck5
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
(
x
:
any
)
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
filter
((
y
:
any
)
=>
y
.
competencyBehavioral
.
scoreTopicExpectation
==
5
).
length
).
reduce
((
acc
:
any
,
num
:
any
)
=>
acc
+
num
,
0
)
this
.
calWeightTotal
()
this
.
cdr
.
detectChanges
()
...
...
@@ -327,7 +328,7 @@ export class SelfEvaluationComponent implements OnInit {
this
.
calAverageScore
()
}
calAverageScore
()
{
const
total
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
x
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
length
).
reduce
((
acc
,
num
)
=>
acc
+
num
,
0
)
*
5
const
total
=
this
.
appraisalCompentencyForm
.
data
.
masfromEvaluationAssessment1lList
.
map
(
(
x
:
any
)
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
length
).
reduce
((
acc
:
any
,
num
:
any
)
=>
acc
+
num
,
0
)
*
5
if
(
total
)
{
this
.
appraisalCompentencyForm
.
data
.
averageScore
=
0
this
.
appraisalCompentencyForm
.
data
.
averageScore
=
(
this
.
appraisalCompentencyForm
.
data
.
weightedTotal
/
total
)
*
100
...
...
src/assets/template/IMPORT_COMPETENCY_INDICATORS.xlsx
View file @
4ad5679c
No preview for this file type
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment