new project add
All checks were successful
Build Docker Image / Build Docker Image (push) Successful in 6m50s
Build Docker Image / Restart Docker Compose (push) Successful in 0s

This commit is contained in:
x2Skyz
2025-11-28 19:28:41 +07:00
parent 012d590f40
commit b8c6512f8a
2 changed files with 274 additions and 174 deletions

View File

@@ -1,4 +1,8 @@
import { Component } from '@angular/core';
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { FormGroup, FormControl, Validators } from '@angular/forms';
import { GeneralService } from '../../services/generalservice';
import { ToastrService } from 'ngx-toastr';
@Component({
selector: 'app-main-project-add',
@@ -6,11 +10,99 @@ import { Component } from '@angular/core';
templateUrl: './main-project-add.html',
styleUrl: './main-project-add.css',
})
export class MainProjectAdd {
currentStep: number = 1; // 1 = กรอกข้อมูล, 2 = แนบเอกสาร, 3 = สรุปและส่ง
export class MainProjectAdd implements OnInit {
currentStep: number = 1;
isLoading: boolean = false;
// ฟังก์ชันสำหรับเปลี่ยนขั้นตอน
projectForm!: FormGroup;
attachedFiles: any[] = [];
constructor(
private generalService: GeneralService,
private router: Router,
private toastr: ToastrService
) {}
ngOnInit(): void {
this.setupFormControl();
}
setupFormControl(): void {
this.projectForm = new FormGroup({
projectName: new FormControl('', [Validators.required, Validators.maxLength(200)]),
budgetAmount: new FormControl('', [Validators.required, Validators.min(1)])
});
}
// ฟังก์ชันเปลี่ยน Step (เรียกใช้จากปุ่มเท่านั้น)
goToStep(step: number): void {
// กรณีจะไป Step 2 ต้องผ่าน Validation Step 1 ก่อน
if (step === 2 && this.currentStep === 1) {
if (this.projectForm.invalid) {
this.projectForm.markAllAsTouched();
this.toastr.warning('กรุณากรอกข้อมูลให้ครบถ้วน', 'แจ้งเตือน');
return;
}
}
this.currentStep = step;
}
onFileSelected(event: any): void {
const files = event.target.files;
if (files && files.length > 0) {
for (let i = 0; i < files.length; i++) {
const file = files[i];
const reader = new FileReader();
reader.onload = (e: any) => {
this.attachedFiles.push({
name: file.name,
size: file.size,
type: file.type,
content: e.target.result
});
};
reader.readAsDataURL(file);
}
}
}
removeFile(index: number): void {
this.attachedFiles.splice(index, 1);
}
get f() {
return this.projectForm.controls;
}
formatCurrency(amount: any): string {
if (!amount) return '0.00 บาท';
return new Intl.NumberFormat('th-TH', { style: 'currency', currency: 'THB' }).format(Number(amount));
}
onSubmit(): void {
if (this.projectForm.invalid) return;
this.isLoading = true;
const uri = '/api/project/create';
const request = {
...this.projectForm.value,
files: this.attachedFiles
};
this.generalService.postRequest(uri, request).subscribe({
next: (result: any) => {
this.isLoading = false;
this.generalService.trowApi(result);
if (result.code === '200') {
this.router.navigate(['/main']);
}
},
error: (error: any) => {
this.isLoading = false;
this.generalService.trowApi(error);
}
});
}
}