파트너 본사 page 추가
This commit is contained in:
		
							parent
							
								
									d05227816a
								
							
						
					
					
						commit
						3f559c1de5
					
				| @ -178,6 +178,13 @@ export const appRoutes: Route[] = [ | ||||
|                 (m: any) => m.PartnerModule | ||||
|               ), | ||||
|           }, | ||||
|           { | ||||
|             path: 'partner-mainoffice', | ||||
|             loadChildren: () => | ||||
|               import( | ||||
|                 'app/modules/admin/member/partner-mainoffice/partner-mainoffice.module' | ||||
|               ).then((m: any) => m.PartnerMainofficeModule), | ||||
|           }, | ||||
|           { | ||||
|             path: 'partner-branch', | ||||
|             loadChildren: () => | ||||
|  | ||||
							
								
								
									
										228
									
								
								src/app/mock-api/apps/member/partner-mainoffice/api.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										228
									
								
								src/app/mock-api/apps/member/partner-mainoffice/api.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,228 @@ | ||||
| import { Injectable } from '@angular/core'; | ||||
| import { assign, cloneDeep } from 'lodash-es'; | ||||
| import { FuseMockApiService, FuseMockApiUtils } from '@fuse/lib/mock-api'; | ||||
| import { partnerMainoffices as partnerMainofficesData } from './data'; | ||||
| 
 | ||||
| @Injectable({ | ||||
|   providedIn: 'root', | ||||
| }) | ||||
| export class MemberPartnerMainofficeMockApi { | ||||
|   private _partnerMainoffices: any[] = partnerMainofficesData; | ||||
| 
 | ||||
|   /** | ||||
|    * Constructor | ||||
|    */ | ||||
|   constructor(private _fuseMockApiService: FuseMockApiService) { | ||||
|     // Register Mock API handlers
 | ||||
|     this.registerHandlers(); | ||||
|   } | ||||
| 
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
|   // @ Public methods
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
| 
 | ||||
|   /** | ||||
|    * Register Mock API handlers | ||||
|    */ | ||||
|   registerHandlers(): void { | ||||
|     // -----------------------------------------------------------------------------------------------------
 | ||||
|     // @ PartnerMainoffices - GET
 | ||||
|     // -----------------------------------------------------------------------------------------------------
 | ||||
|     this._fuseMockApiService | ||||
|       .onGet('api/apps/member/partner-mainoffice/partner-mainoffices', 300) | ||||
|       .reply(({ request }) => { | ||||
|         // Get available queries
 | ||||
|         const search = request.params.get('search'); | ||||
|         const sort = request.params.get('sort') || 'name'; | ||||
|         const order = request.params.get('order') || 'asc'; | ||||
|         const page = parseInt(request.params.get('page') ?? '1', 10); | ||||
|         const size = parseInt(request.params.get('size') ?? '10', 10); | ||||
| 
 | ||||
|         // Clone the partnerMainoffices
 | ||||
|         let partnerMainoffices: any[] | null = cloneDeep( | ||||
|           this._partnerMainoffices | ||||
|         ); | ||||
| 
 | ||||
|         // Sort the partnerMainoffices
 | ||||
|         if (sort === 'sku' || sort === 'name' || sort === 'active') { | ||||
|           partnerMainoffices.sort((a, b) => { | ||||
|             const fieldA = a[sort].toString().toUpperCase(); | ||||
|             const fieldB = b[sort].toString().toUpperCase(); | ||||
|             return order === 'asc' | ||||
|               ? fieldA.localeCompare(fieldB) | ||||
|               : fieldB.localeCompare(fieldA); | ||||
|           }); | ||||
|         } else { | ||||
|           partnerMainoffices.sort((a, b) => | ||||
|             order === 'asc' ? a[sort] - b[sort] : b[sort] - a[sort] | ||||
|           ); | ||||
|         } | ||||
| 
 | ||||
|         // If search exists...
 | ||||
|         if (search) { | ||||
|           // Filter the partnerMainoffices
 | ||||
|           partnerMainoffices = partnerMainoffices.filter( | ||||
|             (contact: any) => | ||||
|               contact.name && | ||||
|               contact.name.toLowerCase().includes(search.toLowerCase()) | ||||
|           ); | ||||
|         } | ||||
| 
 | ||||
|         // Paginate - Start
 | ||||
|         const partnerMainofficesLength = partnerMainoffices.length; | ||||
| 
 | ||||
|         // Calculate pagination details
 | ||||
|         const begin = page * size; | ||||
|         const end = Math.min(size * (page + 1), partnerMainofficesLength); | ||||
|         const lastPage = Math.max( | ||||
|           Math.ceil(partnerMainofficesLength / size), | ||||
|           1 | ||||
|         ); | ||||
| 
 | ||||
|         // Prepare the pagination object
 | ||||
|         let pagination = {}; | ||||
| 
 | ||||
|         // If the requested page number is bigger than
 | ||||
|         // the last possible page number, return null for
 | ||||
|         // partnerMainoffices but also send the last possible page so
 | ||||
|         // the app can navigate to there
 | ||||
|         if (page > lastPage) { | ||||
|           partnerMainoffices = null; | ||||
|           pagination = { | ||||
|             lastPage, | ||||
|           }; | ||||
|         } else { | ||||
|           // Paginate the results by size
 | ||||
|           partnerMainoffices = partnerMainoffices.slice(begin, end); | ||||
| 
 | ||||
|           // Prepare the pagination mock-api
 | ||||
|           pagination = { | ||||
|             length: partnerMainofficesLength, | ||||
|             size: size, | ||||
|             page: page, | ||||
|             lastPage: lastPage, | ||||
|             startIndex: begin, | ||||
|             endIndex: end - 1, | ||||
|           }; | ||||
|         } | ||||
| 
 | ||||
|         // Return the response
 | ||||
|         return [ | ||||
|           200, | ||||
|           { | ||||
|             partnerMainoffices, | ||||
|             pagination, | ||||
|           }, | ||||
|         ]; | ||||
|       }); | ||||
| 
 | ||||
|     // -----------------------------------------------------------------------------------------------------
 | ||||
|     // @ PartnerMainoffice - GET
 | ||||
|     // -----------------------------------------------------------------------------------------------------
 | ||||
|     this._fuseMockApiService | ||||
|       .onGet('api/apps/member/partne-mainoffice/partner-mainoffice') | ||||
|       .reply(({ request }) => { | ||||
|         // Get the id from the params
 | ||||
|         const id = request.params.get('id'); | ||||
| 
 | ||||
|         // Clone the partnerMainoffices
 | ||||
|         const partnerMainoffices = cloneDeep(this._partnerMainoffices); | ||||
| 
 | ||||
|         // Find the partnerMainoffice
 | ||||
|         const partnerMainoffice = partnerMainoffices.find( | ||||
|           (item: any) => item.id === id | ||||
|         ); | ||||
| 
 | ||||
|         // Return the response
 | ||||
|         return [200, partnerMainoffice]; | ||||
|       }); | ||||
| 
 | ||||
|     // -----------------------------------------------------------------------------------------------------
 | ||||
|     // @ PartnerMainoffice - POST
 | ||||
|     // -----------------------------------------------------------------------------------------------------
 | ||||
|     this._fuseMockApiService | ||||
|       .onPost('api/apps/member/partner-mainoffice/partner-mainoffice') | ||||
|       .reply(() => { | ||||
|         // Generate a new partnerMainoffice
 | ||||
|         const newPartnerMainoffice = { | ||||
|           id: FuseMockApiUtils.guid(), | ||||
|           category: '', | ||||
|           name: 'A New User', | ||||
|           description: '', | ||||
|           tags: [], | ||||
|           sku: '', | ||||
|           barcode: '', | ||||
|           brand: '', | ||||
|           vendor: '', | ||||
|           stock: '', | ||||
|           reserved: '', | ||||
|           cost: '', | ||||
|           basePrice: '', | ||||
|           taxPercent: '', | ||||
|           price: '', | ||||
|           weight: '', | ||||
|           thumbnail: '', | ||||
|           images: [], | ||||
|           active: false, | ||||
|         }; | ||||
| 
 | ||||
|         // Unshift the new partnerMainoffice
 | ||||
|         this._partnerMainoffices.unshift(newPartnerMainoffice); | ||||
| 
 | ||||
|         // Return the response
 | ||||
|         return [200, newPartnerMainoffice]; | ||||
|       }); | ||||
| 
 | ||||
|     // -----------------------------------------------------------------------------------------------------
 | ||||
|     // @ PartnerMainoffice - PATCH
 | ||||
|     // -----------------------------------------------------------------------------------------------------
 | ||||
|     this._fuseMockApiService | ||||
|       .onPatch('api/apps/member/partner-mainoffice/partner-mainoffice') | ||||
|       .reply(({ request }) => { | ||||
|         // Get the id and partnerMainoffice
 | ||||
|         const id = request.body.id; | ||||
|         const partnerMainoffice = cloneDeep(request.body.partnerMainoffice); | ||||
| 
 | ||||
|         // Prepare the updated partnerMainoffice
 | ||||
|         let updatedPartnerMainoffice = null; | ||||
| 
 | ||||
|         // Find the partnerMainoffice and update it
 | ||||
|         this._partnerMainoffices.forEach((item, index, partnerMainoffices) => { | ||||
|           if (item.id === id) { | ||||
|             // Update the partnerMainoffice
 | ||||
|             partnerMainoffices[index] = assign( | ||||
|               {}, | ||||
|               partnerMainoffices[index], | ||||
|               partnerMainoffice | ||||
|             ); | ||||
| 
 | ||||
|             // Store the updated partnerMainoffice
 | ||||
|             updatedPartnerMainoffice = partnerMainoffices[index]; | ||||
|           } | ||||
|         }); | ||||
| 
 | ||||
|         // Return the response
 | ||||
|         return [200, updatedPartnerMainoffice]; | ||||
|       }); | ||||
| 
 | ||||
|     // -----------------------------------------------------------------------------------------------------
 | ||||
|     // @ PartnerMainoffice - DELETE
 | ||||
|     // -----------------------------------------------------------------------------------------------------
 | ||||
|     this._fuseMockApiService | ||||
|       .onDelete('api/apps/member/partner-mainoffice/partner-mainoffice') | ||||
|       .reply(({ request }) => { | ||||
|         // Get the id
 | ||||
|         const id = request.params.get('id'); | ||||
| 
 | ||||
|         // Find the partnerMainoffice and delete it
 | ||||
|         this._partnerMainoffices.forEach((item, index) => { | ||||
|           if (item.id === id) { | ||||
|             this._partnerMainoffices.splice(index, 1); | ||||
|           } | ||||
|         }); | ||||
| 
 | ||||
|         // Return the response
 | ||||
|         return [200, true]; | ||||
|       }); | ||||
|   } | ||||
| } | ||||
							
								
								
									
										33
									
								
								src/app/mock-api/apps/member/partner-mainoffice/data.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/app/mock-api/apps/member/partner-mainoffice/data.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| /* eslint-disable */ | ||||
| 
 | ||||
| export const partnerMainoffices = [ | ||||
|   { | ||||
|     id: 'on00', | ||||
|     totalPartnerCount: '5', | ||||
|     totalHoldingMoney: 303675, | ||||
|     totalComp: 108933, | ||||
|     total: 412608, | ||||
|     branchCount: 1, | ||||
|     divisionCount: 1, | ||||
|     officeCount: 1, | ||||
|     storeCount: 1, | ||||
|     memberCount: 1, | ||||
|     nickname: 'on00', | ||||
|     accountHolder: '11', | ||||
|     phoneNumber: '010-1111-1111', | ||||
|     calculateType: '롤링', | ||||
|     ownCash: 50000, | ||||
|     ownComp: 1711, | ||||
|     ownCoupon: 50000, | ||||
|     gameMoney: 0, | ||||
|     todayComp: 0, | ||||
|     totalDeposit: 0, | ||||
|     totalWithdraw: 0, | ||||
|     balance: 0, | ||||
|     registDate: '2022-06-12 15:38', | ||||
|     finalSigninDate: '', | ||||
|     ip: '', | ||||
|     state: '정상', | ||||
|     note: '대본등록', | ||||
|   }, | ||||
| ]; | ||||
| @ -74,6 +74,13 @@ export const defaultNavigation: FuseNavigationItem[] = [ | ||||
|         icon: 'heroicons_outline:academic-cap', | ||||
|         link: '/member/partner', | ||||
|       }, | ||||
|       { | ||||
|         id: 'member.partner-mainoffice', | ||||
|         title: 'Partner Mainoffice', | ||||
|         type: 'basic', | ||||
|         icon: 'heroicons_outline:academic-cap', | ||||
|         link: '/member/partner-mainoffice', | ||||
|       }, | ||||
|       { | ||||
|         id: 'member.partner-branch', | ||||
|         title: 'Partner Branch', | ||||
|  | ||||
| @ -32,7 +32,7 @@ import { FuseConfirmationService } from '@fuse/services/confirmation'; | ||||
| import { User } from '../../user/models/user'; | ||||
| import { PartnerBranch } from '../models/partner-branch'; | ||||
| import { PartnerBranchPagination } from '../models/partner-branch-pagination'; | ||||
| import { PartnerBranchService } from '../services/Partner-branch.service'; | ||||
| import { PartnerBranchService } from '../services/partner-branch.service'; | ||||
| import { Router } from '@angular/router'; | ||||
| 
 | ||||
| @Component({ | ||||
|  | ||||
| @ -9,7 +9,7 @@ import { catchError, Observable, throwError } from 'rxjs'; | ||||
| 
 | ||||
| import { PartnerBranch } from '../models/partner-branch'; | ||||
| import { PartnerBranchPagination } from '../models/partner-branch-pagination'; | ||||
| import { PartnerBranchService } from '../services/Partner-branch.service'; | ||||
| import { PartnerBranchService } from '../services/partner-branch.service'; | ||||
| 
 | ||||
| @Injectable({ | ||||
|   providedIn: 'root', | ||||
|  | ||||
| @ -32,7 +32,7 @@ import { FuseConfirmationService } from '@fuse/services/confirmation'; | ||||
| import { User } from '../../user/models/user'; | ||||
| import { PartnerDivision } from '../models/partner-division'; | ||||
| import { PartnerDivisionPagination } from '../models/partner-division-pagination'; | ||||
| import { PartnerDivisionService } from '../services/Partner-division.service'; | ||||
| import { PartnerDivisionService } from '../services/partner-division.service'; | ||||
| import { Router } from '@angular/router'; | ||||
| 
 | ||||
| @Component({ | ||||
|  | ||||
| @ -9,7 +9,7 @@ import { catchError, Observable, throwError } from 'rxjs'; | ||||
| 
 | ||||
| import { PartnerDivision } from '../models/partner-division'; | ||||
| import { PartnerDivisionPagination } from '../models/partner-division-pagination'; | ||||
| import { PartnerDivisionService } from '../services/Partner-division.service'; | ||||
| import { PartnerDivisionService } from '../services/partner-division.service'; | ||||
| 
 | ||||
| @Injectable({ | ||||
|   providedIn: 'root', | ||||
|  | ||||
| @ -0,0 +1,3 @@ | ||||
| import { ListComponent } from './list.component'; | ||||
| 
 | ||||
| export const COMPONENTS = [ListComponent]; | ||||
| @ -0,0 +1,367 @@ | ||||
| <div | ||||
|   class="sm:absolute sm:inset-0 flex flex-col flex-auto min-w-0 sm:overflow-hidden bg-card dark:bg-transparent" | ||||
| > | ||||
|   <!-- Header --> | ||||
|   <div | ||||
|     class="relative flex flex-col sm:flex-row flex-0 sm:items-center sm:justify-between py-8 px-6 md:px-8 border-b" | ||||
|   > | ||||
|     <!-- Loader --> | ||||
|     <div class="absolute inset-x-0 bottom-0" *ngIf="isLoading"> | ||||
|       <mat-progress-bar [mode]="'indeterminate'"></mat-progress-bar> | ||||
|     </div> | ||||
|     <!-- Title --> | ||||
|     <div class="text-4xl font-extrabold tracking-tight">대본</div> | ||||
|     <!-- Actions --> | ||||
|     <div class="flex shrink-0 items-center mt-6 sm:mt-0 sm:ml-4"> | ||||
|       <!-- Memo --> | ||||
|       <!-- <mat-form-field> | ||||
|         <ng-container *ngIf="partnerMainoffices$ | async as partnerMainoffices"> | ||||
|           <ng-container | ||||
|             *ngFor="let partnerMainoffice of partnerMainoffices; trackBy: __trackByFn" | ||||
|           > | ||||
|             <div | ||||
|               class="inventory-grid grid items-center gap-4 py-3 px-6 md:px-8 border-b" | ||||
|             > | ||||
|               <fieldset> | ||||
|                 총 파트너수:{{ partnerMainoffice.totalPartnerCount }} 총 보유머니:{{ | ||||
|                   partnerMainoffice.totalHoldingMoney | ||||
|                 }} | ||||
|                 총 콤프:{{ partnerMainoffice.totalComp }} 총 합계:{{ | ||||
|                   partnerMainoffice.total | ||||
|                 }} | ||||
|               </fieldset> | ||||
|             </div> | ||||
|           </ng-container> | ||||
|         </ng-container> | ||||
|       </mat-form-field> --> | ||||
| 
 | ||||
|       <!-- SelectBox --> | ||||
|       <mat-form-field> | ||||
|         <mat-select placeholder="리스트수"> | ||||
|           <mat-option value="40">40</mat-option> | ||||
|           <mat-option value="60">60</mat-option> | ||||
|           <mat-option value="80">80</mat-option> | ||||
|           <mat-option value="100">100</mat-option> | ||||
|         </mat-select> | ||||
|       </mat-form-field> | ||||
|       <mat-form-field> | ||||
|         <mat-select placeholder="레벨"> | ||||
|           <mat-option value="level1">LV.1</mat-option> | ||||
|           <mat-option value="level2">LV.2</mat-option> | ||||
|           <mat-option value="level3">LV.3</mat-option> | ||||
|           <mat-option value="level4">LV.4</mat-option> | ||||
|         </mat-select> | ||||
|       </mat-form-field> | ||||
|       <mat-form-field> | ||||
|         <mat-select placeholder="상태"> | ||||
|           <mat-option value="">정상</mat-option> | ||||
|           <mat-option value="">대기</mat-option> | ||||
|           <mat-option value="">탈퇴</mat-option> | ||||
|           <mat-option value="">휴면</mat-option> | ||||
|           <mat-option value="">블랙</mat-option> | ||||
|           <mat-option value="">정지</mat-option> | ||||
|         </mat-select> | ||||
|       </mat-form-field> | ||||
|       <mat-form-field> | ||||
|         <mat-select placeholder="제한"> | ||||
|           <mat-option value="">카지노제한</mat-option> | ||||
|           <mat-option value="">슬롯제한</mat-option> | ||||
|         </mat-select> | ||||
|       </mat-form-field> | ||||
|       <mat-form-field> | ||||
|         <mat-select placeholder="입금"> | ||||
|           <mat-option value="">계좌입금</mat-option> | ||||
|         </mat-select> | ||||
|       </mat-form-field> | ||||
|       <mat-form-field> | ||||
|         <mat-select placeholder="내용"> | ||||
|           <mat-option value="">카지노콤프</mat-option> | ||||
|           <mat-option value="">슬롯콤프</mat-option> | ||||
|           <mat-option value="">배팅콤프</mat-option> | ||||
|           <mat-option value="">첫충콤프</mat-option> | ||||
|         </mat-select> | ||||
|       </mat-form-field> | ||||
|       <!-- <mat-form-field> | ||||
|         <mat-select placeholder="입금"> | ||||
|           <mat-option value="">계좌입금</mat-option> | ||||
|         </mat-select> | ||||
|       </mat-form-field> | ||||
|       <mat-form-field> | ||||
|         <mat-select placeholder="아이디"> | ||||
|           <mat-option value="">아이디</mat-option> | ||||
|           <mat-option value="">닉네임</mat-option> | ||||
|           <mat-option value="">이름</mat-option> | ||||
|           <mat-option value="">사이트</mat-option> | ||||
|           <mat-option value="">파트너수동지급</mat-option> | ||||
|         </mat-select> | ||||
|       </mat-form-field> | ||||
|       <mat-form-field> | ||||
|         <mat-select placeholder="가입일 정렬"> | ||||
|           <mat-option value="">가입일 정렬</mat-option> | ||||
|           <mat-option value="">아이디 정렬</mat-option> | ||||
|           <mat-option value="">닉네임 정렬</mat-option> | ||||
|           <mat-option value="">캐쉬 정렬</mat-option> | ||||
|           <mat-option value="">콤프 정렬</mat-option> | ||||
|           <mat-option value="">쿠폰 정렬</mat-option> | ||||
|           <mat-option value="">입금 정렬</mat-option> | ||||
|           <mat-option value="">출금 정렬</mat-option> | ||||
|           <mat-option value="">차익 정렬</mat-option> | ||||
|         </mat-select> | ||||
|       </mat-form-field> | ||||
|       <mat-form-field> | ||||
|         <mat-select placeholder="내림차순"> | ||||
|           <mat-option value="">내림차순</mat-option> | ||||
|           <mat-option value="">오름차순</mat-option> | ||||
|         </mat-select> | ||||
|       </mat-form-field> --> | ||||
|       <!-- Search --> | ||||
|       <mat-form-field | ||||
|         class="fuse-mat-dense fuse-mat-no-subscript fuse-mat-rounded min-w-64" | ||||
|       > | ||||
|         <mat-icon | ||||
|           class="icon-size-5" | ||||
|           matPrefix | ||||
|           [svgIcon]="'heroicons_solid:search'" | ||||
|         ></mat-icon> | ||||
|         <input | ||||
|           matInput | ||||
|           [formControl]="searchInputControl" | ||||
|           [autocomplete]="'off'" | ||||
|           [placeholder]="'Search'" | ||||
|         /> | ||||
|       </mat-form-field> | ||||
|       <!-- Add user button --> | ||||
|       <button | ||||
|         class="ml-4" | ||||
|         mat-flat-button | ||||
|         [color]="'primary'" | ||||
|         (click)="__createProduct()" | ||||
|       > | ||||
|         <!-- <mat-icon [svgIcon]="'heroicons_outline:plus'"></mat-icon> --> | ||||
|         <span class="ml-2 mr-1">검색하기</span> | ||||
|       </button> | ||||
|       <button>엑셀저장</button> | ||||
|       <button>카지노머니확인</button> | ||||
|     </div> | ||||
|   </div> | ||||
| 
 | ||||
|   <!-- Main --> | ||||
|   <div class="flex flex-auto overflow-hidden"> | ||||
|     <!-- Products list --> | ||||
|     <div | ||||
|       class="flex flex-col flex-auto sm:mb-18 overflow-hidden sm:overflow-y-auto" | ||||
|     > | ||||
|       <ng-container *ngIf="partnerMainoffices$ | async as partnerMainoffices"> | ||||
|         <ng-container | ||||
|           *ngIf="partnerMainoffices.length > 0; else noPartnerMainoffice" | ||||
|         > | ||||
|           <div class="grid"> | ||||
|             <!-- Header --> | ||||
|             <div | ||||
|               class="inventory-grid z-10 sticky top-0 grid gap-4 py-4 px-6 md:px-8 shadow text-md font-semibold text-secondary bg-gray-50 dark:bg-black dark:bg-opacity-5" | ||||
|               matSort | ||||
|               matSortDisableClear | ||||
|             > | ||||
|               <div class="hidden sm:block"><mat-checkbox></mat-checkbox></div> | ||||
|               <div class="hidden sm:block">요율</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">상부트리</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">관리</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">매장수</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">회원수</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">아이디</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">닉네임</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">예금주</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">연락처</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">정산</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">보유금</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''"> | ||||
|                 게임중머니 | ||||
|               </div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''"> | ||||
|                 카지노->캐쉬 | ||||
|               </div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">금일콤프</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">총입출</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">로그</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">상태</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">회원수</div> | ||||
|               <div class="hidden sm:block" [mat-sort-header]="''">비고</div> | ||||
|             </div> | ||||
|             <!-- Rows --> | ||||
|             <ng-container | ||||
|               *ngIf="partnerMainoffices$ | async as partnerMainoffices" | ||||
|             > | ||||
|               <ng-container | ||||
|                 *ngFor=" | ||||
|                   let partnerMainoffice of partnerMainoffices; | ||||
|                   trackBy: __trackByFn | ||||
|                 " | ||||
|               > | ||||
|                 <div | ||||
|                   class="inventory-grid grid items-center gap-4 py-3 px-6 md:px-8 border-b" | ||||
|                 > | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     <mat-checkbox></mat-checkbox> | ||||
|                   </div> | ||||
|                   <!-- rate --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     <button | ||||
|                       mat-button | ||||
|                       color="primary" | ||||
|                       matTooltip="요율확인 | ||||
|                                 카지노-바카라: 0% | ||||
|                                 카지노-룰렛: 0% | ||||
|                                 카지노-드레곤타이거: 0% | ||||
|                                 카지노-그외: 0% | ||||
|                                 슬롯: 0% | ||||
|                                 카지노루징: 0% | ||||
|                                 슬롯루징: 0%" | ||||
|                     > | ||||
|                       요율 | ||||
|                     </button> | ||||
|                     <div class="hidden sm:block truncate"> | ||||
|                       <!-- 관리 --> | ||||
|                       <button mat-flat-button [color]="'primary'"> | ||||
|                         <mat-form-field> | ||||
|                           <mat-select placeholder="관리"> | ||||
|                             <mat-option value="">보유금지급/회수</mat-option> | ||||
|                             <mat-option value="">수수료설정</mat-option> | ||||
|                             <mat-option value="">콤프지급/회수</mat-option> | ||||
|                             <mat-option value="">쿠폰머니지급/회수</mat-option> | ||||
|                             <mat-option value="">쪽지보내기</mat-option> | ||||
|                             <mat-option value="">베팅리스트</mat-option> | ||||
|                             <mat-option value="">강제로그아웃</mat-option> | ||||
|                           </mat-select> | ||||
|                         </mat-form-field> | ||||
|                       </button> | ||||
|                     </div> | ||||
|                   </div> | ||||
|                   <!-- 매장수 --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     <button mat-flat-button [color]="'primary'"> | ||||
|                       {{ partnerMainoffice.branchCount }} | ||||
|                     </button> | ||||
|                     <button mat-flat-button [color]="'primary'"> | ||||
|                       {{ partnerMainoffice.divisionCount }} | ||||
|                     </button> | ||||
|                     <button mat-flat-button [color]="'primary'"> | ||||
|                       {{ partnerMainoffice.officeCount }} | ||||
|                     </button> | ||||
|                     <button mat-flat-button [color]="'primary'"> | ||||
|                       {{ partnerMainoffice.storeCount }} | ||||
|                     </button> | ||||
|                   </div> | ||||
|                   <!-- 회원수 --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     <button mat-flat-button [color]="'primary'"> | ||||
|                       {{ partnerMainoffice.memberCount }} | ||||
|                     </button> | ||||
|                   </div> | ||||
|                   <!-- id --> | ||||
|                   <ng-container *ngIf="users$ | async as users"> | ||||
|                     <ng-container | ||||
|                       *ngFor="let user of users; trackBy: __trackByFn" | ||||
|                     > | ||||
|                       <div | ||||
|                         class="hidden sm:block truncate" | ||||
|                         (click)="viewUserDetail(user.id!)" | ||||
|                       > | ||||
|                         {{ partnerMainoffice.id }} | ||||
|                       </div> | ||||
|                     </ng-container> | ||||
|                   </ng-container> | ||||
|                   <!-- nickname --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     {{ partnerMainoffice.nickname }} | ||||
|                   </div> | ||||
|                   <!-- accountHolder --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     {{ partnerMainoffice.accountHolder }} | ||||
|                   </div> | ||||
|                   <!-- 연락처 --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     {{ partnerMainoffice.phoneNumber }} | ||||
|                   </div> | ||||
|                   <!-- 정산 --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     {{ partnerMainoffice.calculateType }} | ||||
|                   </div> | ||||
|                   <!-- 보유금 --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     캐쉬{{ partnerMainoffice.ownCash }} 콤프{{ | ||||
|                       partnerMainoffice.ownComp | ||||
|                     }} | ||||
|                     쿠폰{{ partnerMainoffice.ownCoupon }} | ||||
|                   </div> | ||||
|                   <!-- gameMoney --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     {{ partnerMainoffice.gameMoney }} | ||||
|                   </div> | ||||
|                   <!-- casinoCash --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     <button mat-flat-button [color]="'primary'"> | ||||
|                       게임머니확인 | ||||
|                     </button> | ||||
|                     <button mat-flat-button [color]="'primary'"> | ||||
|                       게임머니회수 | ||||
|                     </button> | ||||
|                   </div> | ||||
|                   <!-- todayComp --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     {{ partnerMainoffice.todayComp }}P | ||||
|                   </div> | ||||
|                   <!-- 총입출 --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     입금{{ partnerMainoffice.totalDeposit }} 출금{{ | ||||
|                       partnerMainoffice.totalWithdraw | ||||
|                     }} | ||||
|                     차익{{ partnerMainoffice.balance }} | ||||
|                   </div> | ||||
|                   <!-- log --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     가입{{ partnerMainoffice.registDate }} 최종{{ | ||||
|                       partnerMainoffice.finalSigninDate | ||||
|                     }} | ||||
|                     IP{{ partnerMainoffice.ip }} | ||||
|                   </div> | ||||
|                   <!-- state --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     {{ partnerMainoffice.state }} | ||||
|                   </div> | ||||
|                   <!-- 회원수 --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     {{ partnerMainoffice.memberCount }} | ||||
|                   </div> | ||||
|                   <!-- 비고 --> | ||||
|                   <div class="hidden sm:block truncate"> | ||||
|                     <button mat-flat-button [color]="'primary'"> | ||||
|                       {{ partnerMainoffice.note }} | ||||
|                     </button> | ||||
|                   </div> | ||||
|                 </div> | ||||
|               </ng-container> | ||||
|             </ng-container> | ||||
|           </div> | ||||
| 
 | ||||
|           <mat-paginator | ||||
|             class="sm:absolute sm:inset-x-0 sm:bottom-0 border-b sm:border-t sm:border-b-0 z-10 bg-gray-50 dark:bg-transparent" | ||||
|             [ngClass]="{ 'pointer-events-none': isLoading }" | ||||
|             [length]="pagination?.length" | ||||
|             [pageIndex]="pagination?.page" | ||||
|             [pageSize]="pagination?.size" | ||||
|             [pageSizeOptions]="[5, 10, 25, 100]" | ||||
|             [showFirstLastButtons]="true" | ||||
|           ></mat-paginator> | ||||
|         </ng-container> | ||||
|       </ng-container> | ||||
| 
 | ||||
|       <ng-template #noPartnerMainoffice> | ||||
|         <div | ||||
|           class="p-8 sm:p-16 border-t text-4xl font-semibold tracking-tight text-center" | ||||
|         > | ||||
|           There are no partner mainoffices! | ||||
|         </div> | ||||
|       </ng-template> | ||||
|     </div> | ||||
|   </div> | ||||
| </div> | ||||
| @ -0,0 +1,199 @@ | ||||
| import { | ||||
|   AfterViewInit, | ||||
|   ChangeDetectionStrategy, | ||||
|   ChangeDetectorRef, | ||||
|   Component, | ||||
|   OnDestroy, | ||||
|   OnInit, | ||||
|   ViewChild, | ||||
|   ViewEncapsulation, | ||||
| } from '@angular/core'; | ||||
| import { | ||||
|   FormBuilder, | ||||
|   FormControl, | ||||
|   FormGroup, | ||||
|   Validators, | ||||
| } from '@angular/forms'; | ||||
| import { MatCheckboxChange } from '@angular/material/checkbox'; | ||||
| import { MatPaginator } from '@angular/material/paginator'; | ||||
| import { MatSort } from '@angular/material/sort'; | ||||
| import { | ||||
|   debounceTime, | ||||
|   map, | ||||
|   merge, | ||||
|   Observable, | ||||
|   Subject, | ||||
|   switchMap, | ||||
|   takeUntil, | ||||
| } from 'rxjs'; | ||||
| import { fuseAnimations } from '@fuse/animations'; | ||||
| import { FuseConfirmationService } from '@fuse/services/confirmation'; | ||||
| 
 | ||||
| import { User } from '../../user/models/user'; | ||||
| import { PartnerMainoffice } from '../models/partner-mainoffice'; | ||||
| import { PartnerMainofficePagination } from '../models/partner-mainoffice-pagination'; | ||||
| import { PartnerMainofficeService } from '../services/partner-mainoffice.service'; | ||||
| import { Router } from '@angular/router'; | ||||
| 
 | ||||
| @Component({ | ||||
|   selector: 'partner-mainoffice-list', | ||||
|   templateUrl: './list.component.html', | ||||
|   styles: [ | ||||
|     /* language=SCSS */ | ||||
|     ` | ||||
|       .inventory-grid { | ||||
|         grid-template-columns: 60px auto 40px; | ||||
| 
 | ||||
|         @screen sm { | ||||
|           grid-template-columns: 60px 60px 60px 60px 60px 60px auto 60px; | ||||
|         } | ||||
| 
 | ||||
|         @screen md { | ||||
|           grid-template-columns: 60px 60px 60px 60px 60px 60px auto 60px 60px; | ||||
|         } | ||||
| 
 | ||||
|         @screen lg { | ||||
|           grid-template-columns: 60px 70px 70px 70px 70px 100px 60px 60px auto 60px 60px 60px 60px; | ||||
|         } | ||||
|       } | ||||
|     `,
 | ||||
|   ], | ||||
|   encapsulation: ViewEncapsulation.None, | ||||
|   changeDetection: ChangeDetectionStrategy.OnPush, | ||||
|   animations: fuseAnimations, | ||||
| }) | ||||
| export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | ||||
|   @ViewChild(MatPaginator) private _paginator!: MatPaginator; | ||||
|   @ViewChild(MatSort) private _sort!: MatSort; | ||||
| 
 | ||||
|   partnerMainoffices$!: Observable<PartnerMainoffice[] | undefined>; | ||||
|   users$!: Observable<User[] | undefined>; | ||||
| 
 | ||||
|   isLoading = false; | ||||
|   searchInputControl = new FormControl(); | ||||
|   selectedPartnerMainoffice?: PartnerMainoffice; | ||||
|   pagination?: PartnerMainofficePagination; | ||||
| 
 | ||||
|   private _unsubscribeAll: Subject<any> = new Subject<any>(); | ||||
| 
 | ||||
|   /** | ||||
|    * Constructor | ||||
|    */ | ||||
|   constructor( | ||||
|     private _changeDetectorRef: ChangeDetectorRef, | ||||
|     private _fuseConfirmationService: FuseConfirmationService, | ||||
|     private _formBuilder: FormBuilder, | ||||
|     private _partnerMainofficeService: PartnerMainofficeService, | ||||
|     private router: Router | ||||
|   ) {} | ||||
| 
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
|   // @ Lifecycle hooks
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
| 
 | ||||
|   /** | ||||
|    * On init | ||||
|    */ | ||||
|   ngOnInit(): void { | ||||
|     // Get the pagination
 | ||||
|     this._partnerMainofficeService.pagination$ | ||||
|       .pipe(takeUntil(this._unsubscribeAll)) | ||||
|       .subscribe((pagination: PartnerMainofficePagination | undefined) => { | ||||
|         // Update the pagination
 | ||||
|         this.pagination = pagination; | ||||
| 
 | ||||
|         // Mark for check
 | ||||
|         this._changeDetectorRef.markForCheck(); | ||||
|       }); | ||||
| 
 | ||||
|     // Get the products
 | ||||
|     this.partnerMainoffices$ = | ||||
|       this._partnerMainofficeService.partnerMainoffices$; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * After view init | ||||
|    */ | ||||
|   ngAfterViewInit(): void { | ||||
|     if (this._sort && this._paginator) { | ||||
|       // Set the initial sort
 | ||||
|       this._sort.sort({ | ||||
|         id: 'name', | ||||
|         start: 'asc', | ||||
|         disableClear: true, | ||||
|       }); | ||||
| 
 | ||||
|       // Mark for check
 | ||||
|       this._changeDetectorRef.markForCheck(); | ||||
| 
 | ||||
|       // If the partnerMainoffice changes the sort order...
 | ||||
|       this._sort.sortChange | ||||
|         .pipe(takeUntil(this._unsubscribeAll)) | ||||
|         .subscribe(() => { | ||||
|           // Reset back to the first page
 | ||||
|           this._paginator.pageIndex = 0; | ||||
|         }); | ||||
| 
 | ||||
|       // Get products if sort or page changes
 | ||||
|       merge(this._sort.sortChange, this._paginator.page) | ||||
|         .pipe( | ||||
|           switchMap(() => { | ||||
|             this.isLoading = true; | ||||
|             return this._partnerMainofficeService.getPartnerMainoffices( | ||||
|               this._paginator.pageIndex, | ||||
|               this._paginator.pageSize, | ||||
|               this._sort.active, | ||||
|               this._sort.direction | ||||
|             ); | ||||
|           }), | ||||
|           map(() => { | ||||
|             this.isLoading = false; | ||||
|           }) | ||||
|         ) | ||||
|         .subscribe(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * On destroy | ||||
|    */ | ||||
|   ngOnDestroy(): void { | ||||
|     // Unsubscribe from all subscriptions
 | ||||
|     this._unsubscribeAll.next(null); | ||||
|     this._unsubscribeAll.complete(); | ||||
|   } | ||||
| 
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
|   // @ Public methods
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
| 
 | ||||
|   viewUserDetail(id: string): void { | ||||
|     let url: string = 'member/user/' + id; | ||||
|     this.router.navigateByUrl(url); | ||||
|   } | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
|   // @ Private methods
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
| 
 | ||||
|   /** | ||||
|    * Create product | ||||
|    */ | ||||
|   __createProduct(): void {} | ||||
| 
 | ||||
|   /** | ||||
|    * Toggle product details | ||||
|    * | ||||
|    * @param productId | ||||
|    */ | ||||
|   __toggleDetails(productId: string): void {} | ||||
| 
 | ||||
|   /** | ||||
|    * Track by function for ngFor loops | ||||
|    * | ||||
|    * @param index | ||||
|    * @param item | ||||
|    */ | ||||
|   __trackByFn(index: number, item: any): any { | ||||
|     return item.id || index; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,8 @@ | ||||
| export interface PartnerMainofficePagination { | ||||
|   length: number; | ||||
|   size: number; | ||||
|   page: number; | ||||
|   lastPage: number; | ||||
|   startIndex: number; | ||||
|   endIndex: number; | ||||
| } | ||||
| @ -0,0 +1,29 @@ | ||||
| export interface PartnerMainoffice { | ||||
|   id?: string; | ||||
|   totalPartnerCount?: number; | ||||
|   totalHoldingMoney?: number; | ||||
|   totalComp?: number; | ||||
|   total?: number; | ||||
|   branchCount?: number; | ||||
|   divisionCount?: number; | ||||
|   officeCount?: number; | ||||
|   storeCount?: number; | ||||
|   memberCount?: number; | ||||
|   nickname?: string; | ||||
|   accountHolder?: string; | ||||
|   phoneNumber?: string; | ||||
|   calculateType?: string; | ||||
|   ownCash?: number; | ||||
|   ownComp?: number; | ||||
|   ownCoupon?: number; | ||||
|   gameMoney?: number; | ||||
|   todayComp?: number; | ||||
|   totalDeposit?: number; | ||||
|   totalWithdraw?: number; | ||||
|   balance?: number; | ||||
|   registDate?: string; | ||||
|   finalSigninDate?: string; | ||||
|   ip?: string; | ||||
|   state?: string; | ||||
|   note?: string; | ||||
| } | ||||
| @ -0,0 +1,50 @@ | ||||
| import { NgModule } from '@angular/core'; | ||||
| import { RouterModule } from '@angular/router'; | ||||
| 
 | ||||
| import { MatButtonModule } from '@angular/material/button'; | ||||
| import { MatFormFieldModule } from '@angular/material/form-field'; | ||||
| import { MatIconModule } from '@angular/material/icon'; | ||||
| import { MatInputModule } from '@angular/material/input'; | ||||
| import { MatPaginatorModule } from '@angular/material/paginator'; | ||||
| import { MatProgressBarModule } from '@angular/material/progress-bar'; | ||||
| import { MatRippleModule } from '@angular/material/core'; | ||||
| import { MatSortModule } from '@angular/material/sort'; | ||||
| import { MatSelectModule } from '@angular/material/select'; | ||||
| import { MatTooltipModule } from '@angular/material/tooltip'; | ||||
| import { MatGridListModule } from '@angular/material/grid-list'; | ||||
| import { MatSlideToggleModule } from '@angular/material/slide-toggle'; | ||||
| import { MatRadioModule } from '@angular/material/radio'; | ||||
| import { MatCheckboxModule } from '@angular/material/checkbox'; | ||||
| 
 | ||||
| import { TranslocoModule } from '@ngneat/transloco'; | ||||
| 
 | ||||
| import { SharedModule } from 'app/shared/shared.module'; | ||||
| 
 | ||||
| import { COMPONENTS } from './components'; | ||||
| 
 | ||||
| import { partnerMainofficeRoutes } from './partner-mainoffice.routing'; | ||||
| 
 | ||||
| @NgModule({ | ||||
|   declarations: [COMPONENTS], | ||||
|   imports: [ | ||||
|     TranslocoModule, | ||||
|     SharedModule, | ||||
|     RouterModule.forChild(partnerMainofficeRoutes), | ||||
| 
 | ||||
|     MatButtonModule, | ||||
|     MatFormFieldModule, | ||||
|     MatIconModule, | ||||
|     MatInputModule, | ||||
|     MatPaginatorModule, | ||||
|     MatProgressBarModule, | ||||
|     MatRippleModule, | ||||
|     MatSortModule, | ||||
|     MatSelectModule, | ||||
|     MatTooltipModule, | ||||
|     MatGridListModule, | ||||
|     MatSlideToggleModule, | ||||
|     MatRadioModule, | ||||
|     MatCheckboxModule, | ||||
|   ], | ||||
| }) | ||||
| export class PartnerMainofficeModule {} | ||||
| @ -0,0 +1,24 @@ | ||||
| import { Route } from '@angular/router'; | ||||
| 
 | ||||
| import { ListComponent } from './components/list.component'; | ||||
| import { ViewComponent } from '../user/components/view.component'; | ||||
| 
 | ||||
| import { PartnerMainofficesResolver } from './resolvers/partner-mainoffice.resolver'; | ||||
| import { UserResolver } from '../user/resolvers/user.resolver'; | ||||
| 
 | ||||
| export const partnerMainofficeRoutes: Route[] = [ | ||||
|   { | ||||
|     path: '', | ||||
|     component: ListComponent, | ||||
|     resolve: { | ||||
|       partnerMainoffices: PartnerMainofficesResolver, | ||||
|     }, | ||||
|   }, | ||||
|   { | ||||
|     path: ':id', | ||||
|     component: ViewComponent, | ||||
|     resolve: { | ||||
|       users: UserResolver, | ||||
|     }, | ||||
|   }, | ||||
| ]; | ||||
| @ -0,0 +1,89 @@ | ||||
| import { Injectable } from '@angular/core'; | ||||
| import { | ||||
|   ActivatedRouteSnapshot, | ||||
|   Resolve, | ||||
|   Router, | ||||
|   RouterStateSnapshot, | ||||
| } from '@angular/router'; | ||||
| import { catchError, Observable, throwError } from 'rxjs'; | ||||
| 
 | ||||
| import { PartnerMainoffice } from '../models/partner-mainoffice'; | ||||
| import { PartnerMainofficePagination } from '../models/partner-mainoffice-pagination'; | ||||
| import { PartnerMainofficeService } from '../services/partner-mainoffice.service'; | ||||
| 
 | ||||
| @Injectable({ | ||||
|   providedIn: 'root', | ||||
| }) | ||||
| export class PartnerMainofficeResolver implements Resolve<any> { | ||||
|   /** | ||||
|    * Constructor | ||||
|    */ | ||||
|   constructor( | ||||
|     private _partnerMainofficeService: PartnerMainofficeService, | ||||
|     private _router: Router | ||||
|   ) {} | ||||
| 
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
|   // @ Public methods
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
| 
 | ||||
|   /** | ||||
|    * Resolver | ||||
|    * | ||||
|    * @param route | ||||
|    * @param state | ||||
|    */ | ||||
|   resolve( | ||||
|     route: ActivatedRouteSnapshot, | ||||
|     state: RouterStateSnapshot | ||||
|   ): Observable<PartnerMainoffice | undefined> { | ||||
|     return this._partnerMainofficeService | ||||
|       .getPartnerMainofficeById(route.paramMap.get('id')) | ||||
|       .pipe( | ||||
|         // Error here means the requested product is not available
 | ||||
|         catchError((error) => { | ||||
|           // Log the error
 | ||||
|           console.error(error); | ||||
| 
 | ||||
|           // Get the parent url
 | ||||
|           const parentUrl = state.url.split('/').slice(0, -1).join('/'); | ||||
| 
 | ||||
|           // Navigate to there
 | ||||
|           this._router.navigateByUrl(parentUrl); | ||||
| 
 | ||||
|           // Throw an error
 | ||||
|           return throwError(error); | ||||
|         }) | ||||
|       ); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| @Injectable({ | ||||
|   providedIn: 'root', | ||||
| }) | ||||
| export class PartnerMainofficesResolver implements Resolve<any> { | ||||
|   /** | ||||
|    * Constructor | ||||
|    */ | ||||
|   constructor(private _partnerMainofficeService: PartnerMainofficeService) {} | ||||
| 
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
|   // @ Public methods
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
| 
 | ||||
|   /** | ||||
|    * Resolver | ||||
|    * | ||||
|    * @param route | ||||
|    * @param state | ||||
|    */ | ||||
|   resolve( | ||||
|     route: ActivatedRouteSnapshot, | ||||
|     state: RouterStateSnapshot | ||||
|   ): Observable<{ | ||||
|     pagination: PartnerMainofficePagination; | ||||
|     partnerMainoffices: PartnerMainoffice[]; | ||||
|   }> { | ||||
|     return this._partnerMainofficeService.getPartnerMainoffices(); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,164 @@ | ||||
| import { Injectable } from '@angular/core'; | ||||
| import { HttpClient } from '@angular/common/http'; | ||||
| import { | ||||
|   BehaviorSubject, | ||||
|   filter, | ||||
|   map, | ||||
|   Observable, | ||||
|   of, | ||||
|   switchMap, | ||||
|   take, | ||||
|   tap, | ||||
|   throwError, | ||||
| } from 'rxjs'; | ||||
| 
 | ||||
| import { PartnerMainoffice } from '../models/partner-mainoffice'; | ||||
| import { PartnerMainofficePagination } from '../models/partner-mainoffice-pagination'; | ||||
| 
 | ||||
| @Injectable({ | ||||
|   providedIn: 'root', | ||||
| }) | ||||
| export class PartnerMainofficeService { | ||||
|   // Private
 | ||||
|   private __pagination = new BehaviorSubject< | ||||
|     PartnerMainofficePagination | undefined | ||||
|   >(undefined); | ||||
|   private __partnerMainoffice = new BehaviorSubject< | ||||
|     PartnerMainoffice | undefined | ||||
|   >(undefined); | ||||
|   private __partnerMainoffices = new BehaviorSubject< | ||||
|     PartnerMainoffice[] | undefined | ||||
|   >(undefined); | ||||
| 
 | ||||
|   /** | ||||
|    * Constructor | ||||
|    */ | ||||
|   constructor(private _httpClient: HttpClient) {} | ||||
| 
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
|   // @ Accessors
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
| 
 | ||||
|   /** | ||||
|    * Getter for pagination | ||||
|    */ | ||||
|   get pagination$(): Observable<PartnerMainofficePagination | undefined> { | ||||
|     return this.__pagination.asObservable(); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Getter for partnerMainoffice | ||||
|    */ | ||||
|   get partnerMainoffice$(): Observable<PartnerMainoffice | undefined> { | ||||
|     return this.__partnerMainoffice.asObservable(); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Getter for partnerMainoffices | ||||
|    */ | ||||
|   get partnerMainoffices$(): Observable<PartnerMainoffice[] | undefined> { | ||||
|     return this.__partnerMainoffices.asObservable(); | ||||
|   } | ||||
| 
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
|   // @ Public methods
 | ||||
|   // -----------------------------------------------------------------------------------------------------
 | ||||
| 
 | ||||
|   /** | ||||
|    * Get partnerMainoffices | ||||
|    * | ||||
|    * | ||||
|    * @param page | ||||
|    * @param size | ||||
|    * @param sort | ||||
|    * @param order | ||||
|    * @param search | ||||
|    */ | ||||
|   getPartnerMainoffices( | ||||
|     page: number = 0, | ||||
|     size: number = 10, | ||||
|     sort: string = 'name', | ||||
|     order: 'asc' | 'desc' | '' = 'asc', | ||||
|     search: string = '' | ||||
|   ): Observable<{ | ||||
|     pagination: PartnerMainofficePagination; | ||||
|     partnerMainoffices: PartnerMainoffice[]; | ||||
|   }> { | ||||
|     return this._httpClient | ||||
|       .get<{ | ||||
|         pagination: PartnerMainofficePagination; | ||||
|         partnerMainoffices: PartnerMainoffice[]; | ||||
|       }>('api/apps/member/partner-mainoffice/partner-mainoffices', { | ||||
|         params: { | ||||
|           page: '' + page, | ||||
|           size: '' + size, | ||||
|           sort, | ||||
|           order, | ||||
|           search, | ||||
|         }, | ||||
|       }) | ||||
|       .pipe( | ||||
|         tap((response) => { | ||||
|           this.__pagination.next(response.pagination); | ||||
|           this.__partnerMainoffices.next(response.partnerMainoffices); | ||||
|         }) | ||||
|       ); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Get product by id | ||||
|    */ | ||||
|   getPartnerMainofficeById(id: string | null): Observable<PartnerMainoffice> { | ||||
|     return this.__partnerMainoffices.pipe( | ||||
|       take(1), | ||||
|       map((partnerMainoffices) => { | ||||
|         // Find the product
 | ||||
|         const partnerMainoffice = | ||||
|           partnerMainoffices?.find((item) => item.id === id) || undefined; | ||||
| 
 | ||||
|         // Update the product
 | ||||
|         this.__partnerMainoffice.next(partnerMainoffice); | ||||
| 
 | ||||
|         // Return the product
 | ||||
|         return partnerMainoffice; | ||||
|       }), | ||||
|       switchMap((product) => { | ||||
|         if (!product) { | ||||
|           return throwError('Could not found product with id of ' + id + '!'); | ||||
|         } | ||||
| 
 | ||||
|         return of(product); | ||||
|       }) | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Create product | ||||
|    */ | ||||
|   createPartnerMainoffice(): Observable<PartnerMainoffice> { | ||||
|     return this.partnerMainoffices$.pipe( | ||||
|       take(1), | ||||
|       switchMap((partnerMainoffices) => | ||||
|         this._httpClient | ||||
|           .post<PartnerMainoffice>( | ||||
|             'api/apps/member/partner-mainoffice/product', | ||||
|             {} | ||||
|           ) | ||||
|           .pipe( | ||||
|             map((newPartnerMainoffice) => { | ||||
|               // Update the partnerMainoffices with the new product
 | ||||
|               if (!!partnerMainoffices) { | ||||
|                 this.__partnerMainoffices.next([ | ||||
|                   newPartnerMainoffice, | ||||
|                   ...partnerMainoffices, | ||||
|                 ]); | ||||
|               } | ||||
| 
 | ||||
|               // Return the new product
 | ||||
|               return newPartnerMainoffice; | ||||
|             }) | ||||
|           ) | ||||
|       ) | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| @ -7,6 +7,7 @@ | ||||
|   "Unconnected": "Unconnected", | ||||
|   "Project": "Project", | ||||
|   "All Partner": "All Partner", | ||||
|   "Partner Mainoffice": "Partner Mainoffice", | ||||
|   "Partner Branch": "Partner Branch", | ||||
|   "Partner Division": "Partner Division", | ||||
|   "Mainoffice": "Mainoffice", | ||||
|  | ||||
| @ -7,6 +7,7 @@ | ||||
|   "Unconnected": "장기미접속회원", | ||||
|   "Project": "프로젝트", | ||||
|   "All Partner": "전체파트너", | ||||
|   "Partner Mainoffice": "본사", | ||||
|   "Partner Branch": "대본", | ||||
|   "Partner Division": "부본", | ||||
|   "Analytics": "Analytics", | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user