[update]
@@ -15,138 +15,6 @@ export interface MENU {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const MENU: MENU[] = [
|
export const MENU: MENU[] = [
|
||||||
// {
|
|
||||||
// name: 'ประเมินราคา/ค่ามัดจำ',
|
|
||||||
// link: 'appraisal',
|
|
||||||
// permission: 'appraisal',
|
|
||||||
// icon: 'bi bi-ui-checks',
|
|
||||||
// params: [],
|
|
||||||
// badge: '',
|
|
||||||
// type: 'collapsable',
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// name: 'ประเมินราคาครั้งที่ 1',
|
|
||||||
// link: 'appraisal/1st-time',
|
|
||||||
// permission: 'appraisal-1st-time',
|
|
||||||
// type: 'link',
|
|
||||||
// icon: '',
|
|
||||||
// params: [],
|
|
||||||
// badge: '',
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// name: 'ประวัติการสร้างใบเสนอราคา',
|
|
||||||
// link: 'appraisal/1st-time/history',
|
|
||||||
// permission: 'appraisal-1st-time-history',
|
|
||||||
// notShowing: true,
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// name: 'ใบเสนอราคา',
|
|
||||||
// link: 'appraisal/1st-time/history/pdf',
|
|
||||||
// permission: 'appraisal-1st-time-pdf',
|
|
||||||
// notShowing: true,
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// },
|
|
||||||
|
|
||||||
// ]
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: 'ประเมินราคาครั้งที่ 2',
|
|
||||||
// link: 'appraisal/2nd-time',
|
|
||||||
// permission: 'appraisal-2nd-time',
|
|
||||||
// type: 'link',
|
|
||||||
// icon: '',
|
|
||||||
// params: [],
|
|
||||||
// badge: '',
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: 'ประเมินราคาครั้งที่ 3',
|
|
||||||
// link: 'appraisal/3rd-time',
|
|
||||||
// permission: 'appraisal-3rd-time',
|
|
||||||
// type: 'link',
|
|
||||||
// icon: '',
|
|
||||||
// params: [],
|
|
||||||
// badge: '',
|
|
||||||
// },
|
|
||||||
// ]
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: 'การเงิน',
|
|
||||||
// link: 'finance',
|
|
||||||
// permission: 'finance',
|
|
||||||
// icon: 'bi bi-coin',
|
|
||||||
// params: [],
|
|
||||||
// badge: '',
|
|
||||||
// type: 'collapsable',
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// name: 'รับชำระเงิน/ใบเสร็จรับเงิน',
|
|
||||||
// link: 'finance/payment',
|
|
||||||
// permission: 'payment',
|
|
||||||
// type: 'link',
|
|
||||||
// icon: '',
|
|
||||||
// params: [],
|
|
||||||
// badge: '',
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// name: 'ใบเสร็จรับเงิน',
|
|
||||||
// link: 'finance/payment/paid/pdf',
|
|
||||||
// permission: 'finance-payment-pdf',
|
|
||||||
// notShowing: true,
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: 'การแจ้งหนี้/ตั้งเจ้าหนี้',
|
|
||||||
// link: 'finance/invoice',
|
|
||||||
// permission: 'invoice',
|
|
||||||
// type: 'link',
|
|
||||||
// icon: '',
|
|
||||||
// params: [],
|
|
||||||
// badge: '',
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: 'การจ่ายชำระเงิน',
|
|
||||||
// link: 'finance/paying',
|
|
||||||
// permission: 'paying',
|
|
||||||
// type: 'link',
|
|
||||||
// icon: '',
|
|
||||||
// params: [],
|
|
||||||
// badge: '',
|
|
||||||
// },
|
|
||||||
|
|
||||||
|
|
||||||
// ]
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: 'สัญญา',
|
|
||||||
// link: 'contract',
|
|
||||||
// permission: 'contract',
|
|
||||||
// icon: 'bi bi-file-earmark-text-fill',
|
|
||||||
// params: [],
|
|
||||||
// badge: '',
|
|
||||||
// type: 'collapsable',
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// name: 'ทำสัญญา',
|
|
||||||
// link: 'contract/make',
|
|
||||||
// permission: 'contract-make',
|
|
||||||
// type: 'link',
|
|
||||||
// icon: '',
|
|
||||||
// params: [],
|
|
||||||
// badge: '',
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: 'อนุมัติสัญญา',
|
|
||||||
// link: 'contract/approved',
|
|
||||||
// permission: 'contract-approved',
|
|
||||||
// type: 'link',
|
|
||||||
// icon: '',
|
|
||||||
// params: [],
|
|
||||||
// badge: '',
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
name: 'Manage',
|
name: 'Manage',
|
||||||
link: 'manage',
|
link: 'manage',
|
||||||
@@ -157,49 +25,34 @@ export const MENU: MENU[] = [
|
|||||||
type: 'collapsable',
|
type: 'collapsable',
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
name: 'Manage KYC',
|
name: 'KYC',
|
||||||
link: 'manage/kyc',
|
link: 'manage/kyc',
|
||||||
permission: 'manage-kyc',
|
permission: 'manage-kyc',
|
||||||
type: 'link',
|
type: 'link',
|
||||||
icon: '',
|
icon: '',
|
||||||
params: [],
|
params: [],
|
||||||
badge: '',
|
badge: '',
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// name: 'ประวัติการสร้างใบเสนอราคา',
|
|
||||||
// link: 'appraisal/1st-time/history',
|
|
||||||
// permission: 'appraisal-1st-time-history',
|
|
||||||
// notShowing: true,
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// name: 'ใบเสนอราคา',
|
|
||||||
// link: 'appraisal/1st-time/history/pdf',
|
|
||||||
// permission: 'appraisal-1st-time-pdf',
|
|
||||||
// notShowing: true,
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// },
|
|
||||||
|
|
||||||
// ]
|
|
||||||
},
|
},
|
||||||
// {
|
]
|
||||||
// name: 'ประเมินราคาครั้งที่ 2',
|
},
|
||||||
// link: 'appraisal/2nd-time',
|
{
|
||||||
// permission: 'appraisal-2nd-time',
|
name: 'Report',
|
||||||
// type: 'link',
|
link: 'report',
|
||||||
// icon: '',
|
permission: 'report',
|
||||||
// params: [],
|
icon: 'bi bi-file-bar-graph',
|
||||||
// badge: '',
|
params: [],
|
||||||
// },
|
badge: '',
|
||||||
// {
|
type: 'collapsable',
|
||||||
// name: 'ประเมินราคาครั้งที่ 3',
|
children: [
|
||||||
// link: 'appraisal/3rd-time',
|
{
|
||||||
// permission: 'appraisal-3rd-time',
|
name: 'Transactions',
|
||||||
// type: 'link',
|
link: 'report/transactions',
|
||||||
// icon: '',
|
permission: 'transactions',
|
||||||
// params: [],
|
type: 'link',
|
||||||
// badge: '',
|
icon: '',
|
||||||
// },
|
params: [],
|
||||||
|
badge: '',
|
||||||
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -31,11 +31,19 @@ const routes: Routes = [
|
|||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: 'kyc',
|
path: 'kyc',
|
||||||
// loadChildren: () => import('./pages/appraisal/1st-time/appraisal-1st-time.module').then(m => m.Appraisal1stTimeModule)
|
|
||||||
loadChildren: () => import('./pages/manage/kyc/kyc.module').then(m => m.KycModule)
|
loadChildren: () => import('./pages/manage/kyc/kyc.module').then(m => m.KycModule)
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'report',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'transactions',
|
||||||
|
loadChildren: () => import('./pages/report/transactions/transactions.module').then(m => m.TransactionsModule)
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'not-found',
|
path: 'not-found',
|
||||||
loadChildren: () => import('./pages/errors/errors.module').then(m => m.ErrorsModule)
|
loadChildren: () => import('./pages/errors/errors.module').then(m => m.ErrorsModule)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="auth">
|
<div class="auth">
|
||||||
<div class="auth-wrap">
|
<div class="auth-wrap">
|
||||||
<div class="auth-logo">
|
<div class="auth-logo">
|
||||||
<img src="./assets/images/logo-b.png" />
|
<img class="logo-auth" src="./assets/images/logo-b.png" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="auth-card">
|
<div class="auth-card">
|
||||||
@@ -9,10 +9,10 @@
|
|||||||
<form #ngf="ngForm" (ngSubmit)="onSubmit(ngf)">
|
<form #ngf="ngForm" (ngSubmit)="onSubmit(ngf)">
|
||||||
<div class="auth-card-body">
|
<div class="auth-card-body">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<input matInput type="text" name="username" [(ngModel)]="dataForm.username" #username="ngModel"
|
<input matInput type="text" name="loginname" [(ngModel)]="dataForm.loginname" #loginname="ngModel"
|
||||||
placeholder="Username" required>
|
placeholder="Username" required>
|
||||||
<i matSuffix class="bi bi-person-circle"></i>
|
<i matSuffix class="bi bi-person-circle"></i>
|
||||||
<mat-error *ngIf="isFieldValid(ngf, username)">กรุณากรอกข้อมูล</mat-error>
|
<mat-error *ngIf="isFieldValid(ngf, loginname)">กรุณากรอกข้อมูล</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<div style="height: 10px;"></div>
|
<div style="height: 10px;"></div>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
import { AppService } from '../../app.service';
|
import { AppService } from '../../app.service';
|
||||||
import { lastValueFrom } from "rxjs";
|
|
||||||
import { EAction, EText } from "../../@config/app";
|
|
||||||
import { environment } from "../../../environments/environment";
|
import { environment } from "../../../environments/environment";
|
||||||
|
import { AuthService } from 'src/app/core/service/auth/auth.service';
|
||||||
|
import { catchError, lastValueFrom, tap, throwError } from 'rxjs';
|
||||||
|
import { EAction, EText } from 'src/app/@config/app';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -19,7 +20,8 @@ export class LoginComponent implements OnInit {
|
|||||||
constructor(
|
constructor(
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private appService: AppService,
|
private appService: AppService,
|
||||||
private route: ActivatedRoute
|
private route: ActivatedRoute,
|
||||||
|
private authService: AuthService
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,30 +30,19 @@ export class LoginComponent implements OnInit {
|
|||||||
if (!environment.production) {
|
if (!environment.production) {
|
||||||
this.dataForm = {
|
this.dataForm = {
|
||||||
username: 'admin',
|
username: 'admin',
|
||||||
password: 'password@1',
|
password: 'admin',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async onSubmit(form: any) {
|
async onSubmit(form: any) {
|
||||||
if (!form.valid) return false;
|
if (!form.valid) return false;
|
||||||
const dataForm = {
|
|
||||||
username: this.dataForm.username,
|
|
||||||
password: this.dataForm.password,
|
|
||||||
userType: 'ADMIN'
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// console.log(this.apiUrl)
|
await lastValueFrom(this.authService.login(this.dataForm));
|
||||||
// const result = await lastValueFrom(this.appService.post(this.apiUrl, dataForm));
|
|
||||||
// this.appService.setAuth(result.data);
|
|
||||||
// this.appService.setToken(result.accessToken);
|
|
||||||
return this.router.navigate(['/pages']);
|
return this.router.navigate(['/pages']);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return this.appService.message(EAction.ERROR, EText.NO_DATA);
|
return this.appService.message(EAction.ERROR, EText.NO_DATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,44 +1,37 @@
|
|||||||
import { OidcAuthService } from 'src/app/core/oidc/oidc.service';
|
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import {
|
import {
|
||||||
HttpRequest,
|
HttpRequest,
|
||||||
HttpHandler,
|
HttpHandler,
|
||||||
HttpEvent,
|
HttpEvent,
|
||||||
HttpInterceptor
|
HttpInterceptor
|
||||||
} from '@angular/common/http';
|
} from '@angular/common/http';
|
||||||
import { Observable, throwError } from 'rxjs';
|
import { Observable, throwError } from 'rxjs';
|
||||||
import { catchError, finalize } from 'rxjs/operators';
|
import { catchError, finalize } from 'rxjs/operators';
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
import { NgProgress } from 'ngx-progressbar';
|
|
||||||
import { ApplicationSecurityService } from '../service/security/application-security.service';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class TokenIntercepterInterceptor implements HttpInterceptor {
|
export class TokenIntercepterInterceptor implements HttpInterceptor {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private odicSV: OidcAuthService,
|
private router: Router,
|
||||||
private router: Router,
|
) {
|
||||||
private progress: NgProgress,
|
}
|
||||||
private appTokenSV: ApplicationSecurityService
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
|
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
|
||||||
const isRegisterSubjectAPI = request.url.includes('rsu-reg-api')
|
const customReq = request.clone({
|
||||||
const customReq = request.clone({
|
setHeaders: {
|
||||||
setHeaders:{
|
// Authorization: request.url.includes('app_tokens') ? `${this.odicSV.getAuthorizationHeaderValue()}` : `Bearer ${this.appTokenSV.getToken()}`
|
||||||
Authorization: request.url.includes('app_tokens') ? `${this.odicSV.getAuthorizationHeaderValue()}` : `Bearer ${this.appTokenSV.getToken()}`
|
}
|
||||||
}
|
});
|
||||||
});
|
return next.handle(customReq)
|
||||||
this.progress.ref('progressBar').start()
|
// return next.handle(customReq).pipe(
|
||||||
return next.handle(customReq).pipe(
|
// finalize(() => this.progress.ref('progressBar').complete()),
|
||||||
finalize(() => this.progress.ref('progressBar').complete()),
|
// catchError(err => {
|
||||||
catchError(err => {
|
// if (err.status == 401) {
|
||||||
if (err.status == 401) {
|
// this.router.navigate(['./'], { replaceUrl: true })
|
||||||
this.router.navigate(['./'],{ replaceUrl: true })
|
// }
|
||||||
}
|
// return throwError(err)
|
||||||
return throwError(err)
|
// })
|
||||||
})
|
// );
|
||||||
);
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
20
src/app/core/service/auth/auth.service.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { BaseService } from 'src/app/core/base/base-service';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class AuthService extends BaseService{
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
public http: HttpClient
|
||||||
|
) {
|
||||||
|
super('/common/user_login', http)
|
||||||
|
}
|
||||||
|
|
||||||
|
login(payload : {'loginname': string , 'password' : string}){
|
||||||
|
return this.http.get(`${this.prefix}/common/user_login/login/${payload.loginname}/${payload.password}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,8 +2,6 @@ import { ChangeDetectorRef, Component, OnInit } from '@angular/core';
|
|||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
import { AppService } from '../../app.service';
|
import { AppService } from '../../app.service';
|
||||||
import { MENU } from "../../@config/menus";
|
import { MENU } from "../../@config/menus";
|
||||||
import { lastValueFrom } from "rxjs";
|
|
||||||
import { environment } from 'src/environments/environment';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-pages-layouts',
|
selector: 'app-pages-layouts',
|
||||||
@@ -24,7 +22,6 @@ export class PagesLayoutsComponent implements OnInit {
|
|||||||
constructor(
|
constructor(
|
||||||
private app: AppService,
|
private app: AppService,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private activatedRoute: ActivatedRoute,
|
|
||||||
public changeDetectorRef: ChangeDetectorRef,
|
public changeDetectorRef: ChangeDetectorRef,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
<app-list [kycList]="kyc$ | async"></app-list>
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { TransactionsContainer } from './transactions.container';
|
||||||
|
|
||||||
|
describe('TransactionsContainer', () => {
|
||||||
|
let component: TransactionsContainer;
|
||||||
|
let fixture: ComponentFixture<TransactionsContainer>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ TransactionsContainer ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(TransactionsContainer);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import { Component } from '@angular/core';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { KycService } from 'src/app/core/service/manage/kyc.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-transactions',
|
||||||
|
templateUrl: './transactions.container.html',
|
||||||
|
styleUrls: ['./transactions.container.scss']
|
||||||
|
})
|
||||||
|
export class TransactionsContainer {
|
||||||
|
kyc$ = new Observable();
|
||||||
|
constructor(
|
||||||
|
private kycService: KycService
|
||||||
|
) {
|
||||||
|
this.kyc$ = this.kycService.getAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
<div class="card card-table">
|
||||||
|
|
||||||
|
<div class="card-filter text-right">
|
||||||
|
<div class="card-filter-section grid grid-cols-12 gap-4 md:gap-2 items-center">
|
||||||
|
<div class="col-span-2 xl:col-span-3 xl:order-2">
|
||||||
|
<mat-form-field>
|
||||||
|
<i matTextPrefix class="bi bi-search"></i>
|
||||||
|
<input matInput placeholder="ชื่อผู้รับเงิน">
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
<div class="col-span-2 xl:col-span-3 xl:order-2">
|
||||||
|
<mat-form-field>
|
||||||
|
<i matTextPrefix class="bi bi-search"></i>
|
||||||
|
<input matInput placeholder="ชื่อผู้ชำระเงิน">
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
<div class="col-span-2 xl:col-span-3 xl:order-2">
|
||||||
|
<mat-form-field>
|
||||||
|
<i matTextPrefix class="bi bi-search"></i>
|
||||||
|
<input matInput placeholder="วันที่ชำระ">
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
<div class="col-span-2 xl:col-span-3 xl:order-2">
|
||||||
|
<mat-form-field>
|
||||||
|
<i matTextPrefix class="bi bi-search"></i>
|
||||||
|
<input matInput placeholder="ถึงวันที่">
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-wrap">
|
||||||
|
<table class="table table-main" mat-table [dataSource]="kycList" matSort>
|
||||||
|
<tr mat-header-row *matHeaderRowDef="['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15']"></tr>
|
||||||
|
<tr mat-row *matRowDef="let row; columns: ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'];"></tr>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="1">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tac" mat-sort-header>ลำดับ</th>
|
||||||
|
<td mat-cell *matCellDef="let item" width="150" class="tac">{{item.code}}</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="2">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal">Phone</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="" style="min-width: 200px;">
|
||||||
|
{{item.name }}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="3">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal" mat-sort-header>ID</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="">{{item?.masterProductBrand.name }}</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="4">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal" mat-sort-header>PayeeFullname</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="">{{item?.masterProductBrand.name }}</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="5">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal" width="150">PayerFullname</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="">{{item.size }}</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="6">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal" width="150">InvoiceID</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="">{{item.weight }}</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
|
||||||
|
<ng-container matColumnDef="7">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal" width="150">ref 1</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="">{{item.color }}</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="8">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal" width="150">ref 2</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="">{{item.year }}</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="9">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal" width="150" mat-sort-header>ref 3</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="">
|
||||||
|
<div class="b-color-orange"> {{item.price | number : '1.2-2'}}</div>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="10">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal" width="150" mat-sort-header>paymentStatus</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="">
|
||||||
|
<div class="b-color-green"> {{item.latestPrice | number : '1.2-2' }}</div>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="11">
|
||||||
|
<th mat-header-cell *matHeaderCellDef width="80">payment Channel</th>
|
||||||
|
<td mat-cell *matCellDef="let item">
|
||||||
|
<div class="action flex justify-center">
|
||||||
|
<div class="item">
|
||||||
|
<i class="bi bi-file-earmark-text icon-doc"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="12">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal" width="150" mat-sort-header>จำนวนเงิน</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="">
|
||||||
|
<div class="b-color-green"> {{item.latestPrice | number : '1.2-2' }}</div>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="13">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal" width="150" mat-sort-header>Create by</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="">
|
||||||
|
<div class="b-color-green"> {{item.latestPrice | number : '1.2-2' }}</div>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="14">
|
||||||
|
<th mat-header-cell *matHeaderCellDef class="tal" width="150" mat-sort-header>Update by</th>
|
||||||
|
<td mat-cell *matCellDef="let item" class="">
|
||||||
|
<div class="b-color-green"> {{item.latestPrice | number : '1.2-2' }}</div>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="15">
|
||||||
|
<th mat-header-cell *matHeaderCellDef width="80">More Detail</th>
|
||||||
|
<td mat-cell *matCellDef="let item">
|
||||||
|
<div class="action flex justify-center">
|
||||||
|
<div class="item">
|
||||||
|
<i class="bi bi-file-earmark-text icon-doc"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- <div *ngIf="dataSourceCount === 0" class="no-data"></div> -->
|
||||||
|
<mat-paginator [pageSizeOptions]="[5,10,20]" showFirstLastButtons (page)="getData($event)"></mat-paginator>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ListComponent } from './list.component';
|
||||||
|
|
||||||
|
describe('ListComponent', () => {
|
||||||
|
let component: ListComponent;
|
||||||
|
let fixture: ComponentFixture<ListComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ ListComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(ListComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import { Component, Input } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-list',
|
||||||
|
templateUrl: './list.component.html',
|
||||||
|
styleUrls: ['./list.component.scss']
|
||||||
|
})
|
||||||
|
export class ListComponent {
|
||||||
|
@Input() kycList: any = [];
|
||||||
|
constructor() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
getData(event: any) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
16
src/app/pages/report/transactions/router/router.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-transactions-router',
|
||||||
|
template: '<router-outlet></router-outlet>',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush
|
||||||
|
})
|
||||||
|
export class TransactionsRouter implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
35
src/app/pages/report/transactions/transactions.module.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import { NgOptimizedImage } from "@angular/common";
|
||||||
|
import { RouterModule, Routes } from "@angular/router";
|
||||||
|
import { AppSharedModule } from "src/app/app.shared";
|
||||||
|
import { NgModule } from "@angular/core";
|
||||||
|
import { ListComponent } from "./presenter/list/list.component";
|
||||||
|
import { TransactionsRouter } from "./router/router";
|
||||||
|
import { TransactionsContainer } from "./container/transactions/transactions.container";
|
||||||
|
|
||||||
|
|
||||||
|
const routes: Routes = [
|
||||||
|
{
|
||||||
|
path: '',
|
||||||
|
component: TransactionsRouter,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: '',
|
||||||
|
component: TransactionsContainer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [
|
||||||
|
TransactionsRouter,
|
||||||
|
TransactionsContainer,
|
||||||
|
ListComponent
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
AppSharedModule,
|
||||||
|
NgOptimizedImage,
|
||||||
|
RouterModule.forChild(routes)
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class TransactionsModule { }
|
||||||
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 60 KiB |
@@ -1,5 +1,5 @@
|
|||||||
export const environment = {
|
export const environment = {
|
||||||
production: false,
|
production: false,
|
||||||
hideForm: false,
|
hideForm: false,
|
||||||
APIURL: 'https://cathaypay.71dev.com/cathaypay-api/api'
|
APIURL: 'https://cathaypay.71dev.com/cathaypay-api'
|
||||||
};
|
};
|
||||||
|
|||||||
BIN
src/favicon.ico
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 149 KiB |
BIN
src/favicon2.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
@@ -7,8 +7,11 @@
|
|||||||
.auth-logo {
|
.auth-logo {
|
||||||
height: 140px;
|
height: 140px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.logo-auth {
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
.auth-heading {
|
.auth-heading {
|
||||||
margin-top: -20px;
|
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
|
|||||||
@@ -1,33 +1,22 @@
|
|||||||
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
|
||||||
{
|
{
|
||||||
"compileOnSave": false,
|
"compileOnSave": false,
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"baseUrl": "./",
|
"baseUrl": "./",
|
||||||
"outDir": "./dist/out-tsc",
|
"outDir": "./dist/out-tsc",
|
||||||
"forceConsistentCasingInFileNames": true,
|
"sourceMap": true,
|
||||||
"strict": true,
|
"declaration": false,
|
||||||
"noImplicitOverride": false,
|
"module": "es2020",
|
||||||
"noPropertyAccessFromIndexSignature": true,
|
"moduleResolution": "node",
|
||||||
"noImplicitReturns": true,
|
"experimentalDecorators": true,
|
||||||
"noFallthroughCasesInSwitch": true,
|
"importHelpers": true,
|
||||||
"sourceMap": true,
|
"target": "es2015",
|
||||||
"declaration": false,
|
"typeRoots": [
|
||||||
"downlevelIteration": true,
|
"node_modules/@types"
|
||||||
"experimentalDecorators": true,
|
],
|
||||||
"moduleResolution": "node",
|
"lib": [
|
||||||
"importHelpers": true,
|
"es2018",
|
||||||
"target": "ES2022",
|
"dom"
|
||||||
"module": "ES2022",
|
]
|
||||||
"useDefineForClassFields": false,
|
}
|
||||||
"lib": [
|
|
||||||
"ES2022",
|
|
||||||
"dom"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"angularCompilerOptions": {
|
|
||||||
"enableI18nLegacyMessageIdFormat": false,
|
|
||||||
"strictInjectionParameters": true,
|
|
||||||
"strictInputAccessModifiers": true,
|
|
||||||
"strictTemplates": true
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||