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
2f0cb762
Commit
2f0cb762
authored
Feb 17, 2025
by
Nattana Chaiyamat
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'DEV' of
https://mygit.myhr.co.th/angular/myAppraisal
into DEV
parents
94077098
49d037fa
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
337 additions
and
156 deletions
+337
-156
set-approvers.component.html
...ncy-management/set-approvers/set-approvers.component.html
+122
-102
set-approvers.component.ts
...tency-management/set-approvers/set-approvers.component.ts
+141
-54
dashboard.module.ts
src/app/components/dashboard/dashboard.module.ts
+2
-0
group-approve.model.ts
src/app/shared/model/group-approve.model.ts
+37
-0
group-approve.service.ts
src/app/shared/services/group-approve.service.ts
+35
-0
No files found.
src/app/components/competency-assessment/competency-management/set-approvers/set-approvers.component.html
View file @
2f0cb762
...
...
@@ -3,7 +3,8 @@
<div
class=
"px-1"
>
<div
class=
"relative shadow-md"
>
<input
type=
"text"
id=
"hs-leading-icon"
name=
"hs-leading-icon"
class=
"ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
placeholder=
"Search by No. or Name"
>
class=
"ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
placeholder=
"Search by No. or Name"
[(
ngModel
)]="
search
"
(
ngModelChange
)="
searchEMP
()"
>
<div
class=
"absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4"
>
<i
class=
"ri-search-line text-gray"
></i>
...
...
@@ -44,60 +45,73 @@
</ng-container>
</tr>
</thead>
<tbody>
<tr
*
ngFor=
"let item of[
['สุชาตา บาทวงษ์','อุทุมพร ประชาดี','พรเทพ ทองแย้ม','มัทนา ย่าล่า','',''],
['ฐานปนีย์ สกุลวงษ์','อุทุมพร ประชาดี','พรเทพ ทองแย้ม','มัทนา ย่าล่า','',''],
['วิครุฑ มานะดี','อุทุมพร ประชาดี','พรเทพ ทองแย้ม','','',''],
['สุมาลี รักษีสิงห์','อุทุมพร ประชาดี','ชุมพล น้อยพิทักษ์','','',''],
['กรวิภา ชัยสวัสดิ์','อุทุมพร ประชาดี','ชุมพล น้อยพิทักษ์','','',''],
['กสินธร สีปัญญา','อุทุมพร ประชาดี','ชุมพล น้อยพิทักษ์','','','']];let i = index"
>
<td
>
{{item[0]}}
</td>
<td
>
{{item[1]}}
</td>
<td
>
{{item[2]}}
</td>
<td
>
{{item[3]}}
</td>
<td
>
{{item[4]}}
</td>
<td
>
{{item[5]}}
</td>
<tbody
*
ngIf=
"groupapprove_listLoading"
>
<tr>
<td
class=
"text-center"
colspan=
"100%"
>
<div
*
ngFor=
"let item of [1,2,3]"
class=
"ti-spinner w-8 h-8 text-secondary mx-1"
role=
"status"
aria-label=
"loading"
>
<span
class=
"sr-only"
>
Loading...
</span>
</div>
</td>
</tr>
</tbody>
<tbody
*
ngIf=
"!groupapprove_listLoading&&!groupapprove_listFilter().length"
>
<tr>
<td
class=
"text-center"
colspan=
"100%"
>
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody
*
ngIf=
"!groupapprove_listLoading&&groupapprove_listFilter().length"
>
<tr
*
ngFor=
"let item of groupapprove_listFilter() | slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index"
>
<td>
{{item.apsassessy.fname}} {{item.apsassessy.lname}}
</td>
<td>
{{item.apsapprove1.fname}} {{item.apsapprove1.lname}}
</td>
<td>
{{item.apsapprove2.fname}} {{item.apsapprove2.lname}}
</td>
<td>
{{item.apsapprove3.fname}} {{item.apsapprove3.lname}}
</td>
<td>
{{item.apsapprove4.fname}} {{item.apsapprove4.lname}}
</td>
<td>
{{item.apsapprove5.fname}} {{item.apsapprove5.lname}}
</td>
<td
class=
"flex justify-center"
>
<i
class=
"ti ti-edit cursor-pointer i-gray fs-l px-1"
(
click
)="
currentModel=
'edit'
;
selectGroupapprove
(
item
)"
data-hs-overlay=
"#set-approvers-modal-edit"
></i>
</td>
</tr>
</tbody>
</table>
</div>
<div
class=
"body-content"
style=
"margin-top: 20px;"
>
<ul
class=
"nav-tabs"
>
<div
class=
"px-1 py-1 bg-white rounded-2 shadow justify-content-center align-items-center"
>
<div
class=
"box-body"
>
<nav
class=
"pagination-style-3 overflow-auto"
>
<nav
class=
"pagination-style-3 overflow-auto my-5"
*
ngIf=
"page.length"
>
<ul
class=
"ti-pagination"
>
<li>
<a
aria-label=
"anchor"
class=
"page-link"
href=
"javascript:void(0);"
>
<a
aria-label=
"anchor"
class=
"page-link"
href=
"javascript:void(0);"
(
click
)="
currentPage =
(currentPage-1
||
1
)"
>
<i
class=
"ri-arrow-left-s-line align-middle rtl:rotate-180"
></i>
</a>
</li>
<li><a
class=
"page-link active"
href=
"javascript:void(0);"
aria-current=
"page"
>
1
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
2
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
3
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
4
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
5
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
...
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
31
</a></li>
<li
*
ngFor=
"let item of page;let f = first;let l = last"
>
<ng-container
*
ngIf=
"item==3&¤tPage!=1&¤tPage!=2&¤tPage!=3"
>
<a
aria-label=
"anchor"
class=
"page-link"
href=
"javascript:void(0);"
><i
class=
"ri-more-line"
></i>
</a>
</ng-container>
<ng-container
*
ngIf=
"(f||l)||(item==currentPage-1||item==currentPage||item==currentPage+1)"
>
<a
class=
"page-link"
href=
"javascript:void(0);"
[
class
.
active
]="
item=
=currentPage"
(
click
)="
currentPage=
item"
>
{{item}}
</a>
</ng-container>
<ng-container
*
ngIf=
"item==page.length-2&¤tPage!=page.length&¤tPage!=page.length-1&¤tPage!=page.length-2"
>
<a
aria-label=
"anchor"
class=
"page-link"
href=
"javascript:void(0);"
><i
class=
"ri-more-line"
></i>
</a>
</ng-container>
</li>
<li>
<a
aria-label=
"anchor"
class=
"page-link"
href=
"javascript:void(0);"
>
<a
aria-label=
"anchor"
class=
"page-link"
href=
"javascript:void(0);"
(
click
)="
currentPage =
(currentPage
>
page.length-1 ? currentPage: currentPage+1 )">
<i
class=
"ri-arrow-right-s-line align-middle rtl:rotate-180"
></i>
</a>
</li>
</ul>
</nav>
</div>
</div>
</ul>
<ul
class=
"nav-tabs mt-1"
>
<p>
Show 1 to 10 of 50 items
</p>
</ul>
</div>
</div>
...
...
@@ -145,20 +159,25 @@
</div>
</div>
<div
class=
"ti-modal-body mt-1"
>
<label
for=
"input-label"
class=
"ti-form-label"
>
ระดับพนักงาน
</label>
<label
for=
"input-label"
class=
"ti-form-label"
>
ชื่อพนักงาน *
</label>
<input
type=
"text"
id=
"input-label"
class=
"ti-form-input w-1/2 bg-input-readonly"
readonly
[
value
]="
groupapprove
.
apsassessy
.
fname
+
'
'
+
groupapprove
.
apsassessy
.
lname
"
>
<label
for=
"input-label"
class=
"ti-form-label mt-2rem"
>
ระดับพนักงาน
</label>
<input
type=
"text"
id=
"input-label"
class=
"ti-form-input w-1/2 bg-input-readonly"
readonly
value=
"พนักงานระดับ 01-02
"
>
[
value
]="
groupapprove
.
personalLevel
.
tdesc
"
>
<label
class=
"ti-form-label mt-2rem"
>
ผู้ประเมินลำดับที่ 1
</label>
<div
class=
"flex"
>
<div
class=
"relative flex rounded-md w-2/3"
>
<input
type=
"text"
id=
"hs-leading-button-add-on-with-icon-and-button"
name=
"hs-leading-button-add-on-with-icon-and-button"
class=
"ti-form-input rounded-md ltr:rounded-r-md rtl:rounded-l-md focus:z-10"
style=
"padding-right: 2.5rem;"
value=
""
>
<input
type=
"text"
name=
"hs-leading-button-add-on-with-icon-and-button"
class=
"ti-form-input rounded-md ltr:rounded-r-md rtl:rounded-l-md focus:z-10 bg-input-readonly"
readonly
style=
"padding-right: 2.5rem;"
[(
ngModel
)]="
groupapprove
.
apsapprove1
.
fname
"
>
<div
class=
"absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2"
>
<button
type=
"button"
class=
"flex items-center text-red-500"
(
click
)="
selectEMP
()"
>
<i
class=
"ti ti-circle-x cursor-pointer"
></i>
</button>
<button
type=
"button"
class=
"flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay=
"#set-approvers-table-modal-edit"
>
(
click
)="
empnumber =
1"
data-hs-overlay=
"#set-approvers-table-modal-edit"
>
<i
class=
"ri-search-line cursor-pointer text-gray"
></i>
</button>
</div>
...
...
@@ -167,14 +186,16 @@
<label
class=
"ti-form-label mt-2rem"
>
ผู้ประเมินลำดับที่ 2
</label>
<div
class=
"flex"
>
<div
class=
"relative flex rounded-md w-2/3"
>
<input
type=
"text"
id=
"hs-leading-button-add-on-with-icon-and-button"
name=
"hs-leading-button-add-on-with-icon-and-button"
class=
"ti-form-input rounded-md ltr:rounded-r-md rtl:rounded-l-md focus:z-10"
style=
"padding-right: 2.5rem;"
value=
""
>
<input
type=
"text"
name=
"hs-leading-button-add-on-with-icon-and-button"
class=
"ti-form-input rounded-md ltr:rounded-r-md rtl:rounded-l-md focus:z-10 bg-input-readonly"
readonly
style=
"padding-right: 2.5rem;"
[(
ngModel
)]="
groupapprove
.
apsapprove2
.
fname
"
>
<div
class=
"absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2"
>
<button
type=
"button"
class=
"flex items-center text-red-500"
(
click
)="
selectEMP
()"
>
<i
class=
"ti ti-circle-x cursor-pointer"
></i>
</button>
<button
type=
"button"
class=
"flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay=
"#set-approvers-table-modal-edit"
>
data-hs-overlay=
"#set-approvers-table-modal-edit"
(
click
)="
empnumber =
2"
>
<i
class=
"ri-search-line cursor-pointer text-gray"
></i>
</button>
</div>
...
...
@@ -183,14 +204,16 @@
<label
class=
"ti-form-label mt-2rem"
>
ผู้ประเมินลำดับที่ 3
</label>
<div
class=
"flex"
>
<div
class=
"relative flex rounded-md w-2/3"
>
<input
type=
"text"
id=
"hs-leading-button-add-on-with-icon-and-button"
name=
"hs-leading-button-add-on-with-icon-and-button"
class=
"ti-form-input rounded-md ltr:rounded-r-md rtl:rounded-l-md focus:z-10"
style=
"padding-right: 2.5rem;"
value=
""
>
<input
type=
"text"
name=
"hs-leading-button-add-on-with-icon-and-button"
class=
"ti-form-input rounded-md ltr:rounded-r-md rtl:rounded-l-md focus:z-10 bg-input-readonly"
readonly
style=
"padding-right: 2.5rem;"
[(
ngModel
)]="
groupapprove
.
apsapprove3
.
fname
"
>
<div
class=
"absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2"
>
<button
type=
"button"
class=
"flex items-center text-red-500"
>
<i
class=
"ti ti-circle-x cursor-pointer"
></i>
</button>
<button
type=
"button"
class=
"flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay=
"#set-approvers-table-modal-edit"
>
data-hs-overlay=
"#set-approvers-table-modal-edit"
(
click
)="
empnumber =
3"
>
<i
class=
"ri-search-line cursor-pointer text-gray"
></i>
</button>
</div>
...
...
@@ -199,14 +222,16 @@
<label
class=
"ti-form-label mt-2rem"
>
ผู้ประเมินลำดับที่ 4
</label>
<div
class=
"flex"
>
<div
class=
"relative flex rounded-md w-2/3"
>
<input
type=
"text"
id=
"hs-leading-button-add-on-with-icon-and-button"
name=
"hs-leading-button-add-on-with-icon-and-button"
class=
"ti-form-input rounded-md ltr:rounded-r-md rtl:rounded-l-md focus:z-10"
style=
"padding-right: 2.5rem;"
value=
""
>
<input
type=
"text"
name=
"hs-leading-button-add-on-with-icon-and-button"
class=
"ti-form-input rounded-md ltr:rounded-r-md rtl:rounded-l-md focus:z-10 bg-input-readonly"
readonly
style=
"padding-right: 2.5rem;"
[(
ngModel
)]="
groupapprove
.
apsapprove4
.
fname
"
>
<div
class=
"absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2"
>
<button
type=
"button"
class=
"flex items-center text-red-500"
>
<i
class=
"ti ti-circle-x cursor-pointer"
></i>
</button>
<button
type=
"button"
class=
"flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay=
"#set-approvers-table-modal-edit"
>
data-hs-overlay=
"#set-approvers-table-modal-edit"
(
click
)="
empnumber =
4"
>
<i
class=
"ri-search-line cursor-pointer text-gray"
></i>
</button>
</div>
...
...
@@ -215,14 +240,16 @@
<label
class=
"ti-form-label mt-2rem"
>
ผู้ประเมินลำดับที่ 5
</label>
<div
class=
"flex"
>
<div
class=
"relative flex rounded-md w-2/3"
>
<input
type=
"text"
id=
"hs-leading-button-add-on-with-icon-and-button"
name=
"hs-leading-button-add-on-with-icon-and-button"
class=
"ti-form-input rounded-md ltr:rounded-r-md rtl:rounded-l-md focus:z-10"
style=
"padding-right: 2.5rem;"
value=
""
>
<input
type=
"text"
name=
"hs-leading-button-add-on-with-icon-and-button"
class=
"ti-form-input rounded-md ltr:rounded-r-md rtl:rounded-l-md focus:z-10 bg-input-readonly"
readonly
style=
"padding-right: 2.5rem;"
[(
ngModel
)]="
groupapprove
.
apsapprove5
.
fname
"
>
<div
class=
"absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2"
>
<button
type=
"button"
class=
"flex items-center text-red-500"
>
<i
class=
"ti ti-circle-x cursor-pointer"
></i>
</button>
<button
type=
"button"
class=
"flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay=
"#set-approvers-table-modal-edit"
>
data-hs-overlay=
"#set-approvers-table-modal-edit"
(
click
)="
empnumber =
5"
>
<i
class=
"ri-search-line cursor-pointer text-gray"
></i>
</button>
</div>
...
...
@@ -264,8 +291,8 @@
<div
class=
"px-1"
>
<div
class=
"relative shadow-md"
>
<input
type=
"text"
id=
"hs-leading-icon"
name=
"hs-leading-icon"
class=
"ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
placeholder=
"Search by No. or Name
"
>
class=
"ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
placeholder=
"Search by No. or Name"
[(
ngModel
)]="
search
"
(
ngModelChange
)="
searchChange
()
"
>
<div
class=
"absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4"
>
<i
class=
"ri-search-line text-gray"
></i>
...
...
@@ -311,27 +338,30 @@
</ng-container>
</tr>
</thead>
<tbody>
<tr
*
ngFor=
"let item of[
['10001', 'สามารถ','พยัคร้าย','Human Resource Development Officer','BU5'],
['10002', 'สมหวัง','ฟันหลุด','Human Resource Development Officer','BU5'],
['10003', 'สามารถ','พยัคร้าย','Human Resource Development Officer','BU5'],
['10004', 'สมหวัง','ฟันหลุด','Human Resource Development Officer','BU5'],
['10005', 'สามารถ','พยัคร้าย','Human Resource Development Officer','BU5'],
['10006', 'สมจิต','ฟันหลอ','Human Resource Development Officer','BU5'],];let i = index"
>
<td
class=
"flex justify-center"
style=
"font-size: 12px;"
>
{{item[0]}}
</td>
<td
style=
"font-size: 12px; width: 20%;"
>
{{item[1]}}
</td>
<td
style=
"font-size: 12px; width: 20%;"
>
{{item[2]}}
</td>
<tbody
*
ngIf=
"!employee_listFilter().length"
>
<tr>
<td
class=
"text-center"
colspan=
"100%"
>
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody
*
ngIf=
"employee_listFilter().length"
>
<ng-container
*
ngIf=
"currentModel=='edit'"
>
<tr
*
ngFor=
"let item of employee_listFilter() | slice:((employeeModal.currentPage-1) * 10) : (((employeeModal.currentPage-1) * 10) + 10);let i = index"
class=
"cursor-pointer"
>
<td
style=
"font-size: 12px;"
>
{{item.employeeId}}
</td>
<td
style=
"font-size: 12px; width: 20%;"
>
{{item.fname}}
</td>
<td
style=
"font-size: 12px; width: 20%;"
>
{{item.lname}}
</td>
<td
style=
"font-size: 12px; width: 20%; word-break: break-word; white-space: normal;"
>
{{item[3]
}}
{{item.position.tdesc
}}
</td>
<td
style=
"font-size: 12px; width: 20%;"
>
{{item[4]
}}
</td>
<td
style=
"font-size: 12px; width: 10%;"
>
{{item.bu1.bu1id
}}
</td>
<td
class=
"flex justify-center"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
(
click
)="
selectEMP
(
item
)"
data-hs-overlay=
"#set-approvers-modal-edit"
>
<i
class=
"ri-add-line"
></i>
Select
...
...
@@ -339,31 +369,28 @@
</div>
</td>
</tr>
</ng-container>
</tbody>
</table>
</div>
</div>
<div
class=
"body-content"
style=
"margin-top: 20px;"
>
<ul
class=
"nav-tabs"
>
<div
class=
"px-1 bg-white rounded-2 shadow justify-content-center align-items-center"
>
<div
class=
"box-body"
>
<nav
class=
"pagination-style-3 overflow-auto"
>
<nav
class=
"pagination-style-3 overflow-auto my-5"
*
ngIf=
"employeeModal.page.length"
>
<ul
class=
"ti-pagination"
>
<li>
<a
aria-label=
"anchor"
class=
"page-link"
href=
"javascript:void(0);"
>
<a
aria-label=
"anchor"
class=
"page-link"
href=
"javascript:void(0);"
(
click
)="
employeeModal
.
currentPage =
(employeeModal.currentPage-1
||
1
)"
>
<i
class=
"ri-arrow-left-s-line align-middle rtl:rotate-180"
></i>
</a>
</li>
<li><a
class=
"page-link active"
href=
"javascript:void(0);"
aria-current=
"page"
>
1
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
2
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
3
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
4
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
5
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
...
</a></li>
<li><a
class=
"page-link"
href=
"javascript:void(0);"
>
31
</a></li>
<li
*
ngFor=
"let item of employeeModal.page"
>
<a
class=
"page-link"
href=
"javascript:void(0);"
[
class
.
active
]="
item=
=employeeModal.currentPage"
(
click
)="
employeeModal
.
currentPage=
item"
>
{{item}}
</a>
</li>
<li>
<a
aria-label=
"anchor"
class=
"page-link"
href=
"javascript:void(0);"
>
<a
aria-label=
"anchor"
class=
"page-link"
href=
"javascript:void(0);"
(
click
)="
employeeModal
.
currentPage =
(employeeModal.currentPage
>
employeeModal.page.length-1 ? employeeModal.currentPage: employeeModal.currentPage+1 )">
<i
class=
"ri-arrow-right-s-line align-middle rtl:rotate-180"
></i>
</a>
</li>
...
...
@@ -371,13 +398,6 @@
</nav>
</div>
</div>
</ul>
<ul
class=
"nav-tabs mt-1"
>
<p>
Show 1 to 10 of 50 items
</p>
</ul>
</div>
</div>
</div>
</div>
</div>
...
...
@@ -408,7 +428,7 @@
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#set-approvers-alert-edit-modal"
(
click
)="
add
User
();
showSuccessEdit
()"
>
data-hs-overlay=
"#set-approvers-alert-edit-modal"
(
click
)="
add
groupapprove
();
showSuccessEdit
()"
>
บันทึกข้อมูล
</a>
</div>
...
...
src/app/components/competency-assessment/competency-management/set-approvers/set-approvers.component.ts
View file @
2f0cb762
import
{
Component
,
EventEmitter
,
Input
,
Output
}
from
'@angular/core'
;
import
{
C
hangeDetectorRef
,
C
omponent
,
EventEmitter
,
Input
,
Output
}
from
'@angular/core'
;
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
EmployeeModel
,
MyEmployeeModel
}
from
'src/app/shared/model/employee.model'
;
import
{
GroupApproveModel
,
MyGroupApproveModel
}
from
'src/app/shared/model/group-approve.model'
;
import
{
EmployeeService
}
from
'src/app/shared/services/employee.service'
;
import
{
GroupApproveService
}
from
'src/app/shared/services/group-approve.service'
;
interface
table
{
currentPage
:
number
,
page
:
number
[],
search
:
string
}
@
Component
({
selector
:
'app-set-approvers'
,
...
...
@@ -9,77 +18,155 @@ import { ToastrService } from 'ngx-toastr';
export
class
SetApproversComponent
{
@
Input
()
pathTitle
=
[
'การประเมินจัดประเมินสมรรถนะ'
,
'การจัดการสมรรถนะ'
,
'กำหนดผู้ประเมิน'
];
@
Output
()
sendPathTitle
:
EventEmitter
<
string
[]
>
=
new
EventEmitter
<
string
[]
>
();
activeTab
:
string
=
'tab1'
;
// กำหนด tab เริ่มต้น
activeTab
:
string
=
'tab1'
;
// ฟังก์ชันในการเปลี่ยนแท็บ
changeTab
(
tab
:
{
id
:
string
,
text
:
string
})
{
this
.
sendPathTitle
.
emit
([
'การสมรรถนะจัดประเมินสมรรถนะ'
,
'การจัดการประเมิน'
,
tab
.
text
]);
this
.
activeTab
=
tab
.
id
;
}
// การจัดการการเปิดปิด modal
modalOptions
:
{
[
nameModal
:
string
]:
{
isModalOpen
:
boolean
;
modalSize
:
string
;
backdropClose
:
boolean
;
};
}
=
{
"add"
:
{
isModalOpen
:
false
,
modalSize
:
'm'
,
backdropClose
:
true
,
}
,
"edit"
:
{
isModalOpen
:
false
,
modalSize
:
'm'
,
backdropClose
:
true
,
}
};
openModal
(
name
:
string
,
size
:
string
,
closeOnBackdrop
?:
boolean
)
{
this
.
modalOptions
[
name
].
modalSize
=
size
;
this
.
modalOptions
[
name
].
backdropClose
=
closeOnBackdrop
||
false
;
this
.
modalOptions
[
name
].
isModalOpen
=
true
;
this
.
currentModal
=
name
;
// ตั้งค่าค่าของ currentModal เป็น 'add' หรือ 'edit'
document
.
body
.
style
.
overflow
=
'hidden'
;
currentPage
=
1
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
groupapprove_list
:
GroupApproveModel
[]
=
[]
groupapprove_listLoading
=
false
groupapprove
:
GroupApproveModel
=
new
MyGroupApproveModel
()
search
=
""
employee_list
:
EmployeeModel
[]
=
[]
employee_listLoading
=
false
employee
:
EmployeeModel
=
new
MyEmployeeModel
({})
employeeModal
:
table
=
{
currentPage
:
1
,
page
:
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
)
,
search
:
""
}
empnumber
=
0
currentModel
:
'add'
|
'edit'
|
'delete'
=
"add"
constructor
(
private
groupapproveService
:
GroupApproveService
,
private
toastr
:
ToastrService
,
private
cdr
:
ChangeDetectorRef
,
private
employeeService
:
EmployeeService
,
)
{
}
ngOnInit
():
void
{
this
.
getGroupapprove_list
()
this
.
getEemployeeList
()
}
closeModal
(
name
:
string
)
{
this
.
modalOptions
[
name
].
isModalOpen
=
false
;
if
(
!
this
.
isAnyModalOpen
())
{
document
.
body
.
style
.
overflow
=
''
;
// คืนค่าการ Scroll เฉพาะเมื่อ Modal ทั้งหมดปิดแล้ว
getEemployeeList
()
{
this
.
employee_listLoading
=
true
this
.
employeeService
.
getList
().
subscribe
({
next
:
response
=>
{
this
.
employee_list
=
response
.
map
(
x
=>
{
return
new
MyEmployeeModel
(
x
)
})
this
.
employee_listLoading
=
false
this
.
searchEMP
()
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
this
.
employee_listLoading
=
false
this
.
cdr
.
detectChanges
()
}
})
}
isAnyModalOpen
():
boolean
{
return
Object
.
values
(
this
.
modalOptions
).
some
(
modal
=>
modal
.
isModalOpen
);
// ตรวจสอบว่า modal อื่นยังเปิดอยู่หรือไม่
employee_listFilter
()
{
console
.
log
(
this
.
employee
)
return
this
.
employee_list
.
filter
(
x
=>
x
.
fname
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
())
||
x
.
lname
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
()))
}
// ฟังก์ชัน toggle checkbox
isChecked
:
boolean
=
false
;
// ใช้สำหรับตรวจสอบสถานะของ checkbox
toggleCheckbox
()
{
this
.
isChecked
=
!
this
.
isChecked
;
// สลับสถานะ
searchEMP
()
{
this
.
employeeModal
.
currentPage
=
1
this
.
employeeModal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
employee_listFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
// ฟังก์ชันสำหรับการเพิ่ม ลบ หรือแก้ไข ข้อมูล
addUser
()
{
console
.
log
(
'เพิ่มผู้ใช้งาน'
);
empChange
()
{
const
employee
=
this
.
employee_list
.
find
(
x
=>
x
.
employeeId
==
this
.
employee
.
employeeId
)
this
.
selectEMP
(
employee
||
new
MyEmployeeModel
({
employeeId
:
this
.
employee
.
employeeId
}))
}
deleteUser
()
{
console
.
log
(
'ลบผู้ใช้งาน'
);
selectEMP
(
employee
?:
EmployeeModel
)
{
const
data
=
new
MyEmployeeModel
(
employee
||
{});
if
(
this
.
empnumber
==
1
)
{
this
.
groupapprove
.
apsapprove1
=
data
}
else
if
(
this
.
empnumber
==
2
)
{
this
.
groupapprove
.
apsapprove2
=
data
}
else
if
(
this
.
empnumber
==
3
)
{
this
.
groupapprove
.
apsapprove3
=
data
}
else
if
(
this
.
empnumber
==
4
)
{
this
.
groupapprove
.
apsapprove4
=
data
}
else
if
(
this
.
empnumber
==
5
)
{
this
.
groupapprove
.
apsapprove5
=
data
}
editUser
()
{
console
.
log
(
'แก้ไขผู้ใช้งาน'
);
}
getGroupapprove_list
()
{
this
.
groupapprove_listLoading
=
true
this
.
groupapproveService
.
getList
().
subscribe
({
next
:
response
=>
{
this
.
groupapprove_list
=
response
.
map
(
x
=>
new
MyGroupApproveModel
(
x
))
this
.
groupapprove_listLoading
=
false
this
.
searchChange
()
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
this
.
groupapprove_listLoading
=
false
this
.
cdr
.
detectChanges
()
}
})
}
searchChange
()
{
this
.
currentPage
=
1
this
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
groupapprove_listFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
groupapprove_listFilter
()
{
console
.
log
(
this
.
groupapprove
)
return
this
.
groupapprove_list
.
filter
(
x
=>
x
.
apsapprove1
.
employeeId
||
x
.
apsapprove2
.
employeeId
||
x
.
apsapprove3
.
employeeId
||
x
.
apsapprove4
.
employeeId
||
x
.
apsapprove5
.
employeeId
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
())
||
x
.
apsapprove1
.
fname
||
x
.
apsapprove1
.
lname
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
())
||
x
.
apsapprove2
.
fname
||
x
.
apsapprove2
.
lname
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
())
||
x
.
apsapprove3
.
fname
||
x
.
apsapprove3
.
lname
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
())
||
x
.
apsapprove4
.
fname
||
x
.
apsapprove4
.
lname
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
())
||
x
.
apsapprove5
.
fname
||
x
.
apsapprove5
.
lname
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
()))
}
currentModal
=
""
;
selectGroupapprove
(
groupapprove
?:
GroupApproveModel
)
{
this
.
groupapprove
=
new
MyGroupApproveModel
(
groupapprove
)
}
constructor
(
private
toastr
:
ToastrService
)
{
}
showAlert
(
text
:
string
,
type
:
'success'
|
'error'
)
{
this
.
toastr
[
type
](
text
,
'แจ้งเตือน'
,
{
timeOut
:
3000
,
positionClass
:
'toast-top-right'
,
})
}
addgroupapprove
()
{
this
.
groupapprove_listLoading
=
true
this
.
groupapproveService
.
post
(
this
.
groupapprove
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
getGroupapprove_list
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
this
.
groupapprove_listLoading
=
false
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
this
.
groupapprove_listLoading
=
false
}
})
}
deletegroupapprove
()
{
this
.
groupapprove_listLoading
=
true
this
.
groupapproveService
.
delete
(
this
.
groupapprove
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
getGroupapprove_list
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
this
.
groupapprove_listLoading
=
false
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
this
.
groupapprove_listLoading
=
false
}
})
}
showSuccess
()
{
this
.
toastr
.
success
(
'บันทึกข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
...
...
src/app/components/dashboard/dashboard.module.ts
View file @
2f0cb762
...
...
@@ -134,6 +134,7 @@ import { FileService } from 'src/app/shared/services/file.service';
import
{
CompetencyGroupGradeService
}
from
'src/app/shared/services/competency-group-grade.service'
;
import
{
IndicatorsCoursesService
}
from
'src/app/shared/services/indicators-courses.service'
;
import
{
IdpDevelopmentService
}
from
'src/app/shared/services/idp-development.service'
;
import
{
GroupApproveService
}
from
'src/app/shared/services/group-approve.service'
;
import
{
UserService
}
from
'src/app/shared/services/user.service'
;
import
{
ManageUserComponent
}
from
'../company-components/account-settings/manage-user/manage-user.component'
;
...
...
@@ -301,6 +302,7 @@ export class CustomDateAdapter extends NativeDateAdapter {
CompetencyGroupGradeService
,
IndicatorsCoursesService
,
IdpDevelopmentService
,
GroupApproveService
,
UserService
,
{
provide
:
HTTP_INTERCEPTORS
,
...
...
src/app/shared/model/group-approve.model.ts
0 → 100644
View file @
2f0cb762
import
{
EmployeeModel
,
MyEmployeeModel
}
from
"./employee.model"
;
import
{
MyPLModel
,
PLModel
}
from
"./pl.model"
;
export
interface
GroupApproveModel
{
personalLevel
:
PLModel
;
apsassessy
:
EmployeeModel
;
companyId
:
string
;
apsapprove1
:
EmployeeModel
;
apsapprove2
:
EmployeeModel
;
apsapprove3
:
EmployeeModel
;
apsapprove4
:
EmployeeModel
;
apsapprove5
:
EmployeeModel
;
}
export
class
MyGroupApproveModel
implements
GroupApproveModel
{
personalLevel
:
PLModel
;
apsassessy
:
EmployeeModel
companyId
:
string
;
apsapprove1
:
EmployeeModel
;
apsapprove2
:
EmployeeModel
;
apsapprove3
:
EmployeeModel
;
apsapprove4
:
EmployeeModel
;
apsapprove5
:
EmployeeModel
;
constructor
(
data
:
Partial
<
GroupApproveModel
>
=
{})
{
this
.
personalLevel
=
new
MyPLModel
(
data
.
personalLevel
||
{});
this
.
apsassessy
=
new
MyEmployeeModel
(
data
.
apsassessy
||
{})
this
.
companyId
=
data
.
companyId
||
''
;
this
.
apsapprove1
=
new
MyEmployeeModel
(
data
.
apsapprove1
||
{});
this
.
apsapprove2
=
new
MyEmployeeModel
(
data
.
apsapprove2
||
{});
this
.
apsapprove3
=
new
MyEmployeeModel
(
data
.
apsapprove3
||
{});
this
.
apsapprove4
=
new
MyEmployeeModel
(
data
.
apsapprove4
||
{});
this
.
apsapprove5
=
new
MyEmployeeModel
(
data
.
apsapprove5
||
{});
}
}
\ No newline at end of file
src/app/shared/services/group-approve.service.ts
0 → 100644
View file @
2f0cb762
import
{
HttpClient
,
HttpHeaders
}
from
'@angular/common/http'
;
import
{
Injectable
}
from
'@angular/core'
;
import
{
Observable
}
from
'rxjs'
;
import
{
environment
}
from
'src/environments/environment'
;
import
{
GroupApproveModel
}
from
'../model/group-approve.model'
;
import
{
AlertModel
}
from
'../model/alert.model'
;
@
Injectable
({
providedIn
:
'root'
})
export
class
GroupApproveService
{
api
=
"/group-approve"
urlApi
=
environment
.
baseUrl
+
this
.
api
constructor
(
private
http
:
HttpClient
)
{
}
getByPersonalLevel
(
plId
:
string
):
Observable
<
GroupApproveModel
>
{
return
this
.
http
.
get
<
GroupApproveModel
>
(
this
.
urlApi
+
"/"
+
plId
);
}
getList
():
Observable
<
GroupApproveModel
[]
>
{
return
this
.
http
.
get
<
GroupApproveModel
[]
>
(
this
.
urlApi
+
"/lists"
)
}
post
(
body
:
GroupApproveModel
):
Observable
<
AlertModel
>
{
return
this
.
http
.
post
<
AlertModel
>
(
this
.
urlApi
,
body
)
}
delete
(
body
:
GroupApproveModel
)
:
Observable
<
AlertModel
>
{
const
options
=
{
headers
:
new
HttpHeaders
({
"Content-Type"
:
"application/json"
,
}),
body
:
body
};
return
this
.
http
.
delete
<
AlertModel
>
(
this
.
urlApi
,
options
)
}
}
\ No newline at end of file
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