Commit a695ebf3 by Nattana Chaiyamat

แก้ไข รายงาน Excel portal

parent ee133ebf
...@@ -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": "26.2.10", "version": "29.2.10",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-angular-base/-/ej2-angular-base-26.2.10.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-angular-base/-/ej2-angular-base-29.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": "26.2.13", "version": "29.2.11",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-angular-dropdowns/-/ej2-angular-dropdowns-26.2.13.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-angular-dropdowns/-/ej2-angular-dropdowns-29.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": "26.2.14", "version": "29.2.11",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-angular-grids/-/ej2-angular-grids-26.2.14.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-angular-grids/-/ej2-angular-grids-29.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": "26.2.14", "version": "29.2.5",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-angular-inputs/-/ej2-angular-inputs-26.2.14.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-angular-inputs/-/ej2-angular-inputs-29.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": "26.2.10", "version": "29.2.11",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-26.2.10.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-29.2.11.tgz",
"integrity": "sha512-i7TCvXGNsHmCoLA9AlHn3dIAyH8Bce6KCZUGshJS0EKu623SkVKjvWVWtgfar75/8SbTGWZQlGqEW5egYm3uTA==", "integrity": "sha512-f1yM+6606zde7MR4q4d/q6foR3viHDA1/SkkTbLVwBME7I/0AcMG/i0eeTWJfJS8dgn91DGrsrEl0nZ9IA1CEQ==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-icons": "~26.2.10" "@syncfusion/ej2-icons": "~29.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": "26.2.10", "version": "29.2.5",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-26.2.10.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-29.2.5.tgz",
"integrity": "sha512-WcErxTAI9r5PQQSOQNSWsaKfzYdSww+YeQaT4SO1xItMPDAEhWSqscnTMk46vDg6w5vRbAbB1US+3BAXJtOS1w==", "integrity": "sha512-FbMi9rUi/7i8mpPA6KRaO7qW/3wIeH759u2/Ag0iMQUEdtdK7NvOCSFF29WESeBjW6GmEJ8zkW0340ymgXZruQ==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-base": "~26.2.10" "@syncfusion/ej2-base": "~29.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": "26.2.10", "version": "29.2.4",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-compression/-/ej2-compression-26.2.10.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-compression/-/ej2-compression-29.2.4.tgz",
"integrity": "sha512-cCcABW1SUG+O8lGKzAj3zi7yLguslFVxEFSfMk9GWajC9SNgzICiKo7HR8Sz3HG9M4tmrH5aNKqM2mbYG6Lr0Q==", "integrity": "sha512-mcgFmgtITGxoX4zV4LrFGAOHOQD8Z7is85vQE+k2Bf4OI6rZsLNIQFm6KEFg+sZMOSrABzKzg49yrktmlus4TQ==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-file-utils": "~26.2.10" "@syncfusion/ej2-file-utils": "~29.2.4"
} }
}, },
"node_modules/@syncfusion/ej2-data": { "node_modules/@syncfusion/ej2-data": {
"version": "26.2.14", "version": "29.2.4",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-26.2.14.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-29.2.4.tgz",
"integrity": "sha512-KJ5JsRwBbKjNLkFvkLgUz5SkC4zTJxS40mmBdWJTTROopKYjcHAe9HJxQJmJUOy/gxqfx5iPINVJaArqdtpPeQ==", "integrity": "sha512-2R+N65OPq+yfwTXyBz7NdD8MHGoxUbJSEWGT0kNEGMiobiI4AL+hfMYEhXWXE+DqL5Pm0txA4gTXQprFXXbccg==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-base": "~26.2.10" "@syncfusion/ej2-base": "~29.2.4"
} }
}, },
"node_modules/@syncfusion/ej2-dropdowns": { "node_modules/@syncfusion/ej2-dropdowns": {
"version": "26.2.13", "version": "29.2.11",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-26.2.13.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-29.2.11.tgz",
"integrity": "sha512-aRQyN5unJz2bnXL90zuE23rG5l8Q4y24ymigL33chsa+bWQw7Fx8MCHXqNostzo2A4qtsL6FLT7MoCOnGYpmkg==", "integrity": "sha512-NtWQexED+1T4Ef/vPkG+C9ANkUD3QPvXelyQaS2+j+mzipOhSBGiDcJYIE1R1wtqC3BhLfMZBPJbuXGc0p+mmQ==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-base": "~26.2.10", "@syncfusion/ej2-base": "~29.2.11",
"@syncfusion/ej2-data": "~26.2.10", "@syncfusion/ej2-data": "~29.2.4",
"@syncfusion/ej2-inputs": "~26.2.13", "@syncfusion/ej2-inputs": "~29.2.5",
"@syncfusion/ej2-lists": "~26.2.11", "@syncfusion/ej2-lists": "~29.2.4",
"@syncfusion/ej2-navigations": "~26.2.12", "@syncfusion/ej2-navigations": "~29.2.8",
"@syncfusion/ej2-notifications": "~26.2.10", "@syncfusion/ej2-notifications": "~29.2.4",
"@syncfusion/ej2-popups": "~26.2.11" "@syncfusion/ej2-popups": "~29.2.8"
} }
}, },
"node_modules/@syncfusion/ej2-excel-export": { "node_modules/@syncfusion/ej2-excel-export": {
"version": "26.2.11", "version": "29.2.4",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-excel-export/-/ej2-excel-export-26.2.11.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-excel-export/-/ej2-excel-export-29.2.4.tgz",
"integrity": "sha512-R0Q3QXXEDvdRrWrQIIxuGcJJCLPqrJpSlvGIw9SNmaB4FCOxDhgqHjrzorAremGw4e4Ke9lq0S5MZhaPU9Tebg==", "integrity": "sha512-N3VAdlhP+Wq/Uyl82ZSx6x8zL3slgtEKzWb13nrfas7cdJicYrbx02YZru5/euaeE3yGTlbKmhjjLLbkVFU/kQ==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-base": "~26.2.10", "@syncfusion/ej2-base": "~29.2.4",
"@syncfusion/ej2-compression": "~26.2.10" "@syncfusion/ej2-compression": "~29.2.4"
} }
}, },
"node_modules/@syncfusion/ej2-file-utils": { "node_modules/@syncfusion/ej2-file-utils": {
"version": "26.2.10", "version": "29.2.4",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-file-utils/-/ej2-file-utils-26.2.10.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-file-utils/-/ej2-file-utils-29.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": "26.2.14", "version": "29.2.11",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-grids/-/ej2-grids-26.2.14.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-grids/-/ej2-grids-29.2.11.tgz",
"integrity": "sha512-2dmXpp3z2dFMKKy6aCyXmtGpBHA2vRH8ygd0aRm+YwVX1H3HLeHHhkODyCDDzUpN2TX9Pt0/0qzX1tP3Crnnwg==", "integrity": "sha512-11jI7ve/qxQVsA4kP+v0Y1bEfO7kFCCtBekag80Fy+yio88Wcr5c1Q9SxgsmZtX+Kzk6oSymS497/zNcBDsUJw==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-base": "~26.2.10", "@syncfusion/ej2-base": "~29.2.11",
"@syncfusion/ej2-buttons": "~26.2.10", "@syncfusion/ej2-buttons": "~29.2.5",
"@syncfusion/ej2-calendars": "~26.2.12", "@syncfusion/ej2-calendars": "~29.2.11",
"@syncfusion/ej2-compression": "~26.2.10", "@syncfusion/ej2-compression": "~29.2.4",
"@syncfusion/ej2-data": "~26.2.14", "@syncfusion/ej2-data": "~29.2.4",
"@syncfusion/ej2-dropdowns": "~26.2.13", "@syncfusion/ej2-dropdowns": "~29.2.11",
"@syncfusion/ej2-excel-export": "~26.2.11", "@syncfusion/ej2-excel-export": "~29.2.4",
"@syncfusion/ej2-file-utils": "~26.2.10", "@syncfusion/ej2-file-utils": "~29.2.4",
"@syncfusion/ej2-inputs": "~26.2.14", "@syncfusion/ej2-inputs": "~29.2.5",
"@syncfusion/ej2-lists": "~26.2.14", "@syncfusion/ej2-lists": "~29.2.4",
"@syncfusion/ej2-navigations": "~26.2.12", "@syncfusion/ej2-navigations": "~29.2.8",
"@syncfusion/ej2-notifications": "~26.2.10", "@syncfusion/ej2-notifications": "~29.2.4",
"@syncfusion/ej2-pdf-export": "~26.2.14", "@syncfusion/ej2-pdf-export": "~29.2.4",
"@syncfusion/ej2-popups": "~26.2.11", "@syncfusion/ej2-popups": "~29.2.8",
"@syncfusion/ej2-splitbuttons": "~26.2.10" "@syncfusion/ej2-splitbuttons": "~29.2.4"
} }
}, },
"node_modules/@syncfusion/ej2-icons": { "node_modules/@syncfusion/ej2-icons": {
"version": "26.2.10", "version": "29.2.4",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-26.2.10.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-29.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": "26.2.14", "version": "29.2.5",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-26.2.14.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-29.2.5.tgz",
"integrity": "sha512-Lo8pqhhhCT30PVzj+gX6idPySSq4R0Sh36vnMZ7ubxf46rbg0Bw7Ftov8mPP9lLQSql+ixLYTjVpTEP1b9UIuA==", "integrity": "sha512-3ZqMl005qL0tENHcKvBfKUHMYQ/S0FRYjUDQVDPRsg28tE0Lz87oyamrxLYne3zDBEJ7kxWWnaNpgrTVvxsVNw==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-base": "~26.2.10", "@syncfusion/ej2-base": "~29.2.4",
"@syncfusion/ej2-buttons": "~26.2.10", "@syncfusion/ej2-buttons": "~29.2.5",
"@syncfusion/ej2-popups": "~26.2.11", "@syncfusion/ej2-popups": "~29.2.4",
"@syncfusion/ej2-splitbuttons": "~26.2.10" "@syncfusion/ej2-splitbuttons": "~29.2.4"
} }
}, },
"node_modules/@syncfusion/ej2-lists": { "node_modules/@syncfusion/ej2-lists": {
"version": "26.2.14", "version": "29.2.4",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-26.2.14.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-29.2.4.tgz",
"integrity": "sha512-8tQdVIzbHYcCjxYns57etpoJvTTp3lMY2bExbD4agZij1mdgGv/PMdp29RepcnSZMw6FsX6Eqp2hriXzrwL6Lg==", "integrity": "sha512-U64nGdZMjnhHG/+YCTF+WhJ3BoUxFyN2DXxv2qlC+wtayMbfioDRwqSQgxTkH8XE4TgrkRFenRtj5SbYLKliSw==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-base": "~26.2.10", "@syncfusion/ej2-base": "~29.2.4",
"@syncfusion/ej2-buttons": "~26.2.10", "@syncfusion/ej2-buttons": "~29.2.4",
"@syncfusion/ej2-data": "~26.2.14", "@syncfusion/ej2-data": "~29.2.4",
"@syncfusion/ej2-popups": "~26.2.11" "@syncfusion/ej2-popups": "~29.2.4"
} }
}, },
"node_modules/@syncfusion/ej2-navigations": { "node_modules/@syncfusion/ej2-navigations": {
"version": "26.2.12", "version": "29.2.8",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-26.2.12.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-29.2.8.tgz",
"integrity": "sha512-SAFkU75y/SZTSsrE+NyWX/+1HqyYr2sqARFAqXKu87mfYDsxVjsroSXQuDEbwRRujCr3reR0znEkW/zQ+RM5mA==", "integrity": "sha512-u14J+dEocqGIKgWCC1eiATv1nh40dgILsGPpGbYS+h9Y7y4YMBRzL2UCcuNHXgPKL7SiJ5lCaVORFco8cxyh6A==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-base": "~26.2.10", "@syncfusion/ej2-base": "~29.2.4",
"@syncfusion/ej2-buttons": "~26.2.10", "@syncfusion/ej2-buttons": "~29.2.5",
"@syncfusion/ej2-data": "~26.2.10", "@syncfusion/ej2-data": "~29.2.4",
"@syncfusion/ej2-inputs": "~26.2.11", "@syncfusion/ej2-inputs": "~29.2.5",
"@syncfusion/ej2-lists": "~26.2.11", "@syncfusion/ej2-lists": "~29.2.4",
"@syncfusion/ej2-popups": "~26.2.11" "@syncfusion/ej2-popups": "~29.2.8"
} }
}, },
"node_modules/@syncfusion/ej2-notifications": { "node_modules/@syncfusion/ej2-notifications": {
"version": "26.2.10", "version": "29.2.4",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-26.2.10.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-29.2.4.tgz",
"integrity": "sha512-TXpsKfTK7lERvvFNOcEB7n7veNLIEUMM9SY1Ihk06fl+YJa4YGL6aSVUvQJilE8PJyFeu4MpPN6bmVvEM01NCw==", "integrity": "sha512-rB9OuGHWVfnl9aBno+4KRH3aESbakLKYT70V7wjTxwS7u11XbxYwLiA4/YKsTQg/zrgOtcr3Ma1sVOeMYW17gQ==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-base": "~26.2.10", "@syncfusion/ej2-base": "~29.2.4",
"@syncfusion/ej2-buttons": "~26.2.10", "@syncfusion/ej2-buttons": "~29.2.4",
"@syncfusion/ej2-popups": "~26.2.10" "@syncfusion/ej2-popups": "~29.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": "26.2.11", "version": "29.2.8",
"resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-26.2.11.tgz", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-29.2.8.tgz",
"integrity": "sha512-JMIj3JLSgc6pjN3gAydCruD+DXyH565g5R+5jHsI78BfeDu+/uTdunm7May5zMgr2AmFAKOE6VdQhjEyr3/DJg==", "integrity": "sha512-LsXfTiFd6dyoE8XIxFOgC24TeQCqgLdjp3VOg0tWvyuWiZ/skH2sBlF2Y1CWqNJS07OKhtcjLY1h446RTBlalQ==",
"dependencies": { "dependencies": {
"@syncfusion/ej2-base": "~26.2.10", "@syncfusion/ej2-base": "~29.2.4",
"@syncfusion/ej2-buttons": "~26.2.10" "@syncfusion/ej2-buttons": "~29.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": {
......
...@@ -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",
......
...@@ -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,
......
...@@ -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) {
......
...@@ -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">
...@@ -179,3 +189,60 @@ ...@@ -179,3 +189,60 @@
</button> </button>
</mat-dialog-actions> </mat-dialog-actions>
</ng-template> </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>
\ No newline at end of file
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: 'ตกลง',
});
}
} }
<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
// 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;
}
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
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
...@@ -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();
......
...@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment