latest merge
All checks were successful
Build Docker Image / Preparing Dependecies (push) Successful in 5s
All checks were successful
Build Docker Image / Preparing Dependecies (push) Successful in 5s
This commit is contained in:
@@ -21,7 +21,7 @@
|
|||||||
"prefix": "app",
|
"prefix": "app",
|
||||||
"architect": {
|
"architect": {
|
||||||
"build": {
|
"build": {
|
||||||
"builder": "@angular-devkit/build-angular:application",
|
"builder": "@angular/build:application",
|
||||||
"options": {
|
"options": {
|
||||||
"outputPath": "dist/ng-ttc-frontend",
|
"outputPath": "dist/ng-ttc-frontend",
|
||||||
"index": "src/index.html",
|
"index": "src/index.html",
|
||||||
@@ -37,22 +37,33 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"styles": [
|
"styles": [
|
||||||
|
"node_modules/bootstrap/dist/css/bootstrap.min.css",
|
||||||
|
"node_modules/@fortawesome/fontawesome-free/css/all.min.css",
|
||||||
"src/styles.css"
|
"src/styles.css"
|
||||||
],
|
],
|
||||||
"scripts": []
|
"scripts": [
|
||||||
|
"node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"production": {
|
"production": {
|
||||||
|
"fileReplacements": [
|
||||||
|
{
|
||||||
|
"replace": "src/environments/environment.ts",
|
||||||
|
"with": "src/environments/environment.ts"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"optimization": true,
|
||||||
"budgets": [
|
"budgets": [
|
||||||
{
|
{
|
||||||
"type": "initial",
|
"type": "initial",
|
||||||
"maximumWarning": "500kB",
|
"maximumWarning": "1MB",
|
||||||
"maximumError": "1MB"
|
"maximumError": "2MB"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "anyComponentStyle",
|
"type": "anyComponentStyle",
|
||||||
"maximumWarning": "4kB",
|
"maximumWarning": "6kB",
|
||||||
"maximumError": "8kB"
|
"maximumError": "10kB"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"outputHashing": "all"
|
"outputHashing": "all"
|
||||||
@@ -72,7 +83,11 @@
|
|||||||
"defaultConfiguration": "production"
|
"defaultConfiguration": "production"
|
||||||
},
|
},
|
||||||
"serve": {
|
"serve": {
|
||||||
"builder": "@angular-devkit/build-angular:dev-server",
|
"builder": "@angular/build:dev-server",
|
||||||
|
"options": {
|
||||||
|
"host": "0.0.0.0",
|
||||||
|
"allowedHosts": ["localhost"]
|
||||||
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"production": {
|
"production": {
|
||||||
"buildTarget": "ng-ttc-frontend:build:production"
|
"buildTarget": "ng-ttc-frontend:build:production"
|
||||||
@@ -84,10 +99,10 @@
|
|||||||
"defaultConfiguration": "development"
|
"defaultConfiguration": "development"
|
||||||
},
|
},
|
||||||
"extract-i18n": {
|
"extract-i18n": {
|
||||||
"builder": "@angular-devkit/build-angular:extract-i18n"
|
"builder": "@angular/build:extract-i18n"
|
||||||
},
|
},
|
||||||
"test": {
|
"test": {
|
||||||
"builder": "@angular-devkit/build-angular:karma",
|
"builder": "@angular/build:karma",
|
||||||
"options": {
|
"options": {
|
||||||
"polyfills": [
|
"polyfills": [
|
||||||
"zone.js",
|
"zone.js",
|
||||||
@@ -101,9 +116,13 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"styles": [
|
"styles": [
|
||||||
|
"node_modules/bootstrap/dist/css/bootstrap.min.css",
|
||||||
|
"node_modules/@fortawesome/fontawesome-free/css/all.min.css",
|
||||||
"src/styles.css"
|
"src/styles.css"
|
||||||
],
|
],
|
||||||
"scripts": []
|
"scripts": [
|
||||||
|
"node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
6368
ng-ttc-frontend/package-lock.json
generated
6368
ng-ttc-frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -70,6 +70,7 @@
|
|||||||
"zone.js": "~0.15.0"
|
"zone.js": "~0.15.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@angular-devkit/build-angular": "^20.3.10",
|
||||||
"@angular/build": "^20.3.9",
|
"@angular/build": "^20.3.9",
|
||||||
"@angular/cli": "^20.3.9",
|
"@angular/cli": "^20.3.9",
|
||||||
"@angular/compiler-cli": "^20.3.10",
|
"@angular/compiler-cli": "^20.3.10",
|
||||||
|
|||||||
BIN
ng-ttc-frontend/public/logo.png
Normal file
BIN
ng-ttc-frontend/public/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 105 KiB |
@@ -1,221 +0,0 @@
|
|||||||
@import "tailwindcss";
|
|
||||||
|
|
||||||
/* Global base styles for the app. Keep lightweight and self-contained so
|
|
||||||
the login component can reliably fill the viewport without producing
|
|
||||||
an outer page scrollbar. */
|
|
||||||
|
|
||||||
/* Force ngx-toastr container to be fixed to the viewport and positioned correctly */
|
|
||||||
.toast-container.toast-top-right {
|
|
||||||
position: fixed !important;
|
|
||||||
top: 12px !important;
|
|
||||||
right: 12px !important;
|
|
||||||
z-index: 999999 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make sure the page and app root occupy full height so 100vh aligns */
|
|
||||||
html, body, app-root {
|
|
||||||
height: 100%;
|
|
||||||
min-height: 100%;
|
|
||||||
}
|
|
||||||
/* เริ่มต้น: สำหรับ Desktop */
|
|
||||||
.login-mobile {
|
|
||||||
width: 415px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ถ้าเป็น Mobile (<=768px) ให้ลบ width ออก */
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.login-mobile {
|
|
||||||
width: auto !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.sidebar {
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
height: 100%;
|
|
||||||
z-index: 50;
|
|
||||||
transition: transform 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* ✅ Toast Custom Style */
|
|
||||||
.ngx-toastr {
|
|
||||||
border-radius: 8px !important;
|
|
||||||
backdrop-filter: blur(6px);
|
|
||||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);
|
|
||||||
font-family: "Segoe UI", Roboto, sans-serif;
|
|
||||||
padding: 12px 16px !important;
|
|
||||||
min-width: 260px;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
.success-toast {
|
|
||||||
background: rgba(255, 255, 255, 0.8) !important;
|
|
||||||
color: #15803d !important;
|
|
||||||
border-left: 5px solid #16a34a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.error-toast {
|
|
||||||
background: rgba(239, 68, 68, 0.8) !important;
|
|
||||||
color: #fff !important;
|
|
||||||
border-left: 5px solid #dc2626;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toast-title {
|
|
||||||
font-weight: 600 !important;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toast-message {
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* sensible default box model */
|
|
||||||
*, *::before, *::after { box-sizing: border-box; }
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
/* Prevent the browser from showing a scroll bar for the page itself;
|
|
||||||
the login card will scroll internally if needed. */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Simple utilities used by nested components in this workspace */
|
|
||||||
.content-box {
|
|
||||||
border: 2px solid black;
|
|
||||||
padding: 10px;
|
|
||||||
margin: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.comp-box {
|
|
||||||
border: 1px solid #555;
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 10px;
|
|
||||||
margin: 10px;
|
|
||||||
/* Use flex centering so nested components (like the login widget)
|
|
||||||
are centered without forcing the document to scroll. */
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
min-height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If the project uses Bootstrap, the Bootstrap utilities will still apply.
|
|
||||||
These local utility rules only ensure a consistent appearance if Bootstrap
|
|
||||||
isn't available. */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.kanit-thin {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 100;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-extralight {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 200;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-light {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-regular {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-medium {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 500;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-semibold {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 600;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-bold {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-extrabold {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 800;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-black {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 900;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-thin-italic {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 100;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-extralight-italic {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 200;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-light-italic {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-regular-italic {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-medium-italic {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 500;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-semibold-italic {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 600;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-bold-italic {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-extrabold-italic {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 800;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.kanit-black-italic {
|
|
||||||
font-family: "Kanit", sans-serif;
|
|
||||||
font-weight: 900;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,18 +1,65 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule, Component } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
import { BrowserModule } from '@angular/platform-browser';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
|
|
||||||
|
import { ToastrModule } from 'ngx-toastr';
|
||||||
import { AppRoutingModule } from './app-routing.module';
|
import { AppRoutingModule } from './app-routing.module';
|
||||||
|
// import { RouterModule } from '@angular/router';
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
|
|
||||||
|
// import { LayoutComponent } from './content/content/layout/layout.component';
|
||||||
|
import { SidebarContentComponent } from './content/sidebar-content/sidebar-content.component';
|
||||||
|
import { SidebarComponent } from './component/sidebar/sidebar.component';
|
||||||
|
// import { ReactiveFormsModule } from '@angular/forms';
|
||||||
|
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
||||||
|
import { HttpClientModule } from '@angular/common/http';
|
||||||
|
import { LicensePrivacyTermsComponent } from './component/license-privacy-terms/license-privacy-terms.component';
|
||||||
|
// import { MainDashboardContentComponent } from './content/main-dashboard-content/main-dashboard-content.component';
|
||||||
|
// import { MainDashboardComponent } from './component/main-dashboard/main-dashboard.component';
|
||||||
|
// import { LoginForgotComponent } from './component/login-forgot/login-forgot.component';
|
||||||
|
// import { LoginPageComponent } from './component/login-page/login-page.component';
|
||||||
|
// import { LoginContentComponent } from './content/login-content/login-content.component';
|
||||||
|
|
||||||
|
|
||||||
|
import { provideCharts, withDefaultRegisterables } from 'ng2-charts';
|
||||||
|
// import { AccDateFormatPipe } from './pipe/dtmtodatetime.pipe';
|
||||||
|
// import { DtmtodatetimePipe } from './dtmtodatetime.pipe';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
AppComponent
|
AppComponent,
|
||||||
|
// LayoutComponent,
|
||||||
|
SidebarContentComponent,
|
||||||
|
SidebarComponent,
|
||||||
|
LicensePrivacyTermsComponent,
|
||||||
|
// AccDateFormatPipe
|
||||||
|
// DtmtodatetimePipe,
|
||||||
|
// MainDashboardContentComponent,
|
||||||
|
// MainDashboardComponent,
|
||||||
|
// LoginForgotComponent,
|
||||||
|
// LoginPageComponent,
|
||||||
|
// LoginPageComponentComponent,
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
BrowserModule,
|
BrowserModule,
|
||||||
AppRoutingModule
|
CommonModule,
|
||||||
|
ToastrModule.forRoot({
|
||||||
|
positionClass:'toast-top-right',
|
||||||
|
preventDuplicates: true,
|
||||||
|
maxOpened: 3,
|
||||||
|
autoDismiss: true
|
||||||
|
}),
|
||||||
|
// ReactiveFormsModule,
|
||||||
|
BrowserAnimationsModule,
|
||||||
|
AppRoutingModule,
|
||||||
|
HttpClientModule,
|
||||||
|
FontAwesomeModule
|
||||||
],
|
],
|
||||||
providers: [],
|
exports: [
|
||||||
|
// AccDateFormatPipe
|
||||||
|
],
|
||||||
|
providers: [provideCharts(withDefaultRegisterables())],
|
||||||
bootstrap: [AppComponent]
|
bootstrap: [AppComponent]
|
||||||
})
|
})
|
||||||
export class AppModule { }
|
export class AppModule { }
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
<div class="card modal-card" role="dialog" aria-labelledby="signin-title" aria-modal="true">
|
<div class="card modal-card" role="dialog" aria-labelledby="signin-title" aria-modal="true">
|
||||||
<div class="brand">
|
<div class="brand">
|
||||||
<!-- <img src="assets/logo.png" alt="Company logo" class="logo" /> -->
|
<!-- <img src="assets/logo.png" alt="Company logo" class="logo" /> -->
|
||||||
<img src="logo.png" alt="Company logo" class="logo mb-2"/>
|
<img src="/logo.png" alt="Company logo" class="logo mb-2"/>
|
||||||
<h1 id="signin-title" class='kanit-bold'>เข้าสู่ระบบ</h1>
|
<h1 id="signin-title" class='kanit-bold'>เข้าสู่ระบบ</h1>
|
||||||
<p class="subtitle">บัญชีโปรแกรมจัดการบัญชีของคุณ</p>
|
<p class="subtitle">บัญชีโปรแกรมจัดการแผนงานงบประมาณของท่าน</p>
|
||||||
</div>
|
</div>
|
||||||
<form [formGroup]="loginForm" (ngSubmit)="signIn()" class="form px-3 pb-3">
|
<form [formGroup]="loginForm" (ngSubmit)="signIn()" class="form px-3 pb-3">
|
||||||
<label class="field">
|
<label class="field">
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { MainControlRoutingModule } from './main-control-routing.module';
|
|||||||
|
|
||||||
import { ReactiveFormsModule } from '@angular/forms';
|
import { ReactiveFormsModule } from '@angular/forms';
|
||||||
|
|
||||||
// import { MainDashboardComponent } from '../../component/main-dashboard/main-dashboard.component';
|
import { MainDashboardComponent } from '../../component/main-dashboard/main-dashboard.component';
|
||||||
import { MainDashboardContentComponent } from '../../content/main-dashboard-content/main-dashboard-content.component';
|
import { MainDashboardContentComponent } from '../../content/main-dashboard-content/main-dashboard-content.component';
|
||||||
import { AccDateFormatPipe } from '../../pipe/dtmtodatetime.pipe';
|
import { AccDateFormatPipe } from '../../pipe/dtmtodatetime.pipe';
|
||||||
import { MainReportComponent } from '../../component/main-report/main-report.component';
|
import { MainReportComponent } from '../../component/main-report/main-report.component';
|
||||||
@@ -17,7 +17,7 @@ import { MainReportComponent } from '../../component/main-report/main-report.com
|
|||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
// MainDashboardComponent,
|
MainDashboardComponent,
|
||||||
MainDashboardContentComponent,
|
MainDashboardContentComponent,
|
||||||
MainReportComponent,
|
MainReportComponent,
|
||||||
AccDateFormatPipe
|
AccDateFormatPipe
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export const environment = {
|
export const environment = {
|
||||||
production: false,
|
production: false,
|
||||||
apiUrl: 'http://api.nuttakit.work'
|
apiBaseUrl: 'http://api.nuttakit.work'
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export const environment = {
|
export const environment = {
|
||||||
production: true,
|
production: true,
|
||||||
apiUrl: 'http://localhost:8000'
|
apiBaseUrl: 'http://localhost:8000'
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user