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
cd558547
Commit
cd558547
authored
Feb 10, 2025
by
DESKTOP-HBB3MIJ\myHR
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
กลุ่มพนักงาน, ตำเเหน่ง, ประเภทพนักงาน, ระดับพนักงาน (PL), ประเภทสมรรถนะ, หัวข้อสมรรถนะ
parent
853b91d6
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
1112 additions
and
1373 deletions
+1112
-1373
department-list.component.ts
...usiness-unit/department-list/department-list.component.ts
+9
-9
section-registration.component.ts
...it/section-registration/section-registration.component.ts
+9
-9
sub-department-four.component.ts
...unit/sub-department-four/sub-department-four.component.ts
+9
-9
sub-department-one.component.ts
...s-unit/sub-department-one/sub-department-one.component.ts
+9
-9
sub-department-three.component.ts
...it/sub-department-three/sub-department-three.component.ts
+9
-9
sub-department-two.component.ts
...s-unit/sub-department-two/sub-department-two.component.ts
+9
-9
employee-categories.component.html
...on/employee-categories/employee-categories.component.html
+33
-3
employee-categories.component.ts
...tion/employee-categories/employee-categories.component.ts
+59
-9
employee-group-unit.component.html
...on/employee-group-unit/employee-group-unit.component.html
+102
-233
employee-group-unit.component.ts
...tion/employee-group-unit/employee-group-unit.component.ts
+126
-115
employee-level.component.html
...-description/employee-level/employee-level.component.html
+27
-25
employee-level.component.ts
...ob-description/employee-level/employee-level.component.ts
+58
-5
position-unit.component.html
...nts/job-description/position/position-unit.component.html
+102
-232
position-unit.component.ts
...nents/job-description/position/position-unit.component.ts
+122
-73
competency-topic.component.html
...stration/competency-topic/competency-topic.component.html
+86
-209
competency-topic.component.ts
...gistration/competency-topic/competency-topic.component.ts
+127
-109
name-registration.component.html
...ssment/name-registration/name-registration.component.html
+4
-4
name-registration.component.ts
...sessment/name-registration/name-registration.component.ts
+1
-0
type-registration.component.html
...ration/type-registration/type-registration.component.html
+84
-174
type-registration.component.ts
...stration/type-registration/type-registration.component.ts
+114
-96
competencytopic.service.ts
src/app/shared/services/competencytopic.service.ts
+6
-4
competencytype.service.ts
src/app/shared/services/competencytype.service.ts
+7
-4
emp-group.service.ts
src/app/shared/services/emp-group.service.ts
+0
-12
position.service.ts
src/app/shared/services/position.service.ts
+0
-12
No files found.
src/app/components/company-components/company-registration/branch-business-unit/department-list/department-list.component.ts
View file @
cd558547
...
@@ -116,9 +116,9 @@ export class DepartmentListComponent implements OnInit {
...
@@ -116,9 +116,9 @@ export class DepartmentListComponent implements OnInit {
this
.
bu2Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu2Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu2Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu2Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu2Table
()
{
filterBu2Table
()
{
return
this
.
bu2List
.
filter
(
x
=>
x
.
bu2id
.
includes
(
this
.
bu2Table
.
search
)
||
return
this
.
bu2List
.
filter
(
x
=>
x
.
bu2id
.
toLowerCase
().
includes
(
this
.
bu2Table
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu2Table
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu2Table
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu2Table
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu2Table
.
search
.
toLowerCase
()
))
}
}
selectBu2
(
bu2
?:
Bu2Model
)
{
selectBu2
(
bu2
?:
Bu2Model
)
{
this
.
bu2
=
new
MyBu2Model
(
bu2
||
{})
this
.
bu2
=
new
MyBu2Model
(
bu2
||
{})
...
@@ -139,9 +139,9 @@ export class DepartmentListComponent implements OnInit {
...
@@ -139,9 +139,9 @@ export class DepartmentListComponent implements OnInit {
this
.
bu2Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu2Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu2Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu2Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu2Modal
()
{
filterBu2Modal
()
{
return
this
.
bu2List
.
filter
(
x
=>
x
.
bu2id
.
includes
(
this
.
bu2Modal
.
search
)
||
return
this
.
bu2List
.
filter
(
x
=>
x
.
bu2id
.
toLowerCase
().
includes
(
this
.
bu2Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu2Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu2Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu2Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu2Modal
.
search
.
toLowerCase
()
))
}
}
...
@@ -160,9 +160,9 @@ export class DepartmentListComponent implements OnInit {
...
@@ -160,9 +160,9 @@ export class DepartmentListComponent implements OnInit {
this
.
selectBu1
(
bu1
||
new
MyBu1Model
({
bu1id
:
this
.
bu1
.
bu1id
}))
this
.
selectBu1
(
bu1
||
new
MyBu1Model
({
bu1id
:
this
.
bu1
.
bu1id
}))
}
}
filterBu1Modal
()
{
filterBu1Modal
()
{
return
this
.
bu1List
.
filter
(
x
=>
x
.
bu1id
.
includes
(
this
.
bu1Modal
.
search
)
||
return
this
.
bu1List
.
filter
(
x
=>
x
.
bu1id
.
toLowerCase
().
includes
(
this
.
bu1Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu1Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu1Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu1Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu1Modal
.
search
.
toLowerCase
()
))
}
}
selectBu1
(
bu1
?:
Bu1Model
)
{
selectBu1
(
bu1
?:
Bu1Model
)
{
this
.
bu1
=
new
MyBu1Model
(
bu1
||
{})
this
.
bu1
=
new
MyBu1Model
(
bu1
||
{})
...
...
src/app/components/company-components/company-registration/branch-business-unit/section-registration/section-registration.component.ts
View file @
cd558547
...
@@ -117,9 +117,9 @@ export class SectionRegistrationComponent implements OnInit {
...
@@ -117,9 +117,9 @@ export class SectionRegistrationComponent implements OnInit {
this
.
bu3Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu3Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu3Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu3Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu3Table
()
{
filterBu3Table
()
{
return
this
.
bu3List
.
filter
(
x
=>
x
.
bu3id
.
includes
(
this
.
bu3Table
.
search
)
||
return
this
.
bu3List
.
filter
(
x
=>
x
.
bu3id
.
toLowerCase
().
includes
(
this
.
bu3Table
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu3Table
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu3Table
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu3Table
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu3Table
.
search
.
toLowerCase
()
))
}
}
selectBu3
(
bu3
?:
Bu3Model
)
{
selectBu3
(
bu3
?:
Bu3Model
)
{
this
.
bu3
=
new
MyBu3Model
(
bu3
||
{})
this
.
bu3
=
new
MyBu3Model
(
bu3
||
{})
...
@@ -140,9 +140,9 @@ export class SectionRegistrationComponent implements OnInit {
...
@@ -140,9 +140,9 @@ export class SectionRegistrationComponent implements OnInit {
this
.
bu3Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu3Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu3Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu3Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu3Modal
()
{
filterBu3Modal
()
{
return
this
.
bu3List
.
filter
(
x
=>
x
.
bu3id
.
includes
(
this
.
bu3Modal
.
search
)
||
return
this
.
bu3List
.
filter
(
x
=>
x
.
bu3id
.
toLowerCase
().
includes
(
this
.
bu3Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu3Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu3Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu3Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu3Modal
.
search
.
toLowerCase
()
))
}
}
addBu3
()
{
addBu3
()
{
this
.
bu3Service
.
post
({
...
this
.
bu3
,
parent
:
this
.
bu2
.
bu2id
}).
subscribe
({
this
.
bu3Service
.
post
({
...
this
.
bu3
,
parent
:
this
.
bu2
.
bu2id
}).
subscribe
({
...
@@ -188,9 +188,9 @@ export class SectionRegistrationComponent implements OnInit {
...
@@ -188,9 +188,9 @@ export class SectionRegistrationComponent implements OnInit {
this
.
selectBu2
(
bu2
||
new
MyBu2Model
({
bu2id
:
this
.
bu2
.
bu2id
}))
this
.
selectBu2
(
bu2
||
new
MyBu2Model
({
bu2id
:
this
.
bu2
.
bu2id
}))
}
}
filterBu2Modal
()
{
filterBu2Modal
()
{
return
this
.
bu2List
.
filter
(
x
=>
x
.
bu2id
.
includes
(
this
.
bu2Modal
.
search
)
||
return
this
.
bu2List
.
filter
(
x
=>
x
.
bu2id
.
toLowerCase
().
includes
(
this
.
bu2Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu2Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu2Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu2Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu2Modal
.
search
.
toLowerCase
()
))
}
}
selectBu2
(
bu2
?:
Bu2Model
)
{
selectBu2
(
bu2
?:
Bu2Model
)
{
this
.
bu2
=
new
MyBu2Model
(
bu2
||
{})
this
.
bu2
=
new
MyBu2Model
(
bu2
||
{})
...
...
src/app/components/company-components/company-registration/branch-business-unit/sub-department-four/sub-department-four.component.ts
View file @
cd558547
...
@@ -117,9 +117,9 @@ export class SubDepartmentFourComponent implements OnInit {
...
@@ -117,9 +117,9 @@ export class SubDepartmentFourComponent implements OnInit {
this
.
bu7Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu7Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu7Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu7Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu7Table
()
{
filterBu7Table
()
{
return
this
.
bu7List
.
filter
(
x
=>
x
.
bu7id
.
includes
(
this
.
bu7Table
.
search
)
||
return
this
.
bu7List
.
filter
(
x
=>
x
.
bu7id
.
toLowerCase
().
includes
(
this
.
bu7Table
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu7Table
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu7Table
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu7Table
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu7Table
.
search
.
toLowerCase
()
))
}
}
selectBu7
(
bu7
?:
Bu7Model
)
{
selectBu7
(
bu7
?:
Bu7Model
)
{
this
.
bu7
=
new
MyBu7Model
(
bu7
||
{})
this
.
bu7
=
new
MyBu7Model
(
bu7
||
{})
...
@@ -140,9 +140,9 @@ export class SubDepartmentFourComponent implements OnInit {
...
@@ -140,9 +140,9 @@ export class SubDepartmentFourComponent implements OnInit {
this
.
bu7Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu7Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu7Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu7Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu7Modal
()
{
filterBu7Modal
()
{
return
this
.
bu7List
.
filter
(
x
=>
x
.
bu7id
.
includes
(
this
.
bu7Modal
.
search
)
||
return
this
.
bu7List
.
filter
(
x
=>
x
.
bu7id
.
toLowerCase
().
includes
(
this
.
bu7Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu7Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu7Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu7Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu7Modal
.
search
.
toLowerCase
()
))
}
}
addBu7
()
{
addBu7
()
{
this
.
bu7Service
.
post
({
...
this
.
bu7
,
parent
:
this
.
bu6
.
bu6id
}).
subscribe
({
this
.
bu7Service
.
post
({
...
this
.
bu7
,
parent
:
this
.
bu6
.
bu6id
}).
subscribe
({
...
@@ -188,9 +188,9 @@ export class SubDepartmentFourComponent implements OnInit {
...
@@ -188,9 +188,9 @@ export class SubDepartmentFourComponent implements OnInit {
this
.
selectBu6
(
bu6
||
new
MyBu6Model
({
bu6id
:
this
.
bu6
.
bu6id
}))
this
.
selectBu6
(
bu6
||
new
MyBu6Model
({
bu6id
:
this
.
bu6
.
bu6id
}))
}
}
filterBu6Modal
()
{
filterBu6Modal
()
{
return
this
.
bu6List
.
filter
(
x
=>
x
.
bu6id
.
includes
(
this
.
bu6Modal
.
search
)
||
return
this
.
bu6List
.
filter
(
x
=>
x
.
bu6id
.
toLowerCase
().
includes
(
this
.
bu6Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu6Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu6Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu6Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu6Modal
.
search
.
toLowerCase
()
))
}
}
selectBu6
(
bu6
?:
Bu6Model
)
{
selectBu6
(
bu6
?:
Bu6Model
)
{
this
.
bu6
=
new
MyBu6Model
(
bu6
||
{})
this
.
bu6
=
new
MyBu6Model
(
bu6
||
{})
...
...
src/app/components/company-components/company-registration/branch-business-unit/sub-department-one/sub-department-one.component.ts
View file @
cd558547
...
@@ -116,9 +116,9 @@ export class SubDepartmentOneComponent implements OnInit {
...
@@ -116,9 +116,9 @@ export class SubDepartmentOneComponent implements OnInit {
this
.
bu4Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu4Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu4Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu4Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu4Table
()
{
filterBu4Table
()
{
return
this
.
bu4List
.
filter
(
x
=>
x
.
bu4id
.
includes
(
this
.
bu4Table
.
search
)
||
return
this
.
bu4List
.
filter
(
x
=>
x
.
bu4id
.
toLowerCase
().
includes
(
this
.
bu4Table
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu4Table
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu4Table
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu4Table
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu4Table
.
search
.
toLowerCase
()
))
}
}
selectBu4
(
bu4
?:
Bu4Model
)
{
selectBu4
(
bu4
?:
Bu4Model
)
{
this
.
bu4
=
new
MyBu4Model
(
bu4
||
{})
this
.
bu4
=
new
MyBu4Model
(
bu4
||
{})
...
@@ -139,9 +139,9 @@ export class SubDepartmentOneComponent implements OnInit {
...
@@ -139,9 +139,9 @@ export class SubDepartmentOneComponent implements OnInit {
this
.
bu4Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu4Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu4Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu4Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu4Modal
()
{
filterBu4Modal
()
{
return
this
.
bu4List
.
filter
(
x
=>
x
.
bu4id
.
includes
(
this
.
bu4Modal
.
search
)
||
return
this
.
bu4List
.
filter
(
x
=>
x
.
bu4id
.
toLowerCase
().
includes
(
this
.
bu4Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu4Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu4Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu4Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu4Modal
.
search
.
toLowerCase
()
))
}
}
addBu4
()
{
addBu4
()
{
this
.
bu4Service
.
post
({
...
this
.
bu4
,
parent
:
this
.
bu3
.
bu3id
}).
subscribe
({
this
.
bu4Service
.
post
({
...
this
.
bu4
,
parent
:
this
.
bu3
.
bu3id
}).
subscribe
({
...
@@ -187,9 +187,9 @@ export class SubDepartmentOneComponent implements OnInit {
...
@@ -187,9 +187,9 @@ export class SubDepartmentOneComponent implements OnInit {
this
.
selectBu3
(
bu3
||
new
MyBu3Model
({
bu3id
:
this
.
bu3
.
bu3id
}))
this
.
selectBu3
(
bu3
||
new
MyBu3Model
({
bu3id
:
this
.
bu3
.
bu3id
}))
}
}
filterBu3Modal
()
{
filterBu3Modal
()
{
return
this
.
bu3List
.
filter
(
x
=>
x
.
bu3id
.
includes
(
this
.
bu3Modal
.
search
)
||
return
this
.
bu3List
.
filter
(
x
=>
x
.
bu3id
.
toLowerCase
().
includes
(
this
.
bu3Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu3Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu3Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu3Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu3Modal
.
search
.
toLowerCase
()
))
}
}
selectBu3
(
bu3
?:
Bu3Model
)
{
selectBu3
(
bu3
?:
Bu3Model
)
{
this
.
bu3
=
new
MyBu3Model
(
bu3
||
{})
this
.
bu3
=
new
MyBu3Model
(
bu3
||
{})
...
...
src/app/components/company-components/company-registration/branch-business-unit/sub-department-three/sub-department-three.component.ts
View file @
cd558547
...
@@ -117,9 +117,9 @@ export class SubDepartmentThreeComponent implements OnInit {
...
@@ -117,9 +117,9 @@ export class SubDepartmentThreeComponent implements OnInit {
this
.
bu6Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu6Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu6Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu6Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu6Table
()
{
filterBu6Table
()
{
return
this
.
bu6List
.
filter
(
x
=>
x
.
bu6id
.
includes
(
this
.
bu6Table
.
search
)
||
return
this
.
bu6List
.
filter
(
x
=>
x
.
bu6id
.
toLowerCase
().
includes
(
this
.
bu6Table
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu6Table
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu6Table
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu6Table
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu6Table
.
search
.
toLowerCase
()
))
}
}
selectBu6
(
bu6
?:
Bu6Model
)
{
selectBu6
(
bu6
?:
Bu6Model
)
{
this
.
bu6
=
new
MyBu6Model
(
bu6
||
{})
this
.
bu6
=
new
MyBu6Model
(
bu6
||
{})
...
@@ -140,9 +140,9 @@ export class SubDepartmentThreeComponent implements OnInit {
...
@@ -140,9 +140,9 @@ export class SubDepartmentThreeComponent implements OnInit {
this
.
bu6Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu6Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu6Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu6Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu6Modal
()
{
filterBu6Modal
()
{
return
this
.
bu6List
.
filter
(
x
=>
x
.
bu6id
.
includes
(
this
.
bu6Modal
.
search
)
||
return
this
.
bu6List
.
filter
(
x
=>
x
.
bu6id
.
toLowerCase
().
includes
(
this
.
bu6Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu6Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu6Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu6Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu6Modal
.
search
.
toLowerCase
()
))
}
}
addBu6
()
{
addBu6
()
{
this
.
bu6Service
.
post
({
...
this
.
bu6
,
parent
:
this
.
bu5
.
bu5id
}).
subscribe
({
this
.
bu6Service
.
post
({
...
this
.
bu6
,
parent
:
this
.
bu5
.
bu5id
}).
subscribe
({
...
@@ -188,9 +188,9 @@ export class SubDepartmentThreeComponent implements OnInit {
...
@@ -188,9 +188,9 @@ export class SubDepartmentThreeComponent implements OnInit {
this
.
selectBu5
(
bu5
||
new
MyBu5Model
({
bu5id
:
this
.
bu5
.
bu5id
}))
this
.
selectBu5
(
bu5
||
new
MyBu5Model
({
bu5id
:
this
.
bu5
.
bu5id
}))
}
}
filterBu5Modal
()
{
filterBu5Modal
()
{
return
this
.
bu5List
.
filter
(
x
=>
x
.
bu5id
.
includes
(
this
.
bu5Modal
.
search
)
||
return
this
.
bu5List
.
filter
(
x
=>
x
.
bu5id
.
toLowerCase
().
includes
(
this
.
bu5Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu5Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu5Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu5Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu5Modal
.
search
.
toLowerCase
()
))
}
}
selectBu5
(
bu5
?:
Bu5Model
)
{
selectBu5
(
bu5
?:
Bu5Model
)
{
this
.
bu5
=
new
MyBu5Model
(
bu5
||
{})
this
.
bu5
=
new
MyBu5Model
(
bu5
||
{})
...
...
src/app/components/company-components/company-registration/branch-business-unit/sub-department-two/sub-department-two.component.ts
View file @
cd558547
...
@@ -116,9 +116,9 @@ export class SubDepartmentTwoComponent implements OnInit {
...
@@ -116,9 +116,9 @@ export class SubDepartmentTwoComponent implements OnInit {
this
.
bu5Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu5Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu5Table
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu5Table
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu5Table
()
{
filterBu5Table
()
{
return
this
.
bu5List
.
filter
(
x
=>
x
.
bu5id
.
includes
(
this
.
bu5Table
.
search
)
||
return
this
.
bu5List
.
filter
(
x
=>
x
.
bu5id
.
toLowerCase
().
includes
(
this
.
bu5Table
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu5Table
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu5Table
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu5Table
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu5Table
.
search
.
toLowerCase
()
))
}
}
selectBu5
(
bu5
?:
Bu5Model
)
{
selectBu5
(
bu5
?:
Bu5Model
)
{
this
.
bu5
=
new
MyBu5Model
(
bu5
||
{})
this
.
bu5
=
new
MyBu5Model
(
bu5
||
{})
...
@@ -139,9 +139,9 @@ export class SubDepartmentTwoComponent implements OnInit {
...
@@ -139,9 +139,9 @@ export class SubDepartmentTwoComponent implements OnInit {
this
.
bu5Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu5Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
bu5Modal
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
filterBu5Modal
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
filterBu5Modal
()
{
filterBu5Modal
()
{
return
this
.
bu5List
.
filter
(
x
=>
x
.
bu5id
.
includes
(
this
.
bu5Modal
.
search
)
||
return
this
.
bu5List
.
filter
(
x
=>
x
.
bu5id
.
toLowerCase
().
includes
(
this
.
bu5Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu5Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu5Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu5Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu5Modal
.
search
.
toLowerCase
()
))
}
}
addBu5
()
{
addBu5
()
{
this
.
bu5Service
.
post
({
...
this
.
bu5
,
parent
:
this
.
bu4
.
bu4id
}).
subscribe
({
this
.
bu5Service
.
post
({
...
this
.
bu5
,
parent
:
this
.
bu4
.
bu4id
}).
subscribe
({
...
@@ -187,9 +187,9 @@ export class SubDepartmentTwoComponent implements OnInit {
...
@@ -187,9 +187,9 @@ export class SubDepartmentTwoComponent implements OnInit {
this
.
selectBu4
(
bu4
||
new
MyBu4Model
({
bu4id
:
this
.
bu4
.
bu4id
}))
this
.
selectBu4
(
bu4
||
new
MyBu4Model
({
bu4id
:
this
.
bu4
.
bu4id
}))
}
}
filterBu4Modal
()
{
filterBu4Modal
()
{
return
this
.
bu4List
.
filter
(
x
=>
x
.
bu4id
.
includes
(
this
.
bu4Modal
.
search
)
||
return
this
.
bu4List
.
filter
(
x
=>
x
.
bu4id
.
toLowerCase
().
includes
(
this
.
bu4Modal
.
search
.
toLowerCase
()
)
||
x
.
tdesc
.
includes
(
this
.
bu4Modal
.
search
)
||
x
.
tdesc
.
toLowerCase
().
includes
(
this
.
bu4Modal
.
search
.
toLowerCase
()
)
||
x
.
edesc
.
includes
(
this
.
bu4Modal
.
search
))
x
.
edesc
.
toLowerCase
().
includes
(
this
.
bu4Modal
.
search
.
toLowerCase
()
))
}
}
selectBu4
(
bu4
?:
Bu4Model
)
{
selectBu4
(
bu4
?:
Bu4Model
)
{
this
.
bu4
=
new
MyBu4Model
(
bu4
||
{})
this
.
bu4
=
new
MyBu4Model
(
bu4
||
{})
...
...
src/app/components/company-components/job-description/employee-categories/employee-categories.component.html
View file @
cd558547
...
@@ -3,12 +3,12 @@
...
@@ -3,12 +3,12 @@
<div
class=
"flex pr-2"
>
<div
class=
"flex pr-2"
>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
data-hs-overlay=
"#employee-categories-
page-
upload-modal"
>
data-hs-overlay=
"#employee-categories-upload-modal"
>
<i
class=
"ri-add-line"
></i>
<i
class=
"ri-add-line"
></i>
นำเข้าข้อมูล
นำเข้าข้อมูล
</button>
</button>
<a
class=
"mx-2 justify-center -mb-px inline-flex items-center gap-2 font-weight-500 font-size-12px text-center text-secondary border-secondary border-b-2 align-items-end"
<a
class=
"mx-2 justify-center -mb-px inline-flex items-center gap-2 font-weight-500 font-size-12px text-center text-secondary border-secondary border-b-2 align-items-end"
href=
"javascript:void(0);"
>
href=
"javascript:void(0);"
(
click
)="
downloadFile
()"
>
ดาวน์โหลดตัวอย่างไฟล์
ดาวน์โหลดตัวอย่างไฟล์
</a>
</a>
</div>
</div>
...
@@ -221,7 +221,7 @@
...
@@ -221,7 +221,7 @@
<div
class=
"flex justify-end"
>
<div
class=
"flex justify-end"
>
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#employee-categories-page-modal"
>
data-hs-overlay=
"#employee-categories-page-
alert-
modal"
>
<span
class=
"sr-only"
>
Close
</span>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</button>
...
@@ -273,3 +273,33 @@
...
@@ -273,3 +273,33 @@
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"employee-categories-upload-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)] rounded-md"
>
<div
class=
"ti-modal-header bg-primary !rounded-none !rounded-t-sm"
>
<h5
class=
"text-xxl font-bold text-white"
>
นำเข้าฝ่าย
</h5>
</div>
<div
class=
"ti-modal-body max-h-full overflow-hidden ti-modal-content !rounded-t-none !rounded-b-sm"
>
<h1
class=
"mt-2"
style=
"text-align: center;"
>
ไฟล์
</h1>
<div
class=
"mt-2 p-2"
>
<div
class=
"flex rounded-md"
>
<input
#
fileInput
type=
"file"
(
change
)="
onFileSelected
($
event
)"
hidden
>
<input
type=
"text"
[
value
]="
selectedFileName
"
readonly
(
click
)="
fileInput
.
click
()"
class=
"ti-form-input rounded-none ltr:rounded-l-md rtl:rounded-r-md focus:z-10 cursor-pointer"
>
<button
type=
"button"
(
click
)="
fileInput
.
click
()"
class=
"inline-flex flex-shrink-0 justify-center items-center h-[2.875rem] w-[2.875rem] ltr:rounded-r-md rtl:rounded-l-md border border-transparent font-semibold bg-secondary text-white hover:bg-secondary focus:z-10 focus:outline-none focus:ring-0 focus:ring-secondary transition-all text-sm"
>
<i
class=
"ti ti-upload"
></i>
</button>
</div>
<div
class=
"flex justify-center mt-2rem mb-1rem space-x-4"
>
<button
type=
"submit"
class=
"ti-btn ti-btn-secondary"
(
click
)="
uploadFile
()"
[
disabled
]="!
selectedFile
"
>
อัปโหลด
</button>
</div>
</div>
</div>
</div>
</div>
src/app/components/company-components/job-description/employee-categories/employee-categories.component.ts
View file @
cd558547
...
@@ -2,6 +2,7 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angu
...
@@ -2,6 +2,7 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angu
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
EmpTypeModel
,
MyEmpTypeModel
}
from
'src/app/shared/model/employee-type.model'
;
import
{
EmpTypeModel
,
MyEmpTypeModel
}
from
'src/app/shared/model/employee-type.model'
;
import
{
EmpTypeService
}
from
'src/app/shared/services/employee-type.service'
;
import
{
EmpTypeService
}
from
'src/app/shared/services/employee-type.service'
;
import
{
FileService
}
from
'src/app/shared/services/file.service'
;
export
interface
DataModel
{
export
interface
DataModel
{
codeId
:
string
codeId
:
string
tdesc
:
string
tdesc
:
string
...
@@ -35,23 +36,75 @@ export class EmployeeCategories {
...
@@ -35,23 +36,75 @@ export class EmployeeCategories {
dataSelect
:
DataModel
=
{
codeId
:
""
,
tdesc
:
""
,
edesc
:
""
,
companyId
:
""
}
dataSelect
:
DataModel
=
{
codeId
:
""
,
tdesc
:
""
,
edesc
:
""
,
companyId
:
""
}
itemToDelete
:
EmpTypeModel
|
null
=
null
;
itemToDelete
:
EmpTypeModel
|
null
=
null
;
selectedFile
:
File
|
null
=
null
;
selectedFileName
:
string
=
'กรุณาเลือกไฟล์'
;
constructor
(
private
empTypeService
:
EmpTypeService
,
constructor
(
private
empTypeService
:
EmpTypeService
,
private
toastr
:
ToastrService
,
private
toastr
:
ToastrService
,
private
cdr
:
ChangeDetectorRef
private
cdr
:
ChangeDetectorRef
,
private
fileService
:
FileService
)
{
}
)
{
}
ngOnInit
():
void
{
ngOnInit
():
void
{
this
.
getEmpTypeList
()
this
.
getEmpTypeList
()
}
}
onFileSelected
(
event
:
any
)
{
this
.
selectedFile
=
event
.
target
.
files
.
length
>
0
?
event
.
target
.
files
[
0
]
:
null
;
this
.
selectedFileName
=
this
.
selectedFile
?.
name
||
"กรุณาเลือกไฟล์"
}
uploadFile
()
{
if
(
!
this
.
selectedFile
)
{
alert
(
'กรุณาเลือกไฟล์ก่อนอัปโหลด'
)
return
}
const
formData
=
new
FormData
();
formData
.
append
(
'file'
,
this
.
selectedFile
);
this
.
fileService
.
upload
(
formData
,
'employment_type'
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
getEmpTypeList
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
})
}
downloadFile
()
{
const
fileName
=
'IMPORT_MEMPLOYMENTTYPE.xlsx'
this
.
fileService
.
download
(
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
);
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
})
}
getEmpTypeList
()
{
getEmpTypeList
()
{
this
.
dataLoading
=
true
this
.
empTypeService
.
getList
().
subscribe
({
this
.
empTypeService
.
getList
().
subscribe
({
next
:
response
=>
{
next
:
response
=>
{
this
.
emp_typelist
=
response
.
map
(
x
=>
({
check
:
false
,
data
:
{
codeId
:
x
.
codeId
,
tdesc
:
x
.
tdesc
,
edesc
:
x
.
edesc
,
companyId
:
x
.
companyId
}
}))
this
.
emp_typelist
=
response
.
map
(
x
=>
({
check
:
false
,
data
:
{
codeId
:
x
.
codeId
,
tdesc
:
x
.
tdesc
,
edesc
:
x
.
edesc
,
companyId
:
x
.
companyId
}
}))
this
.
dataLoading
=
false
this
.
searchChange
();
this
.
searchChange
();
this
.
cdr
.
detectChanges
();
this
.
cdr
.
detectChanges
();
},
},
error
:
error
=>
{
error
:
err
=>
{
this
.
dataLoading
=
false
console
.
error
(
'Error fetching employee types:'
,
err
);
console
.
error
(
'Error fetching employee types:'
,
error
);
this
.
cdr
.
detectChanges
()
}
}
});
});
}
}
...
@@ -63,17 +116,14 @@ export class EmployeeCategories {
...
@@ -63,17 +116,14 @@ export class EmployeeCategories {
emp_typeListFilter
()
{
emp_typeListFilter
()
{
return
this
.
emp_typelist
.
filter
(
x
=>
{
return
this
.
emp_typelist
.
filter
(
x
=>
{
const
data
=
x
.
data
const
data
=
x
.
data
const
match
=
data
.
codeId
.
includes
(
this
.
search
)
||
data
.
tdesc
.
includes
(
this
.
search
)
||
data
.
edesc
.
includes
(
this
.
search
);
const
match
=
data
.
codeId
.
toLowerCase
().
includes
(
this
.
search
)
||
data
.
tdesc
.
toLowerCase
().
includes
(
this
.
search
)
||
data
.
edesc
.
toLowerCase
()
.
includes
(
this
.
search
);
return
match
;
return
match
;
});
});
}
}
setData
(
data
?:
DataModel
)
{
setData
(
data
?:
DataModel
)
{
this
.
dataSelect
=
JSON
.
parse
(
JSON
.
stringify
(
data
||
{
code
:
""
,
tdesc
:
""
,
edesc
:
""
,
companyId
:
""
}));
this
.
dataSelect
=
JSON
.
parse
(
JSON
.
stringify
(
data
||
{
code
:
""
,
tdesc
:
""
,
edesc
:
""
,
companyId
:
""
}));
}
}
// selectEmp_type(emp_type?: EmpTypeModel) {
// // this.showSuccess()
// this.emp_type = new MyEmpTypeModel(emp_type || {})
// }
addEmp_type
()
{
addEmp_type
()
{
const
body
=
new
MyEmpTypeModel
({
codeId
:
this
.
dataSelect
.
codeId
,
tdesc
:
this
.
dataSelect
.
tdesc
,
edesc
:
this
.
dataSelect
.
edesc
,
companyId
:
this
.
dataSelect
.
companyId
})
const
body
=
new
MyEmpTypeModel
({
codeId
:
this
.
dataSelect
.
codeId
,
tdesc
:
this
.
dataSelect
.
tdesc
,
edesc
:
this
.
dataSelect
.
edesc
,
companyId
:
this
.
dataSelect
.
companyId
})
this
.
empTypeService
.
post
(
body
).
subscribe
({
this
.
empTypeService
.
post
(
body
).
subscribe
({
...
...
src/app/components/company-components/job-description/employee-group-unit/employee-group-unit.component.html
View file @
cd558547
...
@@ -3,12 +3,12 @@
...
@@ -3,12 +3,12 @@
<div
class=
"flex pr-2"
>
<div
class=
"flex pr-2"
>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
data-hs-overlay=
"#
company-registration-page
-upload-modal"
>
data-hs-overlay=
"#
employee-group-unit-component
-upload-modal"
>
<i
class=
"ri-add-line"
></i>
<i
class=
"ri-add-line"
></i>
นำเข้าข้อมูล
นำเข้าข้อมูล
</button>
</button>
<a
class=
"mx-2 justify-center -mb-px inline-flex items-center gap-2 font-weight-500 font-size-12px text-center text-secondary border-secondary border-b-2 align-items-end"
<a
class=
"mx-2 justify-center -mb-px inline-flex items-center gap-2 font-weight-500 font-size-12px text-center text-secondary border-secondary border-b-2 align-items-end"
href=
"javascript:void(0);"
>
href=
"javascript:void(0);"
(
click
)="
downloadFile
()"
>
ดาวน์โหลดตัวอย่างไฟล์
ดาวน์โหลดตัวอย่างไฟล์
</a>
</a>
</div>
</div>
...
@@ -27,14 +27,14 @@
...
@@ -27,14 +27,14 @@
</div>
</div>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
data-hs-overlay=
"#employee-group-unit-component-
modal-add"
(
click
)="
selectEmp_group
()"
>
data-hs-overlay=
"#employee-group-unit-component-
page-modal"
(
click
)="
modalStatus=
'add'
;
setData
()"
>
<i
class=
"ri-add-line"
></i>
<i
class=
"ri-add-line"
></i>
Add
Add
</button>
</button>
</div>
</div>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-danger h-20px m-0 shadow-md"
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-danger h-20px m-0 shadow-md"
data-hs-overlay=
"#employee-group-unit-component-
alert-delete-checkbox-modal"
(
click
)="
selectEmp_group
()"
>
data-hs-overlay=
"#employee-group-unit-component-
page-alert-modal"
(
click
)="
modalStatus=
'deleteGroup'
;
setData
()"
>
<i
class=
"ri-delete-bin-6-line"
></i>
<i
class=
"ri-delete-bin-6-line"
></i>
Delete
Delete
</button>
</button>
...
@@ -58,7 +58,7 @@
...
@@ -58,7 +58,7 @@
<th
scope=
"col"
class=
"relative px-10px py-10px bg-soft-secondary text-primary !text-center"
>
<th
scope=
"col"
class=
"relative px-10px py-10px bg-soft-secondary text-primary !text-center"
>
<span
class=
"font-size-12px font-weight-700"
>
<span
class=
"font-size-12px font-weight-700"
>
<ng-container
*
ngIf=
"i === 0"
>
<ng-container
*
ngIf=
"i === 0"
>
<input
type=
"checkbox"
class=
"ti-form-checkbox cursor-pointer"
(
change
)="
toggleSelectAll
($
event
)"
style=
"margin-right: 10px;"
>
<input
type=
"checkbox"
class=
"ti-form-checkbox cursor-pointer"
(
change
)="
toggleSelectAll
($
event
)"
style=
"margin-right: 10px;"
>
</ng-container>
</ng-container>
</span>
</span>
<span
class=
"font-size-12px font-weight-700"
>
{{ item }}
</span>
<span
class=
"font-size-12px font-weight-700"
>
{{ item }}
</span>
...
@@ -69,28 +69,38 @@
...
@@ -69,28 +69,38 @@
</ng-container>
</ng-container>
</tr>
</tr>
</thead>
</thead>
<tbody
*
ngIf=
"!emp_groupListFilter().length"
>
<tbody
*
ngIf=
"dataLoading"
>
<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=
"!dataLoading&&!emp_groupListFilter().length"
>
<tr>
<tr>
<td
class=
"text-center"
colspan=
"100%"
>
<td
class=
"text-center"
colspan=
"100%"
>
ไม่พบข้อมูล
ไม่พบข้อมูล
</td>
</td>
</tr>
</tr>
</tbody>
</tbody>
<tbody
*
ngIf=
"emp_groupListFilter().length"
>
<tbody
*
ngIf=
"
!dataLoading&&
emp_groupListFilter().length"
>
<tr
<tr
*
ngFor=
"let item of emp_groupListFilter() | slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index"
>
*
ngFor=
"let item of emp_groupListFilter() | slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index"
>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<input
type=
"checkbox"
class=
"ti-form-checkbox cursor-pointer"
id=
"checkbox-{{item.groupId}}"
[
checked
]="
selectedItems
.
includes
(
item
.
groupId
)"
<input
*
ngIf=
"item.data.groupId!='100'"
type=
"checkbox"
class=
"ti-form-checkbox cursor-pointer"
id=
"checkbox-{{item.data.groupId}}"
[(
ngModel
)]="
item
.
check
"
>
(
change
)="
toggleSelection
(
item
.
groupId
,
$
event
)"
>
<label
for=
"checkbox-{{item.data.groupId}}"
>
{{item.data.groupId}}
</label>
<label
for=
"checkbox-{{item.groupId}}"
>
{{item.groupId}}
</label>
</td>
</td>
<td>
{{item.tdesc}}
</td>
<td>
{{item.
data.
tdesc}}
</td>
<td>
{{item.edesc}}
</td>
<td>
{{item.
data.
edesc}}
</td>
<td
class=
"flex justify-center"
>
<td
class=
"flex justify-center"
>
<i
class=
"ti ti-edit cursor-pointer i-gray fs-l px-1"
(
click
)="
selectEmp_group
(
item
)"
<i
class=
"ti ti-edit cursor-pointer i-gray fs-l px-1"
(
click
)="
modalStatus=
'edit'
;
setData
(
item
.
data
)"
data-hs-overlay=
"#employee-group-unit-component-modal-edit"
></i>
data-hs-overlay=
"#employee-group-unit-component-page-modal"
></i>
<i
class=
"ti ti-trash cursor-pointer i-gray fs-l px-1"
(
click
)="
selectEmp_group
(
item
)"
<i
class=
"ti ti-trash cursor-pointer i-gray fs-l px-1"
*
ngIf=
"item.data.groupId!='100'"
data-hs-overlay=
"#employee-group-unit-component-alert-delete-modal"
></i>
(
click
)="
modalStatus=
'delete'
;
setData
(
item
.
data
)"
data-hs-overlay=
"#employee-group-unit-component-page-alert-modal"
></i>
</td>
</td>
</tr>
</tr>
</tbody>
</tbody>
...
@@ -127,21 +137,26 @@
...
@@ -127,21 +137,26 @@
</a>
</a>
</li>
</li>
</ul>
</ul>
<ul
class=
"nav-tabs mt-3"
>
<span>
Show {{((currentPage-1) * 10)+1}} to {{emp_groupListFilter().length
<10
?
emp_groupListFilter
().
length:
(
currentPage=
=page.length
?
((
currentPage
*
10
)
-
((
currentPage
*
10
)
-
emp_groupListFilter
().
length
)
)
:
(
currentPage
*
10
)
)
}}
of
{{
emp_groupListFilter
().
length
}}
items
</
span
>
</ul>
</nav>
</nav>
</div>
</div>
<div
id=
"employee-group-unit-component-
modal-add
"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"employee-group-unit-component-
page-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)]"
>
<div
class=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)]"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"ti-modal-header"
>
<div
class=
"ti-modal-header"
>
<h3
class=
"text-xxl font-bold text-primary"
>
<h3
class=
"text-xxl font-bold text-primary"
>
เพิ่มข้อมูลกลุ่มพนักงาน
{{modalStatus=='add'?'เพิ่มข้อมูลกลุ่มพนักงาน':'แก้ไขข้อมูลกลุ่มพนักงาน'}}
</h3>
</h3>
<div
class=
"flex justify-end"
>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#employee-group-unit-component-
modal-add
"
>
data-hs-overlay=
"#employee-group-unit-component-
page-modal
"
>
<span
class=
"sr-only"
>
Close
</span>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</button>
...
@@ -176,150 +191,19 @@
...
@@ -176,150 +191,19 @@
</div>
</div>
<div
class=
"ti-modal-body "
>
<div
class=
"ti-modal-body "
>
<label
for=
"input-label"
class=
"ti-form-label mt-2rem"
>
รหัสกลุ่มพนักงาน
</label>
<label
for=
"input-label"
class=
"ti-form-label mt-2rem"
>
รหัสกลุ่มพนักงาน
</label>
<input
type=
"text"
id=
"input-label"
class=
"ti-form-input w-1/2"
[
(
ngModel
)]="
emp_group
.
groupId
"
>
<input
type=
"text"
id=
"input-label"
class=
"ti-form-input w-1/2"
[
ngClass
]="{'
bg-input-readonly
'
:modalStatus=
='edit'}"
[
readonly
]="
modalStatus=
='edit'"
[(
ngModel
)]="
dataSelect
.
groupId
"
>
<label
for=
"detail_th"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (ไทย)
</label>
<label
for=
"detail_th"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (ไทย)
</label>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input h-16"
[(
ngModel
)]="
emp_group
.
tdesc
"
>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input h-16"
[(
ngModel
)]="
dataSelect
.
tdesc
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (อังกฤษ)
</label>
<label
for=
"detail_eng"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (อังกฤษ)
</label>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input h-16"
[(
ngModel
)]="
emp_group
.
edesc
"
>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input h-16"
[(
ngModel
)]="
dataSelect
.
edesc
"
>
<div
class=
"flex justify-end mt-2rem mb-1rem space-x-2"
>
<div
class=
"flex justify-end mt-2rem mb-1rem space-x-2"
>
<button
type=
"button"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#employee-group-unit-component-modal-add"
>
data-hs-overlay=
"#employee-group-unit-component-page-modal"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#employee-group-unit-component-alert-modal"
>
บันทึกข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
<div
id=
"employee-group-unit-component-modal-edit"
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)]"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"ti-modal-header"
>
<h3
class=
"text-xxl font-bold text-primary"
>
แก้ไขข้อมูลกลุ่มพนักงาน
</h3>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#employee-group-unit-component-modal-edit"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</div>
</div>
<div
class=
"ti-modal-center"
>
<div
class=
"flex justify-end"
style=
"padding-right: 1rem;"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md"
>
<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"
transform=
"rotate(45)matrix(-1, 0, 0, 1, 0, 0)"
>
<g
id=
"SVGRepo_bgCarrier"
stroke-width=
"0"
></g>
<g
id=
"SVGRepo_tracerCarrier"
stroke-linecap=
"round"
stroke-linejoin=
"round"
></g>
<g
id=
"SVGRepo_iconCarrier"
>
<path
d=
"M15 49A24 24 0 0 1 32 8"
></path>
<path
d=
"M49 15a24 24 0 0 1-17 41"
></path>
<polyline
points=
"15.03 40 15.03 48.97 8 48.97"
></polyline>
<polyline
points=
"48.97 24 48.97 15.03 56 15.03"
></polyline>
</g>
</svg>
Clear
</button>
</div>
<div
class=
"px-1"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-warning h-45px m-0 shadow-md"
>
<i
class=
"ti ti-book fs-l"
></i>
Help
</button>
</div>
</div>
</div>
<div
class=
"ti-modal-body "
>
<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
[(
ngModel
)]="
emp_group
.
groupId
"
>
<label
for=
"detail_th"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (ไทย)
</label>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input h-16"
[(
ngModel
)]="
emp_group
.
tdesc
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (อังกฤษ)
</label>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input h-16"
[(
ngModel
)]="
emp_group
.
edesc
"
>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#employee-group-unit-component-modal-edit"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#employee-group-unit-component-alert-edit-modal"
>
บันทึกข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
<div
id=
"employee-group-unit-component-modal-upload"
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)]"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content-upload"
>
<div
class=
"modal-headerupload bg-primary"
>
<h5
class=
"text-xxl font-bold text-white"
>
นำเข้าข้อมูลบริษัท
</h5>
</div>
<h1
class=
"mt-2"
style=
"text-align: center;"
>
ไฟล์
</h1>
<div
class=
"mt-2"
style=
"margin-left: 10px;"
>
<div
class=
"flex rounded-md"
>
<input
type=
"text"
id=
"hs-trailing-button-add-on-with-icon"
name=
"hs-trailing-button-add-on-with-icon"
class=
"ti-form-input rounded-none ltr:rounded-l-md rtl:rounded-r-md focus:z-10"
>
<button
aria-label=
"button"
type=
"button"
class=
"inline-flex flex-shrink-0 justify-center items-center h-[2.875rem] w-[2.875rem] ltr:rounded-r-md rtl:rounded-l-md border border-transparent font-semibold bg-primary text-white hover:bg-primary focus:z-10 focus:outline-none focus:ring-0 focus:ring-primary transition-all text-sm"
>
<i
class=
"ti ti-upload"
></i>
</button>
</div>
<div
class=
"flex justify-center mt-2rem mb-1rem space-x-4"
>
<a
class=
"ti-btn ti-btn-primary"
href=
"javascript:void(0);"
>
อัปโหลด
</a>
</div>
</div>
</div>
</div>
</div>
<div
id=
"employee-group-unit-component-alert-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"
>
<div
class=
"ti-modal-header"
>
<h3
class=
"text-xxl font-bold text-primary"
>
แจ้งเตือน
</h3>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#employee-group-unit-component-alert-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</div>
</div>
<div
class=
"ti-modal-body "
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
ยืนยันการบันทึกข้อมูลหรือไม่
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#employee-group-unit-component-modal-add"
>
ย้อนกลับ
ย้อนกลับ
</button>
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#employee-group-unit-component-
alert-modal"
(
click
)="
addEmp_group
()
"
>
data-hs-overlay=
"#employee-group-unit-component-
page-alert-modal
"
>
บันทึกข้อมูล
บันทึกข้อมูล
</a>
</a>
</div>
</div>
...
@@ -328,7 +212,7 @@
...
@@ -328,7 +212,7 @@
</div>
</div>
</div>
</div>
<div
id=
"employee-group-unit-component-
alert-edi
t-modal"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"employee-group-unit-component-
page-aler
t-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=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] flex items-center"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<div
class=
"ti-modal-header"
>
<div
class=
"ti-modal-header"
>
...
@@ -336,100 +220,85 @@
...
@@ -336,100 +220,85 @@
แจ้งเตือน
แจ้งเตือน
</h3>
</h3>
<div
class=
"flex justify-end"
>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
data-hs-overlay=
"#employee-group-unit-component-alert-modal"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<span
class=
"sr-only"
>
Close
</span>
data-hs-overlay=
"#employee-group-unit-component-page-alert-modal"
>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<span
class=
"sr-only"
>
Close
</span>
</button>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</ng-container>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#employee-group-unit-component-page-alert-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</ng-container>
</div>
</div>
</div>
</div>
<div
class=
"ti-modal-body "
>
<div
class=
"ti-modal-body "
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
ยืนยันการเเก้ไขข้อมูลหรือไม่
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
ยืนยันการบันทึกข้อมูลหรือไม่
</ng-container>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
ยืนยันการลบข้อมูลหรือไม่
</ng-container>
</p>
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
<button
type=
"button"
data-hs-overlay=
"#employee-group-unit-component-modal-edit"
>
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
ย้อนกลับ
data-hs-overlay=
"#employee-group-unit-component-page-modal"
>
</button>
ย้อนกลับ
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
</button>
data-hs-overlay=
"#employee-group-unit-component-alert-edit-modal"
(
click
)="
addEmp_group
()"
>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
บันทึกข้อมูล
data-hs-overlay=
"#employee-group-unit-component-page-alert-modal"
(
click
)="
addEmp_group
()"
>
</a>
บันทึกข้อมูล
</a>
</ng-container>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#employee-group-unit-component-page-alert-modal"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-danger"
href=
"javascript:void(0);"
data-hs-overlay=
"#employee-group-unit-component-page-alert-modal"
(
click
)="
deleteEmp_group
()"
>
ลบข้อมูล
</a>
</ng-container>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"employee-group-unit-component-alert-delete-modal"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"employee-group-unit-component-upload-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=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] rounded-md"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<div
class=
"ti-modal-header bg-primary !rounded-none !rounded-t-sm"
>
<div
class=
"ti-modal-header"
>
<h5
class=
"text-xxl font-bold text-white"
>
<h3
class=
"text-xxl font-bold text-primary"
>
นำเข้าฝ่าย
แจ้งเตือน
</h5>
</h3>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#employee-group-unit-component-alert-delete-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</div>
</div>
<div
class=
"ti-modal-body "
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
ยืนยันการลบข้อมูลหรือไม่
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#employee-group-unit-component-alert-delete-modal"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-danger"
href=
"javascript:void(0);"
data-hs-overlay=
"#employee-group-unit-component-alert-delete-modal"
(
click
)="
deleteEmp_group
()"
>
ลบข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
<div
class=
"ti-modal-body max-h-full overflow-hidden ti-modal-content !rounded-t-none !rounded-b-sm"
>
</div>
<h1
class=
"mt-2"
style=
"text-align: center;"
>
ไฟล์
</h1>
<div
class=
"mt-2 p-2"
>
<div
id=
"employee-group-unit-component-alert-delete-checkbox-modal"
class=
"hs-overlay hidden ti-modal"
>
<div
class=
"flex rounded-md"
>
<div
class=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] flex items-center"
>
<input
#
fileInput
type=
"file"
(
change
)="
onFileSelected
($
event
)"
hidden
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<input
type=
"text"
[
value
]="
selectedFileName
"
readonly
(
click
)="
fileInput
.
click
()"
<div
class=
"ti-modal-header"
>
class=
"ti-form-input rounded-none ltr:rounded-l-md rtl:rounded-r-md focus:z-10 cursor-pointer"
>
<h3
class=
"text-xxl font-bold text-primary"
>
<button
type=
"button"
(
click
)="
fileInput
.
click
()"
แจ้งเตือน
class=
"inline-flex flex-shrink-0 justify-center items-center h-[2.875rem] w-[2.875rem] ltr:rounded-r-md rtl:rounded-l-md border border-transparent font-semibold bg-secondary text-white hover:bg-secondary focus:z-10 focus:outline-none focus:ring-0 focus:ring-secondary transition-all text-sm"
>
</h3>
<i
class=
"ti ti-upload"
></i>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#employee-group-unit-component-alert-delete-checkbox-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</button>
</div>
</div>
</div>
<div
class=
"flex justify-center mt-2rem mb-1rem space-x-4"
>
<div
class=
"ti-modal-body "
>
<button
type=
"submit"
class=
"ti-btn ti-btn-secondary"
(
click
)="
uploadFile
()"
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
[
disabled
]="!
selectedFile
"
>
ยืนยันการลบข้อมูลหรือไม่
อัปโหลด
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#employee-group-unit-component-alert-delete-checkbox-modal"
>
ย้อนกลับ
</button>
</button>
<a
class=
"ti-btn ti-btn-danger"
href=
"javascript:void(0);"
data-hs-overlay=
"#employee-group-unit-component-alert-delete-checkbox-modal"
(
click
)="
deleteSelectedItems
()"
>
ลบข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
</div>
...
...
src/app/components/company-components/job-description/employee-group-unit/employee-group-unit.component.ts
View file @
cd558547
...
@@ -2,6 +2,14 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } fro
...
@@ -2,6 +2,14 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } fro
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
EmpGroupModel
,
MyEmpGroupModel
}
from
'src/app/shared/model/emp-group.model'
;
import
{
EmpGroupModel
,
MyEmpGroupModel
}
from
'src/app/shared/model/emp-group.model'
;
import
{
EmpGroupService
}
from
'src/app/shared/services/emp-group.service'
;
import
{
EmpGroupService
}
from
'src/app/shared/services/emp-group.service'
;
import
{
FileService
}
from
'src/app/shared/services/file.service'
;
export
interface
DataModel
{
groupId
:
string
tdesc
:
string
edesc
:
string
companyId
:
string
checked
:
boolean
}
@
Component
({
@
Component
({
selector
:
'app-employee-group-unit'
,
selector
:
'app-employee-group-unit'
,
...
@@ -13,78 +21,92 @@ export class EmployeeGroupUnit implements OnInit {
...
@@ -13,78 +21,92 @@ export class EmployeeGroupUnit implements OnInit {
@
Output
()
sendPathTitle
:
EventEmitter
<
string
[]
>
=
new
EventEmitter
<
string
[]
>
();
@
Output
()
sendPathTitle
:
EventEmitter
<
string
[]
>
=
new
EventEmitter
<
string
[]
>
();
activeTab
:
string
=
'tab1'
;
// กำหนด tab เริ่มต้น
activeTab
:
string
=
'tab1'
;
// กำหนด tab เริ่มต้น
// ฟังก์ชันในการเปลี่ยนแท็บ
changeTab
(
tab
:
{
id
:
string
,
text
:
string
})
{
this
.
sendPathTitle
.
emit
([
'การจัดการข้อมูลองค์กร'
,
'ข้อมูลลักษณะงาน'
,
tab
.
text
])
this
.
activeTab
=
tab
.
id
;
}
currentPage
=
1
currentPage
=
1
selectedItems
:
string
[]
=
[];
selectedItems
:
string
[]
=
[];
modalStatus
=
'add'
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
emp_groupList
:
EmpGroupModel
[]
=
[]
dataLoading
=
false
dataSelect
:
DataModel
=
{
groupId
:
""
,
tdesc
:
""
,
edesc
:
""
,
companyId
:
""
,
checked
:
false
}
emp_groupList
:
{
check
:
boolean
;
data
:
DataModel
&
{
checked
?:
boolean
}
}[]
=
[]
emp_group
:
EmpGroupModel
=
new
MyEmpGroupModel
({})
emp_group
:
EmpGroupModel
=
new
MyEmpGroupModel
({})
search
=
""
search
=
""
selectedFile
:
File
|
null
=
null
;
selectedFileName
:
string
=
'กรุณาเลือกไฟล์'
;
constructor
(
private
empGroupService
:
EmpGroupService
,
constructor
(
private
empGroupService
:
EmpGroupService
,
private
toastr
:
ToastrService
,
private
toastr
:
ToastrService
,
private
cdr
:
ChangeDetectorRef
private
cdr
:
ChangeDetectorRef
,
private
fileService
:
FileService
)
{
}
)
{
}
// ฟังก์ชันในการเปลี่ยนแท็บ
changeTab
(
tab
:
{
id
:
string
,
text
:
string
})
{
this
.
sendPathTitle
.
emit
([
'การจัดการข้อมูลองค์กร'
,
'ข้อมูลลักษณะงาน'
,
tab
.
text
])
this
.
activeTab
=
tab
.
id
;
}
ngOnInit
():
void
{
ngOnInit
():
void
{
this
.
getEmpGroupList
()
this
.
getEmpGroupList
()
}
}
modalOptions
:
{
onFileSelected
(
event
:
any
)
{
[
nameModal
:
string
]:
{
// ชื่อตรวจสอบการเปิดปิด
this
.
selectedFile
=
event
.
target
.
files
.
length
>
0
?
event
.
target
.
files
[
0
]
:
null
;
isModalOpen
:
boolean
;
// เปิด/ปิด
this
.
selectedFileName
=
this
.
selectedFile
?.
name
||
"กรุณาเลือกไฟล์"
modalSize
:
string
;
// ขนาดของ Modal (s,m,l,vw10-vw100 )
backdropClose
:
boolean
;
// (คลิก Backdrop แล้ว true ปิด false ไม่ปิด )
}
}
=
{
"add"
:
{
isModalOpen
:
false
,
modalSize
:
'm'
,
backdropClose
:
true
,
},
"edit"
:
{
isModalOpen
:
false
,
modalSize
:
'm'
,
backdropClose
:
true
,
},
"upload"
:
{
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
;
document
.
body
.
style
.
overflow
=
'hidden'
;
// ล็อก Scroll
}
}
closeModal
(
name
:
string
)
{
uploadFile
()
{
this
.
modalOptions
[
name
].
isModalOpen
=
false
;
if
(
!
this
.
selectedFile
)
{
// ตรวจสอบว่ามี Modal อื่นเปิดอยู่หรือไม่
alert
(
'กรุณาเลือกไฟล์ก่อนอัปโหลด'
)
if
(
!
this
.
isAnyModalOpen
())
{
return
document
.
body
.
style
.
overflow
=
''
;
// คืนค่าการ Scroll เฉพาะเมื่อ Modal ทั้งหมดปิดแล้ว
}
}
const
formData
=
new
FormData
();
formData
.
append
(
'file'
,
this
.
selectedFile
);
this
.
fileService
.
upload
(
formData
,
'mgroup'
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
getEmpGroupList
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
})
}
}
isAnyModalOpen
():
boolean
{
downloadFile
()
{
// Logic ตรวจสอบว่า Modal อื่นยังเปิดอยู่หรือไม่
const
fileName
=
'IMPORT_MGROUP.xlsx'
return
Object
.
values
(
this
.
modalOptions
).
some
(
modal
=>
modal
.
isModalOpen
);
// หากไม่มี Modal อื่นเปิด
this
.
fileService
.
download
(
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
);
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
})
}
}
getEmpGroupList
()
{
getEmpGroupList
()
{
this
.
empGroupService
.
getList
().
subscribe
(
response
=>
{
this
.
dataLoading
=
true
this
.
emp_groupList
=
response
this
.
empGroupService
.
getList
().
subscribe
({
this
.
searchChange
()
next
:
response
=>
{
this
.
cdr
.
detectChanges
()
this
.
emp_groupList
=
response
.
map
(
x
=>
({
check
:
false
,
data
:
{
groupId
:
x
.
groupId
,
tdesc
:
x
.
tdesc
,
edesc
:
x
.
edesc
,
companyId
:
x
.
companyId
,
checked
:
false
}
}))
this
.
dataLoading
=
false
this
.
searchChange
()
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
this
.
dataLoading
=
false
console
.
error
(
'Error fetching employee types:'
,
error
);
this
.
cdr
.
detectChanges
()
}
})
})
}
}
searchChange
()
{
searchChange
()
{
...
@@ -92,84 +114,73 @@ export class EmployeeGroupUnit implements OnInit {
...
@@ -92,84 +114,73 @@ export class EmployeeGroupUnit implements OnInit {
this
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
emp_groupListFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
emp_groupListFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
emp_groupListFilter
()
{
emp_groupListFilter
()
{
return
this
.
emp_groupList
.
filter
(
x
=>
x
.
groupId
.
includes
(
this
.
search
)
||
return
this
.
emp_groupList
.
filter
(
x
=>
{
x
.
tdesc
.
includes
(
this
.
search
)
||
const
data
=
x
.
data
x
.
edesc
.
includes
(
this
.
search
))
const
match
=
data
.
groupId
.
toLowerCase
().
includes
(
this
.
search
)
||
data
.
tdesc
.
toLowerCase
().
includes
(
this
.
search
)
||
data
.
edesc
.
toLowerCase
().
includes
(
this
.
search
);
}
return
match
;
selectEmp_group
(
emp_group
?:
EmpGroupModel
)
{
this
.
emp_group
=
new
MyEmpGroupModel
(
emp_group
||
{})
}
showSuccess
()
{
this
.
toastr
.
success
(
'บันทึกข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
timeOut
:
3000
,
positionClass
:
'toast-top-right'
,
});
});
}
}
showSuccesssEdit
()
{
setData
(
data
?:
DataModel
)
{
this
.
toastr
.
success
(
'เเก้ไขข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
this
.
dataSelect
=
JSON
.
parse
(
JSON
.
stringify
(
data
||
{
groupId
:
""
,
tdesc
:
""
,
edesc
:
""
,
companyId
:
""
}));
timeOut
:
3000
,
positionClass
:
'toast-top-right'
,
});
}
showSuccessDelete
()
{
this
.
toastr
.
success
(
'ลบข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
timeOut
:
3000
,
positionClass
:
'toast-top-right'
,
});
}
}
addEmp_group
()
{
addEmp_group
()
{
this
.
empGroupService
.
post
(
this
.
emp_group
).
subscribe
((
response
:
any
)
=>
{
const
body
=
new
MyEmpGroupModel
({
groupId
:
this
.
dataSelect
.
groupId
,
tdesc
:
this
.
dataSelect
.
tdesc
,
edesc
:
this
.
dataSelect
.
edesc
,
companyId
:
this
.
dataSelect
.
companyId
})
if
(
response
.
success
)
{
this
.
empGroupService
.
post
(
body
).
subscribe
({
this
.
getEmpGroupList
()
next
:
response
=>
{
this
.
showSuccess
()
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
getEmpGroupList
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
}
})
})
}
}
deleteEmp_group
()
{
deleteEmp_group
()
{
this
.
empGroupService
.
delete
(
this
.
emp_group
).
subscribe
((
response
:
any
)
=>
{
let
body
:
EmpGroupModel
|
EmpGroupModel
[]
=
[];
if
(
response
.
success
)
{
this
.
getEmpGroupList
()
if
(
this
.
dataSelect
.
groupId
)
{
this
.
showSuccessDelete
()
body
=
new
MyEmpGroupModel
({
groupId
:
this
.
dataSelect
.
groupId
,
tdesc
:
this
.
dataSelect
.
tdesc
,
edesc
:
this
.
dataSelect
.
edesc
,
companyId
:
this
.
dataSelect
.
companyId
});
}
})
}
toggleSelection
(
groupId
:
string
,
event
:
Event
)
{
const
checked
=
(
event
.
target
as
HTMLInputElement
).
checked
;
if
(
checked
)
{
this
.
selectedItems
.
push
(
groupId
);
}
else
{
}
else
{
this
.
selectedItems
=
this
.
selectedItems
.
filter
(
id
=>
id
!==
groupId
);
body
=
this
.
emp_groupList
.
filter
(
x
=>
x
.
check
).
map
(
x
=>
new
MyEmpGroupModel
({
groupId
:
x
.
data
.
groupId
,
tdesc
:
x
.
data
.
tdesc
,
edesc
:
x
.
data
.
edesc
,
companyId
:
x
.
data
.
companyId
})
);
}
}
this
.
empGroupService
.
delete
(
body
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
);
this
.
getEmpGroupList
();
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
);
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
});
}
}
toggleSelectAll
(
event
:
Event
)
{
toggleSelectAll
(
event
:
Event
)
{
const
checked
=
(
event
.
target
as
HTMLInputElement
).
checked
;
const
checked
=
(
event
.
target
as
HTMLInputElement
).
checked
;
if
(
checked
)
{
this
.
selectedItems
=
this
.
emp_groupListFilter
().
map
(
item
=>
item
.
groupId
);
this
.
emp_groupList
.
forEach
(
item
=>
{
}
else
{
item
.
check
=
checked
;
// อัปเดตค่า check ใน emp_groupList
this
.
selectedItems
=
[];
}
}
deleteSelectedItems
()
{
if
(
this
.
selectedItems
.
length
===
0
)
{
alert
(
"เลือกข้อมูลก่อนลบ"
);
return
;
}
const
selectedGroups
=
this
.
emp_groupListFilter
().
filter
(
item
=>
this
.
selectedItems
.
includes
(
item
.
groupId
));
this
.
empGroupService
.
delete
(
selectedGroups
).
subscribe
({
next
:
(
response
)
=>
{
console
.
log
(
"ลบสำเร็จ"
,
response
);
this
.
selectedItems
=
[];
this
.
getEmpGroupList
();
this
.
showSuccessDelete
()
},
error
:
(
error
)
=>
{
console
.
error
(
"เกิดข้อผิดพลาดในการลบ"
,
error
);
}
});
});
// อัปเดตรายการ selectedItems ด้วย groupId ของรายการที่ถูกเลือก
this
.
selectedItems
=
checked
?
this
.
emp_groupList
.
map
(
item
=>
item
.
data
.
groupId
)
:
[];
this
.
cdr
.
detectChanges
();
// แจ้ง Angular ให้รีเฟรช UI
}
}
showAlert
(
text
:
string
,
type
:
'success'
|
'error'
)
{
this
.
toastr
[
type
](
text
,
'แจ้งเตือน'
,
{
timeOut
:
3000
,
positionClass
:
'toast-top-right'
,
})
}
}
}
src/app/components/company-components/job-description/employee-level/employee-level.component.html
View file @
cd558547
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
นำเข้าข้อมูล
นำเข้าข้อมูล
</button>
</button>
<a
class=
"mx-2 justify-center -mb-px inline-flex items-center gap-2 font-weight-500 font-size-12px text-center text-secondary border-secondary border-b-2 align-items-end"
<a
class=
"mx-2 justify-center -mb-px inline-flex items-center gap-2 font-weight-500 font-size-12px text-center text-secondary border-secondary border-b-2 align-items-end"
href=
"javascript:void(0);"
>
href=
"javascript:void(0);"
(
click
)="
downloadFile
()"
>
ดาวน์โหลดตัวอย่างไฟล์
ดาวน์โหลดตัวอย่างไฟล์
</a>
</a>
</div>
</div>
...
@@ -210,31 +210,33 @@
...
@@ -210,31 +210,33 @@
</div>
</div>
</div>
</div>
<div
id=
"employee-level-modal-upload"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"employee-level-upload-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)]"
>
<div
class=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] rounded-md"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content h-96"
>
<div
class=
"ti-modal-header bg-primary !rounded-none !rounded-t-sm"
>
<div
class=
"ti-modal-header bg-primary"
>
<h5
class=
"text-xxl font-bold text-white"
>
<h5
class=
"text-xxl font-bold text-white"
>
นำเข้าฝ่าย
นำเข้าข้อมูลบริษัท
</h5>
</h5>
</div>
</div>
<h1
class=
"mt-2"
style=
"text-align: center;"
>
ไฟล์
</h1>
<div
class=
"ti-modal-body max-h-full overflow-hidden ti-modal-content !rounded-t-none !rounded-b-sm"
>
<div
class=
"mt-2 px-2"
>
<h1
class=
"mt-2"
style=
"text-align: center;"
>
ไฟล์
</h1>
<div
class=
"flex rounded-md"
>
<div
class=
"mt-2 p-2"
>
<input
type=
"text"
id=
"hs-trailing-button-add-on-with-icon"
name=
"hs-trailing-button-add-on-with-icon"
<div
class=
"flex rounded-md"
>
class=
"ti-form-input rounded-none ltr:rounded-l-md rtl:rounded-r-md focus:z-10"
>
<input
#
fileInput
type=
"file"
(
change
)="
onFileSelected
($
event
)"
hidden
>
<button
aria-label=
"button"
type=
"button"
<input
type=
"text"
[
value
]="
selectedFileName
"
readonly
(
click
)="
fileInput
.
click
()"
class=
"inline-flex flex-shrink-0 justify-center items-center h-[2.875rem] w-[2.875rem] ltr:rounded-r-md rtl:rounded-l-md border border-transparent font-semibold bg-primary text-white hover:bg-primary focus:z-10 focus:outline-none focus:ring-0 focus:ring-primary transition-all text-sm"
>
class=
"ti-form-input rounded-none ltr:rounded-l-md rtl:rounded-r-md focus:z-10 cursor-pointer"
>
<i
class=
"ti ti-upload"
></i>
<button
type=
"button"
(
click
)="
fileInput
.
click
()"
</button>
class=
"inline-flex flex-shrink-0 justify-center items-center h-[2.875rem] w-[2.875rem] ltr:rounded-r-md rtl:rounded-l-md border border-transparent font-semibold bg-secondary text-white hover:bg-secondary focus:z-10 focus:outline-none focus:ring-0 focus:ring-secondary transition-all text-sm"
>
</div>
<i
class=
"ti ti-upload"
></i>
<div
class=
"flex justify-center mt-2rem mb-1rem space-x-4"
>
</button>
<a
class=
"ti-btn ti-btn-primary"
href=
"javascript:void(0);"
>
</div>
อัปโหลด
<div
class=
"flex justify-center mt-2rem mb-1rem space-x-4"
>
</a>
<button
type=
"submit"
class=
"ti-btn ti-btn-secondary"
(
click
)="
uploadFile
()"
</div>
[
disabled
]="!
selectedFile
"
>
อัปโหลด
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -248,7 +250,7 @@
...
@@ -248,7 +250,7 @@
<div
class=
"flex justify-end"
>
<div
class=
"flex justify-end"
>
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#employee-level-page-modal"
>
data-hs-overlay=
"#employee-level-page-
alert-
modal"
>
<span
class=
"sr-only"
>
Close
</span>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</button>
...
...
src/app/components/company-components/job-description/employee-level/employee-level.component.ts
View file @
cd558547
import
{
ChangeDetectorRef
,
Component
,
EventEmitter
,
Input
,
OnInit
,
Output
}
from
'@angular/core'
;
import
{
ChangeDetectorRef
,
Component
,
EventEmitter
,
Input
,
OnInit
,
Output
}
from
'@angular/core'
;
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
MyPLModel
,
PLModel
}
from
'src/app/shared/model/pl.model'
;
import
{
MyPLModel
,
PLModel
}
from
'src/app/shared/model/pl.model'
;
import
{
FileService
}
from
'src/app/shared/services/file.service'
;
import
{
PLService
}
from
'src/app/shared/services/pl.service'
;
import
{
PLService
}
from
'src/app/shared/services/pl.service'
;
export
interface
DataModel
{
export
interface
DataModel
{
plId
:
string
plId
:
string
...
@@ -34,24 +35,76 @@ export class EmployeeLevel implements OnInit {
...
@@ -34,24 +35,76 @@ export class EmployeeLevel implements OnInit {
dataSelect
:
DataModel
=
{
plId
:
""
,
tdesc
:
""
,
edesc
:
""
,
companyId
:
""
}
dataSelect
:
DataModel
=
{
plId
:
""
,
tdesc
:
""
,
edesc
:
""
,
companyId
:
""
}
itemToDelete
:
PLModel
|
null
=
null
;
itemToDelete
:
PLModel
|
null
=
null
;
selectedFile
:
File
|
null
=
null
;
selectedFileName
:
string
=
'กรุณาเลือกไฟล์'
;
constructor
(
private
plService
:
PLService
,
constructor
(
private
plService
:
PLService
,
private
toastr
:
ToastrService
,
private
toastr
:
ToastrService
,
private
cdr
:
ChangeDetectorRef
private
cdr
:
ChangeDetectorRef
,
private
fileService
:
FileService
)
{
}
)
{
}
ngOnInit
():
void
{
ngOnInit
():
void
{
this
.
getPLList
()
this
.
getPLList
()
}
}
onFileSelected
(
event
:
any
)
{
this
.
selectedFile
=
event
.
target
.
files
.
length
>
0
?
event
.
target
.
files
[
0
]
:
null
;
this
.
selectedFileName
=
this
.
selectedFile
?.
name
||
"กรุณาเลือกไฟล์"
}
uploadFile
()
{
if
(
!
this
.
selectedFile
)
{
alert
(
'กรุณาเลือกไฟล์ก่อนอัปโหลด'
)
return
}
const
formData
=
new
FormData
();
formData
.
append
(
'file'
,
this
.
selectedFile
);
this
.
fileService
.
upload
(
formData
,
'pl'
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
getPLList
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
})
}
downloadFile
()
{
const
fileName
=
'IMPORT_PL.xlsx'
this
.
fileService
.
download
(
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
);
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
})
}
getPLList
()
{
getPLList
()
{
this
.
dataLoading
=
true
this
.
plService
.
getList
().
subscribe
({
this
.
plService
.
getList
().
subscribe
({
next
:
response
=>
{
next
:
response
=>
{
this
.
plList
=
response
.
map
(
x
=>
({
check
:
false
,
data
:
{
plId
:
x
.
plId
,
tdesc
:
x
.
tdesc
,
edesc
:
x
.
edesc
,
companyId
:
x
.
companyId
}
}))
this
.
plList
=
response
.
map
(
x
=>
({
check
:
false
,
data
:
{
plId
:
x
.
plId
,
tdesc
:
x
.
tdesc
,
edesc
:
x
.
edesc
,
companyId
:
x
.
companyId
}
}))
this
.
dataLoading
=
false
this
.
searchChange
();
this
.
searchChange
();
this
.
cdr
.
detectChanges
();
this
.
cdr
.
detectChanges
();
},
},
error
:
error
=>
{
error
:
err
=>
{
this
.
dataLoading
=
false
console
.
error
(
'Error fetching employee types:'
,
err
);
console
.
error
(
'Error fetching employee types:'
,
error
);
this
.
cdr
.
detectChanges
()
}
}
});
});
}
}
...
@@ -64,7 +117,7 @@ export class EmployeeLevel implements OnInit {
...
@@ -64,7 +117,7 @@ export class EmployeeLevel implements OnInit {
plListFilter
()
{
plListFilter
()
{
return
this
.
plList
.
filter
(
x
=>
{
return
this
.
plList
.
filter
(
x
=>
{
const
data
=
x
.
data
const
data
=
x
.
data
const
match
=
data
.
plId
.
includes
(
this
.
search
)
||
data
.
tdesc
.
includes
(
this
.
search
)
||
data
.
edesc
.
includes
(
this
.
search
);
const
match
=
data
.
plId
.
toLowerCase
().
includes
(
this
.
search
)
||
data
.
tdesc
.
toLowerCase
().
includes
(
this
.
search
)
||
data
.
edesc
.
toLowerCase
()
.
includes
(
this
.
search
);
return
match
;
return
match
;
});
});
}
}
...
...
src/app/components/company-components/job-description/position/position-unit.component.html
View file @
cd558547
...
@@ -3,12 +3,12 @@
...
@@ -3,12 +3,12 @@
<div
class=
"flex pr-2"
>
<div
class=
"flex pr-2"
>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
data-hs-overlay=
"#
company-registration-page
-upload-modal"
>
data-hs-overlay=
"#
position-unit-component
-upload-modal"
>
<i
class=
"ri-add-line"
></i>
<i
class=
"ri-add-line"
></i>
นำเข้าข้อมูล
นำเข้าข้อมูล
</button>
</button>
<a
class=
"mx-2 justify-center -mb-px inline-flex items-center gap-2 font-weight-500 font-size-12px text-center text-secondary border-secondary border-b-2 align-items-end"
<a
class=
"mx-2 justify-center -mb-px inline-flex items-center gap-2 font-weight-500 font-size-12px text-center text-secondary border-secondary border-b-2 align-items-end"
href=
"javascript:void(0);"
>
href=
"javascript:void(0);"
(
click
)="
downloadFile
()"
>
ดาวน์โหลดตัวอย่างไฟล์
ดาวน์โหลดตัวอย่างไฟล์
</a>
</a>
</div>
</div>
...
@@ -27,14 +27,14 @@
...
@@ -27,14 +27,14 @@
</div>
</div>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
data-hs-overlay=
"#position-unit-component-
modal-add"
(
click
)="
selectPosition
()"
>
data-hs-overlay=
"#position-unit-component-
page-modal"
(
click
)="
modalStatus=
'add'
;
setData
()"
>
<i
class=
"ri-add-line"
></i>
<i
class=
"ri-add-line"
></i>
Add
Add
</button>
</button>
</div>
</div>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-danger h-20px m-0 shadow-md"
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-danger h-20px m-0 shadow-md"
data-hs-overlay=
"#position-unit-component-
alert-delete-check-modal"
(
click
)="
selectPosition
()"
>
data-hs-overlay=
"#position-unit-component-
page-alert-modal"
(
click
)="
modalStatus=
'deleteGroup'
;
setData
()"
>
<i
class=
"ri-delete-bin-6-line"
></i>
<i
class=
"ri-delete-bin-6-line"
></i>
Delete
Delete
</button>
</button>
...
@@ -65,29 +65,39 @@
...
@@ -65,29 +65,39 @@
</ng-container>
</ng-container>
</tr>
</tr>
</thead>
</thead>
<tbody
*
ngIf=
"!positionListFilter().length"
>
<tbody
*
ngIf=
"dataLoading"
>
<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=
"!dataLoading&&!positionListFilter().length"
>
<tr>
<tr>
<td
class=
"text-center"
colspan=
"100%"
>
<td
class=
"text-center"
colspan=
"100%"
>
ไม่พบข้อมูล
ไม่พบข้อมูล
</td>
</td>
</tr>
</tr>
</tbody>
</tbody>
<tbody
*
ngIf=
"positionListFilter().length"
>
<tbody
*
ngIf=
"
!dataLoading&&
positionListFilter().length"
>
<tr
<tr
*
ngFor=
"let item of positionListFilter() | slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index"
>
*
ngFor=
"let item of positionListFilter() | slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index"
>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<input
type=
"checkbox"
class=
"ti-form-checkbox cursor-pointer"
<input
*
ngIf=
"item.data.positionId!='100'"
type=
"checkbox"
class=
"ti-form-checkbox cursor-pointer"
id=
"checkbox-{{item.positionId}}"
[
checked
]="
selectedItems
.
includes
(
item
.
positionId
)"
id=
"checkbox-{{item.data.positionId}}"
[(
ngModel
)]="
item
.
check
"
>
(
change
)="
toggleSelection
(
item
.
positionId
,
$
event
)"
>
<label
for=
"checkbox-{{item.data.positionId}}"
>
{{item.data.positionId}}
</label>
<label
for=
"checkbox-{{item.positionId}}"
>
{{item.positionId}}
</label>
</td>
</td>
<td>
{{item.tdesc}}
</td>
<td>
{{item.
data.
tdesc}}
</td>
<td>
{{item.edesc}}
</td>
<td>
{{item.
data.
edesc}}
</td>
<td
class=
"flex justify-center"
>
<td
class=
"flex justify-center"
>
<i
class=
"ti ti-edit cursor-pointer i-gray fs-l px-1"
(
click
)="
selectPosition
(
item
)"
<i
class=
"ti ti-edit cursor-pointer i-gray fs-l px-1"
(
click
)="
modalStatus=
'edit'
;
setData
(
item
.
data
)"
data-hs-overlay=
"#position-unit-component-modal-edit"
></i>
data-hs-overlay=
"#position-unit-component-page-modal"
></i>
<i
class=
"ti ti-trash cursor-pointer i-gray fs-l px-1"
(
click
)="
selectPosition
(
item
)"
<i
class=
"ti ti-trash cursor-pointer i-gray fs-l px-1"
*
ngIf=
"item.data.positionId!='100'"
data-hs-overlay=
"#position-unit-component-alert-delete-modal"
></i>
(
click
)="
modalStatus=
'delete'
;
setData
(
item
.
data
)"
data-hs-overlay=
"#position-unit-component-page-alert-modal"
></i>
</td>
</td>
</tr>
</tr>
</tbody>
</tbody>
...
@@ -124,20 +134,25 @@
...
@@ -124,20 +134,25 @@
</a>
</a>
</li>
</li>
</ul>
</ul>
<ul
class=
"nav-tabs mt-3"
>
<span>
Show {{((currentPage-1) * 10)+1}} to {{positionListFilter().length
<10
?
positionListFilter
().
length:
(
currentPage=
=page.length
?
((
currentPage
*
10
)
-
((
currentPage
*
10
)
-
positionListFilter
().
length
)
)
:
(
currentPage
*
10
)
)
}}
of
{{
positionListFilter
().
length
}}
items
</
span
>
</ul>
</nav>
</nav>
</div>
</div>
<div
id=
"position-unit-component-
modal-add
"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"position-unit-component-
page-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)]"
>
<div
class=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)]"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"ti-modal-header"
>
<div
class=
"ti-modal-header"
>
<h3
class=
"text-xxl font-bold text-primary"
>
<h3
class=
"text-xxl font-bold text-primary"
>
เพิ่มข้อมูลตำเเหน่ง
{{modalStatus=='add'?'เพิ่มข้อมูลตำเเหน่ง':'แก้ไขข้อมูลตำเเหน่ง'}}
</h3>
</h3>
<div
class=
"flex justify-end"
>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#position-unit-component-
modal-add
"
>
data-hs-overlay=
"#position-unit-component-
page-modal
"
>
<span
class=
"sr-only"
>
Close
</span>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</button>
...
@@ -172,19 +187,19 @@
...
@@ -172,19 +187,19 @@
</div>
</div>
<div
class=
"ti-modal-body "
>
<div
class=
"ti-modal-body "
>
<label
for=
"input-label"
class=
"ti-form-label mt-2rem"
>
รหัสตำเเหน่ง
</label>
<label
for=
"input-label"
class=
"ti-form-label mt-2rem"
>
รหัสตำเเหน่ง
</label>
<input
type=
"text"
id=
"input-label"
class=
"ti-form-input w-1/2 "
[
(
ngModel
)]="
position
.
positionId
"
>
<input
type=
"text"
id=
"input-label"
class=
"ti-form-input w-1/2 "
[
ngClass
]="{'
bg-input-readonly
'
:modalStatus=
='edit'}"
[
readonly
]="
modalStatus=
='edit'"
[(
ngModel
)]="
dataSelect
.
positionId
"
>
<label
for=
"detail_th"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (ไทย)
</label>
<label
for=
"detail_th"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (ไทย)
</label>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input h-16"
[(
ngModel
)]="
position
.
tdesc
"
>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input h-16"
[(
ngModel
)]="
dataSelect
.
tdesc
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (อังกฤษ)
</label>
<label
for=
"detail_eng"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (อังกฤษ)
</label>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input h-16"
[(
ngModel
)]="
position
.
edesc
"
>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input h-16"
[(
ngModel
)]="
dataSelect
.
edesc
"
>
<div
class=
"flex justify-end mt-2rem mb-1rem space-x-2"
>
<div
class=
"flex justify-end mt-2rem mb-1rem space-x-2"
>
<button
type=
"button"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#position-unit-component-
modal-add
"
>
data-hs-overlay=
"#position-unit-component-
page-modal
"
>
ย้อนกลับ
ย้อนกลับ
</button>
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#position-unit-component-alert-modal"
>
data-hs-overlay=
"#position-unit-component-
page-
alert-modal"
>
บันทึกข้อมูล
บันทึกข้อมูล
</a>
</a>
</div>
</div>
...
@@ -193,100 +208,7 @@
...
@@ -193,100 +208,7 @@
</div>
</div>
</div>
</div>
<div
id=
"position-unit-component-modal-edit"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"position-unit-component-page-alert-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)]"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"ti-modal-header"
>
<h3
class=
"text-xxl font-bold text-primary"
>
แก้ไขข้อมูลตำเเหน่ง
</h3>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#position-unit-component-modal-edit"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</div>
</div>
<div
class=
"ti-modal-center"
>
<div
class=
"flex justify-end"
style=
"padding-right: 1rem;"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md"
>
<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"
transform=
"rotate(45)matrix(-1, 0, 0, 1, 0, 0)"
>
<g
id=
"SVGRepo_bgCarrier"
stroke-width=
"0"
></g>
<g
id=
"SVGRepo_tracerCarrier"
stroke-linecap=
"round"
stroke-linejoin=
"round"
></g>
<g
id=
"SVGRepo_iconCarrier"
>
<path
d=
"M15 49A24 24 0 0 1 32 8"
></path>
<path
d=
"M49 15a24 24 0 0 1-17 41"
></path>
<polyline
points=
"15.03 40 15.03 48.97 8 48.97"
></polyline>
<polyline
points=
"48.97 24 48.97 15.03 56 15.03"
></polyline>
</g>
</svg>
Clear
</button>
</div>
<div
class=
"px-1"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-warning h-45px m-0 shadow-md"
>
<i
class=
"ti ti-book fs-l"
></i>
Help
</button>
</div>
</div>
</div>
<div
class=
"ti-modal-body "
>
<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
[(
ngModel
)]="
position
.
positionId
"
>
<label
for=
"detail_th"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (ไทย)
</label>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input h-16"
[(
ngModel
)]="
position
.
tdesc
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-2rem"
>
รายละเอียดฝ่าย (อังกฤษ)
</label>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input h-16"
[(
ngModel
)]="
position
.
edesc
"
>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#position-unit-component-modal-edit"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#position-unit-component-alert-edit-modal"
>
บันทึกข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
<div
id=
"position-unit-component-modal-upload"
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)]"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content-upload"
>
<div
class=
"modal-headerupload bg-primary"
>
<h5
class=
"text-xxl font-bold text-white"
>
นำเข้าข้อมูลบริษัท
</h5>
</div>
<h1
class=
"mt-2"
style=
"text-align: center;"
>
ไฟล์
</h1>
<div
class=
"mt-2"
style=
"margin-left: 10px;"
>
<div
class=
"flex rounded-md"
>
<input
type=
"text"
id=
"hs-trailing-button-add-on-with-icon"
name=
"hs-trailing-button-add-on-with-icon"
class=
"ti-form-input rounded-none ltr:rounded-l-md rtl:rounded-r-md focus:z-10"
>
<button
aria-label=
"button"
type=
"button"
class=
"inline-flex flex-shrink-0 justify-center items-center h-[2.875rem] w-[2.875rem] ltr:rounded-r-md rtl:rounded-l-md border border-transparent font-semibold bg-primary text-white hover:bg-primary focus:z-10 focus:outline-none focus:ring-0 focus:ring-primary transition-all text-sm"
>
<i
class=
"ti ti-upload"
></i>
</button>
</div>
<div
class=
"flex justify-center mt-2rem mb-1rem space-x-4"
>
<a
class=
"ti-btn ti-btn-primary"
href=
"javascript:void(0);"
>
อัปโหลด
</a>
</div>
</div>
</div>
</div>
</div>
<div
id=
"position-unit-component-alert-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=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] flex items-center"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<div
class=
"ti-modal-header"
>
<div
class=
"ti-modal-header"
>
...
@@ -294,137 +216,85 @@
...
@@ -294,137 +216,85 @@
แจ้งเตือน
แจ้งเตือน
</h3>
</h3>
<div
class=
"flex justify-end"
>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
data-hs-overlay=
"#position-unit-component-alert-modal"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<span
class=
"sr-only"
>
Close
</span>
data-hs-overlay=
"#position-unit-component-page-alert-modal"
>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<span
class=
"sr-only"
>
Close
</span>
</button>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</div>
</button>
</div>
</ng-container>
<div
class=
"ti-modal-body "
>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
ยืนยันการบันทึกข้อมูลหรือไม่
data-hs-overlay=
"#position-unit-component-page-alert-modal"
>
</p>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
</button>
<button
type=
"button"
</ng-container>
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#position-unit-component-alert-modal"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#position-unit-component-alert-modal"
(
click
)="
addPosition
()"
>
บันทึกข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
<div
id=
"position-unit-component-alert-edit-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"
>
<div
class=
"ti-modal-header"
>
<h3
class=
"text-xxl font-bold text-primary"
>
แจ้งเตือน
</h3>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#position-unit-component-alert-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</div>
</div>
</div>
</div>
<div
class=
"ti-modal-body "
>
<div
class=
"ti-modal-body "
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
ยืนยันการเเก้ไขข้อมูลหรือไม่
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
ยืนยันการบันทึกข้อมูลหรือไม่
</ng-container>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
ยืนยันการลบข้อมูลหรือไม่
</ng-container>
</p>
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
<button
type=
"button"
data-hs-overlay=
"#position-unit-component-alert-modal"
>
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
ย้อนกลับ
data-hs-overlay=
"#position-unit-component-page-modal"
>
</button>
ย้อนกลับ
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
</button>
data-hs-overlay=
"#position-unit-component-alert-edit-modal"
(
click
)="
addPosition
()"
>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
บันทึกข้อมูล
data-hs-overlay=
"#position-unit-component-page-alert-modal"
(
click
)="
addPosition
()"
>
</a>
บันทึกข้อมูล
</a>
</ng-container>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#position-unit-component-page-alert-modal"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-danger"
href=
"javascript:void(0);"
data-hs-overlay=
"#position-unit-component-page-alert-modal"
(
click
)="
deletePosition
()"
>
ลบข้อมูล
</a>
</ng-container>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"position-unit-component-upload-modal"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"position-unit-component-alert-delete-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)] rounded-md"
>
<div
class=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] flex items-center"
>
<div
class=
"ti-modal-header bg-primary !rounded-none !rounded-t-sm"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<h5
class=
"text-xxl font-bold text-white"
>
<div
class=
"ti-modal-header"
>
นำเข้าฝ่าย
<h3
class=
"text-xxl font-bold text-primary"
>
</h5>
แจ้งเตือน
</h3>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#position-unit-component-alert-delete-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</div>
</div>
<div
class=
"ti-modal-body "
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
ยืนยันการลบข้อมูลหรือไม่
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#position-unit-component-alert-modal"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-danger"
href=
"javascript:void(0);"
data-hs-overlay=
"#position-unit-component-alert-delete-modal"
(
click
)="
deletePosition
()"
>
ลบข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
<div
class=
"ti-modal-body max-h-full overflow-hidden ti-modal-content !rounded-t-none !rounded-b-sm"
>
</div>
<h1
class=
"mt-2"
style=
"text-align: center;"
>
ไฟล์
</h1>
<div
class=
"mt-2 p-2"
>
<div
id=
"position-unit-component-alert-delete-check-modal"
class=
"hs-overlay hidden ti-modal"
>
<div
class=
"flex rounded-md"
>
<div
class=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] flex items-center"
>
<input
#
fileInput
type=
"file"
(
change
)="
onFileSelected
($
event
)"
hidden
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<input
type=
"text"
[
value
]="
selectedFileName
"
readonly
(
click
)="
fileInput
.
click
()"
<div
class=
"ti-modal-header"
>
class=
"ti-form-input rounded-none ltr:rounded-l-md rtl:rounded-r-md focus:z-10 cursor-pointer"
>
<h3
class=
"text-xxl font-bold text-primary"
>
<button
type=
"button"
(
click
)="
fileInput
.
click
()"
แจ้งเตือน
class=
"inline-flex flex-shrink-0 justify-center items-center h-[2.875rem] w-[2.875rem] ltr:rounded-r-md rtl:rounded-l-md border border-transparent font-semibold bg-secondary text-white hover:bg-secondary focus:z-10 focus:outline-none focus:ring-0 focus:ring-secondary transition-all text-sm"
>
</h3>
<i
class=
"ti ti-upload"
></i>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#position-unit-component-alert-delete-check-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</button>
</div>
</div>
</div>
<div
class=
"flex justify-center mt-2rem mb-1rem space-x-4"
>
<div
class=
"ti-modal-body "
>
<button
type=
"submit"
class=
"ti-btn ti-btn-secondary"
(
click
)="
uploadFile
()"
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
[
disabled
]="!
selectedFile
"
>
ยืนยันการลบข้อมูลหรือไม่
อัปโหลด
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#position-unit-component-alert-delete-check-modal"
>
ย้อนกลับ
</button>
</button>
<a
class=
"ti-btn ti-btn-danger"
href=
"javascript:void(0);"
data-hs-overlay=
"#position-unit-component-alert-delete-check-modal"
(
click
)="
deleteSelectedItems
()"
>
ลบข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
</div>
...
...
src/app/components/company-components/job-description/position/position-unit.component.ts
View file @
cd558547
import
{
ChangeDetectorRef
,
Component
,
EventEmitter
,
Input
,
OnInit
,
Output
}
from
'@angular/core'
;
import
{
ChangeDetectorRef
,
Component
,
EventEmitter
,
Input
,
OnInit
,
Output
}
from
'@angular/core'
;
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
MyPositionModel
,
PositionModel
}
from
'src/app/shared/model/position.model'
;
import
{
MyPositionModel
,
PositionModel
}
from
'src/app/shared/model/position.model'
;
import
{
FileService
}
from
'src/app/shared/services/file.service'
;
import
{
PositionService
}
from
'src/app/shared/services/position.service'
;
import
{
PositionService
}
from
'src/app/shared/services/position.service'
;
export
interface
DataModel
{
positionId
:
string
tdesc
:
string
edesc
:
string
consolidate
:
string
shortName
:
string
companyId
:
string
}
@
Component
({
@
Component
({
selector
:
'app-position-unit'
,
selector
:
'app-position-unit'
,
...
@@ -20,22 +29,82 @@ export class PositionUnitComponent implements OnInit {
...
@@ -20,22 +29,82 @@ export class PositionUnitComponent implements OnInit {
}
}
currentPage
=
1
currentPage
=
1
selectedItems
:
string
[]
=
[];
selectedItems
:
string
[]
=
[];
search
=
""
selectedFile
:
File
|
null
=
null
;
selectedFileName
:
string
=
'กรุณาเลือกไฟล์'
;
modalStatus
=
'add'
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
positionList
:
PositionModel
[]
=
[]
positionList
:
{
check
:
boolean
,
data
:
DataModel
}
[]
=
[]
position
:
PositionModel
=
new
MyPositionModel
({})
position
:
PositionModel
=
new
MyPositionModel
({})
search
=
""
dataLoading
=
false
dataSelect
:
DataModel
=
{
positionId
:
""
,
tdesc
:
""
,
edesc
:
""
,
consolidate
:
""
,
shortName
:
""
,
companyId
:
""
}
constructor
(
private
positionService
:
PositionService
,
constructor
(
private
positionService
:
PositionService
,
private
toastr
:
ToastrService
,
private
toastr
:
ToastrService
,
private
cdr
:
ChangeDetectorRef
private
cdr
:
ChangeDetectorRef
,
private
fileService
:
FileService
)
{
}
)
{
}
ngOnInit
():
void
{
ngOnInit
():
void
{
this
.
getPositionList
()
this
.
getPositionList
()
}
}
onFileSelected
(
event
:
any
)
{
this
.
selectedFile
=
event
.
target
.
files
.
length
>
0
?
event
.
target
.
files
[
0
]
:
null
;
this
.
selectedFileName
=
this
.
selectedFile
?.
name
||
"กรุณาเลือกไฟล์"
}
uploadFile
()
{
if
(
!
this
.
selectedFile
)
{
alert
(
'กรุณาเลือกไฟล์ก่อนอัปโหลด'
)
return
}
const
formData
=
new
FormData
();
formData
.
append
(
'file'
,
this
.
selectedFile
);
this
.
fileService
.
upload
(
formData
,
'mposition'
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
getPositionList
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
})
}
downloadFile
()
{
const
fileName
=
'IMPORT_MPOSITION.xlsx'
this
.
fileService
.
download
(
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
);
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
})
}
getPositionList
()
{
getPositionList
()
{
this
.
positionService
.
getList
().
subscribe
(
response
=>
{
this
.
dataLoading
=
true
this
.
positionList
=
response
.
map
(
x
=>
new
MyPositionModel
(
x
))
this
.
positionService
.
getList
().
subscribe
({
this
.
searchChange
()
next
:
response
=>
{
this
.
cdr
.
detectChanges
()
this
.
positionList
=
response
.
map
(
x
=>
({
check
:
false
,
data
:
{
positionId
:
x
.
positionId
,
tdesc
:
x
.
tdesc
,
edesc
:
x
.
edesc
,
consolidate
:
x
.
consolidate
,
shortName
:
x
.
shortName
,
companyId
:
x
.
companyId
}
}))
this
.
dataLoading
=
false
this
.
searchChange
()
this
.
cdr
.
detectChanges
();
},
error
:
error
=>
{
this
.
dataLoading
=
false
console
.
error
(
'Error fetching employee types:'
,
error
);
this
.
cdr
.
detectChanges
()
}
})
})
}
}
searchChange
()
{
searchChange
()
{
...
@@ -43,83 +112,63 @@ export class PositionUnitComponent implements OnInit {
...
@@ -43,83 +112,63 @@ export class PositionUnitComponent implements OnInit {
this
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
positionListFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
positionListFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
positionListFilter
()
{
positionListFilter
()
{
return
this
.
positionList
.
filter
(
x
=>
x
.
positionId
.
includes
(
this
.
search
)
||
return
this
.
positionList
.
filter
(
x
=>
{
x
.
tdesc
.
includes
(
this
.
search
)
||
const
data
=
x
.
data
;
x
.
edesc
.
includes
(
this
.
search
))
const
searchLower
=
this
.
search
.
toLowerCase
();
}
selectPosition
(
position
?:
PositionModel
)
{
return
(
// this.showSuccess()
(
data
.
positionId
?.
toLowerCase
()
||
''
).
includes
(
searchLower
)
||
this
.
position
=
new
MyPositionModel
(
position
||
{})
(
data
.
tdesc
?.
toLowerCase
()
||
''
).
includes
(
searchLower
)
||
}
(
data
.
edesc
?.
toLowerCase
()
||
''
).
includes
(
searchLower
)
||
(
data
.
consolidate
?.
toLowerCase
()
||
''
).
includes
(
searchLower
)
||
showSuccess
()
{
(
data
.
shortName
?.
toLowerCase
()
||
''
).
includes
(
searchLower
)
this
.
toastr
.
success
(
'บันทึกข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
);
timeOut
:
3000
,
positionClass
:
'toast-top-right'
,
});
}
showSuccesssEdit
()
{
this
.
toastr
.
success
(
'เเก้ไขข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
timeOut
:
3000
,
positionClass
:
'toast-top-right'
,
});
});
}
}
showSuccessDelete
()
{
this
.
toastr
.
success
(
'ลบข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
setData
(
data
?:
DataModel
)
{
timeOut
:
3000
,
this
.
dataSelect
=
JSON
.
parse
(
JSON
.
stringify
(
data
||
{
positionId
:
""
,
tdesc
:
""
,
edesc
:
""
,
consolidate
:
""
,
shortName
:
""
,
companyId
:
""
}));
positionClass
:
'toast-top-right'
,
});
}
}
addPosition
()
{
addPosition
()
{
this
.
positionService
.
post
(
this
.
position
).
subscribe
((
response
:
any
)
=>
{
const
body
=
new
MyPositionModel
({
positionId
:
this
.
dataSelect
.
positionId
,
tdesc
:
this
.
dataSelect
.
tdesc
,
edesc
:
this
.
dataSelect
.
edesc
,
consolidate
:
this
.
dataSelect
.
consolidate
,
shortName
:
this
.
dataSelect
.
shortName
,
companyId
:
this
.
dataSelect
.
companyId
})
if
(
response
.
success
)
{
this
.
positionService
.
post
(
body
).
subscribe
({
this
.
getPositionList
()
next
:
response
=>
{
this
.
showSuccess
()
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
getPositionList
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
}
})
})
}
}
deletePosition
()
{
deletePosition
()
{
this
.
positionService
.
delete
(
this
.
position
).
subscribe
((
response
:
any
)
=>
{
let
body
:
PositionModel
|
PositionModel
[]
=
[]
if
(
response
.
success
)
{
if
(
this
.
dataSelect
.
positionId
)
{
this
.
getPositionList
()
body
=
new
MyPositionModel
({
positionId
:
this
.
dataSelect
.
positionId
,
tdesc
:
this
.
dataSelect
.
tdesc
,
edesc
:
this
.
dataSelect
.
edesc
,
consolidate
:
this
.
dataSelect
.
consolidate
,
shortName
:
this
.
dataSelect
.
shortName
,
companyId
:
this
.
dataSelect
.
companyId
})
this
.
showSuccessDelete
()
}
})
}
toggleSelection
(
positionId
:
string
,
event
:
Event
)
{
const
checked
=
(
event
.
target
as
HTMLInputElement
).
checked
;
if
(
checked
)
{
this
.
selectedItems
.
push
(
positionId
);
}
else
{
}
else
{
this
.
selectedItems
=
this
.
selectedItems
.
filter
(
id
=>
id
!==
positionId
);
body
=
this
.
positionList
.
filter
(
x
=>
x
.
check
).
map
(
x
=>
new
MyPositionModel
({
positionId
:
x
.
data
.
positionId
,
tdesc
:
x
.
data
.
tdesc
,
edesc
:
x
.
data
.
edesc
,
consolidate
:
x
.
data
.
consolidate
,
shortName
:
x
.
data
.
shortName
,
companyId
:
x
.
data
.
companyId
}))
}
}
}
this
.
positionService
.
delete
(
body
).
subscribe
({
toggleSelectAll
(
event
:
Event
)
{
next
:
response
=>
{
const
checked
=
(
event
.
target
as
HTMLInputElement
).
checked
;
if
(
response
.
success
)
{
if
(
checked
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
selectedItems
=
this
.
positionListFilter
().
map
(
item
=>
item
.
positionId
);
this
.
getPositionList
()
}
else
{
}
else
{
this
.
selectedItems
=
[];
this
.
showAlert
(
response
.
message
,
'error'
)
}
}
}
},
error
:
error
=>
{
deleteSelectedItems
()
{
this
.
showAlert
(
error
.
message
,
'error'
)
if
(
this
.
selectedItems
.
length
===
0
)
{
alert
(
"เลือกข้อมูลก่อนลบ"
);
return
;
}
const
selectedGroups
=
this
.
positionListFilter
().
filter
(
item
=>
this
.
selectedItems
.
includes
(
item
.
positionId
));
this
.
positionService
.
delete
(
selectedGroups
).
subscribe
({
next
:
(
response
)
=>
{
console
.
log
(
"ลบสำเร็จ"
,
response
);
this
.
selectedItems
=
[];
this
.
getPositionList
();
this
.
showSuccessDelete
()
},
error
:
(
error
)
=>
{
console
.
error
(
"เกิดข้อผิดพลาดในการลบ"
,
error
);
}
}
})
}
showAlert
(
text
:
string
,
type
:
'success'
|
'error'
)
{
this
.
toastr
[
type
](
text
,
'แจ้งเตือน'
,
{
timeOut
:
3000
,
positionClass
:
'toast-top-right'
,
});
});
}
}
}
}
...
...
src/app/components/competency-assessment/name-registration/competency-topic/competency-topic.component.html
View file @
cd558547
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
<div
class=
"flex gap-x-6"
>
<div
class=
"flex gap-x-6"
>
<div
class=
"flex items-center"
>
<div
class=
"flex items-center"
>
<label
for=
"hs-checkbox-group-1"
<label
for=
"hs-checkbox-group-1"
class=
"text-sm text-gray-500 ltr:ml-2 rtl:mr-2 dark:text-white/70"
>
{{
mockDataSelec
t.length}}
class=
"text-sm text-gray-500 ltr:ml-2 rtl:mr-2 dark:text-white/70"
>
{{
dataSelectLis
t.length}}
Selected
</label>
Selected
</label>
</div>
</div>
...
@@ -35,28 +35,24 @@
...
@@ -35,28 +35,24 @@
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
type=
"button"
<button
type=
"button"
class=
"ti-btn ti-btn bg-pink-500/10 text-pink-500 hover:text-white hover:bg-pink-500 ring-offset-white focus:ring-pink-500 dark:focus:ring-offset-white/10 h-10 m-0 shadow-md"
class=
"ti-btn ti-btn bg-pink-500/10 text-pink-500 hover:text-white hover:bg-pink-500 ring-offset-white focus:ring-pink-500 dark:focus:ring-offset-white/10 h-10 m-0 shadow-md"
data-hs-overlay=
"#competency-topic-
modal-add
"
>
data-hs-overlay=
"#competency-topic-
upload-modal
"
>
<i
class=
"ti ti-file-plus"
></i>
<i
class=
"ti ti-file-plus"
></i>
import
import
</button>
</button>
</div>
</div>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-10 m-0 shadow-md"
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-10 m-0 shadow-md"
data-hs-overlay=
"#competency-topic-
modal-add"
(
click
)="
selectCompetencytopic
()"
>
data-hs-overlay=
"#competency-topic-
page-modal"
(
click
)="
modalStatus=
'add'
;
setData
()"
>
<i
class=
"ri-add-line"
></i>
<i
class=
"ri-add-line"
></i>
Add
Add
</button>
</button>
</div>
</div>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
data-hs-overlay=
"#competency-topic-page-alert-modal"
(
click
)="
modalStatus=
'deleteGroup'
;
setData
()"
>
<i
class=
"ri-delete-bin-6-line"
></i>
<i
class=
"ri-delete-bin-6-line"
></i>
Delete
Delete
</button>
</button>
<!-- <button href="javascript:void(0);" class="ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
data-hs-overlay="#competency-topic-alert-delete-modal">
<i class="ri-delete-bin-6-line"></i>
Delete
</button> -->
</div>
</div>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-warning h-10 m-0 shadow-md"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-warning h-10 m-0 shadow-md"
>
...
@@ -106,18 +102,18 @@
...
@@ -106,18 +102,18 @@
<tr
<tr
*
ngFor=
"let item of dataListFilter()| slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index"
>
*
ngFor=
"let item of dataListFilter()| slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index"
>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<input
type=
"checkbox"
class=
"ti-form-checkbox cursor-pointer"
id=
"checkbox-{{item.id}}"
<input
type=
"checkbox"
class=
"ti-form-checkbox cursor-pointer"
id=
"checkbox-{{item.
data.
id}}"
[(
ngModel
)]="
item
.
check
ed
"
(
change
)="
checkSelect
()"
>
[(
ngModel
)]="
item
.
check
"
(
change
)="
checkSelect
()"
>
<label
for=
"checkbox-{{item.
id}}"
>
{{item
.id}}
</label>
<label
for=
"checkbox-{{item.
data.id}}"
>
{{item.data
.id}}
</label>
</td>
</td>
<td>
{{item.name}}
</td>
<td>
{{item.
data.
name}}
</td>
<td
class=
"text-center"
>
{{item.code}}
</td>
<td
class=
"text-center"
>
{{item.
data.
code}}
</td>
<td
class=
"flex justify-center"
>
<td
class=
"flex justify-center"
>
<i
class=
"ti ti-edit cursor-pointer i-gray fs-l px-1"
<i
class=
"ti ti-edit cursor-pointer i-gray fs-l px-1"
(
click
)="
modalStatus=
'edit'
;
setData
(
item
.
data
)"
data-hs-overlay=
"#competency-topic-
modal-edit"
(
click
)="
selectCompetencytopic
(
item
)
"
></i>
data-hs-overlay=
"#competency-topic-
page-modal
"
></i>
<i
class=
"ti ti-trash cursor-pointer i-gray fs-l px-1"
<i
class=
"ti ti-trash cursor-pointer i-gray fs-l px-1"
*
ngIf=
"item.data.id!='100'"
data-hs-overlay=
"#competency-topic-alert-delete-modal
"
(
click
)="
modalStatus=
'delete'
;
setData
(
item
.
data
)
"
(
click
)="
selectCompetencytopic
(
item
)
"
></i>
data-hs-overlay=
"#competency-topic-page-alert-modal
"
></i>
</td>
</td>
</tr>
</tr>
</tbody>
</tbody>
...
@@ -164,16 +160,16 @@
...
@@ -164,16 +160,16 @@
<div
id=
"competency-topic-
modal-add
"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"competency-topic-
page-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)]"
>
<div
class=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)]"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"ti-modal-header"
>
<div
class=
"ti-modal-header"
>
<h3
class=
"text-xxl font-bold text-primary"
>
<h3
class=
"text-xxl font-bold text-primary"
>
เพิ่มหัวข้อสมรรถนะ
{{modalStatus=='add'?'เพิ่มหัวข้อสมรรถนะ':'แก้ไขประเภทสมรรถนะ'}}
</h3>
</h3>
<div
class=
"flex justify-end"
>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#competency-topic-
modal-add
"
>
data-hs-overlay=
"#competency-topic-
page-modal
"
>
<span
class=
"sr-only"
>
Close
</span>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</button>
...
@@ -208,7 +204,7 @@
...
@@ -208,7 +204,7 @@
</div>
</div>
<div
class=
"ti-modal-body mt-1"
>
<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"
[(
ngModel
)]="
dataSelect
.
id
"
>
<input
type=
"text"
id=
"input-label"
class=
"ti-form-input w-1/2"
[
ngClass
]="{'
bg-input-readonly
'
:modalStatus=
='edit'}"
[
readonly
]="
modalStatus=
='edit'"
[
(
ngModel
)]="
dataSelect
.
id
"
>
<label
for=
"detail_th"
class=
"ti-form-label mt-2rem"
>
ชื่อหัวข้อ (ไทย)
</label>
<label
for=
"detail_th"
class=
"ti-form-label mt-2rem"
>
ชื่อหัวข้อ (ไทย)
</label>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input h-10"
[(
ngModel
)]="
dataSelect
.
name
"
>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input h-10"
[(
ngModel
)]="
dataSelect
.
name
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-2rem"
>
ชื่อหัวข้อ (อังกฤษ)
</label>
<label
for=
"detail_eng"
class=
"ti-form-label mt-2rem"
>
ชื่อหัวข้อ (อังกฤษ)
</label>
...
@@ -255,116 +251,11 @@
...
@@ -255,116 +251,11 @@
<div
class=
"flex justify-end mt-3rem mb-1rem space-x-4"
>
<div
class=
"flex justify-end mt-3rem mb-1rem space-x-4"
>
<button
type=
"button"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#competency-topic-
modal-add
"
>
data-hs-overlay=
"#competency-topic-
page-modal
"
>
ย้อนกลับ
ย้อนกลับ
</button>
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#competency-topic-alert-add-modal"
>
data-hs-overlay=
"#competency-topic-page-alert-modal"
>
บันทึกข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
<div
id=
"competency-topic-modal-edit"
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)]"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"ti-modal-header"
>
<h3
class=
"text-xxl font-bold text-primary"
>
แก้ไขหัวข้อสมรรถนะ
</h3>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#competency-topic-modal-edit"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</div>
</div>
<div
class=
"ti-modal-center"
>
<div
class=
"flex justify-end"
style=
"padding-right: 1rem;"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md"
>
<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"
transform=
"rotate(45)matrix(-1, 0, 0, 1, 0, 0)"
>
<g
id=
"SVGRepo_bgCarrier"
stroke-width=
"0"
></g>
<g
id=
"SVGRepo_tracerCarrier"
stroke-linecap=
"round"
stroke-linejoin=
"round"
></g>
<g
id=
"SVGRepo_iconCarrier"
>
<path
d=
"M15 49A24 24 0 0 1 32 8"
></path>
<path
d=
"M49 15a24 24 0 0 1-17 41"
></path>
<polyline
points=
"15.03 40 15.03 48.97 8 48.97"
></polyline>
<polyline
points=
"48.97 24 48.97 15.03 56 15.03"
></polyline>
</g>
</svg>
Clear
</button>
</div>
<div
class=
"px-1"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-warning h-45px m-0 shadow-md"
>
<i
class=
"ti ti-book fs-l"
></i>
Help
</button>
</div>
</div>
</div>
<div
class=
"ti-modal-body mt-1"
>
<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
[(
ngModel
)]="
dataSelect
.
id
"
>
<label
for=
"detail_th"
class=
"ti-form-label mt-2rem"
>
ชื่อหัวข้อ (ไทย)
</label>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input h-10"
[(
ngModel
)]="
dataSelect
.
name
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-2rem"
>
ชื่อหัวข้อ (อังกฤษ)
</label>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input h-10"
[(
ngModel
)]="
dataSelect
.
edesc
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-2rem"
>
นิยามสมรรถนะ
</label>
<textarea
type=
"text"
id=
"detail_eng"
class=
"ti-form-input"
rows=
"4"
cols=
"50"
[(
ngModel
)]="
dataSelect
.
definition
"
>
</textarea>
<label
class=
"ti-form-label mt-2rem"
>
ประเภท Competency
</label>
<div
class=
"flex"
>
<div
class=
"relative flex rounded-md w-1/2"
>
<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;"
[(
ngModel
)]="
dataSelect
.
type
.
code
"
>
<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-gray-500 dark:text-white/70"
data-hs-overlay=
"#competency-topic-table-modal-edit"
>
<i
class=
"ri-search-line cursor-pointer text-gray"
></i>
</button>
</div>
</div>
</div>
<label
class=
"ti-form-label mt-2rem"
>
แนบไฟล์ข้อสอบ
</label>
<div>
<div
class=
"flex rounded-md"
>
<label
for=
"file-input-medium"
class=
"sr-only"
>
อัปโหลดไฟล์
</label>
<input
type=
"file"
id=
"file-input-medium"
name=
"file-input-medium"
class=
"block w-full border border-gray-200 focus:shadow-sm dark:focus:shadow-white/10 ltr:rounded-l-md rtl:rounded-r-none text-sm focus:z-10 focus:outline-0 focus:border-gray-200 dark:focus:border-white/10 dark:border-white/10 dark:text-white/70 file:border-0 file:bg-gray-100 ltr:file:mr-4 rtl:file:ml-4 file:py-3 file:px-4 dark:file:bg-black/20 dark:file:text-white/70"
>
<span
class=
"px-4 inline-flex items-center min-w-fit ltr:rounded-r-md rtl:rounded-l-none border ltr:border-l-0 rtl:border-r-0 border-gray-200 bg-gray-50 text-sm dark:bg-black/20 dark:border-white/10"
>
<button
class=
"text-sm text-gray-500 dark:text-white/70"
onclick=
"document.getElementById('file-input-medium').click();"
>
Browse
</button>
</span>
<div
class=
"flex items-center ml-2"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-danger h-10px m-0 shadow-md rounded-md"
>
<i
class=
"ri-delete-bin-6-line"
></i>
Delete
</button>
</div>
</div>
</div>
<div
class=
"flex justify-end mt-3rem mb-1rem space-x-4"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#competency-topic-modal-edit"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#competency-topic-alert-edit-modal"
>
บันทึกข้อมูล
บันทึกข้อมูล
</a>
</a>
</div>
</div>
...
@@ -382,7 +273,7 @@
...
@@ -382,7 +273,7 @@
</h3>
</h3>
<div
class=
"flex justify-end"
>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#competency-topic-
modal-add
"
>
data-hs-overlay=
"#competency-topic-
page-modal
"
>
<span
class=
"sr-only"
>
Close
</span>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</button>
...
@@ -454,7 +345,7 @@
...
@@ -454,7 +345,7 @@
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
type=
"button"
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
class=
"ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
data-hs-overlay=
"#competency-topic-
modal-add
"
data-hs-overlay=
"#competency-topic-
page-modal
"
(
click
)="
selectCompetencytype
(
item
)"
>
(
click
)="
selectCompetencytype
(
item
)"
>
<i
class=
"ri-add-line"
></i>
<i
class=
"ri-add-line"
></i>
Select
Select
...
@@ -653,7 +544,7 @@
...
@@ -653,7 +544,7 @@
</div>
</div>
</div>
</div>
<div
id=
"competency-topic-
alert-add
-modal"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"competency-topic-
page-alert
-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=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] flex items-center"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<div
class=
"ti-modal-header"
>
<div
class=
"ti-modal-header"
>
...
@@ -661,99 +552,85 @@
...
@@ -661,99 +552,85 @@
แจ้งเตือน
แจ้งเตือน
</h3>
</h3>
<div
class=
"flex justify-end"
>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
data-hs-overlay=
"#competency-topic-alert-add-modal"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<span
class=
"sr-only"
>
Close
</span>
data-hs-overlay=
"#competency-topic-page-alert-modal"
>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<span
class=
"sr-only"
>
Close
</span>
</button>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</ng-container>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#competency-topic-page-alert-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</ng-container>
</div>
</div>
</div>
</div>
<div
class=
"ti-modal-body "
>
<div
class=
"ti-modal-body "
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
ยืนยันการบันทึกข้อมูลหรือไม่
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
ยืนยันการบันทึกข้อมูลหรือไม่
</ng-container>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
ยืนยันการลบข้อมูลหรือไม่
</ng-container>
</p>
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
<button
type=
"button"
data-hs-overlay=
"#competency-topic-modal-add"
>
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
ย้อนกลับ
data-hs-overlay=
"#competency-topic-page-modal"
>
</button>
ย้อนกลับ
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
</button>
data-hs-overlay=
"#competency-topic-alert-add-modal"
(
click
)="
addUser
()"
>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
บันทึกข้อมูล
data-hs-overlay=
"#competency-topic-page-alert-modal"
(
click
)="
addCompetency_topic
()"
>
</a>
บันทึกข้อมูล
</a>
</ng-container>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#competency-topic-page-alert-modal"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-danger"
href=
"javascript:void(0);"
data-hs-overlay=
"#competency-topic-page-alert-modal"
(
click
)="
deleteCompetency_topic
()"
>
ลบข้อมูล
</a>
</ng-container>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"competency-topic-alert-edit-modal"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"competency-topic-upload-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=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] rounded-md"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<div
class=
"ti-modal-header bg-primary !rounded-none !rounded-t-sm"
>
<div
class=
"ti-modal-header"
>
<h5
class=
"text-xxl font-bold text-white"
>
<h3
class=
"text-xxl font-bold text-primary"
>
นำเข้าฝ่าย
แจ้งเตือน
</h5>
</h3>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#competency-topic-alert-edit-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</div>
</div>
<div
class=
"ti-modal-body "
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
ยืนยันการเเก้ไขข้อมูลหรือไม่
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#competency-topic-modal-edit"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#competency-topic-alert-edit-modal"
(
click
)="
addUser
()"
>
บันทึกข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
<div
class=
"ti-modal-body max-h-full overflow-hidden ti-modal-content !rounded-t-none !rounded-b-sm"
>
</div>
<h1
class=
"mt-2"
style=
"text-align: center;"
>
ไฟล์
</h1>
<div
id=
"competency-topic-alert-delete-modal"
class=
"hs-overlay hidden ti-modal"
>
<div
class=
"mt-2 p-2"
>
<div
class=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] flex items-center"
>
<div
class=
"flex rounded-md"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<input
#
fileInput
type=
"file"
(
change
)="
onFileSelected
($
event
)"
hidden
>
<div
class=
"ti-modal-header"
>
<input
type=
"text"
[
value
]="
selectedFileName
"
readonly
(
click
)="
fileInput
.
click
()"
<h3
class=
"text-xxl font-bold text-primary"
>
class=
"ti-form-input rounded-none ltr:rounded-l-md rtl:rounded-r-md focus:z-10 cursor-pointer"
>
แจ้งเตือน
<button
type=
"button"
(
click
)="
fileInput
.
click
()"
</h3>
class=
"inline-flex flex-shrink-0 justify-center items-center h-[2.875rem] w-[2.875rem] ltr:rounded-r-md rtl:rounded-l-md border border-transparent font-semibold bg-secondary text-white hover:bg-secondary focus:z-10 focus:outline-none focus:ring-0 focus:ring-secondary transition-all text-sm"
>
<div
class=
"flex justify-end"
>
<i
class=
"ti ti-upload"
></i>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#competency-topic-alert-delete-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</button>
</div>
</div>
</div>
<div
class=
"flex justify-center mt-2rem mb-1rem space-x-4"
>
<div
class=
"ti-modal-body "
>
<button
type=
"submit"
class=
"ti-btn ti-btn-secondary"
(
click
)="
uploadFile
()"
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
[
disabled
]="!
selectedFile
"
>
ยืนยันการลบข้อมูลหรือไม่!
อัปโหลด
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#competency-topic-alert-delete-modal"
>
ย้อนกลับ
</button>
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#competency-topic-alert-delete-modal"
(
click
)="
deleteUser
()"
>
ลบข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
</div>
...
...
src/app/components/competency-assessment/name-registration/competency-topic/competency-topic.component.ts
View file @
cd558547
...
@@ -4,6 +4,7 @@ import { MyCompetencytopicModel } from 'src/app/shared/model/competencytopic.mod
...
@@ -4,6 +4,7 @@ import { MyCompetencytopicModel } from 'src/app/shared/model/competencytopic.mod
import
{
MyCompetencytypeModel
}
from
'src/app/shared/model/competencytype.model'
;
import
{
MyCompetencytypeModel
}
from
'src/app/shared/model/competencytype.model'
;
import
{
CompetencytopicService
}
from
'src/app/shared/services/competencytopic.service'
;
import
{
CompetencytopicService
}
from
'src/app/shared/services/competencytopic.service'
;
import
{
CompetencytypeService
}
from
'src/app/shared/services/competencytype.service'
;
import
{
CompetencytypeService
}
from
'src/app/shared/services/competencytype.service'
;
import
{
FileService
}
from
'src/app/shared/services/file.service'
;
export
interface
DataModel
{
export
interface
DataModel
{
id
:
string
id
:
string
name
:
string
name
:
string
...
@@ -27,14 +28,6 @@ export interface DataModel2 {
...
@@ -27,14 +28,6 @@ export interface DataModel2 {
})
})
export
class
CompetencyTopic
{
export
class
CompetencyTopic
{
currentPage
=
1
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
search
=
""
currentPageModal
=
1
pageModal
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
searchModal
=
""
@
Input
()
pathTitle
=
[
'การประเมินสมรรถนะ'
,
'ทะเบียนกำหนดชื่อ'
,
'หัวข้อสมรรถนะ'
];
@
Input
()
pathTitle
=
[
'การประเมินสมรรถนะ'
,
'ทะเบียนกำหนดชื่อ'
,
'หัวข้อสมรรถนะ'
];
@
Output
()
sendPathTitle
:
EventEmitter
<
string
[]
>
=
new
EventEmitter
<
string
[]
>
();
@
Output
()
sendPathTitle
:
EventEmitter
<
string
[]
>
=
new
EventEmitter
<
string
[]
>
();
activeTab
:
string
=
'tab1'
;
// กำหนด tab เริ่มต้น
activeTab
:
string
=
'tab1'
;
// กำหนด tab เริ่มต้น
...
@@ -45,109 +38,96 @@ export class CompetencyTopic {
...
@@ -45,109 +38,96 @@ export class CompetencyTopic {
this
.
activeTab
=
tab
.
id
;
this
.
activeTab
=
tab
.
id
;
}
}
// การจัดการการเปิดปิด modal
currentPage
=
1
modalOptions
:
{
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
[
nameModal
:
string
]:
{
search
=
""
isModalOpen
:
boolean
;
modalSize
:
string
;
currentPageModal
=
1
backdropClose
:
boolean
;
pageModal
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
};
searchModal
=
""
}
=
{
"add"
:
{
isModalOpen
:
false
,
modalSize
:
'm'
,
backdropClose
:
true
,
},
"edit"
:
{
isModalOpen
:
false
,
modalSize
:
'm'
,
backdropClose
:
true
,
}
};
// [
// ['CC-01', 'จิตสำนึกด้านความปลอดภัยและคุณภาพ (Safety & Quality)','CC'],
// ['CC-02', 'การทำงานเป็นทีมแบบ TAT (TAT Teamwork)','CC'],
// ['CC-03', 'ความรับผิดชอบในหน้าที่และโปร่งใส (Accountability & Ethics)','CC'],
// ['MC-01', 'การคิดเชิงกลยุทธิ์ (Strategic Thinking)','MC'],
// ['MC-02', 'การมีทัศนคติเชิงบวก (Mindset-Growth)','MC'],
// ['PC-01', 'ความรู้ด้านกฏหมายแรงงาน, กฏหมายแพ่งภาณิชย์, กฏหมายอาญา','PC']
mockData
:
DataModel
[]
=
[]
isChecked
:
boolean
=
false
;
// ใช้สำหรับตรวจสอบสถานะของ checkbox
currentModal
=
""
;
dataLoading
=
false
dataLoading
=
false
dataSelectList
:
DataModel
[]
=
[];
dataSelect
:
DataModel
=
{
id
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
definition
:
""
,
type
:
{
id
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
level
:
""
},
checked
:
false
}
dataSelect
:
DataModel
=
{
id
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
definition
:
""
,
type
:
{
id
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
level
:
""
},
checked
:
false
}
competencytypeListLoading
=
false
competencytypeListLoading
=
false
competencytypeList
:
DataModel2
[]
=
[]
competencytypeList
:
DataModel2
[]
=
[]
mockDataSelect
:
any
=
[]
competoncyTopicList
:
{
check
:
boolean
;
data
:
DataModel
&
{
checked
?:
boolean
}
}[]
=
[]
openModal
(
name
:
string
,
size
:
string
,
closeOnBackdrop
?:
boolean
)
{
modalStatus
=
'add'
this
.
modalOptions
[
name
].
modalSize
=
size
;
selectedFile
:
File
|
null
=
null
;
this
.
modalOptions
[
name
].
backdropClose
=
closeOnBackdrop
||
false
;
selectedFileName
:
string
=
'กรุณาเลือกไฟล์'
;
this
.
modalOptions
[
name
].
isModalOpen
=
true
;
selectedItems
:
string
[]
=
[];
this
.
currentModal
=
name
;
// ตั้งค่าค่าของ currentModal เป็น 'add' หรือ 'edit'
document
.
body
.
style
.
overflow
=
'hidden'
;
}
closeModal
(
name
:
string
)
{
constructor
(
private
toastr
:
ToastrService
,
this
.
modalOptions
[
name
].
isModalOpen
=
false
;
private
cdr
:
ChangeDetectorRef
,
if
(
!
this
.
isAnyModalOpen
())
{
private
fileService
:
FileService
,
document
.
body
.
style
.
overflow
=
''
;
// คืนค่าการ Scroll เฉพาะเมื่อ Modal ทั้งหมดปิดแล้ว
private
competencytopicService
:
CompetencytopicService
,
}
private
competencytypeService
:
CompetencytypeService
)
{
}
ngOnInit
():
void
{
this
.
getCompetencytopicList
()
this
.
getCompetencytypeList
()
}
}
isAnyModalOpen
():
boolean
{
checkSelect
()
{
return
Object
.
values
(
this
.
modalOptions
).
some
(
modal
=>
modal
.
isModalOpen
);
// ตรวจสอบว่า modal อื่นยังเปิดอยู่หรือไม่
this
.
dataSelectList
=
this
.
competoncyTopicList
.
filter
(
item
=>
item
.
check
).
map
(
item
=>
item
.
data
);
}
}
// ฟังก์ชัน toggle checkbox
isChecked
:
boolean
=
false
;
// ใช้สำหรับตรวจสอบสถานะของ checkbox
toggleCheckbox
()
{
toggleCheckbox
()
{
this
.
isChecked
=
!
this
.
isChecked
;
// สลับสถานะ'
this
.
isChecked
=
!
this
.
isChecked
;
// สลับสถานะ'
this
.
mockData
.
forEach
((
item
)
=>
{
this
.
competoncyTopicList
.
forEach
((
item
)
=>
{
item
.
check
ed
=
this
.
isChecked
;
item
.
check
=
this
.
isChecked
;
});
});
this
.
checkSelect
();
this
.
checkSelect
();
}
}
checkSelect
()
{
onFileSelected
(
event
:
any
)
{
this
.
mockDataSelect
=
this
.
mockData
.
filter
(
item
=>
item
.
checked
);
this
.
selectedFile
=
event
.
target
.
files
.
length
>
0
?
event
.
target
.
files
[
0
]
:
null
;
this
.
selectedFileName
=
this
.
selectedFile
?.
name
||
"กรุณาเลือกไฟล์"
}
}
// ฟังก์ชันสำหรับการเพิ่ม ลบ หรือแก้ไข ข้อมูล
uploadFile
()
{
addUser
()
{
if
(
!
this
.
selectedFile
)
{
const
body
=
new
MyCompetencytopicModel
({
alert
(
'กรุณาเลือกไฟล์ก่อนอัปโหลด'
)
competencyTopicId
:
this
.
dataSelect
.
id
,
tdesc
:
this
.
dataSelect
.
name
,
edesc
:
this
.
dataSelect
.
edesc
,
competencyDetail
:
this
.
dataSelect
.
definition
,
return
competencyType
:
new
MyCompetencytypeModel
({
competencyTypeId
:
this
.
dataSelect
.
type
.
id
,
tdesc
:
this
.
dataSelect
.
type
.
name
,
edesc
:
this
.
dataSelect
.
type
.
edesc
,
shortName
:
this
.
dataSelect
.
type
.
code
,
expectationLevel
:
this
.
dataSelect
.
type
.
level
}),
}
})
const
formData
=
new
FormData
();
this
.
competencytopicService
.
post
(
body
).
subscribe
((
response
:
any
)
=>
{
formData
.
append
(
'file'
,
this
.
selectedFile
);
if
(
response
.
success
)
{
this
.
fileService
.
upload
(
formData
,
'competency_topic'
).
subscribe
({
this
.
showSuccess
()
next
:
response
=>
{
this
.
getCompetencytopicList
()
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
getCompetencytypeList
()
this
.
getCompetencytopicList
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
}
})
})
}
}
deleteUser
()
{
const
body
=
new
MyCompetencytopicModel
({
downloadFile
()
{
competencyTopicId
:
this
.
dataSelect
.
id
,
tdesc
:
this
.
dataSelect
.
name
,
edesc
:
this
.
dataSelect
.
edesc
,
competencyDetail
:
this
.
dataSelect
.
definition
,
const
fileName
=
'IMPORT_COMPETENCY_TOPIC.xlsx'
competencyType
:
new
MyCompetencytypeModel
({
competencyTypeId
:
this
.
dataSelect
.
type
.
id
,
tdesc
:
this
.
dataSelect
.
type
.
name
,
edesc
:
this
.
dataSelect
.
type
.
edesc
,
shortName
:
this
.
dataSelect
.
type
.
code
,
expectationLevel
:
this
.
dataSelect
.
type
.
level
}),
this
.
fileService
.
download
(
fileName
).
subscribe
({
})
next
:
response
=>
{
this
.
competencytopicService
.
delete
(
body
).
subscribe
((
response
:
any
)
=>
{
const
url
=
window
.
URL
.
createObjectURL
(
response
);
if
(
response
.
success
)
{
const
a
=
document
.
createElement
(
"a"
);
this
.
showSuccessDelete
()
a
.
href
=
url
;
this
.
getCompetencytopicList
()
a
.
download
=
fileName
;
document
.
body
.
appendChild
(
a
);
a
.
click
();
document
.
body
.
removeChild
(
a
);
window
.
URL
.
revokeObjectURL
(
url
);
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
}
})
})
}
currentModal
=
""
;
constructor
(
private
toastr
:
ToastrService
,
private
cdr
:
ChangeDetectorRef
,
private
competencytopicService
:
CompetencytopicService
,
private
competencytypeService
:
CompetencytypeService
)
{
}
ngOnInit
():
void
{
this
.
getCompetencytopicList
()
this
.
getCompetencytypeList
()
}
}
getCompetencytypeList
()
{
getCompetencytypeList
()
{
this
.
competencytypeListLoading
=
true
this
.
competencytypeListLoading
=
true
this
.
competencytypeService
.
getList
().
subscribe
({
this
.
competencytypeService
.
getList
().
subscribe
({
...
@@ -169,7 +149,7 @@ export class CompetencyTopic {
...
@@ -169,7 +149,7 @@ export class CompetencyTopic {
competencytypeListFilter
()
{
competencytypeListFilter
()
{
return
this
.
competencytypeList
.
filter
(
x
=>
{
return
this
.
competencytypeList
.
filter
(
x
=>
{
const
data
=
x
const
data
=
x
const
match
=
data
.
id
.
includes
(
this
.
searchModal
)
||
data
.
name
.
includes
(
this
.
searchModal
)
||
data
.
code
.
includes
(
this
.
searchModal
);
const
match
=
data
.
id
.
toLowerCase
().
includes
(
this
.
searchModal
)
||
data
.
name
.
toLowerCase
().
includes
(
this
.
searchModal
)
||
data
.
code
.
toLowerCase
()
.
includes
(
this
.
searchModal
);
return
match
;
return
match
;
});
});
}
}
...
@@ -180,16 +160,19 @@ export class CompetencyTopic {
...
@@ -180,16 +160,19 @@ export class CompetencyTopic {
this
.
dataLoading
=
true
this
.
dataLoading
=
true
this
.
competencytopicService
.
getList
().
subscribe
({
this
.
competencytopicService
.
getList
().
subscribe
({
next
:
response
=>
{
next
:
response
=>
{
this
.
mockData
=
response
.
map
(
x
=>
({
this
.
competoncyTopicList
=
response
.
map
(
x
=>
({
id
:
x
.
competencyTopicId
,
name
:
x
.
tdesc
,
edesc
:
x
.
edesc
,
code
:
x
.
competencyType
.
shortName
,
definition
:
x
.
competencyDetail
,
check
:
false
,
data
:
{
type
:
{
id
:
x
.
competencyType
.
competencyTypeId
,
name
:
x
.
competencyType
.
tdesc
,
edesc
:
x
.
competencyType
.
edesc
,
code
:
x
.
competencyType
.
shortName
,
level
:
x
.
expectationLevel
},
id
:
x
.
competencyTopicId
,
name
:
x
.
tdesc
,
edesc
:
x
.
edesc
,
code
:
x
.
competencyType
.
shortName
,
definition
:
x
.
competencyDetail
,
checked
:
false
type
:
{
id
:
x
.
competencyType
.
competencyTypeId
,
name
:
x
.
competencyType
.
tdesc
,
edesc
:
x
.
competencyType
.
edesc
,
code
:
x
.
competencyType
.
shortName
,
level
:
x
.
expectationLevel
},
checked
:
false
}
}))
}))
this
.
dataLoading
=
false
this
.
dataLoading
=
false
this
.
searchChange
()
this
.
searchChange
()
this
.
cdr
.
detectChanges
()
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
},
error
:
error
=>
{
this
.
dataLoading
=
false
this
.
dataLoading
=
false
console
.
error
(
'Error fetching employee types:'
,
error
);
this
.
cdr
.
detectChanges
()
this
.
cdr
.
detectChanges
()
}
}
})
})
...
@@ -199,34 +182,69 @@ export class CompetencyTopic {
...
@@ -199,34 +182,69 @@ export class CompetencyTopic {
this
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
dataListFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
dataListFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
dataListFilter
()
{
dataListFilter
()
{
return
this
.
mockData
.
filter
(
x
=>
{
return
this
.
competoncyTopicList
.
filter
(
x
=>
{
const
data
=
x
const
data
=
x
.
data
const
match
=
data
.
id
.
includes
(
this
.
search
)
||
data
.
name
.
includes
(
this
.
search
)
||
data
.
code
.
includes
(
this
.
search
);
const
match
=
data
.
id
.
toLowerCase
().
includes
(
this
.
search
)
||
data
.
name
.
toLowerCase
().
includes
(
this
.
search
)
||
data
.
code
.
toLowerCase
()
.
includes
(
this
.
search
);
return
match
;
return
match
;
});
});
}
}
se
lectCompetencytopic
(
data
?:
DataModel
)
{
se
tData
(
data
?:
DataModel
)
{
this
.
dataSelect
=
JSON
.
parse
(
JSON
.
stringify
(
data
||
{
id
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
definition
:
""
,
type
:
{
id
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
level
:
""
},
checked
:
false
}));
this
.
dataSelect
=
JSON
.
parse
(
JSON
.
stringify
(
data
||
{
id
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
definition
:
""
,
type
:
{
id
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
level
:
""
},
checked
:
false
}));
}
}
showSuccess
()
{
// ฟังก์ชันสำหรับการเพิ่ม ลบ หรือแก้ไข ข้อมูล
this
.
toastr
.
success
(
'บันทึกข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
addCompetency_topic
()
{
timeOut
:
3000
,
const
body
=
new
MyCompetencytopicModel
({
positionClass
:
'toast-top-right'
,
competencyTopicId
:
this
.
dataSelect
.
id
,
tdesc
:
this
.
dataSelect
.
name
,
edesc
:
this
.
dataSelect
.
edesc
,
competencyDetail
:
this
.
dataSelect
.
definition
,
});
competencyType
:
new
MyCompetencytypeModel
({
competencyTypeId
:
this
.
dataSelect
.
type
.
id
,
tdesc
:
this
.
dataSelect
.
type
.
name
,
edesc
:
this
.
dataSelect
.
type
.
edesc
,
shortName
:
this
.
dataSelect
.
type
.
code
,
expectationLevel
:
this
.
dataSelect
.
type
.
level
}),
})
this
.
competencytopicService
.
post
(
body
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
getCompetencytypeList
()
this
.
getCompetencytopicList
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
})
}
}
deleteCompetency_topic
()
{
showSuccessEdit
()
{
let
body
:
any
this
.
toastr
.
success
(
'เเก้ไขข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
if
(
this
.
modalStatus
==
"deleteGroup"
)
{
timeOut
:
3000
,
body
=
this
.
competoncyTopicList
.
filter
(
x
=>
x
.
check
).
map
(
x
=>
new
MyCompetencytopicModel
({
positionClass
:
'toast-top-right'
,
competencyTopicId
:
x
.
data
.
id
,
tdesc
:
x
.
data
.
name
,
edesc
:
x
.
data
.
edesc
,
competencyDetail
:
x
.
data
.
definition
,
});
competencyType
:
new
MyCompetencytypeModel
({
competencyTypeId
:
x
.
data
.
type
.
id
,
tdesc
:
x
.
data
.
type
.
name
,
edesc
:
x
.
data
.
type
.
edesc
,
shortName
:
x
.
data
.
type
.
code
,
expectationLevel
:
x
.
data
.
type
.
level
}),
}))
}
else
{
body
=
new
MyCompetencytopicModel
({
competencyTopicId
:
this
.
dataSelect
.
id
,
tdesc
:
this
.
dataSelect
.
name
,
edesc
:
this
.
dataSelect
.
edesc
,
competencyDetail
:
this
.
dataSelect
.
definition
,
competencyType
:
new
MyCompetencytypeModel
({
competencyTypeId
:
this
.
dataSelect
.
type
.
id
,
tdesc
:
this
.
dataSelect
.
type
.
name
,
edesc
:
this
.
dataSelect
.
type
.
edesc
,
shortName
:
this
.
dataSelect
.
type
.
code
,
expectationLevel
:
this
.
dataSelect
.
type
.
level
}),
})
}
console
.
log
(
body
)
this
.
competencytopicService
.
delete
(
body
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
getCompetencytypeList
()
this
.
getCompetencytopicList
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
})
}
}
show
SuccessDelete
(
)
{
show
Alert
(
text
:
string
,
type
:
'success'
|
'error'
)
{
this
.
toastr
.
success
(
'ลบข้อมูลสำเร็จ'
,
'เเ
จ้งเตือน'
,
{
this
.
toastr
[
type
](
text
,
'แ
จ้งเตือน'
,
{
timeOut
:
3000
,
timeOut
:
3000
,
positionClass
:
'toast-top-right'
,
positionClass
:
'toast-top-right'
,
})
;
})
}
}
}
}
src/app/components/competency-assessment/name-registration/name-registration.component.html
View file @
cd558547
...
@@ -10,22 +10,22 @@
...
@@ -10,22 +10,22 @@
<nav
class=
"-mb-0.5 flex space-x-6 rtl:space-x-reverse"
>
<nav
class=
"-mb-0.5 flex space-x-6 rtl:space-x-reverse"
>
<a
class=
"text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary active"
<a
class=
"text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary active"
href=
"javascript:void(0);"
id=
"underline-item-1"
data-hs-tab=
"#underline-1"
href=
"javascript:void(0);"
id=
"underline-item-1"
data-hs-tab=
"#underline-1"
aria-controls=
"underline-1"
(
click
)="
pathTitle =
['การประเมินสมรรถนะ','ทะเบียนกำหนดชื่อ','ประเภทสมรรถนะ']"
>
aria-controls=
"underline-1"
(
click
)="
currentPage =
1;
pathTitle
=
['การประเมินสมรรถนะ','ทะเบียนกำหนดชื่อ','ประเภทสมรรถนะ']"
>
ประเภทสมรรถนะ
ประเภทสมรรถนะ
</a>
</a>
<a
class=
"text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary"
<a
class=
"text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary"
href=
"javascript:void(0);"
id=
"underline-item-2"
data-hs-tab=
"#underline-2"
href=
"javascript:void(0);"
id=
"underline-item-2"
data-hs-tab=
"#underline-2"
aria-controls=
"underline-2"
(
click
)="
pathTitle =
['การประเมินสมรรถนะ','ทะเบียนกำหนดชื่อ','หัวข้อสมรรถนะ']"
>
aria-controls=
"underline-2"
(
click
)="
currentPage =
2;
pathTitle
=
['การประเมินสมรรถนะ','ทะเบียนกำหนดชื่อ','หัวข้อสมรรถนะ']"
>
หัวข้อสมรรถนะ
หัวข้อสมรรถนะ
</a>
</a>
</nav>
</nav>
</div>
</div>
<div
class=
"mt-3 px-3rem !-mt-3 pt-50px"
>
<div
class=
"mt-3 px-3rem !-mt-3 pt-50px"
>
<div
id=
"underline-1"
role=
"tabpanel"
aria-labelledby=
"underline-item-1"
>
<div
*
ngIf=
"currentPage == 1"
id=
"underline-1"
role=
"tabpanel"
aria-labelledby=
"underline-item-1"
>
<app-type-registration
[
pathTitle
]="
pathTitle
"
<app-type-registration
[
pathTitle
]="
pathTitle
"
(
sendPathTitle
)="
pathTitle=
$event"
></app-type-registration>
(
sendPathTitle
)="
pathTitle=
$event"
></app-type-registration>
</div>
</div>
<div
id=
"underline-2"
class=
"hidden"
role=
"tabpanel"
aria-labelledby=
"underline-item-2"
>
<div
*
ngIf=
"currentPage == 2"
id=
"underline-2"
class=
"hidden"
role=
"tabpanel"
aria-labelledby=
"underline-item-2"
>
<app-competency-topic
[
pathTitle
]="
pathTitle
"
<app-competency-topic
[
pathTitle
]="
pathTitle
"
(
sendPathTitle
)="
pathTitle=
$event"
></app-competency-topic>
(
sendPathTitle
)="
pathTitle=
$event"
></app-competency-topic>
</div>
</div>
...
...
src/app/components/competency-assessment/name-registration/name-registration.component.ts
View file @
cd558547
...
@@ -7,4 +7,5 @@ import { Component } from '@angular/core';
...
@@ -7,4 +7,5 @@ import { Component } from '@angular/core';
})
})
export
class
NameRegistrationComponent
{
export
class
NameRegistrationComponent
{
pathTitle
=
[
'การประเมินสมรรถนะ'
,
'ทะเบียนกำหนดชื่อ'
,
'ประเภทสมรรถนะ'
]
pathTitle
=
[
'การประเมินสมรรถนะ'
,
'ทะเบียนกำหนดชื่อ'
,
'ประเภทสมรรถนะ'
]
currentPage
=
1
}
}
src/app/components/competency-assessment/name-registration/type-registration/type-registration.component.html
View file @
cd558547
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
<div
class=
"flex gap-x-6"
>
<div
class=
"flex gap-x-6"
>
<div
class=
"flex items-center"
>
<div
class=
"flex items-center"
>
<label
for=
"hs-checkbox-group-1"
<label
for=
"hs-checkbox-group-1"
class=
"text-sm text-gray-500 ltr:ml-2 rtl:mr-2 dark:text-white/70"
>
{{
mockDataSelec
t.length}}
class=
"text-sm text-gray-500 ltr:ml-2 rtl:mr-2 dark:text-white/70"
>
{{
dataSelectLis
t.length}}
Selected
</label>
Selected
</label>
</div>
</div>
...
@@ -35,28 +35,24 @@
...
@@ -35,28 +35,24 @@
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
type=
"button"
<button
type=
"button"
class=
"ti-btn ti-btn bg-pink-500/10 text-pink-500 hover:text-white hover:bg-pink-500 ring-offset-white focus:ring-pink-500 dark:focus:ring-offset-white/10 h-10 m-0 shadow-md"
class=
"ti-btn ti-btn bg-pink-500/10 text-pink-500 hover:text-white hover:bg-pink-500 ring-offset-white focus:ring-pink-500 dark:focus:ring-offset-white/10 h-10 m-0 shadow-md"
data-hs-overlay=
"#type-registration-component-
modal-add
"
>
data-hs-overlay=
"#type-registration-component-
upload-modal
"
>
<i
class=
"ti ti-file-plus"
></i>
<i
class=
"ti ti-file-plus"
></i>
import
import
</button>
</button>
</div>
</div>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-10 m-0 shadow-md"
<button
type=
"button"
class=
"ti-btn ti-btn-soft-secondary h-10 m-0 shadow-md"
data-hs-overlay=
"#type-registration-component-
modal-add"
(
click
)="
selectCompetencytype
()"
>
data-hs-overlay=
"#type-registration-component-
page-modal"
(
click
)="
modalStatus=
'add'
;
setData
()"
>
<i
class=
"ri-add-line"
></i>
<i
class=
"ri-add-line"
></i>
Add
Add
</button>
</button>
</div>
</div>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
data-hs-overlay=
"#type-registration-component-page-alert-modal"
(
click
)="
modalStatus=
'deleteGroup'
;
setData
()"
>
<i
class=
"ri-delete-bin-6-line"
></i>
<i
class=
"ri-delete-bin-6-line"
></i>
Delete
Delete
</button>
</button>
<!-- <button href="javascript:void(0);" class="ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
data-hs-overlay="#type-registration-component-alert-delete-modal">
<i class="ri-delete-bin-6-line"></i>
Delete
</button> -->
</div>
</div>
<div
class=
"px-1"
>
<div
class=
"px-1"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-warning h-10 m-0 shadow-md"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-warning h-10 m-0 shadow-md"
>
...
@@ -105,19 +101,18 @@
...
@@ -105,19 +101,18 @@
<tr
<tr
*
ngFor=
"let item of dataListFilter()| slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index"
>
*
ngFor=
"let item of dataListFilter()| slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index"
>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<input
type=
"checkbox"
class=
"ti-form-checkbox cursor-pointer"
id=
"checkbox-{{item
.id}}"
<input
*
ngIf=
"item.data.id!='100'"
type=
"checkbox"
class=
"ti-form-checkbox cursor-pointer"
id=
"checkbox-{{item.data
.id}}"
[(
ngModel
)]="
item
.
check
ed
"
(
change
)="
checkSelect
()"
>
[(
ngModel
)]="
item
.
check
"
(
change
)="
checkSelect
()"
>
<label
for=
"checkbox-{{item.
id}}"
>
{{item
.id}}
</label>
<label
for=
"checkbox-{{item.
data.id}}"
>
{{item.data
.id}}
</label>
</td>
</td>
<td>
{{item.name}}
</td>
<td>
{{item.
data.
name}}
</td>
<td
class=
"text-center"
>
{{item.code}}
</td>
<td
class=
"text-center"
>
{{item.
data.
code}}
</td>
<td
class=
"flex justify-center"
>
<td
class=
"flex justify-center"
>
<i
class=
"ti ti-edit cursor-pointer i-gray fs-l px-1"
<i
class=
"ti ti-edit cursor-pointer i-gray fs-l px-1"
(
click
)="
modalStatus=
'edit'
;
setData
(
item
.
data
)"
data-hs-overlay=
"#type-registration-component-modal-edit"
data-hs-overlay=
"#type-registration-component-page-modal"
></i>
(
click
)="
selectCompetencytype
(
item
)"
></i>
<i
class=
"ti ti-trash cursor-pointer i-gray fs-l px-1"
*
ngIf=
"item.data.id!='100'"
<i
class=
"ti ti-trash cursor-pointer i-gray fs-l px-1"
(
click
)="
modalStatus=
'delete'
;
setData
(
item
.
data
)"
data-hs-overlay=
"#type-registration-component-alert-delete-modal"
data-hs-overlay=
"#type-registration-component-page-alert-modal"
></i>
(
click
)="
selectCompetencytype
(
item
)"
></i>
</td>
</td>
</tr>
</tr>
</tbody>
</tbody>
...
@@ -164,16 +159,16 @@
...
@@ -164,16 +159,16 @@
<div
id=
"type-registration-component-
modal-add
"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"type-registration-component-
page-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)]"
>
<div
class=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)]"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"ti-modal-header"
>
<div
class=
"ti-modal-header"
>
<h3
class=
"text-xxl font-bold text-primary"
>
<h3
class=
"text-xxl font-bold text-primary"
>
เพิ่มประเภทสมรรถนะ
{{modalStatus=='add'?'เพิ่มประเภทสมรรถนะ':'แก้ไขประเภทสมรรถนะ'}}
</h3>
</h3>
<div
class=
"flex justify-end"
>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#type-registration-component-
modal-add
"
>
data-hs-overlay=
"#type-registration-component-
page-modal
"
>
<span
class=
"sr-only"
>
Close
</span>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</button>
...
@@ -208,7 +203,7 @@
...
@@ -208,7 +203,7 @@
</div>
</div>
<div
class=
"ti-modal-body"
style=
"padding-top: 0px;"
>
<div
class=
"ti-modal-body"
style=
"padding-top: 0px;"
>
<label
for=
"input-label"
class=
"ti-form-label mt-1rem"
>
รหัส *
</label>
<label
for=
"input-label"
class=
"ti-form-label mt-1rem"
>
รหัส *
</label>
<input
type=
"text"
id=
"input-label"
class=
"ti-form-input w-1/2"
[(
ngModel
)]="
dataSelect
.
id
"
>
<input
type=
"text"
id=
"input-label"
class=
"ti-form-input w-1/2"
[
ngClass
]="{'
bg-input-readonly
'
:modalStatus=
='edit'}"
[
readonly
]="
modalStatus=
='edit'"
[
(
ngModel
)]="
dataSelect
.
id
"
>
<label
for=
"detail_th"
class=
"ti-form-label mt-1rem"
>
ชื่อประเภท (ไทย)*
</label>
<label
for=
"detail_th"
class=
"ti-form-label mt-1rem"
>
ชื่อประเภท (ไทย)*
</label>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input w-2/3"
[(
ngModel
)]="
dataSelect
.
name
"
>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input w-2/3"
[(
ngModel
)]="
dataSelect
.
name
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-1rem"
>
ชื่อประเภท (อังกฤษ)
</label>
<label
for=
"detail_eng"
class=
"ti-form-label mt-1rem"
>
ชื่อประเภท (อังกฤษ)
</label>
...
@@ -221,11 +216,11 @@
...
@@ -221,11 +216,11 @@
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#type-registration-component-
modal-add
"
>
data-hs-overlay=
"#type-registration-component-
page-modal
"
>
ย้อนกลับ
ย้อนกลับ
</button>
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#type-registration-component-alert-modal"
>
data-hs-overlay=
"#type-registration-component-
page-
alert-modal"
>
บันทึกข้อมูล
บันทึกข้อมูล
</a>
</a>
</div>
</div>
...
@@ -234,78 +229,7 @@
...
@@ -234,78 +229,7 @@
</div>
</div>
</div>
</div>
<div
id=
"type-registration-component-modal-edit"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"type-registration-component-page-alert-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)]"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content"
>
<div
class=
"ti-modal-header"
>
<h3
class=
"text-xxl font-bold text-primary"
>
เเก้ไขประเภทสมรรถนะ
</h3>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#type-registration-component-modal-edit"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</div>
</div>
<div
class=
"ti-modal-center"
>
<div
class=
"flex justify-end"
style=
"padding-right: 1rem;"
>
<div
class=
"px-1"
>
<button
type=
"button"
class=
"ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md"
>
<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"
transform=
"rotate(45)matrix(-1, 0, 0, 1, 0, 0)"
>
<g
id=
"SVGRepo_bgCarrier"
stroke-width=
"0"
></g>
<g
id=
"SVGRepo_tracerCarrier"
stroke-linecap=
"round"
stroke-linejoin=
"round"
></g>
<g
id=
"SVGRepo_iconCarrier"
>
<path
d=
"M15 49A24 24 0 0 1 32 8"
></path>
<path
d=
"M49 15a24 24 0 0 1-17 41"
></path>
<polyline
points=
"15.03 40 15.03 48.97 8 48.97"
></polyline>
<polyline
points=
"48.97 24 48.97 15.03 56 15.03"
></polyline>
</g>
</svg>
Clear
</button>
</div>
<div
class=
"px-1"
>
<button
href=
"javascript:void(0);"
class=
"ti-btn ti-btn-soft-warning h-45px m-0 shadow-md"
>
<i
class=
"ti ti-book fs-l"
></i>
Help
</button>
</div>
</div>
</div>
<div
class=
"ti-modal-body"
style=
"padding-top: 0px;"
>
<label
for=
"input-label"
class=
"ti-form-label mt-1rem"
>
รหัส *
</label>
<input
type=
"text"
id=
"input-label"
class=
"ti-form-input w-1/2"
[(
ngModel
)]="
dataSelect
.
id
"
>
<label
for=
"detail_th"
class=
"ti-form-label mt-1rem"
>
ชื่อประเภท (ไทย)*
</label>
<input
type=
"text"
id=
"detail_th"
class=
"ti-form-input w-2/3"
[(
ngModel
)]="
dataSelect
.
name
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-1rem"
>
ชื่อประเภท (อังกฤษ)
</label>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input w-2/3"
[(
ngModel
)]="
dataSelect
.
edesc
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-1rem"
>
ชื่อย่อ *
</label>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input w-2/3"
[(
ngModel
)]="
dataSelect
.
code
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-1rem"
>
ระดับความคาดหวัง *
</label>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input"
style=
"width: 200px;"
[(
ngModel
)]="
dataSelect
.
level
"
>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#type-registration-component-modal-edit"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#type-registration-component-alert-edit-modal"
>
บันทึกข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
<div
id=
"type-registration-component-alert-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=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] flex items-center"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<div
class=
"ti-modal-header"
>
<div
class=
"ti-modal-header"
>
...
@@ -313,99 +237,85 @@
...
@@ -313,99 +237,85 @@
แจ้งเตือน
แจ้งเตือน
</h3>
</h3>
<div
class=
"flex justify-end"
>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
data-hs-overlay=
"#type-registration-component-alert-modal"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
<span
class=
"sr-only"
>
Close
</span>
data-hs-overlay=
"#type-registration-component-page-alert-modal"
>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
<span
class=
"sr-only"
>
Close
</span>
</button>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</ng-container>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#type-registration-component-page-alert-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</ng-container>
</div>
</div>
</div>
</div>
<div
class=
"ti-modal-body "
>
<div
class=
"ti-modal-body "
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
ยืนยันการบันทึกข้อมูลหรือไม่
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
ยืนยันการบันทึกข้อมูลหรือไม่
</ng-container>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
ยืนยันการลบข้อมูลหรือไม่
</ng-container>
</p>
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
<ng-container
*
ngIf=
"modalStatus=='add'||modalStatus=='edit'"
>
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
<button
type=
"button"
data-hs-overlay=
"#type-registration-component-modal-add"
>
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
ย้อนกลับ
data-hs-overlay=
"#type-registration-component-page-modal"
>
</button>
ย้อนกลับ
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
</button>
data-hs-overlay=
"#type-registration-component-alert-modal"
(
click
)="
addUser
()"
>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
บันทึกข้อมูล
data-hs-overlay=
"#type-registration-component-page-alert-modal"
(
click
)="
addType_registration
()"
>
</a>
บันทึกข้อมูล
</a>
</ng-container>
<ng-container
*
ngIf=
"modalStatus=='delete'||modalStatus=='deleteGroup'"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#type-registration-component-page-alert-modal"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-danger"
href=
"javascript:void(0);"
data-hs-overlay=
"#type-registration-component-page-alert-modal"
(
click
)="
deleteType_registration
()"
>
ลบข้อมูล
</a>
</ng-container>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"type-registration-component-alert-edit-modal"
class=
"hs-overlay hidden ti-modal"
>
<div
id=
"type-registration-component-upload-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=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] rounded-md"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<div
class=
"ti-modal-header bg-primary !rounded-none !rounded-t-sm"
>
<div
class=
"ti-modal-header"
>
<h5
class=
"text-xxl font-bold text-white"
>
<h3
class=
"text-xxl font-bold text-primary"
>
นำเข้าฝ่าย
แจ้งเตือน
</h5>
</h3>
<div
class=
"flex justify-end"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#type-registration-component-alert-edit-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</div>
</div>
<div
class=
"ti-modal-body "
>
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
ยืนยันการเเก้ไขข้อมูลหรือไม่
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#type-registration-component-modal-edit"
>
ย้อนกลับ
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#type-registration-component-alert-edit-modal"
(
click
)="
addUser
()"
>
บันทึกข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
<div
class=
"ti-modal-body max-h-full overflow-hidden ti-modal-content !rounded-t-none !rounded-b-sm"
>
</div>
<h1
class=
"mt-2"
style=
"text-align: center;"
>
ไฟล์
</h1>
<div
id=
"type-registration-component-alert-delete-modal"
class=
"hs-overlay hidden ti-modal"
>
<div
class=
"mt-2 p-2"
>
<div
class=
"hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] flex items-center"
>
<div
class=
"flex rounded-md"
>
<div
class=
"max-h-full overflow-hidden ti-modal-content w-full"
>
<input
#
fileInput
type=
"file"
(
change
)="
onFileSelected
($
event
)"
hidden
>
<div
class=
"ti-modal-header"
>
<input
type=
"text"
[
value
]="
selectedFileName
"
readonly
(
click
)="
fileInput
.
click
()"
<h3
class=
"text-xxl font-bold text-primary"
>
class=
"ti-form-input rounded-none ltr:rounded-l-md rtl:rounded-r-md focus:z-10 cursor-pointer"
>
แจ้งเตือน
<button
type=
"button"
(
click
)="
fileInput
.
click
()"
</h3>
class=
"inline-flex flex-shrink-0 justify-center items-center h-[2.875rem] w-[2.875rem] ltr:rounded-r-md rtl:rounded-l-md border border-transparent font-semibold bg-secondary text-white hover:bg-secondary focus:z-10 focus:outline-none focus:ring-0 focus:ring-secondary transition-all text-sm"
>
<div
class=
"flex justify-end"
>
<i
class=
"ti ti-upload"
></i>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay=
"#type-registration-component-alert-delete-modal"
>
<span
class=
"sr-only"
>
Close
</span>
<i
class=
"ti ti-circle-x fs-xxl"
></i>
</button>
</button>
</div>
</div>
</div>
<div
class=
"flex justify-center mt-2rem mb-1rem space-x-4"
>
<div
class=
"ti-modal-body "
>
<button
type=
"submit"
class=
"ti-btn ti-btn-secondary"
(
click
)="
uploadFile
()"
<p
class=
"mt-1 text-gray-800 dark:text-white/70"
>
[
disabled
]="!
selectedFile
"
>
ยืนยันการลบข้อมูลหรือไม่!
อัปโหลด
</p>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay=
"#type-registration-component-alert-delete-modal"
>
ย้อนกลับ
</button>
</button>
<a
class=
"ti-btn ti-btn-success"
href=
"javascript:void(0);"
data-hs-overlay=
"#type-registration-component-alert-delete-modal"
(
click
)="
deleteUser
()"
>
ลบข้อมูล
</a>
</div>
</div>
</div>
</div>
</div>
</div>
...
...
src/app/components/competency-assessment/name-registration/type-registration/type-registration.component.ts
View file @
cd558547
import
{
ChangeDetectorRef
,
Component
,
EventEmitter
,
Input
,
Output
}
from
'@angular/core'
;
import
{
ChangeDetectorRef
,
Component
,
EventEmitter
,
Input
,
Output
}
from
'@angular/core'
;
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
MyCompetencytypeModel
}
from
'src/app/shared/model/competencytype.model'
;
import
{
CompetencytypeModel
,
MyCompetencytypeModel
}
from
'src/app/shared/model/competencytype.model'
;
import
{
CompetencytypeService
}
from
'src/app/shared/services/competencytype.service'
;
import
{
CompetencytypeService
}
from
'src/app/shared/services/competencytype.service'
;
import
{
FileService
}
from
'src/app/shared/services/file.service'
;
export
interface
DataModel
{
export
interface
DataModel
{
id
:
string
id
:
string
name
:
string
companyId
:
string
edesc
:
string
edesc
:
string
name
:
string
code
:
string
code
:
string
level
:
string
level
:
string
checked
:
boolean
checked
:
boolean
...
@@ -19,13 +21,6 @@ export class TypeRegistration {
...
@@ -19,13 +21,6 @@ export class TypeRegistration {
@
Input
()
pathTitle
=
[
'การประเมินสมรรถนะ'
,
'ทะเบียนกำหนดชื่อ'
,
'ประเภทสมรรถนะ'
];
@
Input
()
pathTitle
=
[
'การประเมินสมรรถนะ'
,
'ทะเบียนกำหนดชื่อ'
,
'ประเภทสมรรถนะ'
];
@
Output
()
sendPathTitle
:
EventEmitter
<
string
[]
>
=
new
EventEmitter
<
string
[]
>
();
@
Output
()
sendPathTitle
:
EventEmitter
<
string
[]
>
=
new
EventEmitter
<
string
[]
>
();
activeTab
:
string
=
'tab1'
;
// กำหนด tab เริ่มต้น
activeTab
:
string
=
'tab1'
;
// กำหนด tab เริ่มต้น
isChecked
:
boolean
=
false
;
currentPage
=
1
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
search
=
""
// ฟังก์ชันในการเปลี่ยนแท็บ
// ฟังก์ชันในการเปลี่ยนแท็บ
changeTab
(
tab
:
{
id
:
string
,
text
:
string
})
{
changeTab
(
tab
:
{
id
:
string
,
text
:
string
})
{
...
@@ -33,102 +28,98 @@ export class TypeRegistration {
...
@@ -33,102 +28,98 @@ export class TypeRegistration {
this
.
activeTab
=
tab
.
id
;
this
.
activeTab
=
tab
.
id
;
}
}
isChecked
:
boolean
=
false
;
currentPage
=
1
selectedItems
:
string
[]
=
[];
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
dataSelectList
:
DataModel
[]
=
[];
dataLoading
=
false
dataSelect
:
DataModel
=
{
id
:
""
,
companyId
:
""
,
edesc
:
""
,
name
:
""
,
code
:
""
,
level
:
""
,
checked
:
false
}
competoncy_typeList
:
{
check
:
boolean
;
data
:
DataModel
&
{
checked
?:
boolean
}
}[]
=
[]
competoncy_type
:
CompetencytypeModel
=
new
MyCompetencytypeModel
({})
modalStatus
=
'add'
search
=
""
selectedFile
:
File
|
null
=
null
;
selectedFileName
:
string
=
'กรุณาเลือกไฟล์'
;
constructor
(
private
competencytypeService
:
CompetencytypeService
,
private
toastr
:
ToastrService
,
private
cdr
:
ChangeDetectorRef
,
private
fileService
:
FileService
// การจัดการการเปิดปิด modal
)
{
}
modalOptions
:
{
ngOnInit
():
void
{
[
nameModal
:
string
]:
{
this
.
getCompetencytypeList
()
isModalOpen
:
boolean
;
modalSize
:
string
;
backdropClose
:
boolean
;
};
}
=
{
"add"
:
{
isModalOpen
:
false
,
modalSize
:
'm'
,
backdropClose
:
true
,
},
"edit"
:
{
isModalOpen
:
false
,
modalSize
:
'm'
,
backdropClose
:
true
,
}
};
toggleCheckbox
():
void
{
this
.
isChecked
=
!
this
.
isChecked
;
this
.
mockData
.
forEach
((
item
)
=>
{
item
.
checked
=
this
.
isChecked
;
});
this
.
checkSelect
();
}
}
mockData
:
DataModel
[]
=
[]
dataLoading
=
false
dataSelect
:
DataModel
=
{
id
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
level
:
""
,
checked
:
false
}
mockDataSelect
:
any
=
[]
checkSelect
()
{
checkSelect
()
{
this
.
mockDataSelect
=
this
.
mockData
.
filter
(
item
=>
item
.
checked
);
this
.
dataSelectList
=
this
.
competoncy_typeList
.
filter
(
item
=>
item
.
check
).
map
(
item
=>
item
.
data
);
}
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'
;
}
}
closeModal
(
name
:
string
)
{
toggleCheckbox
()
{
this
.
modalOptions
[
name
].
isModalOpen
=
false
;
this
.
isChecked
=
!
this
.
isChecked
;
// สลับสถานะ'
if
(
!
this
.
isAnyModalOpen
())
{
this
.
competoncy_typeList
.
forEach
((
item
)
=>
{
document
.
body
.
style
.
overflow
=
''
;
// คืนค่าการ Scroll เฉพาะเมื่อ Modal ทั้งหมดปิดแล้ว
item
.
check
=
this
.
isChecked
;
}
});
this
.
checkSelect
();
}
}
isAnyModalOpen
():
boolean
{
onFileSelected
(
event
:
any
)
{
return
Object
.
values
(
this
.
modalOptions
).
some
(
modal
=>
modal
.
isModalOpen
);
// ตรวจสอบว่า modal อื่นยังเปิดอยู่หรือไม่
this
.
selectedFile
=
event
.
target
.
files
.
length
>
0
?
event
.
target
.
files
[
0
]
:
null
;
this
.
selectedFileName
=
this
.
selectedFile
?.
name
||
"กรุณาเลือกไฟล์"
}
}
// ฟังก์ชันสำหรับการเพิ่ม ลบ หรือแก้ไข ข้อมูล
uploadFile
()
{
addUser
()
{
if
(
!
this
.
selectedFile
)
{
const
body
=
new
MyCompetencytypeModel
({
competencyTypeId
:
this
.
dataSelect
.
id
,
tdesc
:
this
.
dataSelect
.
name
,
edesc
:
this
.
dataSelect
.
edesc
,
shortName
:
this
.
dataSelect
.
code
,
expectationLevel
:
this
.
dataSelect
.
level
})
alert
(
'กรุณาเลือกไฟล์ก่อนอัปโหลด'
)
this
.
competencytypeService
.
post
(
body
).
subscribe
((
response
:
any
)
=>
{
return
if
(
response
.
success
)
{
}
this
.
showSuccess
()
const
formData
=
new
FormData
();
this
.
getCompetencytypeList
()
formData
.
append
(
'file'
,
this
.
selectedFile
);
this
.
fileService
.
upload
(
formData
,
'competency_type'
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
getCompetencytypeList
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
}
})
})
}
}
deleteUser
()
{
const
body
=
new
MyCompetencytypeModel
({
competencyTypeId
:
this
.
dataSelect
.
id
,
tdesc
:
this
.
dataSelect
.
name
,
edesc
:
this
.
dataSelect
.
edesc
,
shortName
:
this
.
dataSelect
.
code
,
expectationLevel
:
this
.
dataSelect
.
level
})
downloadFile
()
{
this
.
competencytypeService
.
delete
(
body
).
subscribe
((
response
:
any
)
=>
{
const
fileName
=
'IMPORT_COMPETENCY_TYPE.xlsx'
if
(
response
.
success
)
{
this
.
fileService
.
download
(
fileName
).
subscribe
({
this
.
showSuccessDelete
()
next
:
response
=>
{
this
.
getCompetencytypeList
()
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
);
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
}
})
})
}
}
currentModal
=
""
constructor
(
private
toastr
:
ToastrService
,
private
cdr
:
ChangeDetectorRef
,
private
competencytypeService
:
CompetencytypeService
)
{
}
ngOnInit
():
void
{
this
.
getCompetencytypeList
()
}
getCompetencytypeList
()
{
getCompetencytypeList
()
{
this
.
dataLoading
=
true
this
.
dataLoading
=
true
this
.
competencytypeService
.
getList
().
subscribe
({
this
.
competencytypeService
.
getList
().
subscribe
({
next
:
response
=>
{
next
:
response
=>
{
this
.
mockData
=
response
.
map
(
x
=>
({
id
:
x
.
competencyTypeId
,
name
:
x
.
tdesc
,
edesc
:
x
.
edesc
,
code
:
x
.
shortName
,
level
:
x
.
expectationLevel
,
checked
:
false
}))
this
.
competoncy_typeList
=
response
.
map
(
x
=>
({
check
:
false
,
data
:
{
id
:
x
.
competencyTypeId
,
companyId
:
x
.
companyId
,
edesc
:
x
.
edesc
,
name
:
x
.
tdesc
,
code
:
x
.
shortName
,
level
:
x
.
expectationLevel
,
checked
:
false
}
}))
this
.
dataLoading
=
false
this
.
dataLoading
=
false
this
.
searchChange
()
this
.
searchChange
()
this
.
cdr
.
detectChanges
()
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
},
error
:
error
=>
{
this
.
dataLoading
=
false
this
.
dataLoading
=
false
console
.
error
(
'Error fetching employee types:'
,
error
);
this
.
cdr
.
detectChanges
()
this
.
cdr
.
detectChanges
()
}
}
})
})
...
@@ -138,33 +129,60 @@ export class TypeRegistration {
...
@@ -138,33 +129,60 @@ export class TypeRegistration {
this
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
dataListFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
dataListFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
dataListFilter
()
{
dataListFilter
()
{
return
this
.
mockData
.
filter
(
x
=>
{
return
this
.
competoncy_typeList
.
filter
(
x
=>
{
const
data
=
x
const
data
=
x
.
data
const
match
=
data
.
id
.
includes
(
this
.
search
)
||
data
.
name
.
includes
(
this
.
search
)
||
data
.
code
.
includes
(
this
.
search
);
const
match
=
data
.
id
.
toLowerCase
().
includes
(
this
.
search
)
||
data
.
name
.
toLowerCase
().
includes
(
this
.
search
)
||
data
.
code
.
toLowerCase
()
.
includes
(
this
.
search
);
return
match
;
return
match
;
});
});
}
}
se
lectCompetencytype
(
data
?:
DataModel
)
{
se
tData
(
data
?:
DataModel
)
{
this
.
dataSelect
=
JSON
.
parse
(
JSON
.
stringify
(
data
||
{
id
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
level
:
""
,
checked
:
false
}));
this
.
dataSelect
=
JSON
.
parse
(
JSON
.
stringify
(
data
||
{
id
:
""
,
companyId
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
level
:
""
}));
}
}
showSuccess
()
{
// ฟังก์ชันสำหรับการเพิ่ม ลบ หรือแก้ไข ข้อมูล
this
.
toastr
.
success
(
'บันทึกข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
addType_registration
()
{
timeOut
:
3000
,
const
body
=
new
MyCompetencytypeModel
({
competencyTypeId
:
this
.
dataSelect
.
id
,
tdesc
:
this
.
dataSelect
.
name
,
edesc
:
this
.
dataSelect
.
edesc
,
shortName
:
this
.
dataSelect
.
code
,
expectationLevel
:
this
.
dataSelect
.
level
})
positionClass
:
'toast-top-right'
,
this
.
competencytypeService
.
post
(
body
).
subscribe
({
});
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
getCompetencytypeList
()
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
)
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
})
}
}
showSuccessEdit
()
{
deleteType_registration
()
{
this
.
toastr
.
success
(
'เเก้ไขข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
let
body
:
CompetencytypeModel
|
CompetencytypeModel
[]
=
[];
timeOut
:
3000
,
positionClass
:
'toast-top-right'
,
if
(
this
.
dataSelect
.
id
)
{
body
=
new
MyCompetencytypeModel
({
competencyTypeId
:
this
.
dataSelect
.
id
,
tdesc
:
this
.
dataSelect
.
name
,
edesc
:
this
.
dataSelect
.
edesc
,
shortName
:
this
.
dataSelect
.
code
,
expectationLevel
:
this
.
dataSelect
.
level
});
}
else
{
body
=
this
.
competoncy_typeList
.
filter
(
x
=>
x
.
check
).
map
(
x
=>
new
MyCompetencytypeModel
({
competencyTypeId
:
x
.
data
.
id
,
tdesc
:
x
.
data
.
name
,
edesc
:
x
.
data
.
edesc
,
shortName
:
x
.
data
.
code
,
expectationLevel
:
x
.
data
.
level
}));
}
this
.
competencytypeService
.
delete
(
body
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
this
.
showAlert
(
response
.
message
,
'success'
);
this
.
getCompetencytypeList
();
}
else
{
this
.
showAlert
(
response
.
message
,
'error'
);
}
},
error
:
error
=>
{
this
.
showAlert
(
error
.
message
,
'error'
)
}
});
});
}
}
showSuccessDelete
()
{
this
.
toastr
.
success
(
'ลบข้อมูลสำเร็จ'
,
'เเจ้งเตือน'
,
{
showAlert
(
text
:
string
,
type
:
'success'
|
'error'
)
{
this
.
toastr
[
type
](
text
,
'แจ้งเตือน'
,
{
timeOut
:
3000
,
timeOut
:
3000
,
positionClass
:
'toast-top-right'
,
positionClass
:
'toast-top-right'
,
})
;
})
}
}
}
}
src/app/shared/services/competencytopic.service.ts
View file @
cd558547
...
@@ -3,6 +3,7 @@ import { Injectable } from '@angular/core';
...
@@ -3,6 +3,7 @@ import { Injectable } from '@angular/core';
import
{
Observable
}
from
'rxjs'
;
import
{
Observable
}
from
'rxjs'
;
import
{
environment
}
from
'src/environments/environment'
;
import
{
environment
}
from
'src/environments/environment'
;
import
{
CompetencytopicModel
}
from
'../model/competencytopic.model'
;
import
{
CompetencytopicModel
}
from
'../model/competencytopic.model'
;
import
{
AlertModel
}
from
'../model/alert.model'
;
@
Injectable
({
@
Injectable
({
providedIn
:
'root'
providedIn
:
'root'
})
})
...
@@ -17,16 +18,16 @@ export class CompetencytopicService {
...
@@ -17,16 +18,16 @@ export class CompetencytopicService {
getList
():
Observable
<
CompetencytopicModel
[]
>
{
getList
():
Observable
<
CompetencytopicModel
[]
>
{
return
this
.
http
.
get
<
CompetencytopicModel
[]
>
(
this
.
urlApi
+
"/lists"
)
return
this
.
http
.
get
<
CompetencytopicModel
[]
>
(
this
.
urlApi
+
"/lists"
)
}
}
post
(
body
:
CompetencytopicModel
)
{
post
(
body
:
CompetencytopicModel
)
:
Observable
<
AlertModel
>
{
return
this
.
http
.
post
(
this
.
urlApi
,
body
)
return
this
.
http
.
post
<
AlertModel
>
(
this
.
urlApi
,
body
)
}
}
delete
(
body
:
CompetencytopicModel
)
{
delete
(
body
:
CompetencytopicModel
|
CompetencytopicModel
[]):
Observable
<
AlertModel
>
{
const
options
=
{
const
options
=
{
headers
:
new
HttpHeaders
({
headers
:
new
HttpHeaders
({
"Content-Type"
:
"application/json"
,
"Content-Type"
:
"application/json"
,
}),
}),
body
:
body
body
:
body
};
};
return
this
.
http
.
delete
(
this
.
urlApi
,
options
)
return
this
.
http
.
delete
<
AlertModel
>
(
this
.
urlApi
,
options
)
}
}
}
}
\ No newline at end of file
src/app/shared/services/competencytype.service.ts
View file @
cd558547
...
@@ -3,6 +3,8 @@ import { Injectable } from '@angular/core';
...
@@ -3,6 +3,8 @@ import { Injectable } from '@angular/core';
import
{
Observable
}
from
'rxjs'
;
import
{
Observable
}
from
'rxjs'
;
import
{
environment
}
from
'src/environments/environment'
;
import
{
environment
}
from
'src/environments/environment'
;
import
{
CompetencytypeModel
}
from
'../model/competencytype.model'
;
import
{
CompetencytypeModel
}
from
'../model/competencytype.model'
;
import
{
AlertModel
}
from
'../model/alert.model'
;
import
{
EmpGroupModel
}
from
'../model/emp-group.model'
;
@
Injectable
({
@
Injectable
({
providedIn
:
'root'
providedIn
:
'root'
})
})
...
@@ -17,16 +19,16 @@ export class CompetencytypeService {
...
@@ -17,16 +19,16 @@ export class CompetencytypeService {
getList
():
Observable
<
CompetencytypeModel
[]
>
{
getList
():
Observable
<
CompetencytypeModel
[]
>
{
return
this
.
http
.
get
<
CompetencytypeModel
[]
>
(
this
.
urlApi
+
"/lists"
)
return
this
.
http
.
get
<
CompetencytypeModel
[]
>
(
this
.
urlApi
+
"/lists"
)
}
}
post
(
body
:
CompetencytypeModel
)
{
post
(
body
:
CompetencytypeModel
):
Observable
<
AlertModel
>
{
return
this
.
http
.
post
(
this
.
urlApi
,
body
)
return
this
.
http
.
post
<
AlertModel
>
(
this
.
urlApi
,
body
)
}
}
delete
(
body
:
CompetencytypeModel
)
{
delete
(
body
:
CompetencytypeModel
|
CompetencytypeModel
[]):
Observable
<
AlertModel
>
{
const
options
=
{
const
options
=
{
headers
:
new
HttpHeaders
({
headers
:
new
HttpHeaders
({
"Content-Type"
:
"application/json"
,
"Content-Type"
:
"application/json"
,
}),
}),
body
:
body
body
:
body
};
};
return
this
.
http
.
delete
(
this
.
urlApi
,
options
)
return
this
.
http
.
delete
<
AlertModel
>
(
this
.
urlApi
,
options
)
}
}
}
}
\ No newline at end of file
src/app/shared/services/emp-group.service.ts
View file @
cd558547
...
@@ -19,18 +19,6 @@ export class EmpGroupService {
...
@@ -19,18 +19,6 @@ export class EmpGroupService {
getById
(
groupId
:
string
):
Observable
<
EmpGroupModel
>
{
getById
(
groupId
:
string
):
Observable
<
EmpGroupModel
>
{
return
this
.
http
.
get
<
EmpGroupModel
>
(
this
.
urlApi
+
"/"
+
groupId
)
return
this
.
http
.
get
<
EmpGroupModel
>
(
this
.
urlApi
+
"/"
+
groupId
)
}
}
// post(body: EmpGroupModel) {
// return this.http.post(this.urlApi, body)
// }
// delete(body: EmpGroupModel) {
// const options = {
// headers: new HttpHeaders({
// "Content-Type": "application/json",
// }),
// body: body
// };
// return this.http.delete(this.urlApi, options)
// }
post
(
body
:
EmpGroupModel
):
Observable
<
AlertModel
>
{
post
(
body
:
EmpGroupModel
):
Observable
<
AlertModel
>
{
return
this
.
http
.
post
<
AlertModel
>
(
this
.
urlApi
,
body
)
return
this
.
http
.
post
<
AlertModel
>
(
this
.
urlApi
,
body
)
}
}
...
...
src/app/shared/services/position.service.ts
View file @
cd558547
...
@@ -19,18 +19,6 @@ import { AlertModel } from '../model/alert.model';
...
@@ -19,18 +19,6 @@ import { AlertModel } from '../model/alert.model';
getList
():
Observable
<
PositionModel
[]
>
{
getList
():
Observable
<
PositionModel
[]
>
{
return
this
.
http
.
get
<
PositionModel
[]
>
(
this
.
urlApi
+
"/lists"
)
return
this
.
http
.
get
<
PositionModel
[]
>
(
this
.
urlApi
+
"/lists"
)
}
}
// post(body: PositionModel) {
// return this.http.post(this.urlApi, body)
// }
// delete(body: PositionModel) {
// const options = {
// headers: new HttpHeaders({
// "Content-Type": "application/json",
// }),
// body: body
// };
// return this.http.delete(this.urlApi, options)
// }
post
(
body
:
PositionModel
):
Observable
<
AlertModel
>
{
post
(
body
:
PositionModel
):
Observable
<
AlertModel
>
{
return
this
.
http
.
post
<
AlertModel
>
(
this
.
urlApi
,
body
)
return
this
.
http
.
post
<
AlertModel
>
(
this
.
urlApi
,
body
)
}
}
...
...
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