import { Component, OnInit } from '@angular/core'; import { HttpClientService } from '../../services/http-client.service'; import { BasicDataService } from '../basic-data-service'; import { ChangeDetectorRef } from '@angular/core'; import * as $ from 'jquery'; @Component({ selector: 'app-seasonal-plan', templateUrl: './seasonal-plan.component.html', styleUrls: ['./seasonal-plan.component.scss'] }) export class SeasonalPlanComponent implements OnInit { constructor( private httpCilent: HttpClientService, private basicDataService: BasicDataService, private changeDetectorRef: ChangeDetectorRef ) { } //勾选复选框 public checkboxGroup = { 'related': false, 'detail': false } //选择列名 public col_lists = [ { col_code: 'flightNumber', col_chn: '航班号' }, { col_code: 'seasonRecId', col_chn: '航班季度' }, { col_code: 'internationalCode', col_chn: '国际代码' }, { col_code: 'airlineChnName', col_chn: '航空公司' }, { col_code: 'routeType', col_chn: '航线类别' }, { col_code: 'flightTypeCode', col_chn: '航班类别' }, { col_code: 'flightTask', col_chn: '航班任务' }, { col_code: 'operationDays', col_chn: '运营日' }, { col_code: 'startDate', col_chn: '开始日期' }, { col_code: 'endDate', col_chn: '结束日期' }, { col_code: 'startAirport', col_chn: '航线' }, { col_code: 'arriOrDept', col_chn: '进/出港' }, { col_code: 'arrivalTime', col_chn: '到达时间' }, { col_code: 'departureTime', col_chn: '出发时间' }, { col_code: 'aircraftTypeCode', col_chn: '机型' }, { col_code: 'flyingDistance', col_chn: '飞行距离(千米)' }, { col_code: 'flyingTime', col_chn: '飞行时间(分钟)' }, ] // 搜索条件 SEARCH = ''; //手动输入条件 FLT_POS = 1; //过滤还是定位 SEL_COL = ''; //选择列名 public filterItems = { airlineId: '', //航空公司 routeType: '', //航线类别 flightTypeCode: '', //航班类别 arriOrDept: '', //到达/出发 flightTask: '', //航班任务 } public tabClose: boolean = true; seasonals : Array; airlines : Array; //航空公司 aircraftTypes : Array; //机型 public row_state: any = { renderFlight: {} }; public render_data: Array = []; //显示数据,即需要显示的数据 public return_data: Array = []; //下拉框显示数据 ngOnInit() { /* 获取季度计划信息 */ this.httpCilent.get('/adminapi/schedule/flightSchdSeasons').subscribe( data => { this.seasonals = data.body; this.render_data = this.seasonals; if(this.airlines && this.airlines.length > 0){//航空公司列表数据转换 this.basicDataTransHandle(); } if(this.aircraftTypes && this.aircraftTypes.length > 0){//机型列表数据转换 this.aircraftTypesHandle(); } this.render_data.forEach(element => {//航线类别列表显示数据转换 if (element['routeType'] == 'D') { element['routeType'] = '国内' return element['routeType']; } if(element['routeType'] == 'I'){ element['routeType'] = '国际' return element['routeType']; } if(element['routeType'] == 'M'){ element['routeType'] = '混合' return element['routeType']; } if(element['routeType'] = 'R'){ element['routeType'] = '地区' return element['routeType']; } }); this.render_data.forEach(item => {//到达/出发列表显示数据转换 if(item['arriOrDept'] == 'A'){ item['arriOrDept'] = '到达' return item['arriOrDept'] } if(item['arriOrDept'] == 'D'){ item['arriOrDept'] = '出发' return item['arriOrDept'] } }); this.render_data.forEach(item => {//航班类别列表显示数据转换 if(item['flightTypeCode'] == 'P'){ item['flightTypeCode'] = '客机' return item['flightTypeCode'] } if(item['flightTypeCode'] == 'F'){ item['flightTypeCode'] = '货机' return item['flightTypeCode'] } if(item['flightTypeCode'] == 'B'){ item['flightTypeCode'] = '专机' return item['flightTypeCode'] } if(item['flightTypeCode'] == 'O'){ item['flightTypeCode'] = '公务机' return item['flightTypeCode'] } if(item['flightTypeCode'] == 'M'){ item['flightTypeCode'] = '军机' return item['flightTypeCode'] } if(item['flightTypeCode'] == 'X'){ item['flightTypeCode'] = '其他' return item['flightTypeCode'] } }); this.render_data.forEach(item => {//航班任务列表显示数据转换 if(item['flightTask'] == 'S'){ item['flightTask'] = '正班' return item['flightTask'] } if(item['flightTask'] == 'N'){ item['flightTask'] = '包机' return item['flightTask'] } if(item['flightTask'] == 'E'){ item['flightTask'] = '急救' return item['flightTask'] } if(item['flightTask'] == 'B'){ item['flightTask'] = '专机' return item['flightTask'] } if(item['flightTask'] == 'G'){ item['flightTask'] = '通用' return item['flightTask'] } if(item['flightTask'] == 'J'){ item['flightTask'] = '加班' return item['flightTask'] } if(item['flightTask'] == 'M'){ item['flightTask'] = '军用' return item['flightTask'] } if(item['flightTask'] == 'Q'){ item['flightTask'] = '补班' return item['flightTask'] } if(item['flightTask'] == 'X'){ item['flightTask'] = '其他' return item['flightTask'] } if(item['flightTask'] == 'A'){ item['flightTask'] = '计划外' return item['flightTask'] } }); } ) //航空公司 this.airlines = this.basicDataService.airline; this.basicDataService.airline_subject.subscribe( data=>{ this.airlines = data; } ) //机型 this.aircraftTypes = this.basicDataService.aircraft_type; this.basicDataService.aircraft_type_subject.subscribe( data => { this.aircraftTypes = data; } ) /** * 固定表头 */ var tableCont = document.querySelector('#table-container'); function scrollHandle (){ var scrollTop = this.scrollTop; this.querySelector('thead').style.transform = 'translateY(' + scrollTop + 'px)'; } tableCont.addEventListener('scroll',scrollHandle); } //航空公司名称数据转换处理 basicDataTransHandle() { this.render_data.forEach(item => { let airlineLinkIndex = this.airlines.findIndex(val => val.airlineId === item['airlineId']); if(this.airlines[airlineLinkIndex]){ item['airlineChnName'] = this.airlines[airlineLinkIndex].airlineName; } }) } //机型数据转换处理 aircraftTypesHandle() { this.render_data.forEach(item => { let aircraftTypesLinkIndex = this.aircraftTypes.findIndex(val => val.aircraftTypeCode === item['aircraftTypeCode']); if(this.aircraftTypes[aircraftTypesLinkIndex]){ item['aircraftTypeName'] = this.aircraftTypes[aircraftTypesLinkIndex].aircraftTypeName; } }) } /** * 复选框勾选事件 */ checkboxChange() { for (const key in this.checkboxGroup) { if (this.checkboxGroup.hasOwnProperty(key)) { if (this.checkboxGroup[key]) { this.tabClose = false; break; } else { this.tabClose = true; continue; } } } } /** * tab项切换事件 */ nzClick() { } /** * 刷新 */ refresh() { this.render_data.reverse(); } /** * 选中某行 * @param i */ selectRow(i) { this.row_state = i; } //输入框回车事件 inputEnter() { if (this.FLT_POS === 1) { this.selectChange() } else { this.inputPosition(this.render_data) } } //下拉框选择筛选 selectChange() { this.return_data = this.seasonals.filter(item=>{ let is_satis = true; if(item['routeType'] == '国内'){ item['routeType'] = 'D' } if(item['routeType'] == '国际'){ item['routeType'] = 'I' } if(item['routeType'] == '混合'){ item['routeType'] = 'M' } if(item['routeType'] == '地区'){ item['routeType'] = 'R' } //到达/出发 if(item['arriOrDept'] == '到达'){ item['arriOrDept'] = 'A' } if(item['arriOrDept'] == '出发'){ item['arriOrDept'] = 'D' } //航班类别 if(item['flightTypeCode'] == '客机'){ item['flightTypeCode'] = 'P' } if(item['flightTypeCode'] == '货机'){ item['flightTypeCode'] = 'F' } if(item['flightTypeCode'] == '专机'){ item['flightTypeCode'] = 'B' } if(item['flightTypeCode'] == '公务机'){ item['flightTypeCode'] = 'O' } if(item['flightTypeCode'] == '军机'){ item['flightTypeCode'] = 'M' } if(item['flightTypeCode'] == '其他'){ item['flightTypeCode'] = 'X' } //航班任务 if(item['flightTask'] == '正班'){ item['flightTask'] = 'S' } if(item['flightTask'] == '包机'){ item['flightTask'] = 'N' } if(item['flightTask'] == '急救'){ item['flightTask'] = 'E' } if(item['flightTask'] == '专机'){ item['flightTask'] = 'B' } if(item['flightTask'] == '通用'){ item['flightTask'] = 'G' } if(item['flightTask'] == '加班'){ item['flightTask'] = 'J' } if(item['flightTask'] == '军用'){ item['flightTask'] = 'M' } if(item['flightTask'] == '补班'){ item['flightTask'] = 'Q' } if(item['flightTask'] == '其他'){ item['flightTask'] = 'X' } if(item['flightTask'] == '计划外'){ item['flightTask'] = 'A' } for (const key in this.filterItems) { if (this.filterItems.hasOwnProperty(key) && this.filterItems[key]) { if (item[key] == this.filterItems[key]) { is_satis = true; continue; } else { is_satis = false; break; } } } return is_satis; }) this.return_data.forEach(element => {//航线类别列表显示数据转换 if (element['routeType'] == 'D') { element['routeType'] = '国内' return element['routeType']; } if(element['routeType'] == 'I'){ element['routeType'] = '国际' return element['routeType']; } if(element['routeType'] == 'M'){ element['routeType'] = '混合' return element['routeType']; } if(element['routeType'] == 'R'){ element['routeType'] = '地区' return element['routeType']; } }); this.return_data.forEach(item => {//到达/出发列表显示数据转换 if(item['arriOrDept'] == 'A'){ item['arriOrDept'] = '到达' return item['arriOrDept'] } if(item['arriOrDept'] == 'D'){ item['arriOrDept'] = '出发' return item['arriOrDept'] } }); this.return_data.forEach(item => {//航班类别列表显示数据转换 if(item['flightTypeCode'] == 'P'){ item['flightTypeCode'] = '客机' return item['flightTypeCode'] } if(item['flightTypeCode'] == 'F'){ item['flightTypeCode'] = '货机' return item['flightTypeCode'] } if(item['flightTypeCode'] == 'B'){ item['flightTypeCode'] = '专机' return item['flightTypeCode'] } if(item['flightTypeCode'] == 'O'){ item['flightTypeCode'] = '公务机' return item['flightTypeCode'] } if(item['flightTypeCode'] == 'M'){ item['flightTypeCode'] = '军机' return item['flightTypeCode'] } if(item['flightTypeCode'] == 'X'){ item['flightTypeCode'] = '其他' return item['flightTypeCode'] } }); this.return_data.forEach(item => {//航班任务列表显示数据转换 if(item['flightTask'] == 'S'){ item['flightTask'] = '正班' return item['flightTask'] } if(item['flightTask'] == 'N'){ item['flightTask'] = '包机' return item['flightTask'] } if(item['flightTask'] == 'E'){ item['flightTask'] = '急救' return item['flightTask'] } if(item['flightTask'] == 'B'){ item['flightTask'] = '专机' return item['flightTask'] } if(item['flightTask'] == 'G'){ item['flightTask'] = '通用' return item['flightTask'] } if(item['flightTask'] == 'J'){ item['flightTask'] = '加班' return item['flightTask'] } if(item['flightTask'] == 'M'){ item['flightTask'] = '军用' return item['flightTask'] } if(item['flightTask'] == 'Q'){ item['flightTask'] = '补班' return item['flightTask'] } if(item['flightTask'] == 'X'){ item['flightTask'] = '其他' return item['flightTask'] } if(item['flightTask'] == 'A'){ item['flightTask'] = '计划外' return item['flightTask'] } }); this.render_data = this.return_data; if (this.FLT_POS === 1) { this.inputFilter(this.render_data); } else { this.row_state = this.render_data.length > 0 ? this.render_data[0] : { renderFlight: {} }; } } //输入框筛选 inputFilter(filterData) { if (this.SEARCH) { if (this.SEL_COL) { let sel_col = this.SEL_COL; this.render_data = filterData.filter(item => { if (item[sel_col]) { if (item[sel_col].toString().match(new RegExp(this.SEARCH, 'i'))) { return true; } } else { return false; } }) } else { this.render_data = filterData.filter(item => { let is_satis = false; let cols = this.col_lists; for (let i = 0; i < cols.length; i++) { if (item[cols[i].col_code]) { if (item[cols[i].col_code].toString().match(new RegExp(this.SEARCH, 'i'))) { is_satis = true; break; } else { is_satis = false; continue; } } else { is_satis = false; continue; } } return is_satis; }) } } else { this.render_data = filterData; } } positionArray: Array = []; positionArrayIndex: number = 0; //输入框定位 inputPosition(filterData) { let transArray = [] if (this.SEL_COL) { let sel_col = this.SEL_COL; filterData.forEach(element => { if (element[sel_col]) { if (element[sel_col].toString().match(new RegExp(this.SEARCH, 'i'))) { transArray.push(element) } } else { if (!this.SEARCH) { transArray.push(element) } } }); } else { filterData.forEach(element => { let cols = this.col_lists; for (let i = 0; i < cols.length; i++) { if (element[cols[i].col_code]) { if (element[cols[i].col_code].toString().match(new RegExp(this.SEARCH, 'i'))) { transArray.push(element) break; } else { continue; } } else { if (this.SEARCH) { continue; } else { transArray.push(element) break; } } } }); } if (transArray.length > 0) { if (transArray.toString() == this.positionArray.toString()) { this.positionArrayIndex++; if (this.positionArrayIndex === this.positionArray.length) { this.positionArrayIndex = 0; } this.row_state = this.positionArray[this.positionArrayIndex]; } else { this.positionArray = transArray; this.positionArrayIndex = 0; this.row_state = this.positionArray[this.positionArrayIndex]; } } else { alert('没有搜索到相关数据'); } this.changeDetectorRef.detectChanges(); let tr = $(".selected"); let objTr = tr[0]; if (objTr) { $("#table-container").animate({ scrollTop: objTr.offsetTop - 42 }, "slow"); } } }