회원수정로그 page 추가
This commit is contained in:
		
							parent
							
								
									c7e2dc54f6
								
							
						
					
					
						commit
						e4ef8eec99
					
				@ -359,6 +359,13 @@ export const appRoutes: Route[] = [
 | 
				
			|||||||
                (m: any) => m.CompLogModule
 | 
					                (m: any) => m.CompLogModule
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            path: 'modification-log',
 | 
				
			||||||
 | 
					            loadChildren: () =>
 | 
				
			||||||
 | 
					              import(
 | 
				
			||||||
 | 
					                'app/modules/admin/report/modification-log/modification-log.module'
 | 
				
			||||||
 | 
					              ).then((m: any) => m.ModificationLogModule),
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										223
									
								
								src/app/mock-api/apps/report/modification-log/api.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										223
									
								
								src/app/mock-api/apps/report/modification-log/api.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,223 @@
 | 
				
			|||||||
 | 
					import { Injectable } from '@angular/core';
 | 
				
			||||||
 | 
					import { assign, cloneDeep } from 'lodash-es';
 | 
				
			||||||
 | 
					import { FuseMockApiService, FuseMockApiUtils } from '@fuse/lib/mock-api';
 | 
				
			||||||
 | 
					import { modificationLogs as modificationLogsData } from './data';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Injectable({
 | 
				
			||||||
 | 
					  providedIn: 'root',
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class ReportModificationLogMockApi {
 | 
				
			||||||
 | 
					  private _modificationLogs: any[] = modificationLogsData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Constructor
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  constructor(private _fuseMockApiService: FuseMockApiService) {
 | 
				
			||||||
 | 
					    // Register Mock API handlers
 | 
				
			||||||
 | 
					    this.registerHandlers();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					  // @ Public methods
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Register Mock API handlers
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  registerHandlers(): void {
 | 
				
			||||||
 | 
					    // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    // @ ModificationLogs - GET
 | 
				
			||||||
 | 
					    // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    this._fuseMockApiService
 | 
				
			||||||
 | 
					      .onGet('api/apps/report/modification-log/modification-logs', 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 modificationLogs
 | 
				
			||||||
 | 
					        let modificationLogs: any[] | null = cloneDeep(this._modificationLogs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Sort the modificationLogs
 | 
				
			||||||
 | 
					        if (sort === 'sku' || sort === 'name' || sort === 'active') {
 | 
				
			||||||
 | 
					          modificationLogs.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 {
 | 
				
			||||||
 | 
					          modificationLogs.sort((a, b) =>
 | 
				
			||||||
 | 
					            order === 'asc' ? a[sort] - b[sort] : b[sort] - a[sort]
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // If search exists...
 | 
				
			||||||
 | 
					        if (search) {
 | 
				
			||||||
 | 
					          // Filter the modificationLogs
 | 
				
			||||||
 | 
					          modificationLogs = modificationLogs.filter(
 | 
				
			||||||
 | 
					            (contact: any) =>
 | 
				
			||||||
 | 
					              contact.name &&
 | 
				
			||||||
 | 
					              contact.name.toLowerCase().includes(search.toLowerCase())
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Paginate - Start
 | 
				
			||||||
 | 
					        const modificationLogsLength = modificationLogs.length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Calculate pagination details
 | 
				
			||||||
 | 
					        const begin = page * size;
 | 
				
			||||||
 | 
					        const end = Math.min(size * (page + 1), modificationLogsLength);
 | 
				
			||||||
 | 
					        const lastPage = Math.max(Math.ceil(modificationLogsLength / size), 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Prepare the pagination object
 | 
				
			||||||
 | 
					        let pagination = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // If the requested page number is bigger than
 | 
				
			||||||
 | 
					        // the last possible page number, return null for
 | 
				
			||||||
 | 
					        // modificationLogs but also send the last possible page so
 | 
				
			||||||
 | 
					        // the app can navigate to there
 | 
				
			||||||
 | 
					        if (page > lastPage) {
 | 
				
			||||||
 | 
					          modificationLogs = null;
 | 
				
			||||||
 | 
					          pagination = {
 | 
				
			||||||
 | 
					            lastPage,
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          // Paginate the results by size
 | 
				
			||||||
 | 
					          modificationLogs = modificationLogs.slice(begin, end);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          // Prepare the pagination mock-api
 | 
				
			||||||
 | 
					          pagination = {
 | 
				
			||||||
 | 
					            length: modificationLogsLength,
 | 
				
			||||||
 | 
					            size: size,
 | 
				
			||||||
 | 
					            page: page,
 | 
				
			||||||
 | 
					            lastPage: lastPage,
 | 
				
			||||||
 | 
					            startIndex: begin,
 | 
				
			||||||
 | 
					            endIndex: end - 1,
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Return the response
 | 
				
			||||||
 | 
					        return [
 | 
				
			||||||
 | 
					          200,
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            modificationLogs,
 | 
				
			||||||
 | 
					            pagination,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    // @ ModificationLog - GET
 | 
				
			||||||
 | 
					    // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    this._fuseMockApiService
 | 
				
			||||||
 | 
					      .onGet('api/apps/report/modification-log/modification-log')
 | 
				
			||||||
 | 
					      .reply(({ request }) => {
 | 
				
			||||||
 | 
					        // Get the id from the params
 | 
				
			||||||
 | 
					        const id = request.params.get('id');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Clone the modificationLogs
 | 
				
			||||||
 | 
					        const modificationLogs = cloneDeep(this._modificationLogs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Find the modificationLog
 | 
				
			||||||
 | 
					        const modificationLog = modificationLogs.find(
 | 
				
			||||||
 | 
					          (item: any) => item.id === id
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Return the response
 | 
				
			||||||
 | 
					        return [200, modificationLog];
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    // @ ModificationLog - POST
 | 
				
			||||||
 | 
					    // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    this._fuseMockApiService
 | 
				
			||||||
 | 
					      .onPost('api/apps/report/modification-log/modification-log')
 | 
				
			||||||
 | 
					      .reply(() => {
 | 
				
			||||||
 | 
					        // Generate a new modificationLog
 | 
				
			||||||
 | 
					        const newModificationLog = {
 | 
				
			||||||
 | 
					          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 modificationLog
 | 
				
			||||||
 | 
					        this._modificationLogs.unshift(newModificationLog);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Return the response
 | 
				
			||||||
 | 
					        return [200, newModificationLog];
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    // @ ModificationLog - PATCH
 | 
				
			||||||
 | 
					    // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    this._fuseMockApiService
 | 
				
			||||||
 | 
					      .onPatch('api/apps/report/modification-log/modification-log')
 | 
				
			||||||
 | 
					      .reply(({ request }) => {
 | 
				
			||||||
 | 
					        // Get the id and modificationLog
 | 
				
			||||||
 | 
					        const id = request.body.id;
 | 
				
			||||||
 | 
					        const modificationLog = cloneDeep(request.body.modificationLog);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Prepare the updated modificationLog
 | 
				
			||||||
 | 
					        let updatedModificationLog = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Find the modificationLog and update it
 | 
				
			||||||
 | 
					        this._modificationLogs.forEach((item, index, modificationLogs) => {
 | 
				
			||||||
 | 
					          if (item.id === id) {
 | 
				
			||||||
 | 
					            // Update the modificationLog
 | 
				
			||||||
 | 
					            modificationLogs[index] = assign(
 | 
				
			||||||
 | 
					              {},
 | 
				
			||||||
 | 
					              modificationLogs[index],
 | 
				
			||||||
 | 
					              modificationLog
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Store the updated modificationLog
 | 
				
			||||||
 | 
					            updatedModificationLog = modificationLogs[index];
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Return the response
 | 
				
			||||||
 | 
					        return [200, updatedModificationLog];
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    // @ ModificationLog - DELETE
 | 
				
			||||||
 | 
					    // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    this._fuseMockApiService
 | 
				
			||||||
 | 
					      .onDelete('api/apps/report/modification-log/modification-log')
 | 
				
			||||||
 | 
					      .reply(({ request }) => {
 | 
				
			||||||
 | 
					        // Get the id
 | 
				
			||||||
 | 
					        const id = request.params.get('id');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Find the modificationLog and delete it
 | 
				
			||||||
 | 
					        this._modificationLogs.forEach((item, index) => {
 | 
				
			||||||
 | 
					          if (item.id === id) {
 | 
				
			||||||
 | 
					            this._modificationLogs.splice(index, 1);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Return the response
 | 
				
			||||||
 | 
					        return [200, true];
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										33
									
								
								src/app/mock-api/apps/report/modification-log/data.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/app/mock-api/apps/report/modification-log/data.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					/* eslint-disable */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const modificationLogs = [
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    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: '',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
@ -271,6 +271,13 @@ export const defaultNavigation: FuseNavigationItem[] = [
 | 
				
			|||||||
        icon: 'heroicons_outline:academic-cap',
 | 
					        icon: 'heroicons_outline:academic-cap',
 | 
				
			||||||
        link: '/report/comp-log',
 | 
					        link: '/report/comp-log',
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        id: 'report.modification-log',
 | 
				
			||||||
 | 
					        title: 'Modification Log',
 | 
				
			||||||
 | 
					        type: 'basic',
 | 
				
			||||||
 | 
					        icon: 'heroicons_outline:academic-cap',
 | 
				
			||||||
 | 
					        link: '/report/modification-log',
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
				
			|||||||
@ -48,6 +48,7 @@ import { ReportTodayBetMockApi } from './apps/report/today-bet/api';
 | 
				
			|||||||
import { ReportStatisticsMockApi } from './apps/report/statistics/api';
 | 
					import { ReportStatisticsMockApi } from './apps/report/statistics/api';
 | 
				
			||||||
import { ReportMoneyLogMockApi } from './apps/report/money-log/api';
 | 
					import { ReportMoneyLogMockApi } from './apps/report/money-log/api';
 | 
				
			||||||
import { ReportCompLogMockApi } from './apps/report/comp-log/api';
 | 
					import { ReportCompLogMockApi } from './apps/report/comp-log/api';
 | 
				
			||||||
 | 
					import { ReportModificationLogMockApi } from './apps/report/modification-log/api';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const mockApiServices = [
 | 
					export const mockApiServices = [
 | 
				
			||||||
  AcademyMockApi,
 | 
					  AcademyMockApi,
 | 
				
			||||||
@ -100,4 +101,5 @@ export const mockApiServices = [
 | 
				
			|||||||
  ReportStatisticsMockApi,
 | 
					  ReportStatisticsMockApi,
 | 
				
			||||||
  ReportMoneyLogMockApi,
 | 
					  ReportMoneyLogMockApi,
 | 
				
			||||||
  ReportCompLogMockApi,
 | 
					  ReportCompLogMockApi,
 | 
				
			||||||
 | 
					  ReportModificationLogMockApi,
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					import { ListComponent } from './list.component';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const COMPONENTS = [ListComponent];
 | 
				
			||||||
@ -0,0 +1,361 @@
 | 
				
			|||||||
 | 
					<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="modificationLogs$ | async as modificationLogs">
 | 
				
			||||||
 | 
					          <ng-container
 | 
				
			||||||
 | 
					            *ngFor="let modificationLog of modificationLogs; trackBy: __trackByFn"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            <div
 | 
				
			||||||
 | 
					              class="inventory-grid grid items-center gap-4 py-3 px-6 md:px-8 border-b"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <fieldset>
 | 
				
			||||||
 | 
					                총 파트너수:{{ modificationLog.totalPartnerCount }} 총 보유머니:{{
 | 
				
			||||||
 | 
					                  modificationLog.totalHoldingmodification
 | 
				
			||||||
 | 
					                }}
 | 
				
			||||||
 | 
					                총 콤프:{{ modificationLog.totalComp }} 총 합계:{{
 | 
				
			||||||
 | 
					                  modificationLog.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="modificationLogs$ | async as modificationLogs">
 | 
				
			||||||
 | 
					        <ng-container
 | 
				
			||||||
 | 
					          *ngIf="modificationLogs.length > 0; else noModificationLog"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <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">상부트리</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">관리</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">매장수</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">회원수</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">아이디</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">닉네임</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">예금주</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">연락처</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">정산</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">보유금</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">게임중머니</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">카지노->캐쉬</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">금일콤프</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">총입출</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">로그</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">상태</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">회원수</div>
 | 
				
			||||||
 | 
					              <div class="hidden sm:block">비고</div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <!-- Rows -->
 | 
				
			||||||
 | 
					            <ng-container *ngIf="modificationLogs$ | async as modificationLogs">
 | 
				
			||||||
 | 
					              <ng-container
 | 
				
			||||||
 | 
					                *ngFor="
 | 
				
			||||||
 | 
					                  let modificationLog of modificationLogs;
 | 
				
			||||||
 | 
					                  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'">
 | 
				
			||||||
 | 
					                      {{ modificationLog.branchCount }}
 | 
				
			||||||
 | 
					                    </button>
 | 
				
			||||||
 | 
					                    <button mat-flat-button [color]="'primary'">
 | 
				
			||||||
 | 
					                      {{ modificationLog.divisionCount }}
 | 
				
			||||||
 | 
					                    </button>
 | 
				
			||||||
 | 
					                    <button mat-flat-button [color]="'primary'">
 | 
				
			||||||
 | 
					                      {{ modificationLog.officeCount }}
 | 
				
			||||||
 | 
					                    </button>
 | 
				
			||||||
 | 
					                    <button mat-flat-button [color]="'primary'">
 | 
				
			||||||
 | 
					                      {{ modificationLog.storeCount }}
 | 
				
			||||||
 | 
					                    </button>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <!-- 회원수 -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    <button mat-flat-button [color]="'primary'">
 | 
				
			||||||
 | 
					                      {{ modificationLog.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!)"
 | 
				
			||||||
 | 
					                      >
 | 
				
			||||||
 | 
					                        {{ modificationLog.id }}
 | 
				
			||||||
 | 
					                      </div>
 | 
				
			||||||
 | 
					                    </ng-container>
 | 
				
			||||||
 | 
					                  </ng-container>
 | 
				
			||||||
 | 
					                  <!-- nickname -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    {{ modificationLog.nickname }}
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <!-- accountHolder -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    {{ modificationLog.accountHolder }}
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <!-- 연락처 -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    {{ modificationLog.phoneNumber }}
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <!-- 정산 -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    {{ modificationLog.calculateType }}
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <!-- 보유금 -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    캐쉬{{ modificationLog.ownCash }} 콤프{{
 | 
				
			||||||
 | 
					                      modificationLog.ownComp
 | 
				
			||||||
 | 
					                    }}
 | 
				
			||||||
 | 
					                    쿠폰{{ modificationLog.ownCoupon }}
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <!-- gameMoney -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    {{ modificationLog.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">
 | 
				
			||||||
 | 
					                    {{ modificationLog.todayComp }}P
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <!-- 총입출 -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    입금{{ modificationLog.totalDeposit }} 출금{{
 | 
				
			||||||
 | 
					                      modificationLog.totalWithdraw
 | 
				
			||||||
 | 
					                    }}
 | 
				
			||||||
 | 
					                    차익{{ modificationLog.balance }}
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <!-- log -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    가입{{ modificationLog.registDate }} 최종{{
 | 
				
			||||||
 | 
					                      modificationLog.finalSigninDate
 | 
				
			||||||
 | 
					                    }}
 | 
				
			||||||
 | 
					                    IP{{ modificationLog.ip }}
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <!-- state -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    {{ modificationLog.state }}
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <!-- 회원수 -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    {{ modificationLog.memberCount }}
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <!-- 비고 -->
 | 
				
			||||||
 | 
					                  <div class="hidden sm:block truncate">
 | 
				
			||||||
 | 
					                    <button mat-flat-button [color]="'primary'">
 | 
				
			||||||
 | 
					                      {{ modificationLog.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 #noModificationLog>
 | 
				
			||||||
 | 
					        <div
 | 
				
			||||||
 | 
					          class="p-8 sm:p-16 border-t text-4xl font-semibold tracking-tight text-center"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          There are no modificationLogs!
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </ng-template>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
@ -0,0 +1,198 @@
 | 
				
			|||||||
 | 
					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 '../../../member/user/models/user';
 | 
				
			||||||
 | 
					import { ModificationLog } from '../models/modification-log';
 | 
				
			||||||
 | 
					import { ModificationLogPagination } from '../models/modification-log-pagination';
 | 
				
			||||||
 | 
					import { ModificationLogService } from '../services/modification-log.service';
 | 
				
			||||||
 | 
					import { Router } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Component({
 | 
				
			||||||
 | 
					  selector: 'modification-log-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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  modificationLogs$!: Observable<ModificationLog[] | undefined>;
 | 
				
			||||||
 | 
					  users$!: Observable<User[] | undefined>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  isLoading = false;
 | 
				
			||||||
 | 
					  searchInputControl = new FormControl();
 | 
				
			||||||
 | 
					  selectedModificationLog?: ModificationLog;
 | 
				
			||||||
 | 
					  pagination?: ModificationLogPagination;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private _unsubscribeAll: Subject<any> = new Subject<any>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Constructor
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  constructor(
 | 
				
			||||||
 | 
					    private _changeDetectorRef: ChangeDetectorRef,
 | 
				
			||||||
 | 
					    private _fuseConfirmationService: FuseConfirmationService,
 | 
				
			||||||
 | 
					    private _formBuilder: FormBuilder,
 | 
				
			||||||
 | 
					    private _modificationLogService: ModificationLogService,
 | 
				
			||||||
 | 
					    private router: Router
 | 
				
			||||||
 | 
					  ) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					  // @ Lifecycle hooks
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * On init
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  ngOnInit(): void {
 | 
				
			||||||
 | 
					    // Get the pagination
 | 
				
			||||||
 | 
					    this._modificationLogService.pagination$
 | 
				
			||||||
 | 
					      .pipe(takeUntil(this._unsubscribeAll))
 | 
				
			||||||
 | 
					      .subscribe((pagination: ModificationLogPagination | undefined) => {
 | 
				
			||||||
 | 
					        // Update the pagination
 | 
				
			||||||
 | 
					        this.pagination = pagination;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Mark for check
 | 
				
			||||||
 | 
					        this._changeDetectorRef.markForCheck();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Get the products
 | 
				
			||||||
 | 
					    this.modificationLogs$ = this._modificationLogService.modificationLogs$;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * 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 modificationLog 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._modificationLogService.getModificationLogs(
 | 
				
			||||||
 | 
					              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 ModificationLogPagination {
 | 
				
			||||||
 | 
					  length: number;
 | 
				
			||||||
 | 
					  size: number;
 | 
				
			||||||
 | 
					  page: number;
 | 
				
			||||||
 | 
					  lastPage: number;
 | 
				
			||||||
 | 
					  startIndex: number;
 | 
				
			||||||
 | 
					  endIndex: number;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					export interface ModificationLog {
 | 
				
			||||||
 | 
					  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 { modificationLogRoutes } from './modification-log.routing';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@NgModule({
 | 
				
			||||||
 | 
					  declarations: [COMPONENTS],
 | 
				
			||||||
 | 
					  imports: [
 | 
				
			||||||
 | 
					    TranslocoModule,
 | 
				
			||||||
 | 
					    SharedModule,
 | 
				
			||||||
 | 
					    RouterModule.forChild(modificationLogRoutes),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MatButtonModule,
 | 
				
			||||||
 | 
					    MatFormFieldModule,
 | 
				
			||||||
 | 
					    MatIconModule,
 | 
				
			||||||
 | 
					    MatInputModule,
 | 
				
			||||||
 | 
					    MatPaginatorModule,
 | 
				
			||||||
 | 
					    MatProgressBarModule,
 | 
				
			||||||
 | 
					    MatRippleModule,
 | 
				
			||||||
 | 
					    MatSortModule,
 | 
				
			||||||
 | 
					    MatSelectModule,
 | 
				
			||||||
 | 
					    MatTooltipModule,
 | 
				
			||||||
 | 
					    MatGridListModule,
 | 
				
			||||||
 | 
					    MatSlideToggleModule,
 | 
				
			||||||
 | 
					    MatRadioModule,
 | 
				
			||||||
 | 
					    MatCheckboxModule,
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class ModificationLogModule {}
 | 
				
			||||||
@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					import { Route } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { ListComponent } from './components/list.component';
 | 
				
			||||||
 | 
					import { ViewComponent } from '../../member/user/components/view.component';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { ModificationLogsResolver } from './resolvers/modification-log.resolver';
 | 
				
			||||||
 | 
					import { UserResolver } from '../../member/user/resolvers/user.resolver';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const modificationLogRoutes: Route[] = [
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    path: '',
 | 
				
			||||||
 | 
					    component: ListComponent,
 | 
				
			||||||
 | 
					    resolve: {
 | 
				
			||||||
 | 
					      modificationLogs: ModificationLogsResolver,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    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 { ModificationLog } from '../models/modification-log';
 | 
				
			||||||
 | 
					import { ModificationLogPagination } from '../models/modification-log-pagination';
 | 
				
			||||||
 | 
					import { ModificationLogService } from '../services/modification-log.service';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Injectable({
 | 
				
			||||||
 | 
					  providedIn: 'root',
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class ModificationLogResolver implements Resolve<any> {
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Constructor
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  constructor(
 | 
				
			||||||
 | 
					    private _modificationLogService: ModificationLogService,
 | 
				
			||||||
 | 
					    private _router: Router
 | 
				
			||||||
 | 
					  ) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					  // @ Public methods
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Resolver
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   * @param route
 | 
				
			||||||
 | 
					   * @param state
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  resolve(
 | 
				
			||||||
 | 
					    route: ActivatedRouteSnapshot,
 | 
				
			||||||
 | 
					    state: RouterStateSnapshot
 | 
				
			||||||
 | 
					  ): Observable<ModificationLog | undefined> {
 | 
				
			||||||
 | 
					    return this._modificationLogService
 | 
				
			||||||
 | 
					      .getModificationLogById(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 ModificationLogsResolver implements Resolve<any> {
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Constructor
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  constructor(private _modificationLogService: ModificationLogService) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					  // @ Public methods
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Resolver
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   * @param route
 | 
				
			||||||
 | 
					   * @param state
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  resolve(
 | 
				
			||||||
 | 
					    route: ActivatedRouteSnapshot,
 | 
				
			||||||
 | 
					    state: RouterStateSnapshot
 | 
				
			||||||
 | 
					  ): Observable<{
 | 
				
			||||||
 | 
					    pagination: ModificationLogPagination;
 | 
				
			||||||
 | 
					    modificationLogs: ModificationLog[];
 | 
				
			||||||
 | 
					  }> {
 | 
				
			||||||
 | 
					    return this._modificationLogService.getModificationLogs();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,161 @@
 | 
				
			|||||||
 | 
					import { Injectable } from '@angular/core';
 | 
				
			||||||
 | 
					import { HttpClient } from '@angular/common/http';
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  BehaviorSubject,
 | 
				
			||||||
 | 
					  filter,
 | 
				
			||||||
 | 
					  map,
 | 
				
			||||||
 | 
					  Observable,
 | 
				
			||||||
 | 
					  of,
 | 
				
			||||||
 | 
					  switchMap,
 | 
				
			||||||
 | 
					  take,
 | 
				
			||||||
 | 
					  tap,
 | 
				
			||||||
 | 
					  throwError,
 | 
				
			||||||
 | 
					} from 'rxjs';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { ModificationLog } from '../models/modification-log';
 | 
				
			||||||
 | 
					import { ModificationLogPagination } from '../models/modification-log-pagination';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Injectable({
 | 
				
			||||||
 | 
					  providedIn: 'root',
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class ModificationLogService {
 | 
				
			||||||
 | 
					  // Private
 | 
				
			||||||
 | 
					  private __pagination = new BehaviorSubject<
 | 
				
			||||||
 | 
					    ModificationLogPagination | undefined
 | 
				
			||||||
 | 
					  >(undefined);
 | 
				
			||||||
 | 
					  private __modificationLog = new BehaviorSubject<ModificationLog | undefined>(
 | 
				
			||||||
 | 
					    undefined
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					  private __modificationLogs = new BehaviorSubject<
 | 
				
			||||||
 | 
					    ModificationLog[] | undefined
 | 
				
			||||||
 | 
					  >(undefined);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Constructor
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  constructor(private _httpClient: HttpClient) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					  // @ Accessors
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Getter for pagination
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  get pagination$(): Observable<ModificationLogPagination | undefined> {
 | 
				
			||||||
 | 
					    return this.__pagination.asObservable();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Getter for modificationLog
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  get modificationLog$(): Observable<ModificationLog | undefined> {
 | 
				
			||||||
 | 
					    return this.__modificationLog.asObservable();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Getter for modificationLogs
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  get modificationLogs$(): Observable<ModificationLog[] | undefined> {
 | 
				
			||||||
 | 
					    return this.__modificationLogs.asObservable();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					  // @ Public methods
 | 
				
			||||||
 | 
					  // -----------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Get modificationLogs
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   * @param page
 | 
				
			||||||
 | 
					   * @param size
 | 
				
			||||||
 | 
					   * @param sort
 | 
				
			||||||
 | 
					   * @param order
 | 
				
			||||||
 | 
					   * @param search
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  getModificationLogs(
 | 
				
			||||||
 | 
					    page: number = 0,
 | 
				
			||||||
 | 
					    size: number = 10,
 | 
				
			||||||
 | 
					    sort: string = 'name',
 | 
				
			||||||
 | 
					    order: 'asc' | 'desc' | '' = 'asc',
 | 
				
			||||||
 | 
					    search: string = ''
 | 
				
			||||||
 | 
					  ): Observable<{
 | 
				
			||||||
 | 
					    pagination: ModificationLogPagination;
 | 
				
			||||||
 | 
					    modificationLogs: ModificationLog[];
 | 
				
			||||||
 | 
					  }> {
 | 
				
			||||||
 | 
					    return this._httpClient
 | 
				
			||||||
 | 
					      .get<{
 | 
				
			||||||
 | 
					        pagination: ModificationLogPagination;
 | 
				
			||||||
 | 
					        modificationLogs: ModificationLog[];
 | 
				
			||||||
 | 
					      }>('api/apps/report/modification-log/modification-logs', {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          page: '' + page,
 | 
				
			||||||
 | 
					          size: '' + size,
 | 
				
			||||||
 | 
					          sort,
 | 
				
			||||||
 | 
					          order,
 | 
				
			||||||
 | 
					          search,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .pipe(
 | 
				
			||||||
 | 
					        tap((response) => {
 | 
				
			||||||
 | 
					          this.__pagination.next(response.pagination);
 | 
				
			||||||
 | 
					          this.__modificationLogs.next(response.modificationLogs);
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Get product by id
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  getModificationLogById(id: string | null): Observable<ModificationLog> {
 | 
				
			||||||
 | 
					    return this.__modificationLogs.pipe(
 | 
				
			||||||
 | 
					      take(1),
 | 
				
			||||||
 | 
					      map((modificationLogs) => {
 | 
				
			||||||
 | 
					        // Find the product
 | 
				
			||||||
 | 
					        const modificationLog =
 | 
				
			||||||
 | 
					          modificationLogs?.find((item) => item.id === id) || undefined;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Update the product
 | 
				
			||||||
 | 
					        this.__modificationLog.next(modificationLog);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Return the product
 | 
				
			||||||
 | 
					        return modificationLog;
 | 
				
			||||||
 | 
					      }),
 | 
				
			||||||
 | 
					      switchMap((product) => {
 | 
				
			||||||
 | 
					        if (!product) {
 | 
				
			||||||
 | 
					          return throwError('Could not found product with id of ' + id + '!');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return of(product);
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Create product
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  createModificationLog(): Observable<ModificationLog> {
 | 
				
			||||||
 | 
					    return this.modificationLogs$.pipe(
 | 
				
			||||||
 | 
					      take(1),
 | 
				
			||||||
 | 
					      switchMap((modificationLogs) =>
 | 
				
			||||||
 | 
					        this._httpClient
 | 
				
			||||||
 | 
					          .post<ModificationLog>('api/apps/report/modification-log/product', {})
 | 
				
			||||||
 | 
					          .pipe(
 | 
				
			||||||
 | 
					            map((newModificationLog) => {
 | 
				
			||||||
 | 
					              // Update the modificationLogs with the new product
 | 
				
			||||||
 | 
					              if (!!modificationLogs) {
 | 
				
			||||||
 | 
					                this.__modificationLogs.next([
 | 
				
			||||||
 | 
					                  newModificationLog,
 | 
				
			||||||
 | 
					                  ...modificationLogs,
 | 
				
			||||||
 | 
					                ]);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              // Return the new product
 | 
				
			||||||
 | 
					              return newModificationLog;
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -30,5 +30,6 @@
 | 
				
			|||||||
  "Today Bet": "Today Bet",
 | 
					  "Today Bet": "Today Bet",
 | 
				
			||||||
  "Statistics": "Statistics",
 | 
					  "Statistics": "Statistics",
 | 
				
			||||||
  "Money Log": "Money Logs",
 | 
					  "Money Log": "Money Logs",
 | 
				
			||||||
  "Comp Log": "Comp Logs"
 | 
					  "Comp Log": "Comp Logs",
 | 
				
			||||||
 | 
					  "Modification Log": "Member Modification Logs"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -31,5 +31,6 @@
 | 
				
			|||||||
  "Today Bet": "금일 배팅자 목록",
 | 
					  "Today Bet": "금일 배팅자 목록",
 | 
				
			||||||
  "Statistics": "종목별매출통계",
 | 
					  "Statistics": "종목별매출통계",
 | 
				
			||||||
  "Money Log": "머니활동 Logs",
 | 
					  "Money Log": "머니활동 Logs",
 | 
				
			||||||
  "Comp Log": "콤프사용 Logs"
 | 
					  "Comp Log": "콤프사용 Logs",
 | 
				
			||||||
 | 
					  "Modification Log": "회원수정로그"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user