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
0ede5a33
Commit
0ede5a33
authored
Oct 20, 2025
by
Nattana Chaiyamat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ภาษาไทย อังกฤษ
parent
8e8e7ae4
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
69 additions
and
63 deletions
+69
-63
pms-idp.component.html
...aluation/pms-form-employee/pms-idp/pms-idp.component.html
+10
-8
pms-idp.component.ts
...evaluation/pms-form-employee/pms-idp/pms-idp.component.ts
+59
-55
No files found.
src/app/components/performance-evaluation/pms-form-employee/pms-idp/pms-idp.component.html
View file @
0ede5a33
...
...
@@ -38,21 +38,22 @@
<td
class=
"font-medium !p-2 align-start"
>
{{'NameSurname' | translate}}
</td>
<td
class=
"!p-2 align-start"
>
:
</td>
<td
class=
"font-medium !p-2 align-start"
>
{{appraisalIdp.apsassessy.thFullName || ''}}
{{translateText(appraisalIdp.apsassessy.thFullName,appraisalIdp.apsassessy.engFullName
)}}
</td>
</tr>
<tr
class=
"!border-0"
>
<td
class=
"font-medium !p-2 align-start"
>
{{'Position' | translate}}
</td>
<td
class=
"!p-2 align-start"
>
:
</td>
<td
class=
"font-medium !p-2 align-start !text-warp"
>
{{
appraisalIdp.apsassessy.position.tdesc || ''
}}
{{
translateText(appraisalIdp.apsassessy.position.tdesc,appraisalIdp.apsassessy.position.tdesc)
}}
</td>
</tr>
<tr
class=
"!border-0"
>
<td
class=
"font-medium !p-2 align-start"
>
{{'Job' | translate}}
</td>
<td
class=
"!p-2 align-start"
>
:
</td>
<td
class=
"font-medium !p-2 align-start !text-warp"
>
{{
appraisalIdp.apsassessy.job.tdesc || ""
}}
{{
translateText(appraisalIdp.apsassessy.job.tdesc,appraisalIdp.apsassessy.job.tdesc)
}}
</td>
</tr>
<tr
class=
"!border-0"
>
...
...
@@ -60,7 +61,7 @@
</td>
<td
class=
"!p-2 align-start"
>
:
</td>
<td
class=
"font-medium !p-2 align-start !text-warp"
>
{{
appraisalIdp.apsassessy.bu1.tdesc
}}
{{
translateText(appraisalIdp.apsassessy.bu1.tdesc,appraisalIdp.apsassessy.bu1.edesc)
}}
</td>
</tr>
</tbody>
...
...
@@ -80,21 +81,22 @@
<td
class=
"font-medium !p-2 align-start"
>
{{'NameSurname' | translate}}
</td>
<td
class=
"!p-2 align-start"
>
:
</td>
<td
class=
"font-medium !p-2 align-start"
>
{{appraisalIdp.boss.thFullName || ''}}
{{translateText(appraisalIdp.boss.thFullName,appraisalIdp.boss.engFullName
)}}
</td>
</tr>
<tr
class=
"!border-0"
>
<td
class=
"font-medium !p-2 align-start"
>
{{'Position' | translate}}
</td>
<td
class=
"!p-2 align-start"
>
:
</td>
<td
class=
"font-medium !p-2 align-start !text-warp"
>
{{
appraisalIdp.boss.position.tdesc || ''
}}
{{
translateText(appraisalIdp.boss.position.tdesc,appraisalIdp.boss.position.edesc)
}}
</td>
</tr>
<tr
class=
"!border-0"
>
<td
class=
"font-medium !p-2 align-start"
>
{{'Job' | translate}}
</td>
<td
class=
"!p-2 align-start"
>
:
</td>
<td
class=
"font-medium !p-2 align-start !text-warp"
>
{{
appraisalIdp.boss.job.tdesc || ""
}}
{{
translateText(appraisalIdp.boss.job.tdesc,appraisalIdp.boss.job.edesc)
}}
</td>
</tr>
<tr
class=
"!border-0"
>
...
...
@@ -102,7 +104,7 @@
</td>
<td
class=
"!p-2 align-start"
>
:
</td>
<td
class=
"font-medium !p-2 align-start !text-warp"
>
{{
appraisalIdp.boss.bu1.tdesc
}}
{{
translateText(appraisalIdp.boss.bu1.tdesc,appraisalIdp.boss.bu1.edesc)
}}
</td>
</tr>
</tbody>
...
...
src/app/components/performance-evaluation/pms-form-employee/pms-idp/pms-idp.component.ts
View file @
0ede5a33
import
{
ChangeDetectorRef
,
Component
,
ElementRef
,
EventEmitter
,
Input
,
Output
,
SimpleChanges
,
ViewChild
}
from
'@angular/core'
;
import
{
MatDialog
}
from
'@angular/material/dialog'
;
import
{
TranslateService
}
from
'@ngx-translate/core'
;
import
{
Idp
}
from
'src/app/shared/model/competency.model'
;
import
{
CompetencycourseMiniModel
,
MyCompetencycourseMiniModel
}
from
'src/app/shared/model/competencycourse-mini.model'
;
import
{
IdpFormModel
}
from
'src/app/shared/model/idp-form.model'
;
...
...
@@ -52,6 +53,7 @@ export class PmsIdpComponent {
@
ViewChild
(
"competencycourseModal"
)
competencycourseModal
:
any
;
dialogRefCompetencycourseModal
:
any
constructor
(
private
evaluationIdpService
:
EvaluationIdpService
,
private
translateService
:
TranslateService
,
private
employeeService
:
EmployeeService
,
private
competencycourseService
:
CompetencycourseService
,
private
cdr
:
ChangeDetectorRef
,
...
...
@@ -342,63 +344,65 @@ export class PmsIdpComponent {
// }
async
exportPdf
()
{
this
.
pdfPrintCheck
=
1
;
const
el
=
this
.
pdfArea
?.
nativeElement
;
if
(
!
el
)
return
;
// 👉 ลบ shadow ออกจากทุก element ที่มี shadow class
const
shadowEls
=
el
.
querySelectorAll
(
'.shadow'
);
shadowEls
.
forEach
(
e
=>
e
.
classList
.
remove
(
'shadow'
));
const
mod
:
any
=
await
import
(
'html2pdf.js'
);
const
html2pdf
=
mod
.
default
??
mod
;
const
cleanupScale
=
this
.
expandToFullWidthThenScale
(
el
);
const
cleanupUnclip
=
this
.
unclipOverflows
(
el
);
const
prevBodyOverflow
=
document
.
body
.
style
.
overflow
;
document
.
body
.
style
.
overflow
=
'hidden'
;
const
fullW
=
el
.
scrollWidth
;
const
fullH
=
el
.
scrollHeight
;
const
epsilon
=
2
;
const
opt
=
{
margin
:
[
10
,
10
,
10
,
10
],
filename
:
`pms-
${
this
.
evaluateeId
||
'employee'
}
-
${
new
Date
().
toISOString
().
slice
(
0
,
10
)}
.pdf`
,
image
:
{
type
:
'jpeg'
,
quality
:
0.96
},
html2canvas
:
{
scale
:
2
,
useCORS
:
true
,
logging
:
false
,
scrollX
:
0
,
scrollY
:
-
window
.
scrollY
,
width
:
800
,
height
:
Math
.
max
(
0
,
fullH
-
epsilon
),
windowWidth
:
800
,
windowHeight
:
Math
.
max
(
0
,
fullH
-
epsilon
),
},
jsPDF
:
{
unit
:
'mm'
,
format
:
'a4'
,
orientation
:
'portrait'
},
pagebreak
:
{
mode
:
[
'css'
,
'legacy'
],
avoid
:
[
'.no-break'
,
'table'
,
'img'
]
},
onclone
:
(
doc
:
any
)
=>
{
doc
.
querySelectorAll
(
'[data-hide-in-pdf]'
).
forEach
((
el
:
any
)
=>
el
.
remove
());
},
};
try
{
await
html2pdf
().
from
(
el
).
set
(
opt
).
save
();
}
finally
{
cleanupUnclip
();
cleanupScale
();
document
.
body
.
style
.
overflow
=
prevBodyOverflow
;
// 👉 คืน class shadow กลับ
shadowEls
.
forEach
(
e
=>
e
.
classList
.
add
(
'shadow'
));
}
this
.
pdfPrintCheck
=
1
;
const
el
=
this
.
pdfArea
?.
nativeElement
;
if
(
!
el
)
return
;
// 👉 ลบ shadow ออกจากทุก element ที่มี shadow class
const
shadowEls
=
el
.
querySelectorAll
(
'.shadow'
);
shadowEls
.
forEach
(
e
=>
e
.
classList
.
remove
(
'shadow'
));
const
mod
:
any
=
await
import
(
'html2pdf.js'
);
const
html2pdf
=
mod
.
default
??
mod
;
const
cleanupScale
=
this
.
expandToFullWidthThenScale
(
el
);
const
cleanupUnclip
=
this
.
unclipOverflows
(
el
);
const
prevBodyOverflow
=
document
.
body
.
style
.
overflow
;
document
.
body
.
style
.
overflow
=
'hidden'
;
const
fullW
=
el
.
scrollWidth
;
const
fullH
=
el
.
scrollHeight
;
const
epsilon
=
2
;
const
opt
=
{
margin
:
[
10
,
10
,
10
,
10
],
filename
:
`pms-
${
this
.
evaluateeId
||
'employee'
}
-
${
new
Date
().
toISOString
().
slice
(
0
,
10
)}
.pdf`
,
image
:
{
type
:
'jpeg'
,
quality
:
0.96
},
html2canvas
:
{
scale
:
2
,
useCORS
:
true
,
logging
:
false
,
scrollX
:
0
,
scrollY
:
-
window
.
scrollY
,
width
:
800
,
height
:
Math
.
max
(
0
,
fullH
-
epsilon
),
windowWidth
:
800
,
windowHeight
:
Math
.
max
(
0
,
fullH
-
epsilon
),
},
jsPDF
:
{
unit
:
'mm'
,
format
:
'a4'
,
orientation
:
'portrait'
},
pagebreak
:
{
mode
:
[
'css'
,
'legacy'
],
avoid
:
[
'.no-break'
,
'table'
,
'img'
]
},
onclone
:
(
doc
:
any
)
=>
{
doc
.
querySelectorAll
(
'[data-hide-in-pdf]'
).
forEach
((
el
:
any
)
=>
el
.
remove
());
},
};
this
.
pdfPrintCheck
=
0
;
}
try
{
await
html2pdf
().
from
(
el
).
set
(
opt
).
save
();
}
finally
{
cleanupUnclip
();
cleanupScale
();
document
.
body
.
style
.
overflow
=
prevBodyOverflow
;
// 👉 คืน class shadow กลับ
shadowEls
.
forEach
(
e
=>
e
.
classList
.
add
(
'shadow'
));
}
this
.
pdfPrintCheck
=
0
;
}
translateText
(
th
?:
string
,
en
?:
string
)
{
return
this
.
translateService
.
getCurrentLang
()
==
'th'
?
(
th
||
''
)
:
(
en
||
''
)
}
}
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