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
a695ebf3
Commit
a695ebf3
authored
Jul 15, 2025
by
Nattana Chaiyamat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
แก้ไข รายงาน Excel portal
parent
ee133ebf
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
820 additions
and
199 deletions
+820
-199
package-lock.json
package-lock.json
+209
-144
package.json
package.json
+12
-10
dashboard.module.ts
src/app/components/dashboard/dashboard.module.ts
+36
-2
datagrid-syncfution.component.ts
...ents/datagrid-syncfution/datagrid-syncfution.component.ts
+18
-0
excel-report.component.html
src/app/components/excel-report/excel-report.component.html
+77
-9
excel-report.component.ts
src/app/components/excel-report/excel-report.component.ts
+186
-6
pivot-syncfution.component.html
...mponents/pivot-syncfution/pivot-syncfution.component.html
+5
-0
pivot-syncfution.component.scss
...mponents/pivot-syncfution/pivot-syncfution.component.scss
+48
-0
pivot-syncfution.component.ts
...components/pivot-syncfution/pivot-syncfution.component.ts
+86
-0
custom-cube.service.ts
src/app/shared/services/custom-cube.service.ts
+40
-0
main.ts
src/main.ts
+2
-1
styles.scss
src/styles.scss
+101
-27
No files found.
package-lock.json
View file @
a695ebf3
...
@@ -28,16 +28,18 @@
...
@@ -28,16 +28,18 @@
"@ng-select/ng-select"
:
"^11.0.0"
,
"@ng-select/ng-select"
:
"^11.0.0"
,
"@ngrx/store"
:
"^16.0.1"
,
"@ngrx/store"
:
"^16.0.1"
,
"@swimlane/ngx-charts"
:
"^20.4.1"
,
"@swimlane/ngx-charts"
:
"^20.4.1"
,
"@syncfusion/ej2-angular-base"
:
"26.2.10"
,
"@syncfusion/ej2-angular-base"
:
"^29.2.4"
,
"@syncfusion/ej2-angular-dropdowns"
:
"26.2.13"
,
"@syncfusion/ej2-angular-charts"
:
"^29.2.4"
,
"@syncfusion/ej2-angular-grids"
:
"26.2.14"
,
"@syncfusion/ej2-angular-dropdowns"
:
"^29.2.4"
,
"@syncfusion/ej2-angular-inputs"
:
"26.2.14"
,
"@syncfusion/ej2-angular-grids"
:
"^29.2.4"
,
"@syncfusion/ej2-base"
:
"26.2.10"
,
"@syncfusion/ej2-angular-inputs"
:
"^29.2.4"
,
"@syncfusion/ej2-buttons"
:
"26.2.10"
,
"@syncfusion/ej2-angular-pivotview"
:
"^29.2.4"
,
"@syncfusion/ej2-data"
:
"26.2.14"
,
"@syncfusion/ej2-base"
:
"^29.2.4"
,
"@syncfusion/ej2-dropdowns"
:
"26.2.13"
,
"@syncfusion/ej2-buttons"
:
"^29.2.4"
,
"@syncfusion/ej2-grids"
:
"26.2.14"
,
"@syncfusion/ej2-data"
:
"^29.2.4"
,
"@syncfusion/ej2-inputs"
:
"26.2.14"
,
"@syncfusion/ej2-dropdowns"
:
"^29.2.4"
,
"@syncfusion/ej2-grids"
:
"^29.2.4"
,
"@syncfusion/ej2-inputs"
:
"^29.2.4"
,
"@tailwindcss/forms"
:
"^0.5.3"
,
"@tailwindcss/forms"
:
"^0.5.3"
,
"angular-calendar"
:
"^0.31.0"
,
"angular-calendar"
:
"^0.31.0"
,
"angular2-multiselect-dropdown"
:
"^5.0.4"
,
"angular2-multiselect-dropdown"
:
"^5.0.4"
,
...
@@ -6392,219 +6394,282 @@
...
@@ -6392,219 +6394,282 @@
}
}
},
},
"node_modules/@syncfusion/ej2-angular-base"
:
{
"node_modules/@syncfusion/ej2-angular-base"
:
{
"version"
:
"2
6
.2.10"
,
"version"
:
"2
9
.2.10"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-angular-base/-/ej2-angular-base-2
6
.2.10.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-angular-base/-/ej2-angular-base-2
9
.2.10.tgz"
,
"integrity"
:
"sha512-
Qf088nJx9WgWs+h52QnW3HRTWgoGBuhS2Lx4XxXmohbOLnc91KlsG8Fjwq6hRhm1nxEQvaYnY7jTjtIr1lyong
=="
,
"integrity"
:
"sha512-
jU9K1pybX7CLEkWO7ufQmGKuSBWl1rsUOm9x04BLonGNUp6fSUXOqN1niruhhOE1ZlSHGqzKp1PTjR6EmMe6Xw
=="
,
"hasInstallScript"
:
true
,
"hasInstallScript"
:
true
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~26.2.10"
,
"@syncfusion/ej2-base"
:
"~29.2.4"
,
"@syncfusion/ej2-icons"
:
"~26.2.10"
"@syncfusion/ej2-icons"
:
"~29.2.4"
}
},
"node_modules/@syncfusion/ej2-angular-charts"
:
{
"version"
:
"29.2.11"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-angular-charts/-/ej2-angular-charts-29.2.11.tgz"
,
"integrity"
:
"sha512-cO4vSTpDQxy4rdvEb1OlSRT2270YCBAUH9pdz9EhZI4lz3XCgcXL/ztv4D3V2MggvPQWU9yOpqjKv1Hg9EwrvQ=="
,
"dependencies"
:
{
"@syncfusion/ej2-angular-base"
:
"~29.2.10"
,
"@syncfusion/ej2-base"
:
"~29.2.11"
,
"@syncfusion/ej2-charts"
:
"29.2.11"
}
}
},
},
"node_modules/@syncfusion/ej2-angular-dropdowns"
:
{
"node_modules/@syncfusion/ej2-angular-dropdowns"
:
{
"version"
:
"2
6.2.13
"
,
"version"
:
"2
9.2.11
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-angular-dropdowns/-/ej2-angular-dropdowns-2
6.2.13
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-angular-dropdowns/-/ej2-angular-dropdowns-2
9.2.11
.tgz"
,
"integrity"
:
"sha512-
VC47xbgnwqrZOlRwXc+jqm70JklMF8oDmce76afPm1hRX2A7jSJiZt11T5o4+PQOUXrD5mcwvyruZRgyhbZ0Xw
=="
,
"integrity"
:
"sha512-
RHqkitoaf+d34iBJJSbrbvB+9+B1ILPxYzxR0V+k/wThMd6XXYN8/vCO3g0KrG9vRB/OGOY6JjRJ5YPG9sP2/g
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-angular-base"
:
"~26.2.10"
,
"@syncfusion/ej2-angular-base"
:
"~29.2.10"
,
"@syncfusion/ej2-base"
:
"~26.2.10"
,
"@syncfusion/ej2-base"
:
"~29.2.11"
,
"@syncfusion/ej2-dropdowns"
:
"26.2.13"
,
"@syncfusion/ej2-dropdowns"
:
"29.2.11"
"tslib"
:
"^2.3.0"
}
}
},
},
"node_modules/@syncfusion/ej2-angular-grids"
:
{
"node_modules/@syncfusion/ej2-angular-grids"
:
{
"version"
:
"2
6.2.14
"
,
"version"
:
"2
9.2.11
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-angular-grids/-/ej2-angular-grids-2
6.2.14
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-angular-grids/-/ej2-angular-grids-2
9.2.11
.tgz"
,
"integrity"
:
"sha512-
PUY0j4+SIMnJR2h/txj9HmtHnjk/s7Qjd0LthFyNfZQnUXmUPezON0fMWokeRb8Fi1qokjCSASKtc/pGu/2uGw
=="
,
"integrity"
:
"sha512-
b3LEMk0ol6+crlYtslaPsKGiVoS/XFU/M/koNiyxuX932qntjhMhyPQQW1sYap96u3lzTW9wef6/Y3aye7qnqQ
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-angular-base"
:
"~26.2.10"
,
"@syncfusion/ej2-angular-base"
:
"~29.2.10"
,
"@syncfusion/ej2-base"
:
"~26.2.10"
,
"@syncfusion/ej2-base"
:
"~29.2.11"
,
"@syncfusion/ej2-grids"
:
"26.2.14"
,
"@syncfusion/ej2-grids"
:
"29.2.11"
"tslib"
:
"^2.3.0"
}
}
},
},
"node_modules/@syncfusion/ej2-angular-inputs"
:
{
"node_modules/@syncfusion/ej2-angular-inputs"
:
{
"version"
:
"2
6.2.14
"
,
"version"
:
"2
9.2.5
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-angular-inputs/-/ej2-angular-inputs-2
6.2.14
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-angular-inputs/-/ej2-angular-inputs-2
9.2.5
.tgz"
,
"integrity"
:
"sha512-
k5Zw1o/V2zq8filYs2i2SnbVHnHvv72VMx0jscGqA7upha4Ztj3TboZHy+lYAPLc5Pe17iIggDecwlqt6Te7Ww
=="
,
"integrity"
:
"sha512-
839rdXnftfuXQXeLE/u3InLwNmjR/NiQifM7F1BY6ZfoKNAm2jfZMI+t3sX7j87/DBIeUPaUkJNhkjjhl1b2Jg
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-angular-base"
:
"~26.2.10"
,
"@syncfusion/ej2-angular-base"
:
"~29.2.4"
,
"@syncfusion/ej2-base"
:
"~26.2.10"
,
"@syncfusion/ej2-base"
:
"~29.2.4"
,
"@syncfusion/ej2-inputs"
:
"26.2.14"
,
"@syncfusion/ej2-inputs"
:
"29.2.5"
"tslib"
:
"^2.3.0"
}
},
"node_modules/@syncfusion/ej2-angular-pivotview"
:
{
"version"
:
"29.2.4"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-angular-pivotview/-/ej2-angular-pivotview-29.2.4.tgz"
,
"integrity"
:
"sha512-hodqoX+tMn2sShPWRaVny3cyJN24CYU5oHnnZUyjkEKrjz7v6iAmCVHzuxqTQczZHUXaGqKvekF/ZfwEdStZNQ=="
,
"dependencies"
:
{
"@syncfusion/ej2-angular-base"
:
"~29.2.4"
,
"@syncfusion/ej2-base"
:
"~29.2.4"
,
"@syncfusion/ej2-pivotview"
:
"29.2.4"
}
}
},
},
"node_modules/@syncfusion/ej2-base"
:
{
"node_modules/@syncfusion/ej2-base"
:
{
"version"
:
"2
6.2.10
"
,
"version"
:
"2
9.2.11
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-2
6.2.10
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-2
9.2.11
.tgz"
,
"integrity"
:
"sha512-
i7TCvXGNsHmCoLA9AlHn3dIAyH8Bce6KCZUGshJS0EKu623SkVKjvWVWtgfar75/8SbTGWZQlGqEW5egYm3uTA
=="
,
"integrity"
:
"sha512-
f1yM+6606zde7MR4q4d/q6foR3viHDA1/SkkTbLVwBME7I/0AcMG/i0eeTWJfJS8dgn91DGrsrEl0nZ9IA1CEQ
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-icons"
:
"~2
6.2.10
"
"@syncfusion/ej2-icons"
:
"~2
9.2.4
"
},
},
"bin"
:
{
"bin"
:
{
"syncfusion-license"
:
"bin/syncfusion-license.js"
"syncfusion-license"
:
"bin/syncfusion-license.js"
}
}
},
},
"node_modules/@syncfusion/ej2-buttons"
:
{
"node_modules/@syncfusion/ej2-buttons"
:
{
"version"
:
"2
6.2.10
"
,
"version"
:
"2
9.2.5
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-2
6.2.10
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-2
9.2.5
.tgz"
,
"integrity"
:
"sha512-
WcErxTAI9r5PQQSOQNSWsaKfzYdSww+YeQaT4SO1xItMPDAEhWSqscnTMk46vDg6w5vRbAbB1US+3BAXJtOS1w
=="
,
"integrity"
:
"sha512-
FbMi9rUi/7i8mpPA6KRaO7qW/3wIeH759u2/Ag0iMQUEdtdK7NvOCSFF29WESeBjW6GmEJ8zkW0340ymgXZruQ
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~2
6.2.10
"
"@syncfusion/ej2-base"
:
"~2
9.2.4
"
}
}
},
},
"node_modules/@syncfusion/ej2-calendars"
:
{
"node_modules/@syncfusion/ej2-calendars"
:
{
"version"
:
"26.2.12"
,
"version"
:
"29.2.11"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-calendars/-/ej2-calendars-26.2.12.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-calendars/-/ej2-calendars-29.2.11.tgz"
,
"integrity"
:
"sha512-6sAauvGexP2Wg7FodNi6ewna1JRyKS7VuKfPYh5Q6i3xrq0AvgxiZk7xaL3oq+U3t59w/de/S+eq4cpQSpI93Q=="
,
"integrity"
:
"sha512-RphIYxXwaDv59QiYjswIntNyDxOqd3oQqi2G9Z3zRD+Ez1u+ybY9koaWbj5Dq/5AsFhdNCwHhyEPX9gACZMsvA=="
,
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~29.2.11"
,
"@syncfusion/ej2-buttons"
:
"~29.2.5"
,
"@syncfusion/ej2-inputs"
:
"~29.2.5"
,
"@syncfusion/ej2-lists"
:
"~29.2.4"
,
"@syncfusion/ej2-popups"
:
"~29.2.8"
}
},
"node_modules/@syncfusion/ej2-charts"
:
{
"version"
:
"29.2.11"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-charts/-/ej2-charts-29.2.11.tgz"
,
"integrity"
:
"sha512-OJ3BlnrPVC/p2rEQvv2l9RtjnAAZu8aszLVVuWlXi3ivjbt9MZb4AiA6f8alHDxKFbfUKoOnTnx/wGLNHUqmTA=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~26.2.10"
,
"@syncfusion/ej2-base"
:
"~29.2.11"
,
"@syncfusion/ej2-buttons"
:
"~26.2.10"
,
"@syncfusion/ej2-calendars"
:
"~29.2.11"
,
"@syncfusion/ej2-inputs"
:
"~26.2.11"
,
"@syncfusion/ej2-data"
:
"~29.2.4"
,
"@syncfusion/ej2-lists"
:
"~26.2.11"
,
"@syncfusion/ej2-excel-export"
:
"~29.2.4"
,
"@syncfusion/ej2-popups"
:
"~26.2.11"
"@syncfusion/ej2-navigations"
:
"~29.2.8"
,
"@syncfusion/ej2-pdf-export"
:
"~29.2.4"
,
"@syncfusion/ej2-svg-base"
:
"~29.2.4"
}
}
},
},
"node_modules/@syncfusion/ej2-compression"
:
{
"node_modules/@syncfusion/ej2-compression"
:
{
"version"
:
"2
6.2.10
"
,
"version"
:
"2
9.2.4
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-compression/-/ej2-compression-2
6.2.10
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-compression/-/ej2-compression-2
9.2.4
.tgz"
,
"integrity"
:
"sha512-
cCcABW1SUG+O8lGKzAj3zi7yLguslFVxEFSfMk9GWajC9SNgzICiKo7HR8Sz3HG9M4tmrH5aNKqM2mbYG6Lr0
Q=="
,
"integrity"
:
"sha512-
mcgFmgtITGxoX4zV4LrFGAOHOQD8Z7is85vQE+k2Bf4OI6rZsLNIQFm6KEFg+sZMOSrABzKzg49yrktmlus4T
Q=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-file-utils"
:
"~2
6.2.10
"
"@syncfusion/ej2-file-utils"
:
"~2
9.2.4
"
}
}
},
},
"node_modules/@syncfusion/ej2-data"
:
{
"node_modules/@syncfusion/ej2-data"
:
{
"version"
:
"2
6.2.1
4"
,
"version"
:
"2
9.2.
4"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-2
6.2.1
4.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-2
9.2.
4.tgz"
,
"integrity"
:
"sha512-
KJ5JsRwBbKjNLkFvkLgUz5SkC4zTJxS40mmBdWJTTROopKYjcHAe9HJxQJmJUOy/gxqfx5iPINVJaArqdtpPeQ
=="
,
"integrity"
:
"sha512-
2R+N65OPq+yfwTXyBz7NdD8MHGoxUbJSEWGT0kNEGMiobiI4AL+hfMYEhXWXE+DqL5Pm0txA4gTXQprFXXbccg
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~2
6.2.10
"
"@syncfusion/ej2-base"
:
"~2
9.2.4
"
}
}
},
},
"node_modules/@syncfusion/ej2-dropdowns"
:
{
"node_modules/@syncfusion/ej2-dropdowns"
:
{
"version"
:
"2
6.2.13
"
,
"version"
:
"2
9.2.11
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-2
6.2.13
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-2
9.2.11
.tgz"
,
"integrity"
:
"sha512-
aRQyN5unJz2bnXL90zuE23rG5l8Q4y24ymigL33chsa+bWQw7Fx8MCHXqNostzo2A4qtsL6FLT7MoCOnGYpmkg
=="
,
"integrity"
:
"sha512-
NtWQexED+1T4Ef/vPkG+C9ANkUD3QPvXelyQaS2+j+mzipOhSBGiDcJYIE1R1wtqC3BhLfMZBPJbuXGc0p+mmQ
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-base"
:
"~2
9.2.11
"
,
"@syncfusion/ej2-data"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-data"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-inputs"
:
"~2
6.2.13
"
,
"@syncfusion/ej2-inputs"
:
"~2
9.2.5
"
,
"@syncfusion/ej2-lists"
:
"~2
6.2.11
"
,
"@syncfusion/ej2-lists"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-navigations"
:
"~2
6.2.12
"
,
"@syncfusion/ej2-navigations"
:
"~2
9.2.8
"
,
"@syncfusion/ej2-notifications"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-notifications"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-popups"
:
"~2
6.2.11
"
"@syncfusion/ej2-popups"
:
"~2
9.2.8
"
}
}
},
},
"node_modules/@syncfusion/ej2-excel-export"
:
{
"node_modules/@syncfusion/ej2-excel-export"
:
{
"version"
:
"2
6.2.11
"
,
"version"
:
"2
9.2.4
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-excel-export/-/ej2-excel-export-2
6.2.11
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-excel-export/-/ej2-excel-export-2
9.2.4
.tgz"
,
"integrity"
:
"sha512-
R0Q3QXXEDvdRrWrQIIxuGcJJCLPqrJpSlvGIw9SNmaB4FCOxDhgqHjrzorAremGw4e4Ke9lq0S5MZhaPU9Tebg
=="
,
"integrity"
:
"sha512-
N3VAdlhP+Wq/Uyl82ZSx6x8zL3slgtEKzWb13nrfas7cdJicYrbx02YZru5/euaeE3yGTlbKmhjjLLbkVFU/kQ
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-base"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-compression"
:
"~2
6.2.10
"
"@syncfusion/ej2-compression"
:
"~2
9.2.4
"
}
}
},
},
"node_modules/@syncfusion/ej2-file-utils"
:
{
"node_modules/@syncfusion/ej2-file-utils"
:
{
"version"
:
"2
6.2.10
"
,
"version"
:
"2
9.2.4
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-file-utils/-/ej2-file-utils-2
6.2.10
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-file-utils/-/ej2-file-utils-2
9.2.4
.tgz"
,
"integrity"
:
"sha512-
sHWGPT6PrZcNKqNl27tfntEMjL6Ctr2dbTtsacTnlf68tM1dGyYSdKuGtE/Rhn866oCCCKyRvTmItEeh6MINOw
=="
"integrity"
:
"sha512-
nnvZ+1xVULe418habMciZnDAoMOM+TqFaFpO9kf4Cct9RPYUr22Tsvu84CZI7yzzKj/dLfD4n5TRRCHVo+5vVA
=="
},
},
"node_modules/@syncfusion/ej2-grids"
:
{
"node_modules/@syncfusion/ej2-grids"
:
{
"version"
:
"2
6.2.14
"
,
"version"
:
"2
9.2.11
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-grids/-/ej2-grids-2
6.2.14
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-grids/-/ej2-grids-2
9.2.11
.tgz"
,
"integrity"
:
"sha512-
2dmXpp3z2dFMKKy6aCyXmtGpBHA2vRH8ygd0aRm+YwVX1H3HLeHHhkODyCDDzUpN2TX9Pt0/0qzX1tP3Crnnwg
=="
,
"integrity"
:
"sha512-
11jI7ve/qxQVsA4kP+v0Y1bEfO7kFCCtBekag80Fy+yio88Wcr5c1Q9SxgsmZtX+Kzk6oSymS497/zNcBDsUJw
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-base"
:
"~2
9.2.11
"
,
"@syncfusion/ej2-buttons"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-buttons"
:
"~2
9.2.5
"
,
"@syncfusion/ej2-calendars"
:
"~2
6.2.12
"
,
"@syncfusion/ej2-calendars"
:
"~2
9.2.11
"
,
"@syncfusion/ej2-compression"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-compression"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-data"
:
"~2
6.2.1
4"
,
"@syncfusion/ej2-data"
:
"~2
9.2.
4"
,
"@syncfusion/ej2-dropdowns"
:
"~2
6.2.13
"
,
"@syncfusion/ej2-dropdowns"
:
"~2
9.2.11
"
,
"@syncfusion/ej2-excel-export"
:
"~2
6.2.11
"
,
"@syncfusion/ej2-excel-export"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-file-utils"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-file-utils"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-inputs"
:
"~2
6.2.14
"
,
"@syncfusion/ej2-inputs"
:
"~2
9.2.5
"
,
"@syncfusion/ej2-lists"
:
"~2
6.2.1
4"
,
"@syncfusion/ej2-lists"
:
"~2
9.2.
4"
,
"@syncfusion/ej2-navigations"
:
"~2
6.2.12
"
,
"@syncfusion/ej2-navigations"
:
"~2
9.2.8
"
,
"@syncfusion/ej2-notifications"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-notifications"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-pdf-export"
:
"~2
6.2.1
4"
,
"@syncfusion/ej2-pdf-export"
:
"~2
9.2.
4"
,
"@syncfusion/ej2-popups"
:
"~2
6.2.11
"
,
"@syncfusion/ej2-popups"
:
"~2
9.2.8
"
,
"@syncfusion/ej2-splitbuttons"
:
"~2
6.2.10
"
"@syncfusion/ej2-splitbuttons"
:
"~2
9.2.4
"
}
}
},
},
"node_modules/@syncfusion/ej2-icons"
:
{
"node_modules/@syncfusion/ej2-icons"
:
{
"version"
:
"2
6.2.10
"
,
"version"
:
"2
9.2.4
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-2
6.2.10
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-2
9.2.4
.tgz"
,
"integrity"
:
"sha512-
ay+kr1oVqBOCe9MwJ0vjXS85CDAA5XwtwKb/Gf8cdz79IpsX/1VOvqOBofYu1+OPfbMX9w9mCLciNCMPCaRZFA
=="
"integrity"
:
"sha512-
2DYZglxLM++w0S2wB2bcr/Akk1MODdVhfFYLaLqe6mDHDRicFeTEyvnGPx2SHS2EXXlNNFm2GfNWoNNxgs5MhQ
=="
},
},
"node_modules/@syncfusion/ej2-inputs"
:
{
"node_modules/@syncfusion/ej2-inputs"
:
{
"version"
:
"2
6.2.14
"
,
"version"
:
"2
9.2.5
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-2
6.2.14
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-2
9.2.5
.tgz"
,
"integrity"
:
"sha512-
Lo8pqhhhCT30PVzj+gX6idPySSq4R0Sh36vnMZ7ubxf46rbg0Bw7Ftov8mPP9lLQSql+ixLYTjVpTEP1b9UIuA
=="
,
"integrity"
:
"sha512-
3ZqMl005qL0tENHcKvBfKUHMYQ/S0FRYjUDQVDPRsg28tE0Lz87oyamrxLYne3zDBEJ7kxWWnaNpgrTVvxsVNw
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-base"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-buttons"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-buttons"
:
"~2
9.2.5
"
,
"@syncfusion/ej2-popups"
:
"~2
6.2.11
"
,
"@syncfusion/ej2-popups"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-splitbuttons"
:
"~2
6.2.10
"
"@syncfusion/ej2-splitbuttons"
:
"~2
9.2.4
"
}
}
},
},
"node_modules/@syncfusion/ej2-lists"
:
{
"node_modules/@syncfusion/ej2-lists"
:
{
"version"
:
"2
6.2.1
4"
,
"version"
:
"2
9.2.
4"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-2
6.2.1
4.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-2
9.2.
4.tgz"
,
"integrity"
:
"sha512-
8tQdVIzbHYcCjxYns57etpoJvTTp3lMY2bExbD4agZij1mdgGv/PMdp29RepcnSZMw6FsX6Eqp2hriXzrwL6Lg
=="
,
"integrity"
:
"sha512-
U64nGdZMjnhHG/+YCTF+WhJ3BoUxFyN2DXxv2qlC+wtayMbfioDRwqSQgxTkH8XE4TgrkRFenRtj5SbYLKliSw
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-base"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-buttons"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-buttons"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-data"
:
"~2
6.2.1
4"
,
"@syncfusion/ej2-data"
:
"~2
9.2.
4"
,
"@syncfusion/ej2-popups"
:
"~2
6.2.11
"
"@syncfusion/ej2-popups"
:
"~2
9.2.4
"
}
}
},
},
"node_modules/@syncfusion/ej2-navigations"
:
{
"node_modules/@syncfusion/ej2-navigations"
:
{
"version"
:
"2
6.2.12
"
,
"version"
:
"2
9.2.8
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-2
6.2.12
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-2
9.2.8
.tgz"
,
"integrity"
:
"sha512-
SAFkU75y/SZTSsrE+NyWX/+1HqyYr2sqARFAqXKu87mfYDsxVjsroSXQuDEbwRRujCr3reR0znEkW/zQ+RM5m
A=="
,
"integrity"
:
"sha512-
u14J+dEocqGIKgWCC1eiATv1nh40dgILsGPpGbYS+h9Y7y4YMBRzL2UCcuNHXgPKL7SiJ5lCaVORFco8cxyh6
A=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-base"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-buttons"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-buttons"
:
"~2
9.2.5
"
,
"@syncfusion/ej2-data"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-data"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-inputs"
:
"~2
6.2.11
"
,
"@syncfusion/ej2-inputs"
:
"~2
9.2.5
"
,
"@syncfusion/ej2-lists"
:
"~2
6.2.11
"
,
"@syncfusion/ej2-lists"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-popups"
:
"~2
6.2.11
"
"@syncfusion/ej2-popups"
:
"~2
9.2.8
"
}
}
},
},
"node_modules/@syncfusion/ej2-notifications"
:
{
"node_modules/@syncfusion/ej2-notifications"
:
{
"version"
:
"2
6.2.10
"
,
"version"
:
"2
9.2.4
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-2
6.2.10
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-2
9.2.4
.tgz"
,
"integrity"
:
"sha512-
TXpsKfTK7lERvvFNOcEB7n7veNLIEUMM9SY1Ihk06fl+YJa4YGL6aSVUvQJilE8PJyFeu4MpPN6bmVvEM01NCw
=="
,
"integrity"
:
"sha512-
rB9OuGHWVfnl9aBno+4KRH3aESbakLKYT70V7wjTxwS7u11XbxYwLiA4/YKsTQg/zrgOtcr3Ma1sVOeMYW17gQ
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-base"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-buttons"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-buttons"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-popups"
:
"~2
6.2.10
"
"@syncfusion/ej2-popups"
:
"~2
9.2.4
"
}
}
},
},
"node_modules/@syncfusion/ej2-pdf-export"
:
{
"node_modules/@syncfusion/ej2-pdf-export"
:
{
"version"
:
"26.2.14"
,
"version"
:
"29.2.4"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-pdf-export/-/ej2-pdf-export-26.2.14.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-pdf-export/-/ej2-pdf-export-29.2.4.tgz"
,
"integrity"
:
"sha512-sO2F2jUgmm8uNx1dAyFp+cz00UAU7mMM5p1ulQi8K2Km+mN90A9eZNcKzCBABX21anJqaXOgaicZHhOrqP2BTg=="
,
"integrity"
:
"sha512-Cb5QKYqhuvEb96DzqJT6/nLuan8FkA40mU4Lggg5Ujo1OdIK3Ca5GolM7HStTct4DnU02UKuXTrqoL5umGTfKQ=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-compression"
:
"~26.2.10"
"@syncfusion/ej2-compression"
:
"~29.2.4"
}
},
"node_modules/@syncfusion/ej2-pivotview"
:
{
"version"
:
"29.2.4"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-pivotview/-/ej2-pivotview-29.2.4.tgz"
,
"integrity"
:
"sha512-C0u+4M+geatx8iTC75G9e7R7YIsVgt+HNmm6tuqWmPC2cjy5KCrdR/D/e6G+FkFrVa8WWUk+MfVmivfDAnsFIA=="
,
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~29.2.4"
,
"@syncfusion/ej2-buttons"
:
"~29.2.4"
,
"@syncfusion/ej2-calendars"
:
"~29.2.4"
,
"@syncfusion/ej2-charts"
:
"~29.2.4"
,
"@syncfusion/ej2-compression"
:
"~29.2.4"
,
"@syncfusion/ej2-data"
:
"~29.2.4"
,
"@syncfusion/ej2-dropdowns"
:
"~29.2.4"
,
"@syncfusion/ej2-excel-export"
:
"~29.2.4"
,
"@syncfusion/ej2-file-utils"
:
"~29.2.4"
,
"@syncfusion/ej2-grids"
:
"~29.2.4"
,
"@syncfusion/ej2-inputs"
:
"~29.2.4"
,
"@syncfusion/ej2-lists"
:
"~29.2.4"
,
"@syncfusion/ej2-navigations"
:
"~29.2.4"
,
"@syncfusion/ej2-pdf-export"
:
"~29.2.4"
,
"@syncfusion/ej2-popups"
:
"~29.2.4"
,
"@syncfusion/ej2-splitbuttons"
:
"~29.2.4"
,
"@syncfusion/ej2-svg-base"
:
"~29.2.4"
}
}
},
},
"node_modules/@syncfusion/ej2-popups"
:
{
"node_modules/@syncfusion/ej2-popups"
:
{
"version"
:
"2
6.2.11
"
,
"version"
:
"2
9.2.8
"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-2
6.2.11
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-2
9.2.8
.tgz"
,
"integrity"
:
"sha512-
JMIj3JLSgc6pjN3gAydCruD+DXyH565g5R+5jHsI78BfeDu+/uTdunm7May5zMgr2AmFAKOE6VdQhjEyr3/DJg
=="
,
"integrity"
:
"sha512-
LsXfTiFd6dyoE8XIxFOgC24TeQCqgLdjp3VOg0tWvyuWiZ/skH2sBlF2Y1CWqNJS07OKhtcjLY1h446RTBlalQ
=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~2
6.2.10
"
,
"@syncfusion/ej2-base"
:
"~2
9.2.4
"
,
"@syncfusion/ej2-buttons"
:
"~2
6.2.10
"
"@syncfusion/ej2-buttons"
:
"~2
9.2.5
"
}
}
},
},
"node_modules/@syncfusion/ej2-splitbuttons"
:
{
"node_modules/@syncfusion/ej2-splitbuttons"
:
{
"version"
:
"26.2.10"
,
"version"
:
"29.2.4"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-26.2.10.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-29.2.4.tgz"
,
"integrity"
:
"sha512-uvGS9e4K0qcVxhzFBP9VheWrAgOFciSLyHo1qcxgxAyOhuqVhBeBZgmjBiFXXwJHiSW9FM37FQVV0iD0LcVEnw=="
,
"integrity"
:
"sha512-sZKs0IZJ6+rDK2OLRl+m5Rs1ai84GE9NV2hpDG5CPFv5uM5WoOf33qYOyp6BSuBerpobpycoXDWH/mh1fZSCDw=="
,
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~29.2.4"
,
"@syncfusion/ej2-popups"
:
"~29.2.4"
}
},
"node_modules/@syncfusion/ej2-svg-base"
:
{
"version"
:
"29.2.4"
,
"resolved"
:
"https://registry.npmjs.org/@syncfusion/ej2-svg-base/-/ej2-svg-base-29.2.4.tgz"
,
"integrity"
:
"sha512-rLEnJTBQ1AxmfiBo4T/sGwG0fOTVPyLVa3NDMx9Bre6yIjEbezHyRu5ujrFubgVDNLQZ1StkEnGlGVduPrr3fA=="
,
"dependencies"
:
{
"dependencies"
:
{
"@syncfusion/ej2-base"
:
"~26.2.10"
,
"@syncfusion/ej2-base"
:
"~29.2.4"
"@syncfusion/ej2-popups"
:
"~26.2.10"
}
}
},
},
"node_modules/@tailwindcss/forms"
:
{
"node_modules/@tailwindcss/forms"
:
{
...
...
package.json
View file @
a695ebf3
...
@@ -33,16 +33,18 @@
...
@@ -33,16 +33,18 @@
"
@ng-select/ng-select
"
:
"^11.0.0"
,
"
@ng-select/ng-select
"
:
"^11.0.0"
,
"
@ngrx/store
"
:
"^16.0.1"
,
"
@ngrx/store
"
:
"^16.0.1"
,
"
@swimlane/ngx-charts
"
:
"^20.4.1"
,
"
@swimlane/ngx-charts
"
:
"^20.4.1"
,
"
@syncfusion/ej2-angular-base
"
:
"26.2.10"
,
"
@syncfusion/ej2-angular-base
"
:
"^29.2.4"
,
"
@syncfusion/ej2-angular-dropdowns
"
:
"26.2.13"
,
"
@syncfusion/ej2-angular-charts
"
:
"^29.2.4"
,
"
@syncfusion/ej2-angular-grids
"
:
"26.2.14"
,
"
@syncfusion/ej2-angular-dropdowns
"
:
"^29.2.4"
,
"
@syncfusion/ej2-angular-inputs
"
:
"26.2.14"
,
"
@syncfusion/ej2-angular-grids
"
:
"^29.2.4"
,
"
@syncfusion/ej2-base
"
:
"26.2.10"
,
"
@syncfusion/ej2-angular-inputs
"
:
"^29.2.4"
,
"
@syncfusion/ej2-buttons
"
:
"26.2.10"
,
"
@syncfusion/ej2-angular-pivotview
"
:
"^29.2.4"
,
"
@syncfusion/ej2-data
"
:
"26.2.14"
,
"
@syncfusion/ej2-base
"
:
"^29.2.4"
,
"
@syncfusion/ej2-dropdowns
"
:
"26.2.13"
,
"
@syncfusion/ej2-buttons
"
:
"^29.2.4"
,
"
@syncfusion/ej2-grids
"
:
"26.2.14"
,
"
@syncfusion/ej2-data
"
:
"^29.2.4"
,
"
@syncfusion/ej2-inputs
"
:
"26.2.14"
,
"
@syncfusion/ej2-dropdowns
"
:
"^29.2.4"
,
"
@syncfusion/ej2-grids
"
:
"^29.2.4"
,
"
@syncfusion/ej2-inputs
"
:
"^29.2.4"
,
"
@tailwindcss/forms
"
:
"^0.5.3"
,
"
@tailwindcss/forms
"
:
"^0.5.3"
,
"
angular-calendar
"
:
"^0.31.0"
,
"
angular-calendar
"
:
"^0.31.0"
,
"
angular2-multiselect-dropdown
"
:
"^5.0.4"
,
"
angular2-multiselect-dropdown
"
:
"^5.0.4"
,
...
...
src/app/components/dashboard/dashboard.module.ts
View file @
a695ebf3
...
@@ -188,6 +188,22 @@ import { ReportPms2Component } from '../report-component/report-pms/report-pms-2
...
@@ -188,6 +188,22 @@ import { ReportPms2Component } from '../report-component/report-pms/report-pms-2
import
{
ReportPms3Component
}
from
'../report-component/report-pms/report-pms-3/report-pms-3.component'
;
import
{
ReportPms3Component
}
from
'../report-component/report-pms/report-pms-3/report-pms-3.component'
;
import
{
EssProfileComponent
}
from
'../ess-profile/ess-profile.component'
;
import
{
EssProfileComponent
}
from
'../ess-profile/ess-profile.component'
;
import
{
ExcelReportComponent
}
from
'../excel-report/excel-report.component'
;
import
{
ExcelReportComponent
}
from
'../excel-report/excel-report.component'
;
import
{
PivotSyncfutionComponent
}
from
'../pivot-syncfution/pivot-syncfution.component'
;
import
{
CalculatedFieldService
,
ConditionalFormattingService
,
DrillThroughService
,
FieldListService
,
GroupingBarService
,
NumberFormattingService
,
PivotFieldListModule
,
PivotViewModule
,
ToolbarService
,
VirtualScrollService
}
from
'@syncfusion/ej2-angular-pivotview'
;
import
{
ChartModule
,
LineSeriesService
,
ColumnSeriesService
,
CategoryService
,
LegendService
,
TooltipService
}
from
'@syncfusion/ej2-angular-charts'
;
import
{
ResizeService
,
SortService
,
PageService
,
FilterService
,
}
from
'@syncfusion/ej2-angular-grids'
;
export
const
MY_DATE_FORMATS
=
{
export
const
MY_DATE_FORMATS
=
{
parse
:
{
parse
:
{
...
@@ -332,7 +348,8 @@ export class CustomDateAdapter extends NativeDateAdapter {
...
@@ -332,7 +348,8 @@ export class CustomDateAdapter extends NativeDateAdapter {
ReportPms2Component
,
ReportPms2Component
,
ReportPms3Component
,
ReportPms3Component
,
EssProfileComponent
,
EssProfileComponent
,
ExcelReportComponent
ExcelReportComponent
,
PivotSyncfutionComponent
],
],
imports
:
[
imports
:
[
CommonModule
,
CommonModule
,
...
@@ -357,6 +374,7 @@ export class CustomDateAdapter extends NativeDateAdapter {
...
@@ -357,6 +374,7 @@ export class CustomDateAdapter extends NativeDateAdapter {
RatingModule
,
RatingModule
,
MatDialogModule
,
MatDialogModule
,
BarRatingModule
,
BarRatingModule
,
PivotViewModule
,
NgxEchartsModule
.
forRoot
({
// ✅ โหลด ECharts เพียงครั้งเดียว
NgxEchartsModule
.
forRoot
({
// ✅ โหลด ECharts เพียงครั้งเดียว
echarts
:
()
=>
import
(
'echarts'
)
echarts
:
()
=>
import
(
'echarts'
)
})
})
...
@@ -408,7 +426,23 @@ export class CustomDateAdapter extends NativeDateAdapter {
...
@@ -408,7 +426,23 @@ export class CustomDateAdapter extends NativeDateAdapter {
EmpStatusService
,
EmpStatusService
,
ConfigPermissionService
,
ConfigPermissionService
,
TokenService
,
TokenService
,
FieldListService
,
CalculatedFieldService
,
ConditionalFormattingService
,
NumberFormattingService
,
ToolbarService
,
GroupingBarService
,
DrillThroughService
,
VirtualScrollService
,
LineSeriesService
,
ColumnSeriesService
,
CategoryService
,
LegendService
,
TooltipService
,
ResizeService
,
SortService
,
PageService
,
FilterService
,
{
{
provide
:
HTTP_INTERCEPTORS
,
provide
:
HTTP_INTERCEPTORS
,
useClass
:
HttpRequestInterceptor
,
useClass
:
HttpRequestInterceptor
,
...
...
src/app/components/datagrid-syncfution/datagrid-syncfution.component.ts
View file @
a695ebf3
...
@@ -164,6 +164,10 @@ export class DatagridSyncfutionComponent implements OnInit {
...
@@ -164,6 +164,10 @@ export class DatagridSyncfutionComponent implements OnInit {
@
Input
()
showImg
=
false
@
Input
()
showImg
=
false
@
Input
()
sendLayout
=
false
@
Input
()
gridLayout
=
''
@
Output
()
layout
=
new
EventEmitter
<
any
>
();
constructor
(
private
cdr
:
ChangeDetectorRef
,
constructor
(
private
cdr
:
ChangeDetectorRef
,
private
fileService
:
FileService
private
fileService
:
FileService
)
{
)
{
...
@@ -186,6 +190,20 @@ export class DatagridSyncfutionComponent implements OnInit {
...
@@ -186,6 +190,20 @@ export class DatagridSyncfutionComponent implements OnInit {
this
.
dataSourceSearch
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
dataSource
||
[]))
this
.
dataSourceSearch
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
dataSource
||
[]))
this
.
dataSourceFilter
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
dataSource
||
[]))
this
.
dataSourceFilter
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
dataSource
||
[]))
}
}
if
(
changes
[
'gridLayout'
])
{
if
(
changes
[
'gridLayout'
].
currentValue
)
{
const
layout
=
JSON
.
parse
(
changes
[
'gridLayout'
].
currentValue
)
this
.
grid
?.
setProperties
(
layout
)
}
}
if
(
changes
[
'sendLayout'
])
{
if
(
this
.
grid
)
{
const
layout
=
this
.
grid
?.
getPersistData
();
if
(
layout
)
{
this
.
layout
.
emit
(
layout
)
}
}
}
}
}
}
}
onSelectData
(
args
:
any
)
{
onSelectData
(
args
:
any
)
{
...
...
src/app/components/excel-report/excel-report.component.html
View file @
a695ebf3
...
@@ -22,10 +22,10 @@
...
@@ -22,10 +22,10 @@
</label>
</label>
<div
class=
"col-span-8 md:col-span-4"
[
class
.
ti-pagination
]="
item
.
type=
='radio'"
>
<div
class=
"col-span-8 md:col-span-4"
[
class
.
ti-pagination
]="
item
.
type=
='radio'"
>
<ng-container
*
ngIf=
"item.type=='text'"
>
<ng-container
*
ngIf=
"item.type=='text'"
>
<input
type=
"text"
class=
"ti-form-input h-16"
[(
ngModel
)]="
item
.
value
"
>
<input
type=
"text"
class=
"ti-form-input h-16"
[(
ngModel
)]="
select
[
item
.
key
]
"
>
</ng-container>
</ng-container>
<ng-container
*
ngIf=
"item.type=='list'"
>
<ng-container
*
ngIf=
"item.type=='list'"
>
<select
class=
"ti-form-select h-16"
[(
ngModel
)]="
item
.
value
"
>
<select
class=
"ti-form-select h-16"
[(
ngModel
)]="
select
[
item
.
key
]
"
>
<option
*
ngFor=
"let list of item.option"
[
value
]="
list
.
value
"
>
<option
*
ngFor=
"let list of item.option"
[
value
]="
list
.
value
"
>
{{list.text}}
{{list.text}}
</option>
</option>
...
@@ -37,14 +37,14 @@
...
@@ -37,14 +37,14 @@
<div
class=
"grid col-span-3 grid-cols-6 gap-2"
>
<div
class=
"grid col-span-3 grid-cols-6 gap-2"
>
<div
class=
"col-span-1 ti-pagination "
>
<div
class=
"col-span-1 ti-pagination "
>
<input
type=
"checkbox"
class=
"ti-form-checkbox"
[
id
]="'
radioItem
'+
i
"
<input
type=
"checkbox"
class=
"ti-form-checkbox"
[
id
]="'
radioItem
'+
i
"
[
class
.
pointer-events-none
]="
item
.
value
=
=radioItem.value"
[
class
.
pointer-events-none
]="
select
[
item
.
key
]
==
radioItem
.
value
"
[
name
]="'
radioItem
'+
item
.
label
"
[
name
]="'
radioItem
'+
item
.
label
"
(
change
)="
item
.
value
=
radioItem.value"
(
change
)="
select
[
item
.
key
]
=
radioItem
.
value
"
[
checked
]="
item
.
value
=
=radioItem.value"
>
[
checked
]="
select
[
item
.
key
]
==
radioItem
.
value
"
>
</div>
</div>
<div
class=
"col-span-5 ti-pagination "
>
<div
class=
"col-span-5 ti-pagination "
>
<label
[
for
]="'
radioItem
'+
i
"
class=
"text-sm text-gray-500"
<label
[
for
]="'
radioItem
'+
i
"
class=
"text-sm text-gray-500"
[
class
.
pointer-events-none
]="
item
.
value
=
=radioItem.value"
>
[
class
.
pointer-events-none
]="
select
[
item
.
key
]
==
radioItem
.
value
"
>
{{radioItem.text}}
{{radioItem.text}}
</label>
</label>
</div>
</div>
...
@@ -55,11 +55,11 @@
...
@@ -55,11 +55,11 @@
<ng-container
*
ngIf=
"item.type=='help'"
>
<ng-container
*
ngIf=
"item.type=='help'"
>
<div
class=
"relative flex rounded-md"
>
<div
class=
"relative flex rounded-md"
>
<input
type=
"text"
class=
"ti-form-input h-16"
readonly
<input
type=
"text"
class=
"ti-form-input h-16"
readonly
[(
ngModel
)]="
item
.
value
.
tdesc
"
>
[(
ngModel
)]="
select
[
item
.
key
]
.
tdesc
"
>
<div
<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"
>
class=
"absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2"
>
<button
type=
"button"
class=
"flex items-center text-red-500"
<button
type=
"button"
class=
"flex items-center text-red-500"
(
click
)="
item
.
value
.
tdesc=
''
"
style=
"font-size: 17px;"
>
(
click
)="
select
[
item
.
key
]={
id:
'',
tdesc:
'',
edesc:
''}
"
style=
"font-size: 17px;"
>
<i
class=
" ti ti-circle-x cursor-pointer"
></i>
<i
class=
" ti ti-circle-x cursor-pointer"
></i>
</button>
</button>
<button
type=
"button"
<button
type=
"button"
...
@@ -95,10 +95,20 @@
...
@@ -95,10 +95,20 @@
<ng-container
*
ngIf=
"variableSheet.length&&!loadingExcel"
>
<ng-container
*
ngIf=
"variableSheet.length&&!loadingExcel"
>
<div
class=
"flex justify-center mb-1rem space-x-4"
>
<div
class=
"flex justify-center mb-1rem space-x-4"
>
<button
type=
"submit"
class=
"ti-btn ti-btn-secondary"
[
class
.
ti-btn-disabled
]="
loadingExcel
"
<button
type=
"submit"
class=
"ti-btn ti-btn-secondary"
[
class
.
ti-btn-disabled
]="
loadingExcel
"
(
click
)="
getExcelData
('
grid
')"
[
disabled
]="
loadingExcel
"
>
Datagrid
</button>
<button
type=
"submit"
class=
"ti-btn ti-btn-secondary"
[
class
.
ti-btn-disabled
]="
loadingExcel
"
(
click
)="
getExcelData
('
pivot
')"
[
disabled
]="
loadingExcel
"
>
Pivot
</button>
</div>
<!-- <div class="flex justify-center mb-1rem space-x-4">
<button type="submit" class="ti-btn ti-btn-secondary" [class.ti-btn-disabled]="loadingExcel"
(click)="dowloadExcelReport()" [disabled]="loadingExcel">
(click)="dowloadExcelReport()" [disabled]="loadingExcel">
พิมพ์
พิมพ์
</button>
</button>
</div>
</div>
-->
</ng-container>
</ng-container>
<ng-container
*
ngIf=
"variableSheet.length&&loadingExcel"
>
<ng-container
*
ngIf=
"variableSheet.length&&loadingExcel"
>
<div
class=
"flex justify-center"
>
<div
class=
"flex justify-center"
>
...
@@ -178,4 +188,61 @@
...
@@ -178,4 +188,61 @@
ย้อนกลับ
ย้อนกลับ
</button>
</button>
</mat-dialog-actions>
</mat-dialog-actions>
</ng-template>
<ng-template
#
girdModal
let-modal
>
<h3
mat-dialog-title
>
GridData
</h3>
<mat-dialog-content>
<app-datagrid-syncfution
[
checkBoxSetting
]='
false
'
[
actionSetting
]="
false
"
[
searchSettings
]="
searchSettings
"
[
dataSource
]="
dataList
"
[
columns
]="
columns
"
[
gridLayout
]="
setPerspective
"
[
sendLayout
]="
gridLayout
.
stimulate
"
(
layout
)="
gridLayout
.
data=
$event"
>
</app-datagrid-syncfution>
</mat-dialog-content>
<mat-dialog-actions
align=
"end"
>
<button
*
ngIf=
"!loadingExcel"
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"
(
click
)="
gridLayout
.
stimulate=
!gridLayout.stimulate;savePerspective('grid')"
>
{{"Save Perspective"}}
</button>
<button
*
ngIf=
"!loadingExcel"
type=
"button"
mat-button
[
mat-dialog-close
]
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>
<div
*
ngIf=
"loadingExcel"
class=
"flex justify-center"
>
<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>
</div>
</mat-dialog-actions>
</ng-template>
<ng-template
#
pivotModal
let-modal
>
<h3
mat-dialog-title
>
Pivot
</h3>
<mat-dialog-content>
<app-pivot-syncfution
[
dataSource
]="
dataList
"
[
columns
]="
pivotColumns
"
[
pivotLayout
]="
setPerspective
"
[
sendLayout
]="
pivotLayout
.
stimulate
"
(
layout
)="
pivotLayout
.
data=
$event"
>
</app-pivot-syncfution>
</mat-dialog-content>
<mat-dialog-actions
align=
"end"
>
<button
*
ngIf=
"!loadingExcel"
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"
(
click
)="
pivotLayout
.
stimulate=
!pivotLayout.stimulate;savePerspective('pivot')"
>
{{"Save Perspective"}}
</button>
<button
*
ngIf=
"!loadingExcel"
type=
"button"
mat-button
[
mat-dialog-close
]
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>
<div
*
ngIf=
"loadingExcel"
class=
"flex justify-center"
>
<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>
</div>
</mat-dialog-actions>
</ng-template>
</ng-template>
\ No newline at end of file
src/app/components/excel-report/excel-report.component.ts
View file @
a695ebf3
import
{
ChangeDetectorRef
,
Component
,
OnInit
,
ViewChild
}
from
'@angular/core'
;
import
{
ChangeDetectorRef
,
Component
,
OnInit
,
ViewChild
}
from
'@angular/core'
;
import
{
MatDialog
}
from
'@angular/material/dialog'
;
import
{
MatDialog
}
from
'@angular/material/dialog'
;
import
{
ActivatedRoute
}
from
'@angular/router'
;
import
{
ActivatedRoute
}
from
'@angular/router'
;
import
{
Subscription
}
from
'rxjs'
;
import
{
forkJoin
,
Subscription
}
from
'rxjs'
;
import
{
CustomCubeService
}
from
'src/app/shared/services/custom-cube.service'
;
import
{
ExcelReportService
}
from
'src/app/shared/services/excel-report.service'
;
import
{
ExcelReportService
}
from
'src/app/shared/services/excel-report.service'
;
import
{
ColumnModel
}
from
'@syncfusion/ej2-grids'
;
import
Swal
from
'sweetalert2'
;
export
interface
ModalDetail
{
export
interface
ModalDetail
{
text
:
{
cardHead
:
string
,
search
:
string
[],
tableHead
:
string
[]
}
text
:
{
cardHead
:
string
,
search
:
string
[],
tableHead
:
string
[]
}
}
}
...
@@ -40,9 +42,25 @@ export class ExcelReportComponent implements OnInit {
...
@@ -40,9 +42,25 @@ export class ExcelReportComponent implements OnInit {
pathTitle
=
[
'รายงาน Excel'
,
'รายงาน Excel 1'
]
pathTitle
=
[
'รายงาน Excel'
,
'รายงาน Excel 1'
]
excelReportServiceSub
?:
Subscription
excelReportServiceSub
?:
Subscription
@
ViewChild
(
"girdModal"
)
girdModal
:
any
;
@
ViewChild
(
"pivotModal"
)
pivotModal
:
any
;
columns
:
ColumnModel
[]
=
[]
pivotColumns
:
any
[]
=
[]
dataList
:
any
[]
=
[]
gridLayout
:
{
stimulate
:
boolean
,
data
:
string
}
=
{
stimulate
:
false
,
data
:
''
}
pivotLayout
:
{
stimulate
:
boolean
,
data
:
string
}
=
{
stimulate
:
false
,
data
:
''
}
setPerspective
=
""
searchSettings
=
{
fields
:
[],
operator
:
'contains'
,
ignoreCase
:
false
};
constructor
(
private
route
:
ActivatedRoute
,
constructor
(
private
route
:
ActivatedRoute
,
private
excelReportService
:
ExcelReportService
,
private
excelReportService
:
ExcelReportService
,
private
cdr
:
ChangeDetectorRef
,
private
cdr
:
ChangeDetectorRef
,
private
customCubeService
:
CustomCubeService
,
private
dialog
:
MatDialog
,
private
dialog
:
MatDialog
,
)
{
)
{
...
@@ -77,6 +95,7 @@ export class ExcelReportComponent implements OnInit {
...
@@ -77,6 +95,7 @@ export class ExcelReportComponent implements OnInit {
this
.
loadingExcel
=
false
this
.
loadingExcel
=
false
this
.
excelReportService
.
getTemplateFile
(
templateId
,
fileName
).
subscribe
((
res
:
any
)
=>
{
this
.
excelReportService
.
getTemplateFile
(
templateId
,
fileName
).
subscribe
((
res
:
any
)
=>
{
this
.
excelReport
=
res
this
.
excelReport
=
res
this
.
getExcelColumn
()
this
.
pathTitle
=
[
'รายงาน Excel'
,
this
.
excelReport
.
itemId
+
'.'
+
this
.
excelReport
.
tdesc
]
this
.
pathTitle
=
[
'รายงาน Excel'
,
this
.
excelReport
.
itemId
+
'.'
+
this
.
excelReport
.
tdesc
]
if
(
this
.
excelReport
.
param
)
{
if
(
this
.
excelReport
.
param
)
{
Object
.
entries
(
this
.
excelReport
.
param
.
variableSheet
).
forEach
(([
key
,
value
])
=>
{
Object
.
entries
(
this
.
excelReport
.
param
.
variableSheet
).
forEach
(([
key
,
value
])
=>
{
...
@@ -104,7 +123,7 @@ export class ExcelReportComponent implements OnInit {
...
@@ -104,7 +123,7 @@ export class ExcelReportComponent implements OnInit {
this
.
select
[
key
]
=
data
.
value
this
.
select
[
key
]
=
data
.
value
}
else
if
(
data
.
type
==
'help'
)
{
}
else
if
(
data
.
type
==
'help'
)
{
this
.
variableSheet
.
push
({
...
data
,
value
:
data
.
valueDefault
?
{
id
:
data
.
valueDefault
,
tdesc
:
data
.
valueDefault
,
edesc
:
data
.
valueDefault
}
:
{
id
:
""
,
tdesc
:
""
,
edesc
:
""
},
key
:
key
})
this
.
variableSheet
.
push
({
...
data
,
value
:
data
.
valueDefault
?
{
id
:
data
.
valueDefault
,
tdesc
:
data
.
valueDefault
,
edesc
:
data
.
valueDefault
}
:
{
id
:
""
,
tdesc
:
""
,
edesc
:
""
},
key
:
key
})
this
.
select
[
key
]
=
data
.
value
this
.
select
[
key
]
=
{
id
:
data
.
value
,
tdesc
:
data
.
value
,
edesc
:
data
.
value
}
}
else
if
(
data
.
type
==
'calendar'
)
{
}
else
if
(
data
.
type
==
'calendar'
)
{
this
.
variableSheet
.
push
({
...
data
,
value
:
data
.
valueDefault
||
''
,
key
:
key
})
this
.
variableSheet
.
push
({
...
data
,
value
:
data
.
valueDefault
||
''
,
key
:
key
})
const
[
d
,
m
,
y
]
=
data
.
valueDefault
?
data
.
valueDefault
.
split
(
'-'
).
map
(
Number
)
:
[
null
,
null
,
null
]
const
[
d
,
m
,
y
]
=
data
.
valueDefault
?
data
.
valueDefault
.
split
(
'-'
).
map
(
Number
)
:
[
null
,
null
,
null
]
...
@@ -119,6 +138,41 @@ export class ExcelReportComponent implements OnInit {
...
@@ -119,6 +138,41 @@ export class ExcelReportComponent implements OnInit {
})
})
}
}
getExcelColumn
()
{
const
body
=
{
templateId
:
this
.
excelReport
.
templateId
,
fileName
:
this
.
excelReport
.
fileName
}
this
.
searchSettings
=
{
fields
:
[],
operator
:
'contains'
,
ignoreCase
:
false
};
this
.
columns
=
[]
this
.
pivotColumns
=
[]
this
.
customCubeService
.
getExcelColumn
(
body
).
subscribe
((
response
:
any
)
=>
{
this
.
searchSettings
=
{
fields
:
response
.
map
((
e
:
any
)
=>
e
.
split
(
':'
)[
0
]),
operator
:
'contains'
,
ignoreCase
:
false
};
response
.
forEach
((
e
:
any
,
i
:
number
)
=>
{
const
[
field
,
headerText
]
=
e
.
split
(
':'
)
this
.
columns
.
push
({
field
:
field
,
headerText
:
headerText
,
type
:
"string"
,
isPrimaryKey
:
i
==
0
,
})
this
.
pivotColumns
.
push
({
name
:
field
,
caption
:
headerText
})
});
},
error
=>
{
})
}
matDateChange
(
target
:
{
[
key
:
string
]:
any
},
field
:
string
,
dateIso
:
string
)
{
matDateChange
(
target
:
{
[
key
:
string
]:
any
},
field
:
string
,
dateIso
:
string
)
{
target
[
field
]
=
this
.
toYYYYMMDD
(
dateIso
)
target
[
field
]
=
this
.
toYYYYMMDD
(
dateIso
)
}
}
...
@@ -168,9 +222,66 @@ export class ExcelReportComponent implements OnInit {
...
@@ -168,9 +222,66 @@ export class ExcelReportComponent implements OnInit {
selectData
(
data
:
any
)
{
selectData
(
data
:
any
)
{
const
item
=
this
.
variableSheet
.
find
((
i
:
any
)
=>
i
.
key
===
this
.
keySelect
);
const
item
=
this
.
variableSheet
.
find
((
i
:
any
)
=>
i
.
key
===
this
.
keySelect
);
if
(
item
)
item
.
value
=
data
;
if
(
item
)
item
.
value
=
data
;
this
.
select
[
this
.
keySelect
]
=
data
this
.
cdr
.
detectChanges
()
this
.
cdr
.
detectChanges
()
}
}
getExcelData
(
type
:
'grid'
|
'pivot'
)
{
this
.
loadingExcel
=
true
this
.
dataList
=
[]
this
.
setPerspective
=
''
const
body
:
any
=
{
templateId
:
this
.
excelReport
.
templateId
,
fileName
:
this
.
excelReport
.
fileName
};
this
.
variableSheet
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
const
i
=
index
+
1
;
body
[
`key
${
i
}
`
]
=
item
.
key
;
if
(
item
.
type
==
'help'
)
{
body
[
`val
${
i
}
`
]
=
this
.
select
[
item
.
key
].
id
}
else
if
(
item
.
type
==
'list'
||
item
.
type
==
'radio'
||
item
.
type
==
'text'
)
{
body
[
`val
${
i
}
`
]
=
this
.
select
[
item
.
key
]
}
else
if
(
item
.
type
==
'calendar'
)
{
body
[
`val
${
i
}
`
]
=
this
.
toDateStringOnly
(
this
.
select
[
item
.
key
]).
split
(
'-'
).
reverse
().
join
(
'-'
)
}
});
forkJoin
({
excelData
:
this
.
customCubeService
.
getExcelData
(
body
),
excelPerspective
:
this
.
customCubeService
.
getExcelPerspective
(
body
),
}).
subscribe
({
next
:
response
=>
{
this
.
dataList
=
response
.
excelData
as
any
this
.
loadingExcel
=
false
if
(
type
==
'grid'
)
{
this
.
openGridModal
((
response
.
excelPerspective
as
any
).
dataGridStr
)
}
else
if
(
type
==
'pivot'
)
{
this
.
openPivotModal
((
response
.
excelPerspective
as
any
).
pivotStr
)
}
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
this
.
loadingExcel
=
false
}
})
}
openGridModal
(
setPerspective
:
string
)
{
this
.
dialogRef
=
this
.
dialog
.
open
(
this
.
girdModal
,
{
width
:
'60vw'
,
disableClose
:
false
,
});
setTimeout
(()
=>
{
this
.
setPerspective
=
setPerspective
},
10
)
}
openPivotModal
(
setPerspective
:
string
)
{
this
.
dialogRef
=
this
.
dialog
.
open
(
this
.
pivotModal
,
{
width
:
'60vw'
,
disableClose
:
false
,
});
setTimeout
(()
=>
{
this
.
setPerspective
=
setPerspective
},
10
)
}
dowloadExcelReport
()
{
dowloadExcelReport
()
{
this
.
loadingExcel
=
true
this
.
loadingExcel
=
true
const
fileName
=
this
.
excelReport
.
param
.
excelFile
const
fileName
=
this
.
excelReport
.
param
.
excelFile
...
@@ -181,7 +292,7 @@ export class ExcelReportComponent implements OnInit {
...
@@ -181,7 +292,7 @@ export class ExcelReportComponent implements OnInit {
}
else
if
(
item
.
type
==
'list'
||
item
.
type
==
'radio'
||
item
.
type
==
'text'
)
{
}
else
if
(
item
.
type
==
'list'
||
item
.
type
==
'radio'
||
item
.
type
==
'text'
)
{
return
"__"
+
item
.
key
+
"="
+
this
.
select
[
item
.
key
]
return
"__"
+
item
.
key
+
"="
+
this
.
select
[
item
.
key
]
}
else
if
(
item
.
type
==
'calendar'
)
{
}
else
if
(
item
.
type
==
'calendar'
)
{
return
"__"
+
item
.
key
+
"="
+
this
.
toDateStringOnly
(
this
.
select
[
item
.
key
])
return
"__"
+
item
.
key
+
"="
+
this
.
toDateStringOnly
(
this
.
select
[
item
.
key
])
.
split
(
'-'
).
reverse
().
join
(
'-'
)
}
}
return
""
return
""
}).
join
(
'|'
)
}).
join
(
'|'
)
...
@@ -207,13 +318,82 @@ export class ExcelReportComponent implements OnInit {
...
@@ -207,13 +318,82 @@ export class ExcelReportComponent implements OnInit {
})
})
}
}
toDateStringOnly
(
input
:
string
|
Date
):
string
{
toDateStringOnly
(
input
:
string
|
Date
):
string
{
const
date
=
new
Date
(
input
);
let
date
:
Date
;
if
(
isNaN
(
date
.
getTime
()))
return
''
;
// ถ้าไม่ใช่วันจริง คืนค่าว่าง
if
(
typeof
input
===
'string'
)
{
// เช็กว่าเป็น dd-mm-yyyy
const
ddMmYyyy
=
/^
(\d{2})
-
(\d{2})
-
(\d{4})
$/
;
const
match
=
input
.
match
(
ddMmYyyy
);
if
(
match
)
{
// สลับเป็น yyyy-mm-dd เพื่อให้ new Date ทำงานถูกต้อง
const
[
_
,
day
,
month
,
year
]
=
match
;
date
=
new
Date
(
`
${
year
}
-
${
month
}
-
${
day
}
`
);
}
else
{
// ใช้ new Date ปกติ (เช่น yyyy-mm-dd หรือ ISO string)
date
=
new
Date
(
input
);
}
}
else
{
date
=
input
;
}
if
(
isNaN
(
date
.
getTime
()))
return
''
;
// ไม่ใช่วันจริง
const
year
=
date
.
getFullYear
();
const
year
=
date
.
getFullYear
();
const
month
=
`
${
date
.
getMonth
()
+
1
}
`
.
padStart
(
2
,
'0'
);
const
month
=
`
${
date
.
getMonth
()
+
1
}
`
.
padStart
(
2
,
'0'
);
const
day
=
`
${
date
.
getDate
()}
`
.
padStart
(
2
,
'0'
);
const
day
=
`
${
date
.
getDate
()}
`
.
padStart
(
2
,
'0'
);
return
`
${
year
}
-
${
month
}
-
${
day
}
`
;
return
`
${
year
}
-
${
month
}
-
${
day
}
`
;
}
}
savePerspective
(
type
:
'grid'
|
'pivot'
)
{
if
(
type
==
'grid'
)
{
this
.
loadingExcel
=
true
setTimeout
(()
=>
{
const
body
=
{
templateId
:
this
.
excelReport
.
templateId
,
fileName
:
this
.
excelReport
.
fileName
,
dataGridStr
:
this
.
gridLayout
.
data
,
pivotStr
:
""
,
}
this
.
customCubeService
.
saveExcelPerspective
(
body
).
subscribe
(
response
=>
{
this
.
loadingExcel
=
false
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
cdr
.
detectChanges
()
},
error
=>
{
this
.
loadingExcel
=
false
this
.
showAlert
(
error
.
message
,
'error'
)
this
.
cdr
.
detectChanges
()
})
this
.
cdr
.
detectChanges
();
},
500
);
}
else
if
(
type
==
'pivot'
)
{
this
.
loadingExcel
=
true
setTimeout
(()
=>
{
const
body
=
{
templateId
:
this
.
excelReport
.
templateId
,
fileName
:
this
.
excelReport
.
fileName
,
dataGridStr
:
''
,
pivotStr
:
this
.
pivotLayout
.
data
,
}
this
.
customCubeService
.
saveExcelPerspective
(
body
).
subscribe
(
response
=>
{
this
.
loadingExcel
=
false
this
.
showAlert
(
response
.
message
,
'success'
)
this
.
cdr
.
detectChanges
()
},
error
=>
{
this
.
loadingExcel
=
false
this
.
showAlert
(
error
.
message
,
'error'
)
this
.
cdr
.
detectChanges
()
})
this
.
cdr
.
detectChanges
();
},
500
);
}
}
showAlert
(
text
:
string
,
type
:
'success'
|
'error'
)
{
Swal
.
fire
({
title
:
'แจ้งเตือน'
,
text
:
text
,
icon
:
type
,
confirmButtonText
:
'ตกลง'
,
});
}
}
}
src/app/components/pivot-syncfution/pivot-syncfution.component.html
0 → 100644
View file @
a695ebf3
<ejs-pivotview
#
pivotview
id=
'PivotView'
[
dataSourceSettings
]="
dataSourceSettings
"
[
displayOption
]='
displayOption
'
[
toolbar
]='
toolbarOptions
'
[
allowExcelExport
]='
true
'
[
allowNumberFormatting
]='
true
'
[
allowConditionalFormatting
]='
true
'
[
allowPdfExport
]='
true
'
[
showToolbar
]='
true
'
[
allowCalculatedField
]='
true
'
[
showFieldList
]='
true
'
width=
'100%'
height=
'550'
></ejs-pivotview>
\ No newline at end of file
src/app/components/pivot-syncfution/pivot-syncfution.component.scss
0 → 100644
View file @
a695ebf3
// th{
// position: relative; // เทียบเท่า class "relative"
// padding: 10px; // เทียบเท่า class "px-10px py-10px" (อาจเปลี่ยนตามต้องการ)
// background-color: rgb(96 165 250 / 0.1); // ตัวอย่างแทน "bg-soft-secondary"
// color: #2b2b2b; // ตัวอย่างแทน "text-primary"
// text-align: center !important; // เทียบเท่า "!text-center"
// // หากต้องการดีไซน์อื่น ๆ เพิ่มเติมก็ใส่ในนี้ได้เลย เช่น:
// font-weight: 600;
// border-bottom: 1px solid #eee;
// }
.e-headercell
,
.e-detailheadercell
{
background-color
:
rgb
(
96
165
250
/
0
.1
)
!
important
;
}
.e-pager
.e-currentitem
,
.e-pager
.e-currentitem
:hover
{
background
:
rgb
(
96
165
250
)
!
important
;
color
:
#fff
;
opacity
:
1
!
important
;
}
.e-checkbox-wrapper
.e-frame.e-check
,
.e-css.e-checkbox-wrapper
.e-frame.e-check
{
background-color
:
rgb
(
96
165
250
)
!
important
;
border-color
:
transparent
;
color
:
#fff
;
}
.e-checkbox-wrapper
.e-frame
,
.e-css.e-checkbox-wrapper
.e-frame
{
border
:
1px
solid
!
important
;
border-radius
:
2px
;
box-sizing
:
border-box
;
cursor
:
pointer
;
display
:
inline-block
;
font-family
:
"e-icons"
;
height
:
18px
;
line-height
:
10px
;
padding
:
2px
0
;
text-align
:
center
;
vertical-align
:
middle
;
width
:
1rem
!
important
;
border-color
:
#64748b
!
important
;
}
.e-grid
td
.e-selectionbackground
{
background-color
:
#aec2ec
!
important
;
}
src/app/components/pivot-syncfution/pivot-syncfution.component.ts
0 → 100644
View file @
a695ebf3
import
{
ChangeDetectorRef
,
Component
,
EventEmitter
,
Input
,
OnInit
,
Output
,
SimpleChanges
,
ViewChild
}
from
"@angular/core"
;
import
{
IDataOptions
,
PivotView
,
ToolbarItems
,
GroupingBarService
,
ToolbarService
,
PDFExportService
,
ExcelExportService
,
DisplayOption
,
IDataSet
,
DataSourceSettings
,
PivotViewComponent
,
FieldList
}
from
'@syncfusion/ej2-angular-pivotview'
;
import
{
DataSourceSettingsModel
}
from
'@syncfusion/ej2-pivotview/src/model/datasourcesettings-model'
;
@
Component
({
selector
:
'app-pivot-syncfution'
,
templateUrl
:
'./pivot-syncfution.component.html'
,
styleUrls
:
[
'./pivot-syncfution.component.scss'
],
providers
:
[
GroupingBarService
,
ToolbarService
,
PDFExportService
,
ExcelExportService
]
})
export
class
PivotSyncfutionComponent
implements
OnInit
{
dataSourceSettings
:
DataSourceSettingsModel
=
{
dataSource
:
[],
expandAll
:
false
,
enableSorting
:
true
,
drilledMembers
:
[],
columns
:
[],
values
:
[],
rows
:
[],
formatSettings
:
[],
filters
:
[]
};
@
Input
()
dataSource
:
any
@
Input
()
columns
:
any
toolbarOptions
:
ToolbarItems
[]
=
[
'Grid'
,
'Chart'
,
'Export'
,
'SubTotal'
,
'GrandTotal'
,
'Formatting'
,
'FieldList'
]
displayOption
:
DisplayOption
=
{
view
:
'Both'
}
as
DisplayOption
;
@
ViewChild
(
'pivotview'
)
public
pivotview
?:
PivotViewComponent
;
@
Input
()
sendLayout
=
false
@
Input
()
pivotLayout
=
''
@
Output
()
layout
=
new
EventEmitter
<
any
>
();
constructor
(
private
cdr
:
ChangeDetectorRef
)
{
}
ngOnInit
():
void
{
}
ngOnChanges
(
changes
:
SimpleChanges
):
void
{
if
(
changes
[
'dataSource'
]?.
currentValue
||
changes
[
'columns'
]?.
currentValue
)
{
this
.
dataSourceSettings
=
{
dataSource
:
this
.
dataSource
,
columns
:
this
.
columns
,
values
:
[],
rows
:
[],
expandAll
:
true
,
enableSorting
:
true
,
drilledMembers
:
[],
filters
:
[],
formatSettings
:
[]
};
}
if
(
changes
[
'pivotLayout'
])
{
if
(
changes
[
'pivotLayout'
].
currentValue
)
{
const
layout
=
JSON
.
parse
(
changes
[
'pivotLayout'
].
currentValue
)
this
.
pivotview
?.
setProperties
(
layout
)
}
}
if
(
changes
[
'sendLayout'
])
{
if
(
this
.
pivotview
)
{
const
layout
=
this
.
pivotview
?.
getPersistData
();
if
(
layout
)
{
this
.
layout
.
emit
(
layout
)
}
}
}
}
}
\ No newline at end of file
src/app/shared/services/custom-cube.service.ts
0 → 100644
View file @
a695ebf3
import
{
Injectable
}
from
'@angular/core'
;
import
{
HttpClient
,
HttpHeaders
}
from
'@angular/common/http'
;
import
{
Observable
}
from
'rxjs'
;
import
{
TemplateFileMiniModel
}
from
'../model/template-file-mini.model'
;
import
{
AlertModel
}
from
'../model/alert.model'
;
import
{
environment
}
from
'src/environments/environment'
;
@
Injectable
({
providedIn
:
'root'
})
export
class
CustomCubeService
{
constructor
(
private
http
:
HttpClient
,
)
{
}
getExcelColumn
(
body
:
{
templateId
:
string
,
fileName
:
string
,
})
{
return
this
.
http
.
post
(
environment
.
portal
+
"/customcube/get-excel-column?companyid=eb2f4f30-edaf-11ee-a69a-c7680edc0e47"
,
body
)
}
getExcelData
(
body
:
any
)
{
return
this
.
http
.
post
(
environment
.
portal
+
"/customcube/get-excel-data?companyid=eb2f4f30-edaf-11ee-a69a-c7680edc0e47"
,
body
)
}
saveExcelPerspective
(
body
:
{
templateId
:
string
,
fileName
:
string
,
dataGridStr
:
string
,
pivotStr
:
string
,
}):
Observable
<
AlertModel
>
{
return
this
.
http
.
post
<
AlertModel
>
(
environment
.
portal
+
"/customcube/save-excel-perspective?companyid=eb2f4f30-edaf-11ee-a69a-c7680edc0e47"
,
body
)
}
getExcelPerspective
(
body
:
{
templateId
:
string
,
fileName
:
string
,
})
{
return
this
.
http
.
post
(
environment
.
portal
+
"/customcube/get-excel-perspective?companyid=eb2f4f30-edaf-11ee-a69a-c7680edc0e47"
,
body
)
}
}
\ No newline at end of file
src/main.ts
View file @
a695ebf3
...
@@ -4,7 +4,8 @@ import { registerLicense } from '@syncfusion/ej2-base';
...
@@ -4,7 +4,8 @@ import { registerLicense } from '@syncfusion/ej2-base';
import
{
environment
}
from
'./environments/environment'
;
import
{
environment
}
from
'./environments/environment'
;
import
{
enableProdMode
}
from
'@angular/core'
;
import
{
enableProdMode
}
from
'@angular/core'
;
// Registering Syncfusion license key
// Registering Syncfusion license key
registerLicense
(
'ORg4AjUWIQA/Gnt2U1hhQlJBfV5AQmBIYVp/TGpJfl96cVxMZVVBJAtUQF1hTX5ad0VjXH9ac3NRQWhc'
);
registerLicense
(
'ORg4AjUWIQA/Gnt2XFhhQlJHfV5AQmBIYVp/TGpJfl96cVxMZVVBJAtUQF1hTH5WdUVjWXtXdHNdRWFbWkdx'
);
if
(
environment
.
production
)
{
if
(
environment
.
production
)
{
enableProdMode
();
enableProdMode
();
...
...
src/styles.scss
View file @
a695ebf3
...
@@ -46,11 +46,27 @@
...
@@ -46,11 +46,27 @@
@import
'../node_modules/@syncfusion/ej2-splitbuttons/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-splitbuttons/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-angular-grids/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-angular-grids/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-base/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-buttons/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-calendars/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-dropdowns/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-inputs/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-navigations/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-popups/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-splitbuttons/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-angular-grids/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-grids/styles/material.css'
;
@import
'../node_modules/@syncfusion/ej2-lists/styles/material.css'
;
@import
"../node_modules/@syncfusion/ej2-splitbuttons/styles/material.css"
;
@import
'../node_modules/@syncfusion/ej2-angular-pivotview/styles/material.css'
;
@media
(
min-width
:
992px
)
{
@media
(
min-width
:
992px
)
{
[
data-nav-layout
=
"horizontal"
][
dir
=
"rtl"
]
.main-menu-container
{
[
data-nav-layout
=
"horizontal"
][
dir
=
"rtl"
]
.main-menu-container
{
.slide-right
{
.slide-right
{
@apply
left-
[
3
%
]
;
@apply
left-
[
3
%
]
;
}
}
.slide-left
{
.slide-left
{
@apply
right-
[
3
%
]
;
@apply
right-
[
3
%
]
;
}
}
...
@@ -87,15 +103,19 @@
...
@@ -87,15 +103,19 @@
.mdc-text-field--filled
:not
(
.mdc-text-field--disabled
)
{
.mdc-text-field--filled
:not
(
.mdc-text-field--disabled
)
{
background-color
:
white
!
important
;
background-color
:
white
!
important
;
}
}
mat-label
{
mat-label
{
font-size
:
0
.875rem
!
important
;
font-size
:
0
.875rem
!
important
;
}
}
.mat-mdc-form-field-focus-overlay
{
.mat-mdc-form-field-focus-overlay
{
background-color
:
rgba
(
0
,
0
,
0
,
0
);
background-color
:
rgba
(
0
,
0
,
0
,
0
);
}
}
.
mdc-text-field--filled
.
mdc-line-ripple
:
:
after
{
.
mdc-text-field--filled
.
mdc-line-ripple
:
:
after
{
border-bottom-color
:
#ffffff
;
border-bottom-color
:
#ffffff
;
}
}
.mdc-text-field--focused
:not
(
.mdc-text-field--disabled
)
.mdc-floating-label
{
.mdc-text-field--focused
:not
(
.mdc-text-field--disabled
)
.mdc-floating-label
{
color
:
#293549
!
important
;
color
:
#293549
!
important
;
}
}
...
@@ -108,6 +128,7 @@
...
@@ -108,6 +128,7 @@
.responsive-logo-light
{
.responsive-logo-light
{
display
:
block
#{
!
important
}
;
display
:
block
#{
!
important
}
;
}
}
.responsive-logo-dark
{
.responsive-logo-dark
{
display
:
none
#{
!
important
}
;
display
:
none
#{
!
important
}
;
}
}
...
@@ -115,11 +136,13 @@
...
@@ -115,11 +136,13 @@
}
}
}
}
}
}
[
data-nav-layout
=
"horizontal"
]
{
[
data-nav-layout
=
"horizontal"
]
{
@media
(
max-width
:
991px
)
{
@media
(
max-width
:
991px
)
{
.landing-body
.responsive-logo
.responsive-logo-dark
{
.landing-body
.responsive-logo
.responsive-logo-dark
{
display
:
none
!
important
;
display
:
none
!
important
;
}
}
.landing-body
.responsive-logo
.responsive-logo-light
{
.landing-body
.responsive-logo
.responsive-logo-light
{
display
:
block
!
important
;
display
:
block
!
important
;
}
}
...
@@ -135,6 +158,7 @@
...
@@ -135,6 +158,7 @@
.ti-form-select
{
.ti-form-select
{
@apply
border-t-
[
0px
]
w-
[
100
%
]
#{
!
important
}
;
@apply
border-t-
[
0px
]
w-
[
100
%
]
#{
!
important
}
;
}
}
.ng-select.ng-select-single
.ng-select-container
{
.ng-select.ng-select-single
.ng-select-container
{
@apply
border-t-
[
0px
]
#{
!
important
}
;
@apply
border-t-
[
0px
]
#{
!
important
}
;
}
}
...
@@ -143,6 +167,7 @@
...
@@ -143,6 +167,7 @@
[
data-width
=
"boxed"
]
{
[
data-width
=
"boxed"
]
{
@media
(
min-width
:
1400px
)
{
@media
(
min-width
:
1400px
)
{
.xxxl
\
:col-span-3
,
.xxxl
\
:col-span-3
,
.xxxl
\
:col-span-4
,
.xxxl
\
:col-span-4
,
.xxxl
\
:col-span-6
,
.xxxl
\
:col-span-6
,
...
@@ -150,13 +175,16 @@
...
@@ -150,13 +175,16 @@
@apply
col-span-12
;
@apply
col-span-12
;
}
}
}
}
.mat-mdc-form-field-infix
{
.mat-mdc-form-field-infix
{
width
:
90px
;
width
:
90px
;
}
}
.timepicker
.mat-mdc-text-field-wrapper
:not
(
.mdc-text-field--outlined
)
.mat-mdc-form-field-infix
{
.timepicker
.mat-mdc-text-field-wrapper
:not
(
.mdc-text-field--outlined
)
.mat-mdc-form-field-infix
{
margin-inline-start
:
10px
;
margin-inline-start
:
10px
;
}
}
}
}
@media
(
min-width
:
1800px
)
{
@media
(
min-width
:
1800px
)
{
.xxxl
\
:col-span-9
{
.xxxl
\
:col-span-9
{
@apply
col-span-9
;
@apply
col-span-9
;
...
@@ -167,39 +195,48 @@
...
@@ -167,39 +195,48 @@
::-webkit-scrollbar
{
::-webkit-scrollbar
{
@apply
w-
[
0px
]
bg-black
/
30
#{
!
important
}
;
@apply
w-
[
0px
]
bg-black
/
30
#{
!
important
}
;
}
}
.
input-date-picker
.
dp-input-container
input
:
:
placeholder
{
.
input-date-picker
.
dp-input-container
input
:
:
placeholder
{
@apply
text-white
/
50
;
@apply
text-white
/
50
;
}
}
.ng-dropdown-panel
.ng-dropdown-panel-items
.ng-option.ng-option-selected
{
.ng-dropdown-panel
.ng-dropdown-panel-items
.ng-option.ng-option-selected
{
@apply
bg-black
/
30
;
@apply
bg-black
/
30
;
}
}
.ng-select
.ng-select-container
{
.ng-select
.ng-select-container
{
@apply
border-white
/
10
#{
!
important
}
;
@apply
border-white
/
10
#{
!
important
}
;
}
}
.mat-calendar-table-header
th
{
.mat-calendar-table-header
th
{
color
:
rgb
(
255
255
255
/
0
.6
)
!
important
;
color
:
rgb
(
255
255
255
/
0
.6
)
!
important
;
}
}
}
}
[
dir
=
"rtl"
]
{
[
dir
=
"rtl"
]
{
.apexcharts-title-text
,
.apexcharts-title-text
,
.apexcharts-subtitle-text
{
.apexcharts-subtitle-text
{
text-anchor
:
end
;
text-anchor
:
end
;
}
}
.apexcharts-xaxis
,
.apexcharts-xaxis
,
.apexcharts-yaxis
{
.apexcharts-yaxis
{
text
{
text
{
direction
:
ltr
;
direction
:
ltr
;
}
}
}
}
.apexcharts-legend-text
{
.apexcharts-legend-text
{
// padding-right: 18px;
// padding-right: 18px;
// margin-right: -15px;
// margin-right: -15px;
@apply
pr-
[
18px
]
pl-
[
0px
]
mr-
[
-15px
]
ml-
[
0px
]
;
@apply
pr-
[
18px
]
pl-
[
0px
]
mr-
[
-15px
]
ml-
[
0px
]
;
}
}
.mat-datepicker-content
{
.mat-datepicker-content
{
direction
:
ltr
;
direction
:
ltr
;
}
}
.mat-calendar-previous-button
,
.mat-calendar-previous-button
,
.mat-calendar-next-button
{
.mat-calendar-next-button
{
transform
:
rotate
(
0deg
)
!
important
;
transform
:
rotate
(
0deg
)
!
important
;
...
@@ -222,23 +259,29 @@
...
@@ -222,23 +259,29 @@
@apply
shrink-0
;
@apply
shrink-0
;
}
}
}
}
.apexcharts-legend
.apexcharts-legend-text
{
.apexcharts-legend
.apexcharts-legend-text
{
@apply
dark
:text-white
#{
!
important
}
;
@apply
dark
:text-white
#{
!
important
}
;
}
}
.mat-calendar-controls
{
.mat-calendar-controls
{
@apply
m-0
#{
!
important
}
;
@apply
m-0
#{
!
important
}
;
}
}
.mat-datepicker-content
{
.mat-datepicker-content
{
@apply
transform-none
#{
!
important
}
;
@apply
transform-none
#{
!
important
}
;
}
}
#todo-compose
{
#todo-compose
{
.ng-select-container
{
.ng-select-container
{
width
:
100%
!
important
;
width
:
100%
!
important
;
}
}
}
}
ngx-dropzone
{
ngx-dropzone
{
@apply
border-gray-200
dark
:border-white
/
10
h-20
#{
!
important
}
;
@apply
border-gray-200
dark
:border-white
/
10
h-20
#{
!
important
}
;
}
}
.ng-select.ng-select-multiple
.ng-select-container
.ng-value-container
.ng-value
.ng-value-icon
:hover
{
.ng-select.ng-select-multiple
.ng-select-container
.ng-value-container
.ng-value
.ng-value-icon
:hover
{
@apply
bg-primary
;
@apply
bg-primary
;
}
}
...
@@ -248,24 +291,27 @@ ngx-dropzone {
...
@@ -248,24 +291,27 @@ ngx-dropzone {
/* custom styles */
/* custom styles */
@media
(
min-width
:
992px
)
{
@media
(
min-width
:
992px
)
{
[
data-nav-style
=
"icon-hover"
],
[
data-nav-style
=
"icon-hover"
],
[
data-nav-style
=
"menu-hover"
]
{
[
data-nav-style
=
"menu-hover"
]
{
.app-sidebar
{
.app-sidebar
{
.slide.has-sub
{
.slide.has-sub
{
.child1
>
.sub-slide
:hover
>
.child2
{
.child1
>
.sub-slide
:hover
>
.child2
{
@apply
block
-mt-
[
30px
]
#{
!
important
}
;
@apply
block
-mt-
[
30px
]
#{
!
important
}
;
}
}
}
}
}
}
}
}
}
}
/* advanced forms */
/* advanced forms */
.mdc-text-field--filled
:not
(
.mdc-text-field--disabled
)
.mdc-line-ripple
::after
{
.mdc-text-field--filled
:not
(
.mdc-text-field--disabled
)
.mdc-line-ripple
::after
{
--mdc-filled-text-field-focus-active-indicator-color
:
transparent
;
--mdc-filled-text-field-focus-active-indicator-color
:
transparent
;
}
}
/* advanced forms */
/* advanced forms */
.ng-select.ng-select-focused
:not
(
.ng-select-opened
)
>
.ng-select-container
{
.ng-select.ng-select-focused
:not
(
.ng-select-opened
)
>
.ng-select-container
{
@apply
shadow-none
;
@apply
shadow-none
;
}
}
...
@@ -278,59 +324,75 @@ ngx-dropzone {
...
@@ -278,59 +324,75 @@ ngx-dropzone {
::-webkit-calendar-picker-indicator
{
::-webkit-calendar-picker-indicator
{
@apply
invert
;
@apply
invert
;
}
}
.ae-font
.ae-picker-label
{
.ae-font
.ae-picker-label
{
@apply
bg-bodybg
border-white
/
10
;
@apply
bg-bodybg
border-white
/
10
;
}
}
.ae-font
.ae-picker-options
{
.ae-font
.ae-picker-options
{
@apply
bg-bodybg
;
@apply
bg-bodybg
;
}
}
.ae-font.ae-picker
{
.ae-font.ae-picker
{
@apply
text-white
;
@apply
text-white
;
}
}
.ae-font
.ae-picker-label
:before
{
.ae-font
.ae-picker-label
:before
{
@apply
bg-none
;
@apply
bg-none
;
}
}
.ae-font
.ae-picker-label
:hover
{
.ae-font
.ae-picker-label
:hover
{
@apply
bg-bodybg
;
@apply
bg-bodybg
;
}
}
.ae-font
.ae-picker-label
svg
.ae-stroke
{
.ae-font
.ae-picker-label
svg
.ae-stroke
{
@apply
stroke-
[
#fff
]
;
@apply
stroke-
[
#fff
]
;
}
}
.ae-font
.ae-picker-label
:hover:before
{
.ae-font
.ae-picker-label
:hover:before
{
background
:
linear-gradient
(
to
right
,
#293549
100%
,
#293549
100%
);
background
:
linear-gradient
(
to
right
,
#293549
100%
,
#293549
100%
);
}
}
.ae-font.ae-expanded
.ae-picker-options
{
.ae-font.ae-expanded
.ae-picker-options
{
@apply
border-white
/
10
;
@apply
border-white
/
10
;
}
}
.swal2-input
{
.swal2-input
{
@apply
bg-bgdark
#{
!
important
}
;
@apply
bg-bgdark
#{
!
important
}
;
}
}
.angular-editor-toolbar
{
.angular-editor-toolbar
{
@apply
bg-bodybg
border
border-white
/
10
#{
!
important
}
;
@apply
bg-bodybg
border
border-white
/
10
#{
!
important
}
;
}
}
.angular-editor-button
{
.angular-editor-button
{
@apply
bg-bgdark
border
border-white
/
10
#{
!
important
}
;
@apply
bg-bgdark
border
border-white
/
10
#{
!
important
}
;
}
}
.angular-editor-textarea
{
.angular-editor-textarea
{
@apply
border
border-white
/
10
#{
!
important
}
;
@apply
border
border-white
/
10
#{
!
important
}
;
}
}
.clock-face
{
.clock-face
{
@apply
bg-bodybg
#{
!
important
}
;
@apply
bg-bodybg
#{
!
important
}
;
}
}
.mat-mdc-dialog-container
.mdc-dialog__content
{
.mat-mdc-dialog-container
.mdc-dialog__content
{
// color: var(--mdc-dialog-supporting-text-color, rgba(0, 0, 0, 0.6));
// color: var(--mdc-dialog-supporting-text-color, rgba(0, 0, 0, 0.6));
--mdc-dialog-supporting-text-color
:
#fff
;
--mdc-dialog-supporting-text-color
:
#fff
;
}
}
}
}
/* dark */
/* dark */
/* tasks */
/* tasks */
@media
(
width
<=
23
.75rem
)
{
@media
(
width
<=
23
.75rem
)
{
.add-new-tasks
{
.add-new-tasks
{
.ng-select.ng-select-single
.ng-select-container
{
.ng-select.ng-select-single
.ng-select-container
{
@apply
w-
[
13
.125rem
]
;
@apply
w-
[
13
.125rem
]
;
}
}
}
}
}
}
/* tasks */
/* tasks */
/* advanced forms */
/* advanced forms */
...
@@ -338,6 +400,7 @@ ngx-dropzone {
...
@@ -338,6 +400,7 @@ ngx-dropzone {
ngx-mat-timepicker-face
.clock-face
{
ngx-mat-timepicker-face
.clock-face
{
@apply
w-
[
14
.375rem
]
h-
[
14
.375rem
]
#{
!
important
}
;
@apply
w-
[
14
.375rem
]
h-
[
14
.375rem
]
#{
!
important
}
;
}
}
ngx-mat-timepicker-face
.clock-face__number--outer
{
ngx-mat-timepicker-face
.clock-face__number--outer
{
@apply
h-
[
7
.375rem
]
#{
!
important
}
;
@apply
h-
[
7
.375rem
]
#{
!
important
}
;
}
}
...
@@ -346,16 +409,19 @@ ngx-dropzone {
...
@@ -346,16 +409,19 @@ ngx-dropzone {
@apply
top-
[
calc
(
50
%-120px
)]
#{
!
important
}
;
@apply
top-
[
calc
(
50
%-120px
)]
#{
!
important
}
;
}
}
}
}
/* advanced forms */
/* advanced forms */
/* colorpicker */
/* colorpicker */
.color-picker
{
.color-picker
{
.left
{
.left
{
@apply
py-
[
5px
]
#{
!
important
}
;
@apply
py-
[
5px
]
#{
!
important
}
;
}
}
.selected-color
{
.selected-color
{
@apply
top-
[
5px
]
#{
!
important
}
;
@apply
top-
[
5px
]
#{
!
important
}
;
}
}
}
}
/* colorpicker */
/* colorpicker */
.block-main-content
{
.block-main-content
{
...
@@ -371,45 +437,52 @@ ngx-dropzone {
...
@@ -371,45 +437,52 @@ ngx-dropzone {
margin-top
:
3px
;
margin-top
:
3px
;
}
}
.detail-td
{
.detail-td
{
font-size
:
12px
;
font-size
:
12px
;
padding-left
:
1
.5rem
;
padding-left
:
1
.5rem
;
}
}
.width-80
{
.width-80
{
width
:
80%
;
width
:
80%
;
}
}
.
\
!
width-80
{
.
\
!
width-80
{
width
:
80%
!
important
;
width
:
80%
!
important
;
}
}
.width-70
{
.width-70
{
width
:
70%
;
width
:
70%
;
}
}
.
\
!
width-70
{
.
\
!
width-70
{
width
:
70%
!
important
;
width
:
70%
!
important
;
}
}
.
\
!
box-modal
{
.
\
!
box-modal
{
box-shadow
:
0px
0px
0px
9999px
rgba
(
0
,
0
,
0
,
0
.25
)
!
important
;
box-shadow
:
0px
0px
0px
9999px
rgba
(
0
,
0
,
0
,
0
.25
)
!
important
;
-webkit-box-shadow
:
0px
0px
0px
9999px
rgba
(
0
,
0
,
0
,
0
.25
)
!
important
;
-webkit-box-shadow
:
0px
0px
0px
9999px
rgba
(
0
,
0
,
0
,
0
.25
)
!
important
;
-moz-box-shadow
:
0px
0px
0px
9999px
rgba
(
0
,
0
,
0
,
0
.25
)
!
important
;
-moz-box-shadow
:
0px
0px
0px
9999px
rgba
(
0
,
0
,
0
,
0
.25
)
!
important
;
}
}
.mat-mdc-dialog-container
.mdc-dialog__title
{
.mat-mdc-dialog-container
.mdc-dialog__title
{
font-family
:
inherit
!
important
;
font-family
:
inherit
!
important
;
color
:
rgb
(
var
(
--
color-primary
))
!
important
;
color
:
rgb
(
var
(
--
color-primary
))
!
important
;
font-weight
:
700
!
important
;
font-weight
:
700
!
important
;
font-size
:
1
.25rem
!
important
;
font-size
:
1
.25rem
!
important
;
line-height
:
2
.5rem
!
important
;
line-height
:
2
.5rem
!
important
;
border-bottom-width
:
1px
!
important
;
border-bottom-width
:
1px
!
important
;
border-bottom-color
:
rgb
(
226
,
232
,
240
)
!
important
;
border-bottom-color
:
rgb
(
226
,
232
,
240
)
!
important
;
}
.mdc-dialog__actions
{
border-top-width
:
1px
!
important
;
border-top-color
:
rgb
(
226
,
232
,
240
)
!
important
;
}
}
.mdc-dialog__actions
{
border-top-width
:
1px
!
important
;
border-top-color
:
rgb
(
226
,
232
,
240
)
!
important
;
}
.mat-mdc-dialog-content
{
.mat-mdc-dialog-content
{
max-height
:
80vh
!
important
;
max-height
:
80vh
!
important
;
}
}
.mat-mdc-dialog-container
.mdc-dialog__content
{
.mat-mdc-dialog-container
.mdc-dialog__content
{
padding-top
:
10px
!
important
;
padding-top
:
10px
!
important
;
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment