Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mySkill-x
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
mySkill-x
Commits
c3478cad
Commit
c3478cad
authored
Jun 13, 2025
by
Nattana Chaiyamat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
อัพรูปโปรไฟล์
parent
489eb7b1
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
229 additions
and
76 deletions
+229
-76
role-permission-config.component.ts
...ole-permission-config/role-permission-config.component.ts
+0
-1
sub-employee-registration.component.html
...yee-registration/sub-employee-registration.component.html
+22
-1
sub-employee-registration.component.ts
...loyee-registration/sub-employee-registration.component.ts
+89
-21
edit-define-document-form.component.ts
...fine-document-form/edit-define-document-form.component.ts
+0
-1
datagrid-syncfution.component.html
...ts/datagrid-syncfution/datagrid-syncfution.component.html
+40
-30
datagrid-syncfution.component.ts
...ents/datagrid-syncfution/datagrid-syncfution.component.ts
+18
-3
ess-profile.component.html
src/app/components/ess-profile/ess-profile.component.html
+1
-1
ess-profile.component.ts
src/app/components/ess-profile/ess-profile.component.ts
+11
-1
pms-form-employee.component.html
...uation/pms-form-employee/pms-form-employee.component.html
+1
-1
pms-form-employee.component.ts
...aluation/pms-form-employee/pms-form-employee.component.ts
+12
-2
supervisor-evaluation.component.html
...upervisor-evaluation/supervisor-evaluation.component.html
+2
-2
supervisor-evaluation.component.ts
.../supervisor-evaluation/supervisor-evaluation.component.ts
+11
-1
management-evaluation-cycle.component.ts
...evaluation-cycle/management-evaluation-cycle.component.ts
+1
-2
assessment-topics.component.ts
...rfomance/assessment-topics/assessment-topics.component.ts
+0
-1
pms-grade-management.component.ts
...on/pms-grade-management/pms-grade-management.component.ts
+0
-1
time-attendance-manage.component.ts
...ime-attendance-manage/time-attendance-manage.component.ts
+0
-1
header.component.html
src/app/shared/components/header/header.component.html
+2
-2
header.component.ts
src/app/shared/components/header/header.component.ts
+10
-2
sidebar.component.ts
src/app/shared/components/sidebar/sidebar.component.ts
+0
-2
file.service.ts
src/app/shared/services/file.service.ts
+7
-0
sharedmodule.ts
src/app/shared/sharedmodule.ts
+2
-0
No files found.
src/app/components/company-components/account-settings/role-permission-config/role-permission-config.component.ts
View file @
c3478cad
...
...
@@ -96,7 +96,6 @@ export class RolePermissionConfigComponent {
this
.
configPermission
.
select
=
new
MyConfigPermissionModel
(
data
)
const
menuBody
:
MenuBodyModel
[]
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
configPermission
.
select
.
menuBody
))
this
.
configPermission
.
select
.
menuBody
=
this
.
menuItems
.
map
(
x
=>
new
MyMenuBodyModel
(
x
))
console
.
log
(
" 🐒 this.configPermission.select.menuBody:"
,
this
.
configPermission
.
select
.
menuBody
)
this
.
clearDataMenu
()
this
.
configPermission
.
select
.
menuBody
.
forEach
(
x
=>
{
const
configMenu
=
menuBody
.
find
(
y
=>
y
.
id
==
x
.
id
)
...
...
src/app/components/company-components/employee-registration/sub-employee-registration/sub-employee-registration.component.html
View file @
c3478cad
...
...
@@ -39,7 +39,7 @@
<div
class=
"page px-rem"
>
<app-datagrid-syncfution
[
searchSettings
]="
searchSettings
"
[
searchText
]="
search
"
[
dataSource
]="
employee
.
dataList
"
[
columns
]="
columns
"
[
selectedItems
]="
selectedItems
"
modalName=
"#sub-employee-registration-modal"
[
columns
]="
columns
"
[
selectedItems
]="
selectedItems
"
modalName=
"#sub-employee-registration-modal"
[
showImg
]="
true
"
(
sendSelectData
)="
currentModal=
'update'
;
selectEmployee
($
event
)"
(
sendSelectedItems
)="
onSelectItemChange
($
event
)"
>
</app-datagrid-syncfution>
...
...
@@ -86,6 +86,26 @@
<div
class=
"ti-modal-body mt-5"
>
<div
class=
"space-y-3"
>
<div
class=
"grid grid-cols-12 gap-x-6"
>
<label
class=
"col-span-3 ti-form-label text-primary mt-2 align-center"
>
รูปพนักงาน
</label>
<div
class=
"flex flex-row col-span-5"
style=
"align-items: end;"
>
<div
style=
"width: 10rem;"
>
<div
*
ngIf=
"imgLoading"
class=
"ti-spinner w-8 h-8 text-secondary mx-1"
role=
"status"
aria-label=
"loading"
style=
"height: 9rem;width: 9rem;"
>
<span
class=
"sr-only"
>
Loading...
</span>
</div>
<img
*
ngIf=
"!imgLoading"
[
src
]="
employee
.
select
.
picture
?
getImg
(
employee
.
select
.
picture
)
:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'"
(
error
)="
onImageError
($
event
)"
class=
"rounded-full ring-4 ring-white/10 mx-auto object-cover"
id=
"profile-img"
alt=
"profile-img"
style=
"height: 10rem;width: 10rem;"
>
</div>
<div
*
ngIf=
"!imgLoading"
class=
"relative"
style=
"margin-left:-30px"
>
<i
class=
"ri ri-pencil-line cursor-pointer"
(
click
)="
fileImg
.
click
()"
></i>
<input
#
fileImg
id=
"fileImg"
type=
"file"
(
change
)="
onImgSelected
($
event
)"
hidden
>
<i
class=
"ri-delete-bin-6-line text-danger cursor-pointer"
(
click
)="
employee
.
select
.
picture =
''
"
></i>
</div>
</div>
</div>
<div
class=
"grid grid-cols-12 gap-x-6"
>
<label
class=
"col-span-3 ti-form-label text-primary mt-2 align-center"
>
รหัสพนักงาน
<span
class=
"text-danger"
>
*
<ng-container
*
ngIf=
"(currentModal=='add')&&checkPrimary()"
>
...
...
@@ -548,6 +568,7 @@
</div>
</div>
<div
id=
"sub-employee-registration-alert-add-modal"
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"
>
...
...
src/app/components/company-components/employee-registration/sub-employee-registration/sub-employee-registration.component.ts
View file @
c3478cad
...
...
@@ -33,6 +33,8 @@ import { EmpStatusService } from 'src/app/shared/services/emp-status.service';
import
{
StatusModel
,
MyStatusModel
}
from
'src/app/shared/model/status.model'
;
import
{
MyBossModel
}
from
'src/app/shared/model/boss.model'
;
import
{
ColumnModel
}
from
'@syncfusion/ej2-grids'
;
import
{
environment
}
from
'src/environments/environment'
;
import
{
TokenService
}
from
'src/app/shared/services/token.service'
;
export
interface
DataModal
{
search
:
string
,
currentPage
:
number
,
...
...
@@ -49,27 +51,32 @@ export class SubEmployeeRegistrationComponent {
employee
:
{
loading
:
boolean
,
select
:
EmployeeModel
|
any
,
dataList
:
EmployeeModel
[]
}
=
{
loading
:
false
,
select
:
new
MyEmployeeModel
(),
dataList
:
[]
}
search
=
""
currentModal
:
'add'
|
'update'
|
'delete'
=
'add'
columns
:
ColumnModel
[]
=
[{
field
:
"employeeId"
,
headerText
:
"รหัสพนักงาน"
,
type
:
"string"
,
isPrimaryKey
:
true
,
},
{
field
:
"fname"
,
headerText
:
"ชื่อ"
,
type
:
"string"
},
{
field
:
"lname"
,
headerText
:
"นามสกุล"
,
type
:
"string"
},
{
field
:
"position.tdesc"
,
headerText
:
"ตำแหน่ง"
,
type
:
"string"
}]
columns
:
ColumnModel
[]
=
[
{
field
:
"picture"
,
headerText
:
""
,
type
:
"string"
,
},
{
field
:
"employeeId"
,
headerText
:
"รหัสพนักงาน"
,
type
:
"string"
,
isPrimaryKey
:
true
,
},
{
field
:
"fname"
,
headerText
:
"ชื่อ"
,
type
:
"string"
},
{
field
:
"lname"
,
headerText
:
"นามสกุล"
,
type
:
"string"
},
{
field
:
"position.tdesc"
,
headerText
:
"ตำแหน่ง"
,
type
:
"string"
}]
searchSettings
=
{
fields
:
[
'employeeId'
,
'fname'
,
'lname'
,
'position.tdesc'
],
operator
:
'contains'
,
...
...
@@ -87,6 +94,9 @@ export class SubEmployeeRegistrationComponent {
selectedFile
:
File
|
null
=
null
;
selectedFileName
:
string
=
'กรุณาเลือกไฟล์'
;
selectedImg
:
File
|
null
=
null
;
imgLoading
=
false
empGroup
:
{
loading
:
boolean
,
dataList
:
EmpGroupModel
[]
}
=
{
loading
:
false
,
dataList
:
[]
}
employeeModal
:
{
loading
:
boolean
,
dataList
:
EmployeeModel
[]
}
=
{
loading
:
false
,
dataList
:
[]
}
bu1
:
{
loading
:
boolean
,
dataList
:
Bu1Model
[]
}
=
{
loading
:
false
,
dataList
:
[]
}
...
...
@@ -102,6 +112,7 @@ export class SubEmployeeRegistrationComponent {
empType
:
{
loading
:
boolean
,
dataList
:
EmpTypeModel
[]
}
=
{
loading
:
false
,
dataList
:
[]
}
pl
:
{
loading
:
boolean
,
dataList
:
PLModel
[]
}
=
{
loading
:
false
,
dataList
:
[]
}
empStatus
:
{
loading
:
boolean
,
dataList
:
StatusModel
[]
}
=
{
loading
:
false
,
dataList
:
[]
}
constructor
(
private
toastr
:
ToastrService
,
private
employeeService
:
EmployeeService
,
private
cdr
:
ChangeDetectorRef
,
...
...
@@ -119,6 +130,7 @@ export class SubEmployeeRegistrationComponent {
private
empTypeService
:
EmpTypeService
,
private
empStatusService
:
EmpStatusService
,
private
fileService
:
FileService
,
private
tokenService
:
TokenService
,
private
pLService
:
PLService
)
{
}
ngOnInit
():
void
{
...
...
@@ -553,6 +565,9 @@ export class SubEmployeeRegistrationComponent {
this
.
employeeService
[
type
](
body
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
if
(
body
.
employeeId
==
this
.
tokenService
.
getUserData
().
employeeId
)
{
this
.
tokenService
.
saveUserData
(
new
MyEmployeeModel
(
body
))
}
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
search
=
""
this
.
getEmployeeList
()
...
...
@@ -693,4 +708,57 @@ export class SubEmployeeRegistrationComponent {
onSelectItemChange
(
arg
:
any
)
{
this
.
selectedItems
=
arg
}
url1
=
''
onSelectFile1
(
event
:
any
)
{
if
(
event
.
target
&&
event
.
target
.
files
&&
event
.
target
.
files
[
0
])
{
const
reader
=
new
FileReader
();
reader
.
readAsDataURL
(
event
.
target
.
files
[
0
]);
// read file as data URL
reader
.
onload
=
(
event
:
any
)
=>
{
// called once readAsDataURL is completed
this
.
url1
=
event
.
target
.
result
;
};
}
}
onImgSelected
(
event
:
any
)
{
this
.
selectedImg
=
event
.
target
.
files
.
length
>
0
?
event
.
target
.
files
[
0
]
:
null
;
this
.
uploadImg
()
}
uploadImg
()
{
if
(
this
.
selectedImg
)
{
this
.
imgLoading
=
true
const
formData
=
new
FormData
();
formData
.
append
(
'file'
,
this
.
selectedImg
);
this
.
fileService
.
uploadImg
(
formData
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
employee
.
select
.
picture
=
response
.
resultObject
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
this
.
employee
.
select
.
picture
=
''
}
this
.
imgLoading
=
false
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
this
.
employee
.
select
.
picture
=
''
this
.
imgLoading
=
false
this
.
cdr
.
detectChanges
()
}
})
}
}
getImg
(
text
:
string
)
{
return
this
.
fileService
.
getImg
(
text
)
}
onImageError
(
event
:
Event
)
{
const
imgElement
=
event
.
target
as
HTMLImageElement
;
imgElement
.
src
=
'./assets/img/users/defaultperson.jpg'
;
}
}
src/app/components/competency-assessment/evaluation-cycle-manager/define-document-form/edit-define-document-form/edit-define-document-form.component.ts
View file @
c3478cad
...
...
@@ -178,7 +178,6 @@ export class EditDefineDocumentFormComponent {
cancelButtonText
:
'ย้อนกลับ'
,
reverseButtons
:
true
,
}).
then
((
result
)
=>
{
console
.
log
(
"🚀 ~ EditDefineDocumentFormComponent ~ saveIndicators ~ result:"
,
result
)
if
(
result
.
isConfirmed
)
{
this
.
evaluationAssessmentService
.
postList
([
this
.
empassessmentList
]).
subscribe
({
next
:
response
=>
{
...
...
src/app/components/datagrid-syncfution/datagrid-syncfution.component.html
View file @
c3478cad
...
...
@@ -20,39 +20,51 @@
<input
type=
"checkbox"
class=
"ti-form-checkbox cursor-pointer"
[
checked
]="
selectedItems
.
data
.
get
(
data
[
selectedItems
.
key
])
||
false
"
(
click
)="
toggleSelection
(
data
[
selectedItems
.
key
],
!
selectedItems
.
data
.
get
(
data
[
selectedItems
.
key
]))"
>
<ng-container
*
ngIf=
"showImg"
>
<img
class=
"avatar shadow-none rounded-full !ring-transparent object-cover h-12 w-12"
[
src
]="
data
.
picture
?
getImg
(
data
.
picture
)
:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'"
(
error
)="
onImageError
($
event
)"
>
</ng-container>
</ng-template>
</e-column>
<e-column
*
ngFor=
"let col of columns"
[
field
]="
col
.
field
"
[
headerText
]="
col
.
headerText
"
[
width
]="
col
.
width
"
[
format
]="
col
.
format
"
[
textAlign
]="'
center
'"
[
isPrimaryKey
]="
col
.
isPrimaryKey
"
[
editType
]="
false
"
[
validationRules
]="
col
.
validationRules
"
[
allowEditing
]="
false
"
[
allowSorting
]="'
true
'"
[
allowFiltering
]="
true
"
[
visible
]="
col
.
visible
"
[
type
]="
col
.
type
"
>
<ng-template
#
headerTemplate
let-data
>
<span
class=
"font-size-12px font-weight-700 text-primary"
>
{{ col.headerText }}
</span>
</ng-template>
<ng-template
#
template
let-data
*
ngIf=
"col.field == 'statusCode.tdesc'"
>
<div
class=
"flex justify-center items-center w-full h-full"
>
<span
class=
"hs-tooltip ti-main-tooltip [--trigger:hover] flex items-center justify-center rounded-full h-6 w-6 text-white"
[
ngClass
]="{
'
bg-success
'
:
data
.
statusCode
.
tdesc =
=
'กำลังดำเนินการประเมิน',
'
bg-warning
'
:
data
.
statusCode
.
tdesc =
=
'รอดำเนินการ',
'
bg-gray-400
'
:
data
.
statusCode
.
tdesc =
=
'สิ้นสุดช่วงเวลาประเมิน'
}"
role=
"tooltip"
>
<ng-container
*
ngFor=
"let col of columns"
>
<e-column
*
ngIf=
"col.headerText!=''"
[
field
]="
col
.
field
"
[
headerText
]="
col
.
headerText
"
[
width
]="
col
.
width
"
[
format
]="
col
.
format
"
[
textAlign
]="'
center
'"
[
isPrimaryKey
]="
col
.
isPrimaryKey
"
[
editType
]="
false
"
[
validationRules
]="
col
.
validationRules
"
[
allowEditing
]="
false
"
[
allowSorting
]="'
true
'"
[
allowFiltering
]="
true
"
[
visible
]="
col
.
visible
"
[
type
]="
col
.
type
"
>
<ng-template
#
headerTemplate
let-data
>
<span
class=
"font-size-12px font-weight-700 text-primary"
>
{{ col.headerText }}
</span>
</ng-template>
<ng-template
#
template
let-data
*
ngIf=
"col.field == 'statusCode.tdesc'"
>
<div
class=
"flex justify-center items-center w-full h-full"
>
<span
class=
"hs-tooltip ti-main-tooltip [--trigger:hover] flex items-center justify-center rounded-full h-6 w-6 text-white"
[
ngClass
]="{
'
bg-success
'
:
data
.
statusCode
.
tdesc =
=
'กำลังดำเนินการประเมิน',
'
bg-warning
'
:
data
.
statusCode
.
tdesc =
=
'รอดำเนินการ',
'
bg-gray-400
'
:
data
.
statusCode
.
tdesc =
=
'สิ้นสุดช่วงเวลาประเมิน'
}"
role=
"tooltip"
>
<ng-container
[
ngSwitch
]="
data
.
statusCode
.
tdesc
"
>
<i
*
ngSwitchCase=
"'กำลังดำเนินการประเมิน'"
class=
"ti ti-clock hs-tooltip-toggle ti-main-tooltip-toggle"
></i>
<i
*
ngSwitchCase=
"'รอดำเนินการ'"
class=
"ti ti-hourglass-empty hs-tooltip-toggle ti-main-tooltip-toggle"
></i>
<i
*
ngSwitchCase=
"'สิ้นสุดช่วงเวลาประเมิน'"
class=
"ti ti-check hs-tooltip-toggle ti-main-tooltip-toggle"
></i>
</ng-container>
<ng-container
[
ngSwitch
]="
data
.
statusCode
.
tdesc
"
>
<i
*
ngSwitchCase=
"'กำลังดำเนินการประเมิน'"
class=
"ti ti-clock hs-tooltip-toggle ti-main-tooltip-toggle"
></i>
<i
*
ngSwitchCase=
"'รอดำเนินการ'"
class=
"ti ti-hourglass-empty hs-tooltip-toggle ti-main-tooltip-toggle"
></i>
<i
*
ngSwitchCase=
"'สิ้นสุดช่วงเวลาประเมิน'"
class=
"ti ti-check hs-tooltip-toggle ti-main-tooltip-toggle"
></i>
</ng-container>
<span
class=
"hs-tooltip-content ti-main-tooltip-content py-1 px-2 bg-primary text-white shadow-sm dark:bg-slate-700"
>
{{ data.statusCode.tdesc }}
<span
class=
"hs-tooltip-content ti-main-tooltip-content py-1 px-2 bg-primary text-white shadow-sm dark:bg-slate-700"
>
{{ data.statusCode.tdesc }}
</span>
</span>
</span>
</div>
</ng-template>
</e-column>
</div>
</ng-template>
</e-column>
</ng-container>
<e-column
headerText=
'action'
width=
'205'
textAlign=
'Center'
*
ngIf=
"actionSetting"
>
<ng-template
#
headerTemplate
let-data
*
ngIf=
"actionSetting"
>
<span
class=
"font-size-12px font-weight-700 text-primary"
>
การจัดการ
</span>
...
...
@@ -65,7 +77,6 @@
*
ngIf=
"canDownload && data.competencyFiles"
></i>
<i
class=
"ti ti-menu-2 cursor-pointer i-gray fs-l px-1"
(
click
)="
onNextPage
(
data
)"
*
ngIf=
"canChild"
></i>
<i
class=
"ti ti-user cursor-pointer i-gray fs-l px-1"
(
click
)="
onNextPageForm
(
data
)"
*
ngIf=
"childForm"
></i>
<ng-container
*
ngIf=
"data.statusFrom as statusFrom"
>
<ng-container
[
ngSwitch
]="
statusFrom
.
code
"
>
<span
class=
"badge text-white m-1 cursor-pointer"
...
...
@@ -85,7 +96,6 @@
</span>
</ng-container>
</ng-container>
</ng-template>
</e-column>
</e-columns>
...
...
src/app/components/datagrid-syncfution/datagrid-syncfution.component.ts
View file @
c3478cad
...
...
@@ -38,6 +38,7 @@ import { GroupSettingsModel, FilterSettingsModel, ColumnModel } from '@syncfusio
import
{
DataManager
,
Query
}
from
'@syncfusion/ej2-data'
;
import
{
L10n
,
setCulture
}
from
'@syncfusion/ej2-base'
;
import
{
Status
}
from
'../../shared/model/evaluation-form.modal'
;
import
{
FileService
}
from
'src/app/shared/services/file.service'
;
setCulture
(
'th-TH'
);
L10n
.
load
({
...
...
@@ -110,9 +111,9 @@ export class DatagridSyncfutionComponent implements OnInit {
@
Output
()
sendFileDownload
=
new
EventEmitter
<
any
>
();
@
Input
()
childForm
=
false
@
Output
()
sendNextPageForm
=
new
EventEmitter
<
any
>
();
modalStatus
=
''
;
modalStatus
=
''
;
@
Output
()
createFormEvent
=
new
EventEmitter
<
any
>
();
@
Input
()
checkBoxSetting
=
true
@
Input
()
actionSetting
=
true
@
Input
()
detailSetting
=
false
...
...
@@ -160,7 +161,12 @@ export class DatagridSyncfutionComponent implements OnInit {
{
text
:
'Min'
,
id
:
'aggregate_min'
},
{
text
:
'Max'
,
id
:
'aggregate_max'
}
];
constructor
(
private
cdr
:
ChangeDetectorRef
)
{
@
Input
()
showImg
=
false
constructor
(
private
cdr
:
ChangeDetectorRef
,
private
fileService
:
FileService
)
{
}
ngOnInit
():
void
{
// this.query = new Query().addParams('dataCount', '1000');
...
...
@@ -389,4 +395,13 @@ export class DatagridSyncfutionComponent implements OnInit {
onNextPageForm
(
data
:
any
)
{
this
.
sendNextPageForm
.
emit
(
data
);
}
getImg
(
text
:
string
)
{
return
this
.
fileService
.
getImg
(
text
)
}
onImageError
(
event
:
Event
)
{
const
imgElement
=
event
.
target
as
HTMLImageElement
;
imgElement
.
src
=
'./assets/img/users/defaultperson.jpg'
;
}
}
src/app/components/ess-profile/ess-profile.component.html
View file @
c3478cad
...
...
@@ -17,7 +17,7 @@
<div
class=
"flex justify-center w-full"
>
<div
class=
"relative"
>
<img
[
src
]="
employee
.
data
.
picture
?
url
+'/
employee
/
image
/'+
employee
.
data
.
picture:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'
"
[
src
]="
employee
.
data
.
picture
?
getImg
(
employee
.
data
.
picture
)
:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'"
(
error
)="
onImageError
($
event
)
"
class=
"rounded-full ring-4 ring-white/10 mx-auto object-cover"
id=
"profile-img"
alt=
"profile-img"
style=
"height: 10rem;width: 10rem;"
>
<!-- <span
...
...
src/app/components/ess-profile/ess-profile.component.ts
View file @
c3478cad
...
...
@@ -4,6 +4,7 @@ import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.mo
import
{
MyStatusModel
,
StatusModel
}
from
'src/app/shared/model/status.model'
;
import
{
EmpStatusService
}
from
'src/app/shared/services/emp-status.service'
;
import
{
EmployeeService
}
from
'src/app/shared/services/employee.service'
;
import
{
FileService
}
from
'src/app/shared/services/file.service'
;
import
{
environment
}
from
'src/environments/environment'
;
@
Component
({
...
...
@@ -13,13 +14,13 @@ import { environment } from 'src/environments/environment';
})
export
class
EssProfileComponent
{
employee
:
{
loading
:
boolean
,
data
:
EmployeeModel
}
=
{
loading
:
false
,
data
:
new
MyEmployeeModel
()
}
url
=
environment
.
baseUrl
empStatus
:
{
loading
:
boolean
,
dataList
:
StatusModel
[]
}
=
{
loading
:
false
,
dataList
:
[]
}
constructor
(
private
employeeService
:
EmployeeService
,
private
empStatusService
:
EmpStatusService
,
private
cdr
:
ChangeDetectorRef
,
private
viewScroller
:
ViewportScroller
,
private
fileService
:
FileService
)
{
}
ngOnInit
():
void
{
...
...
@@ -60,4 +61,13 @@ export class EssProfileComponent {
reverseDate
(
text
:
string
)
{
return
text
.
split
(
'-'
).
reverse
().
join
(
'-'
)
}
getImg
(
text
:
string
)
{
return
this
.
fileService
.
getImg
(
text
)
}
onImageError
(
event
:
Event
)
{
const
imgElement
=
event
.
target
as
HTMLImageElement
;
imgElement
.
src
=
'./assets/img/users/defaultperson.jpg'
;
}
}
src/app/components/performance-evaluation/pms-form-employee/pms-form-employee.component.html
View file @
c3478cad
...
...
@@ -49,7 +49,7 @@
<div
class=
"box-body py-2"
>
<div
class=
"flex flex-col items-center gap-3"
>
<img
[
src
]="
evaluatee
.
data
.
picture
?
url
+'/
employee
/
image
/'+
evaluatee
.
data
.
picture:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'
"
[
src
]="
evaluatee
.
data
.
picture
?
getImg
(
evaluatee
.
data
.
picture
)
:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'"
(
error
)="
onImageError
($
event
)
"
class=
"h-24 w-24 rounded-full ring-4 ring-primary object-cover"
alt=
"profile-img"
/>
<ng-container
*
ngIf=
"kpiScorePart[kpiScorePart.length-1].score as grade"
>
<div
class=
"flex gap-1"
>
...
...
src/app/components/performance-evaluation/pms-form-employee/pms-form-employee.component.ts
View file @
c3478cad
...
...
@@ -8,6 +8,7 @@ import { TokenService } from 'src/app/shared/services/token.service';
import
Swal
from
'sweetalert2'
;
import
{
ActivatedRoute
,
ParamMap
}
from
'@angular/router'
;
import
{
environment
}
from
'src/environments/environment'
;
import
{
FileService
}
from
'src/app/shared/services/file.service'
;
@
Component
({
selector
:
'app-pms-form-employee'
,
...
...
@@ -24,7 +25,6 @@ export class PmsFormEmployeeComponent {
currentPart
=
""
@
Output
()
sendReturnPath
:
EventEmitter
<
any
>
=
new
EventEmitter
<
any
>
();
starRate
=
5
;
url
=
environment
.
baseUrl
url1
=
''
;
url2
=
''
;
...
...
@@ -76,7 +76,8 @@ export class PmsFormEmployeeComponent {
private
appraisalService
:
AppraisalService
,
private
cdr
:
ChangeDetectorRef
,
private
tokenService
:
TokenService
,
private
route
:
ActivatedRoute
private
route
:
ActivatedRoute
,
private
fileService
:
FileService
)
{
}
...
...
@@ -743,4 +744,12 @@ export class PmsFormEmployeeComponent {
},
0
);
}
getImg
(
text
:
string
)
{
return
this
.
fileService
.
getImg
(
text
)
}
onImageError
(
event
:
Event
)
{
const
imgElement
=
event
.
target
as
HTMLImageElement
;
imgElement
.
src
=
'./assets/img/users/defaultperson.jpg'
;
}
}
\ No newline at end of file
src/app/components/performance-evaluation/supervisor-evaluation/supervisor-evaluation.component.html
View file @
c3478cad
...
...
@@ -230,12 +230,12 @@
*
ngIf=
"item.apsapproveType.code!='Apsapprove1'&&(item.masfromStatusType.code=='evaluating'||item.masfromStatusType.code=='pending')"
>
<img
(
click
)="!
selectEmp
.
get
(
item
.
apsassessy
.
employeeId
)?
selectEmp
.
set
(
item
.
apsassessy
.
employeeId
,
true
)
:selectEmp
.
delete
(
item
.
apsassessy
.
employeeId
);
checkSelectAll
()"
class=
"cursor-pointer avatar shadow-none rounded-full !ring-transparent object-cover h-12 w-12"
[
src
]="
item
.
apsassessy
.
picture
?
url
+'/
employee
/
image
/'+
item
.
apsassessy
.
picture:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'
"
>
[
src
]="
item
.
apsassessy
.
picture
?
getImg
(
item
.
apsassessy
.
picture
)
:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'"
(
error
)="
onImageError
($
event
)
"
>
</ng-container>
<ng-container
*
ngIf=
"!(item.apsapproveType.code!='Apsapprove1'&&(item.masfromStatusType.code=='evaluating'||item.masfromStatusType.code=='pending'))"
>
<img
class=
"cursor-pointer avatar shadow-none rounded-full !ring-transparent object-cover h-12 w-12"
[
src
]="
item
.
apsassessy
.
picture
?
url
+'/
employee
/
image
/'+
item
.
apsassessy
.
picture:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'
"
>
[
src
]="
item
.
apsassessy
.
picture
?
getImg
(
item
.
apsassessy
.
picture
)
:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'"
(
error
)="
onImageError
($
event
)
"
>
</ng-container>
</div>
</td>
...
...
src/app/components/performance-evaluation/supervisor-evaluation/supervisor-evaluation.component.ts
View file @
c3478cad
...
...
@@ -2,6 +2,7 @@ import { ChangeDetectorRef, Component } from '@angular/core';
import
{
EChartsOption
}
from
'echarts'
;
import
{
AppraisalSubordinateModel
,
Masfromevaluationassessment
,
TypeList
}
from
'src/app/shared/model/appraisal-subordinate.model'
;
import
{
AppraisalService
}
from
'src/app/shared/services/appraisal.service'
;
import
{
FileService
}
from
'src/app/shared/services/file.service'
;
import
{
environment
}
from
'src/environments/environment'
;
import
Swal
from
'sweetalert2'
;
@
Component
({
...
...
@@ -25,7 +26,6 @@ export class SupervisorEvaluationComponent {
allCompetencyTypeId
:
<
TypeList
[]
>
[],
masfromStatusType
:
""
}
url
=
environment
.
baseUrl
selectEmp
:
Map
<
string
,
boolean
>
=
new
Map
<
string
,
boolean
>
()
statusButtonClass
=
(
status
:
string
)
=>
{
if
(
status
===
"no access"
)
{
...
...
@@ -65,6 +65,7 @@ export class SupervisorEvaluationComponent {
myApprovePer
:
number
=
0
pmsOption
!
:
EChartsOption
;
constructor
(
private
appraisalService
:
AppraisalService
,
private
fileService
:
FileService
,
private
cdr
:
ChangeDetectorRef
)
{
}
ngOnInit
():
void
{
...
...
@@ -363,4 +364,13 @@ export class SupervisorEvaluationComponent {
})
}
}
getImg
(
text
:
string
)
{
return
this
.
fileService
.
getImg
(
text
)
}
onImageError
(
event
:
Event
)
{
const
imgElement
=
event
.
target
as
HTMLImageElement
;
imgElement
.
src
=
'./assets/img/users/defaultperson.jpg'
;
}
}
src/app/components/performance-management-evaluation/evaluation-cycle-performance/management-evaluation-cycle/management-evaluation-cycle.component.ts
View file @
c3478cad
...
...
@@ -262,7 +262,7 @@ export class ManagementCycleComponent {
this
.
dataLoading
=
true
;
const
selectedKeys
=
Array
.
from
(
this
.
selectedItems
.
data
.
keys
());
const
body
=
this
.
pmsMasfromEvaluation
.
dataList
.
filter
(
x
=>
selectedKeys
.
includes
(
x
.
pmsEvaluationRoundId
)
&&
this
.
selectedItems
.
data
.
get
(
x
.
pmsEvaluationRoundId
)).
map
(
x
=>
new
MyPmsMasfromEvaluationModel
(
x
))
console
.
log
(
body
);
this
.
pmsMasfromEvaluationCycleService
.
delete
(
body
).
subscribe
({
next
:
response
=>
{
...
...
@@ -403,7 +403,6 @@ export class ManagementCycleComponent {
}
onSelectItemChange
(
arg
:
any
)
{
this
.
selectedItems
=
arg
console
.
log
(
this
.
selectedItems
)
}
numSelectItem
()
{
...
...
src/app/components/performance-management-evaluation/name-registration-perfomance/assessment-topics/assessment-topics.component.ts
View file @
c3478cad
...
...
@@ -340,7 +340,6 @@ export class AssessmentTopicsComponent {
onSelectItemChange
(
arg
:
any
)
{
this
.
selectedItems
=
arg
console
.
log
(
this
.
selectedItems
)
}
numSelectItem
()
{
...
...
src/app/components/performance-management-evaluation/pms-grade-registration/pms-grade-management/pms-grade-management.component.ts
View file @
c3478cad
...
...
@@ -195,7 +195,6 @@ export class PmsGradeManagementComponent {
onSelectItemChange
(
arg
:
any
)
{
this
.
selectedItems
=
arg
console
.
log
(
'selected'
,
this
.
selectedItems
)
}
numSelectItem
()
{
...
...
src/app/components/performance-management-evaluation/time-attendance/time-attendance-manage/time-attendance-manage.component.ts
View file @
c3478cad
...
...
@@ -272,7 +272,6 @@ export class TimeAttendanceManageComponent {
}
onSelectItemChange
(
arg
:
any
)
{
this
.
selectedItems
=
arg
console
.
log
(
this
.
selectedItems
)
}
numSelectItem
()
{
...
...
src/app/shared/components/header/header.component.html
View file @
c3478cad
...
...
@@ -681,14 +681,14 @@
<button
id=
"dropdown-profile"
type=
"button"
class=
"hs-dropdown-toggle ti-dropdown-toggle gap-2 p-0 flex-shrink-0 rounded-full shadow-none focus:ring-gray-400 text-xs"
>
<img
class=
"avatar shadow-none rounded-full !ring-transparent object-cover h-8 w-8"
[
src
]="
employeeProfile
.
picture
?
url
+'/
employee
/
image
/'+
employeeProfile
.
picture:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'
"
>
[
src
]="
getTokenImg
()?
getImg
(
getTokenImg
())
:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'"
(
error
)="
onImageError
($
event
)
"
>
</button>
<div
class=
"hs-dropdown-menu ti-dropdown-menu border-0 w-[20rem]"
aria-labelledby=
"dropdown-profile"
>
<div
class=
"ti-dropdown-header !bg-primary flex items-center space-x-3"
>
<div
class=
"flex-shrink-0"
>
<img
class=
"avatar shadow-none rounded-full !ring-transparent object-cover"
[
src
]="
employeeProfile
.
picture
?
url
+'/
employee
/
image
/'+
employeeProfile
.
picture:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'
"
>
[
src
]="
getTokenImg
()?
getImg
(
getTokenImg
())
:
'./
assets
/
img
/
users
/
defaultperson
.
jpg
'"
(
error
)="
onImageError
($
event
)
"
>
</div>
<div>
<p
class=
" ti-dropdown-header-title !text-white"
>
...
...
src/app/shared/components/header/header.component.ts
View file @
c3478cad
...
...
@@ -8,6 +8,7 @@ import { EmployeeModel, MyEmployeeModel } from '../../model/employee.model';
import
{
ActivatedRoute
,
Router
}
from
'@angular/router'
;
import
{
environment
}
from
'src/environments/environment'
;
import
{
HttpClient
}
from
'@angular/common/http'
;
import
{
FileService
}
from
'../../services/file.service'
;
@
Component
({
selector
:
'app-header'
,
...
...
@@ -17,7 +18,6 @@ import { HttpClient } from '@angular/common/http';
export
class
HeaderComponent
{
employeeProfile
:
EmployeeModel
=
new
MyEmployeeModel
();
url
=
environment
.
baseUrl
constructor
(
public
navServices
:
NavService
,
private
authService
:
AuthService
,
public
tokenService
:
TokenService
,
...
...
@@ -25,9 +25,9 @@ export class HeaderComponent {
private
elementRef
:
ElementRef
,
public
router
:
Router
,
private
route
:
ActivatedRoute
,
private
fileService
:
FileService
,
private
navService
:
NavService
,
private
http
:
HttpClient
)
{
this
.
getEvaluatee
();
}
imageUrl
=
''
...
...
@@ -155,4 +155,12 @@ export class HeaderComponent {
onNextPartClick
(
part
:
string
)
{
this
.
router
.
navigate
([
part
]);
}
getImg
(
text
:
string
)
{
return
this
.
fileService
.
getImg
(
text
)
}
getTokenImg
()
{
return
this
.
tokenService
.
getUserData
().
picture
}
}
src/app/shared/components/sidebar/sidebar.component.ts
View file @
c3478cad
...
...
@@ -171,8 +171,6 @@ export class SidebarComponent {
html
.
setAttribute
(
'data-nav-layout'
,
'vertical'
);
}
// Log to console for verification
console
.
log
(
'Current URL:'
,
this
.
currentUrl
);
console
.
log
(
'Previous URL:'
,
this
.
previousUrl
);
this
.
changeMenu
()
}
});
...
...
src/app/shared/services/file.service.ts
View file @
c3478cad
...
...
@@ -21,4 +21,11 @@ export class FileService {
downloadTemplate
(
fileName
:
string
)
{
return
this
.
http
.
get
(
"/assets/template/"
+
fileName
,
{
responseType
:
"blob"
})
}
uploadImg
(
formData
:
any
):
Observable
<
AlertModel
>
{
return
this
.
http
.
post
<
AlertModel
>
(
environment
.
baseUrl
+
'/employee/upload-image'
,
formData
)
}
getImg
(
filename
?:
string
)
{
return
filename
?
environment
.
baseUrl
+
'/employee/image/'
+
filename
:
''
}
}
src/app/shared/sharedmodule.ts
View file @
c3478cad
...
...
@@ -19,6 +19,7 @@ import { ToggleThemeDirective } from './directives/toggle-theme.directive';
import
{
HTTP_INTERCEPTORS
}
from
'@angular/common/http'
;
import
{
ConfigPermissionService
}
from
'./services/config-permission.service'
;
import
{
HttpRequestInterceptor
}
from
'./services/http-request.interceptor'
;
import
{
FileService
}
from
'./services/file.service'
;
@
NgModule
({
declarations
:
[
...
...
@@ -58,6 +59,7 @@ import { HttpRequestInterceptor } from './services/http-request.interceptor';
useClass
:
HttpRequestInterceptor
,
multi
:
true
,
},
FileService
],
})
export
class
SharedModule
{
}
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