import { Component, OnInit } from '@angular/core'; import { ChangeDetectorRef } from '@angular/core'; import { HttpClientService } from '../../../services/http-client.service'; import dateFormatter from '../../../utils/data-formatter'; @Component({ selector: 'app-checkin-desk', templateUrl: './checkin-desk.component.html', styleUrls: ['./checkin-desk.component.scss'] }) export class CheckinDeskComponent implements OnInit { constructor( private httpCilent: HttpClientService, private changeDetectorRef: ChangeDetectorRef ) { } public raw_data: Array = []; //原始数据,即航班计划 public combined_data: Array = []; //组合数据,即链接航班,显示信息等组合好之后的数据 public render_data: Array = []; //显示数据,即需要显示的数据 public checkindesk_lists: Array; //列数据 public row_state: number; public TOP_1 = 1000000000000; public TOP_2 = 2000000000000; public TOP_3 = 3000000000000; public TOP_4 = 4000000000000; public TOP_5 = 5000000000000; public TOP_6 = 6000000000000; public TOP_7 = 7000000000000; public TOP_8 = 8000000000000; public TOP_9 = 9000000000000; public TOP_10 = 10000000000000; public TOP_11 = 11000000000000; public TOP_12 = 12000000000000; public TOP_13 = 13000000000000; public TOP_14 = 14000000000000; // 搜索条件 SEARCH = ''; //手动输入条件 FLT_POS = 1; //过滤还是定位 SEL_COL = ''; //选择列名 public filterItems = { } public formatter = { 'SODT': dateFormatter, 'ESTT': dateFormatter, 'ACTT': dateFormatter } selectRow(i) { this.row_state = i; this.changeDetectorRef.detectChanges(); } getColor(col_CODE) { if (col_CODE === 'SODT') { return 'skyblue' } else { return null } } ngOnInit() { this.changeDetectorRef.detach(); /* 获取显示列 */ this.httpCilent.get('/assets/mock-data/checkindesk-code.json').subscribe( data => { data.sort(function (a, b) { return (a['COL_ORDER'] - b['COL_ORDER']); }) this.checkindesk_lists = data; } ) /* 获取值机柜台信息 */ this.httpCilent.get('/assets/mock-data/checkindesk-data.json').subscribe( data => { //解析数据 data.forEach(element => { this.raw_data.push(JSON.parse(element.value)); }); let combined_linked_data = this.raw_data combined_linked_data.forEach(element => { let row_flights = {}; let render_flight = {}; let render_pre_flight = {}; let render_rea_flight = {}; row_flights['preFlight'] = element; for (let i = 0; i < this.checkindesk_lists.length; i++) { let key = this.checkindesk_lists[i]['COL_CODE'] render_flight[key] = typeof (this.formatter[key]) === 'function' ? this.formatter[key](row_flights['preFlight'][key], 1) : this.formatter[key] ? this.formatter[key][row_flights['preFlight'][key]] : row_flights['preFlight'][key]; } row_flights['renderFlight'] = render_flight; if (element['isLinked']) { row_flights['preFlight'] = element['linkFlight']; delete element['linkFlight']; delete element['isLinked']; row_flights['reaFlight'] = element; for (let i = 0; i < this.checkindesk_lists.length; i++) { let key = this.checkindesk_lists[i]['COL_CODE'] if (this.formatter.hasOwnProperty(key)) { if (typeof (this.formatter[key]) === 'function') { render_flight[key] = (row_flights['preFlight'][key] === row_flights['reaFlight'][key]) ? (this.formatter[key](row_flights['preFlight'][key], 1)) : (this.formatter[key](row_flights['preFlight'][key], 1) + '/' + this.formatter[key](row_flights['reaFlight'][key], 1)); render_pre_flight[key] = this.formatter[key](row_flights['preFlight'][key], 1); render_rea_flight[key] = this.formatter[key](row_flights['reaFlight'][key], 1); } else { render_flight[key] = (row_flights['preFlight'][key] === row_flights['reaFlight'][key]) ? (this.formatter[key][row_flights['preFlight'][key]]) : (this.formatter[key][row_flights['preFlight'][key]] + '/' + this.formatter[key][row_flights['reaFlight'][key]]); render_pre_flight[key] = this.formatter[key][row_flights['preFlight'][key]]; render_rea_flight[key] = this.formatter[key][row_flights['reaFlight'][key]]; } } else { render_flight[key] = (row_flights['preFlight'][key] === row_flights['reaFlight'][key]) ? (row_flights['preFlight'][key]) : (row_flights['preFlight'][key] + '/' + row_flights['reaFlight'][key]); render_pre_flight[key] = row_flights['preFlight'][key]; render_rea_flight[key] = row_flights['reaFlight'][key]; } } row_flights['renderFlight'] = render_flight; row_flights['renderPreFlight'] = render_pre_flight; row_flights['renderReaFlight'] = render_rea_flight; } this.combined_data.push(row_flights) }) //排序 this.combined_data.forEach(element => { element['ORDER'] = this.sequence(element) // element['ORDER'] = '+' + element['order'] }) this.combined_data.sort(function (a, b) { return (a['ORDER'] - b['ORDER']); }) this.render_data = this.combined_data this.changeDetectorRef.detectChanges(); } ) } public sequence(flight) { let dateTag: number = 10; let dateToCompare = new Date().getTime(); if (!this.isCancled(flight) && !this.isDone(flight) && this.isDelayed(flight)) { if (this.isLinked(flight)) { if (this.getActualDatetime(flight['preFlight']) && !this.getActualDatetime(flight['reaFlight'])) { dateToCompare = new Date(dateFormatter(this.getActualDatetime(flight['preFlight']))).getTime(); dateTag = this.TOP_1; } else { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_2; } } else { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_3; } return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && this.isBoading(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_4; return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && this.isFlying(flight) && !this.getActualDatetime(flight['preFlight'])) { if (this.getEstimatedDatetime(flight['preFlight'])) { dateToCompare = new Date(dateFormatter(this.getEstimatedDatetime(flight['preFlight']))).getTime(); } else { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['preFlight']))).getTime(); } dateTag = this.TOP_5; return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && this.isLinked(flight) && this.getActualDatetime(flight['preFlight']) && !this.getActualDatetime(flight['reaFlight'])) { dateToCompare = new Date(dateFormatter(this.getActualDatetime(flight['preFlight']))).getTime(); dateTag = this.TOP_6; return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && this.isDeptFlight(flight) && !this.startBoading(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_7; return dateToCompare + dateTag; } if (!this.isCancled(flight) && this.isArriFlight(flight) && this.isDone(flight)) { dateToCompare = new Date(dateFormatter(this.getActualDatetime(flight['preFlight']))).getTime(); dateTag = this.TOP_8; return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && this.isOverBoading(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_9; return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && !this.isFlying(flight)) { if (this.isLinked(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_10; } else if (this.isArriFlight(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['preFlight']))).getTime(); dateTag = this.TOP_11; } return dateToCompare + dateTag; } if (!this.isCancled(flight) && this.isDone(flight) && (this.isLinked(flight) || this.isDeptFlight(flight))) { dateToCompare = new Date(dateFormatter(this.getActualDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_12; return dateToCompare + dateTag; } if (this.isCancled(flight)) { if (this.isDeptFlight(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); } else { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['preFlight']))).getTime(); } dateTag = this.TOP_13; return dateToCompare + dateTag; } return this.TOP_14 } inputFliter() { let filterItems = this.filterItems; let combined_data = this.combined_data; let filter_data = []; let sel_col = this.SEL_COL; if (this.FLT_POS === 1) { //过滤 //手动输入框筛选 if(sel_col){ combined_data.forEach(item=>{ if(item['renderFlight'][sel_col]){ if (item['renderFlight'][sel_col].toString().match(new RegExp(this.SEARCH, 'i'))) { filter_data.push(Object.assign({}, item)) } }else{ if(!this.SEARCH){ filter_data.push(Object.assign({}, item)) } } }) }else{ combined_data.forEach(item => { for (const key in item['renderFlight']) { if (item['renderFlight'].hasOwnProperty(key)) { if (item['renderFlight'][key]) { if (item['renderFlight'][key].toString().match(new RegExp(this.SEARCH, 'i'))) { filter_data.push(Object.assign({}, item)) break; } } else { continue; } } } }) } //下拉框筛选 filter_data = filter_data.filter(item => { if (this.isArriFlight(item)) { let is_satis = true; for (const key in filterItems) { if (filterItems.hasOwnProperty(key) && filterItems[key]) { if (item['preFlight'][key] === filterItems[key]) { is_satis = true; continue; } else { is_satis = false; break; } } } return is_satis; } else if (this.isDeptFlight(item)) { let is_satis = true; for (const key in filterItems) { if (filterItems.hasOwnProperty(key) && filterItems[key]) { if (item['reaFlight'][key] === filterItems[key]) { is_satis = true; continue; } else { is_satis = false; break; } } } return is_satis; } else { let pre_satis = true; let rea_satis = true; for (const key in filterItems) { if (filterItems.hasOwnProperty(key) && filterItems[key]) { if (item['preFlight'][key] === filterItems[key]) { pre_satis = true; continue; } else { pre_satis = false; break; } } } for (const key in filterItems) { if (filterItems.hasOwnProperty(key) && filterItems[key]) { if (item['reaFlight'][key] === filterItems[key]) { rea_satis = true; continue; } else { rea_satis = false; break; } } } if(pre_satis&&!rea_satis){ item['renderFlight'] = item['renderPreFlight']; return pre_satis; }else if(!pre_satis&&rea_satis){ item['renderFlight'] = item['renderReaFlight']; return rea_satis; }else if(pre_satis&&rea_satis){ return pre_satis&&rea_satis; }else{ return false; } } }) this.render_data = filter_data; } else { //定位 } this.changeDetectorRef.detectChanges(); } /** * 获取航班实际时间 * @param flight * @return */ public getActualDatetime(flight) { return flight['ACTT']; } /** * 获取航班预计时间 * @param flight * @return */ public getEstimatedDatetime(flight) { return flight['ESTT'] } /** * 获取航班计划时间 * @param flight * @return */ public getScheduledDatetime(flight) { return flight['SODT'] } /** * 判断航班是否是链接航班 * @param flight * @return */ public isLinked(flight) { if (flight['preFlight'] && flight['reaFlight']) { return true } else { return false } } /** * 判断航班是否是纯离港航班 * @param flight * @return */ public isDeptFlight(flight) { if (!flight['preFlight'] && flight['reaFlight']) { return true } else { return false } } /** * 判断航班是否是纯到港航班 * @param flight * @return */ public isArriFlight(flight) { if (flight['preFlight'] && !flight['reaFlight']) { return true; } else { return false; } } /** * 判断航班是否已经前站起飞 * @param flight * @return */ public isFlying(flight) { if (this.isArriFlight(flight) || this.isLinked(flight)) { if (flight['preFlight']['PADT']) { return true; } else { return false; } } else { return false; } } /** * 判断航班是否取消 * @param flight * @return */ public isCancled(flight) { if (this.isArriFlight(flight)) { if (flight['preFlight']['CNCL']) { return true; } else { return false; } } else if (this.isDeptFlight(flight)) { if (flight['reaFlight']['CNCL']) { return true; } else { return false; } } else { return false; } } /** * 判断航班是否延误(只针对纯离港航班或链接航班中的离港航班) * @param flight * @return */ public isDelayed(flight) { if (this.isDeptFlight(flight) || this.isLinked(flight)) { if (flight['reaFlight']['DELY']) { return true } else { return false } } else { return false; } } /** * 判断航班是否已经执行完成 * @param flight * @return */ public isDone(flight) { if (this.isLinked(flight) || this.isDeptFlight(flight)) { if (!this.getActualDatetime(flight['reaFlight'])) { return false; } else { return true; } } else if (this.isArriFlight(flight)) { if (!this.getActualDatetime(flight['preFlight'])) { return false; } else { return true; } } else { return false; } } /** * 判断航班是否开始登机 * @param flight * @return */ public startBoading(flight) { if (this.isLinked(flight) || this.isDeptFlight(flight)) { if (!flight['reaFlight']['BOTM']) { return false; } else { return true; } } else { return false; } } /** * 判断航班是否正在登机中 * @param flight * @return */ public isBoading(flight) { if (this.isLinked(flight) || this.isDeptFlight(flight)) { if (flight['reaFlight']['BOTM'] && !flight['reaFlight']['GCTM']) { return true; } else { return false; } } else { return false; } } /** * 判断航班是否登机结束 * @param flight * @return */ public isOverBoading(flight) { if (this.isLinked(flight) || this.isDeptFlight(flight)) { if (!flight['GCTM']) { return false; } else { return true; } } else { return false; } } }