Merge branch 'feature/BETERAN-BACKEND-APP-BROWSER-init' of https://gitlab.loafle.net/bet/beteran-backend-app-browser into feature/BETERAN-BACKEND-APP-BROWSER-init
This commit is contained in:
		
						commit
						84d14dd7b7
					
				| @ -42,19 +42,19 @@ export class BoardPopupMockApi { | |||||||
|         let popups: any[] | null = cloneDeep(this._popups); |         let popups: any[] | null = cloneDeep(this._popups); | ||||||
| 
 | 
 | ||||||
|         // Sort the popups
 |         // Sort the popups
 | ||||||
|         if (sort === 'sku' || sort === 'name' || sort === 'active') { |         // if (sort === 'sku' || sort === 'name' || sort === 'active') {
 | ||||||
|           popups.sort((a, b) => { |         //   popups.sort((a, b) => {
 | ||||||
|             const fieldA = a[sort].toString().toUpperCase(); |         //     const fieldA = a[sort].toString().toUpperCase();
 | ||||||
|             const fieldB = b[sort].toString().toUpperCase(); |         //     const fieldB = b[sort].toString().toUpperCase();
 | ||||||
|             return order === 'asc' |         //     return order === 'asc'
 | ||||||
|               ? fieldA.localeCompare(fieldB) |         //       ? fieldA.localeCompare(fieldB)
 | ||||||
|               : fieldB.localeCompare(fieldA); |         //       : fieldB.localeCompare(fieldA);
 | ||||||
|           }); |         //   });
 | ||||||
|         } else { |         // } else {
 | ||||||
|           popups.sort((a, b) => |         //   popups.sort((a, b) =>
 | ||||||
|             order === 'asc' ? a[sort] - b[sort] : b[sort] - a[sort] |         //     order === 'asc' ? a[sort] - b[sort] : b[sort] - a[sort]
 | ||||||
|           ); |         //   );
 | ||||||
|         } |         // }
 | ||||||
| 
 | 
 | ||||||
|         // If search exists...
 |         // If search exists...
 | ||||||
|         if (search) { |         if (search) { | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ | |||||||
| 
 | 
 | ||||||
| export const popups = [ | export const popups = [ | ||||||
|   { |   { | ||||||
|  |     id: '1', | ||||||
|     index: 10, |     index: 10, | ||||||
|     title: '악성배팅 제제 안내', |     title: '악성배팅 제제 안내', | ||||||
|     widthSize: 500, |     widthSize: 500, | ||||||
| @ -10,5 +11,66 @@ export const popups = [ | |||||||
|     leftMargin: 100, |     leftMargin: 100, | ||||||
|     site: 'all', |     site: 'all', | ||||||
|     useOrNot: 'N', |     useOrNot: 'N', | ||||||
|  |     content: 'test', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     id: '2', | ||||||
|  |     index: 10, | ||||||
|  |     title: '악성배팅 제제 안내2', | ||||||
|  |     widthSize: 500, | ||||||
|  |     heightSize: 830, | ||||||
|  |     topMargin: 100, | ||||||
|  |     leftMargin: 100, | ||||||
|  |     site: 'all', | ||||||
|  |     useOrNot: 'N', | ||||||
|  |     content: 'test', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     id: '3', | ||||||
|  |     index: 10, | ||||||
|  |     title: '악성배팅 제제 안내3', | ||||||
|  |     widthSize: 500, | ||||||
|  |     heightSize: 830, | ||||||
|  |     topMargin: 100, | ||||||
|  |     leftMargin: 100, | ||||||
|  |     site: 'all', | ||||||
|  |     useOrNot: 'N', | ||||||
|  |     content: 'test', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     id: '4', | ||||||
|  |     index: 10, | ||||||
|  |     title: '악성배팅 제제 안내4', | ||||||
|  |     widthSize: 500, | ||||||
|  |     heightSize: 830, | ||||||
|  |     topMargin: 100, | ||||||
|  |     leftMargin: 100, | ||||||
|  |     site: 'all', | ||||||
|  |     useOrNot: 'N', | ||||||
|  |     content: 'test', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     id: '5', | ||||||
|  |     index: 10, | ||||||
|  |     title: '악성배팅 제제 안내5', | ||||||
|  |     widthSize: 500, | ||||||
|  |     heightSize: 830, | ||||||
|  |     topMargin: 100, | ||||||
|  |     leftMargin: 100, | ||||||
|  |     site: 'all', | ||||||
|  |     useOrNot: 'N', | ||||||
|  |     content: 'test', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     id: '6', | ||||||
|  |     index: 10, | ||||||
|  |     title: '악성배팅 제제 안내6', | ||||||
|  |     widthSize: 500, | ||||||
|  |     heightSize: 830, | ||||||
|  |     topMargin: 100, | ||||||
|  |     leftMargin: 100, | ||||||
|  |     site: 'all', | ||||||
|  |     useOrNot: 'N', | ||||||
|  |     content: 'test', | ||||||
|   }, |   }, | ||||||
| ]; | ]; | ||||||
|  | |||||||
| @ -29,16 +29,36 @@ export class ReportDailyPartnerMockApi { | |||||||
|     // @ DailyPartners - GET
 |     // @ DailyPartners - GET
 | ||||||
|     // -----------------------------------------------------------------------------------------------------
 |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|     this._fuseMockApiService |     this._fuseMockApiService | ||||||
|       .onGet('api/apps/report/daily-partner', 300) |       .onGet('api/apps/report/daily-partners', 300) | ||||||
|       .reply(({ request }) => { |       .reply(({ request }) => { | ||||||
|         // Get available queries
 |         // Get available queries
 | ||||||
|         const search = request.params.get('search'); |         const search = request.params.get('search'); | ||||||
|         const sort = request.params.get('sort') || 'name'; |         const sort = request.params.get('sort') || 'lastDayHoldingMoney'; | ||||||
|         const order = request.params.get('order') || 'asc'; |         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 dailyPartners
 |         // Clone the dailyPartners
 | ||||||
|         let dailyPartners: any[] | null = cloneDeep(this._dailyPartners); |         let dailyPartners: any[] | null = cloneDeep(this._dailyPartners); | ||||||
| 
 | 
 | ||||||
|  |         // Sort the dailys
 | ||||||
|  |         if ( | ||||||
|  |           sort === 'lastDayHoldingMoney' || | ||||||
|  |           sort === 'memberCharge' || | ||||||
|  |           sort === 'memberExchange' | ||||||
|  |         ) { | ||||||
|  |           dailyPartners.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 { | ||||||
|  |           dailyPartners.sort((a, b) => | ||||||
|  |             order === 'asc' ? a[sort] - b[sort] : b[sort] - a[sort] | ||||||
|  |           ); | ||||||
|  |         } | ||||||
|         // If search exists...
 |         // If search exists...
 | ||||||
|         if (search) { |         if (search) { | ||||||
|           // Filter the dailyPartners
 |           // Filter the dailyPartners
 | ||||||
| @ -49,6 +69,41 @@ export class ReportDailyPartnerMockApi { | |||||||
|           ); |           ); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         // Paginate - Start
 | ||||||
|  |         const dailysLength = dailyPartners.length; | ||||||
|  | 
 | ||||||
|  |         // Calculate pagination details
 | ||||||
|  |         const begin = page * size; | ||||||
|  |         const end = Math.min(size * (page + 1), dailysLength); | ||||||
|  |         const lastPage = Math.max(Math.ceil(dailysLength / size), 1); | ||||||
|  | 
 | ||||||
|  |         // Prepare the pagination object
 | ||||||
|  |         let pagination = {}; | ||||||
|  | 
 | ||||||
|  |         // If the requested page number is bigger than
 | ||||||
|  |         // the last possible page number, return null for
 | ||||||
|  |         // dailys but also send the last possible page so
 | ||||||
|  |         // the app can navigate to there
 | ||||||
|  |         if (page > lastPage) { | ||||||
|  |           dailyPartners = null; | ||||||
|  |           pagination = { | ||||||
|  |             lastPage, | ||||||
|  |           }; | ||||||
|  |         } else { | ||||||
|  |           // Paginate the results by size
 | ||||||
|  |           dailyPartners = dailyPartners.slice(begin, end); | ||||||
|  | 
 | ||||||
|  |           // Prepare the pagination mock-api
 | ||||||
|  |           pagination = { | ||||||
|  |             length: dailysLength, | ||||||
|  |             size: size, | ||||||
|  |             page: page, | ||||||
|  |             lastPage: lastPage, | ||||||
|  |             startIndex: begin, | ||||||
|  |             endIndex: end - 1, | ||||||
|  |           }; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // Return the response
 |         // Return the response
 | ||||||
|         return [ |         return [ | ||||||
|           200, |           200, | ||||||
| @ -61,21 +116,21 @@ export class ReportDailyPartnerMockApi { | |||||||
|     // -----------------------------------------------------------------------------------------------------
 |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|     // @ DailyPartner - GET
 |     // @ DailyPartner - GET
 | ||||||
|     // -----------------------------------------------------------------------------------------------------
 |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|     // this._fuseMockApiService
 |     this._fuseMockApiService | ||||||
|     //   .onGet('api/apps/report/daily-partner')
 |       .onGet('api/apps/report/daily-partner') | ||||||
|     //   .reply(({ request }) => {
 |       .reply(({ request }) => { | ||||||
|     //     // Get the id from the params
 |         // Get the id from the params
 | ||||||
|     //     const id = request.params.get('id');
 |         const id = request.params.get('id'); | ||||||
| 
 | 
 | ||||||
|     //     // Clone the dailyPartners
 |         // Clone the dailyPartners
 | ||||||
|     //     const dailyPartners = cloneDeep(this._dailyPartners);
 |         const dailyPartners = cloneDeep(this._dailyPartners); | ||||||
| 
 | 
 | ||||||
|     //     // Find the dailyPartner
 |         // Find the dailyPartner
 | ||||||
|     //     const dailyPartner = dailyPartners.find((item: any) => item.id === id);
 |         const dailyPartner = dailyPartners.find((item: any) => item.id === id); | ||||||
| 
 | 
 | ||||||
|     //     // Return the response
 |         // Return the response
 | ||||||
|     //     return [200, dailyPartner];
 |         return [200, dailyPartner]; | ||||||
|     //   });
 |       }); | ||||||
| 
 | 
 | ||||||
|     // -----------------------------------------------------------------------------------------------------
 |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|     // @ DailyPartner - POST
 |     // @ DailyPartner - POST
 | ||||||
|  | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -2,32 +2,35 @@ | |||||||
| 
 | 
 | ||||||
| export const statisticss = [ | export const statisticss = [ | ||||||
|   { |   { | ||||||
|     id: 'on00', |     id: '7eb7c859-1347-4317-96b6-9476a7e2ba3c', | ||||||
|     totalPartnerCount: '5', |     casinoUse: 2, | ||||||
|     totalHoldingMoney: 303675, |     casinoBetting: 1183000, | ||||||
|     totalComp: 108933, |     casinoCancel: 10000, | ||||||
|     total: 412608, |     casinoAvailable: 1140000, | ||||||
|     branchCount: 1, |     casinoWinning: 979050, | ||||||
|     divisionCount: 1, |     casinoWinLoss: 193950, | ||||||
|     officeCount: 1, |     casinoCommission: 14810, | ||||||
|     storeCount: 1, |     casinoBetWinCalculate: 179140, | ||||||
|     memberCount: 1, |     slotUse: 2, | ||||||
|     nickname: 'on00', |     slotBetting: 225000, | ||||||
|     accountHolder: '11', |     slotCancel: 0, | ||||||
|     phoneNumber: '010-1111-1111', |     slotAvailable: 225000, | ||||||
|     calculateType: '롤링', |     slotWinning: 114280, | ||||||
|     ownCash: 50000, |     slotWinLoss: 110720, | ||||||
|     ownComp: 1711, |     slotTotalCommission: 11250, | ||||||
|     ownCoupon: 50000, |     slotBetWinCalculate: 99470, | ||||||
|     gameMoney: 0, |     powerballUse: 0, | ||||||
|     todayComp: 0, |     powerballBetting: 0, | ||||||
|     totalDeposit: 0, |     powerballWinning: 0, | ||||||
|     totalWithdraw: 0, |     powerballWinLoss: 0, | ||||||
|     balance: 0, |     powerballCommission: 0, | ||||||
|     registDate: '2022-06-12 15:38', |     powerballBetWinCalculate: 0, | ||||||
|     finalSigninDate: '', |     totalUse: 4, | ||||||
|     ip: '', |     totalAvailable: 1365000, | ||||||
|     state: '정상', |     totalBetting: 1408000, | ||||||
|     note: '', |     totalCancel: 10000, | ||||||
|  |     totalWinLoss: 304670, | ||||||
|  |     totalCommission: 26060, | ||||||
|  |     totalBetWinCalculate: 278610, | ||||||
|   }, |   }, | ||||||
| ]; | ]; | ||||||
|  | |||||||
| @ -2,7 +2,6 @@ import { Injectable } from '@angular/core'; | |||||||
| import { assign, cloneDeep } from 'lodash-es'; | import { assign, cloneDeep } from 'lodash-es'; | ||||||
| import { FuseMockApiService, FuseMockApiUtils } from '@fuse/lib/mock-api'; | import { FuseMockApiService, FuseMockApiUtils } from '@fuse/lib/mock-api'; | ||||||
| import { todayBets as todayBetsData } from './data'; | import { todayBets as todayBetsData } from './data'; | ||||||
| import { contacts } from '../../chat/data'; |  | ||||||
| 
 | 
 | ||||||
| @Injectable({ | @Injectable({ | ||||||
|   providedIn: 'root', |   providedIn: 'root', | ||||||
| @ -34,12 +33,29 @@ export class ReportTodayBetMockApi { | |||||||
|       .reply(({ request }) => { |       .reply(({ request }) => { | ||||||
|         // Get available queries
 |         // Get available queries
 | ||||||
|         const search = request.params.get('search'); |         const search = request.params.get('search'); | ||||||
|         const sort = request.params.get('sort') || 'name'; |         const sort = request.params.get('sort') || 'signinId'; | ||||||
|         const order = request.params.get('order') || 'asc'; |         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 todayBets
 |         // Clone the todayBets
 | ||||||
|         let todayBets: any[] | null = cloneDeep(this._todayBets); |         let todayBets: any[] | null = cloneDeep(this._todayBets); | ||||||
| 
 | 
 | ||||||
|  |         // Sort the todayBets
 | ||||||
|  |         if (sort === 'signinId' || sort === 'nickname' || sort === 'rank') { | ||||||
|  |           todayBets.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 { | ||||||
|  |           todayBets.sort((a, b) => | ||||||
|  |             order === 'asc' ? a[sort] - b[sort] : b[sort] - a[sort] | ||||||
|  |           ); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // If search exists...
 |         // If search exists...
 | ||||||
|         if (search) { |         if (search) { | ||||||
|           // Filter the todayBets
 |           // Filter the todayBets
 | ||||||
| @ -50,11 +66,47 @@ export class ReportTodayBetMockApi { | |||||||
|           ); |           ); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         // Paginate - Start
 | ||||||
|  |         const todayBetsLength = todayBets.length; | ||||||
|  | 
 | ||||||
|  |         // Calculate pagination details
 | ||||||
|  |         const begin = page * size; | ||||||
|  |         const end = Math.min(size * (page + 1), todayBetsLength); | ||||||
|  |         const lastPage = Math.max(Math.ceil(todayBetsLength / size), 1); | ||||||
|  | 
 | ||||||
|  |         // Prepare the pagination object
 | ||||||
|  |         let pagination = {}; | ||||||
|  | 
 | ||||||
|  |         // If the requested page number is bigger than
 | ||||||
|  |         // the last possible page number, return null for
 | ||||||
|  |         // todayBets but also send the last possible page so
 | ||||||
|  |         // the app can navigate to there
 | ||||||
|  |         if (page > lastPage) { | ||||||
|  |           todayBets = null; | ||||||
|  |           pagination = { | ||||||
|  |             lastPage, | ||||||
|  |           }; | ||||||
|  |         } else { | ||||||
|  |           // Paginate the results by size
 | ||||||
|  |           todayBets = todayBets.slice(begin, end); | ||||||
|  | 
 | ||||||
|  |           // Prepare the pagination mock-api
 | ||||||
|  |           pagination = { | ||||||
|  |             length: todayBetsLength, | ||||||
|  |             size: size, | ||||||
|  |             page: page, | ||||||
|  |             lastPage: lastPage, | ||||||
|  |             startIndex: begin, | ||||||
|  |             endIndex: end - 1, | ||||||
|  |           }; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // Return the response
 |         // Return the response
 | ||||||
|         return [ |         return [ | ||||||
|           200, |           200, | ||||||
|           { |           { | ||||||
|             todayBets, |             todayBets, | ||||||
|  |             pagination, | ||||||
|           }, |           }, | ||||||
|         ]; |         ]; | ||||||
|       }); |       }); | ||||||
|  | |||||||
| @ -2,518 +2,40 @@ | |||||||
| 
 | 
 | ||||||
| export const todayBets = [ | export const todayBets = [ | ||||||
|   { |   { | ||||||
|     user: { |     id: '8fcce528-d878-4cc8-99f7-bd3451ed5402', | ||||||
|       id: '1', |     signinId: 'aa100', | ||||||
|       signinId: 'kgon1', |     rank: '회원', | ||||||
|       type: '본사', |     level: '4', | ||||||
|       parentId: 0, |     nickname: 'aa100', | ||||||
|       rank: '회원', |     memberCharge: 40100000, | ||||||
|       level: '4', |     memberExchange: 19000000, | ||||||
|       nickname: 'aa100', |     memberProfitLoss: 21100000, | ||||||
|     }, |     partnerCharge: 0, | ||||||
|     bank: { |     partnerExchange: 0, | ||||||
|       users: { |     partnerProfitLoss: 0, | ||||||
|         deposit: '0', |     totalProfitLoss: 21100000, | ||||||
|         withdraw: '0', |     passiveMoney: -20002000, | ||||||
|         netProfit: 0, |     passiveComp: 0, | ||||||
|       }, |     casinoBetting: 13648000, | ||||||
|       parthners: { |     casinoTie: 314000, | ||||||
|         deposit: '0', |     casinoCancel: 0, | ||||||
|         withdraw: '0', |     casinoAvailable: 13334000, | ||||||
|         netProfit: '0', |     casinoWinning: 12649500, | ||||||
|       }, |     casinoWinLoss: 998500, | ||||||
|       totalNetProfit: '0', |     casinoCommission: 83347, | ||||||
|       passiveMoney: '0', |     casinoBetWinCalculate: 915153, | ||||||
|       passiveComp: '0', |     slotBetting: 1159511, | ||||||
|       casino: { |     slotCancel: 0, | ||||||
|         betting: '382,000', |     slotAvailable: 1159511, | ||||||
|         bettingTie: '33,000', |     slotWinning: 897768, | ||||||
|         bettingCancel: '0', |     slotWinLoss: 261743, | ||||||
|         bettingValid: '351,000', |     slotCommission: 6800, | ||||||
|         bettingWin: '357,050', |     slotBetWinCalculate: 254943, | ||||||
|         winLoss: '26,950', |     powerballBetting: 0, | ||||||
|         commission: { |     powerballWinning: 0, | ||||||
|           total: '7,020', |     powerballWinLoss: 0, | ||||||
|           partner: '5,265', |     powerballCommission: 0, | ||||||
|           me: '1,755', |     powerballBetWinCalculate: 0, | ||||||
|         }, |     totalBetWinCalculate: 0, | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       slot: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       powerball: { |  | ||||||
|         betting: '0', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '0', |  | ||||||
|         bettingWin: '0', |  | ||||||
|         winLoss: '0', |  | ||||||
|         commission: { |  | ||||||
|           total: '0', |  | ||||||
|           partner: '0', |  | ||||||
|           me: '0', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|     totalBetSettle: '119,400', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: { |  | ||||||
|       id: '2', |  | ||||||
|       signinId: 'kgon2', |  | ||||||
|       type: '대본', |  | ||||||
|       parentId: 1, |  | ||||||
|     }, |  | ||||||
|     bank: { |  | ||||||
|       users: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: 0, |  | ||||||
|       }, |  | ||||||
|       parthners: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: '0', |  | ||||||
|       }, |  | ||||||
|       totalNetProfit: '0', |  | ||||||
|       passiveMoney: '0', |  | ||||||
|       passiveComp: '0', |  | ||||||
|       casino: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingTie: '33,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       slot: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       powerball: { |  | ||||||
|         betting: '0', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '0', |  | ||||||
|         bettingWin: '0', |  | ||||||
|         winLoss: '0', |  | ||||||
|         commission: { |  | ||||||
|           total: '0', |  | ||||||
|           partner: '0', |  | ||||||
|           me: '0', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|     totalBetSettle: '119,400', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: { |  | ||||||
|       id: '3', |  | ||||||
|       signinId: 'kgon1', |  | ||||||
|       type: '본사', |  | ||||||
|       parentId: 2, |  | ||||||
|     }, |  | ||||||
|     bank: { |  | ||||||
|       users: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: 0, |  | ||||||
|       }, |  | ||||||
|       parthners: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: '0', |  | ||||||
|       }, |  | ||||||
|       totalNetProfit: '0', |  | ||||||
|       passiveMoney: '0', |  | ||||||
|       passiveComp: '0', |  | ||||||
|       casino: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingTie: '33,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       slot: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       powerball: { |  | ||||||
|         betting: '0', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '0', |  | ||||||
|         bettingWin: '0', |  | ||||||
|         winLoss: '0', |  | ||||||
|         commission: { |  | ||||||
|           total: '0', |  | ||||||
|           partner: '0', |  | ||||||
|           me: '0', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|     totalBetSettle: '119,400', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: { |  | ||||||
|       id: '4', |  | ||||||
|       signinId: 'kgon1', |  | ||||||
|       type: '부본', |  | ||||||
|       parentId: 3, |  | ||||||
|     }, |  | ||||||
|     bank: { |  | ||||||
|       users: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: 0, |  | ||||||
|       }, |  | ||||||
|       parthners: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: '0', |  | ||||||
|       }, |  | ||||||
|       totalNetProfit: '0', |  | ||||||
|       passiveMoney: '0', |  | ||||||
|       passiveComp: '0', |  | ||||||
|       casino: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingTie: '33,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       slot: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       powerball: { |  | ||||||
|         betting: '0', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '0', |  | ||||||
|         bettingWin: '0', |  | ||||||
|         winLoss: '0', |  | ||||||
|         commission: { |  | ||||||
|           total: '0', |  | ||||||
|           partner: '0', |  | ||||||
|           me: '0', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|     totalBetSettle: '119,400', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: { |  | ||||||
|       id: '5', |  | ||||||
|       signinId: 'kgon1', |  | ||||||
|       type: '본사', |  | ||||||
|       parentId: 0, |  | ||||||
|     }, |  | ||||||
|     bank: { |  | ||||||
|       users: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: 0, |  | ||||||
|       }, |  | ||||||
|       parthners: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: '0', |  | ||||||
|       }, |  | ||||||
|       totalNetProfit: '0', |  | ||||||
|       passiveMoney: '0', |  | ||||||
|       passiveComp: '0', |  | ||||||
|       casino: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingTie: '33,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       slot: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       powerball: { |  | ||||||
|         betting: '0', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '0', |  | ||||||
|         bettingWin: '0', |  | ||||||
|         winLoss: '0', |  | ||||||
|         commission: { |  | ||||||
|           total: '0', |  | ||||||
|           partner: '0', |  | ||||||
|           me: '0', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|     totalBetSettle: '119,400', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: { |  | ||||||
|       id: '6', |  | ||||||
|       signinId: 'kgon1', |  | ||||||
|       type: '본사', |  | ||||||
|       parentId: 0, |  | ||||||
|     }, |  | ||||||
|     bank: { |  | ||||||
|       users: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: 0, |  | ||||||
|       }, |  | ||||||
|       parthners: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: '0', |  | ||||||
|       }, |  | ||||||
|       totalNetProfit: '0', |  | ||||||
|       passiveMoney: '0', |  | ||||||
|       passiveComp: '0', |  | ||||||
|       casino: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingTie: '33,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       slot: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       powerball: { |  | ||||||
|         betting: '0', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '0', |  | ||||||
|         bettingWin: '0', |  | ||||||
|         winLoss: '0', |  | ||||||
|         commission: { |  | ||||||
|           total: '0', |  | ||||||
|           partner: '0', |  | ||||||
|           me: '0', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|     totalBetSettle: '119,400', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: { |  | ||||||
|       id: '7', |  | ||||||
|       signinId: 'kgon1', |  | ||||||
|       type: '본사', |  | ||||||
|       parentId: 0, |  | ||||||
|     }, |  | ||||||
|     bank: { |  | ||||||
|       users: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: 0, |  | ||||||
|       }, |  | ||||||
|       parthners: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: '0', |  | ||||||
|       }, |  | ||||||
|       totalNetProfit: '0', |  | ||||||
|       passiveMoney: '0', |  | ||||||
|       passiveComp: '0', |  | ||||||
|       casino: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingTie: '33,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       slot: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       powerball: { |  | ||||||
|         betting: '0', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '0', |  | ||||||
|         bettingWin: '0', |  | ||||||
|         winLoss: '0', |  | ||||||
|         commission: { |  | ||||||
|           total: '0', |  | ||||||
|           partner: '0', |  | ||||||
|           me: '0', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|     totalBetSettle: '119,400', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: { |  | ||||||
|       id: '8', |  | ||||||
|       signinId: 'kgon1', |  | ||||||
|       type: '본사', |  | ||||||
|       parentId: 0, |  | ||||||
|     }, |  | ||||||
|     bank: { |  | ||||||
|       users: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: 0, |  | ||||||
|       }, |  | ||||||
|       parthners: { |  | ||||||
|         deposit: '0', |  | ||||||
|         withdraw: '0', |  | ||||||
|         netProfit: '0', |  | ||||||
|       }, |  | ||||||
|       totalNetProfit: '0', |  | ||||||
|       passiveMoney: '0', |  | ||||||
|       passiveComp: '0', |  | ||||||
|       casino: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingTie: '33,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       slot: { |  | ||||||
|         betting: '382,000', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '351,000', |  | ||||||
|         bettingWin: '357,050', |  | ||||||
|         winLoss: '26,950', |  | ||||||
|         commission: { |  | ||||||
|           total: '7,020', |  | ||||||
|           partner: '5,265', |  | ||||||
|           me: '1,755', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|       powerball: { |  | ||||||
|         betting: '0', |  | ||||||
|         bettingCancel: '0', |  | ||||||
|         bettingValid: '0', |  | ||||||
|         bettingWin: '0', |  | ||||||
|         winLoss: '0', |  | ||||||
|         commission: { |  | ||||||
|           total: '0', |  | ||||||
|           partner: '0', |  | ||||||
|           me: '0', |  | ||||||
|         }, |  | ||||||
|         betWinSettle: '19,930', |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|     totalBetSettle: '119,400', |  | ||||||
|   }, |   }, | ||||||
| ]; | ]; | ||||||
|  | |||||||
| @ -89,18 +89,18 @@ | |||||||
|       </button> |       </button> | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
|   <div> |  | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |  | ||||||
|       입금처리 |  | ||||||
|     </button> |  | ||||||
|   </div> |  | ||||||
|   <div> |  | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |  | ||||||
|       대기처리 |  | ||||||
|     </button> |  | ||||||
|   </div> |  | ||||||
|   <!-- Main --> |   <!-- Main --> | ||||||
|   <div class="flex flex-auto overflow-hidden"> |   <div class="flex flex-auto overflow-hidden"> | ||||||
|  |     <div> | ||||||
|  |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|  |         입금처리 | ||||||
|  |       </button> | ||||||
|  |     </div> | ||||||
|  |     <div> | ||||||
|  |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|  |         대기처리 | ||||||
|  |       </button> | ||||||
|  |     </div> | ||||||
|     <!-- Products list --> |     <!-- Products list --> | ||||||
|     <div |     <div | ||||||
|       class="flex flex-col flex-auto sm:mb-18 overflow-hidden sm:overflow-y-auto" |       class="flex flex-col flex-auto sm:mb-18 overflow-hidden sm:overflow-y-auto" | ||||||
| @ -258,15 +258,15 @@ | |||||||
|         </div> |         </div> | ||||||
|       </ng-template> |       </ng-template> | ||||||
|     </div> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         입금처리 | ||||||
|       입금처리 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         대기처리 | ||||||
|       대기처리 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </div> | </div> | ||||||
|  | |||||||
| @ -89,23 +89,23 @@ | |||||||
|       </button> |       </button> | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
|   <div> |  | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |  | ||||||
|       환전처리 |  | ||||||
|     </button> |  | ||||||
|   </div> |  | ||||||
|   <div> |  | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |  | ||||||
|       대기처리 |  | ||||||
|     </button> |  | ||||||
|   </div> |  | ||||||
|   <div> |  | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'warn'"> |  | ||||||
|       환전취소 |  | ||||||
|     </button> |  | ||||||
|   </div> |  | ||||||
|   <!-- Main --> |   <!-- Main --> | ||||||
|   <div class="flex flex-auto overflow-hidden"> |   <div class="flex flex-auto overflow-hidden"> | ||||||
|  |     <div> | ||||||
|  |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|  |         환전처리 | ||||||
|  |       </button> | ||||||
|  |     </div> | ||||||
|  |     <div> | ||||||
|  |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|  |         대기처리 | ||||||
|  |       </button> | ||||||
|  |     </div> | ||||||
|  |     <div> | ||||||
|  |       <button mat-flat-button class="bet-mat-small-8" [color]="'warn'"> | ||||||
|  |         환전취소 | ||||||
|  |       </button> | ||||||
|  |     </div> | ||||||
|     <!-- Products list --> |     <!-- Products list --> | ||||||
|     <div |     <div | ||||||
|       class="flex flex-col flex-auto sm:mb-18 overflow-hidden sm:overflow-y-auto" |       class="flex flex-col flex-auto sm:mb-18 overflow-hidden sm:overflow-y-auto" | ||||||
| @ -241,20 +241,20 @@ | |||||||
|         </div> |         </div> | ||||||
|       </ng-template> |       </ng-template> | ||||||
|     </div> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         환전처리 | ||||||
|       환전처리 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         대기처리 | ||||||
|       대기처리 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'warn'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'warn'"> |         환전취소 | ||||||
|       환전취소 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </div> | </div> | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| import { ListComponent } from './list.component'; | import { ListComponent } from './list.component'; | ||||||
|  | import { ViewComponent } from './view.component'; | ||||||
| import { ReditComponent } from './redit.component'; | import { ReditComponent } from './redit.component'; | ||||||
| 
 | 
 | ||||||
| export const COMPONENTS = [ListComponent, ReditComponent]; | export const COMPONENTS = [ListComponent, ViewComponent, ReditComponent]; | ||||||
|  | |||||||
| @ -28,7 +28,12 @@ | |||||||
|               <!-- Title --> |               <!-- Title --> | ||||||
|               <ng-container matColumnDef="title"> |               <ng-container matColumnDef="title"> | ||||||
|                 <th mat-header-cell *matHeaderCellDef>제목</th> |                 <th mat-header-cell *matHeaderCellDef>제목</th> | ||||||
|                 <td mat-cell *matCellDef="let info"> |                 <td | ||||||
|  |                   mat-cell | ||||||
|  |                   *matCellDef="let info" | ||||||
|  |                   style="cursor: pointer" | ||||||
|  |                   (click)="__viewPopupDetail(info.id)" | ||||||
|  |                 > | ||||||
|                   <span class="font-medium text-right"> |                   <span class="font-medium text-right"> | ||||||
|                     {{ info.title }} |                     {{ info.title }} | ||||||
|                   </span> |                   </span> | ||||||
| @ -98,7 +103,12 @@ | |||||||
|                 <th mat-header-cell *matHeaderCellDef>비고</th> |                 <th mat-header-cell *matHeaderCellDef>비고</th> | ||||||
|                 <td mat-cell *matCellDef="let info"> |                 <td mat-cell *matCellDef="let info"> | ||||||
|                   <div class="flex items-center mt-2 py-3 space-x-4"> |                   <div class="flex items-center mt-2 py-3 space-x-4"> | ||||||
|                     <button class="flex-auto" type="button" mat-stroked-button> |                     <button | ||||||
|  |                       class="flex-auto" | ||||||
|  |                       type="button" | ||||||
|  |                       mat-stroked-button | ||||||
|  |                       (click)="__modifyPopup(info.id)" | ||||||
|  |                     > | ||||||
|                       수정 |                       수정 | ||||||
|                     </button> |                     </button> | ||||||
|                     <button class="flex-auto" type="button" mat-stroked-button> |                     <button class="flex-auto" type="button" mat-stroked-button> | ||||||
| @ -117,7 +127,9 @@ | |||||||
|                   colspan="9" |                   colspan="9" | ||||||
|                 > |                 > | ||||||
|                   <div lass="flex items-center mt-2 py-3 space-x-4"> |                   <div lass="flex items-center mt-2 py-3 space-x-4"> | ||||||
|                     <button mat-stroked-button>팝업창 만들기</button> |                     <button mat-stroked-button (click)="__createPopup()"> | ||||||
|  |                       팝업창 만들기 | ||||||
|  |                     </button> | ||||||
|                   </div> |                   </div> | ||||||
|                 </td> |                 </td> | ||||||
|               </ng-container> |               </ng-container> | ||||||
|  | |||||||
| @ -179,14 +179,24 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|   // @ Public methods
 |   // @ Public methods
 | ||||||
|   // -----------------------------------------------------------------------------------------------------
 |   // -----------------------------------------------------------------------------------------------------
 | ||||||
| 
 | 
 | ||||||
|   viewUserDetail(id: string): void { |  | ||||||
|     let url: string = 'member/user/' + id; |  | ||||||
|     this.router.navigateByUrl(url); |  | ||||||
|   } |  | ||||||
|   // -----------------------------------------------------------------------------------------------------
 |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|   // @ Private methods
 |   // @ Private methods
 | ||||||
|   // -----------------------------------------------------------------------------------------------------
 |   // -----------------------------------------------------------------------------------------------------
 | ||||||
| 
 | 
 | ||||||
|  |   __viewPopupDetail(id: string): void { | ||||||
|  |     let url: string = 'board/popup/view/' + id; | ||||||
|  |     this.router.navigateByUrl(url); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   __createPopup(): void { | ||||||
|  |     let url: string = 'board/popup/redit/'; | ||||||
|  |     this.router.navigateByUrl(url); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   __modifyPopup(id: string): void { | ||||||
|  |     let url: string = 'board/popup/redit/' + id; | ||||||
|  |     this.router.navigateByUrl(url); | ||||||
|  |   } | ||||||
|   /** |   /** | ||||||
|    * Create product |    * Create product | ||||||
|    */ |    */ | ||||||
|  | |||||||
| @ -1,260 +1,127 @@ | |||||||
| <div class="flex flex-col flex-auto min-w-0"> | <div class="flex flex-col flex-auto min-w-0"> | ||||||
|   <!-- View mode --> |  | ||||||
|   <ng-container *ngIf="!editMode"> |  | ||||||
|     <!-- Header --> |  | ||||||
|     <div |  | ||||||
|       class="relative w-full h-40 sm:h-16 mt-10 x-8 sm:px-12 bg-accent-100 dark:bg-accent-700" |  | ||||||
|     > |  | ||||||
|       <!-- Background --> |  | ||||||
| 
 |  | ||||||
|       <!-- Close button --> |  | ||||||
|       <div |  | ||||||
|         class="flex items-center justify-end w-full max-w-3xl mx-auto pt-6" |  | ||||||
|       ></div> |  | ||||||
|     </div> |  | ||||||
|     <!-- Contact --> |  | ||||||
|     <div |  | ||||||
|       class="relative flex flex-col flex-auto items-center p-6 pt-0 sm:p-12 sm:pt-0" |  | ||||||
|     > |  | ||||||
|       <div class="w-full max-w-3xl"> |  | ||||||
|         <!-- Avatar and actions --> |  | ||||||
|         <div class="flex flex-auto items-end -mt-16"> |  | ||||||
|           <!-- Actions --> |  | ||||||
|           <div class="flex items-center ml-auto mb-1"> |  | ||||||
|             <button mat-stroked-button (click)="toggleEditMode(true)"> |  | ||||||
|               <mat-icon |  | ||||||
|                 class="icon-size-5" |  | ||||||
|                 [svgIcon]="'heroicons_solid:pencil-alt'" |  | ||||||
|               ></mat-icon> |  | ||||||
|               <span class="ml-2">수정</span> |  | ||||||
|             </button> |  | ||||||
|             <button mat-stroked-button (click)="toggleEditMode(true)"> |  | ||||||
|               <mat-icon |  | ||||||
|                 class="icon-size-5" |  | ||||||
|                 [svgIcon]="'heroicons_solid:pencil-alt'" |  | ||||||
|               ></mat-icon> |  | ||||||
|               <span class="ml-2">삭제</span> |  | ||||||
|             </button> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|         <div class="flex flex-col mt-4 pt-6 border-t space-y-8"> |  | ||||||
|           <!-- Title --> |  | ||||||
|           <ng-container *ngIf="contact.title"> |  | ||||||
|             <div class="flex sm:items-center"> |  | ||||||
|               <!-- <mat-icon [svgIcon]="'heroicons_outline:briefcase'"></mat-icon> --> |  | ||||||
|               <div class="ml-6 leading-6">사이트선택</div> |  | ||||||
|               <div class="ml-6 leading-6">{{ contact.title }}</div> |  | ||||||
|             </div> |  | ||||||
|           </ng-container> |  | ||||||
| 
 |  | ||||||
|           <!-- 팝업사이즈 --> |  | ||||||
|           <ng-container *ngIf="contact.emails.length"> |  | ||||||
|             <div class="flex"> |  | ||||||
|               <!-- <mat-icon [svgIcon]="'heroicons_outline:mail'"></mat-icon> --> |  | ||||||
|               <div class="ml-6 leading-6">팝업사이즈</div> |  | ||||||
|               <div class="min-w-0 ml-6 space-y-1"> |  | ||||||
|                 <ng-container |  | ||||||
|                   *ngFor="let email of contact.emails; trackBy: __trackByFn" |  | ||||||
|                 > |  | ||||||
|                   <div class="flex items-center leading-6"> |  | ||||||
|                     <div class="text-md truncate text-secondary"> |  | ||||||
|                       <span class="mx-2">•</span> |  | ||||||
|                       <span class="font-medium">{{ email.label }}</span> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="text-md truncate text-secondary"> |  | ||||||
|                       <span class="mx-2">•</span> |  | ||||||
|                       <span class="font-medium">180</span> |  | ||||||
|                     </div> |  | ||||||
|                   </div> |  | ||||||
|                 </ng-container> |  | ||||||
|               </div> |  | ||||||
|             </div> |  | ||||||
|           </ng-container> |  | ||||||
| 
 |  | ||||||
|           <!-- 팝업좌표 --> |  | ||||||
|           <ng-container *ngIf="contact.phoneNumbers.length"> |  | ||||||
|             <div class="flex"> |  | ||||||
|               <!-- <mat-icon [svgIcon]="'heroicons_outline:phone'"></mat-icon> --> |  | ||||||
|               <div class="ml-6 leading-6">팝업좌표</div> |  | ||||||
|               <div class="min-w-0 ml-6 space-y-1"> |  | ||||||
|                 <ng-container |  | ||||||
|                   *ngFor=" |  | ||||||
|                     let phoneNumber of contact.phoneNumbers; |  | ||||||
|                     trackBy: __trackByFn |  | ||||||
|                   " |  | ||||||
|                 > |  | ||||||
|                   <div class="flex items-center leading-6"> |  | ||||||
|                     <div class="text-md truncate text-secondary"> |  | ||||||
|                       <span class="mx-2">•</span> |  | ||||||
|                       <span class="font-medium">{{ |  | ||||||
|                         phoneNumber.phoneNumber |  | ||||||
|                       }}</span> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="text-md truncate text-secondary"> |  | ||||||
|                       <span class="mx-2">•</span> |  | ||||||
|                       <span class="font-medium">180</span> |  | ||||||
|                     </div> |  | ||||||
|                   </div> |  | ||||||
|                 </ng-container> |  | ||||||
|               </div> |  | ||||||
|             </div> |  | ||||||
|           </ng-container> |  | ||||||
| 
 |  | ||||||
|           <!-- Address --> |  | ||||||
|           <ng-container *ngIf="contact.address"> |  | ||||||
|             <div class="flex sm:items-center"> |  | ||||||
|               <div class="ml-6 leading-6">팝업제목</div> |  | ||||||
|               <div class="ml-6 leading-6">{{ contact.address }}</div> |  | ||||||
|             </div> |  | ||||||
|           </ng-container> |  | ||||||
| 
 |  | ||||||
|           <!-- Notes --> |  | ||||||
|           <ng-container *ngIf="contact.notes"> |  | ||||||
|             <div class="ml-6 leading-6">팝업내용</div> |  | ||||||
|             <div class="flex"> |  | ||||||
|               <!-- <mat-icon [svgIcon]="'heroicons_outline:menu-alt-2'"></mat-icon> --> |  | ||||||
| 
 |  | ||||||
|               <div |  | ||||||
|                 class="max-w-none ml-6 prose prose-sm" |  | ||||||
|                 [innerHTML]="contact.notes" |  | ||||||
|               ></div> |  | ||||||
|             </div> |  | ||||||
|           </ng-container> |  | ||||||
|           <!-- Birthday --> |  | ||||||
|           <ng-container *ngIf="contact.birthday"> |  | ||||||
|             <div class="flex sm:items-center"> |  | ||||||
|               <!-- <mat-icon [svgIcon]="'heroicons_outline:cake'"></mat-icon> --> |  | ||||||
|               <div class="ml-6 leading-6">사용여부</div> |  | ||||||
|               <div class="ml-6 leading-6"> |  | ||||||
|                 {{ contact.birthday | date: "longDate" }} |  | ||||||
|               </div> |  | ||||||
|             </div> |  | ||||||
|           </ng-container> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|   </ng-container> |  | ||||||
| 
 |  | ||||||
|   <!-- Edit mode --> |   <!-- Edit mode --> | ||||||
|   <ng-container *ngIf="editMode"> |   <!-- Contact form --> | ||||||
|     <!-- Contact form --> |   <div class="relative flex flex-col flex-auto items-center px-6 sm:px-12"> | ||||||
|     <div class="relative flex flex-col flex-auto items-center px-6 sm:px-12"> |     <div class="w-full max-w-3xl"> | ||||||
|       <div class="w-full max-w-3xl"> |       <form [formGroup]="popupForm"> | ||||||
|         <form [formGroup]="contactForm"> |         <!-- Name --> | ||||||
|           <!-- Name --> |         <div class="mt-8"> | ||||||
|           <div class="mt-8"> |           <mat-form-field class="fuse-mat-no-subscript w-full"> | ||||||
|             <mat-form-field class="fuse-mat-no-subscript w-full"> |             <mat-label>사이트</mat-label> | ||||||
|               <mat-label>사이트</mat-label> |             <mat-select> | ||||||
|               <mat-select> |               <ng-container *ngFor="let category of categories"> | ||||||
|                 <ng-container *ngFor="let category of categories"> |                 <mat-option [value]="category.id"> | ||||||
|                   <mat-option [value]="category.id"> |                   {{ category.name }} | ||||||
|                     {{ category.name }} |                 </mat-option> | ||||||
|                   </mat-option> |               </ng-container> | ||||||
|                 </ng-container> |             </mat-select> | ||||||
|               </mat-select> |           </mat-form-field> | ||||||
|             </mat-form-field> |         </div> | ||||||
|           </div> |  | ||||||
| 
 | 
 | ||||||
|           <!-- 팝업 사이즈 --> |         <!-- 팝업 사이즈 --> | ||||||
|           <div class="flex"> |         <div class="flex"> | ||||||
|             <mat-form-field class="w-1/2 pr-2 mt-4"> |           <mat-form-field class="w-1/2 pr-2 mt-4"> | ||||||
|               <mat-label>팝업 가로 사이즈</mat-label> |             <mat-label>팝업 가로 사이즈</mat-label> | ||||||
|               <input type="number" matInput /> |             <input type="number" matInput [formControlName]="'widthSize'" /> | ||||||
|             </mat-form-field> |           </mat-form-field> | ||||||
|             <mat-form-field class="w-1/2 pl-2 mt-4"> |           <mat-form-field class="w-1/2 pl-2 mt-4"> | ||||||
|               <mat-label>팝업 세로 사이즈</mat-label> |             <mat-label>팝업 세로 사이즈</mat-label> | ||||||
|               <input type="number" matInput /> |             <input type="number" matInput [formControlName]="'heightSize'" /> | ||||||
|             </mat-form-field> |           </mat-form-field> | ||||||
|           </div> |         </div> | ||||||
|           <!-- 팝업 좌표 --> |         <!-- 팝업 좌표 --> | ||||||
|           <div class="flex"> |         <div class="flex"> | ||||||
|             <mat-form-field class="w-1/2 pr-2 mt-4"> |           <mat-form-field class="w-1/2 pr-2 mt-4"> | ||||||
|               <mat-label>팝업 좌표 TOP</mat-label> |             <mat-label>팝업 좌표 TOP</mat-label> | ||||||
|               <input type="number" matInput /> |             <input type="number" matInput [formControlName]="'topMargin'" /> | ||||||
|             </mat-form-field> |           </mat-form-field> | ||||||
|             <mat-form-field class="w-1/2 pl-2 mt-4"> |           <mat-form-field class="w-1/2 pl-2 mt-4"> | ||||||
|               <mat-label>팝업 좌표 LEFT</mat-label> |             <mat-label>팝업 좌표 LEFT</mat-label> | ||||||
|               <input type="number" matInput /> |             <input type="number" matInput [formControlName]="'leftMargin'" /> | ||||||
|             </mat-form-field> |           </mat-form-field> | ||||||
|           </div> |         </div> | ||||||
| 
 | 
 | ||||||
|           <!-- 팝업제목 --> |         <!-- 팝업제목 --> | ||||||
|           <div class="mt-8"> |         <div class="mt-8"> | ||||||
|             <mat-form-field class="fuse-mat-no-subscript w-full"> |           <mat-form-field class="fuse-mat-no-subscript w-full"> | ||||||
|               <mat-label>팝업제목</mat-label> |             <mat-label>팝업제목</mat-label> | ||||||
|               <mat-icon |             <mat-icon | ||||||
|                 matPrefix |               matPrefix | ||||||
|                 class="hidden sm:flex icon-size-5" |               class="hidden sm:flex icon-size-5" | ||||||
|                 [svgIcon]="'heroicons_solid:briefcase'" |               [svgIcon]="'heroicons_solid:briefcase'" | ||||||
|               ></mat-icon> |             ></mat-icon> | ||||||
|               <input matInput [placeholder]="'Job title'" /> |             <input | ||||||
|             </mat-form-field> |               matInput | ||||||
|           </div> |               [placeholder]="'Job title'" | ||||||
|  |               [formControlName]="'title'" | ||||||
|  |             /> | ||||||
|  |           </mat-form-field> | ||||||
|  |         </div> | ||||||
| 
 | 
 | ||||||
|           <!-- Notes --> |         <!-- Notes --> | ||||||
|           <div class="mt-8"> |         <div class="mt-8"> | ||||||
|             <mat-form-field |           <mat-form-field | ||||||
|               class="fuse-mat-textarea fuse-mat-no-subscript w-full" |             class="fuse-mat-textarea fuse-mat-no-subscript w-full" | ||||||
|             > |  | ||||||
|               <mat-label>팝업내용</mat-label> |  | ||||||
|               <mat-icon |  | ||||||
|                 matPrefix |  | ||||||
|                 class="hidden sm:flex icon-size-5" |  | ||||||
|                 [svgIcon]="'heroicons_solid:menu-alt-2'" |  | ||||||
|               ></mat-icon> |  | ||||||
|               <textarea |  | ||||||
|                 matInput |  | ||||||
|                 [placeholder]="'Notes'" |  | ||||||
|                 [rows]="5" |  | ||||||
|                 [spellcheck]="false" |  | ||||||
|                 matTextareaAutosize |  | ||||||
|               ></textarea> |  | ||||||
|             </mat-form-field> |  | ||||||
|           </div> |  | ||||||
| 
 |  | ||||||
|           <div class="mt-8"> |  | ||||||
|             <mat-form-field class="fuse-mat-no-subscript w-full"> |  | ||||||
|               <mat-label>표시여부</mat-label> |  | ||||||
|               <mat-select> |  | ||||||
|                 <ng-container *ngFor="let category of categories"> |  | ||||||
|                   <mat-option [value]="category.id"> |  | ||||||
|                     {{ category.name }} |  | ||||||
|                   </mat-option> |  | ||||||
|                 </ng-container> |  | ||||||
|               </mat-select> |  | ||||||
|             </mat-form-field> |  | ||||||
|           </div> |  | ||||||
| 
 |  | ||||||
|           <!-- Actions --> |  | ||||||
|           <div |  | ||||||
|             class="flex items-center mt-10 -mx-6 sm:-mx-12 py-4 pr-4 pl-1 sm:pr-12 sm:pl-7 border-t bg-gray-50 dark:bg-transparent" |  | ||||||
|           > |           > | ||||||
|             <!-- Delete --> |             <mat-label>팝업내용</mat-label> | ||||||
|             <button mat-button [color]="'warn'" [matTooltip]="'Delete'"> |             <mat-icon | ||||||
|               Delete |               matPrefix | ||||||
|             </button> |               class="hidden sm:flex icon-size-5" | ||||||
|             <!-- Cancel --> |               [svgIcon]="'heroicons_solid:menu-alt-2'" | ||||||
|             <button |             ></mat-icon> | ||||||
|               class="ml-auto" |             <textarea | ||||||
|               mat-button |               matInput | ||||||
|               [matTooltip]="'Cancel'" |               [placeholder]="'Notes'" | ||||||
|               (click)="toggleEditMode(false)" |               [rows]="5" | ||||||
|             > |               [spellcheck]="false" | ||||||
|               Cancel |               matTextareaAutosize | ||||||
|             </button> |               [formControlName]="'content'" | ||||||
|             <!-- Save --> |             ></textarea> | ||||||
|             <button |           </mat-form-field> | ||||||
|               class="ml-2" |         </div> | ||||||
|               mat-flat-button | 
 | ||||||
|               [color]="'primary'" |         <div class="mt-8"> | ||||||
|               [disabled]="contactForm.invalid" |           <mat-form-field class="fuse-mat-no-subscript w-full"> | ||||||
|               [matTooltip]="'Save'" |             <mat-label>표시여부</mat-label> | ||||||
|             > |             <mat-select> | ||||||
|               Save |               <ng-container *ngFor="let category of categories"> | ||||||
|             </button> |                 <mat-option [value]="category.id"> | ||||||
|           </div> |                   {{ category.name }} | ||||||
|         </form> |                 </mat-option> | ||||||
|       </div> |               </ng-container> | ||||||
|  |             </mat-select> | ||||||
|  |           </mat-form-field> | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <!-- Actions --> | ||||||
|  |         <div | ||||||
|  |           class="flex items-center mt-10 -mx-6 sm:-mx-12 py-4 pr-4 pl-1 sm:pr-12 sm:pl-7 border-t bg-gray-50 dark:bg-transparent" | ||||||
|  |         > | ||||||
|  |           <!-- Delete --> | ||||||
|  |           <button mat-button [color]="'warn'" [matTooltip]="'Delete'"> | ||||||
|  |             Delete | ||||||
|  |           </button> | ||||||
|  |           <!-- Cancel --> | ||||||
|  |           <button | ||||||
|  |             class="ml-auto" | ||||||
|  |             mat-button | ||||||
|  |             [matTooltip]="'Cancel'" | ||||||
|  |             (click)="toggleEditMode(false)" | ||||||
|  |           > | ||||||
|  |             Cancel | ||||||
|  |           </button> | ||||||
|  |           <!-- Save --> | ||||||
|  |           <button | ||||||
|  |             class="ml-2" | ||||||
|  |             mat-flat-button | ||||||
|  |             [color]="'primary'" | ||||||
|  |             [disabled]="popupForm.invalid" | ||||||
|  |             [matTooltip]="'Save'" | ||||||
|  |           > | ||||||
|  |             Save | ||||||
|  |           </button> | ||||||
|  |         </div> | ||||||
|  |       </form> | ||||||
|     </div> |     </div> | ||||||
|   </ng-container> |   </div> | ||||||
| </div> | </div> | ||||||
|  | |||||||
| @ -8,6 +8,8 @@ import { | |||||||
|   ViewChild, |   ViewChild, | ||||||
|   ViewEncapsulation, |   ViewEncapsulation, | ||||||
| } from '@angular/core'; | } from '@angular/core'; | ||||||
|  | 
 | ||||||
|  | import { ActivatedRoute, Router } from '@angular/router'; | ||||||
| import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; | import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; | ||||||
| import { MatPaginator } from '@angular/material/paginator'; | import { MatPaginator } from '@angular/material/paginator'; | ||||||
| import { MatSort } from '@angular/material/sort'; | import { MatSort } from '@angular/material/sort'; | ||||||
| @ -15,7 +17,8 @@ import { Subject, takeUntil } from 'rxjs'; | |||||||
| import { fuseAnimations } from '@fuse/animations'; | import { fuseAnimations } from '@fuse/animations'; | ||||||
| import { FuseConfirmationService } from '@fuse/services/confirmation'; | import { FuseConfirmationService } from '@fuse/services/confirmation'; | ||||||
| 
 | 
 | ||||||
| import { ActivatedRoute, Router } from '@angular/router'; | import { Popup } from '../models/popup'; | ||||||
|  | import { PopupService } from '../services/popup.service'; | ||||||
| 
 | 
 | ||||||
| @Component({ | @Component({ | ||||||
|   selector: 'popup-redit', |   selector: 'popup-redit', | ||||||
| @ -50,10 +53,11 @@ export class ReditComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
| 
 | 
 | ||||||
|   isLoading = false; |   isLoading = false; | ||||||
|   searchInputControl = new FormControl(); |   searchInputControl = new FormControl(); | ||||||
|   contactForm!: FormGroup; |   popupForm!: FormGroup; | ||||||
|   editMode: boolean = false; |   editMode: boolean = false; | ||||||
|   contact = contacts[0]; |   contact = contacts[0]; | ||||||
|   categories = categories; |   categories = categories; | ||||||
|  |   popup: Popup | undefined; | ||||||
| 
 | 
 | ||||||
|   private _unsubscribeAll: Subject<any> = new Subject<any>(); |   private _unsubscribeAll: Subject<any> = new Subject<any>(); | ||||||
| 
 | 
 | ||||||
| @ -65,7 +69,8 @@ export class ReditComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|     private _fuseConfirmationService: FuseConfirmationService, |     private _fuseConfirmationService: FuseConfirmationService, | ||||||
|     private _formBuilder: FormBuilder, |     private _formBuilder: FormBuilder, | ||||||
|     private _route: ActivatedRoute, |     private _route: ActivatedRoute, | ||||||
|     private _router: Router |     private _router: Router, | ||||||
|  |     private _popupService: PopupService | ||||||
|   ) {} |   ) {} | ||||||
| 
 | 
 | ||||||
|   // -----------------------------------------------------------------------------------------------------
 |   // -----------------------------------------------------------------------------------------------------
 | ||||||
| @ -77,18 +82,32 @@ export class ReditComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|    */ |    */ | ||||||
|   ngOnInit(): void { |   ngOnInit(): void { | ||||||
|     // Create the contact form
 |     // Create the contact form
 | ||||||
|     this.contactForm = this._formBuilder.group({ |     this.popupForm = this._formBuilder.group({ | ||||||
|       id: [''], |       id: [''], | ||||||
|       name: [''], |       index: [''], | ||||||
|       emails: this._formBuilder.array([]), |  | ||||||
|       phoneNumbers: this._formBuilder.array([]), |  | ||||||
|       title: [''], |       title: [''], | ||||||
|       company: [''], |       widthSize: [''], | ||||||
|       birthday: [null], |       heightSize: [''], | ||||||
|       address: [null], |       topMargin: [''], | ||||||
|       notes: [null], |       leftMargin: [''], | ||||||
|       tags: [[]], |       site: [''], | ||||||
|  |       useOrNot: [''], | ||||||
|  |       content: [''], | ||||||
|     }); |     }); | ||||||
|  | 
 | ||||||
|  |     this._popupService.popup$ | ||||||
|  |       .pipe(takeUntil(this._unsubscribeAll)) | ||||||
|  |       .subscribe((popup: Popup | undefined) => { | ||||||
|  |         if (!popup) { | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         this.popup = popup; | ||||||
|  |         this.popupForm.patchValue(popup); | ||||||
|  | 
 | ||||||
|  |         // Mark for check
 | ||||||
|  |         this._changeDetectorRef.markForCheck(); | ||||||
|  |       }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
|  | |||||||
							
								
								
									
										143
									
								
								src/app/modules/admin/board/popup/components/view.component.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								src/app/modules/admin/board/popup/components/view.component.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,143 @@ | |||||||
|  | <div class="flex flex-col flex-auto min-w-0"> | ||||||
|  |   <!-- View mode --> | ||||||
|  | 
 | ||||||
|  |   <!-- Header --> | ||||||
|  |   <div | ||||||
|  |     class="relative w-full h-40 sm:h-16 mt-10 x-8 sm:px-12 bg-accent-100 dark:bg-accent-700" | ||||||
|  |   > | ||||||
|  |     <!-- Background --> | ||||||
|  | 
 | ||||||
|  |     <!-- Close button --> | ||||||
|  |     <div | ||||||
|  |       class="flex items-center justify-end w-full max-w-3xl mx-auto pt-6" | ||||||
|  |     ></div> | ||||||
|  |   </div> | ||||||
|  |   <!-- Contact --> | ||||||
|  |   <div | ||||||
|  |     class="relative flex flex-col flex-auto items-center p-6 pt-0 sm:p-12 sm:pt-0" | ||||||
|  |   > | ||||||
|  |     <div class="w-full max-w-3xl"> | ||||||
|  |       <!-- Avatar and actions --> | ||||||
|  |       <div class="flex flex-auto items-end -mt-16"> | ||||||
|  |         <!-- Actions --> | ||||||
|  |         <div class="flex items-center ml-auto mb-1"> | ||||||
|  |           <button mat-stroked-button (click)="__modifyPopup()"> | ||||||
|  |             <mat-icon | ||||||
|  |               class="icon-size-5" | ||||||
|  |               [svgIcon]="'heroicons_solid:pencil-alt'" | ||||||
|  |             ></mat-icon> | ||||||
|  |             <span class="ml-2">수정</span> | ||||||
|  |           </button> | ||||||
|  |           <button mat-stroked-button> | ||||||
|  |             <mat-icon | ||||||
|  |               class="icon-size-5" | ||||||
|  |               [svgIcon]="'heroicons_solid:pencil-alt'" | ||||||
|  |             ></mat-icon> | ||||||
|  |             <span class="ml-2">삭제</span> | ||||||
|  |           </button> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <div class="flex flex-col mt-4 pt-6 border-t space-y-8"> | ||||||
|  |         <!-- Title --> | ||||||
|  |         <ng-container *ngIf="popup?.site"> | ||||||
|  |           <div class="flex sm:items-center"> | ||||||
|  |             <!-- <mat-icon [svgIcon]="'heroicons_outline:briefcase'"></mat-icon> --> | ||||||
|  |             <div class="ml-6 leading-6">사이트선택</div> | ||||||
|  |             <div class="ml-6 leading-6">{{ popup?.site }}</div> | ||||||
|  |           </div> | ||||||
|  |         </ng-container> | ||||||
|  | 
 | ||||||
|  |         <!-- 팝업사이즈 --> | ||||||
|  |         <ng-container *ngIf="popup?.widthSize"> | ||||||
|  |           <div class="flex"> | ||||||
|  |             <!-- <mat-icon [svgIcon]="'heroicons_outline:mail'"></mat-icon> --> | ||||||
|  |             <div class="ml-6 leading-6">팝업사이즈</div> | ||||||
|  |             <div class="min-w-0 ml-6 space-y-1"> | ||||||
|  |               <div class="flex items-center leading-6"> | ||||||
|  |                 <div class="text-md truncate text-secondary"> | ||||||
|  |                   <span class="mx-2">•</span> | ||||||
|  |                   <span class="font-medium">가로</span> | ||||||
|  |                 </div> | ||||||
|  |                 <div class="text-md truncate text-secondary"> | ||||||
|  |                   <span class="mx-2">•</span> | ||||||
|  |                   <span class="font-medium">{{ popup?.widthSize }}</span> | ||||||
|  |                 </div> | ||||||
|  |               </div> | ||||||
|  |               <div class="flex items-center leading-6"> | ||||||
|  |                 <div class="text-md truncate text-secondary"> | ||||||
|  |                   <span class="mx-2">•</span> | ||||||
|  |                   <span class="font-medium">세로</span> | ||||||
|  |                 </div> | ||||||
|  |                 <div class="text-md truncate text-secondary"> | ||||||
|  |                   <span class="mx-2">•</span> | ||||||
|  |                   <span class="font-medium">{{ popup?.heightSize }}</span> | ||||||
|  |                 </div> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </ng-container> | ||||||
|  | 
 | ||||||
|  |         <!-- 팝업좌표 --> | ||||||
|  |         <ng-container *ngIf="popup?.topMargin"> | ||||||
|  |           <div class="flex"> | ||||||
|  |             <!-- <mat-icon [svgIcon]="'heroicons_outline:mail'"></mat-icon> --> | ||||||
|  |             <div class="ml-6 leading-6">팝업좌표</div> | ||||||
|  |             <div class="min-w-0 ml-6 space-y-1"> | ||||||
|  |               <div class="flex items-center leading-6"> | ||||||
|  |                 <div class="text-md truncate text-secondary"> | ||||||
|  |                   <span class="mx-2">•</span> | ||||||
|  |                   <span class="font-medium">TOP</span> | ||||||
|  |                 </div> | ||||||
|  |                 <div class="text-md truncate text-secondary"> | ||||||
|  |                   <span class="mx-2">•</span> | ||||||
|  |                   <span class="font-medium">{{ popup?.topMargin }}</span> | ||||||
|  |                 </div> | ||||||
|  |               </div> | ||||||
|  |               <div class="flex items-center leading-6"> | ||||||
|  |                 <div class="text-md truncate text-secondary"> | ||||||
|  |                   <span class="mx-2">•</span> | ||||||
|  |                   <span class="font-medium">LEFT</span> | ||||||
|  |                 </div> | ||||||
|  |                 <div class="text-md truncate text-secondary"> | ||||||
|  |                   <span class="mx-2">•</span> | ||||||
|  |                   <span class="font-medium">{{ popup?.leftMargin }}</span> | ||||||
|  |                 </div> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </ng-container> | ||||||
|  | 
 | ||||||
|  |         <!-- Address --> | ||||||
|  |         <ng-container *ngIf="popup?.title"> | ||||||
|  |           <div class="flex sm:items-center"> | ||||||
|  |             <div class="ml-6 leading-6">팝업제목</div> | ||||||
|  |             <div class="ml-6 leading-6">{{ popup?.title }}</div> | ||||||
|  |           </div> | ||||||
|  |         </ng-container> | ||||||
|  | 
 | ||||||
|  |         <!-- Notes --> | ||||||
|  |         <ng-container *ngIf="popup?.content"> | ||||||
|  |           <div class="ml-6 leading-6">팝업내용</div> | ||||||
|  |           <div class="flex"> | ||||||
|  |             <!-- <mat-icon [svgIcon]="'heroicons_outline:menu-alt-2'"></mat-icon> --> | ||||||
|  | 
 | ||||||
|  |             <div | ||||||
|  |               class="max-w-none ml-6 prose prose-sm" | ||||||
|  |               [innerHTML]="popup?.content" | ||||||
|  |             ></div> | ||||||
|  |           </div> | ||||||
|  |         </ng-container> | ||||||
|  |         <!-- UseOrNot --> | ||||||
|  |         <ng-container *ngIf="popup?.useOrNot"> | ||||||
|  |           <div class="flex sm:items-center"> | ||||||
|  |             <!-- <mat-icon [svgIcon]="'heroicons_outline:cake'"></mat-icon> --> | ||||||
|  |             <div class="ml-6 leading-6">사용여부</div> | ||||||
|  |             <div class="ml-6 leading-6"> | ||||||
|  |               {{ popup?.useOrNot }} | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </ng-container> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </div> | ||||||
							
								
								
									
										116
									
								
								src/app/modules/admin/board/popup/components/view.component.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								src/app/modules/admin/board/popup/components/view.component.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,116 @@ | |||||||
|  | import { | ||||||
|  |   AfterViewInit, | ||||||
|  |   ChangeDetectionStrategy, | ||||||
|  |   ChangeDetectorRef, | ||||||
|  |   Component, | ||||||
|  |   OnDestroy, | ||||||
|  |   OnInit, | ||||||
|  |   ViewEncapsulation, | ||||||
|  | } from '@angular/core'; | ||||||
|  | import { FormBuilder } from '@angular/forms'; | ||||||
|  | import { Subject, takeUntil } from 'rxjs'; | ||||||
|  | import { fuseAnimations } from '@fuse/animations'; | ||||||
|  | import { FuseConfirmationService } from '@fuse/services/confirmation'; | ||||||
|  | 
 | ||||||
|  | import { Popup } from '../models/popup'; | ||||||
|  | import { PopupService } from '../services/popup.service'; | ||||||
|  | import { Router } from '@angular/router'; | ||||||
|  | 
 | ||||||
|  | @Component({ | ||||||
|  |   selector: 'popup-view', | ||||||
|  |   templateUrl: './view.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 ViewComponent implements OnInit, AfterViewInit, OnDestroy { | ||||||
|  |   isLoading = false; | ||||||
|  | 
 | ||||||
|  |   private _unsubscribeAll: Subject<any> = new Subject<any>(); | ||||||
|  | 
 | ||||||
|  |   popup: Popup | undefined; | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Constructor | ||||||
|  |    */ | ||||||
|  |   constructor( | ||||||
|  |     private _changeDetectorRef: ChangeDetectorRef, | ||||||
|  |     private _fuseConfirmationService: FuseConfirmationService, | ||||||
|  |     private _formBuilder: FormBuilder, | ||||||
|  |     private _popupService: PopupService, | ||||||
|  |     private router: Router | ||||||
|  |   ) {} | ||||||
|  | 
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |   // @ Lifecycle hooks
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * On init | ||||||
|  |    */ | ||||||
|  |   ngOnInit(): void { | ||||||
|  |     this._popupService.popup$ | ||||||
|  |       .pipe(takeUntil(this._unsubscribeAll)) | ||||||
|  |       .subscribe((popup: Popup | undefined) => { | ||||||
|  |         if (!popup) { | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         this.popup = popup; | ||||||
|  |         // Mark for check
 | ||||||
|  |         this._changeDetectorRef.markForCheck(); | ||||||
|  |       }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * After view init | ||||||
|  |    */ | ||||||
|  |   ngAfterViewInit(): void {} | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * On destroy | ||||||
|  |    */ | ||||||
|  |   ngOnDestroy(): void { | ||||||
|  |     // Unsubscribe from all subscriptions
 | ||||||
|  |     this._unsubscribeAll.next(null); | ||||||
|  |     this._unsubscribeAll.complete(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |   // @ Public methods
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |   // @ Private methods
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Toggle edit mode | ||||||
|  |    * | ||||||
|  |    * @param editMode | ||||||
|  |    */ | ||||||
|  |   __modifyPopup(): void { | ||||||
|  |     let url: string = 'board/popup/redit/' + this.popup?.id; | ||||||
|  |     this.router.navigateByUrl(url); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -2,6 +2,7 @@ export interface Popup { | |||||||
|   id?: string; |   id?: string; | ||||||
|   index?: number; |   index?: number; | ||||||
|   title?: string; |   title?: string; | ||||||
|  |   content?: string; | ||||||
|   widthSize?: number; |   widthSize?: number; | ||||||
|   heightSize?: number; |   heightSize?: number; | ||||||
|   topMargin?: number; |   topMargin?: number; | ||||||
|  | |||||||
| @ -2,9 +2,9 @@ import { Route } from '@angular/router'; | |||||||
| 
 | 
 | ||||||
| import { ListComponent } from './components/list.component'; | import { ListComponent } from './components/list.component'; | ||||||
| 
 | 
 | ||||||
| import { PopupsResolver } from './resolvers/popup.resolver'; | import { PopupsResolver, PopupResolver } from './resolvers/popup.resolver'; | ||||||
| import { UserResolver } from '../../member/user/resolvers/user.resolver'; |  | ||||||
| import { ReditComponent } from './components/redit.component'; | import { ReditComponent } from './components/redit.component'; | ||||||
|  | import { ViewComponent } from './components/view.component'; | ||||||
| 
 | 
 | ||||||
| export const popupRoutes: Route[] = [ | export const popupRoutes: Route[] = [ | ||||||
|   { |   { | ||||||
| @ -24,6 +24,21 @@ export const popupRoutes: Route[] = [ | |||||||
|     path: 'redit', |     path: 'redit', | ||||||
|     component: ReditComponent, |     component: ReditComponent, | ||||||
|   }, |   }, | ||||||
|  |   { | ||||||
|  |     path: 'redit/:id', | ||||||
|  |     component: ReditComponent, | ||||||
|  |     resolve: { | ||||||
|  |       popup: PopupResolver, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   { | ||||||
|  |     path: 'view/:id', | ||||||
|  |     component: ViewComponent, | ||||||
|  |     resolve: { | ||||||
|  |       popup: PopupResolver, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
| 
 | 
 | ||||||
|   // {
 |   // {
 | ||||||
|   //   path: 'redit',
 |   //   path: 'redit',
 | ||||||
|  | |||||||
| @ -276,15 +276,15 @@ | |||||||
|         </div> |         </div> | ||||||
|       </ng-template> |       </ng-template> | ||||||
|     </div> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         탈퇴 | ||||||
|       탈퇴 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         휴면 | ||||||
|       휴면 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </div> | </div> | ||||||
|  | |||||||
| @ -266,7 +266,6 @@ | |||||||
|                     <hr style="margin: 7px 0px" /> |                     <hr style="margin: 7px 0px" /> | ||||||
|                     IP{{ user.ip }} |                     IP{{ user.ip }} | ||||||
|                   </div> |                   </div> | ||||||
|                   <!-- management --> |  | ||||||
|                 </div> |                 </div> | ||||||
|               </ng-container> |               </ng-container> | ||||||
|             </ng-container> |             </ng-container> | ||||||
| @ -292,35 +291,35 @@ | |||||||
|         </div> |         </div> | ||||||
|       </ng-template> |       </ng-template> | ||||||
|     </div> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         정상 | ||||||
|       정상 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         대기 | ||||||
|       대기 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         탈퇴 | ||||||
|       탈퇴 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         휴면 | ||||||
|       휴면 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         블랙 | ||||||
|       블랙 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |     <div> | ||||||
|   <div> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|     <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> |         정지 | ||||||
|       정지 |       </button> | ||||||
|     </button> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </div> | </div> | ||||||
|  | |||||||
| @ -1,348 +1,230 @@ | |||||||
| <div class="flex flex-col flex-auto min-w-0"> | <div | ||||||
|   <div class="flex-auto border-t -mt-px pt-4 sm:pt-6"> |   class="sm:absolute sm:inset-0 flex flex-col flex-auto min-w-0 sm:overflow-hidden bg-card dark:bg-transparent" | ||||||
|     <div class="w-full max-w-screen-xl mx-auto"> | > | ||||||
|       <div class="grid grid-cols-1 sm:grid-cols-6 gap-6 w-full min-w-0"> |   <!-- Header --> | ||||||
|         <!-- Budget distribution --> |   <div | ||||||
|         <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" | ||||||
|           class="sm:col-span-6 flex flex-col flex-auto p-6 bg-card shadow rounded-2xl overflow-hidden" |   > | ||||||
|         > |     <!-- Loader --> | ||||||
|           <div class="text-lg font-medium tracking-tight leading-6 truncate"> |     <div class="absolute inset-x-0 bottom-0" *ngIf="isLoading"> | ||||||
|             파트너일일현황 |       <mat-progress-bar [mode]="'indeterminate'"></mat-progress-bar> | ||||||
|           </div> |     </div> | ||||||
|           <div> |     <!-- Title --> | ||||||
|             <!-- Section --> |     <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"> | ||||||
|  |       <!-- Search --> | ||||||
|  |       <button mat-icon-button (click)="__onClickSearch()"> | ||||||
|  |         <mat-icon [svgIcon]="'heroicons_outline:search'"></mat-icon> | ||||||
|  |       </button> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  |   <!-- Search --> | ||||||
|  |   <div | ||||||
|  |     *ngIf="__isSearchOpened" | ||||||
|  |     class="relative flex flex-col sm:flex-row flex-0 sm:items-center sm:justify-between py-4 px-6 md:px-8 border-b" | ||||||
|  |   > | ||||||
|  |     <!-- Actions --> | ||||||
|  |     <div fxLayout="row wrap" class="items-center mt-6 sm:mt-0 sm:ml-0"> | ||||||
|  |       <!-- SelectBox --> | ||||||
|  |       <mat-form-field fxFlex class="bet-mat-form-field-wrapper-mb-0 mr-2"> | ||||||
|  |         <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> | ||||||
|  |       <!-- Search --> | ||||||
|  |       <!-- Add user button --> | ||||||
|  |       <button | ||||||
|  |         mat-flat-button | ||||||
|  |         [color]="'primary'" | ||||||
|  |         fxFlex | ||||||
|  |         (click)="__createProduct()" | ||||||
|  |       > | ||||||
|  |         <mat-icon [svgIcon]="'heroicons_outline:search'"></mat-icon> | ||||||
|  |         <span class="ml-2 mr-1">Search</span> | ||||||
|  |       </button> | ||||||
|  |     </div> | ||||||
|  |     <!-- Card inception --> | ||||||
|  |     <div class="col-span-2 sm:col-span-1"> | ||||||
|  |       <mat-form-field | ||||||
|  |         class="fuse-mat-no-subscript w-full" | ||||||
|  |         [floatLabel]="'always'" | ||||||
|  |       > | ||||||
|  |         <input | ||||||
|  |           matInput | ||||||
|  |           [matDatepicker]="picker1" | ||||||
|  |           [placeholder]="'Choose a date'" | ||||||
|  |         /> | ||||||
|  |         <mat-datepicker-toggle | ||||||
|  |           matSuffix | ||||||
|  |           [for]="picker1" | ||||||
|  |         ></mat-datepicker-toggle> | ||||||
|  |         <mat-datepicker #picker1></mat-datepicker> | ||||||
|  |       </mat-form-field> | ||||||
|  |     </div> | ||||||
|  |     <!-- Card expiration --> | ||||||
|  |     <div class="col-span-2 sm:col-span-1"> | ||||||
|  |       <mat-form-field | ||||||
|  |         class="fuse-mat-no-subscript w-full" | ||||||
|  |         [floatLabel]="'always'" | ||||||
|  |       > | ||||||
|  |         <input | ||||||
|  |           matInput | ||||||
|  |           [matDatepicker]="picker2" | ||||||
|  |           [placeholder]="'Choose a date'" | ||||||
|  |         /> | ||||||
|  |         <mat-datepicker-toggle | ||||||
|  |           matSuffix | ||||||
|  |           [for]="picker2" | ||||||
|  |         ></mat-datepicker-toggle> | ||||||
|  |         <mat-datepicker #picker2></mat-datepicker> | ||||||
|  |       </mat-form-field> | ||||||
|  |     </div> | ||||||
| 
 | 
 | ||||||
|             <div class="grid grid-cols-8 gap-6 w-full mt-8"> |     <div> | ||||||
|               <!-- Card number --> |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|               <div class="col-span-2 sm:col-span-1"> |         어제 | ||||||
|                 <mat-form-field class="fuse-mat-no-subscript w-full"> |       </button> | ||||||
|                   <mat-select |     </div> | ||||||
|                     [value]="'전체'" |     <div> | ||||||
|                     disableOptionCentering |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|                     #roleSelect="matSelect" |         오늘 | ||||||
|                   > |       </button> | ||||||
|                     <mat-select-trigger class="text-md"> |     </div> | ||||||
|                       <span class="ml-1 font-medium">{{ |     <div> | ||||||
|                         roleSelect.value | titlecase |       <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|                       }}</span> |         7일 | ||||||
|                     </mat-select-trigger> |       </button> | ||||||
|                     <ng-container *ngFor="let role of roles"> |     </div> | ||||||
|                       <mat-option |   </div> | ||||||
|                         class="h-auto py-4 leading-none" | 
 | ||||||
|                         [value]="role.value" |   <!-- Main --> | ||||||
|                       > |   <div class="flex flex-auto overflow-hidden"> | ||||||
|                         <div class="font-medium">{{ role.label }}</div> |     <!-- Products list --> | ||||||
|                       </mat-option> |     <div | ||||||
|                     </ng-container> |       class="flex flex-col flex-auto sm:mb-18 overflow-hidden sm:overflow-y-auto" | ||||||
|                   </mat-select> |     > | ||||||
|                 </mat-form-field> |       <ng-container *ngIf="dailyPartners$ | async as dailyPartners"> | ||||||
|  |         <ng-container *ngIf="dailyPartners.length > 0; else noDailyPartner"> | ||||||
|  |           <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" | ||||||
|  |             > | ||||||
|  |               <div>요율</div> | ||||||
|  |               <div>상부</div> | ||||||
|  |               <div> | ||||||
|  |                 아이디 | ||||||
|  |                 <hr style="margin: 7px 0px" /> | ||||||
|  |                 닉네임 | ||||||
|  |                 <hr style="margin: 7px 0px" /> | ||||||
|  |                 연락처 | ||||||
|               </div> |               </div> | ||||||
|               <!-- Card inception --> |               <div> | ||||||
|               <div class="col-span-2 sm:col-span-1"> |                 등급 | ||||||
|                 <mat-form-field |                 <hr style="margin: 7px 0px" /> | ||||||
|                   class="fuse-mat-no-subscript w-full" |                 레벨 | ||||||
|                   [floatLabel]="'always'" |  | ||||||
|                 > |  | ||||||
|                   <input |  | ||||||
|                     matInput |  | ||||||
|                     [matDatepicker]="picker1" |  | ||||||
|                     [placeholder]="'Choose a date'" |  | ||||||
|                   /> |  | ||||||
|                   <mat-datepicker-toggle |  | ||||||
|                     matSuffix |  | ||||||
|                     [for]="picker1" |  | ||||||
|                   ></mat-datepicker-toggle> |  | ||||||
|                   <mat-datepicker #picker1></mat-datepicker> |  | ||||||
|                 </mat-form-field> |  | ||||||
|               </div> |               </div> | ||||||
|               <!-- Card expiration --> |               <div class="hidden sm:block">예금주</div> | ||||||
|               <div class="col-span-2 sm:col-span-1"> |               <div class="hidden md:block">보유금</div> | ||||||
|                 <mat-form-field |               <div class="hidden md:block"> | ||||||
|                   class="fuse-mat-no-subscript w-full" |                 게임중머니 | ||||||
|                   [floatLabel]="'always'" |                 <hr style="margin: 7px 0px" /> | ||||||
|                 > |                 금일콤프 | ||||||
|                   <input |  | ||||||
|                     matInput |  | ||||||
|                     [matDatepicker]="picker2" |  | ||||||
|                     [placeholder]="'Choose a date'" |  | ||||||
|                   /> |  | ||||||
|                   <mat-datepicker-toggle |  | ||||||
|                     matSuffix |  | ||||||
|                     [for]="picker2" |  | ||||||
|                   ></mat-datepicker-toggle> |  | ||||||
|                   <mat-datepicker #picker2></mat-datepicker> |  | ||||||
|                 </mat-form-field> |  | ||||||
|               </div> |  | ||||||
|               <!-- Actions --> |  | ||||||
|               <div class="col-span-4 sm:col-span-4"> |  | ||||||
|                 <div class="flex items-center mt-6 sm:mt-0 sm:ml-2 space-x-3"> |  | ||||||
|                   <button |  | ||||||
|                     class="fuse-mat-button-rounded bg-accent-700" |  | ||||||
|                     mat-flat-button |  | ||||||
|                     [color]="'primary'" |  | ||||||
|                   > |  | ||||||
|                     <mat-icon |  | ||||||
|                       class="icon-size-5" |  | ||||||
|                       [svgIcon]="'heroicons_solid:mail'" |  | ||||||
|                     ></mat-icon> |  | ||||||
|                     <span class="ml-2">검색하기</span> |  | ||||||
|                   </button> |  | ||||||
|                   <button |  | ||||||
|                     class="fuse-mat-button-rounded" |  | ||||||
|                     mat-flat-button |  | ||||||
|                     [color]="'primary'" |  | ||||||
|                   > |  | ||||||
|                     <mat-icon |  | ||||||
|                       class="icon-size-5" |  | ||||||
|                       [svgIcon]="'heroicons_solid:mail'" |  | ||||||
|                     ></mat-icon> |  | ||||||
|                     <span class="ml-2">어제</span> |  | ||||||
|                   </button> |  | ||||||
|                   <button |  | ||||||
|                     class="fuse-mat-button-rounded" |  | ||||||
|                     mat-flat-button |  | ||||||
|                     [color]="'primary'" |  | ||||||
|                   > |  | ||||||
|                     <mat-icon |  | ||||||
|                       class="icon-size-5" |  | ||||||
|                       [svgIcon]="'heroicons_solid:cog'" |  | ||||||
|                     ></mat-icon> |  | ||||||
|                     <span class="ml-2">오늘</span> |  | ||||||
|                   </button> |  | ||||||
|                   <button |  | ||||||
|                     class="fuse-mat-button-rounded" |  | ||||||
|                     mat-flat-button |  | ||||||
|                     [color]="'primary'" |  | ||||||
|                   > |  | ||||||
|                     <mat-icon |  | ||||||
|                       class="icon-size-5" |  | ||||||
|                       [svgIcon]="'heroicons_solid:cog'" |  | ||||||
|                     ></mat-icon> |  | ||||||
|                     <span class="ml-2">7일</span> |  | ||||||
|                   </button> |  | ||||||
|                 </div> |  | ||||||
|               </div> |               </div> | ||||||
|  |               <div class="hidden md:block">총입출</div> | ||||||
|  |               <div class="hidden lg:block">카지노->캐쉬</div> | ||||||
|             </div> |             </div> | ||||||
|           </div> |             <!-- Rows --> | ||||||
|           <div class="flex flex-col flex-auto mt-2 overflow-x-auto"> |             <ng-container *ngIf="dailyPartners$ | async as dailyPartners"> | ||||||
|             <form [formGroup]="dailyParthnerForm" autocomplete="off"> |               <ng-container | ||||||
|               <table |                 *ngFor="let dailyPartner of dailyPartners; trackBy: __trackByFn" | ||||||
|                 class="min-w-240 overflow-y-visible" |  | ||||||
|                 mat-table |  | ||||||
|                 [dataSource]="dailyPartnerDataSource" |  | ||||||
|               > |               > | ||||||
|                 <!-- 정보 --> |                 <div | ||||||
|                 <ng-container matColumnDef="partnerInfo"> |                   class="inventory-grid grid items-center gap-4 py-3 px-6 md:px-8 border-b" | ||||||
|                   <th mat-header-cell *matHeaderCellDef>정보</th> |                 > | ||||||
|                   <td mat-cell *matCellDef="let info"> |                   <div>요율</div> | ||||||
|                     <span class="font-medium text-right"> |                   <div> | ||||||
|                       {{ info?.user.signinId }} |                     {{ dailyPartner.highRank }} | ||||||
|                     </span> |                   </div> | ||||||
|                     <span class="font-medium text-right"> |                   <div> | ||||||
|                       {{ info?.user.type }} |                     {{ dailyPartner.signinId }} | ||||||
|                     </span> |                     <hr style="margin: 7px 0px" /> | ||||||
|                     <span class="font-medium text-right"> 매출보기 </span> |                     {{ dailyPartner.nickname }} | ||||||
|                   </td> |                     <hr style="margin: 7px 0px" /> | ||||||
|                 </ng-container> |                     {{ dailyPartner.phoneNumber }} | ||||||
|                 <!-- 정보 --> |                   </div> | ||||||
|                 <ng-container matColumnDef="expansionBtn"> |                   <div> | ||||||
|                   <th mat-header-cell *matHeaderCellDef></th> |                     {{ dailyPartner.rank }} | ||||||
|                   <td mat-cell *matCellDef="let info">+</td> |                     <hr style="margin: 7px 0px" /> | ||||||
|                 </ng-container> |                     LV{{ dailyPartner.level }} | ||||||
| 
 |                   </div> | ||||||
|                 <!-- 정보 --> |                   <div class="hidden sm:block"> | ||||||
|                 <!-- <ng-container matColumnDef="betInfo"> |                     {{ dailyPartner.accountHolder }} | ||||||
|                   <th |                   </div> | ||||||
|                     mat-header-cell |                   <div class="hidden md:block"> | ||||||
|                     *matHeaderCellDef |                     캐쉬{{ dailyPartner.ownCash }} | ||||||
|                     [attr.rowspan]="2" |                     <hr style="margin: 7px 0px" /> | ||||||
|                     [attr.colspan]="2" |                     콤프{{ dailyPartner.ownComp }}P | ||||||
|                   ></th> |                     <hr style="margin: 7px 0px" /> | ||||||
|                 </ng-container> --> |                     쿠폰{{ dailyPartner.ownCoupon }} | ||||||
| 
 |                   </div> | ||||||
|                 <!-- 회원입출 --> |                   <div class="hidden md:block"> | ||||||
|                 <ng-container matColumnDef="depositDetails"> |                     {{ dailyPartner.gameMoney }} | ||||||
|                   <th mat-header-cell *matHeaderCellDef>회원입출</th> |                     <hr style="margin: 7px 0px" /> | ||||||
|                   <td mat-cell *matCellDef="let info"> |                     {{ dailyPartner.todayComp }}P | ||||||
|                     <span>{{ info?.bank.users.deposit }}</span> |                   </div> | ||||||
|                     <span>{{ info?.bank.users.withdraw }}</span> |                   <div class="hidden md:block"> | ||||||
|                     <span>{{ info?.bank.users.netProfit }}</span> |                     입금{{ dailyPartner.totalDeposit }} | ||||||
|                   </td> |                     <hr style="margin: 7px 0px" /> | ||||||
|                 </ng-container> |                     출금{{ dailyPartner.totalWithdraw }} | ||||||
| 
 |                     <hr style="margin: 7px 0px" /> | ||||||
|                 <!-- 파트너입출 --> |                     차익{{ dailyPartner.balance }} | ||||||
|                 <ng-container matColumnDef="depositPartnerDetails"> |                   </div> | ||||||
|                   <th mat-header-cell *matHeaderCellDef>파트너입출</th> |                   <div class="hidden lg:block"> | ||||||
|                   <td mat-cell *matCellDef="let info"> |                     <button | ||||||
|                     <span>{{ info?.bank.parthners.deposit }}</span> |                       mat-flat-button | ||||||
|                     <span>{{ info?.bank.parthners.withdraw }}</span> |                       class="bet-mat-small-8" | ||||||
|                     <span>{{ info?.bank.parthners.netProfit }}</span> |                       [color]="'primary'" | ||||||
|                   </td> |                     > | ||||||
|                 </ng-container> |                       게임머니확인 | ||||||
| 
 |                     </button> | ||||||
|                 <!-- 총손익 --> |                     <hr style="margin: 7px 0px" /> | ||||||
|                 <ng-container matColumnDef="totalProfit"> |                     <button | ||||||
|                   <th mat-header-cell *matHeaderCellDef>총손익</th> |                       mat-flat-button | ||||||
|                   <td mat-cell *matCellDef="let info"> |                       class="bet-mat-small-8" | ||||||
|                     {{ info?.bank.totalNetProfit }} |                       [color]="'primary'" | ||||||
|                   </td> |                     > | ||||||
|                 </ng-container> |                       게임머니회수 | ||||||
|                 <!-- 수동머니 --> |                     </button> | ||||||
|                 <ng-container matColumnDef="passiveMoney"> |                   </div> | ||||||
|                   <th mat-header-cell *matHeaderCellDef>수동머니</th> |                 </div> | ||||||
|                   <td mat-cell *matCellDef="let info"> |               </ng-container> | ||||||
|                     {{ info?.bank.passiveMoney }} |             </ng-container> | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 수동콤프 --> |  | ||||||
|                 <ng-container matColumnDef="passiveComp"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>수동콤프</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.passiveComp }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 배팅 --> |  | ||||||
|                 <ng-container matColumnDef="casinoBetDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>배팅</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.casino.betting }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 당첨 --> |  | ||||||
|                 <ng-container matColumnDef="casinoWinningDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>당첨</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.casino.bettingWin }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 윈로스(A) --> |  | ||||||
|                 <ng-container matColumnDef="casinoWinLoss"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>윈로스(A)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.casino.winLoss }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 수수료(B) --> |  | ||||||
|                 <ng-container matColumnDef="casinoCommission"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>수수료(B)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.casino.commission.total }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 벳윈정산(A-B) --> |  | ||||||
|                 <ng-container matColumnDef="casinoSettle"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>벳윈정산(A-B)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.casino.betWinSettle }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
| 
 |  | ||||||
|                 <!-- 배팅 --> |  | ||||||
|                 <ng-container matColumnDef="slotBetDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>배팅</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.slot.betting }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 당첨 --> |  | ||||||
|                 <ng-container matColumnDef="slotWinningDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>당첨</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.slot.bettingWin }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 윈로스(D) --> |  | ||||||
|                 <ng-container matColumnDef="slotWinLoss"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>윈로스(D)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.slot.winLoss }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 수수료(E) --> |  | ||||||
|                 <ng-container matColumnDef="slotCommission"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>수수료(E)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.slot.commission.total }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 벳윈정산(A-B) --> |  | ||||||
|                 <ng-container matColumnDef="slotSettle"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>벳윈정산(A-B)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.slot.betWinSettle }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
| 
 |  | ||||||
|                 <!-- 배팅 --> |  | ||||||
|                 <ng-container matColumnDef="powerballBetDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>배팅</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.powerball.betting }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 당첨 --> |  | ||||||
|                 <ng-container matColumnDef="powerballWinningDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>당첨</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.powerball.bettingWin }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 윈로스(G) --> |  | ||||||
|                 <ng-container matColumnDef="powerballWinLoss"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>윈로스(G)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.powerball.winLoss }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 수수료(G) --> |  | ||||||
|                 <ng-container matColumnDef="powerballCommission"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>수수료(H)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.powerball.commission.total }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 벳윈정산(G-H) --> |  | ||||||
|                 <ng-container matColumnDef="powerballSettle"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>벳윈정산(G-H)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.powerball.betWinSettle }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
| 
 |  | ||||||
|                 <!-- 총벳윈정산 --> |  | ||||||
|                 <ng-container matColumnDef="totalBetWinSettle"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>총벳윈정산</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.totalBetSettle }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
| 
 |  | ||||||
|                 <!-- Header row second group --> |  | ||||||
|                 <ng-container matColumnDef="header-row-info-group"> |  | ||||||
|                   <th |  | ||||||
|                     mat-header-cell |  | ||||||
|                     *matHeaderCellDef |  | ||||||
|                     [attr.colspan]="2" |  | ||||||
|                     [attr.rowspan]="2" |  | ||||||
|                   > |  | ||||||
|                     Second group |  | ||||||
|                   </th> |  | ||||||
|                 </ng-container> |  | ||||||
| 
 |  | ||||||
|                 <!-- <tr mat-header-row *matHeaderRowDef="['betInfo']"></tr> --> |  | ||||||
|                 <tr |  | ||||||
|                   mat-header-row |  | ||||||
|                   *matHeaderRowDef="dailyPartnerTableColumns" |  | ||||||
|                 ></tr> |  | ||||||
|                 <tr |  | ||||||
|                   mat-row |  | ||||||
|                   *matRowDef="let row; columns: dailyPartnerTableColumns" |  | ||||||
|                 ></tr> |  | ||||||
|               </table> |  | ||||||
|             </form> |  | ||||||
|           </div> |           </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 #noDailyPartner> | ||||||
|  |         <div | ||||||
|  |           class="p-8 sm:p-16 border-t text-4xl font-semibold tracking-tight text-center" | ||||||
|  |         > | ||||||
|  |           There are no data! | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </ng-template> | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </div> | </div> | ||||||
|  | |||||||
| @ -14,7 +14,8 @@ import { | |||||||
|   FormGroup, |   FormGroup, | ||||||
|   Validators, |   Validators, | ||||||
| } from '@angular/forms'; | } from '@angular/forms'; | ||||||
| 
 | import { MatPaginator } from '@angular/material/paginator'; | ||||||
|  | import { MatSort } from '@angular/material/sort'; | ||||||
| import { | import { | ||||||
|   debounceTime, |   debounceTime, | ||||||
|   map, |   map, | ||||||
| @ -24,9 +25,6 @@ import { | |||||||
|   switchMap, |   switchMap, | ||||||
|   takeUntil, |   takeUntil, | ||||||
| } from 'rxjs'; | } from 'rxjs'; | ||||||
| 
 |  | ||||||
| import { MatTableDataSource } from '@angular/material/table'; |  | ||||||
| 
 |  | ||||||
| import { fuseAnimations } from '@fuse/animations'; | import { fuseAnimations } from '@fuse/animations'; | ||||||
| import { FuseConfirmationService } from '@fuse/services/confirmation'; | import { FuseConfirmationService } from '@fuse/services/confirmation'; | ||||||
| 
 | 
 | ||||||
| @ -64,46 +62,20 @@ import { Router } from '@angular/router'; | |||||||
|   animations: fuseAnimations, |   animations: fuseAnimations, | ||||||
| }) | }) | ||||||
| export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | ||||||
|  |   @ViewChild(MatPaginator) private _paginator!: MatPaginator; | ||||||
|  |   @ViewChild(MatSort) private _sort!: MatSort; | ||||||
|  | 
 | ||||||
|   dailyPartners$!: Observable<any | undefined>; |   dailyPartners$!: Observable<any | undefined>; | ||||||
|   users$!: Observable<User[] | undefined>; |   users$!: Observable<User[] | undefined>; | ||||||
| 
 | 
 | ||||||
|  |   __isSearchOpened = false; | ||||||
|   isLoading = false; |   isLoading = false; | ||||||
|   searchInputControl = new FormControl(); |   searchInputControl = new FormControl(); | ||||||
|   selectedDailyPartner?: DailyPartner; |   selectedDailyPartner?: DailyPartner; | ||||||
|  |   pagination?: DailyPartnerPagination; | ||||||
| 
 | 
 | ||||||
|   dailyParthnerForm!: FormGroup; |  | ||||||
| 
 |  | ||||||
|   dailyPartnerDataSource: MatTableDataSource<any> = new MatTableDataSource(); |  | ||||||
|   dailyPartnerTableColumns: string[] = [ |  | ||||||
|     'partnerInfo', |  | ||||||
|     'expansionBtn', |  | ||||||
|     'depositDetails', |  | ||||||
|     'depositPartnerDetails', |  | ||||||
|     'totalProfit', |  | ||||||
|     'passiveMoney', |  | ||||||
|     'passiveComp', |  | ||||||
|     'casinoBetDetails', |  | ||||||
|     'casinoWinningDetails', |  | ||||||
|     'casinoWinLoss', |  | ||||||
|     'casinoCommission', |  | ||||||
|     'casinoSettle', |  | ||||||
|     'slotBetDetails', |  | ||||||
|     'slotWinningDetails', |  | ||||||
|     'slotWinLoss', |  | ||||||
|     'slotCommission', |  | ||||||
|     'slotSettle', |  | ||||||
|     'powerballBetDetails', |  | ||||||
|     'powerballWinningDetails', |  | ||||||
|     'powerballWinLoss', |  | ||||||
|     'powerballCommission', |  | ||||||
|     'powerballSettle', |  | ||||||
|     'totalBetWinSettle', |  | ||||||
|   ]; |  | ||||||
|   private _unsubscribeAll: Subject<any> = new Subject<any>(); |   private _unsubscribeAll: Subject<any> = new Subject<any>(); | ||||||
| 
 | 
 | ||||||
|   roles: any[]; |  | ||||||
|   roles2: any[]; |  | ||||||
| 
 |  | ||||||
|   /** |   /** | ||||||
|    * Constructor |    * Constructor | ||||||
|    */ |    */ | ||||||
| @ -113,37 +85,7 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|     private _formBuilder: FormBuilder, |     private _formBuilder: FormBuilder, | ||||||
|     private _dailyPartnerService: DailyPartnerService, |     private _dailyPartnerService: DailyPartnerService, | ||||||
|     private router: Router |     private router: Router | ||||||
|   ) { |   ) {} | ||||||
|     this.roles = [ |  | ||||||
|       { |  | ||||||
|         label: '전체', |  | ||||||
|         value: '전체', |  | ||||||
|       }, |  | ||||||
|       { |  | ||||||
|         label: '파워볼', |  | ||||||
|         value: '파워볼', |  | ||||||
|       }, |  | ||||||
|       { |  | ||||||
|         label: '카지노', |  | ||||||
|         value: '카지노', |  | ||||||
|       }, |  | ||||||
| 
 |  | ||||||
|       { |  | ||||||
|         label: '슬롯', |  | ||||||
|         value: '슬롯', |  | ||||||
|       }, |  | ||||||
|     ]; |  | ||||||
|     this.roles2 = [ |  | ||||||
|       { |  | ||||||
|         label: '회원아이디', |  | ||||||
|         value: '전체', |  | ||||||
|       }, |  | ||||||
|       { |  | ||||||
|         label: '닉네임', |  | ||||||
|         value: '파워볼', |  | ||||||
|       }, |  | ||||||
|     ]; |  | ||||||
|   } |  | ||||||
| 
 | 
 | ||||||
|   // -----------------------------------------------------------------------------------------------------
 |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|   // @ Lifecycle hooks
 |   // @ Lifecycle hooks
 | ||||||
| @ -153,27 +95,63 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|    * On init |    * On init | ||||||
|    */ |    */ | ||||||
|   ngOnInit(): void { |   ngOnInit(): void { | ||||||
|     this.dailyParthnerForm = this._formBuilder.group({ |  | ||||||
|       bankName: [''], |  | ||||||
|       accountNumber: [''], |  | ||||||
|       accountHolder: [''], |  | ||||||
|     }); |  | ||||||
|     // Get the pagination
 |     // Get the pagination
 | ||||||
|     this._dailyPartnerService |     this._dailyPartnerService.pagination$ | ||||||
|       .getDailyPartners() |  | ||||||
|       .pipe(takeUntil(this._unsubscribeAll)) |       .pipe(takeUntil(this._unsubscribeAll)) | ||||||
|       .subscribe((dailyPartners: any) => { |       .subscribe((pagination: DailyPartnerPagination | undefined) => { | ||||||
|  |         // Update the pagination
 | ||||||
|  |         this.pagination = pagination; | ||||||
|  | 
 | ||||||
|         // Mark for check
 |         // Mark for check
 | ||||||
|         this.dailyPartnerDataSource = dailyPartners.dailyPartners; |  | ||||||
|         console.log(dailyPartners); |  | ||||||
|         this._changeDetectorRef.markForCheck(); |         this._changeDetectorRef.markForCheck(); | ||||||
|       }); |       }); | ||||||
|  | 
 | ||||||
|  |     // Get the products
 | ||||||
|  |     this.dailyPartners$ = this._dailyPartnerService.dailyPartners$; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
|    * After view init |    * After view init | ||||||
|    */ |    */ | ||||||
|   ngAfterViewInit(): void {} |   ngAfterViewInit(): void { | ||||||
|  |     if (this._sort && this._paginator) { | ||||||
|  |       // Set the initial sort
 | ||||||
|  |       this._sort.sort({ | ||||||
|  |         id: 'lastDayHoldingMoney', | ||||||
|  |         start: 'asc', | ||||||
|  |         disableClear: true, | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       // Mark for check
 | ||||||
|  |       this._changeDetectorRef.markForCheck(); | ||||||
|  | 
 | ||||||
|  |       // If the daily 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._dailyPartnerService.getDailyPartners( | ||||||
|  |               this._paginator.pageIndex, | ||||||
|  |               this._paginator.pageSize, | ||||||
|  |               this._sort.active, | ||||||
|  |               this._sort.direction | ||||||
|  |             ); | ||||||
|  |           }), | ||||||
|  |           map(() => { | ||||||
|  |             this.isLoading = false; | ||||||
|  |           }) | ||||||
|  |         ) | ||||||
|  |         .subscribe(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
|    * On destroy |    * On destroy | ||||||
| @ -208,6 +186,14 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|    */ |    */ | ||||||
|   __toggleDetails(productId: string): void {} |   __toggleDetails(productId: string): void {} | ||||||
| 
 | 
 | ||||||
|  |   /** | ||||||
|  |    * toggle the search | ||||||
|  |    * Used in 'bar' | ||||||
|  |    */ | ||||||
|  |   __onClickSearch(): void { | ||||||
|  |     this.__isSearchOpened = !this.__isSearchOpened; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   /** |   /** | ||||||
|    * Track by function for ngFor loops |    * Track by function for ngFor loops | ||||||
|    * |    * | ||||||
| @ -217,7 +203,4 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|   __trackByFn(index: number, item: any): any { |   __trackByFn(index: number, item: any): any { | ||||||
|     return item.id || index; |     return item.id || index; | ||||||
|   } |   } | ||||||
|   __testData(info: any): any { |  | ||||||
|     console.log(info); |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,29 +1,38 @@ | |||||||
| export interface DailyPartner { | export interface DailyPartner { | ||||||
|   id?: string; |   id: string; | ||||||
|   totalPartnerCount?: number; |   signinId?: string; | ||||||
|   totalHoldingMoney?: number; |   rank?: string; | ||||||
|   totalComp?: number; |  | ||||||
|   total?: number; |  | ||||||
|   branchCount?: number; |  | ||||||
|   divisionCount?: number; |  | ||||||
|   officeCount?: number; |  | ||||||
|   storeCount?: number; |  | ||||||
|   memberCount?: number; |  | ||||||
|   nickname?: string; |   nickname?: string; | ||||||
|   accountHolder?: string; |   memberCharge?: number; //  회원충전
 | ||||||
|   phoneNumber?: string; |   memberExchange?: number; //  회원환전
 | ||||||
|   calculateType?: string; |   memberProfitLoss?: number; //  회원손익
 | ||||||
|   ownCash?: number; |   partnerCharge?: number; //  파트너충전
 | ||||||
|   ownComp?: number; |   partnerExchange?: number; //  파트너환전
 | ||||||
|   ownCoupon?: number; |   partnerProfitLoss?: number; //  파트너손익
 | ||||||
|   gameMoney?: number; |   totalProfitLoss?: number; //  전체손익
 | ||||||
|   todayComp?: number; |   passiveMoney?: number; | ||||||
|   totalDeposit?: number; |   passiveComp?: number; | ||||||
|   totalWithdraw?: number; |   casinoBetting?: number; //  카지노배팅
 | ||||||
|   balance?: number; |   casinoTie?: number; //  카지노타이
 | ||||||
|   registDate?: string; |   casinoCancel?: number; //  카지노취소
 | ||||||
|   finalSigninDate?: string; |   casinoAvailable?: number; //  카지노유효
 | ||||||
|   ip?: string; |   casinoWinning?: number; //  카지노당첨
 | ||||||
|   state?: string; |   casinoWinLoss?: number; //  카지노윈로스(A)
 | ||||||
|   note?: string; |   casinoCommission?: number; //  카지노수수료(B)
 | ||||||
|  |   casinoBetWinCalculate?: number; //  카지노벳윈정산 (A-B)
 | ||||||
|  |   slotBetting?: number; //  슬롯배팅
 | ||||||
|  |   slotCancel?: number; //  슬롯취소
 | ||||||
|  |   slotAvailable?: number; //  슬롯유효
 | ||||||
|  |   slotWinning?: number; //  슬롯당첨
 | ||||||
|  |   slotWinLoss?: number; //  슬롯윈로스(D)
 | ||||||
|  |   slotTotalCommission?: number; //  슬롯전체수수료(E)
 | ||||||
|  |   slotBottomCommission?: number; //  슬롯하부수수료(E)
 | ||||||
|  |   slotOwnCommission?: number; //  슬롯본인수수료(E)
 | ||||||
|  |   slotBetWinCalculate?: number; //  슬롯벳윈정산(D-E)
 | ||||||
|  |   powerballBetting?: number; //  파워볼배팅
 | ||||||
|  |   powerballWinning?: number; //  파워볼당첨
 | ||||||
|  |   powerballWinLoss?: number; //  파워볼윈로스(H)
 | ||||||
|  |   powerballCommission?: number; //  파워볼수수료(I)
 | ||||||
|  |   powerballBetWinCalculate?: number; //  파워볼벳윈정산(H-I)
 | ||||||
|  |   totalBetWinCalculate?: number; //  총벳윈정산
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -81,8 +81,9 @@ export class DailyPartnersResolver implements Resolve<any> { | |||||||
|     route: ActivatedRouteSnapshot, |     route: ActivatedRouteSnapshot, | ||||||
|     state: RouterStateSnapshot |     state: RouterStateSnapshot | ||||||
|   ): Observable<{ |   ): Observable<{ | ||||||
|  |     pagination: DailyPartnerPagination; | ||||||
|     dailyPartners: DailyPartner[]; |     dailyPartners: DailyPartner[]; | ||||||
|   }> { |   }> { | ||||||
|     return this._dailyPartnerService.getDailyPartners(''); |     return this._dailyPartnerService.getDailyPartners(); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -74,19 +74,32 @@ export class DailyPartnerService { | |||||||
|    * @param order |    * @param order | ||||||
|    * @param search |    * @param search | ||||||
|    */ |    */ | ||||||
|   getDailyPartners(search: string = ''): Observable<{ |   getDailyPartners( | ||||||
|     dailyPartners: any; |     page: number = 0, | ||||||
|  |     size: number = 10, | ||||||
|  |     sort: string = 'name', | ||||||
|  |     order: 'asc' | 'desc' | '' = 'asc', | ||||||
|  |     search: string = '' | ||||||
|  |   ): Observable<{ | ||||||
|  |     pagination: DailyPartnerPagination; | ||||||
|  |     dailyPartners: DailyPartner[]; | ||||||
|   }> { |   }> { | ||||||
|     return this._httpClient |     return this._httpClient | ||||||
|       .get<{ |       .get<{ | ||||||
|         dailyPartners: any; |         pagination: DailyPartnerPagination; | ||||||
|       }>('api/apps/report/daily-partner', { |         dailyPartners: DailyPartner[]; | ||||||
|  |       }>('api/apps/report/daily-partners', { | ||||||
|         params: { |         params: { | ||||||
|  |           page: '' + page, | ||||||
|  |           size: '' + size, | ||||||
|  |           sort, | ||||||
|  |           order, | ||||||
|           search, |           search, | ||||||
|         }, |         }, | ||||||
|       }) |       }) | ||||||
|       .pipe( |       .pipe( | ||||||
|         tap((response) => { |         tap((response) => { | ||||||
|  |           this.__pagination.next(response.pagination); | ||||||
|           this.__dailyPartners.next(response.dailyPartners); |           this.__dailyPartners.next(response.dailyPartners); | ||||||
|         }) |         }) | ||||||
|       ); |       ); | ||||||
|  | |||||||
| @ -7,9 +7,7 @@ | |||||||
|           class="sm:col-span-6 flex flex-col flex-auto p-6 bg-card shadow rounded-2xl overflow-hidden" |           class="sm:col-span-6 flex flex-col flex-auto p-6 bg-card shadow rounded-2xl overflow-hidden" | ||||||
|         > |         > | ||||||
|           <!-- Title --> |           <!-- Title --> | ||||||
|           <div class="text-4xl font-extrabold tracking-tight"> |           <div class="text-4xl font-extrabold tracking-tight">월현황</div> | ||||||
|             CASINO 머니파악 |  | ||||||
|           </div> |  | ||||||
|           <div class="flex flex-col flex-auto mt-2 overflow-x-auto"> |           <div class="flex flex-col flex-auto mt-2 overflow-x-auto"> | ||||||
|             <div> |             <div> | ||||||
|               <button |               <button | ||||||
|  | |||||||
| @ -13,135 +13,66 @@ | |||||||
|     <div class="text-4xl font-extrabold tracking-tight">종목별매출통계</div> |     <div class="text-4xl font-extrabold tracking-tight">종목별매출통계</div> | ||||||
|     <!-- Actions --> |     <!-- Actions --> | ||||||
|     <div class="flex shrink-0 items-center mt-6 sm:mt-0 sm:ml-4"> |     <div class="flex shrink-0 items-center mt-6 sm:mt-0 sm:ml-4"> | ||||||
|       <!-- Memo --> |  | ||||||
|       <!-- <mat-form-field> |  | ||||||
|         <ng-container *ngIf="statisticss$ | async as statisticss"> |  | ||||||
|           <ng-container |  | ||||||
|             *ngFor="let statistics of statisticss; trackBy: __trackByFn" |  | ||||||
|           > |  | ||||||
|             <div |  | ||||||
|               class="inventory-grid grid items-center gap-4 py-3 px-6 md:px-8 border-b" |  | ||||||
|             > |  | ||||||
|               <fieldset> |  | ||||||
|                 총 파트너수:{{ statistics.totalPartnerCount }} 총 보유머니:{{ |  | ||||||
|                   statistics.totalHoldingMoney |  | ||||||
|                 }} |  | ||||||
|                 총 콤프:{{ statistics.totalComp }} 총 합계:{{ |  | ||||||
|                   statistics.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 --> |       <!-- Search --> | ||||||
|       <mat-form-field |       <button mat-icon-button (click)="__onClickSearch()"> | ||||||
|         class="fuse-mat-dense fuse-mat-no-subscript fuse-mat-rounded min-w-64" |         <mat-icon [svgIcon]="'heroicons_outline:search'"></mat-icon> | ||||||
|       > |       </button> | ||||||
|         <mat-icon |     </div> | ||||||
|           class="icon-size-5" |   </div> | ||||||
|           matPrefix |   <!-- Search --> | ||||||
|           [svgIcon]="'heroicons_solid:search'" |   <div | ||||||
|         ></mat-icon> |     *ngIf="__isSearchOpened" | ||||||
|         <input |     class="relative flex flex-col sm:flex-row flex-0 sm:items-center sm:justify-between py-4 px-6 md:px-8 border-b" | ||||||
|           matInput |   > | ||||||
|           [formControl]="searchInputControl" |     <!-- Actions --> | ||||||
|           [autocomplete]="'off'" |     <div fxLayout="row wrap" class="items-center mt-6 sm:mt-0 sm:ml-0"> | ||||||
|           [placeholder]="'Search'" |       <!-- Search --> | ||||||
|         /> |  | ||||||
|       </mat-form-field> |  | ||||||
|       <!-- Add user button --> |       <!-- Add user button --> | ||||||
|       <button |       <button | ||||||
|         class="ml-4" |  | ||||||
|         mat-flat-button |         mat-flat-button | ||||||
|         [color]="'primary'" |         [color]="'primary'" | ||||||
|  |         fxFlex | ||||||
|         (click)="__createProduct()" |         (click)="__createProduct()" | ||||||
|       > |       > | ||||||
|         <!-- <mat-icon [svgIcon]="'heroicons_outline:plus'"></mat-icon> --> |         <mat-icon [svgIcon]="'heroicons_outline:search'"></mat-icon> | ||||||
|         <span class="ml-2 mr-1">검색하기</span> |         <span class="ml-2 mr-1">Search</span> | ||||||
|       </button> |       </button> | ||||||
|       <button>엑셀저장</button> |     </div> | ||||||
|       <button>카지노머니확인</button> |     <!-- Card inception --> | ||||||
|  |     <div class="col-span-2 sm:col-span-1"> | ||||||
|  |       <mat-form-field | ||||||
|  |         class="fuse-mat-no-subscript w-full" | ||||||
|  |         [floatLabel]="'always'" | ||||||
|  |       > | ||||||
|  |         <input | ||||||
|  |           matInput | ||||||
|  |           [matDatepicker]="picker1" | ||||||
|  |           [placeholder]="'Choose a date'" | ||||||
|  |         /> | ||||||
|  |         <mat-datepicker-toggle | ||||||
|  |           matSuffix | ||||||
|  |           [for]="picker1" | ||||||
|  |         ></mat-datepicker-toggle> | ||||||
|  |         <mat-datepicker #picker1></mat-datepicker> | ||||||
|  |       </mat-form-field> | ||||||
|  |     </div> | ||||||
|  |     <!-- Card expiration --> | ||||||
|  |     <div class="col-span-2 sm:col-span-1"> | ||||||
|  |       <mat-form-field | ||||||
|  |         class="fuse-mat-no-subscript w-full" | ||||||
|  |         [floatLabel]="'always'" | ||||||
|  |       > | ||||||
|  |         <input | ||||||
|  |           matInput | ||||||
|  |           [matDatepicker]="picker2" | ||||||
|  |           [placeholder]="'Choose a date'" | ||||||
|  |         /> | ||||||
|  |         <mat-datepicker-toggle | ||||||
|  |           matSuffix | ||||||
|  |           [for]="picker2" | ||||||
|  |         ></mat-datepicker-toggle> | ||||||
|  |         <mat-datepicker #picker2></mat-datepicker> | ||||||
|  |       </mat-form-field> | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
| 
 | 
 | ||||||
| @ -151,182 +82,100 @@ | |||||||
|     <div |     <div | ||||||
|       class="flex flex-col flex-auto sm:mb-18 overflow-hidden sm:overflow-y-auto" |       class="flex flex-col flex-auto sm:mb-18 overflow-hidden sm:overflow-y-auto" | ||||||
|     > |     > | ||||||
|       <ng-container *ngIf="statisticss$ | async as statisticss"> |       <ng-container *ngIf="statisticss$ | async as statistics"> | ||||||
|         <ng-container *ngIf="statisticss.length > 0; else noStatistics"> |         <ng-container *ngIf="statistics.length > 0; else noStatistics"> | ||||||
|           <div class="grid"> |           <div class="grid"> | ||||||
|             <!-- Header --> |             <!-- Header --> | ||||||
|             <div |             <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" |               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>요율</div> | ||||||
|               <div class="hidden sm:block">요율</div> |               <!-- <div>상부</div> | ||||||
|               <div class="hidden sm:block">상부트리</div> |               <div> | ||||||
|               <div class="hidden sm:block">관리</div> |                 아이디 | ||||||
|               <div class="hidden sm:block">매장수</div> |                 <hr style="margin: 7px 0px" /> | ||||||
|               <div class="hidden sm:block">회원수</div> |                 닉네임 | ||||||
|               <div class="hidden sm:block">아이디</div> |                 <hr style="margin: 7px 0px" /> | ||||||
|               <div class="hidden sm:block">닉네임</div> |                 연락처 | ||||||
|  |               </div> | ||||||
|  |               <div> | ||||||
|  |                 등급 | ||||||
|  |                 <hr style="margin: 7px 0px" /> | ||||||
|  |                 레벨 | ||||||
|  |               </div> | ||||||
|               <div class="hidden sm:block">예금주</div> |               <div class="hidden sm:block">예금주</div> | ||||||
|               <div class="hidden sm:block">연락처</div> |               <div class="hidden md:block">보유금</div> | ||||||
|               <div class="hidden sm:block">정산</div> |               <div class="hidden md:block"> | ||||||
|               <div class="hidden sm:block">보유금</div> |                 게임중머니 | ||||||
|               <div class="hidden sm:block">게임중머니</div> |                 <hr style="margin: 7px 0px" /> | ||||||
|               <div class="hidden sm:block">카지노->캐쉬</div> |                 금일콤프 | ||||||
|               <div class="hidden sm:block">금일콤프</div> |               </div> | ||||||
|               <div class="hidden sm:block">총입출</div> |               <div class="hidden md:block">총입출</div> --> | ||||||
|               <div class="hidden sm:block">로그</div> |               <div class="hidden lg:block">카지노->캐쉬</div> | ||||||
|               <div class="hidden sm:block">상태</div> |  | ||||||
|               <div class="hidden sm:block">회원수</div> |  | ||||||
|               <div class="hidden sm:block">비고</div> |  | ||||||
|             </div> |             </div> | ||||||
|             <!-- Rows --> |             <!-- Rows --> | ||||||
|             <ng-container *ngIf="statisticss$ | async as statisticss"> |             <ng-container *ngIf="statisticss$ | async as statistics"> | ||||||
|               <ng-container |               <ng-container | ||||||
|                 *ngFor="let statistics of statisticss; trackBy: __trackByFn" |                 *ngFor="let statistics of statistics; trackBy: __trackByFn" | ||||||
|               > |               > | ||||||
|                 <div |                 <div | ||||||
|                   class="inventory-grid grid items-center gap-4 py-3 px-6 md:px-8 border-b" |                   class="inventory-grid grid items-center gap-4 py-3 px-6 md:px-8 border-b" | ||||||
|                 > |                 > | ||||||
|                   <div class="hidden sm:block truncate"> |                   <div>요율</div> | ||||||
|                     <mat-checkbox></mat-checkbox> |                   <!-- <div> | ||||||
|  |                     {{ dailyPartner.highRank }} | ||||||
|                   </div> |                   </div> | ||||||
|                   <!-- rate --> |                   <div> | ||||||
|                   <div class="hidden sm:block truncate"> |                     {{ dailyPartner.signinId }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     {{ dailyPartner.nickname }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     {{ dailyPartner.phoneNumber }} | ||||||
|  |                   </div> | ||||||
|  |                   <div> | ||||||
|  |                     {{ dailyPartner.rank }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     LV{{ dailyPartner.level }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden sm:block"> | ||||||
|  |                     {{ dailyPartner.accountHolder }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden md:block"> | ||||||
|  |                     캐쉬{{ dailyPartner.ownCash }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     콤프{{ dailyPartner.ownComp }}P | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     쿠폰{{ dailyPartner.ownCoupon }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden md:block"> | ||||||
|  |                     {{ dailyPartner.gameMoney }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     {{ dailyPartner.todayComp }}P | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden md:block"> | ||||||
|  |                     입금{{ dailyPartner.totalDeposit }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     출금{{ dailyPartner.totalWithdraw }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     차익{{ dailyPartner.balance }} | ||||||
|  |                   </div> --> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|                     <button |                     <button | ||||||
|                       mat-button |                       mat-flat-button | ||||||
|                       color="primary" |                       class="bet-mat-small-8" | ||||||
|                       matTooltip="요율확인 |                       [color]="'primary'" | ||||||
|                                 카지노-바카라: 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'"> |  | ||||||
|                       {{ statistics.branchCount }} |  | ||||||
|                     </button> |  | ||||||
|                     <button mat-flat-button [color]="'primary'"> |  | ||||||
|                       {{ statistics.divisionCount }} |  | ||||||
|                     </button> |  | ||||||
|                     <button mat-flat-button [color]="'primary'"> |  | ||||||
|                       {{ statistics.officeCount }} |  | ||||||
|                     </button> |  | ||||||
|                     <button mat-flat-button [color]="'primary'"> |  | ||||||
|                       {{ statistics.storeCount }} |  | ||||||
|                     </button> |  | ||||||
|                   </div> |  | ||||||
|                   <!-- 회원수 --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     <button mat-flat-button [color]="'primary'"> |  | ||||||
|                       {{ statistics.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!)" |  | ||||||
|                       > |  | ||||||
|                         {{ statistics.id }} |  | ||||||
|                       </div> |  | ||||||
|                     </ng-container> |  | ||||||
|                   </ng-container> |  | ||||||
|                   <!-- nickname --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     {{ statistics.nickname }} |  | ||||||
|                   </div> |  | ||||||
|                   <!-- accountHolder --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     {{ statistics.accountHolder }} |  | ||||||
|                   </div> |  | ||||||
|                   <!-- 연락처 --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     {{ statistics.phoneNumber }} |  | ||||||
|                   </div> |  | ||||||
|                   <!-- 정산 --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     {{ statistics.calculateType }} |  | ||||||
|                   </div> |  | ||||||
|                   <!-- 보유금 --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     캐쉬{{ statistics.ownCash }} 콤프{{ |  | ||||||
|                       statistics.ownComp |  | ||||||
|                     }} |  | ||||||
|                     쿠폰{{ statistics.ownCoupon }} |  | ||||||
|                   </div> |  | ||||||
|                   <!-- gameMoney --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     {{ statistics.gameMoney }} |  | ||||||
|                   </div> |  | ||||||
|                   <!-- casinoCash --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     <button mat-flat-button [color]="'primary'"> |  | ||||||
|                       게임머니확인 |                       게임머니확인 | ||||||
|                     </button> |                     </button> | ||||||
|                     <button mat-flat-button [color]="'primary'"> |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     <button | ||||||
|  |                       mat-flat-button | ||||||
|  |                       class="bet-mat-small-8" | ||||||
|  |                       [color]="'primary'" | ||||||
|  |                     > | ||||||
|                       게임머니회수 |                       게임머니회수 | ||||||
|                     </button> |                     </button> | ||||||
|                   </div> |                   </div> | ||||||
|                   <!-- todayComp --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     {{ statistics.todayComp }}P |  | ||||||
|                   </div> |  | ||||||
|                   <!-- 총입출 --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     입금{{ statistics.totalDeposit }} 출금{{ |  | ||||||
|                       statistics.totalWithdraw |  | ||||||
|                     }} |  | ||||||
|                     차익{{ statistics.balance }} |  | ||||||
|                   </div> |  | ||||||
|                   <!-- log --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     가입{{ statistics.registDate }} 최종{{ |  | ||||||
|                       statistics.finalSigninDate |  | ||||||
|                     }} |  | ||||||
|                     IP{{ statistics.ip }} |  | ||||||
|                   </div> |  | ||||||
|                   <!-- state --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     {{ statistics.state }} |  | ||||||
|                   </div> |  | ||||||
|                   <!-- 회원수 --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     {{ statistics.memberCount }} |  | ||||||
|                   </div> |  | ||||||
|                   <!-- 비고 --> |  | ||||||
|                   <div class="hidden sm:block truncate"> |  | ||||||
|                     <button mat-flat-button [color]="'primary'"> |  | ||||||
|                       {{ statistics.note }} |  | ||||||
|                     </button> |  | ||||||
|                   </div> |  | ||||||
|                 </div> |                 </div> | ||||||
|               </ng-container> |               </ng-container> | ||||||
|             </ng-container> |             </ng-container> | ||||||
| @ -348,7 +197,7 @@ | |||||||
|         <div |         <div | ||||||
|           class="p-8 sm:p-16 border-t text-4xl font-semibold tracking-tight text-center" |           class="p-8 sm:p-16 border-t text-4xl font-semibold tracking-tight text-center" | ||||||
|         > |         > | ||||||
|           There are no statisticss! |           There are no data! | ||||||
|         </div> |         </div> | ||||||
|       </ng-template> |       </ng-template> | ||||||
|     </div> |     </div> | ||||||
|  | |||||||
| @ -69,6 +69,7 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|   statisticss$!: Observable<Statistics[] | undefined>; |   statisticss$!: Observable<Statistics[] | undefined>; | ||||||
|   users$!: Observable<User[] | undefined>; |   users$!: Observable<User[] | undefined>; | ||||||
| 
 | 
 | ||||||
|  |   __isSearchOpened = false; | ||||||
|   isLoading = false; |   isLoading = false; | ||||||
|   searchInputControl = new FormControl(); |   searchInputControl = new FormControl(); | ||||||
|   selectedStatistics?: Statistics; |   selectedStatistics?: Statistics; | ||||||
| @ -117,7 +118,7 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|     if (this._sort && this._paginator) { |     if (this._sort && this._paginator) { | ||||||
|       // Set the initial sort
 |       // Set the initial sort
 | ||||||
|       this._sort.sort({ |       this._sort.sort({ | ||||||
|         id: 'name', |         id: 'casinoUse', | ||||||
|         start: 'asc', |         start: 'asc', | ||||||
|         disableClear: true, |         disableClear: true, | ||||||
|       }); |       }); | ||||||
| @ -186,6 +187,14 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|    */ |    */ | ||||||
|   __toggleDetails(productId: string): void {} |   __toggleDetails(productId: string): void {} | ||||||
| 
 | 
 | ||||||
|  |   /** | ||||||
|  |    * toggle the search | ||||||
|  |    * Used in 'bar' | ||||||
|  |    */ | ||||||
|  |   __onClickSearch(): void { | ||||||
|  |     this.__isSearchOpened = !this.__isSearchOpened; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   /** |   /** | ||||||
|    * Track by function for ngFor loops |    * Track by function for ngFor loops | ||||||
|    * |    * | ||||||
|  | |||||||
| @ -1,29 +1,32 @@ | |||||||
| export interface Statistics { | export interface Statistics { | ||||||
|   id?: string; |   id: string; | ||||||
|   totalPartnerCount?: number; |   casinoUse?: number; | ||||||
|   totalHoldingMoney?: number; |   slotUse?: number; | ||||||
|   totalComp?: number; |   powerballUse?: number; | ||||||
|   total?: number; |   casinoBetting?: number; //  카지노배팅
 | ||||||
|   branchCount?: number; |   casinoCancel?: number; //  카지노취소
 | ||||||
|   divisionCount?: number; |   casinoAvailable?: number; //  카지노유효
 | ||||||
|   officeCount?: number; |   casinoWinning?: number; //  카지노당첨
 | ||||||
|   storeCount?: number; |   casinoWinLoss?: number; //  카지노윈로스(A)
 | ||||||
|   memberCount?: number; |   casinoCommission?: number; //  카지노수수료(B)
 | ||||||
|   nickname?: string; |   casinoBetWinCalculate?: number; //  카지노벳윈정산 (A-B)
 | ||||||
|   accountHolder?: string; |   slotBetting?: number; //  슬롯배팅
 | ||||||
|   phoneNumber?: string; |   slotCancel?: number; //  슬롯취소
 | ||||||
|   calculateType?: string; |   slotAvailable?: number; //  슬롯유효
 | ||||||
|   ownCash?: number; |   slotWinning?: number; //  슬롯당첨
 | ||||||
|   ownComp?: number; |   slotWinLoss?: number; //  슬롯윈로스(D)
 | ||||||
|   ownCoupon?: number; |   slotTotalCommission?: number; //  슬롯전체수수료(E)
 | ||||||
|   gameMoney?: number; |   slotBetWinCalculate?: number; //  슬롯벳윈정산(D-E)
 | ||||||
|   todayComp?: number; |   powerballBetting?: number; //  파워볼배팅
 | ||||||
|   totalDeposit?: number; |   powerballWinning?: number; //  파워볼당첨
 | ||||||
|   totalWithdraw?: number; |   powerballWinLoss?: number; //  파워볼윈로스(H)
 | ||||||
|   balance?: number; |   powerballCommission?: number; //  파워볼수수료(I)
 | ||||||
|   registDate?: string; |   powerballBetWinCalculate?: number; //  파워볼벳윈정산(H-I)
 | ||||||
|   finalSigninDate?: string; |   totalUse?: number; //  총이용회원
 | ||||||
|   ip?: string; |   totalAvailable?: number; //  총유효배팅
 | ||||||
|   state?: string; |   totalBetting?: number; //  총배팅
 | ||||||
|   note?: string; |   totalCancel?: number; //  총취소
 | ||||||
|  |   totalWinLoss?: number; //  총윈로스
 | ||||||
|  |   totalCommission?: number; //  총수수료
 | ||||||
|  |   totalBetWinCalculate?: number; //  총벳윈정산
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -12,9 +12,7 @@ import { MatSortModule } from '@angular/material/sort'; | |||||||
| import { MatSelectModule } from '@angular/material/select'; | import { MatSelectModule } from '@angular/material/select'; | ||||||
| import { MatTooltipModule } from '@angular/material/tooltip'; | import { MatTooltipModule } from '@angular/material/tooltip'; | ||||||
| import { MatGridListModule } from '@angular/material/grid-list'; | import { MatGridListModule } from '@angular/material/grid-list'; | ||||||
| import { MatSlideToggleModule } from '@angular/material/slide-toggle'; | import { MatDatepickerModule } from '@angular/material/datepicker'; | ||||||
| import { MatRadioModule } from '@angular/material/radio'; |  | ||||||
| import { MatCheckboxModule } from '@angular/material/checkbox'; |  | ||||||
| 
 | 
 | ||||||
| import { TranslocoModule } from '@ngneat/transloco'; | import { TranslocoModule } from '@ngneat/transloco'; | ||||||
| 
 | 
 | ||||||
| @ -42,9 +40,7 @@ import { statisticsRoutes } from './statistics.routing'; | |||||||
|     MatSelectModule, |     MatSelectModule, | ||||||
|     MatTooltipModule, |     MatTooltipModule, | ||||||
|     MatGridListModule, |     MatGridListModule, | ||||||
|     MatSlideToggleModule, |     MatDatepickerModule, | ||||||
|     MatRadioModule, |  | ||||||
|     MatCheckboxModule, |  | ||||||
|   ], |   ], | ||||||
| }) | }) | ||||||
| export class StatisticsModule {} | export class StatisticsModule {} | ||||||
|  | |||||||
| @ -1,325 +1,303 @@ | |||||||
| <div class="flex flex-col flex-auto min-w-0"> | <div | ||||||
|   <div class="flex-auto border-t -mt-px pt-4 sm:pt-6"> |   class="sm:absolute sm:inset-0 flex flex-col flex-auto min-w-0 sm:overflow-hidden bg-card dark:bg-transparent" | ||||||
|     <div class="w-full max-w-screen-xl mx-auto"> | > | ||||||
|       <div class="grid grid-cols-1 sm:grid-cols-6 gap-6 w-full min-w-0"> |   <!-- Header --> | ||||||
|         <!-- Budget distribution --> |   <div | ||||||
|         <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" | ||||||
|           class="sm:col-span-6 flex flex-col flex-auto p-6 bg-card shadow rounded-2xl overflow-hidden" |   > | ||||||
|  |     <!-- 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"> | ||||||
|  |       <!-- Search --> | ||||||
|  |       <button mat-icon-button (click)="__onClickSearch()"> | ||||||
|  |         <mat-icon [svgIcon]="'heroicons_outline:search'"></mat-icon> | ||||||
|  |       </button> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  |   <!-- Search --> | ||||||
|  |   <div | ||||||
|  |     *ngIf="__isSearchOpened" | ||||||
|  |     class="relative flex flex-col sm:flex-row flex-0 sm:items-center sm:justify-between py-4 px-6 md:px-8 border-b" | ||||||
|  |   > | ||||||
|  |     <!-- Actions --> | ||||||
|  |     <div fxLayout="row wrap" class="items-center mt-6 sm:mt-0 sm:ml-0"> | ||||||
|  |       <!-- SelectBox --> | ||||||
|  |       <mat-form-field fxFlex class="bet-mat-form-field-wrapper-mb-0 mr-2"> | ||||||
|  |         <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 fxFlex class="bet-mat-form-field-wrapper-mb-0 mr-2"> | ||||||
|  |         <mat-select placeholder="회원아이디"> | ||||||
|  |           <mat-option value="">회원아이디</mat-option> | ||||||
|  |           <mat-option value="">닉네임</mat-option> | ||||||
|  |         </mat-select> | ||||||
|  |       </mat-form-field> | ||||||
|  |       <!-- Card inception --> | ||||||
|  |       <div class="col-span-2 sm:col-span-1"> | ||||||
|  |         <mat-form-field | ||||||
|  |           class="fuse-mat-no-subscript w-full" | ||||||
|  |           [floatLabel]="'always'" | ||||||
|         > |         > | ||||||
|           <div class="text-lg font-medium tracking-tight leading-6 truncate"> |           <input | ||||||
|             금일배팅자목록 |             matInput | ||||||
|           </div> |             [matDatepicker]="picker1" | ||||||
|           <div> |             [placeholder]="'Choose a date'" | ||||||
|             <!-- Section --> |           /> | ||||||
| 
 |           <mat-datepicker-toggle | ||||||
|             <div class="grid grid-cols-8 gap-6 w-full mt-8"> |             matSuffix | ||||||
|               <!-- Card number --> |             [for]="picker1" | ||||||
|               <div class="col-span-2 sm:col-span-1"> |           ></mat-datepicker-toggle> | ||||||
|                 <mat-form-field class="fuse-mat-no subscript w-full"> |           <mat-datepicker #picker1></mat-datepicker> | ||||||
|                   <mat-select |         </mat-form-field> | ||||||
|                     [value]="'전체'" |       </div> | ||||||
|                     disableOptionCentering |       <!-- Card expiration --> | ||||||
|                     #roleSelect="matSelect" |       <div class="col-span-2 sm:col-span-1"> | ||||||
|                   > |         <mat-form-field | ||||||
|                     <mat-select-trigger class="text-md"> |           class="fuse-mat-no-subscript w-full" | ||||||
|                       <span class="ml-1 font-medium">{{ |           [floatLabel]="'always'" | ||||||
|                         roleSelect.value | titlecase |         > | ||||||
|                       }}</span> |           <input | ||||||
|                     </mat-select-trigger> |             matInput | ||||||
|                     <ng-container *ngFor="let role of roles1"> |             [matDatepicker]="picker2" | ||||||
|                       <mat-option |             [placeholder]="'Choose a date'" | ||||||
|                         class="h-auto py-4 leading-none" |           /> | ||||||
|                         [value]="role.value" |           <mat-datepicker-toggle | ||||||
|                       > |             matSuffix | ||||||
|                         <div class="font-medium">{{ role.label }}</div> |             [for]="picker2" | ||||||
|                       </mat-option> |           ></mat-datepicker-toggle> | ||||||
|                     </ng-container> |           <mat-datepicker #picker2></mat-datepicker> | ||||||
|                   </mat-select> |         </mat-form-field> | ||||||
|                 </mat-form-field> |       </div> | ||||||
|               </div> |       <!-- Search --> | ||||||
|               <!-- Card inception --> |       <mat-form-field | ||||||
|               <div class="col-span-2 sm:col-span-1"> |         fxFlex | ||||||
|                 <mat-form-field |         class="fuse-mat-rounded min-w-64 bet-mat-form-field-wrapper-mb-0 mr-2" | ||||||
|                   class="fuse-mat-no-subscript w-full" |       > | ||||||
|                   [floatLabel]="'always'" |         <mat-icon | ||||||
|                 > |           class="icon-size-5" | ||||||
|                   <input |           matPrefix | ||||||
|                     matInput |           [svgIcon]="'heroicons_solid:search'" | ||||||
|                     [matDatepicker]="picker1" |         ></mat-icon> | ||||||
|                     [placeholder]="'Choose a date'" |         <input | ||||||
|                   /> |           matInput | ||||||
|                   <mat-datepicker-toggle |           [formControl]="searchInputControl" | ||||||
|                     matSuffix |           [autocomplete]="'off'" | ||||||
|                     [for]="picker1" |           [placeholder]="'Search user'" | ||||||
|                   ></mat-datepicker-toggle> |         /> | ||||||
|                   <mat-datepicker #picker1></mat-datepicker> |       </mat-form-field> | ||||||
|                 </mat-form-field> |       <!-- Add user button --> | ||||||
|               </div> |       <button | ||||||
|               <!-- Card expiration --> |         mat-flat-button | ||||||
|               <div class="col-span-2 sm:col-span-1"> |         [color]="'primary'" | ||||||
|                 <mat-form-field |         fxFlex | ||||||
|                   class="fuse-mat-no-subscript w-full" |         (click)="__createProduct()" | ||||||
|                   [floatLabel]="'always'" |       > | ||||||
|                 > |         <mat-icon [svgIcon]="'heroicons_outline:search'"></mat-icon> | ||||||
|                   <input |         <span class="ml-2 mr-1">Search</span> | ||||||
|                     matInput |       </button> | ||||||
|                     [matDatepicker]="picker2" |       <div> | ||||||
|                     [placeholder]="'Choose a date'" |         <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|                   /> |           검색하기 | ||||||
|                   <mat-datepicker-toggle |         </button> | ||||||
|                     matSuffix |       </div> | ||||||
|                     [for]="picker2" |       <div> | ||||||
|                   ></mat-datepicker-toggle> |         <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|                   <mat-datepicker #picker2></mat-datepicker> |           어제 | ||||||
|                 </mat-form-field> |         </button> | ||||||
|               </div> |       </div> | ||||||
|               <!-- Card number --> |       <div> | ||||||
|               <div class="col-span-2 sm:col-span-1"> |         <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|                 <mat-form-field class="fuse-mat-no subscript w-full"> |           오늘 | ||||||
|                   <mat-select |         </button> | ||||||
|                     [value]="'회원아이디'" |       </div> | ||||||
|                     disableOptionCentering |       <div> | ||||||
|                     #roleSelect="matSelect" |         <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|                   > |           7일 | ||||||
|                     <mat-select-trigger class="text-md"> |         </button> | ||||||
|                       <span class="ml-1 font-medium">{{ |       </div> | ||||||
|                         roleSelect.value | titlecase |       <div> | ||||||
|                       }}</span> |         <button mat-flat-button class="bet-mat-small-8" [color]="'primary'"> | ||||||
|                     </mat-select-trigger> |           엑셀저장 | ||||||
|                     <ng-container *ngFor="let role of roles2"> |         </button> | ||||||
|                       <mat-option |  | ||||||
|                         class="h-auto py-4 leading-none" |  | ||||||
|                         [value]="role.value" |  | ||||||
|                       > |  | ||||||
|                         <div class="font-medium">{{ role.label }}</div> |  | ||||||
|                       </mat-option> |  | ||||||
|                     </ng-container> |  | ||||||
|                   </mat-select> |  | ||||||
|                 </mat-form-field> |  | ||||||
|               </div> |  | ||||||
|             </div> |  | ||||||
|           </div> |  | ||||||
|           <div class="flex flex-col flex-auto mt-2 overflow-x-auto"> |  | ||||||
|             <form [formGroup]="todayBetForm" autocomplete="off"> |  | ||||||
|               <table |  | ||||||
|                 class="min-w-240 overflow-y-visible" |  | ||||||
|                 mat-table |  | ||||||
|                 [dataSource]="todayBetDataSource" |  | ||||||
|               > |  | ||||||
|                 <!-- 등급 --> |  | ||||||
|                 <ng-container matColumnDef="rank"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>등급</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     <span class="font-medium text-right"> |  | ||||||
|                       {{ info?.user.rank }} |  | ||||||
|                     </span> |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 레벨 --> |  | ||||||
|                 <ng-container matColumnDef="level"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>레벨</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     <span class="font-medium text-right"> |  | ||||||
|                       {{ info?.user.level }} |  | ||||||
|                     </span> |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 아이디 --> |  | ||||||
|                 <ng-container matColumnDef="signinId"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>아이디</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     <span class="font-medium text-right"> |  | ||||||
|                       {{ info?.user.signinId }} |  | ||||||
|                     </span> |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 닉네임 --> |  | ||||||
|                 <ng-container matColumnDef="nickname"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>닉네임</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     <span class="font-medium text-right"> |  | ||||||
|                       {{ info?.user.nickname }} |  | ||||||
|                     </span> |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 회원입출 --> |  | ||||||
|                 <ng-container matColumnDef="depositDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>회원입출</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     <span>{{ info?.bank.users.deposit }}</span> |  | ||||||
|                     <span>{{ info?.bank.users.withdraw }}</span> |  | ||||||
|                     <span>{{ info?.bank.users.netProfit }}</span> |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 파트너입출 --> |  | ||||||
|                 <ng-container matColumnDef="depositPartnerDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>파트너입출</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     <span>{{ info?.bank.parthners.deposit }}</span> |  | ||||||
|                     <span>{{ info?.bank.parthners.withdraw }}</span> |  | ||||||
|                     <span>{{ info?.bank.parthners.netProfit }}</span> |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 총손익 --> |  | ||||||
|                 <ng-container matColumnDef="totalProfit"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>총손익</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.totalNetProfit }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 수동머니 --> |  | ||||||
|                 <ng-container matColumnDef="passiveMoney"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>수동머니</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.passiveMoney }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 수동콤프 --> |  | ||||||
|                 <ng-container matColumnDef="passiveComp"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>수동콤프</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.passiveComp }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 배팅 --> |  | ||||||
|                 <ng-container matColumnDef="casinoBetDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>배팅</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.casino.betting }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 당첨 --> |  | ||||||
|                 <ng-container matColumnDef="casinoWinningDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>당첨</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.casino.bettingWin }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 윈로스(A) --> |  | ||||||
|                 <ng-container matColumnDef="casinoWinLoss"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>윈로스(A)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.casino.winLoss }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 수수료(B) --> |  | ||||||
|                 <ng-container matColumnDef="casinoCommission"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>수수료(B)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.casino.commission.total }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 벳윈정산(A-B) --> |  | ||||||
|                 <ng-container matColumnDef="casinoSettle"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>벳윈정산(A-B)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.casino.betWinSettle }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
| 
 |  | ||||||
|                 <!-- 배팅 --> |  | ||||||
|                 <ng-container matColumnDef="slotBetDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>배팅</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.slot.betting }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 당첨 --> |  | ||||||
|                 <ng-container matColumnDef="slotWinningDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>당첨</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.slot.bettingWin }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 윈로스(D) --> |  | ||||||
|                 <ng-container matColumnDef="slotWinLoss"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>윈로스(D)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.slot.winLoss }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 수수료(E) --> |  | ||||||
|                 <ng-container matColumnDef="slotCommission"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>수수료(E)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.slot.commission.total }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 벳윈정산(A-B) --> |  | ||||||
|                 <ng-container matColumnDef="slotSettle"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>벳윈정산(A-B)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.slot.commission.betWinSettle }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
| 
 |  | ||||||
|                 <!-- 배팅 --> |  | ||||||
|                 <ng-container matColumnDef="powerballBetDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>배팅</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.powerball.betting }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 당첨 --> |  | ||||||
|                 <ng-container matColumnDef="powerballWinningDetails"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>당첨</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.powerball.bettingWin }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 윈로스(G) --> |  | ||||||
|                 <ng-container matColumnDef="powerballWinLoss"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>윈로스(G)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.powerball.winLoss }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 수수료(G) --> |  | ||||||
|                 <ng-container matColumnDef="powerballCommission"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>수수료(H)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.powerball.commission.total }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
|                 <!-- 벳윈정산(G-H) --> |  | ||||||
|                 <ng-container matColumnDef="powerballSettle"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>벳윈정산(G-H)</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.bank.powerball.commission.betWinSettle }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
| 
 |  | ||||||
|                 <!-- 총벳윈정산 --> |  | ||||||
|                 <ng-container matColumnDef="totalBetWinSettle"> |  | ||||||
|                   <th mat-header-cell *matHeaderCellDef>총벳윈정산</th> |  | ||||||
|                   <td mat-cell *matCellDef="let info"> |  | ||||||
|                     {{ info?.totalBetSettle }} |  | ||||||
|                   </td> |  | ||||||
|                 </ng-container> |  | ||||||
| 
 |  | ||||||
|                 <!-- Header row second group --> |  | ||||||
|                 <ng-container matColumnDef="header-row-info-group"> |  | ||||||
|                   <th |  | ||||||
|                     mat-header-cell |  | ||||||
|                     *matHeaderCellDef |  | ||||||
|                     [attr.colspan]="2" |  | ||||||
|                     [attr.rowspan]="2" |  | ||||||
|                   > |  | ||||||
|                     Second group |  | ||||||
|                   </th> |  | ||||||
|                 </ng-container> |  | ||||||
| 
 |  | ||||||
|                 <!-- <tr mat-header-row *matHeaderRowDef="['betInfo']"></tr> --> |  | ||||||
|                 <tr mat-header-row *matHeaderRowDef="todayBetTableColumns"></tr> |  | ||||||
|                 <tr |  | ||||||
|                   mat-row |  | ||||||
|                   *matRowDef="let row; columns: todayBetTableColumns" |  | ||||||
|                 ></tr> |  | ||||||
|               </table> |  | ||||||
|             </form> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|   </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="todayBets$ | async as todayBets"> | ||||||
|  |         <ng-container *ngIf="todayBets.length > 0; else noTodayBet"> | ||||||
|  |           <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" | ||||||
|  |             > | ||||||
|  |               <div> | ||||||
|  |                 아이디 | ||||||
|  |                 <hr style="margin: 7px 0px" /> | ||||||
|  |                 닉네임 | ||||||
|  |               </div> | ||||||
|  |               <div> | ||||||
|  |                 등급 | ||||||
|  |                 <hr style="margin: 7px 0px" /> | ||||||
|  |                 레벨 | ||||||
|  |               </div> | ||||||
|  |               <div>회원입출금</div> | ||||||
|  |               <div>파트너입출금</div> | ||||||
|  |               <div class="hidden sm:block">전체손익</div> | ||||||
|  |               <div class="hidden md:block">수동머니</div> | ||||||
|  |               <div class="hidden md:block">수동콤프</div> | ||||||
|  |               <div class="hidden md:block">카-배팅</div> | ||||||
|  |               <div class="hidden lg:block">카-당첨</div> | ||||||
|  |               <div class="hidden lg:block">카-윈로스(A)</div> | ||||||
|  |               <div class="hidden lg:block">카-수수료(B)</div> | ||||||
|  |               <div class="hidden lg:block">카-벳윈정산(A-B)</div> | ||||||
|  |               <div class="hidden md:block">슬-배팅</div> | ||||||
|  |               <div class="hidden lg:block">슬-당첨</div> | ||||||
|  |               <div class="hidden lg:block">슬-윈로스(D)</div> | ||||||
|  |               <div class="hidden lg:block">슬-수수료(E)</div> | ||||||
|  |               <div class="hidden lg:block">슬-벳윈정산(D-E)</div> | ||||||
|  |               <div class="hidden md:block">파-배팅</div> | ||||||
|  |               <div class="hidden lg:block">파-당첨</div> | ||||||
|  |               <div class="hidden lg:block">파-윈로스(H)</div> | ||||||
|  |               <div class="hidden lg:block">파-수수료(I)</div> | ||||||
|  |               <div class="hidden lg:block">파-벳윈정산(H-I)</div> | ||||||
|  |               <div class="hidden lg:block">총벳윈정산</div> | ||||||
|  |             </div> | ||||||
|  |             <!-- Rows --> | ||||||
|  |             <ng-container *ngIf="todayBets$ | async as todayBets"> | ||||||
|  |               <ng-container | ||||||
|  |                 *ngFor="let todayBet of todayBets; trackBy: __trackByFn" | ||||||
|  |               > | ||||||
|  |                 <div | ||||||
|  |                   class="inventory-grid grid items-center gap-4 py-3 px-6 md:px-8 border-b" | ||||||
|  |                 > | ||||||
|  |                   <div> | ||||||
|  |                     {{ todayBet.signinId }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     {{ todayBet.nickname }} | ||||||
|  |                   </div> | ||||||
|  |                   <div> | ||||||
|  |                     {{ todayBet.rank }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     {{ todayBet.level }} | ||||||
|  |                   </div> | ||||||
|  |                   <div> | ||||||
|  |                     충전{{ todayBet.memberCharge }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     환전{{ todayBet.memberExchange }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     손익{{ todayBet.memberProfitLoss }} | ||||||
|  |                   </div> | ||||||
|  |                   <div> | ||||||
|  |                     충전{{ todayBet.partnerCharge }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     환전{{ todayBet.partnerExchange }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     손익{{ todayBet.partnerProfitLoss }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden sm:block"> | ||||||
|  |                     {{ todayBet.totalProfitLoss }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden md:block">{{ todayBet.passiveMoney }}</div> | ||||||
|  |                   <div class="hidden md:block"> | ||||||
|  |                     {{ todayBet.passiveComp }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden md:block"> | ||||||
|  |                     배팅{{ todayBet.casinoBetting }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     타이{{ todayBet.casinoTie }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     취소{{ todayBet.casinoCancel }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     유효{{ todayBet.casinoAvailable }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.casinoWinning }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.casinoWinLoss }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.casinoCommission }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.casinoBetWinCalculate }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden md:block"> | ||||||
|  |                     배팅{{ todayBet.slotBetting }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     취소{{ todayBet.slotCancel }} | ||||||
|  |                     <hr style="margin: 7px 0px" /> | ||||||
|  |                     유효{{ todayBet.slotAvailable }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.slotWinning }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.slotWinLoss }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.slotCommission }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.slotBetWinCalculate }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden md:block"> | ||||||
|  |                     배팅{{ todayBet.powerballBetting }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.powerballWinning }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.powerballWinLoss }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.powerballCommission }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.powerballBetWinCalculate }} | ||||||
|  |                   </div> | ||||||
|  |                   <div class="hidden lg:block"> | ||||||
|  |                     {{ todayBet.totalBetWinCalculate }} | ||||||
|  |                   </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 #noTodayBet> | ||||||
|  |         <div | ||||||
|  |           class="p-8 sm:p-16 border-t text-4xl font-semibold tracking-tight text-center" | ||||||
|  |         > | ||||||
|  |           There are no data! | ||||||
|  |         </div> | ||||||
|  |       </ng-template> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
| </div> | </div> | ||||||
|  | |||||||
| @ -34,7 +34,6 @@ import { TodayBet } from '../models/today-bet'; | |||||||
| import { TodayBetPagination } from '../models/today-bet-pagination'; | import { TodayBetPagination } from '../models/today-bet-pagination'; | ||||||
| import { TodayBetService } from '../services/today-bet.service'; | import { TodayBetService } from '../services/today-bet.service'; | ||||||
| import { Router } from '@angular/router'; | import { Router } from '@angular/router'; | ||||||
| import { MatTableDataSource } from '@angular/material/table'; |  | ||||||
| 
 | 
 | ||||||
| @Component({ | @Component({ | ||||||
|   selector: 'today-bet-list', |   selector: 'today-bet-list', | ||||||
| @ -43,18 +42,22 @@ import { MatTableDataSource } from '@angular/material/table'; | |||||||
|     /* language=SCSS */ |     /* language=SCSS */ | ||||||
|     ` |     ` | ||||||
|       .inventory-grid { |       .inventory-grid { | ||||||
|         grid-template-columns: 60px auto 40px; |         /*                     아이디 등급  회원 */ | ||||||
|  |         grid-template-columns: 40px auto 30px; | ||||||
| 
 | 
 | ||||||
|         @screen sm { |         @screen sm { | ||||||
|           grid-template-columns: 60px 60px 60px 60px 60px 60px auto 60px; |           /*                     아이디 등급  회원 파트너 손익  머니  콤프  카배팅 */ | ||||||
|  |           grid-template-columns: 40px auto 30px 30px 30px 30px 30px 30px; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         @screen md { |         @screen md { | ||||||
|           grid-template-columns: 60px 60px 60px 60px 60px 60px auto 60px 60px; |           /*                     아이디 등급  회원 파트너 손익  머니  콤프  카배팅 카당첨 */ | ||||||
|  |           grid-template-columns: 40px auto 30px 30px 30px 30px 30px 30px 30px; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         @screen lg { |         @screen lg { | ||||||
|           grid-template-columns: 60px 70px 70px 70px 70px 100px 60px 60px auto 60px 60px 60px 60px; |           /*                     아이디 등급  회원 파트너 손익  머니  콤프 카배팅 카당첨 카윈로스 카수수료 카정산 슬배팅 슬당첨 슬윈로스 슬수수료 슬정산 파배팅 파당첨 파윈로스 파수수료 파정산 총정산 */ | ||||||
|  |           grid-template-columns: 40px auto 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px 30px; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     `,
 |     `,
 | ||||||
| @ -64,48 +67,20 @@ import { MatTableDataSource } from '@angular/material/table'; | |||||||
|   animations: fuseAnimations, |   animations: fuseAnimations, | ||||||
| }) | }) | ||||||
| export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | ||||||
|  |   @ViewChild(MatPaginator) private _paginator!: MatPaginator; | ||||||
|  |   @ViewChild(MatSort) private _sort!: MatSort; | ||||||
|  | 
 | ||||||
|   todayBets$!: Observable<TodayBet[] | undefined>; |   todayBets$!: Observable<TodayBet[] | undefined>; | ||||||
|   users$!: Observable<User[] | undefined>; |   users$!: Observable<User[] | undefined>; | ||||||
| 
 | 
 | ||||||
|  |   __isSearchOpened = false; | ||||||
|   isLoading = false; |   isLoading = false; | ||||||
|   searchInputControl = new FormControl(); |   searchInputControl = new FormControl(); | ||||||
|   selectedTodayBet?: TodayBet; |   selectedTodayBet?: TodayBet; | ||||||
|  |   pagination?: TodayBetPagination; | ||||||
| 
 | 
 | ||||||
|   todayBetForm!: FormGroup; |  | ||||||
| 
 |  | ||||||
|   todayBetDataSource: MatTableDataSource<any> = new MatTableDataSource(); |  | ||||||
|   todayBetTableColumns: string[] = [ |  | ||||||
|     'rank', |  | ||||||
|     'level', |  | ||||||
|     'signinId', |  | ||||||
|     'nickname', |  | ||||||
|     'depositDetails', |  | ||||||
|     'depositPartnerDetails', |  | ||||||
|     'totalProfit', |  | ||||||
|     'passiveMoney', |  | ||||||
|     'passiveComp', |  | ||||||
|     'casinoBetDetails', |  | ||||||
|     'casinoWinningDetails', |  | ||||||
|     'casinoWinLoss', |  | ||||||
|     'casinoCommission', |  | ||||||
|     'casinoSettle', |  | ||||||
|     'slotBetDetails', |  | ||||||
|     'slotWinningDetails', |  | ||||||
|     'slotWinLoss', |  | ||||||
|     'slotCommission', |  | ||||||
|     'slotSettle', |  | ||||||
|     'powerballBetDetails', |  | ||||||
|     'powerballWinningDetails', |  | ||||||
|     'powerballWinLoss', |  | ||||||
|     'powerballCommission', |  | ||||||
|     'powerballSettle', |  | ||||||
|     'totalBetWinSettle', |  | ||||||
|   ]; |  | ||||||
|   private _unsubscribeAll: Subject<any> = new Subject<any>(); |   private _unsubscribeAll: Subject<any> = new Subject<any>(); | ||||||
| 
 | 
 | ||||||
|   roles1: any[]; |  | ||||||
|   roles2: any[]; |  | ||||||
| 
 |  | ||||||
|   /** |   /** | ||||||
|    * Constructor |    * Constructor | ||||||
|    */ |    */ | ||||||
| @ -115,36 +90,7 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|     private _formBuilder: FormBuilder, |     private _formBuilder: FormBuilder, | ||||||
|     private _todayBetService: TodayBetService, |     private _todayBetService: TodayBetService, | ||||||
|     private router: Router |     private router: Router | ||||||
|   ) { |   ) {} | ||||||
|     this.roles1 = [ |  | ||||||
|       { |  | ||||||
|         label: '전체', |  | ||||||
|         value: '전체', |  | ||||||
|       }, |  | ||||||
|       { |  | ||||||
|         label: '파워볼', |  | ||||||
|         value: '파워볼', |  | ||||||
|       }, |  | ||||||
|       { |  | ||||||
|         label: '카지노', |  | ||||||
|         value: '카지노', |  | ||||||
|       }, |  | ||||||
|       { |  | ||||||
|         label: '슬롯', |  | ||||||
|         value: '슬롯', |  | ||||||
|       }, |  | ||||||
|     ]; |  | ||||||
|     this.roles2 = [ |  | ||||||
|       { |  | ||||||
|         label: '회원아이디', |  | ||||||
|         value: '회원아이디', |  | ||||||
|       }, |  | ||||||
|       { |  | ||||||
|         label: '닉네임', |  | ||||||
|         value: '닉네임', |  | ||||||
|       }, |  | ||||||
|     ]; |  | ||||||
|   } |  | ||||||
| 
 | 
 | ||||||
|   // -----------------------------------------------------------------------------------------------------
 |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|   // @ Lifecycle hooks
 |   // @ Lifecycle hooks
 | ||||||
| @ -154,19 +100,14 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|    * On init |    * On init | ||||||
|    */ |    */ | ||||||
|   ngOnInit(): void { |   ngOnInit(): void { | ||||||
|     this.todayBetForm = this._formBuilder.group({ |  | ||||||
|       bankName: [''], |  | ||||||
|       accountNumber: [''], |  | ||||||
|       accountHolder: [''], |  | ||||||
|     }); |  | ||||||
|     // Get the pagination
 |     // Get the pagination
 | ||||||
|     this._todayBetService |     this._todayBetService.pagination$ | ||||||
|       .getTodayBets() |  | ||||||
|       .pipe(takeUntil(this._unsubscribeAll)) |       .pipe(takeUntil(this._unsubscribeAll)) | ||||||
|       .subscribe((todayBets: any) => { |       .subscribe((pagination: TodayBetPagination | undefined) => { | ||||||
|  |         // Update the pagination
 | ||||||
|  |         this.pagination = pagination; | ||||||
|  | 
 | ||||||
|         // Mark for check
 |         // Mark for check
 | ||||||
|         this.todayBetDataSource = todayBets.todayBets; |  | ||||||
|         console.log(todayBets); |  | ||||||
|         this._changeDetectorRef.markForCheck(); |         this._changeDetectorRef.markForCheck(); | ||||||
|       }); |       }); | ||||||
| 
 | 
 | ||||||
| @ -177,7 +118,45 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|   /** |   /** | ||||||
|    * After view init |    * After view init | ||||||
|    */ |    */ | ||||||
|   ngAfterViewInit(): void {} |   ngAfterViewInit(): void { | ||||||
|  |     if (this._sort && this._paginator) { | ||||||
|  |       // Set the initial sort
 | ||||||
|  |       this._sort.sort({ | ||||||
|  |         id: 'signinId', | ||||||
|  |         start: 'asc', | ||||||
|  |         disableClear: true, | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       // Mark for check
 | ||||||
|  |       this._changeDetectorRef.markForCheck(); | ||||||
|  | 
 | ||||||
|  |       // If the todayBet 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._todayBetService.getTodayBets( | ||||||
|  |               this._paginator.pageIndex, | ||||||
|  |               this._paginator.pageSize, | ||||||
|  |               this._sort.active, | ||||||
|  |               this._sort.direction | ||||||
|  |             ); | ||||||
|  |           }), | ||||||
|  |           map(() => { | ||||||
|  |             this.isLoading = false; | ||||||
|  |           }) | ||||||
|  |         ) | ||||||
|  |         .subscribe(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
|    * On destroy |    * On destroy | ||||||
| @ -212,6 +191,14 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|    */ |    */ | ||||||
|   __toggleDetails(productId: string): void {} |   __toggleDetails(productId: string): void {} | ||||||
| 
 | 
 | ||||||
|  |   /** | ||||||
|  |    * toggle the search | ||||||
|  |    * Used in 'bar' | ||||||
|  |    */ | ||||||
|  |   __onClickSearch(): void { | ||||||
|  |     this.__isSearchOpened = !this.__isSearchOpened; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   /** |   /** | ||||||
|    * Track by function for ngFor loops |    * Track by function for ngFor loops | ||||||
|    * |    * | ||||||
| @ -221,7 +208,4 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|   __trackByFn(index: number, item: any): any { |   __trackByFn(index: number, item: any): any { | ||||||
|     return item.id || index; |     return item.id || index; | ||||||
|   } |   } | ||||||
|   __testData(info: any): any { |  | ||||||
|     console.log(info); |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,29 +1,39 @@ | |||||||
|  | import { StringNullableChain } from 'lodash'; | ||||||
|  | 
 | ||||||
| export interface TodayBet { | export interface TodayBet { | ||||||
|   id?: string; |   id: string; | ||||||
|   totalPartnerCount?: number; |   signinId?: string; | ||||||
|   totalHoldingMoney?: number; |   rank?: string; | ||||||
|   totalComp?: number; |   level?: string; | ||||||
|   total?: number; |  | ||||||
|   branchCount?: number; |  | ||||||
|   divisionCount?: number; |  | ||||||
|   officeCount?: number; |  | ||||||
|   storeCount?: number; |  | ||||||
|   memberCount?: number; |  | ||||||
|   nickname?: string; |   nickname?: string; | ||||||
|   accountHolder?: string; |   memberCharge?: number; //  회원충전
 | ||||||
|   phoneNumber?: string; |   memberExchange?: number; //  회원환전
 | ||||||
|   calculateType?: string; |   memberProfitLoss?: number; //  회원손익
 | ||||||
|   ownCash?: number; |   partnerCharge?: number; //  파트너충전
 | ||||||
|   ownComp?: number; |   partnerExchange?: number; //  파트너환전
 | ||||||
|   ownCoupon?: number; |   partnerProfitLoss?: number; //  파트너손익
 | ||||||
|   gameMoney?: number; |   totalProfitLoss?: number; //  전체손익
 | ||||||
|   todayComp?: number; |   passiveMoney?: number; | ||||||
|   totalDeposit?: number; |   passiveComp?: number; | ||||||
|   totalWithdraw?: number; |   casinoBetting?: number; //  카지노배팅
 | ||||||
|   balance?: number; |   casinoTie?: number; //  카지노타이
 | ||||||
|   registDate?: string; |   casinoCancel?: number; //  카지노취소
 | ||||||
|   finalSigninDate?: string; |   casinoAvailable?: number; //  카지노유효
 | ||||||
|   ip?: string; |   casinoWinning?: number; //  카지노당첨
 | ||||||
|   state?: string; |   casinoWinLoss?: number; //  카지노윈로스(A)
 | ||||||
|   note?: string; |   casinoCommission?: number; //  카지노수수료(B)
 | ||||||
|  |   casinoBetWinCalculate?: number; //  카지노벳윈정산 (A-B)
 | ||||||
|  |   slotBetting?: number; //  슬롯배팅
 | ||||||
|  |   slotCancel?: number; //  슬롯취소
 | ||||||
|  |   slotAvailable?: number; //  슬롯유효
 | ||||||
|  |   slotWinning?: number; //  슬롯당첨
 | ||||||
|  |   slotWinLoss?: number; //  슬롯윈로스(D)
 | ||||||
|  |   slotCommission?: number; //  슬롯수수료(E)
 | ||||||
|  |   slotBetWinCalculate?: number; //  슬롯벳윈정산(D-E)
 | ||||||
|  |   powerballBetting?: number; //  파워볼배팅
 | ||||||
|  |   powerballWinning?: number; //  파워볼당첨
 | ||||||
|  |   powerballWinLoss?: number; //  파워볼윈로스(H)
 | ||||||
|  |   powerballCommission?: number; //  파워볼수수료(I)
 | ||||||
|  |   powerballBetWinCalculate?: number; //  파워볼벳윈정산(H-I)
 | ||||||
|  |   totalBetWinCalculate?: number; //  총벳윈정산
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -70,19 +70,32 @@ export class TodayBetService { | |||||||
|    * @param order |    * @param order | ||||||
|    * @param search |    * @param search | ||||||
|    */ |    */ | ||||||
|   getTodayBets(search: string = ''): Observable<{ |   getTodayBets( | ||||||
|  |     page: number = 0, | ||||||
|  |     size: number = 10, | ||||||
|  |     sort: string = 'name', | ||||||
|  |     order: 'asc' | 'desc' | '' = 'asc', | ||||||
|  |     search: string = '' | ||||||
|  |   ): Observable<{ | ||||||
|  |     pagination: TodayBetPagination; | ||||||
|     todayBets: TodayBet[]; |     todayBets: TodayBet[]; | ||||||
|   }> { |   }> { | ||||||
|     return this._httpClient |     return this._httpClient | ||||||
|       .get<{ |       .get<{ | ||||||
|  |         pagination: TodayBetPagination; | ||||||
|         todayBets: TodayBet[]; |         todayBets: TodayBet[]; | ||||||
|       }>('api/apps/report/today-bet/today-bets', { |       }>('api/apps/report/today-bet/today-bets', { | ||||||
|         params: { |         params: { | ||||||
|  |           page: '' + page, | ||||||
|  |           size: '' + size, | ||||||
|  |           sort, | ||||||
|  |           order, | ||||||
|           search, |           search, | ||||||
|         }, |         }, | ||||||
|       }) |       }) | ||||||
|       .pipe( |       .pipe( | ||||||
|         tap((response) => { |         tap((response) => { | ||||||
|  |           this.__pagination.next(response.pagination); | ||||||
|           this.__todayBets.next(response.todayBets); |           this.__todayBets.next(response.todayBets); | ||||||
|         }) |         }) | ||||||
|       ); |       ); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user